r930 - in trunk: tutti-service/src/main/java/fr/ifremer/tutti/service/catches tutti-service/src/main/resources/i18n tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util
Author: tchemit Date: 2013-05-08 16:41:35 +0200 (Wed, 08 May 2013) New Revision: 930 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/930 Log: - fixes #2410: [TRAIT] Pas d'arbre d'?\195?\169chantillonnage associ?\195?\169 ?\195?\160 une op?\195?\169ration de p?\195?\170che - fixes #2395: [TRAIT] Il manque un sablier quand on s?\195?\169lectionne un trait dans la liste - clean some action api Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/CancelEditFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/DeleteFishingOperationAction.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/FishingOperationsUI.css 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/FishingOperationsUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/RemoveBenthosBatchAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/RemoveSpeciesBatchAction.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/action/AbstractTuttiAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionHelper.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java 2013-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java 2013-05-08 14:41:35 UTC (rev 930) @@ -28,16 +28,29 @@ import com.google.common.collect.Maps; import fr.ifremer.tutti.TuttiBusinessException; import fr.ifremer.tutti.TuttiTechnicalException; -import fr.ifremer.tutti.persistence.entities.data.*; +import fr.ifremer.tutti.persistence.InvalidBatchModelException; +import fr.ifremer.tutti.persistence.entities.data.BatchContainer; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; -import fr.ifremer.tutti.service.*; +import fr.ifremer.tutti.service.AbstractTuttiService; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.TuttiDataContext; +import fr.ifremer.tutti.service.TuttiServiceContext; +import fr.ifremer.tutti.service.ValidationService; import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorResult; import org.nuiton.validator.NuitonValidatorScope; +import org.springframework.dao.DataRetrievalFailureException; import java.io.File; import java.io.IOException; @@ -75,6 +88,7 @@ /** * Validates the operations of the currently selected cruise. + * * @return a map containing the operations and the validation results */ public Map<FishingOperation, NuitonValidatorResult> validateCruiseOperations() { @@ -95,6 +109,7 @@ /** * Validates the operation of the currently selected cruise whose id is the given id. + * * @return the validation results */ public NuitonValidatorResult validateCruiseOperation(FishingOperation operation) { @@ -105,6 +120,7 @@ /** * Validates the operation of the currently selected cruise whose id is the given id. + * * @return the validation results */ public NuitonValidatorResult validateCruiseOperation(CatchBatch catches) { @@ -116,7 +132,6 @@ } /** - * * @param file * @param validationResults */ @@ -135,7 +150,6 @@ } /** - * * @param file * @param operation * @param validationResult @@ -157,22 +171,48 @@ /** * Adds additional messages to the validation results + * * @param fishingOperation the operation to validate - * @param validator the validatpr containing the messages. + * @param validator the validatpr containing the messages. */ protected void checkOperation(FishingOperation fishingOperation, NuitonValidatorResult validator) { String fishingOperationId = fishingOperation.getId(); - CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(fishingOperationId); - checkOperation(fishingOperation, catchBatch, validator); + + try { + CatchBatch catchBatch = + persistenceService.getCatchBatchFromFishingOperation(fishingOperationId); + + checkOperation(fishingOperation, catchBatch, validator); + } catch (DataRetrievalFailureException e) { + // batch not found + if (log.isDebugEnabled()) { + log.debug("Catch batch not found", e); + } + Map<String, List<String>> errorMap = Maps.newHashMap(); + errorMap.put("catches", Lists.newArrayList(_("tutti.validator.warning.fishingOperation.batch.notFound"))); + validator.addMessagesForScope(NuitonValidatorScope.WARNING, errorMap); + + } catch (InvalidBatchModelException e) { + + // batch is not compatible with Tutti + if (log.isDebugEnabled()) { + log.debug("Invalid batch model", e); + } + Map<String, List<String>> errorMap = Maps.newHashMap(); + errorMap.put("catches", Lists.newArrayList(_("tutti.validator.warning.fishingOperation.invalid.batch.model"))); + validator.addMessagesForScope(NuitonValidatorScope.WARNING, errorMap); + } + } /** * Adds additional messages to the validation results + * * @param fishingOperation the operation to validate * @param fishingOperation the catchBatch to validate - * @param validator the validatpr containing the messages. + * @param validator the validatpr containing the messages. */ protected void checkOperation(FishingOperation fishingOperation, CatchBatch catchBatch, @@ -215,9 +255,9 @@ try { if (catchBatch != null) { tuttiWeightComputingService.computeCatchBatchWeights(catchBatch, - rootSpeciesBatch, - rootBenthosBatch, - rootMarineLitterBatch); + rootSpeciesBatch, + rootBenthosBatch, + rootMarineLitterBatch); } } catch (TuttiBusinessException e) { errors.add(e.getMessage()); @@ -252,7 +292,8 @@ /** * Is the species batch respecting the protocol recommendations? - * @param batch the batch to check + * + * @param batch the batch to check * @param protocol the current protocol * @return true if the batch or one of its children does not respect the protocol, false otherwise */ @@ -274,7 +315,8 @@ /** * Is the benthos batch respecting the protocol recommendations? - * @param batch the batch to check + * + * @param batch the batch to check * @param protocol the current protocol * @return true if the batch or one of its children does not respect the protocol, false otherwise */ @@ -295,7 +337,6 @@ } /** - * * @param operation * @param validationResult */ @@ -303,7 +344,7 @@ List<String> lines = Lists.newArrayList(); lines.add(_("tutti.validator.export.operation", - decoratorService.getDecoratorByType(FishingOperation.class).toString(operation))); + decoratorService.getDecoratorByType(FishingOperation.class).toString(operation))); List<String> messages = validationResult.getMessagesForScope(NuitonValidatorScope.ERROR); for (String message : messages) { Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties =================================================================== --- trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-05-08 14:41:35 UTC (rev 930) @@ -83,6 +83,7 @@ tutti.service.exportSumatra.header.weight= tutti.service.mkDir.error= tutti.service.multipost.export.error= +tutti.service.multipost.export.frequencies.error= tutti.service.operations.accidental.error.species.required= tutti.service.operations.computeWeights.benthos.error.incoherentCategoryWeight= tutti.service.operations.computeWeights.benthos.error.incoherentParentCategoryWeight= @@ -211,6 +212,8 @@ tutti.validator.export.message.warning= tutti.validator.export.operation= tutti.validator.warning.benthos.protocolNotRespected= +tutti.validator.warning.fishingOperation.batch.notFound= +tutti.validator.warning.fishingOperation.invalid.batch.model= tutti.validator.warning.latitude.outOfBounds= tutti.validator.warning.longitude.outOfBounds= tutti.validator.warning.marineLitter.weight.required= Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties =================================================================== --- trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-05-08 14:41:35 UTC (rev 930) @@ -81,6 +81,7 @@ tutti.service.exportSumatra.header.weight=Total tutti.service.mkDir.error=Erreur à la création du dossier %s tutti.service.multipost.export.error= +tutti.service.multipost.export.frequencies.error= tutti.service.operations.computeWeights.error.benthos.incoherentCategoryWeight=Le poids total des mensurations d'un lot du benthos est supérieur au poids de la catégorie tutti.service.operations.computeWeights.error.benthos.incoherentParentCategoryWeight=Le poids de la catégorie d'un lot du benthos est différent de la somme des poids de ses sous-catégories tutti.service.operations.computeWeights.error.benthos.incoherentRowWeightCategory=Le poids de sous-échantillon est renseigné alors que le lot n'a pas de poids. @@ -184,6 +185,8 @@ tutti.validator.export.message.warning=\t- [WARNING] %s tutti.validator.export.operation=* %s \: tutti.validator.warning.benthos.protocolNotRespected=Un lot du benthos ne suit pas les recommandations du protocole +tutti.validator.warning.fishingOperation.batch.notFound=Pas d'arbre d'échantilonnage trouvé +tutti.validator.warning.fishingOperation.invalid.batch.model=Arbre d'échantilonnage non compatible avec Tutti tutti.validator.warning.latitude.outOfBounds=La Latitude doit être comprise entre -90.0 et 90.0 tutti.validator.warning.longitude.outOfBounds=La longitude doit être comprise entre -180.0 et 180.0 tutti.validator.warning.marineLitter.weight.required=Un lot de macro-déchets n'a pas de poids Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseFishingOperationAction.java 2013-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseFishingOperationAction.java 2013-05-08 14:41:35 UTC (rev 930) @@ -140,7 +140,7 @@ }; public EditCruiseFishingOperationAction(ValidateCruiseUIHandler handler) { - super(handler, false); + super(handler, true); setActionDescription(_("tutti.editFishingOperation.action.editFishingOperation.tip")); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIHandler.java 2013-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIHandler.java 2013-05-08 14:41:35 UTC (rev 930) @@ -33,7 +33,6 @@ import fr.ifremer.tutti.ui.swing.util.CloseableUI; import fr.ifremer.tutti.ui.swing.util.RemoveablePropertyChangeListener; import fr.ifremer.tutti.ui.swing.util.TuttiUI; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; @@ -42,9 +41,19 @@ import org.nuiton.validator.NuitonValidatorResult; import org.nuiton.validator.NuitonValidatorScope; -import javax.swing.*; -import javax.swing.tree.*; -import java.awt.*; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPopupMenu; +import javax.swing.JTree; +import javax.swing.SwingUtilities; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeModel; +import javax.swing.tree.TreePath; +import java.awt.Component; +import java.awt.Point; +import java.awt.Rectangle; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; @@ -79,21 +88,15 @@ model.setValidator(validationService.validateCruiseOperations()); model.addPropertyChangeListener(ValidateCruiseUIModel.PROPERTY_SELECTED_FISHING_OPERATION, - new RemoveablePropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - FishingOperation operation = (FishingOperation) evt.getNewValue(); + new RemoveablePropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + FishingOperation operation = (FishingOperation) evt.getNewValue(); + editFishingOperationAction.setFishingOperation(operation); + TuttiActionHelper.runAction(editFishingOperationAction); + } + }); - editFishingOperationAction.setFishingOperation(null); - AbstractTuttiAction.runAction(editFishingOperationAction); - - if (operation != null) { - editFishingOperationAction.setFishingOperation(operation); - TuttiActionHelper.runAction(editFishingOperationAction); - } - } - }); - ui.setContextValue(model); } @@ -260,9 +263,9 @@ public void createChildren(NuitonValidatorResult validationResult) { int messageNb = 0; messageNb += addMessages(NuitonValidatorScope.ERROR, - validationResult.getMessagesForScope(NuitonValidatorScope.ERROR)); + validationResult.getMessagesForScope(NuitonValidatorScope.ERROR)); messageNb += addMessages(NuitonValidatorScope.WARNING, - validationResult.getMessagesForScope(NuitonValidatorScope.WARNING)); + validationResult.getMessagesForScope(NuitonValidatorScope.WARNING)); if (messageNb == 0) { addMessages(NuitonValidatorScope.INFO, Lists.newArrayList(_("tutti.validator.info.operation.noError"))); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/CancelEditFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/CancelEditFishingOperationAction.java 2013-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/CancelEditFishingOperationAction.java 2013-05-08 14:41:35 UTC (rev 930) @@ -72,7 +72,7 @@ } // cancel to create a new fishingOperation action.setFishingOperation(null); - runAction(action); + TuttiActionHelper.runInternalAction(action); } else { @@ -83,7 +83,7 @@ // re-edit current fishing operation (but do not perform any check) action.setCheckPreviousEdit(false); action.setFishingOperation(getModel().getFishingOperation()); - runAction(action); + TuttiActionHelper.runInternalAction(action); } //FIXME-TC Make sure this works again Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/DeleteFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/DeleteFishingOperationAction.java 2013-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/DeleteFishingOperationAction.java 2013-05-08 14:41:35 UTC (rev 930) @@ -74,17 +74,9 @@ } getContext().getPersistenceService().deleteFishingOperation(fishingOperation.getId()); - } - @Override - public void postSuccessAction() { - super.postSuccessAction(); - FishingOperationsUIModel model = getModel(); - FishingOperation fishingOperation = - model.getSelectedFishingOperation(); - // unselect removed fishing operation model.setSelectedFishingOperation(null); 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-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-05-08 14:41:35 UTC (rev 930) @@ -43,9 +43,11 @@ import fr.ifremer.tutti.ui.swing.content.operation.fishing.VesselUseFeatureTabUI; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.decorator.Decorator; +import org.springframework.dao.DataRetrievalFailureException; import javax.swing.JLabel; import javax.swing.JOptionPane; @@ -248,12 +250,12 @@ // persist previous fishing operation if (fishingOperationModified) { getSaveFishingOperationAction().setUpdateUI(false); - runAction(getSaveFishingOperationAction()); + TuttiActionHelper.runInternalAction(getSaveFishingOperationAction()); } if (catchBatchModified) { getSaveCatchBatchAction().setUpdateUI(false); - runAction(getSaveCatchBatchAction()); + TuttiActionHelper.runInternalAction(getSaveCatchBatchAction()); } canContinue = true; @@ -540,8 +542,19 @@ batch.setFishingOperation(bean); Integer objectId = Integer.valueOf(batch.getId()); attachments = persistenceService.getAllAttachments(catchesUIModel.getObjectType(), objectId); + getModel().setCatchNotFound(false); getModel().setCatchEnabled(true); + } catch (DataRetrievalFailureException e) { + // batch not found + if (log.isDebugEnabled()) { + log.debug("Batch not found", e); + } + batch = null; + attachments = Collections.emptyList(); + + getModel().setCatchEnabled(false); + getModel().setCatchNotFound(true); } catch (InvalidBatchModelException e) { // batch is not compatible with Tutti @@ -574,11 +587,13 @@ // 4) Propagate new selected fishingoperation to others tabs - ui.getSpeciesTabContent().getHandler().selectFishingOperation(batch == null ? null : bean); - ui.getBenthosTabContent().getHandler().selectFishingOperation(batch == null ? null : bean); - ui.getMarineLitterTabContent().getHandler().selectFishingOperation(batch == null ? null : bean); - ui.getAccidentalTabContent().getHandler().selectFishingOperation(batch == null ? null : bean); - ui.getIndividualObservationTabContent().getHandler().selectFishingOperation(batch == null ? null : bean); + FishingOperation operationToLoad = batch == null ? null : bean; + + ui.getSpeciesTabContent().getHandler().selectFishingOperation(operationToLoad); + ui.getBenthosTabContent().getHandler().selectFishingOperation(operationToLoad); + ui.getMarineLitterTabContent().getHandler().selectFishingOperation(operationToLoad); + ui.getAccidentalTabContent().getHandler().selectFishingOperation(operationToLoad); + ui.getIndividualObservationTabContent().getHandler().selectFishingOperation(operationToLoad); } catchesUIModel.setLoadingData(false); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.css 2013-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.css 2013-05-08 14:41:35 UTC (rev 930) @@ -63,7 +63,7 @@ #warningLabel { actionIcon: warning; border: {new javax.swing.border.EmptyBorder(5, 10, 5, 10)}; - text: "tutti.fishingOperations.warn.invalid.batch.model"; + text: {handler.getCatchWarningLabel(model.isCatchEnabled(), model.isCatchNotFound())}; } #catchesTab { 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-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-05-08 14:41:35 UTC (rev 930) @@ -33,7 +33,6 @@ import fr.ifremer.tutti.ui.swing.util.AbstractTuttiTabContainerUIHandler; import fr.ifremer.tutti.ui.swing.util.CloseableUI; import fr.ifremer.tutti.ui.swing.util.TuttiUI; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; @@ -41,10 +40,13 @@ import javax.swing.JComponent; import javax.swing.JTabbedPane; +import javax.swing.SwingUtilities; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; +import static org.nuiton.i18n.I18n._; + /** * Handler of UI {@link FishingOperationsUI}. * @@ -67,6 +69,10 @@ persistenceService = context.getPersistenceService(); } + //------------------------------------------------------------------------// + //-- AbstractTuttiUIHandler methods --// + //------------------------------------------------------------------------// + @Override public void beforeInitUI() { @@ -148,13 +154,15 @@ operation.setCruise(cruise); } editFishingOperationAction.setFishingOperation(operation); -// try { - AbstractTuttiAction.runAction(editFishingOperationAction); + if (SwingUtilities.isEventDispatchThread()) { -// } catch(RuntimeException e) { -// getModel().setSelectedFishingOperation(null); -//// throw e; -// } + // launch a long action + TuttiActionHelper.runAction(editFishingOperationAction); + } else { + + // run as an internal action (of embedded action) + TuttiActionHelper.runInternalAction(editFishingOperationAction); + } } } }); @@ -222,11 +230,30 @@ return null; } + //------------------------------------------------------------------------// + //-- AbstractTuttiTabContainerUIHandler methods --// + //------------------------------------------------------------------------// + @Override public JTabbedPane getTabPanel() { return ui.getTabPane(); } + //------------------------------------------------------------------------// + //-- Public methods --// + //------------------------------------------------------------------------// + + public String getCatchWarningLabel(boolean catchEnabled, + boolean catchNotFound) { + String result = null; + if (catchNotFound) { + result = _("tutti.fishingOperations.warn.catchBatch.notFound"); + } else if (!catchEnabled) { + result = _("tutti.fishingOperations.warn.invalid.batch.model"); + } + return result; + } + public boolean isFishingOperationModified() { return getModel().getEditFishingOperation() != null && getUI().getFishingOperationTabContent().getModel().isModify(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java 2013-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java 2013-05-08 14:41:35 UTC (rev 930) @@ -56,6 +56,8 @@ public static final String PROPERTY_CATCH_ENABLED = "catchEnabled"; + public static final String PROPERTY_CATCH_NOT_FOUND = "catchNotFound"; + /** * List of existing fishing operation for the selected cruise. * <p/> @@ -115,6 +117,13 @@ */ protected boolean catchEnabled; + /** + * Flag setted to true when no catch found. + * + * @since 2.2 + */ + protected boolean catchNotFound; + public List<FishingOperation> getFishingOperation() { return fishingOperation; } @@ -214,4 +223,14 @@ this.catchEnabled = catchEnabled; firePropertyChange(PROPERTY_CATCH_ENABLED, oldValue, catchEnabled); } + + public boolean isCatchNotFound() { + return catchNotFound; + } + + public void setCatchNotFound(boolean catchNotFound) { + boolean oldValue = isCatchNotFound(); + this.catchNotFound = catchNotFound; + firePropertyChange(PROPERTY_CATCH_NOT_FOUND, oldValue, catchNotFound); + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/RemoveBenthosBatchAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/RemoveBenthosBatchAction.java 2013-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/RemoveBenthosBatchAction.java 2013-05-08 14:41:35 UTC (rev 930) @@ -29,6 +29,7 @@ import fr.ifremer.tutti.persistence.TuttiPersistence; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -87,7 +88,7 @@ table.setRowSelectionInterval(parentIndex, parentIndex); // remove all his children - runAction(removeSpeciesSubBatchAction); + TuttiActionHelper.runInternalAction(removeSpeciesSubBatchAction); } else { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/RemoveSpeciesBatchAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/RemoveSpeciesBatchAction.java 2013-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/RemoveSpeciesBatchAction.java 2013-05-08 14:41:35 UTC (rev 930) @@ -29,6 +29,7 @@ import fr.ifremer.tutti.persistence.TuttiPersistence; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -87,7 +88,7 @@ table.setRowSelectionInterval(parentIndex, parentIndex); // remove all his children - runAction(removeSpeciesSubBatchAction); + TuttiActionHelper.runInternalAction(removeSpeciesSubBatchAction); } else { 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-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java 2013-05-08 14:41:35 UTC (rev 930) @@ -39,8 +39,6 @@ * @since 0.3 */ public abstract class AbstractTuttiTabContainerUIHandler<M, UI extends TuttiUI<M, ?>> extends AbstractTuttiUIHandler<M, UI> { -// -// private final static Log log = LogFactory.getLog(AbstractTuttiTabContainerUIHandler.class); protected AbstractTuttiTabContainerUIHandler(TuttiUIContext context, UI ui) { super(context, ui); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java 2013-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java 2013-05-08 14:41:35 UTC (rev 930) @@ -31,8 +31,6 @@ import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUI; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.jdesktop.beans.AbstractBean; import org.nuiton.util.decorator.Decorator; @@ -45,8 +43,6 @@ public abstract class AbstractTuttiAction<M extends AbstractBean, UI extends TuttiUI<M, ?>, H extends AbstractTuttiUIHandler<M, UI>> extends AbstractBean { - private static final Log log = LogFactory.getLog(AbstractTuttiAction.class); - public static final String PROPERTY_DONE = "done"; protected final H handler; @@ -82,25 +78,6 @@ // by default nothing to do after action } - public static void runAction(AbstractTuttiAction action) { - Throwable error = null; - try { - action.doAction(); - action.postSuccessAction(); - } catch (Throwable e) { - error = e; - throw TuttiActionException.propagateError(action, e); - } finally { - try { - if (error != null) { - action.postFailedAction(error); - } - } finally { - action.releaseAction(); - } - } - } - public H getHandler() { return handler; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionHelper.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionHelper.java 2013-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionHelper.java 2013-05-08 14:41:35 UTC (rev 930) @@ -53,10 +53,14 @@ error = e; throw TuttiActionException.propagateError(action, e); } finally { - if (error != null) { - action.postFailedAction(error); + try { + if (error != null) { + action.postFailedAction(error); + } + } finally { + + action.releaseAction(); } - action.releaseAction(); } } Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-05-08 14:41:35 UTC (rev 930) @@ -915,6 +915,7 @@ tutti.fishingOperations.info.no.fishingOperation.selected= tutti.fishingOperations.title.edit.operations= tutti.fishingOperations.title.validate.operations= +tutti.fishingOperations.warn.catchBatch.notFound= tutti.fishingOperations.warn.invalid.batch.model= tutti.flash.info.all.caractristic.exported= tutti.flash.info.benthos.add.to.protocol= 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-05-08 11:00:38 UTC (rev 929) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-05-08 14:41:35 UTC (rev 930) @@ -883,6 +883,7 @@ tutti.fishingOperations.info.no.fishingOperation.selected=< Aucun trait sélectionné > tutti.fishingOperations.title.edit.operations=Saisie des opérations de pêches (%s) tutti.fishingOperations.title.validate.operations=Validation des opérations de pêches (%s) +tutti.fishingOperations.warn.catchBatch.notFound=Pas d'arbre d'échantillonage associé à l'opération de pêche. tutti.fishingOperations.warn.invalid.batch.model=L'arbre d’échantillonnage n'est pas compatible. Les captures ne seront pas visibles. tutti.flash.info.all.caractristic.exported=Toutes les caractéristiques exportées dans le fichier <strong>%s</strong>. tutti.flash.info.benthos.add.to.protocol=Le benthos <strong>%s</strong> a été ajoutée au protocole.
participants (1)
-
tchemit@users.forge.codelutin.com