Author: tchemit Date: 2013-02-11 09:14:47 +0100 (Mon, 11 Feb 2013) New Revision: 389 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/389 Log: - debug select - save - cancel of fishing operation (pretty cool ?) - debug save - cancel of catchBatch - reformat code Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiAction.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/EditCruiseUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/DeleteProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/CancelEditCatchBatchAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SaveCatchBatchAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/RenameSpeciesBatchAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx 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/frequency/FrequencyCellComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchTableModel.java 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/program/EditProgramUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiAction.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiAction.java 2013-02-11 08:14:47 UTC (rev 389) @@ -212,7 +212,7 @@ return handler.getModel(); } - protected <S extends TuttiService> S getService(Class<S> serviceType) { + protected <S extends TuttiService> S getService(Class<S> serviceType) { return getContext().getService(serviceType); } 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-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-02-11 08:14:47 UTC (rev 389) @@ -25,7 +25,6 @@ */ import com.google.common.collect.Lists; -import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.referential.Gear; @@ -38,7 +37,6 @@ import jaxx.runtime.JAXXUtil; import jaxx.runtime.context.JAXXContextEntryDef; import jaxx.runtime.validator.swing.SwingValidator; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel.java 2013-02-11 08:14:47 UTC (rev 389) @@ -31,12 +31,12 @@ import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; +import org.apache.commons.lang3.StringUtils; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; import java.util.Date; import java.util.List; -import org.apache.commons.lang3.StringUtils; /** * Model of UI {@link EditCruiseUI}. Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/DeleteProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/DeleteProtocolAction.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/DeleteProtocolAction.java 2013-02-11 08:14:47 UTC (rev 389) @@ -31,9 +31,9 @@ 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 javax.swing.JOptionPane; import static org.nuiton.i18n.I18n._; @@ -63,16 +63,16 @@ @Override protected boolean prepareAction(ActionEvent event) { boolean result = super.prepareAction(event); - + TuttiProtocol protocol = getHandler().getModel().getProtocol(); int answer = JOptionPane.showConfirmDialog( - getHandler().getUI(), - _("tutti.action.deleteProtocol.message", protocol.getName()), + getHandler().getUI(), + _("tutti.action.deleteProtocol.message", protocol.getName()), _("tutti.action.deleteProtocol.title"), JOptionPane.OK_CANCEL_OPTION - ); + ); result &= answer == JOptionPane.OK_OPTION; - + return result; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-02-11 08:14:47 UTC (rev 389) @@ -140,125 +140,132 @@ return saveCatchBatchAction; } + @Override - protected void doAction(ActionEvent event) throws Exception { + protected boolean prepareAction(ActionEvent event) { + boolean canContinue = super.prepareAction(event); + if (canContinue && checkPreviousEdit) { + FishingOperationsUI ui = getUI(); - if (log.isInfoEnabled()) { - log.info("Try to edit fishingOperation: " + fishingOperation); - } + final FishingOperationsUIModel model = ui.getModel(); - FishingOperationsUI ui = getUI(); + FishingOperation editFishingOperation = model.getEditFishingOperation(); - FishingOperationsUIModel model = ui.getModel(); + String editFishingOperationId = null; - FishingOperation editFishingOperation = model.getEditFishingOperation(); + if (editFishingOperation == null) { - boolean canContinue; + // no previous fishing operation in edition, can continue + canContinue = true; + } else { - String editFishingOperationId; + editFishingOperationId = editFishingOperation.getId(); - if (editFishingOperation == null) { + boolean create = TuttiEntities.isNew(editFishingOperation); - // no previous fishing operation in edition, can continue - canContinue = true; - editFishingOperationId = null; + // must close current edition + String message; - } else { + if (create) { + message = _("tutti.dialog.askSaveBeforeLeaving.createFishingOperation"); + } else { + message = _("tutti.dialog.askSaveBeforeLeaving.saveFishingOperation"); + } - editFishingOperationId = editFishingOperation.getId(); + int answer = getHandler().askSaveBeforeLeaving(message); - boolean create = TuttiEntities.isNew(editFishingOperation); + canContinue = false; + switch (answer) { + case JOptionPane.OK_OPTION: - // must close current edition - String message; + // persist previous fishing operation + getSaveFishingOperationAction().setUpdateUI(false); + getSaveFishingOperationAction().actionPerformed(event); + getSaveCatchBatchAction().setUpdateUI(false); + getSaveCatchBatchAction().actionPerformed(event); - if (create) { - message = _("tutti.dialog.askSaveBeforeLeaving.createFishingOperation"); - } else { - message = _("tutti.dialog.askSaveBeforeLeaving.saveFishingOperation"); - } + canContinue = true; + break; - int answer = getHandler().askSaveBeforeLeaving(message); + case JOptionPane.NO_OPTION: - canContinue = false; - switch (answer) { - case JOptionPane.OK_OPTION: + // won't save modification + // so since we will edit a new operation, nothing to do here - // persist previous fishing operation - getSaveFishingOperationAction().setUpdateUI(false); - getSaveFishingOperationAction().actionPerformed(event); - getSaveCatchBatchAction().setUpdateUI(false); - getSaveCatchBatchAction().actionPerformed(event); + canContinue = true; + break; + } + } + if (!canContinue) { - canContinue = true; - break; + // rollback selected fishing operation + FishingOperation selectFishingOperation = + model.getFishingOperation(editFishingOperationId); - case JOptionPane.NO_OPTION: + model.setEditionAdjusting(true); + try { + model.setSelectedFishingOperation(selectFishingOperation); + } finally { + model.setEditionAdjusting(false); + } + } + } - // won't save modification - // so since we will edit a new operation, nothing to do here + return canContinue; + } - canContinue = true; - break; - } + @Override + protected void doAction(ActionEvent event) throws Exception { + + if (log.isInfoEnabled()) { + log.info("Try to edit fishingOperation: " + fishingOperation); } - if (canContinue) { + FishingOperationsUI ui = getUI(); - // edit new fishing operation - if (log.isInfoEnabled()) { - log.info("Edit in ui fishingOperation: " + fishingOperation); - } + FishingOperationsUIModel model = ui.getModel(); - selectNewFishingOperation(fishingOperation); + // edit new fishing operation + if (log.isInfoEnabled()) { + log.info("Edit in ui fishingOperation: " + fishingOperation); + } - selectNewCatchBatch(fishingOperation); + // now fishing operation is edited + model.setEditFishingOperation(fishingOperation); - JTabbedPane form = ui.getTabPane(); - JLabel noContentPane = ui.getNoTraitPane(); + loadFishingOperation(fishingOperation); - if (fishingOperation == null) { + loadCatchBatch(fishingOperation, true); - // nothing to display + JTabbedPane form = ui.getTabPane(); + JLabel noContentPane = ui.getNoTraitPane(); - ui.remove(form); + if (fishingOperation == null) { - // just display <no trait!> - ui.add(noContentPane, BorderLayout.CENTER); + // nothing to display - } else { + ui.remove(form); - ui.remove(noContentPane); + // just display <no trait!> + ui.add(noContentPane, BorderLayout.CENTER); - // wait last minute to display (avoid dirty display effects) - ui.add(form, BorderLayout.CENTER); - } - - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - getUI().repaint(); - } - }); } else { - // user cancel save of previous bean + ui.remove(noContentPane); - // get previous edit fishing operation (in selection model) - FishingOperation selectFishingOperation = - model.getFishingOperation(editFishingOperationId); + // wait last minute to display (avoid dirty display effects) + ui.add(form, BorderLayout.CENTER); + } - model.setEditionAdjusting(true); - - try { - model.setSelectedFishingOperation(selectFishingOperation); - } finally { - model.setEditionAdjusting(false); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + getUI().repaint(); } - } + }); } - protected void selectNewFishingOperation(FishingOperation bean) { + public void loadFishingOperation(FishingOperation bean) { EditFishingOperationUI ui = getUI().getFishingOperationTabContent(); @@ -343,7 +350,7 @@ handler.installStartDateListener(); } - protected void selectNewCatchBatch(FishingOperation bean) { + public void loadCatchBatch(FishingOperation bean, boolean loadOtherTabs) { boolean empty = bean == null || TuttiEntities.isNew(bean); @@ -401,6 +408,7 @@ decorator.toString(fishingOperation)); } + // 3) Propagate title to others tabs ui.getCatchesCaracteristicsTabPane().setTitle(fishingOperationText); ui.getSpeciesTabFishingOperationReminderLabel().setTitle(fishingOperationText); @@ -409,14 +417,18 @@ // ui.getMacroWasteTabFishingOperationReminderLabel().setTitle(fishingOperationText); // ui.getAccidentalTabFishingOperationReminderLabel().setTitle(fishingOperationText); - // 4) Propagate new selected fishingoperation to others tabs + if (loadOtherTabs) { - ui.getSpeciesTabContent().getHandler().selectFishingOperation(bean); + // 4) Propagate new selected fishingoperation to others tabs + + ui.getSpeciesTabContent().getHandler().selectFishingOperation(bean); // ui.getBenthosTabContent().getHandler().selectFishingOperation(bean); // ui.getPlanktonTabContent().getHandler().selectFishingOperation(bean); // ui.getMacroWasteTabContent().getHandler().selectFishingOperation(bean); // ui.getAccidentalTabContent().getHandler().selectFishingOperation(bean); + + } } } 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-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-02-11 08:14:47 UTC (rev 389) @@ -37,7 +37,6 @@ import fr.ifremer.tutti.persistence.entities.referential.Zone; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; -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.EnvironmentTabUIModel; @@ -318,22 +317,6 @@ } @Override - 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: - doAction(ui.getSaveButton(), event); - break; - } - result = answer == JOptionPane.NO_OPTION; - } - return result; - } - - @Override public boolean onHideTab(int currentIndex, int newIndex) { boolean result = !isAModelModified(); if (!result) { @@ -342,10 +325,12 @@ switch (answer) { case JOptionPane.OK_OPTION: doAction(ui.getSaveButton(), event); + result = true; break; case JOptionPane.NO_OPTION: doAction(ui.getCancelButton(), event); + result = true; break; } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-02-11 08:14:47 UTC (rev 389) @@ -196,7 +196,7 @@ protected String multirigAggregation; protected CoordinateEditorType coordinateEditorType; - + protected List<FishingOperation> existingOperations; protected static Binder<EditFishingOperationUIModel, FishingOperation> toBeanBinder = @@ -726,7 +726,7 @@ public void setExistingOperations(List<FishingOperation> existingOperations) { this.existingOperations = existingOperations; } - + public void convertGearShootingCoordinatesDDToDMS() { SexagecimalPosition position; Integer degree; 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-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-02-11 08:14:47 UTC (rev 389) @@ -160,24 +160,26 @@ } else { operation = persistenceService.getFishingOperation(newValue.getId()); } - getModel().setEditFishingOperation(operation); + editFishingOperationAction.setFishingOperation(operation); + editFishingOperationAction.actionPerformed(null); +// getModel().setEditFishingOperation(operation); } } }); - model.addPropertyChangeListener(FishingOperationsUIModel.PROPERTY_EDITED_FISHING_OPERATION, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (log.isDebugEnabled()) { - log.debug("propertyChange " + FishingOperationsUIModel.PROPERTY_EDITED_FISHING_OPERATION); - } - - // only rebuild stuff if model is not adjusting - editFishingOperationAction.setFishingOperation((FishingOperation) evt.getNewValue()); - editFishingOperationAction.actionPerformed(null); - - } - }); +// model.addPropertyChangeListener(FishingOperationsUIModel.PROPERTY_EDITED_FISHING_OPERATION, new PropertyChangeListener() { +// @Override +// public void propertyChange(PropertyChangeEvent evt) { +// if (log.isDebugEnabled()) { +// log.debug("propertyChange " + FishingOperationsUIModel.PROPERTY_EDITED_FISHING_OPERATION); +// } +// +// // only rebuild stuff if model is not adjusting +// editFishingOperationAction.setFishingOperation((FishingOperation) evt.getNewValue()); +// editFishingOperationAction.actionPerformed(null); +// +// } +// }); model.addPropertyChangeListener(FishingOperationsUIModel.PROPERTY_FISHING_OPERATION, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { @@ -208,10 +210,15 @@ @Override public boolean canCloseUI(TuttiScreen nextScreen) { - boolean result = super.canCloseUI(nextScreen); - if (getTabPanel().getSelectedIndex() == 0) { - result = ui.getFishingOperationTabContent().getHandler().canCloseUI(nextScreen); - } +// boolean result = super.canCloseUI(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); +// } return result; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/CancelEditCatchBatchAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/CancelEditCatchBatchAction.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/CancelEditCatchBatchAction.java 2013-02-11 08:14:47 UTC (rev 389) @@ -24,8 +24,11 @@ * #L% */ +import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -54,6 +57,8 @@ */ protected boolean updateUI; + protected EditFishingOperationAction editAction; + public CancelEditCatchBatchAction(EditCatchesUIHandler handler) { super(handler, "cancelEditCatchBatch", @@ -64,21 +69,34 @@ ); } + public EditFishingOperationAction getEditAction() { + if (editAction == null) { + editAction = new EditFishingOperationAction(getHandler().getParentHandler()); + } + return editAction; + } + @Override protected void doAction(ActionEvent event) throws Exception { if (getModel().isCreate()) { - if (log.isInfoEnabled()) { - log.info("Cancel creation for catchBatch"); - } // cancel to create a catch batch ? - + // Should never happen ? + Preconditions.checkState( + false, + "Can't cancel edition of a not persisted catchBatch!"); } else { if (log.isInfoEnabled()) { - log.info("Can edition of catchBatch"); + log.info("Can edition of catchBatch (will reload catchBatch)"); } + + FishingOperation operation = getModel().getFishingOperation(); + + //TODO Should we also reload other tabs ??? Probably yes + + getEditAction().loadCatchBatch(operation, false); } } 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-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-02-11 08:14:47 UTC (rev 389) @@ -26,6 +26,7 @@ import fr.ifremer.tutti.ui.swing.TuttiUI; import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; +import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUIHandler; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiTabContainerUIHandler; import fr.ifremer.tutti.ui.swing.util.TabHandler; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; @@ -35,6 +36,7 @@ import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTitledPanel; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTabbedPane; @@ -74,8 +76,10 @@ */ private final TuttiBeanMonitor<EditCatchesUIModel> catchBatchMonitor; + protected final FishingOperationsUI parentUi; public EditCatchesUIHandler(FishingOperationsUI parentUi, EditCatchesUI ui) { super(parentUi.getHandler().getContext(), ui); + this.parentUi=parentUi; // this.persistenceService = context.getService(PersistenceService.class); this.catchBatchMonitor = new TuttiBeanMonitor<EditCatchesUIModel>( EditCatchesUIModel.PROPERTY_SPECIES_TOTAL_WEIGHT, @@ -135,6 +139,7 @@ return ui.getValidator(); } + @Override protected JTabbedPane getTabPanel() { return ui.getTabPane(); @@ -145,13 +150,36 @@ //FIXME 20130203 kmorin: cannot change tab if model is modified // (I do not even know why it is set to modified and have no time // before the demo) -// AbstractTuttiBeanUIModel model = getModel(); -// boolean result = model.isValid(); -// if (result && model.isModify()) { -// save(); -// } -// return result; - return true; + EditCatchesUIModel model = getModel(); + boolean result = model.isValid(); + if (model.isModify()) { + int answer = askSaveBeforeLeaving(getUI()); + switch (answer) { + case JOptionPane.OK_OPTION: + + // persist catch batch + doAction(getUI().getSaveButton(), null); + + result = true; + break; + + case JOptionPane.NO_OPTION: + + // won't save modification + // so since we will edit a new operation, nothing to do here + + // persist catch batch + doAction(getUI().getCancelButton(), null); + + result = true; + break; + default: + + // other case, use cancel action + result = false; + } + } + return result; } @Override @@ -167,7 +195,15 @@ return catchBatchMonitor; } -// public void selectFishingOperation(FishingOperation bean, + public FishingOperationsUI getParentUi() { + return parentUi; + } + + public FishingOperationsUIHandler getParentHandler() { + return getParentUi().getHandler(); + } + + // public void selectFishingOperation(FishingOperation bean, // String fishingOperationText) { // // boolean empty = bean == null; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java 2013-02-11 08:14:47 UTC (rev 389) @@ -28,7 +28,7 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderModelBuilder; +import org.nuiton.util.beans.BinderFactory; import static org.nuiton.i18n.I18n._; @@ -80,8 +80,9 @@ public static final String PROPERTY_CATCH_BATCH = "catchBatch"; - protected static final Binder<CatchBatch, EditCatchesUIModel> fromBeanBinder = BinderModelBuilder.newEmptyBuilder(CatchBatch.class, EditCatchesUIModel.class) + /*protected static final Binder<CatchBatch, EditCatchesUIModel> fromBeanBinder = BinderModelBuilder.newEmptyBuilder(CatchBatch.class, EditCatchesUIModel.class) .addSimpleProperties( + PROPERTY_CATCH_TOTAL_WEIGHT, PROPERTY_SPECIES_TOTAL_WEIGHT, PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT, PROPERTY_SPECIES_TOTAL_UNSORTED_WEIGHT, @@ -112,8 +113,12 @@ PROPERTY_PLANKTON_TOTAL_WEIGHT, PROPERTY_PLANKTON_TOTAL_SAMPLE_WEIGHT, PROPERTY_MACRO_WASTE_TOTAL_WEIGHT - ).toBinder(); + ).toBinder();*/ + protected static final Binder<CatchBatch, EditCatchesUIModel> fromBeanBinder = BinderFactory.newBinder(CatchBatch.class, EditCatchesUIModel.class); + + protected static final Binder<EditCatchesUIModel, CatchBatch> toBeanBinder = BinderFactory.newBinder(EditCatchesUIModel.class, CatchBatch.class); + protected Float speciesTotalWeight; protected Float speciesTotalSortedWeight; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SaveCatchBatchAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SaveCatchBatchAction.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SaveCatchBatchAction.java 2013-02-11 08:14:47 UTC (rev 389) @@ -111,6 +111,7 @@ persistenceService.saveCatchBatch(catchBatch); monitor.clearModified(); + getModel().setModify(false); } getUI().getSpeciesTabContent().getHandler().clearTableSelection(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/RenameSpeciesBatchAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/RenameSpeciesBatchAction.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/RenameSpeciesBatchAction.java 2013-02-11 08:14:47 UTC (rev 389) @@ -25,9 +25,7 @@ */ import com.google.common.collect.Lists; -import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -70,21 +68,21 @@ boolean result = super.prepareAction(event); SpeciesBatchUIHandler handler = getHandler(); - + SpeciesBatchTableModel tableModel = handler.getTableModel(); JXTable table = handler.getTable(); SpeciesBatchRowModel row = tableModel.getEntry(table.getSelectedRow()); - + SpeciesBatchUIModel model = handler.getModel(); List<Species> speciesList = Lists.newArrayList(model.getAllSpecies()); speciesList.removeAll( model.getSpeciesUsed().get( - row.getSortedUnsortedCategoryValue())); + row.getSortedUnsortedCategoryValue())); selectedSpecies = getHandler().openAddSpeciesDialog( _("tutti.title.selectSpecies"), speciesList - ); + ); result &= selectedSpecies != null; return result; @@ -101,17 +99,17 @@ // TODO 20130206 kmorin uncomment the following lines when the service is available // PersistenceService persistenceService = getContext().getService(PersistenceService.class); // persistenceService.changeSpeciesBatchSpecies(row.getId(), selectedSpecies); - + Collection<Species> speciesUSed = handler.getModel().getSpeciesUsed() .get(row.getSortedUnsortedCategoryValue()); speciesUSed.remove(row.getSpecies()); changeChildrenSpecies(row, selectedSpecies); speciesUSed.add(selectedSpecies); - + selectedSpecies = null; } - protected void changeChildrenSpecies(SpeciesBatchRowModel row, + protected void changeChildrenSpecies(SpeciesBatchRowModel row, Species species) { row.setSpecies(species); List<SpeciesBatchRowModel> children = row.getBatchChild(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java 2013-02-11 08:14:47 UTC (rev 389) @@ -58,7 +58,7 @@ * @since 0.3 */ protected Float categoryWeight; - + /** * Sample computed weight. * @@ -112,9 +112,9 @@ } public boolean isEmpty() { - return categoryValue == null - && categoryWeight == null - && computedWeight == null; + return categoryValue == null + && categoryWeight == null + && computedWeight == null; } public boolean isEmptyOrValid() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryComponent.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryComponent.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryComponent.java 2013-02-11 08:14:47 UTC (rev 389) @@ -218,7 +218,7 @@ } else { Float number = sampleCategory.getCategoryWeight(); Float computedNumber = sampleCategory.getComputedWeight(); - + text = "<html>" + categoryDecorator.toString(categoryValue) + " / "; if (number != null) { @@ -228,7 +228,7 @@ } else { text += "-"; } - + text += "</html>"; } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2013-02-11 08:14:47 UTC (rev 389) @@ -59,7 +59,7 @@ public static final String PROPERTY_SORTED_UNSORTED_CATEGORY_VALUE = "sortedUnsortedCategoryValue"; public static final String PROPERTY_SORTED_UNSORTED_CATEGORY_WEIGHT = "sortedUnsortedCategoryWeight"; - + public static final String PROPERTY_SORTED_UNSORTED_COMPUTED_WEIGHT = "sortedUnsortedComputedWeight"; public static final String PROPERTY_SIZE_CATEGORY = "sizeCategory"; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx 2013-02-11 08:14:47 UTC (rev 389) @@ -156,7 +156,8 @@ <JRadioButton id='filterSpeciesBatchRootButton' onActionPerformed='model.setTableViewMode(TableViewMode.ROOT)'/> </JPanel> - <JButton id='computeSpeciesBatchButton' constraints='BorderLayout.EAST' + <JButton id='computeSpeciesBatchButton' + constraints='BorderLayout.EAST' onActionPerformed='handler.computeSpeciesBatch()'/> </JPanel> </cell> 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-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-02-11 08:14:47 UTC (rev 389) @@ -843,20 +843,20 @@ } row.setComputedNumber(totalNumber); - + SampleCategory finestCategory; if (row.getAgeCategory().isValid()) { finestCategory = row.getAgeCategory(); - + } else if (row.getMaturityCategory().isValid()) { finestCategory = row.getMaturityCategory(); - + } else if (row.getSexCategory().isValid()) { finestCategory = row.getSexCategory(); - + } else if (row.getSizeCategory().isValid()) { finestCategory = row.getSizeCategory(); - + } else { finestCategory = row.getSortedUnsortedCategory(); } @@ -865,7 +865,7 @@ } } - + public void computeSpeciesBatch() { Float totalSortedWeight = 0f; Float totalUnsortedWeight = 0f; @@ -876,8 +876,8 @@ if (weight == null) { JOptionPane.showMessageDialog( ui, - _("tutti.dialog.catches.species.computeWeight.error.message"), - _("tutti.dialog.catches.species.computeWeight.error.title"), + _("tutti.dialog.catches.species.computeWeight.error.message"), + _("tutti.dialog.catches.species.computeWeight.error.title"), JOptionPane.ERROR_MESSAGE); totalSortedWeight = null; totalUnsortedWeight = null; @@ -912,7 +912,7 @@ sum += weight; } } - + SampleCategory finestCategory; if (row.getAgeCategory().isValid()) { finestCategory = row.getAgeCategory(); @@ -937,13 +937,13 @@ if (sum != null && weight == null) { finestCategory.setComputedWeight(sum); result = sum; - + } else { result = weight; } return result; } - + protected void saveRows(Iterable<SpeciesBatchRowModel> rows) { for (SpeciesBatchRowModel row : rows) { saveRow(row); @@ -1081,7 +1081,7 @@ if (enableSplit) { // can split if selected batch is a leaf - enableSplit = row.isBatchLeaf() + enableSplit = row.isBatchLeaf() && row.getComputedNumber() == null; } 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-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/FrequencyCellComponent.java 2013-02-11 08:14:47 UTC (rev 389) @@ -156,7 +156,7 @@ } else { // transfer rows to editor List<SpeciesFrequencyRowModel> frequency = Lists.newArrayList(); - + for (SpeciesFrequencyRowModel row : frequencyModel.getRows()) { if (row.isValid()) { @@ -174,7 +174,7 @@ editRow.setNumber(null); } - + // update frequencies total ui.getHandler().updateTotalFromFrequencies(editRow); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchRowModel.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchRowModel.java 2013-02-11 08:14:47 UTC (rev 389) @@ -54,7 +54,7 @@ * @since 0.3 */ protected final SampleCategory<Serializable> category = SampleCategory.newSample(null); - + protected static final Binder<SplitSpeciesBatchRowModel, SplitSpeciesBatchRowModel> fromBeanBinder = BinderFactory.newBinder(SplitSpeciesBatchRowModel.class, SplitSpeciesBatchRowModel.class); @@ -106,5 +106,5 @@ category.setCategoryWeight(weight); firePropertyChange(PROPERTY_WEIGHT, oldValue, weight); } - + } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchTableModel.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchTableModel.java 2013-02-11 08:14:47 UTC (rev 389) @@ -46,7 +46,7 @@ SplitSpeciesBatchRowModel.PROPERTY_VALID, n_("tutti.table.species.sampleCategory.header.selected"), n_("tutti.table.species.sampleCategory.header.selected")); - + public static final ColumnIdentifier<SplitSpeciesBatchRowModel> EDITABLE_CATEGORY_VALUE = ColumnIdentifier.newId( SplitSpeciesBatchRowModel.PROPERTY_CATEGORY_VALUE, n_("tutti.table.species.sampleCategory.header.category"), 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-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java 2013-02-11 08:14:47 UTC (rev 389) @@ -342,7 +342,7 @@ addBooleanColumnToModel(columnModel, SplitSpeciesBatchTableModel.SELECTED, getTable()); } - + boolean editableCategoryValue = false; if (category != null) { 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-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIHandler.java 2013-02-11 08:14:47 UTC (rev 389) @@ -76,7 +76,7 @@ loadedPrograms.add(persistenceService.getProgram(program.getId())); } model.setExistingPrograms(loadedPrograms); - + String surveyId = context.getProgramId(); if (surveyId == null) { @@ -92,7 +92,7 @@ Program program = persistenceService.getProgram(surveyId); model.fromBean(program); - + model.getExistingPrograms().remove(program); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIModel.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIModel.java 2013-02-11 08:14:47 UTC (rev 389) @@ -27,10 +27,11 @@ import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.referential.Zone; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; -import java.util.List; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; +import java.util.List; + /** * Bean to edit a program. * @@ -52,7 +53,7 @@ protected String comment; protected Zone zone; - + private List<Program> existingPrograms; protected static Binder<EditProgramUIModel, Program> toBeanBinder = Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java 2013-02-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java 2013-02-11 08:14:47 UTC (rev 389) @@ -25,10 +25,8 @@ */ import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; -import fr.ifremer.tutti.service.TuttiService; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; -import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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-10 15:04:13 UTC (rev 388) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java 2013-02-11 08:14:47 UTC (rev 389) @@ -55,7 +55,7 @@ protected abstract JTabbedPane getTabPanel(); /** - * Method called when the user selects a tab + * Method called when the user selects a tab. * * @param currentIndex * @param newIndex