Author: kmorin Date: 2013-02-01 12:12:52 +0100 (Fri, 01 Feb 2013) New Revision: 287 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/287 Log: - fixes #1845 [ERGO] - Principe d'enregistrement lors de la fermeture de l'?\195?\169cran - javadoc Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ChangeScreenAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/CancelEditFishingOperationAction.java Removed: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java Modified: trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseCatchesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProgramAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/SelectCruiseAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/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/cruise/SaveCruiseAction.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/EditFishingOperationUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 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/SaveFishingOperationAction.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/content/operation/catches/species/SampleCategoryType.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/FrequencyCellComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIHandler.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/program/SaveProgramAction.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/EditProtocolSpeciesTableModel.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/util/AbstractTuttiTabContainerUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TabHandler.java trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties trunk/tutti-ui-swing/src/main/resources/icons/action-alert-warning.png Modified: trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties =================================================================== --- trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties 2013-02-01 11:12:52 UTC (rev 287) @@ -24,7 +24,7 @@ # Please fill the missing licenses for dependencies : # # -#Fri Feb 01 01:12:25 CET 2013 +#Fri Feb 01 12:08:25 CET 2013 antlr--antlr--2.7.6=BSD License commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0 dom4j--dom4j--1.6.1=BSD License Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -55,7 +55,6 @@ import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JList; -import javax.swing.JMenuItem; import javax.swing.JRootPane; import javax.swing.KeyStroke; import javax.swing.ListCellRenderer; @@ -130,6 +129,18 @@ 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 + */ + public boolean canCloseUI(TuttiScreen nextScreen) { + return true; + } + public void setText(KeyEvent event, String property) { JTextComponent field = (JTextComponent) event.getSource(); String value = field.getText(); Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ChangeScreenAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ChangeScreenAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ChangeScreenAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -0,0 +1,35 @@ + +package fr.ifremer.tutti.ui.swing; + +import java.awt.event.ActionEvent; + +/** + * Abstract action defining actions which sets the screen of the application. + * + * @author kmorin <kmorin@codelutin.com> + * @since 1.0 + */ +public abstract class ChangeScreenAction extends AbstractTuttiAction<TuttiUIContext, MainUIHandler> { + + protected ChangeScreenAction(MainUIHandler handler, + String name, + String icon, + String text, + String tip, + boolean hideBody) { + super(handler, name, icon, text, tip, hideBody); + } + + @Override + protected boolean prepareAction(ActionEvent event) { + boolean result = super.prepareAction(event); + result &= getHandler().getCurrentHandler().canCloseUI(getNextScreen()); + return result; + } + + /** + * @return the next screen to display. + */ + protected abstract TuttiScreen getNextScreen(); + +} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseAction.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -33,12 +33,12 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the cruise edition screen to edit the selected cruise. * * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class EditSelectedCruiseAction extends AbstractTuttiAction<TuttiUIContext, MainUIHandler> { +public class EditSelectedCruiseAction extends ChangeScreenAction { private static final long serialVersionUID = 1L; @@ -61,6 +61,11 @@ if (log.isInfoEnabled()) { log.info("Edit cruise: " + getContext().getCruiseId()); } - getContext().setScreen(TuttiScreen.EDIT_CRUISE); + getContext().setScreen(getNextScreen()); } + + @Override + protected TuttiScreen getNextScreen() { + return TuttiScreen.EDIT_CRUISE; + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseCatchesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseCatchesAction.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedCruiseCatchesAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -31,12 +31,12 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the catches edition screen to edit the selected catches. * * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class EditSelectedCruiseCatchesAction extends AbstractTuttiAction<TuttiUIContext, MainUIHandler> { +public class EditSelectedCruiseCatchesAction extends ChangeScreenAction { private static final long serialVersionUID = 1L; @@ -56,6 +56,12 @@ Preconditions.checkState(getContext().isCruiseFilled()); getContext().setValidationContext(TuttiUIContext.VALIDATION_CONTEXT_EDIT); getContext().setScreen(null); - getContext().setScreen(TuttiScreen.EDIT_FISHING_OPERATION); + getContext().setScreen(getNextScreen()); } + + @Override + protected TuttiScreen getNextScreen() { + return TuttiScreen.EDIT_FISHING_OPERATION; + } + } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProgramAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProgramAction.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProgramAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -33,12 +33,12 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the program edition screen to edit the selected program. * * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class EditSelectedProgramAction extends AbstractTuttiAction<TuttiUIContext, MainUIHandler> { +public class EditSelectedProgramAction extends ChangeScreenAction { private static final long serialVersionUID = 1L; @@ -61,6 +61,12 @@ if (log.isInfoEnabled()) { log.info("Edit program: " + getContext().getProgramId()); } - getContext().setScreen(TuttiScreen.EDIT_PROGRAM); + getContext().setScreen(getNextScreen()); } + + @Override + protected TuttiScreen getNextScreen() { + return TuttiScreen.EDIT_PROGRAM; + } + } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProtocolAction.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/EditSelectedProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -33,12 +33,12 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the protocol edition screen to edit the selected protocol. * * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class EditSelectedProtocolAction extends AbstractTuttiAction<TuttiUIContext, MainUIHandler> { +public class EditSelectedProtocolAction extends ChangeScreenAction { private static final long serialVersionUID = 1L; @@ -62,6 +62,12 @@ if (log.isInfoEnabled()) { log.info("Edit protocol: " + getContext().getProtocolId()); } - getContext().setScreen(TuttiScreen.EDIT_PROTOCOL); + getContext().setScreen(getNextScreen()); } + + @Override + protected TuttiScreen getNextScreen() { + return TuttiScreen.EDIT_PROTOCOL; + } + } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -274,6 +274,11 @@ ui.getValidatorMessageWidget().clearValidators(); } + public AbstractTuttiUIHandler getCurrentHandler() { + TuttiUI<?, ?> body = (TuttiUI<?, ?>) currentBody; + return body.getHandler(); + } + //------------------------------------------------------------------------// //-- Internal methods --// //------------------------------------------------------------------------// @@ -286,7 +291,7 @@ if (currentBody != null) { TuttiUI<?, ?> body = (TuttiUI<?, ?>) currentBody; body.getHandler().onCloseUI(); - + context.getSwingSession().save(); ui.getBody().remove(currentBody); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/SelectCruiseAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/SelectCruiseAction.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/SelectCruiseAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -29,12 +29,12 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the cruise selection screen (home). * * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class SelectCruiseAction extends AbstractTuttiAction<TuttiUIContext, MainUIHandler> { +public class SelectCruiseAction extends ChangeScreenAction { private static final long serialVersionUID = 1L; @@ -52,6 +52,11 @@ @Override protected void doAction(ActionEvent e) { // Preconditions.checkNotNull(getContext().isCruiseFilled()); - getContext().setScreen(TuttiScreen.SELECT_CRUISE); + getContext().setScreen(getNextScreen()); } + + @Override + protected TuttiScreen getNextScreen() { + return TuttiScreen.SELECT_CRUISE; + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ValidateSelectedCruiseCatchesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ValidateSelectedCruiseCatchesAction.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/ValidateSelectedCruiseCatchesAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -31,12 +31,12 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the catches validation screen to edit the selected catches. * * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class ValidateSelectedCruiseCatchesAction extends AbstractTuttiAction<TuttiUIContext, MainUIHandler> { +public class ValidateSelectedCruiseCatchesAction extends ChangeScreenAction { private static final long serialVersionUID = 1L; @@ -55,6 +55,11 @@ Preconditions.checkState(getContext().isCruiseFilled()); getContext().setValidationContext(TuttiUIContext.VALIDATION_CONTEXT_VALIDATE); getContext().setScreen(null); - getContext().setScreen(TuttiScreen.EDIT_FISHING_OPERATION); + getContext().setScreen(getNextScreen()); } + + @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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/CancelEditCruiseAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -32,7 +32,7 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Cancels the edition of a cruise * * @author tchemit <chemit@codelutin.com> * @since 1.0 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -33,7 +33,9 @@ import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.MainUI; +import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUI; +import java.awt.event.ActionEvent; import jaxx.runtime.JAXXUtil; import jaxx.runtime.context.JAXXContextEntryDef; import jaxx.runtime.validator.swing.SwingValidator; @@ -44,6 +46,7 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; +import javax.swing.JOptionPane; /** * Handler of UI {@link EditCruiseUI}. @@ -263,6 +266,20 @@ MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName()); main.clearValidators(); } + + @Override + public boolean canCloseUI(TuttiScreen nextScreen) { + boolean result = true; + if (getModel().isModify()) { + int answer = askSaveBeforeLeaving(ui); + result = answer == JOptionPane.NO_OPTION; + if (answer == JOptionPane.YES_OPTION) { + ActionEvent event = new ActionEvent(nextScreen, nextScreen.ordinal(), null); + ui.getSaveCruiseAction().actionPerformed(event); + } + } + return result; + } @Override public EditCruiseUIModel getModel() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/SaveCruiseAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/SaveCruiseAction.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/SaveCruiseAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -36,6 +36,8 @@ import static org.nuiton.i18n.I18n._; /** + * Saves a cruise + * * @author kmorin <kmorin@codelutin.com> * @since 1.0 */ @@ -53,6 +55,11 @@ ); } + /** + * If the event source is a TuttiScreen, then the screen changes to the source. + * Otherwise, the screen changes to the home. + * @param event + */ @Override protected void doAction(ActionEvent event) { TuttiUIContext context = getContext(); @@ -73,7 +80,13 @@ context.setProgramId(saved.getProgram().getId()); context.setCruiseId(saved.getId()); - context.setScreen(TuttiScreen.SELECT_CRUISE); + TuttiScreen nextScreen; + if (event.getSource().getClass().isAssignableFrom(TuttiScreen.class)) { + nextScreen = (TuttiScreen) event.getSource(); + } else { + nextScreen = TuttiScreen.SELECT_CRUISE; + } + context.setScreen(nextScreen); } } 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/CloneProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -36,7 +36,7 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the protocol creation screen with the data of an already existing protocol. * * @author tchemit <chemit@codelutin.com> * @since 1.0 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCatchesAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -35,7 +35,7 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the catches edition screen. * * @author tchemit <chemit@codelutin.com> * @since 1.0 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCruiseAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -34,7 +34,7 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the cruise edition screen. * * @author tchemit <chemit@codelutin.com> * @since 1.0 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProgramAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -34,7 +34,7 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the program edition screen. * * @author tchemit <chemit@codelutin.com> * @since 1.0 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -36,7 +36,7 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the protocol edition screen. * * @author tchemit <chemit@codelutin.com> * @since 1.0 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -38,7 +38,7 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens a file chooser and exports the protocol into the selected file. * * @author tchemit <chemit@codelutin.com> * @since 1.0 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -39,7 +39,7 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens a file chooser and imports the protocol from the selected file. * * @author tchemit <chemit@codelutin.com> * @since 1.0 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewCruiseAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -32,7 +32,7 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the cruise creation screen. * * @author tchemit <chemit@codelutin.com> * @since 1.0 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProgramAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -32,7 +32,7 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the program creation screen. * * @author tchemit <chemit@codelutin.com> * @since 1.0 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/NewProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -34,7 +34,7 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the protocol creation screen. * * @author tchemit <chemit@codelutin.com> * @since 1.0 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -34,7 +34,7 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Opens the catches validation screen. * * @author tchemit <chemit@codelutin.com> * @since 1.0 Added: 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 (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/CancelEditFishingOperationAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -0,0 +1,63 @@ + +package fr.ifremer.tutti.ui.swing.content.operation; + +import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; +import java.awt.event.ActionEvent; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import static org.nuiton.i18n.I18n._; + +/** + * Cancels the edition of a fishing operation and potentially switch to another tab. + * + * @author kmorin <kmorin@codelutin.com> + * @since 1.0 + */ +public class CancelEditFishingOperationAction extends AbstractTuttiAction<EditFishingOperationUIModel, EditFishingOperationUIHandler> { + + private static final long serialVersionUID = 1L; + + /** Logger. */ + private static final Log log = LogFactory.getLog(SaveFishingOperationAction.class); + + public CancelEditFishingOperationAction(EditFishingOperationUIHandler handler) { + super(handler, + "cancelFishingOperation", + "cancel", + _("tutti.action.cancel.editFishingOperation"), + _("tutti.action.cancel.editFishingOperation.tip"), + false + ); + } + + /** + * If the event source is an EditFishingOperationUIHandler, + * then the tab panel of the parent switch to the index set + * in the ID param of the event. + * + * @param event + * @throws Exception + */ + @Override + protected void doAction(ActionEvent event) throws Exception { + FishingOperationsUIHandler parentHandler = getHandler().getParentUi().getHandler(); + if (getModel().isCreate()) { + if (log.isInfoEnabled()) { + log.info("Cancel edition for fishingOperation "); + } + // cancel to create a new fishingOperation + parentHandler.closeCurrentFishingOperation(); + + } else { + parentHandler.reloadFishingOperation(); + } + if (event.getSource() != null + && event.getSource().getClass().isAssignableFrom(EditFishingOperationUIHandler.class)) { + + int newIndex = event.getID(); + parentHandler.getTabPanel().setSelectedIndex(newIndex); + } + } + +} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-02-01 11:12:52 UTC (rev 287) @@ -455,8 +455,7 @@ } #cancelButton { - actionIcon: cancel; - text:"tutti.action.cancel"; + action: {cancelFishingOperationAction}; } #importCasinoButton { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-02-01 11:12:52 UTC (rev 287) @@ -78,6 +78,8 @@ initializer='getContextValue(EditFishingOperationUIModel.class)'/> <SaveFishingOperationAction id='saveFishingOperationAction' constructorParams='handler'/> + + <CancelEditFishingOperationAction id='cancelFishingOperationAction' constructorParams='handler'/> <SwingValidatorMessageTableModel id='errorTableModel'/> @@ -88,6 +90,7 @@ <field name='fishingOperationNumber' component='fishingOperationNumberField'/> <field name='gearShootingStartDate' component='gearShootingStartDateField'/> + <field name='gearShootingEndDate' component='gearShootingEndDateField'/> <field name='comment' component='commentPane'/> <field name='saisisseur' component='saisisseurList'/> <field name='vessel' component='vesselComboBox'/> @@ -523,7 +526,7 @@ <JPanel layout='{new BorderLayout()}' constraints='BorderLayout.SOUTH'> <JPanel id='createFishingOperationActions' layout='{new GridLayout(1,0)}' constraints='BorderLayout.CENTER'> - <JButton id='cancelButton' onActionPerformed='handler.cancel()'/> + <JButton id='cancelButton'/> <JButton id='saveButton'/> </JPanel> </JPanel> 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -40,6 +40,7 @@ import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; import fr.ifremer.tutti.ui.swing.MainUI; +import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicTabUIModel; import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUI; @@ -63,10 +64,10 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; +import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; -import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; /** @@ -350,28 +351,42 @@ } @Override - public boolean onHideTab() { - boolean result = true; - if (isAModelModified()) { + public boolean canCloseUI(TuttiScreen nextScreen) { + boolean result = !isAModelModified(); + if (!result) { int answer = askSaveBeforeLeaving(ui); + ActionEvent event = new ActionEvent(nextScreen, nextScreen.ordinal(), null); switch (answer) { case JOptionPane.OK_OPTION: - ui.getSaveFishingOperationAction().actionPerformed(null); + ui.getSaveFishingOperationAction().actionPerformed(event); break; + } + result = answer == JOptionPane.NO_OPTION; + } + return result; + } + @Override + public boolean onHideTab(int currentIndex, int newIndex) { + boolean result = !isAModelModified(); + if (!result) { + int answer = askSaveBeforeLeaving(ui); + ActionEvent event = new ActionEvent(this, newIndex, null); + switch (answer) { + case JOptionPane.OK_OPTION: + ui.getSaveFishingOperationAction().actionPerformed(event); + break; + case JOptionPane.NO_OPTION: - parentUi.getHandler().reloadFishingOperation(); + ui.getCancelFishingOperationAction().actionPerformed(event); break; - - case JOptionPane.CANCEL_OPTION: - result = false; } } return result; } @Override - public void onShowTab() { + public void onShowTab(int currentIndex, int newIndex) { MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName()); main.clearValidators(); main.registerValidator(ui.getValidator()); @@ -483,19 +498,6 @@ } } - public void cancel() { - if (getModel().isCreate()) { - if (log.isInfoEnabled()) { - log.info("Cancel edition for fishingOperation "); - } - // cancel to create a new fishingOperation - parentUi.getHandler().closeCurrentFishingOperation(); - - } else { - parentUi.getHandler().reloadFishingOperation(); - } - } - public void importCasino() { //TODO } 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -31,6 +31,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Gear; 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.TuttiUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiTabContainerUIHandler; @@ -169,9 +170,6 @@ ui.getTabPane().setSelectedIndex(0); ui.getFishingOperationTabContent().getFishingOperationTabPane().setSelectedIndex(0); - // when quitting ui, let's de-select fishingOperation (will save any changes) - selectFishingOperation(null); - closeUI(ui.getFishingOperationTabContent()); closeUI(ui.getCatchesTabContent()); } @@ -182,6 +180,15 @@ } @Override + public boolean canCloseUI(TuttiScreen nextScreen) { + boolean result = super.canCloseUI(nextScreen); + if (getTabPanel().getSelectedIndex() == 0) { + result = ui.getFishingOperationTabContent().getHandler().canCloseUI(nextScreen); + } + return result; + } + + @Override public SwingValidator<FishingOperationsUIModel> getValidator() { return null; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -28,6 +28,7 @@ import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicTabUIModel; import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUIModel; import fr.ifremer.tutti.ui.swing.content.operation.fishing.gearshooting.GearShootingTabUIModel; @@ -42,6 +43,8 @@ import static org.nuiton.i18n.I18n._; /** + * Saves a fishing operation and potentially sets another screen or switch to another tab. + * * @author kmorin <kmorin@codelutin.com> * @since 1.0 */ @@ -61,11 +64,21 @@ false ); } - + + /** + * If the event source is an EditFishingOperationUIHandler, + * then the tab panel of the parent switch to the index set + * in the ID param of the event. + * If the event source is a TuttiScreen, then the screen changes to the source. + * + * @param event + * @throws Exception + */ @Override protected void doAction(ActionEvent event) { EditFishingOperationUIHandler handler = getHandler(); + FishingOperationsUIHandler parentHandler = getHandler().getParentUi().getHandler(); TuttiBeanMonitor<EditFishingOperationUIModel> monitor = handler.getFishingOperationMonitor(); @@ -116,8 +129,20 @@ getModel().setModify(false); // persist current fishingOperation - handler.getParentUi().getHandler().saveFishingOperation(toSave); + parentHandler.saveFishingOperation(toSave); } + + if (event.getSource() != null) { + Class sourceClass = event.getSource().getClass(); + if (sourceClass.isAssignableFrom(EditFishingOperationUIHandler.class)) { + int newIndex = event.getID(); + parentHandler.getTabPanel().setSelectedIndex(newIndex); + + } else if (sourceClass.isAssignableFrom(TuttiScreen.class)) { + TuttiScreen nextScreen = (TuttiScreen) event.getSource(); + getContext().setScreen(nextScreen); + } + } } } 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -157,7 +157,7 @@ } @Override - public boolean onHideTab() { + public boolean onHideTab(int currentIndex, int newIndex) { AbstractTuttiBeanUIModel model = getModel(); boolean result = model.isValid(); if (result && model.isModify()) { @@ -167,7 +167,7 @@ } @Override - public void onShowTab() { + public void onShowTab(int currentIndex, int newIndex) { registerValidators(); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryType.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryType.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryType.java 2013-02-01 11:12:52 UTC (rev 287) @@ -27,9 +27,7 @@ import com.google.common.collect.Maps; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryEnum; import fr.ifremer.tutti.service.DecoratorService; - import java.util.EnumMap; - import static org.nuiton.i18n.I18n._; import static org.nuiton.i18n.I18n.n_; @@ -79,6 +77,11 @@ return result; } + @Override + public String toString() { + return getLabel(); + } + public static final EnumMap<SampleCategoryEnum, SampleCategoryType> enumToType; static { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-02-01 11:12:52 UTC (rev 287) @@ -166,7 +166,7 @@ } #filterSpeciesBatchRootButton { - text: "tutti.label.filterSpeciesBatchMode.mode.root"; + text: {_("tutti.label.filterSpeciesBatchMode.mode.root", model.getRootNumber())}; toolTipText: "tutti.label.filterSpeciesBatchMode.mode.root.tip"; value: "root"; selected: {model.isTableViewModeRoot()}; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -330,7 +330,9 @@ super.onModelRowsChanged(rows); // clear speciesUsed - getModel().getSpeciesUsed().clear(); + SpeciesBatchUIModel model = getModel(); + model.getSpeciesUsed().clear(); + model.setRootNumber(0); for (SpeciesBatchRowModel row : rows) { updateTotalFromFrequencies(row); @@ -742,6 +744,9 @@ // save new batches saveRows(newBatches); + + SpeciesBatchUIModel model = getModel(); + model.setLeafNumber(model.getLeafNumber() + newBatches.size() - 1); } recomputeBatchActionEnable(); @@ -1184,8 +1189,13 @@ if (log.isInfoEnabled()) { log.info("Remove from speciesUsed: " + decorate(row.getSortedUnsortedCategoryValue()) + " - " + decorate(row.getSpecies())); } - getModel().getSpeciesUsed().remove(row.getSortedUnsortedCategoryValue(), + SpeciesBatchUIModel model = getModel(); + model.getSpeciesUsed().remove(row.getSortedUnsortedCategoryValue(), row.getSpecies()); + + if (row.isBatchRoot()) { + model.setRootNumber(model.getRootNumber() - 1); + } } protected void addToSpeciesUsed(SpeciesBatchRowModel row) { @@ -1195,8 +1205,11 @@ if (log.isInfoEnabled()) { log.info("Add to speciesUsed: " + decorate(row.getSortedUnsortedCategoryValue()) + " - " + decorate(row.getSpecies())); } - getModel().getSpeciesUsed().put(row.getSortedUnsortedCategoryValue(), + SpeciesBatchUIModel model = getModel(); + model.getSpeciesUsed().put(row.getSortedUnsortedCategoryValue(), row.getSpecies()); + + model.setRootNumber(model.getRootNumber() + 1); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2013-02-01 11:12:52 UTC (rev 287) @@ -58,6 +58,10 @@ public static final String PROPERTY_TABLE_VIEW_MODE_LEAF = "tableViewModeLeaf"; public static final String PROPERTY_TABLE_VIEW_MODE_ROOT = "tableViewModeRoot"; + + public static final String PROPERTY_ROOT_NUMBER = "rootNumber"; + + public static final String PROPERTY_LEAF_NUMBER = "leafNumber"; /** * Sampling order (sets by protocol). @@ -115,6 +119,16 @@ * @since 0.3 */ protected boolean removeSpeciesSubBatchEnabled; + + /** + * @since 1.0 + */ + protected int rootNumber; + + /** + * @since 1.0 + */ + protected int leafNumber; public SpeciesBatchUIModel(EditCatchesUIModel catchesUIModel) { super(catchesUIModel, @@ -221,6 +235,26 @@ return speciesUsed; } + public int getRootNumber() { + return rootNumber; + } + + public void setRootNumber(int rootNumber) { + Object oldValue = getRootNumber(); + this.rootNumber = rootNumber; + firePropertyChange(PROPERTY_ROOT_NUMBER, oldValue, rootNumber); + } + + public int getLeafNumber() { + return leafNumber; + } + + public void setLeafNumber(int leafNumber) { + Object oldValue = getLeafNumber(); + this.leafNumber = leafNumber; + firePropertyChange(PROPERTY_LEAF_NUMBER, oldValue, leafNumber); + } + public boolean isCreateSpeciesBatchEnabled() { return createSpeciesBatchEnabled; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/FrequencyCellComponent.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/FrequencyCellComponent.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/FrequencyCellComponent.java 2013-02-01 11:12:52 UTC (rev 287) @@ -31,8 +31,6 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIHandler; -import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.CreateSpeciesBatchUI; import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction; import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; import jaxx.runtime.SwingUtil; @@ -52,10 +50,7 @@ import java.awt.event.MouseEvent; import java.util.List; import javax.swing.table.DefaultTableCellRenderer; -import jaxx.runtime.swing.CardLayout2Ext; -import static org.nuiton.i18n.I18n._; - /** * Component to render and edit frequency stuff from batch table. * Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -43,8 +43,6 @@ import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; -import jaxx.runtime.validator.swing.SwingValidatorMessageTableRenderer; -import jaxx.runtime.validator.swing.SwingValidatorUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -59,7 +57,6 @@ import java.util.List; import java.util.Map; import jaxx.runtime.SwingUtil; -import jaxx.runtime.swing.CardLayout2Ext; import jaxx.runtime.validator.swing.SwingValidator; /** Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -30,20 +30,19 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import java.awt.Dimension; import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.util.List; -import java.util.concurrent.Executors; import javax.swing.SwingUtilities; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import static org.nuiton.i18n.I18n._; + /** - * + * Enable to select a species to the species selected in the protocol. + * * @author kmorin <kmorin@codelutin.com> + * @since 1.0 */ public class AddSpeciesAction extends AbstractTuttiAction<CreateSpeciesBatchUIModel, CreateSpeciesBatchUIHandler> { @@ -52,8 +51,6 @@ /** Logger. */ private static final Log log = LogFactory.getLog(AddSpeciesAction.class); -// protected AddSpeciesUI popup; - protected List<Species> allSpecies; public AddSpeciesAction(CreateSpeciesBatchUIHandler handler) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIHandler.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -26,26 +26,15 @@ */ import com.google.common.collect.Lists; -import fr.ifremer.tutti.persistence.TuttiPersistence; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler; -import fr.ifremer.tutti.ui.swing.TuttiUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.List; -import javax.swing.JDialog; -import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** - * * @author kmorin <kmorin@codelutin.com> + * @since 1.0 */ public class AddSpeciesUIHandler extends AbstractTuttiUIHandler<AddSpeciesUIModel> { @@ -75,6 +64,9 @@ @Override public void onCloseUI() { + if (log.isInfoEnabled()) { + log.info("Closing: " + ui); + } } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIModel.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIModel.java 2013-02-01 11:12:52 UTC (rev 287) @@ -31,8 +31,8 @@ import java.util.List; /** - * * @author kmorin <kmorin@codelutin.com> + * @since 1.0 */ public class AddSpeciesUIModel extends AbstractTuttiBeanUIModel<AddSpeciesUIModel, AddSpeciesUIModel> { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -45,7 +45,6 @@ import java.beans.PropertyChangeListener; import java.util.List; import jaxx.runtime.SwingUtil; -import jaxx.runtime.swing.CardLayout2Ext; import jaxx.runtime.validator.swing.SwingValidator; /** Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.css 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.css 2013-02-01 11:12:52 UTC (rev 287) @@ -45,7 +45,6 @@ } #categoryComboBox { - property: selectedCategory; selectedItem: {model.getSelectedCategory()}; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.jaxx 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUI.jaxx 2013-02-01 11:12:52 UTC (rev 287) @@ -82,8 +82,7 @@ <JLabel id='categoryLabel'/> </cell> <cell weightx='1.0'> - <BeanComboBox id='categoryComboBox' constructorParams='this' - genericType='SampleCategoryType'/> + <JComboBox id='categoryComboBox'/> </cell> </row> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -39,8 +39,6 @@ import fr.ifremer.tutti.ui.swing.util.Cancelable; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; -import jaxx.runtime.validator.swing.SwingValidatorMessageTableRenderer; -import jaxx.runtime.validator.swing.SwingValidatorUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; @@ -49,8 +47,8 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; +import javax.swing.DefaultComboBoxModel; import jaxx.runtime.SwingUtil; -import jaxx.runtime.swing.CardLayout2Ext; import jaxx.runtime.validator.swing.SwingValidator; /** @@ -168,11 +166,7 @@ initUI(ui); SplitSpeciesBatchUIModel model = getModel(); - - initBeanComboBox(ui.getCategoryComboBox(), - Lists.<SampleCategoryType>newArrayList(), - model.getSelectedCategory()); - + // when category changed, remove selected category model.addPropertyChangeListener(SplitSpeciesBatchUIModel.PROPERTY_CATEGORY, new PropertyChangeListener() { @Override @@ -185,7 +179,8 @@ source.setSelectedCategory(null); // fill comboBox with new list - ui.getCategoryComboBox().setData((List<SampleCategoryType>) evt.getNewValue()); + List<SampleCategoryType> data = (List<SampleCategoryType>) evt.getNewValue(); + ui.getCategoryComboBox().setModel(new DefaultComboBoxModel(data.toArray())); } }); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicRowModel.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicRowModel.java 2013-02-01 11:12:52 UTC (rev 287) @@ -30,8 +30,9 @@ import java.io.Serializable; /** - * + * * @author kmorin <kmorin@codelutin.com> + * @since 1.0 */ public abstract class CaracteristicRowModel<RM extends CaracteristicRowModel<RM>> extends AbstractTuttiBeanUIModel<Serializable, RM> { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIHandler.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -47,6 +47,7 @@ /** * * @author kmorin <kmorin@codelutin.com> + * @since 1.0 */ public abstract class CaracteristicTabUIHandler <RM extends CaracteristicRowModel<RM>, 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/CancelEditProgramAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -32,7 +32,7 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Cancels the edition of a program * * @author tchemit <chemit@codelutin.com> * @since 1.0 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -28,7 +28,10 @@ import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.MainUI; +import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUI; +import java.awt.event.ActionEvent; +import javax.swing.JOptionPane; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -121,6 +124,20 @@ } @Override + public boolean canCloseUI(TuttiScreen nextScreen) { + boolean result = true; + if (getModel().isModify()) { + int answer = askSaveBeforeLeaving(ui); + result = answer == JOptionPane.NO_OPTION; + if (answer == JOptionPane.YES_OPTION) { + ActionEvent event = new ActionEvent(nextScreen, nextScreen.ordinal(), null); + ui.getSaveProgramAction().actionPerformed(event); + } + } + return result; + } + + @Override public EditProgramUIModel getModel() { return ui.getModel(); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/SaveProgramAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/SaveProgramAction.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/SaveProgramAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -29,6 +29,7 @@ import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.ChangeScreenAction; import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import java.awt.event.ActionEvent; @@ -59,6 +60,11 @@ ); } + /** + * If the event source is a TuttiScreen, then the screen changes to the source. + * Otherwise, the screen changes to the home. + * @param event + */ @Override protected void doAction(ActionEvent event) { TuttiUIContext context = getContext(); @@ -76,7 +82,14 @@ } context.setProgramId(saved.getId()); - context.setScreen(TuttiScreen.SELECT_CRUISE); + + TuttiScreen nextScreen; + if (event.getSource().getClass().isAssignableFrom(TuttiScreen.class)) { + nextScreen = (TuttiScreen) event.getSource(); + } else { + nextScreen = TuttiScreen.SELECT_CRUISE; + } + context.setScreen(nextScreen); } } 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CancelEditProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -32,7 +32,7 @@ import static org.nuiton.i18n.I18n._; /** - * TODO + * Cancels the edition of a protocol * * @author tchemit <chemit@codelutin.com> * @since 1.0 Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-02-01 11:12:52 UTC (rev 287) @@ -101,6 +101,7 @@ result.setWeightEnabled(true); result.setCountIfNoFrequencyEnabled(true); result.setCalcifySampleEnabled(true); + result.setValid(true); return result; } 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -33,10 +33,12 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.MainUI; import fr.ifremer.tutti.ui.swing.MainUIHandler; +import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUI; import fr.ifremer.tutti.ui.swing.content.home.ImportProtocolAction; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import java.awt.event.ActionEvent; import jaxx.runtime.swing.editor.bean.BeanDoubleList; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections.CollectionUtils; @@ -47,6 +49,7 @@ import java.util.List; import java.util.Map; +import javax.swing.JOptionPane; /** @@ -170,12 +173,6 @@ allCaracteristic = persistenceService.getAllCaracteristic(); -// hydroCaracteristics = ArrayListMultimap.create(); -// for (Caracteristic caracteristic : -// persistenceService.getAllCaracteristic()) { -// String name = HydrologicCaracteristicUtil.getGlobalName(caracteristic.getName()); -// hydroCaracteristics.put(name, caracteristic.getId()); -// } } public List<Caracteristic> getAllCaracteristic() { @@ -312,7 +309,7 @@ initDoubleList(ui.getLengthClassesList(), Lists.newArrayList(allCaracteristic), - model.getHydrologyPmfmId()); + model.getLengthClassesPmfmId()); initDoubleList(ui.getGearList(), Lists.newArrayList(allCaracteristic), @@ -326,28 +323,6 @@ Lists.newArrayList(allCaracteristic), model.getHydrologyPmfmId()); -// List<Caracteristic> selection = Lists.newArrayList(); -// Collection<String> availableCaracteristicNames = hydroCaracteristics.keySet(); -// List<Caracteristic> availableCaracteristics = Lists.newArrayList(); -// for (String name : availableCaracteristicNames) { -// Caracteristic caracteristic = HydrologicCaracteristicUtil.createGlobalCaracteristic(name, null); -// availableCaracteristics.add(caracteristic); -// } -// List<String> hydrologyPmfm = model.getHydrologyPmfmId(); -// if (hydrologyPmfm != null) { -// for (String caracteristicName : availableCaracteristicNames) { -// Collection<String> ids = hydroCaracteristics.get(caracteristicName); -// for (String caracteristicId : hydrologyPmfm) { -// if (ids.contains(caracteristicId)) { -// Caracteristic caracteristic = HydrologicCaracteristicUtil.createGlobalCaracteristic(caracteristicName, null); -// selection.add(caracteristic); -// break; -// } -// } -// } -// } -// initBeanList(ui.getHydrologyList(), availableCaracteristics, selection); - // if new protocol can already cancel his creation model.setModify(model.isCreate()); } @@ -362,6 +337,20 @@ } @Override + public boolean canCloseUI(TuttiScreen nextScreen) { + boolean result = true; + if (getModel().isModify()) { + int answer = askSaveBeforeLeaving(ui); + result = answer == JOptionPane.NO_OPTION; + if (answer == JOptionPane.YES_OPTION) { + ActionEvent event = new ActionEvent(nextScreen, nextScreen.ordinal(), null); + ui.getSaveProtocolAction().actionPerformed(event); + } + } + return result; + } + + @Override protected void onAfterSelectedRowChanged(int oldRowIndex, EditProtocolSpeciesRowModel oldRow, int newRowIndex, @@ -383,7 +372,7 @@ ui.getSpeciesComboBox().removeItem(species); selectFirstInCombo(ui.getSpeciesComboBox()); -// getModel().setModify(true); + getModel().setModify(true); } /** Removes a species */ @@ -400,10 +389,6 @@ getTableModel().fireTableRowsDeleted(rowIndex, rowIndex); } -// public Multimap<String, String> getHydroCaracteristics() { -// return hydroCaracteristics; -// } - //------------------------------------------------------------------------// //-- Internal methods --// //------------------------------------------------------------------------// 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SaveProtocolAction.java 2013-02-01 11:12:52 UTC (rev 287) @@ -42,6 +42,8 @@ import static org.nuiton.i18n.I18n._; /** + * Saves a protocol + * * @author kmorin <kmorin@codelutin.com> * @since 1.0 */ @@ -62,6 +64,11 @@ ); } + /** + * If the event source is a TuttiScreen, then the screen changes to the source. + * Otherwise, the screen changes to the home. + * @param event + */ @Override protected void doAction(ActionEvent event) { EditProtocolUIModel model = getModel(); @@ -94,7 +101,13 @@ context.setProtocolId(saved.getId()); - context.setScreen(TuttiScreen.SELECT_CRUISE); + TuttiScreen nextScreen; + if (event.getSource().getClass().isAssignableFrom(TuttiScreen.class)) { + nextScreen = (TuttiScreen) event.getSource(); + } else { + nextScreen = TuttiScreen.SELECT_CRUISE; + } + context.setScreen(nextScreen); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -31,7 +31,6 @@ import fr.ifremer.tutti.ui.swing.TuttiUIContext; import java.awt.Component; import javax.swing.DefaultSingleSelectionModel; -import javax.swing.Icon; import javax.swing.JTabbedPane; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -67,12 +66,12 @@ if (currentIndex != newIndex) { TabHandler handler = getTabHandler(currentIndex); if (handler != null) { - result = handler.onHideTab(); + result = handler.onHideTab(currentIndex, newIndex); } handler = getTabHandler(newIndex); if (handler != null) { - handler.onShowTab(); + handler.onShowTab(currentIndex, newIndex); } } return result; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java 2013-02-01 11:12:52 UTC (rev 287) @@ -27,7 +27,6 @@ import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; import java.awt.Color; -import java.awt.Transparency; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JLabel; Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java 2013-02-01 11:12:52 UTC (rev 287) @@ -1,91 +0,0 @@ - -package fr.ifremer.tutti.ui.swing.util; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; - -/** - * @author kmorin <kmorin@codelutin.com> - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class HydrologicCaracteristicUtil { - - public enum Type { - START, - END, - AVERAGE - } - - protected static Binder<Caracteristic, Caracteristic> caracteristicBinder; - - public static String getGlobalName(String name) { - if (name.charAt(name.length() - 2) == '_') { - name = name.substring(0, name.length() - 2); - } - return name; - } - - public static Caracteristic createGlobalCaracteristic(String name, - Caracteristic source) { - Caracteristic result = new Caracteristic(); - if (source != null) { - getCaracteristicBinder().copy(source, result); - } - result.setName(name); - result.setId(name); - return result; - } - - public static Type getTypeOfCaracteristic(Caracteristic caracteristic) { - String name = caracteristic.getName(); - Type result = null; - if (name.charAt(name.length() - 2) == '_') { - char lastChar = name.charAt(name.length() - 1); - switch (lastChar) { - case 'S': - result = Type.START; - break; - case 'E': - result = Type.END; - break; - case 'A': - result = Type.AVERAGE; - } - } - return result; - } - - protected static Binder<Caracteristic, Caracteristic> getCaracteristicBinder() { - if (caracteristicBinder == null) { - caracteristicBinder = - BinderFactory.newBinder(Caracteristic.class); - } - return caracteristicBinder; - } -} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TabHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TabHandler.java 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TabHandler.java 2013-02-01 11:12:52 UTC (rev 287) @@ -36,11 +36,17 @@ /** * Method called when the tab is hidden * + * @param currentIndex + * @param newIndex * @return <code>false</code> to prevent the tab to be hidden, * <code>true</code> otherwise. */ - boolean onHideTab(); + boolean onHideTab(int currentIndex, int newIndex); - /** Method called when the tab is shown */ - void onShowTab(); + /** + * Method called when the tab is shown + * @param currentIndex + * @param newIndex + */ + void onShowTab(int currentIndex, int newIndex); } Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml 2013-02-01 11:12:52 UTC (rev 287) @@ -55,12 +55,26 @@ <field-validator type="required" short-circuit="true"> <message>tutti.validator.error.cruise.beginDate.required</message> </field-validator> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ endDate == null || beginDate.compareTo(endDate) <= 0 ]]> + </param> + <message>tutti.validator.error.cruise.dates.endBeforeStart</message> + </field-validator> </field> <field name="endDate"> <field-validator type="required" short-circuit="true"> <message>tutti.validator.error.cruise.endDate.required</message> </field-validator> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ beginDate == null || beginDate.compareTo(endDate) <= 0 ]]> + </param> + <message>tutti.validator.error.cruise.dates.endBeforeStart</message> + </field-validator> </field> Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml 2013-02-01 11:12:52 UTC (rev 287) @@ -30,6 +30,24 @@ <validators> + <field name="gearShootingStartDate"> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ gearShootingEndDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) <= 0 ]]> + </param> + <message>tutti.validator.error.fishingOperation.dates.endBeforeStart</message> + </field-validator> + </field> + + <field name="gearShootingEndDate"> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) <= 0 ]]> + </param> + <message>tutti.validator.error.fishingOperation.dates.endBeforeStart</message> + </field-validator> + </field> + <!--gear shooting start latitude validation --> <field name="gearShootingStartLatitude"> Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml 2013-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml 2013-02-01 11:12:52 UTC (rev 287) @@ -69,12 +69,30 @@ <field-validator type="required" short-circuit="true"> <message>tutti.validator.error.fishingOperation.date.required</message> </field-validator> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ gearShootingEndDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) <= 0 ]]> + </param> + <message>tutti.validator.error.fishingOperation.dates.endBeforeStart</message> + </field-validator> + + </field> + <field name="gearShootingEndDate"> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) <= 0 ]]> + </param> + <message>tutti.validator.error.fishingOperation.dates.endBeforeStart</message> + </field-validator> + </field> <!--gear shooting start latitude validation --> - <field name="gearShootingStartLatitude"> + <field name="gearShootingStartLatitude"> <field-validator type="fieldexpressionwithparams"> <param name="doubleParams">min:90.0|max:90.0</param> 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-02-01 11:03:51 UTC (rev 286) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-02-01 11:12:52 UTC (rev 287) @@ -6,6 +6,8 @@ tutti.action.cancel=Annuler tutti.action.cancel.editCruise=Annuler tutti.action.cancel.editCruise.tip=Annuler l'édition (ou la création) de la campagne +tutti.action.cancel.editFishingOperation=Annuler +tutti.action.cancel.editFishingOperation.tip=Annuler l'édition (ou la création) du trait tutti.action.cancel.editProgram=Annuler tutti.action.cancel.editProgram.tip=Annuler l'édition (ou la création) de la série de campagne tutti.action.cancel.editProtocol=Annuler @@ -160,7 +162,7 @@ tutti.label.filterSpeciesBatchMode.mode.all.tip=Pas de filtre (tous les lots sont visibles) tutti.label.filterSpeciesBatchMode.mode.leaf=Feuilles tutti.label.filterSpeciesBatchMode.mode.leaf.tip=Voir uniquement les lots *feuilles* -tutti.label.filterSpeciesBatchMode.mode.root=Parents +tutti.label.filterSpeciesBatchMode.mode.root=Parents (%s) tutti.label.filterSpeciesBatchMode.mode.root.tip=Voir uniquement les lots *parents* tutti.label.filterVesselType=Filtre \: tutti.label.filterVesselType.all=Tout @@ -376,6 +378,7 @@ tutti.validator.error.createSpeciesBatch.speciesAndCategory.notAvailable=Couple (espèce - Vrac/Hors Vrac) déjà utilisée tutti.validator.error.cruise.beginDate.required=La date de début est obligatoire tutti.validator.error.cruise.country.required=Le pays est obligatoire +tutti.validator.error.cruise.dates.endBeforeStart=La date de fin doit être après la date de début tutti.validator.error.cruise.endDate.required=La date de fin est obligatoire tutti.validator.error.cruise.gear.required=Au moins un engin doit être sélectionné tutti.validator.error.cruise.headOfMission.required=Au moins un chef de mission doit être sélectionné @@ -386,6 +389,7 @@ tutti.validator.error.cruise.vessel.required=Au moins un bateau doit être sélectionné tutti.validator.error.cruise.year.required=L'année est obligatoire tutti.validator.error.fishingOperation.date.required=La date du fishingOperation est obligatoire +tutti.validator.error.fishingOperation.dates.endBeforeStart=La date de fin doit être après la date de début tutti.validator.error.fishingOperation.fishingOperationNumber.required=Le numéro de trait est obligatoire tutti.validator.error.fishingOperation.stationNumber.required=Le numéro de station est obligatoire tutti.validator.error.fishingOperation.stationNumber.too.long=Valeur trop longue (limitée à %s caractères) Modified: trunk/tutti-ui-swing/src/main/resources/icons/action-alert-warning.png =================================================================== (Binary files differ)