Author: tchemit Date: 2013-03-24 00:46:38 +0100 (Sun, 24 Mar 2013) New Revision: 669 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/669 Log: refs #2056: [TECH] Am?\195?\169liorer le processus de mise ?\195?\160 jour de l'application amelioration api d'action Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionHelper.java Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiHelpBroker.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateApplicationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportAndCleanDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/InstallDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/CancelEditFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/CancelEditCatchBatchAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiUIAction.java Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java 2013-03-23 23:46:38 UTC (rev 669) @@ -24,19 +24,16 @@ * #L% */ -import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; import fr.ifremer.tutti.ui.swing.content.MainUI; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import fr.ifremer.tutti.ui.swing.content.UpdateApplicationAction; import fr.ifremer.tutti.ui.swing.util.TuttiExceptionHandler; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; -import fr.ifremer.tutti.ui.swing.util.action.TuttiUIAction; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import jaxx.runtime.SwingUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.plaf.BorderUIResource; import java.awt.Color; @@ -71,7 +68,7 @@ new TuttiApplicationConfig("tutti.config", args); // Create application context - final TuttiUIContext context = TuttiUIContext.newContext(config); + TuttiUIContext context = TuttiUIContext.newContext(config); // prepare context (mainly init configs, i18n) context.init(); @@ -96,30 +93,8 @@ } // try to update jre - i18n - application - help and exit if so - MainUIHandler handler = new MainUIHandler(context); - AbstractTuttiAction.runAction(new UpdateApplicationAction(handler)); - - //FIXME-TC Msut use this later (version 1.2) -// try { -// SwingUtilities.invokeAndWait( -// new Runnable() { -// @Override -// public void run() { -// -// TuttiUIAction<UpdateApplicationAction> uiAction = -// handler.createUIAction(null, UpdateApplicationAction.class); -// uiAction.actionPerformed(null); -// if (log.isInfoEnabled()) { -// log.info("After action."); -// } -// } -// } -// ); -// } catch (Exception e) { -// throw new TuttiTechnicalException("Could not update application", e); -// } - - + TuttiActionHelper.runActionAndWait(new MainUIHandler(context), + UpdateApplicationAction.class); } if (log.isInfoEnabled()) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiHelpBroker.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiHelpBroker.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiHelpBroker.java 2013-03-23 23:46:38 UTC (rev 669) @@ -24,6 +24,7 @@ * #L% */ +import com.google.common.base.Preconditions; import jaxx.runtime.JAXXObject; import jaxx.runtime.SwingUtil; import jaxx.runtime.awt.visitor.BuildTreeVisitor; @@ -60,9 +61,7 @@ @Override public void prepareUI(JAXXObject c) { - if (c == null) { - throw new NullPointerException("parameter c can not be null!"); - } + Preconditions.checkNotNull(c, "parameter c can not be null!"); // l'ui doit avoir un boutton showHelp AbstractButton help = getShowHelpButton(c); @@ -91,8 +90,10 @@ @Override public String findHelpId(Component comp) { - JAXXHelpUI parentContainer = SwingUtil.getParent(comp, - JAXXHelpUI.class); + if (comp == null) { + comp = TuttiUIContext.getApplicationContext().getMainUI(); + } + JAXXHelpUI parentContainer = SwingUtil.getParent(comp, JAXXHelpUI.class); String result; if (parentContainer != null && this != parentContainer.getBroker()) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-03-23 23:46:38 UTC (rev 669) @@ -50,6 +50,7 @@ import fr.ifremer.tutti.ui.swing.util.RemoveablePropertyChangeListener; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionUI; import fr.ifremer.tutti.ui.swing.util.action.TuttiUIAction; import jaxx.runtime.SwingUtil; @@ -188,7 +189,7 @@ // db already opened (happens when reloading ui) // just go to select cruise screen - TuttiUIAction<SelectCruiseAction> uiAction = createUIAction(null, SelectCruiseAction.class); + TuttiUIAction<SelectCruiseAction> uiAction = TuttiActionHelper.createUIAction(this, SelectCruiseAction.class); SelectCruiseAction logicAction = uiAction.getLogicAction(); logicAction.setSkipCheckCurrentScreen(true); logicAction.setActionDescription(ui.getMenuActionSelectCruise().getToolTipText()); @@ -199,7 +200,7 @@ if (context.isDbExist()) { // open tutti db (using a fake button to have simple api) - TuttiUIAction<OpenDbAction> uiAction = createUIAction(null, OpenDbAction.class); + TuttiUIAction<OpenDbAction> uiAction = TuttiActionHelper.createUIAction(this, OpenDbAction.class); OpenDbAction logicAction = uiAction.getLogicAction(); logicAction.setSkipCheckCurrentScreen(true); uiAction.actionPerformed(null); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateApplicationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateApplicationAction.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateApplicationAction.java 2013-03-23 23:46:38 UTC (rev 669) @@ -36,6 +36,8 @@ import java.io.File; +import static org.nuiton.i18n.I18n._; + /** * To update jre / i18n or tutti using the {@link ApplicationUpdater} mecanism. * @@ -50,6 +52,7 @@ public UpdateApplicationAction(MainUIHandler handler) { super(handler, true); + setActionDescription(_("tutti.main.action.updateApplication.tip")); } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java 2013-03-23 23:46:38 UTC (rev 669) @@ -34,6 +34,7 @@ import fr.ifremer.tutti.ui.swing.content.ReloadTuttiAction; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUI; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import fr.ifremer.tutti.ui.swing.util.action.TuttiUIAction; import fr.ifremer.tutti.ui.swing.util.editor.VesselTableCell; import jaxx.runtime.SwingUtil; @@ -190,10 +191,9 @@ @Override public void run() { - TuttiUIAction<GoToPreviousScreenAction> action = - getContext().getMainUI().getHandler().createUIAction( - null, GoToPreviousScreenAction.class); - action.actionPerformed(null); + TuttiActionHelper.runAction( + getContext().getMainUI().getHandler(), GoToPreviousScreenAction.class); + } }); ConfigUI configUI = helper.buildUI( @@ -215,7 +215,8 @@ MainUIHandler handler = getContext().getMainUI().getHandler(); TuttiUIAction<ReloadTuttiAction> action = - handler.createUIAction(null, ReloadTuttiAction.class); + TuttiActionHelper.createUIAction(handler, ReloadTuttiAction.class); + action.launchActionAndWait(); action.actionPerformed(null); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportAndCleanDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportAndCleanDbAction.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportAndCleanDbAction.java 2013-03-23 23:46:38 UTC (rev 669) @@ -32,6 +32,7 @@ import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -103,8 +104,9 @@ progressionModel.setMessage("Fermeture de la base courante"); - runAction(getHandler().createLogicAction(CloseDbAction.class)); + TuttiActionHelper.runAction(getHandler(), CloseDbAction.class); + PersistenceService persistenceService = getContext().getPersistenceService(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java 2013-03-23 23:46:38 UTC (rev 669) @@ -30,6 +30,7 @@ import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -108,7 +109,7 @@ progressionModel.increments(1); progressionModel.setMessage("Ouverture de la base de données"); - runAction(getHandler().createLogicAction(OpenDbAction.class)); + TuttiActionHelper.runAction(getHandler(), OpenDbAction.class); } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/InstallDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/InstallDbAction.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/InstallDbAction.java 2013-03-23 23:46:38 UTC (rev 669) @@ -30,6 +30,7 @@ import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.updater.ApplicationUpdater; @@ -82,7 +83,7 @@ getContext().setDbExist(true); // open db - runAction(getHandler().createLogicAction(OpenDbAction.class)); + TuttiActionHelper.runAction(getHandler(), OpenDbAction.class); } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java 2013-03-23 23:46:38 UTC (rev 669) @@ -31,6 +31,7 @@ import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUI; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections.CollectionUtils; @@ -174,7 +175,7 @@ boolean noProgram = newValue == null; context.setProgramId(noProgram ? null : newValue.getId()); if (log.isInfoEnabled()) { - log.info("Selected program: "+newValue); + log.info("Selected program: " + newValue); } List<Cruise> cruises; if (noProgram) { @@ -252,7 +253,7 @@ public void startExistingProtocolAction(MouseEvent event) { JComboBox existingProtocolCombo = (JComboBox) event.getSource(); - doAction((AbstractButton) existingProtocolCombo.getItemAt(0), null); + TuttiActionHelper.runAction((AbstractButton) existingProtocolCombo.getItemAt(0)); } public void startExistingProtocolAction(ActionEvent event) { @@ -265,13 +266,13 @@ // (see http://forge.codelutin.com/issues/2032) existingProtocolCombo.setSelectedIndex(0); existingProtocolCombo.hidePopup(); - doAction(selectedAction, event); + TuttiActionHelper.runAction(selectedAction); } } public void startNewProtocolAction(MouseEvent event) { JComboBox newProtocolCombo = (JComboBox) event.getSource(); - doAction((AbstractButton) newProtocolCombo.getItemAt(0), null); + TuttiActionHelper.runAction((AbstractButton) newProtocolCombo.getItemAt(0)); } public void startNewProtocolAction(ActionEvent event) { @@ -283,6 +284,6 @@ // (see http://forge.codelutin.com/issues/2032) newProtocolCombo.setSelectedIndex(0); newProtocolCombo.hidePopup(); - doAction(selectedAction, event); + TuttiActionHelper.runAction(selectedAction); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/CancelEditFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/CancelEditFishingOperationAction.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/CancelEditFishingOperationAction.java 2013-03-23 23:46:38 UTC (rev 669) @@ -26,6 +26,7 @@ */ import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -53,7 +54,8 @@ public EditFishingOperationAction getEditAction() { if (editAction == null) { - editAction = getHandler().getParentUi().getHandler().createLogicAction( + editAction = TuttiActionHelper.createLogicAction( + getHandler().getParentUi().getHandler(), EditFishingOperationAction.class); } return editAction; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-03-23 23:46:38 UTC (rev 669) @@ -46,6 +46,7 @@ import fr.ifremer.tutti.ui.swing.util.TabHandler; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections.CollectionUtils; @@ -347,7 +348,7 @@ public void propertyChange(PropertyChangeEvent evt) { JButton button = ui.getCancelButton(); CancelEditFishingOperationAction action = - getLogicAction(button); + TuttiActionHelper.getLogicAction(button); if (evt.getNewValue() == null) { button.setText(_("tutti.editFishingOperation.action.cancelEditFishingOperation")); button.setToolTipText(_("tutti.editFishingOperation.action.cancelEditFishingOperation.tip")); @@ -408,12 +409,12 @@ ActionEvent event = new ActionEvent(this, newIndex, null); switch (answer) { case JOptionPane.OK_OPTION: - doAction(ui.getSaveButton(), event); + TuttiActionHelper.runAction(ui.getSaveButton()); result = true; break; case JOptionPane.NO_OPTION: - doAction(ui.getCancelButton(), event); + TuttiActionHelper.runAction(ui.getCancelButton()); result = true; break; default: @@ -430,8 +431,7 @@ if (result) { // ok will revert any modification - ActionEvent event = new ActionEvent(this, newIndex, null); - doAction(ui.getCancelButton(), event); + TuttiActionHelper.runAction(ui.getCancelButton()); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-03-23 23:46:38 UTC (rev 669) @@ -34,6 +34,7 @@ import fr.ifremer.tutti.ui.swing.util.CloseableUI; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -114,7 +115,7 @@ initUI(ui); editFishingOperationAction = - createLogicAction(EditFishingOperationAction.class); + TuttiActionHelper.createLogicAction(this, EditFishingOperationAction.class); FishingOperationsUIModel model = getModel(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/CancelEditCatchBatchAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/CancelEditCatchBatchAction.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/CancelEditCatchBatchAction.java 2013-03-23 23:46:38 UTC (rev 669) @@ -29,6 +29,7 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationAction; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -59,7 +60,8 @@ public EditFishingOperationAction getEditAction() { if (editAction == null) { - editAction = getHandler().getParentHandler().createLogicAction(EditFishingOperationAction.class); + editAction = TuttiActionHelper.createLogicAction( getHandler().getParentHandler(), + EditFishingOperationAction.class); } return editAction; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-03-23 23:46:38 UTC (rev 669) @@ -33,6 +33,7 @@ import fr.ifremer.tutti.ui.swing.util.TabHandler; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiUI; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import jaxx.runtime.swing.CardLayout2Ext; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; @@ -42,7 +43,6 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTabbedPane; -import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Set; @@ -204,7 +204,7 @@ case JOptionPane.OK_OPTION: // persist catch batch - doAction(getUI().getSaveButton(), null); + TuttiActionHelper.runAction(getUI().getSaveButton()); result = true; break; @@ -215,7 +215,7 @@ // so since we will edit a new operation, nothing to do here // persist catch batch - doAction(getUI().getCancelButton(), null); + TuttiActionHelper.runAction(getUI().getCancelButton()); result = true; break; @@ -233,8 +233,7 @@ if (result) { // ok will revert any modification - ActionEvent event = new ActionEvent(this, newIndex, null); - doAction(ui.getCancelButton(), event); + TuttiActionHelper.runAction(ui.getCancelButton()); } } @@ -350,7 +349,7 @@ } } } - + public void selectCatchTotalSortedWeightPanel(Vessel vessel) { String card; String carousselTremieVesselId = getConfig().getTremieCarousselVesselId(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-03-23 23:46:38 UTC (rev 669) @@ -27,19 +27,17 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import fr.ifremer.tutti.TuttiTechnicalException; +import fr.ifremer.tutti.LabelAware; import fr.ifremer.tutti.persistence.entities.IdAware; import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.LabelAware; import fr.ifremer.tutti.ui.swing.TuttiDataContext; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; -import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; import fr.ifremer.tutti.ui.swing.content.MainUI; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionUI; -import fr.ifremer.tutti.ui.swing.util.action.TuttiUIAction; import fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachment; import fr.ifremer.tutti.ui.swing.util.editor.SimpleTimeEditor; import jaxx.runtime.JAXXUtil; @@ -49,7 +47,6 @@ import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; import jaxx.runtime.swing.renderer.DecoratorListCellRenderer; import jaxx.runtime.validator.swing.SwingValidator; -import org.apache.commons.lang3.reflect.ConstructorUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXDatePicker; @@ -395,58 +392,58 @@ protected <A extends AbstractTuttiAction> void initAction(AbstractButton abstractButton, Class<A> actionName) { - Action action = createUIAction(abstractButton, actionName); + Action action = TuttiActionHelper.createUIAction(this, abstractButton, actionName); abstractButton.setAction(action); } - public <A extends AbstractTuttiAction> TuttiUIAction<A> createUIAction(AbstractButton abstractButton, - Class<A> actionName) { - try { +// public <A extends AbstractTuttiAction> TuttiUIAction<A> createUIAction(AbstractButton abstractButton, +// Class<A> actionName) { +// try { +// +// // create logic action +// A logicAction = createLogicAction(actionName); +// +// // create ui action +// TuttiUIAction<A> result = new TuttiUIAction<A>(abstractButton, +// logicAction); +// return result; +// } catch (Exception e) { +// throw new TuttiTechnicalException( +// "Could not instanciate action " + actionName, e); +// } +// +// } - // create logic action - A logicAction = createLogicAction(actionName); +// public <A extends AbstractTuttiAction> A createLogicAction(Class<A> actionName) { +// try { +// +// AbstractTuttiUIHandler handler = this; +// +// if (AbstractMainUITuttiAction.class.isAssignableFrom(actionName) && +// getContext().getMainUI() != null) { +// handler = getContext().getMainUI().getHandler(); +// } +// +// // create action +// A result = ConstructorUtils.invokeConstructor(actionName, handler); +// return result; +// } catch (Exception e) { +// throw new RuntimeException( +// "Could not instanciate action " + actionName, e); +// } +// } - // create ui action - TuttiUIAction<A> result = new TuttiUIAction<A>(abstractButton, - logicAction); - return result; - } catch (Exception e) { - throw new TuttiTechnicalException( - "Could not instanciate action " + actionName, e); - } +// public <A extends AbstractTuttiAction> A getLogicAction(AbstractButton b) { +// Action action = b.getAction(); +// Preconditions.checkNotNull(action); +// Preconditions.checkState(action instanceof TuttiUIAction); +// return ((TuttiUIAction<A>) action).getLogicAction(); +// } - } +// protected void doAction(AbstractButton button, ActionEvent event) { +// button.getAction().actionPerformed(event); +// } - public <A extends AbstractTuttiAction> A createLogicAction(Class<A> actionName) { - try { - - AbstractTuttiUIHandler handler = this; - - if (AbstractMainUITuttiAction.class.isAssignableFrom(actionName) && - getContext().getMainUI() != null) { - handler = getContext().getMainUI().getHandler(); - } - - // create action - A result = ConstructorUtils.invokeConstructor(actionName, handler); - return result; - } catch (Exception e) { - throw new RuntimeException( - "Could not instanciate action " + actionName, e); - } - } - - public <A extends AbstractTuttiAction> A getLogicAction(AbstractButton b) { - Action action = b.getAction(); - Preconditions.checkNotNull(action); - Preconditions.checkState(action instanceof TuttiUIAction); - return ((TuttiUIAction<A>) action).getLogicAction(); - } - - protected void doAction(AbstractButton button, ActionEvent event) { - button.getAction().actionPerformed(event); - } - protected boolean quitScreen(boolean modelIsValid, boolean modelIsModify, String askGiveUpMessage, Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionHelper.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionHelper.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionHelper.java 2013-03-23 23:46:38 UTC (rev 669) @@ -0,0 +1,103 @@ +package fr.ifremer.tutti.ui.swing.util.action; + +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.TuttiTechnicalException; +import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import org.apache.commons.lang3.reflect.ConstructorUtils; + +import javax.swing.AbstractButton; +import javax.swing.Action; +import java.awt.event.ActionEvent; + +/** + * Useful method around TuttiUIAction. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public class TuttiActionHelper { + + public static <A extends AbstractTuttiAction> void runAction(AbstractTuttiUIHandler handler, + Class<A> actionName) { + Throwable error = null; + + A action = createLogicAction(handler, actionName); + try { + action.doAction(); + action.postSuccessAction(); + } catch (Throwable e) { + error = e; + throw TuttiActionException.propagateError(action, e); + } finally { + if (error != null) { + action.postFailedAction(error); + } + action.releaseAction(); + } + } + + public static void runAction(AbstractButton button) { + button.getAction().actionPerformed(null); + } + + public static <A extends AbstractTuttiAction> TuttiUIAction<A> runActionAndWait(AbstractTuttiUIHandler handler, + Class<A> actionName) { + TuttiUIAction<A> uiAction = createUIAction(handler, null, actionName); + uiAction.launchActionAndWait(); + return uiAction; + + } + + + public static <A extends AbstractTuttiAction> TuttiUIAction<A> createUIAction(AbstractTuttiUIHandler handler, + Class<A> actionName) { + return createUIAction(handler, null,actionName); + + } + + + public static <A extends AbstractTuttiAction> TuttiUIAction<A> createUIAction(AbstractTuttiUIHandler handler, + AbstractButton abstractButton, + Class<A> actionName) { + try { + + // create logic action + A logicAction = createLogicAction(handler, actionName); + + // create ui action + TuttiUIAction<A> result = new TuttiUIAction<A>(abstractButton, + logicAction); + return result; + } catch (Exception e) { + throw new TuttiTechnicalException( + "Could not instanciate action " + actionName, e); + } + + } + + public static <A extends AbstractTuttiAction> A createLogicAction(AbstractTuttiUIHandler handler, + Class<A> actionName) { + try { + + if (AbstractMainUITuttiAction.class.isAssignableFrom(actionName) && + handler.getContext().getMainUI() != null) { + handler = handler.getContext().getMainUI().getHandler(); + } + + // create action + A result = ConstructorUtils.invokeConstructor(actionName, handler); + return result; + } catch (Exception e) { + throw new RuntimeException( + "Could not instanciate action " + actionName, e); + } + } + + public static <A extends AbstractTuttiAction> A getLogicAction(AbstractButton b) { + Action action = b.getAction(); + Preconditions.checkNotNull(action); + Preconditions.checkState(action instanceof TuttiUIAction); + return ((TuttiUIAction<A>) action).getLogicAction(); + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionHelper.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiUIAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiUIAction.java 2013-03-23 19:21:10 UTC (rev 668) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiUIAction.java 2013-03-23 23:46:38 UTC (rev 669) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.entities.referential.ObjectType; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -55,6 +56,10 @@ private static final String LOGIC_ACTION = "logicAction"; + private final Object lock = new ObjectType(); + + private boolean wait; + public TuttiUIAction(AbstractButton button, A action) { putValue(LOGIC_ACTION, action); @@ -69,6 +74,13 @@ } } + public void launchActionAndWait() { + wait = true; + actionPerformed(null); + lock(); + } + + @Override public final void actionPerformed(final ActionEvent event) { @@ -120,24 +132,26 @@ public void run() { A action = getLogicAction(); - try { - worker.get(); - } catch (ExecutionException e) { - // don't care . - } catch (CancellationException e) { - // dont care ? + try { + worker.get(); + } catch (ExecutionException e) { + // don't care . + } catch (CancellationException e) { + // dont care ? + } catch (InterruptedException e) { + // don't care ? + } + if (log.isInfoEnabled()) { + log.info("After execute of action " + action + " (worker done? " + worker.isDone() + ")"); + } - } catch (InterruptedException e) { - // don't care ? - } - if (log.isInfoEnabled()) { - log.info("After execute of action " + action + " (worker done? " + worker.isDone() + ")"); - } + if (worker.isFailed()) { - if (worker.isFailed()) { - - throw TuttiActionException.propagateError(action, worker.getError()); + throw TuttiActionException.propagateError(action, worker.getError()); + } + } finally { + unlock(); } } } @@ -145,8 +159,13 @@ } else { - // release action - action.releaseAction(); + try { + // release action + action.releaseAction(); + + } finally { + unlock(); + } } } @@ -176,4 +195,27 @@ return (A) getValue(LOGIC_ACTION); } + protected void lock() { + if (wait) { + synchronized (lock) { + try { + + lock.wait(); + + } catch (InterruptedException e) { + throw TuttiActionException.propagateError(getLogicAction(), e); + } finally { + wait = false; + } + } + } + } + + protected void unlock() { + if (wait) { + synchronized (lock) { + lock.notifyAll(); + } + } + } }