Author: tchemit Date: 2013-03-06 18:24:40 +0100 (Wed, 06 Mar 2013) New Revision: 554 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/554 Log: refs #2075: [TECH] Action longue (probl?\195?\168me de cin?\195?\169matique) (revue des actions qui changent d'?\195?\169cran) Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CloseableUI.java Modified: trunk/tutti-ui-swing/ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/AbstractChangeScreenAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedCruiseAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedCruiseCatchesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedProgramAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ImportTemporaryReferentialAction.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/ManageDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/SelectCruiseAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ValidateSelectedCruiseCatchesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/CancelEditCruiseAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/CloseDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/CloneProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCatchesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCruiseAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProgramAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewCruiseAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProgramAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.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/program/CancelEditProgramAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CancelEditProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SaveProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SelectOtherSpeciesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Property changes on: trunk/tutti-ui-swing ___________________________________________________________________ Modified: svn:ignore - target .idea *.ipr *.iws *.iml .project .classpath .settings tutti.config *.log + target .idea *.ipr *.iws *.iml .project .classpath .settings tutti.config *.log data Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java 2013-03-06 17:24:40 UTC (rev 554) @@ -68,13 +68,6 @@ EDIT_PROTOCOL, /** - * To clone a protocol. - * - * @since 0.4 - */ - CLONE_PROTOCOL, - - /** * To open import temporary referential. * * @since 1.0 Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/AbstractChangeScreenAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/AbstractChangeScreenAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/AbstractChangeScreenAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -28,29 +28,40 @@ import fr.ifremer.tutti.ui.swing.TuttiScreen; /** - * Abstract action defining actions which sets the screen of the application. + * Action to change the screen. + * <p/> + * Will just check that the current screen can be quit via + * the {@link MainUIHandler#quitCurrentScreen()}. + * <p/> * * @author kmorin <kmorin@codelutin.com> * @since 1.0 */ public abstract class AbstractChangeScreenAction extends AbstractMainUITuttiAction { + protected final TuttiScreen screen; + protected AbstractChangeScreenAction(MainUIHandler handler, String icon, String text, String tip, - boolean hideBody) { + boolean hideBody, + TuttiScreen screen) { super(handler, icon, text, tip, hideBody); + this.screen = screen; } @Override protected boolean prepareAction() { boolean result = super.prepareAction(); - result &= getHandler().getCurrentHandler().canCloseUI(getNextScreen()); + result &= getHandler().quitCurrentScreen(); return result; } - /** @return the next screen to display. */ - protected abstract TuttiScreen getNextScreen(); + @Override + protected void doAction() { + // change screen + getContext().setScreen(screen); + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedCruiseAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedCruiseAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedCruiseAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -40,15 +40,16 @@ public class EditSelectedCruiseAction extends AbstractChangeScreenAction { /** Logger. */ - private static final Log log = LogFactory.getLog(EditSelectedCruiseAction.class); + private static final Log log = + LogFactory.getLog(EditSelectedCruiseAction.class); public EditSelectedCruiseAction(MainUIHandler handler) { super(handler, "cruise", _("tutti.action.editSelectedCruise"), _("tutti.action.editSelectedCruise.tip"), - true - ); + true, + TuttiScreen.EDIT_CRUISE); } @Override @@ -57,11 +58,6 @@ if (log.isInfoEnabled()) { log.info("Edit cruise: " + getContext().getCruiseId()); } - getContext().setScreen(getNextScreen()); + super.doAction(); } - - @Override - protected TuttiScreen getNextScreen() { - return TuttiScreen.EDIT_CRUISE; - } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedCruiseCatchesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedCruiseCatchesAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedCruiseCatchesAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -27,6 +27,8 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import static org.nuiton.i18n.I18n._; @@ -38,27 +40,29 @@ */ public class EditSelectedCruiseCatchesAction extends AbstractChangeScreenAction { + /** Logger. */ + private static final Log log = + LogFactory.getLog(EditSelectedCruiseCatchesAction.class); + public EditSelectedCruiseCatchesAction(MainUIHandler handler) { super(handler, "edit", _("tutti.action.editCatches"), _("tutti.action.editCatches.tip"), - true - ); + true, + TuttiScreen.EDIT_FISHING_OPERATION); // setMnemonic('C'); } @Override protected void doAction() { Preconditions.checkState(getContext().isCruiseFilled()); + if (log.isInfoEnabled()) { + log.info("Edit catches of cruise: " + getContext().getCruiseId()); + } getContext().setValidationContext(TuttiUIContext.VALIDATION_CONTEXT_EDIT); getContext().setScreen(null); - getContext().setScreen(getNextScreen()); + super.doAction(); } - @Override - protected TuttiScreen getNextScreen() { - return TuttiScreen.EDIT_FISHING_OPERATION; - } - } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedProgramAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedProgramAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedProgramAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -47,22 +47,17 @@ "program", _("tutti.action.editSelectedProgram"), _("tutti.action.editSelectedProgram.tip"), - true - ); + true, + TuttiScreen.EDIT_PROGRAM); } @Override protected void doAction() { - Preconditions.checkState(getContext().getProgramId() != null); + Preconditions.checkState(getContext().isProgramFilled()); if (log.isInfoEnabled()) { log.info("Edit program: " + getContext().getProgramId()); } - getContext().setScreen(getNextScreen()); + super.doAction(); } - @Override - protected TuttiScreen getNextScreen() { - return TuttiScreen.EDIT_PROGRAM; - } - } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedProtocolAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedProtocolAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -47,8 +47,8 @@ "protocol", _("tutti.action.editSelectedProtocol"), _("tutti.action.editSelectedProtocol.tip"), - true - ); + true, + TuttiScreen.EDIT_PROTOCOL); // setMnemonic('P'); } @@ -58,12 +58,7 @@ if (log.isInfoEnabled()) { log.info("Edit protocol: " + getContext().getProtocolId()); } - getContext().setScreen(getNextScreen()); + super.doAction(); } - @Override - protected TuttiScreen getNextScreen() { - return TuttiScreen.EDIT_PROTOCOL; - } - } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ImportTemporaryReferentialAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ImportTemporaryReferentialAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ImportTemporaryReferentialAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -25,8 +25,6 @@ */ import fr.ifremer.tutti.ui.swing.TuttiScreen; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import javax.swing.SwingUtilities; @@ -40,22 +38,18 @@ */ public class ImportTemporaryReferentialAction extends AbstractChangeScreenAction { - /** Logger. */ - private static final Log log = - LogFactory.getLog(ImportTemporaryReferentialAction.class); - public ImportTemporaryReferentialAction(MainUIHandler handler) { super(handler, "temporary-referential-import", _("tutti.action.importTemporaryReferential"), _("tutti.action.importTemporaryReferential.tip"), - true - ); + true, + TuttiScreen.IMPORT_TEMPORARY_REFERENTIAL); } @Override protected void doAction() { - getContext().setScreen(getNextScreen()); + super.doAction(); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { @@ -64,9 +58,4 @@ }); } - - @Override - protected TuttiScreen getNextScreen() { - return TuttiScreen.IMPORT_TEMPORARY_REFERENTIAL; - } } 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-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-03-06 17:24:40 UTC (rev 554) @@ -42,6 +42,7 @@ import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.util.CloseableUI; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionUI; import fr.ifremer.tutti.ui.swing.util.action.TuttiUIAction; @@ -73,8 +74,6 @@ /** Logger. */ private static final Log log = LogFactory.getLog(MainUIHandler.class); - public static final String CLONE_PROTOCOL = "cloneProtocol"; - protected JComponent currentBody; protected PersistenceService persistenceService; @@ -277,6 +276,23 @@ ui.getValidatorMessageWidget().clearValidators(); } + public boolean quitCurrentScreen() { + + TuttiUI<?, ?> body = (TuttiUI<?, ?>) currentBody; + AbstractTuttiUIHandler<?, ?> handler = body.getHandler(); + boolean canClose; + if (handler instanceof CloseableUI) { + + // try to quit UI + canClose = ((CloseableUI) handler).quitUI(); + } else { + + // can always close ui + canClose = true; + } + return canClose; + } + public AbstractTuttiUIHandler getCurrentHandler() { TuttiUI<?, ?> body = (TuttiUI<?, ?>) currentBody; return body.getHandler(); @@ -383,13 +399,6 @@ icon = ui.getMenuActionEditProtocol().getIcon(); break; - case CLONE_PROTOCOL: - screenTitle = _("tutti.title.create.protocol"); - ui.setContextValue(true, CLONE_PROTOCOL); - screenUI = new EditProtocolUI(ui); - icon = ui.getMenuActionEditProtocol().getIcon(); - break; - case EDIT_FISHING_OPERATION: String validationContext = context.getValidationContext(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ManageDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ManageDbAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ManageDbAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -25,8 +25,6 @@ */ import fr.ifremer.tutti.ui.swing.TuttiScreen; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import static org.nuiton.i18n.I18n._; @@ -38,30 +36,14 @@ */ public class ManageDbAction extends AbstractChangeScreenAction { - /** Logger. */ - private static final Log log = LogFactory.getLog(ManageDbAction.class); - public ManageDbAction(MainUIHandler handler) { super(handler, "manage-db", _("tutti.action.manageDb"), _("tutti.action.manageDb.tip"), - true - ); + true, + TuttiScreen.MANAGE_DB); // setMnemonic('P'); } - @Override - protected void doAction() { - if (log.isDebugEnabled()) { - log.debug("open manage db screen"); - } - getContext().setScreen(getNextScreen()); - } - - @Override - protected TuttiScreen getNextScreen() { - return TuttiScreen.MANAGE_DB; - } - } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/SelectCruiseAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/SelectCruiseAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/SelectCruiseAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -41,19 +41,9 @@ "home", _("tutti.action.selectCruise"), _("tutti.action.selectCruise.tip"), - true - ); + true, + TuttiScreen.SELECT_CRUISE); // setMnemonic('S'); } - @Override - protected void doAction() { -// Preconditions.checkNotNull(getContext().isCruiseFilled()); - getContext().setScreen(getNextScreen()); - } - - @Override - protected TuttiScreen getNextScreen() { - return TuttiScreen.SELECT_CRUISE; - } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ValidateSelectedCruiseCatchesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ValidateSelectedCruiseCatchesAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ValidateSelectedCruiseCatchesAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -27,6 +27,8 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import static org.nuiton.i18n.I18n._; @@ -38,13 +40,17 @@ */ public class ValidateSelectedCruiseCatchesAction extends AbstractChangeScreenAction { + /** Logger. */ + private static final Log log = + LogFactory.getLog(ValidateSelectedCruiseCatchesAction.class); + public ValidateSelectedCruiseCatchesAction(MainUIHandler handler) { super(handler, "validate", _("tutti.action.validateCatches"), _("tutti.action.validateCatches.tip"), - true - ); + true, + TuttiScreen.EDIT_FISHING_OPERATION); } @Override @@ -52,11 +58,9 @@ Preconditions.checkState(getContext().isCruiseFilled()); getContext().setValidationContext(TuttiUIContext.VALIDATION_CONTEXT_VALIDATE); getContext().setScreen(null); - getContext().setScreen(getNextScreen()); + if (log.isInfoEnabled()) { + log.info("Validate catches of cruise: "+getContext().getCruiseId()); + } + super.doAction(); } - - @Override - protected TuttiScreen getNextScreen() { - return TuttiScreen.EDIT_FISHING_OPERATION; - } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/CancelEditCruiseAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/CancelEditCruiseAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/CancelEditCruiseAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -25,31 +25,27 @@ */ import fr.ifremer.tutti.ui.swing.TuttiScreen; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import static org.nuiton.i18n.I18n._; /** - * Cancels the edition of a cruise + * Cancels the edition of a cruise. * * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class CancelEditCruiseAction extends AbstractTuttiAction<EditCruiseUIModel, EditCruiseUI, EditCruiseUIHandler> { +public class CancelEditCruiseAction extends AbstractChangeScreenAction { - public CancelEditCruiseAction(EditCruiseUIHandler handler) { + public CancelEditCruiseAction(MainUIHandler handler) { super(handler, "cancel", _("tutti.action.cancel.editCruise"), _("tutti.action.cancel.editCruise.tip"), - true + true, + TuttiScreen.SELECT_CRUISE ); } - @Override - protected void doAction() { - - getContext().setScreen(TuttiScreen.SELECT_CRUISE); - } - } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-03-06 17:24:40 UTC (rev 554) @@ -33,15 +33,13 @@ import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.util.CloseableUI; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.JOptionPane; -import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; @@ -54,7 +52,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class EditCruiseUIHandler extends AbstractTuttiUIHandler<EditCruiseUIModel, EditCruiseUI> { +public class EditCruiseUIHandler extends AbstractTuttiUIHandler<EditCruiseUIModel, EditCruiseUI> implements CloseableUI { /** Logger. */ private static final Log log = LogFactory.getLog(EditCruiseUIHandler.class); @@ -228,16 +226,14 @@ } @Override - public boolean canCloseUI(TuttiScreen nextScreen) { - boolean result = true; - if (getModel().isModify()) { - int answer = askSaveBeforeLeaving(_("tutti.dialog.askSaveBeforeLeaving.saveCruise")); - result = answer == JOptionPane.NO_OPTION; - if (answer == JOptionPane.YES_OPTION) { - ActionEvent event = new ActionEvent(nextScreen, nextScreen.ordinal(), null); - doAction(ui.getSaveButton(), event); - } - } + public boolean quitUI() { + boolean result = quitScreen( + getModel().isValid(), + getModel().isModify(), + _("tutti.dialog.askCancelEditBeforeLeaving.saveCruise"), + _("tutti.dialog.askSaveBeforeLeaving.saveCruise"), + ui.getSaveButton().getAction() + ); return result; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/CloseDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/CloseDbAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/CloseDbAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -61,10 +61,16 @@ String jdbcUrl = TuttiPersistenceConfig.getInstance().getJdbcUrl(); + // clear all caches + getContext().getPersistenceService().clearAllCaches(); + + // set to not reload a real db getContext().setDbLoaded(false); + // close services + repon a fake persistence service getHandler().reloadPersistenceService(); + // clean db context getContext().clearDbContext(); // make sure title is reloaded Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/CloneProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/CloneProtocolAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/CloneProtocolAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -24,10 +24,12 @@ * #L% */ -import com.ezware.oxbow.swingbits.util.Preconditions; +import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.ui.swing.TuttiScreen; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import jaxx.runtime.context.JAXXContextEntryDef; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -39,28 +41,42 @@ * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class CloneProtocolAction extends AbstractTuttiAction<SelectCruiseUIModel, SelectCruiseUI, SelectCruiseUIHandler> { +public class CloneProtocolAction extends AbstractChangeScreenAction { /** Logger. */ private static final Log log = LogFactory.getLog(CloneProtocolAction.class); - public CloneProtocolAction(SelectCruiseUIHandler handler) { + public static final JAXXContextEntryDef<TuttiProtocol> CLONE_PROTOCOL_ENTRY = new JAXXContextEntryDef<TuttiProtocol>("cloneProtocol", TuttiProtocol.class); + + public CloneProtocolAction(MainUIHandler handler) { super(handler, "copy", _("tutti.action.cloneProtocol"), _("tutti.action.cloneProtocol.tip"), - true + true, + TuttiScreen.EDIT_PROTOCOL ); } @Override protected void doAction() { - TuttiProtocol protocol = getModel().getProtocol(); - Preconditions.checkNotNull(protocol); - if (log.isDebugEnabled()) { - log.debug("Clone protocol: " + protocol.getId()); + Preconditions.checkState(getContext().isProtocolFilled()); + if (log.isInfoEnabled()) { + log.info("Clone protocol: " + getContext().getProtocolId()); } - getContext().setProtocolId(protocol.getId()); - getContext().setScreen(TuttiScreen.CLONE_PROTOCOL); + + // get protocol + TuttiProtocol protocol = getContext().getPersistenceService().getProtocol(getContext().getProtocolId()); + + // remove id + protocol.setId(null); + + // store protocol in context + CLONE_PROTOCOL_ENTRY.setContextValue(getContext().getMainUI(), protocol); + + // removed selected protocol + getContext().setProtocolId(null); + + super.doAction(); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCatchesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCatchesAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCatchesAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -27,7 +27,10 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import static org.nuiton.i18n.I18n._; @@ -37,14 +40,18 @@ * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class EditCatchesAction extends AbstractTuttiAction<SelectCruiseUIModel, SelectCruiseUI, SelectCruiseUIHandler> { +public class EditCatchesAction extends AbstractChangeScreenAction { - public EditCatchesAction(SelectCruiseUIHandler handler) { + /** Logger. */ + private static final Log log = LogFactory.getLog(EditCatchesAction.class); + + public EditCatchesAction(MainUIHandler handler) { super(handler, "edit", _("tutti.action.editCatches"), _("tutti.action.editCatches.tip"), - true + true, + TuttiScreen.EDIT_FISHING_OPERATION ); } @@ -52,7 +59,10 @@ protected void doAction() { Preconditions.checkState(getContext().isProgramFilled()); Preconditions.checkState(getContext().isCruiseFilled()); + if (log.isInfoEnabled()) { + log.info("Edit catches of cruise: " + getContext().getCruiseId()); + } getContext().setValidationContext(TuttiUIContext.VALIDATION_CONTEXT_EDIT); - getContext().setScreen(TuttiScreen.EDIT_FISHING_OPERATION); + super.doAction(); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCruiseAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCruiseAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCruiseAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -25,9 +25,9 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.ui.swing.TuttiScreen; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import static org.nuiton.i18n.I18n._; @@ -37,22 +37,22 @@ * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class EditCruiseAction extends AbstractTuttiAction<SelectCruiseUIModel, SelectCruiseUI, SelectCruiseUIHandler> { +public class EditCruiseAction extends AbstractChangeScreenAction { - public EditCruiseAction(SelectCruiseUIHandler handler) { + public EditCruiseAction(MainUIHandler handler) { super(handler, "edit", _("tutti.action.editCruise"), _("tutti.action.editCruise.tip"), - true + true, + TuttiScreen.EDIT_CRUISE ); } @Override protected void doAction() { - Cruise cruise = getModel().getCruise(); - Preconditions.checkNotNull(cruise); - getContext().setCruiseId(cruise.getId()); - getContext().setScreen(TuttiScreen.EDIT_CRUISE); + Preconditions.checkState(getContext().isProgramFilled()); + Preconditions.checkState(getContext().isCruiseFilled()); + super.doAction(); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProgramAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProgramAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProgramAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -25,9 +25,11 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.ui.swing.TuttiScreen; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import static org.nuiton.i18n.I18n._; @@ -37,22 +39,27 @@ * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class EditProgramAction extends AbstractTuttiAction<SelectCruiseUIModel, SelectCruiseUI, SelectCruiseUIHandler> { +public class EditProgramAction extends AbstractChangeScreenAction { - public EditProgramAction(SelectCruiseUIHandler handler) { + /** Logger. */ + private static final Log log = LogFactory.getLog(EditProgramAction.class); + + public EditProgramAction(MainUIHandler handler) { super(handler, "edit", _("tutti.action.editProgram"), _("tutti.action.editProgram.tip"), - true + true, + TuttiScreen.EDIT_PROGRAM ); } @Override protected void doAction() { - Program program = getModel().getProgram(); - Preconditions.checkNotNull(program); - getContext().setProgramId(program.getId()); - getContext().setScreen(TuttiScreen.EDIT_PROGRAM); + Preconditions.checkState(getContext().isProgramFilled()); + if (log.isInfoEnabled()) { + log.info("Edit program: " + getContext().getProgramId()); + } + super.doAction(); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProtocolAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProtocolAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -25,9 +25,9 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.ui.swing.TuttiScreen; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -39,28 +39,27 @@ * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class EditProtocolAction extends AbstractTuttiAction<SelectCruiseUIModel, SelectCruiseUI, SelectCruiseUIHandler> { +public class EditProtocolAction extends AbstractChangeScreenAction { /** Logger. */ private static final Log log = LogFactory.getLog(EditProtocolAction.class); - public EditProtocolAction(SelectCruiseUIHandler handler) { + public EditProtocolAction(MainUIHandler handler) { super(handler, "edit", _("tutti.action.editProtocol"), _("tutti.action.editProtocol.tip"), - true + true, + TuttiScreen.EDIT_PROTOCOL ); } @Override protected void doAction() { - TuttiProtocol protocol = getModel().getProtocol(); - Preconditions.checkNotNull(protocol); + Preconditions.checkState(getContext().isProtocolFilled()); if (log.isInfoEnabled()) { - log.info("Edit protocol: " + protocol.getId()); + log.info("Edit protocol: " + getContext().getProtocolId()); } - getContext().setProtocolId(protocol.getId()); - getContext().setScreen(TuttiScreen.EDIT_PROTOCOL); + super.doAction(); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -77,7 +77,7 @@ ); doAction = file != null; if (doAction) { - file = TuttiIOUtil.addExtensionIfMissing(file, ".tuttiProtocol$"); + file = TuttiIOUtil.addExtensionIfMissing(file, ".tuttiProtocol"); } } return doAction; @@ -85,8 +85,8 @@ @Override protected void releaseAction() { + file = null; super.releaseAction(); - file = null; } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -28,8 +28,9 @@ import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import fr.ifremer.tutti.ui.swing.TuttiScreen; +import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import jaxx.runtime.context.JAXXContextEntryDef; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -44,7 +45,7 @@ * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class ImportProtocolAction extends AbstractTuttiAction<SelectCruiseUIModel, SelectCruiseUI, SelectCruiseUIHandler> { +public class ImportProtocolAction extends AbstractChangeScreenAction { /** Logger. */ private static final Log log = @@ -54,12 +55,13 @@ private File file; - public ImportProtocolAction(SelectCruiseUIHandler handler) { + public ImportProtocolAction(MainUIHandler handler) { super(handler, "import", _("tutti.action.importProtocol"), _("tutti.action.importProtocol.tip"), - true + true, + TuttiScreen.EDIT_PROTOCOL ); } @@ -85,12 +87,12 @@ @Override protected void releaseAction() { + file = null; super.releaseAction(); - file = null; } @Override - protected void doAction() throws Exception { + protected void doAction() { Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { @@ -104,12 +106,14 @@ sendMessage("Protocole [" + protocol.getName() + "] lu depuis le fichier."); + // store protocol in context IMPORT_PROTOCOL_ENTRY.setContextValue(getContext().getMainUI(), protocol); // remove id protocol.setId(null); + // removed selected protocol getContext().setProtocolId(null); - getContext().setScreen(TuttiScreen.EDIT_PROTOCOL); + super.doAction(); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewCruiseAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewCruiseAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewCruiseAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -25,7 +25,8 @@ */ import fr.ifremer.tutti.ui.swing.TuttiScreen; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import static org.nuiton.i18n.I18n._; @@ -35,20 +36,21 @@ * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class NewCruiseAction extends AbstractTuttiAction<SelectCruiseUIModel, SelectCruiseUI, SelectCruiseUIHandler> { +public class NewCruiseAction extends AbstractChangeScreenAction { - public NewCruiseAction(SelectCruiseUIHandler handler) { + public NewCruiseAction(MainUIHandler handler) { super(handler, "add", _("tutti.action.newCruise"), _("tutti.action.newCruise.tip"), - true + true, + TuttiScreen.EDIT_CRUISE ); } @Override protected void doAction() { getContext().setCruiseId(null); - getContext().setScreen(TuttiScreen.EDIT_CRUISE); + super.doAction(); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProgramAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProgramAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProgramAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -25,7 +25,8 @@ */ import fr.ifremer.tutti.ui.swing.TuttiScreen; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import static org.nuiton.i18n.I18n._; @@ -35,14 +36,15 @@ * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class NewProgramAction extends AbstractTuttiAction<SelectCruiseUIModel, SelectCruiseUI, SelectCruiseUIHandler> { +public class NewProgramAction extends AbstractChangeScreenAction { - public NewProgramAction(SelectCruiseUIHandler handler) { + public NewProgramAction(MainUIHandler handler) { super(handler, "add", _("tutti.action.newProgram"), _("tutti.action.newProgram.tip"), - true + true, + TuttiScreen.EDIT_PROGRAM ); } @@ -50,6 +52,6 @@ protected void doAction() { getContext().setProgramId(null); getContext().setCruiseId(null); - getContext().setScreen(TuttiScreen.EDIT_PROGRAM); + super.doAction(); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProtocolAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProtocolAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -25,7 +25,8 @@ */ import fr.ifremer.tutti.ui.swing.TuttiScreen; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import static org.nuiton.i18n.I18n._; @@ -35,20 +36,21 @@ * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class NewProtocolAction extends AbstractTuttiAction<SelectCruiseUIModel, SelectCruiseUI, SelectCruiseUIHandler> { +public class NewProtocolAction extends AbstractChangeScreenAction { - public NewProtocolAction(SelectCruiseUIHandler handler) { + public NewProtocolAction(MainUIHandler handler) { super(handler, "add", _("tutti.action.newProtocol"), _("tutti.action.newProtocol.tip"), - true + true, + TuttiScreen.EDIT_PROTOCOL ); } @Override protected void doAction() { getContext().setProtocolId(null); - getContext().setScreen(TuttiScreen.EDIT_PROTOCOL); + super.doAction(); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -27,7 +27,10 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import static org.nuiton.i18n.I18n._; @@ -37,14 +40,19 @@ * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class ValidateCatchesAction extends AbstractTuttiAction<SelectCruiseUIModel, SelectCruiseUI, SelectCruiseUIHandler> { +public class ValidateCatchesAction extends AbstractChangeScreenAction { - public ValidateCatchesAction(SelectCruiseUIHandler handler) { + /** Logger. */ + private static final Log log = + LogFactory.getLog(ValidateCatchesAction.class); + + public ValidateCatchesAction(MainUIHandler handler) { super(handler, "validate", _("tutti.action.validateCatches"), _("tutti.action.validateCatches.tip"), - true + true, + TuttiScreen.EDIT_FISHING_OPERATION ); } @@ -53,6 +61,9 @@ Preconditions.checkState(getContext().isProgramFilled()); Preconditions.checkState(getContext().isCruiseFilled()); getContext().setValidationContext(TuttiUIContext.VALIDATION_CONTEXT_VALIDATE); - getContext().setScreen(TuttiScreen.EDIT_FISHING_OPERATION); + if (log.isInfoEnabled()) { + log.info("Validate catches of cruise: " + getContext().getCruiseId()); + } + super.doAction(); } } 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-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-03-06 17:24:40 UTC (rev 554) @@ -28,9 +28,9 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiTabContainerUIHandler; +import fr.ifremer.tutti.ui.swing.util.CloseableUI; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; @@ -47,7 +47,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class FishingOperationsUIHandler extends AbstractTuttiTabContainerUIHandler<FishingOperationsUIModel, FishingOperationsUI> { +public class FishingOperationsUIHandler extends AbstractTuttiTabContainerUIHandler<FishingOperationsUIModel, FishingOperationsUI> implements CloseableUI { /** Logger. */ private static final Log log = @@ -200,15 +200,16 @@ } @Override - public boolean canCloseUI(TuttiScreen nextScreen) { -// boolean result = super.canCloseUI(nextScreen); + public boolean quitUI() { + //FIXME Make sure this is ok +// boolean result = super.quitUI(nextScreen); // try to reset current fishing operation, if afterall the fishing operation still // there, it means user cancel save operation, so stay here getUI().getFishingOperationComboBox().setSelectedItem(null); // getModel().setSelectedFishingOperation(null); boolean result = getModel().getSelectedFishingOperation() == null; // if (getTabPanel().getSelectedIndex() == 0) { -// result = ui.getFishingOperationTabContent().getHandler().canCloseUI(nextScreen); +// result = ui.getFishingOperationTabContent().getHandler().quitUI(nextScreen); // } return result; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/CancelEditProgramAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/CancelEditProgramAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/CancelEditProgramAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -25,7 +25,8 @@ */ import fr.ifremer.tutti.ui.swing.TuttiScreen; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import static org.nuiton.i18n.I18n._; @@ -35,21 +36,16 @@ * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class CancelEditProgramAction extends AbstractTuttiAction<EditProgramUIModel, EditProgramUI, EditProgramUIHandler> { +public class CancelEditProgramAction extends AbstractChangeScreenAction { - public CancelEditProgramAction(EditProgramUIHandler handler) { + public CancelEditProgramAction(MainUIHandler handler) { super(handler, "cancel", _("tutti.action.cancel.editProgram"), _("tutti.action.cancel.editProgram.tip"), - true + true, + TuttiScreen.SELECT_CRUISE ); } - @Override - protected void doAction() { - - getContext().setScreen(TuttiScreen.SELECT_CRUISE); - } - } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIHandler.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIHandler.java 2013-03-06 17:24:40 UTC (rev 554) @@ -24,17 +24,16 @@ * #L% */ +import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.util.CloseableUI; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.JOptionPane; -import java.awt.event.ActionEvent; import java.util.List; import static org.nuiton.i18n.I18n._; @@ -45,7 +44,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class EditProgramUIHandler extends AbstractTuttiUIHandler<EditProgramUIModel, EditProgramUI> { +public class EditProgramUIHandler extends AbstractTuttiUIHandler<EditProgramUIModel, EditProgramUI> implements CloseableUI { /** Logger. */ private static final Log log = @@ -70,7 +69,7 @@ //TODO 20130206 kmorin put the programs loaded in the home screen in a //kind of context to avoid loading the programs again - List<Program> programs = persistenceService.getAllProgram(); + List<Program> programs = Lists.newArrayList(persistenceService.getAllProgram()); model.setExistingPrograms(programs); @@ -126,16 +125,14 @@ } @Override - public boolean canCloseUI(TuttiScreen nextScreen) { - boolean result = true; - if (getModel().isModify()) { - int answer = askSaveBeforeLeaving(_("tutti.dialog.askSaveBeforeLeaving.saveProgram")); - result = answer == JOptionPane.NO_OPTION; - if (answer == JOptionPane.YES_OPTION) { - ActionEvent event = new ActionEvent(nextScreen, nextScreen.ordinal(), null); - doAction(ui.getSaveButton(), event); - } - } + public boolean quitUI() { + boolean result = quitScreen( + getModel().isValid(), + getModel().isModify(), + _("tutti.dialog.askCancelEditBeforeLeaving.saveProgram"), + _("tutti.dialog.askSaveBeforeLeaving.saveProgram"), + ui.getSaveButton().getAction() + ); return result; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CancelEditProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CancelEditProtocolAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CancelEditProtocolAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -25,7 +25,8 @@ */ import fr.ifremer.tutti.ui.swing.TuttiScreen; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import static org.nuiton.i18n.I18n._; @@ -35,21 +36,15 @@ * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class CancelEditProtocolAction extends AbstractTuttiAction<EditProtocolUIModel, EditProtocolUI, EditProtocolUIHandler> { +public class CancelEditProtocolAction extends AbstractChangeScreenAction { - public CancelEditProtocolAction(EditProtocolUIHandler handler) { + public CancelEditProtocolAction(MainUIHandler handler) { super(handler, "cancel", _("tutti.action.cancel.editProtocol"), _("tutti.action.cancel.editProtocol.tip"), - true - ); + true, + TuttiScreen.SELECT_CRUISE); } - @Override - protected void doAction() { - - getContext().setScreen(TuttiScreen.SELECT_CRUISE); - } - } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-03-06 17:24:40 UTC (rev 554) @@ -32,11 +32,11 @@ import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.ui.swing.TuttiScreen; -import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import fr.ifremer.tutti.ui.swing.content.home.CloneProtocolAction; import fr.ifremer.tutti.ui.swing.content.home.ImportProtocolAction; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SelectSpeciesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SelectSpeciesUIModel; +import fr.ifremer.tutti.ui.swing.util.CloseableUI; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; @@ -55,10 +55,8 @@ import org.nuiton.util.decorator.Decorator; import javax.swing.JComboBox; -import javax.swing.JOptionPane; import javax.swing.table.TableColumnModel; import java.awt.Dimension; -import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Collection; @@ -72,7 +70,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.3 */ -public class EditProtocolUIHandler extends AbstractTuttiTableUIHandler<EditProtocolSpeciesRowModel, EditProtocolUIModel, EditProtocolUI> { +public class EditProtocolUIHandler extends AbstractTuttiTableUIHandler<EditProtocolSpeciesRowModel, EditProtocolUIModel, EditProtocolUI> implements CloseableUI { /** Logger. */ private static final Log log = @@ -188,48 +186,44 @@ EditProtocolUIModel model = getModel(); - TuttiProtocol protocol = ImportProtocolAction.IMPORT_PROTOCOL_ENTRY.getContextValue(ui); + TuttiProtocol protocol; - if (protocol != null) { + if (context.isProtocolFilled()) { - // import a protocol + // load existing protocol - ImportProtocolAction.IMPORT_PROTOCOL_ENTRY.removeContextValue(ui); + protocol = persistenceService.getProtocol(context.getProtocolId()); model.fromBean(protocol); - model.setImported(true); - ui.getSaveWarning().setText(_("tutti.label.protocol.import.warning")); + log.debug(model.getExistingProtocols()); + model.getExistingProtocols().remove(protocol); - } else { + } else if ((protocol = ImportProtocolAction.IMPORT_PROTOCOL_ENTRY.getContextValue(ui)) != null) { - // load protocol if existing + // import protocol - if (context.isProtocolFilled()) { + ImportProtocolAction.IMPORT_PROTOCOL_ENTRY.removeContextValue(ui); - // load existing protocol - protocol = persistenceService.getProtocol(context.getProtocolId()); - Boolean mustClone = ui.getContextValue(Boolean.class, MainUIHandler.CLONE_PROTOCOL); + model.fromBean(protocol); + model.setImported(true); + ui.getSaveWarning().setText(_("tutti.label.protocol.import.warning")); - model.fromBean(protocol); - if (mustClone != null && mustClone) { - ui.setContextValue(false, MainUIHandler.CLONE_PROTOCOL); - model.setId(null); - model.setCloned(true); + } else if ((protocol = CloneProtocolAction.CLONE_PROTOCOL_ENTRY.getContextValue(ui)) != null) { - ui.getSaveWarning().setText(_("tutti.label.protocol.clone.warning")); + // clone protocol - } else { - log.debug(model.getExistingProtocols()); - model.getExistingProtocols().remove(protocol); - } + CloneProtocolAction.CLONE_PROTOCOL_ENTRY.getContextValue(ui); - } else { + model.fromBean(protocol); + model.setCloned(true); + ui.getSaveWarning().setText(_("tutti.label.protocol.clone.warning")); - // create new protocol + } else { - if (log.isDebugEnabled()) { - log.debug("Will create a new protocol"); - } + // create new protocol + + if (log.isDebugEnabled()) { + log.debug("Will create a new protocol"); } } @@ -364,19 +358,18 @@ } @Override - public boolean canCloseUI(TuttiScreen nextScreen) { - boolean result = true; - if (getModel().isModify()) { - int answer = askSaveBeforeLeaving(_("tutti.dialog.askSaveBeforeLeaving.saveProtocol")); - result = answer == JOptionPane.NO_OPTION; - if (answer == JOptionPane.YES_OPTION) { - ActionEvent event = new ActionEvent(nextScreen, nextScreen.ordinal(), null); - doAction(ui.getSaveButton(), event); - } - } + public boolean quitUI() { + boolean result = quitScreen( + getModel().isValid(), + getModel().isModify(), + _("tutti.dialog.askCancelEditBeforeLeaving.cancelSaveProtocol"), + _("tutti.dialog.askSaveBeforeLeaving.saveProtocol"), + ui.getSaveButton().getAction() + ); return result; } + @Override protected void onAfterSelectedRowChanged(int oldRowIndex, EditProtocolSpeciesRowModel oldRow, Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SaveProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SaveProtocolAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SaveProtocolAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -68,15 +68,14 @@ EditProtocolUIModel model = getModel(); TuttiUIContext context = getContext(); - PersistenceService persistenceService = - context.getPersistenceService(); + PersistenceService persistenceService = context.getPersistenceService(); TuttiProtocol bean = model.toBean(); // get the species protocols from the table List<SpeciesProtocol> protocols = Lists.newArrayList(); - for (EditProtocolSpeciesRowModel row : handler.getTableModel().getRows()) { + for (EditProtocolSpeciesRowModel row : model.getRows()) { if (row.isValid()) { SpeciesProtocol protocol = row.toBean(); protocols.add(protocol); @@ -99,14 +98,7 @@ context.setProtocolId(saved.getId()); - //TODO-TC Make this works again (but in another manner)... -// TuttiScreen nextScreen; -// if (event.getSource().getClass().isAssignableFrom(TuttiScreen.class)) { -// nextScreen = (TuttiScreen) event.getSource(); -// } else { -// nextScreen = TuttiScreen.SELECT_CRUISE; -// } -// context.setScreen(nextScreen); + model.setModify(false); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SelectOtherSpeciesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SelectOtherSpeciesAction.java 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SelectOtherSpeciesAction.java 2013-03-06 17:24:40 UTC (rev 554) @@ -27,7 +27,6 @@ import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.AddSpeciesAction; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -45,7 +44,8 @@ public class SelectOtherSpeciesAction extends AbstractTuttiAction<EditProtocolUIModel, EditProtocolUI, EditProtocolUIHandler> { /** Logger. */ - private static final Log log = LogFactory.getLog(AddSpeciesAction.class); + private static final Log log = + LogFactory.getLog(SelectOtherSpeciesAction.class); protected Species selectedSpecies; @@ -61,14 +61,19 @@ @Override protected boolean prepareAction() { boolean result = super.prepareAction(); - EditProtocolUIModel model = getModel(); + if (result) { + EditProtocolUIModel model = getModel(); - List<Species> species = Lists.newArrayList(model.getAllSynonyms()); + List<Species> species = Lists.newArrayList(model.getAllSynonyms()); - selectedSpecies = getHandler().openSelectOtherSpeciesDialog( - _("tutti.title.selectSpecies"), species); + selectedSpecies = getHandler().openSelectOtherSpeciesDialog( + _("tutti.title.selectSpecies"), species); - result &= selectedSpecies != null; + if (log.isInfoEnabled()) { + log.info("SelectedSpecies: " + selectedSpecies); + } + result = selectedSpecies != null; + } return result; } 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-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-03-06 17:24:40 UTC (rev 554) @@ -30,7 +30,6 @@ import fr.ifremer.tutti.persistence.entities.IdAware; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.ui.swing.TuttiDataContext; -import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; @@ -72,7 +71,6 @@ import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.text.JTextComponent; -import java.awt.Color; import java.awt.Component; import java.awt.Dialog; import java.awt.Dimension; @@ -180,18 +178,6 @@ return context.getConfig(); } - /** - * Can the UI be closed? It is useful whe the user wants to exit the current - * screen but the model is modified: we can then ask the user if he wants to - * save or not. - * - * @param nextScreen the next screen to display - * @return {@code true} if UI can be closed, {@code false} otherwise. - */ - public boolean canCloseUI(TuttiScreen nextScreen) { - return true; - } - public void setText(KeyEvent event, String property) { JTextComponent field = (JTextComponent) event.getSource(); String value = field.getText(); @@ -405,6 +391,48 @@ button.getAction().actionPerformed(event); } + protected boolean quitScreen(boolean modelIsValid, + boolean modelIsModify, + String askGiveUpMessage, + String askSaveMessage, + Action saveAction) { + boolean result; + + if (!modelIsValid) { + + // model is not valid + // ask user to qui or not + result = askCancelEditBeforeLeaving(askGiveUpMessage); + + } else if (modelIsModify) { + + // something is modify ask user what to do + int answer = askSaveBeforeLeaving(askSaveMessage); + switch (answer) { + case JOptionPane.YES_OPTION: + + // ok save + saveAction.actionPerformed(null); + result = true; + break; + case JOptionPane.NO_OPTION: + + // do not save but can still quit the screen (so nothing to do) + result = true; + break; + default: + // do not save and stay here (so nothing to do) + result = false; + + } + } else { + + // model is valid and not modify, can safely quit screen + result = true; + } + return result; + } + protected void registerValidators(SwingValidator... validators) { MainUI main = context.getMainUI(); Preconditions.checkNotNull( Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CloseableUI.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CloseableUI.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CloseableUI.java 2013-03-06 17:24:40 UTC (rev 554) @@ -0,0 +1,18 @@ +package fr.ifremer.tutti.ui.swing.util; + +/** + * Contract to close an ui. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.0.2 + */ +public interface CloseableUI { + + /** + * Try to quit UI. + * + * @return {@code true} if ui is safe to quit, {@code false} otherwise + * (means must stay on it). + */ + boolean quitUI(); +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CloseableUI.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-03-06 17:22:48 UTC (rev 553) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-03-06 17:24:40 UTC (rev 554) @@ -181,6 +181,9 @@ tutti.config.category.ui.description=Options de l'interface utilisateur tutti.dialog.askCancelEditBeforeLeaving.cancelEditCatchBatch=La capture modifiée n'est pas valide. Voulez-vous annuler les modifications ? tutti.dialog.askCancelEditBeforeLeaving.cancelEditFishingOperation=Le trait modifié n'est pas valide. Voulez-vous annuler les modifications ? +tutti.dialog.askCancelEditBeforeLeaving.cancelSaveProtocol= +tutti.dialog.askCancelEditBeforeLeaving.saveCruise= +tutti.dialog.askCancelEditBeforeLeaving.saveProgram= tutti.dialog.askCancelEditBeforeLeaving.title=Modifications non enregistrées mais invalides tutti.dialog.askOverwriteFile.message=Le fichier %s existe déjà, confirmer pour l'écraser. tutti.dialog.askOverwriteFile.title=Confirmer l'écrasement d'un fichier... @@ -346,8 +349,7 @@ tutti.label.tab.fishingOperation=Trait tutti.label.tab.fishingOperation.gearUseFeature=Mise en oeuvre de l'engin tutti.label.tab.fishingOperation.general=Trait -tutti.label.tab.fishingOperation.hydrology=Paramètres hydrologiques -tutti.label.tab.fishingOperation.vesselUseFeature=Autres caractéristiques +tutti.label.tab.fishingOperation.vesselUseFeature=Hydrologie et paramètres environnementaux tutti.label.tab.macroDechet=Macro déchets tutti.label.tab.observationIndividuel=Observations individuelles tutti.label.tab.plancton=Plancton