Author: tchemit Date: 2013-02-12 19:21:58 +0100 (Tue, 12 Feb 2013) New Revision: 404 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/404 Log: improve edit fishing operation action Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 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-12 18:20:47 UTC (rev 403) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-02-12 18:21:58 UTC (rev 404) @@ -103,31 +103,31 @@ * @since 1.0 */ protected SaveCatchBatchAction saveCatchBatchAction; - + private final PropertyChangeListener coordinatePropertiesListener = new PropertyChangeListener() { private List<String> properties = Lists.newArrayList( - EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_RECTILIGNE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DECIMAL_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DEGREE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_SECOND, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DECIMAL_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DEGREE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_SECOND, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DECIMAL_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DEGREE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_SECOND, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DECIMAL_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DEGREE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_SECOND + EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_RECTILIGNE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DECIMAL_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DECIMAL_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DECIMAL_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DECIMAL_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_SECOND ); @Override @@ -202,39 +202,86 @@ boolean create = TuttiEntities.isNew(editFishingOperation); - // must close current edition - String message; + boolean fishingOperationModified = getHandler().isFishingOperationModified(); + boolean catchBatchModified = getHandler().isCatchBatchModified(); - if (create) { - message = _("tutti.dialog.askSaveBeforeLeaving.createFishingOperation"); - } else { - message = _("tutti.dialog.askSaveBeforeLeaving.saveFishingOperation"); - } + boolean fishingOperationValid = getHandler().isFishingOperationValid(); + boolean catchBatchValid = getHandler().isCatchBatchValid(); - int answer = getHandler().askSaveBeforeLeaving(message); + boolean needSave = create || fishingOperationModified || catchBatchModified; - canContinue = false; - switch (answer) { - case JOptionPane.OK_OPTION: - // persist previous fishing operation - getSaveFishingOperationAction().setUpdateUI(false); - getSaveFishingOperationAction().actionPerformed(event); - getSaveCatchBatchAction().setUpdateUI(false); - getSaveCatchBatchAction().actionPerformed(event); + if (needSave) { - canContinue = true; - break; + boolean canSave = fishingOperationValid && catchBatchValid; - case JOptionPane.NO_OPTION: + canContinue = false; - // won't save modification - // so since we will edit a new operation, nothing to do here + if (canSave) { - canContinue = true; - break; + String message; + + if (create) { + message = _("tutti.dialog.askSaveBeforeLeaving.createFishingOperation"); + } else if (fishingOperationModified) { + message = _("tutti.dialog.askSaveBeforeLeaving.saveFishingOperation"); + } else { + message = _("tutti.dialog.askSaveBeforeLeaving.saveCatchBatch"); + } + + int answer = getHandler().askSaveBeforeLeaving(message); + + + switch (answer) { + case JOptionPane.OK_OPTION: + + // persist previous fishing operation + if (fishingOperationModified) { + getSaveFishingOperationAction().setUpdateUI(false); + getSaveFishingOperationAction().actionPerformed(event); + } + + if (catchBatchModified) { + getSaveCatchBatchAction().setUpdateUI(false); + getSaveCatchBatchAction().actionPerformed(event); + } + + canContinue = true; + break; + + case JOptionPane.NO_OPTION: + + // won't save modification + // so since we will edit a new operation, nothing to do here + + canContinue = true; + break; + } + } else { + + // data are not valid + String message; + + if (fishingOperationValid) { + message = _("tutti.dialog.askCancelEditBeforeLeaving.cancelEditCatchBatch"); + } else { + message = _("tutti.dialog.askCancelEditBeforeLeaving.cancelEditFishingOperation"); + } + + int answer = getHandler().askCancelEditBeforeLeaving(message); + + switch (answer) { + case JOptionPane.YES_OPTION: + + // ok will revert any modification by + // editing new fishing operation + canContinue = true; + break; + } + } } } + if (!canContinue) { // rollback selected fishing operation @@ -268,7 +315,7 @@ if (log.isInfoEnabled()) { log.info("Edit in ui fishingOperation: " + fishingOperation); } - + // now fishing operation is edited model.setEditFishingOperation(fishingOperation); @@ -295,7 +342,7 @@ // wait last minute to display (avoid dirty display effects) ui.add(form, BorderLayout.CENTER); } - + model.addPropertyChangeListener(coordinatePropertiesListener); SwingUtilities.invokeLater(new Runnable() { @@ -313,7 +360,7 @@ EditFishingOperationUIHandler handler = ui.getHandler(); EditFishingOperationUIModel editFishingOperationUIModel = ui.getModel(); - + handler.uninstallStartDateListener(); handler.uninstallCoordinatesListener(); @@ -448,10 +495,9 @@ fishingOperationText = null; } else { fishingOperationText = _("tutti.label.traitReminder", - decorator.toString(fishingOperation)); + decorator.toString(bean)); } - // 3) Propagate title to others tabs ui.getCatchesCaracteristicsTabPane().setTitle(fishingOperationText); ui.getSpeciesTabFishingOperationReminderLabel().setTitle(fishingOperationText);