r876 - in trunk: tutti-service/src/main/java/fr/ifremer/tutti/service tutti-service/src/main/java/fr/ifremer/tutti/service/catches tutti-service/src/main/resources/i18n tutti-ui-swing/src/main/filtered-resources tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content 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/home tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation tutti-ui-s
Author: kmorin Date: 2013-04-26 19:21:26 +0200 (Fri, 26 Apr 2013) New Revision: 876 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/876 Log: fixes #2079 [CONTROLE] - Contr?\195?\180le / Validation apr?\195?\168s la saisie fixes #1883 [RAPPORT] - Rapport de contr?\195?\180le apr?\195?\168s saisie Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportCruiseValidationMessagesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportOperationValidationMessagesAction.java Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 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/filtered-resources/tutti-help-en.properties trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUI.jaxx 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/home/ExportCruiseForSumatraAction.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/EditFishingOperationUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/ComputeWeightsAction.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/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/DecoratorService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-04-26 17:21:26 UTC (rev 876) @@ -63,6 +63,8 @@ public static final String ONLY_NAME = "onlyName"; + public static final String FILE_NAME_COMPATIBLE = "fileNameCompatible"; + public static final String SEPARATOR = "#"; /** Delegate decorator provider. */ @@ -96,6 +98,7 @@ registerTuttiDecorator(Cruise.class, "${name}$s", SEPARATOR, " - "); registerTuttiDecorator(TuttiProtocol.class, "${name}$s", SEPARATOR, " - "); registerTuttiDecorator(FishingOperation.class, "${stationNumber}$s#${fishingOperationNumber}$s#${multirigAggregation}$s#${gearShootingStartDate}$td/%4$tm/%4$tY", SEPARATOR, " - "); + registerTuttiDecorator(FishingOperation.class, FILE_NAME_COMPATIBLE, "${stationNumber}$s#${fishingOperationNumber}$s#${multirigAggregation}$s#${gearShootingStartDate}$td%4$tm%4$tY", SEPARATOR, "-"); registerTuttiDecorator(Gear.class, "${label}$s#${name}$s", SEPARATOR, " - "); registerTuttiDecorator(Person.class, "${firstName}$s#${lastName}$s#${department}$s", SEPARATOR, " "); registerTuttiDecorator(Caracteristic.class, "${parameterName}$s#${matrixName}$s#${fractionName}$s#${methodName}$s", SEPARATOR, " - "); 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-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java 2013-04-26 17:21:26 UTC (rev 876) @@ -27,19 +27,20 @@ import com.google.common.collect.Lists; 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.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; -import fr.ifremer.tutti.service.AbstractTuttiService; -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 fr.ifremer.tutti.service.*; +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 java.io.File; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -61,12 +62,15 @@ protected TuttiWeightComputingService tuttiWeightComputingService; + protected DecoratorService decoratorService; + @Override public void setServiceContext(TuttiServiceContext context) { super.setServiceContext(context); persistenceService = getService(PersistenceService.class); validationService = getService(ValidationService.class); tuttiWeightComputingService = getService(TuttiWeightComputingService.class); + decoratorService = getService(DecoratorService.class); } /** @@ -100,19 +104,85 @@ } /** + * Validates the operation of the currently selected cruise whose id is the given id. + * @return the validation results + */ + public NuitonValidatorResult validateCruiseOperation(CatchBatch catches) { + FishingOperation operation = persistenceService.getFishingOperation(catches.getFishingOperation().getId()); + NuitonValidatorResult validator = validationService.validateFishingOperation(operation, ValidationService.VALIDATION_CONTEXT_VALIDATE); + + checkOperation(operation, catches, validator); + return validator; + } + + /** + * + * @param file + * @param validationResults + */ + public void exportValidationResults(File file, Map<FishingOperation, NuitonValidatorResult> validationResults) { + try { + List<String> lines = Lists.newArrayList(); + for (FishingOperation operation : validationResults.keySet()) { + lines.addAll(getExportLines(operation, validationResults.get(operation))); + lines.add(""); + } + FileUtils.writeLines(file, lines); + + } catch (IOException e) { + throw new TuttiTechnicalException("error"); + } + } + + /** + * + * @param file + * @param operation + * @param validationResult + */ + public void exportValidationResult(File file, FishingOperation operation, NuitonValidatorResult validationResult) { + try { + List<String> lines = getExportLines(operation, validationResult); + + FileUtils.writeLines(file, lines); + + } catch (IOException e) { + throw new TuttiTechnicalException("error"); + } + } + + /* + * Internal methods + */ + + /** * Adds additional messages to the validation results * @param fishingOperation the operation to validate * @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); + } + + /** + * 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. + */ + protected void checkOperation(FishingOperation fishingOperation, + CatchBatch catchBatch, + NuitonValidatorResult validator) { if (log.isDebugEnabled()) { log.debug("Will check fishingOperation: " + fishingOperation); } List<String> errors = Lists.newArrayList(); String fishingOperationId = fishingOperation.getId(); - CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(fishingOperationId); BatchContainer<SpeciesBatch> rootSpeciesBatch; try { @@ -222,4 +292,28 @@ } return false; } + + /** + * + * @param operation + * @param validationResult + */ + protected List<String> getExportLines(FishingOperation operation, NuitonValidatorResult validationResult) { + List<String> lines = Lists.newArrayList(); + + lines.add(_("tutti.validator.export.operation", + decoratorService.getDecoratorByType(FishingOperation.class).toString(operation))); + + List<String> messages = validationResult.getMessagesForScope(NuitonValidatorScope.ERROR); + for (String message : messages) { + lines.add(_("tutti.validator.export.message.error", _(message))); + } + messages = validationResult.getMessagesForScope(NuitonValidatorScope.WARNING); + for (String message : messages) { + lines.add(_("tutti.validator.export.message.warning", _(message))); + } + + return lines; + } + } 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-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-04-26 17:21:26 UTC (rev 876) @@ -158,6 +158,9 @@ tutti.validator.error.protocol.name.alreadyUsed= tutti.validator.error.protocol.name.required= tutti.validator.error.speciesBatch.species.required= +tutti.validator.export.message.error= +tutti.validator.export.message.warning= +tutti.validator.export.operation= tutti.validator.warning.benthos.protocolNotRespected= tutti.validator.warning.latitude.outOfBounds= tutti.validator.warning.longitude.outOfBounds= 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-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-04-26 17:21:26 UTC (rev 876) @@ -132,7 +132,10 @@ tutti.validator.error.program.zone.required=La zone de la série est obligatoire tutti.validator.error.protocol.name.alreadyUsed=Le nom du protocole est déjà utilisé tutti.validator.error.protocol.name.required=Le nom du protocole est obligatoire -tutti.validator.error.speciesBatch.species.required= +tutti.validator.error.speciesBatch.species.required=L'espèce est obligatoire +tutti.validator.export.message.error=\t- [ERREUR] %s +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.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 Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-04-26 17:21:26 UTC (rev 876) @@ -1,28 +1,5 @@ -### -# #%L -# Tutti :: UI -# $Id$ -# $HeadURL$ -# %% -# Copyright (C) 2012 - 2013 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% -### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Mon Apr 22 10:46:45 CEST 2013 +#Fri Apr 26 18:46:10 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=createAccidentalBatch.html\#actions tutti.createAccidentalBatch.action.save.help=createAccidentalBatch.html\#actions @@ -314,6 +291,10 @@ tutti.splitSpeciesBatch.field.sampleWeightField.help=splitSpeciesBatch.html\#fields tutti.splitSpeciesBatch.field.speciesField.help=splitSpeciesBatch.html\#fields tutti.splitSpeciesBatch.help=splitSpeciesBatch.html +tutti.validateCruise.navigation.action.export.all.help= +tutti.validateCruise.navigation.action.export.help= +tutti.validateCruise.navigation.action.export.operation.help= +tutti.validateCruise.navigation.action.refresh.all.help= tuttihelp.config.help= tuttihelp.editAccidentalBatch.help= tuttihelp.editIndividualObservationBatch.help= Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-04-26 17:21:26 UTC (rev 876) @@ -1,28 +1,5 @@ -### -# #%L -# Tutti :: UI -# $Id$ -# $HeadURL$ -# %% -# Copyright (C) 2012 - 2013 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% -### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Mon Apr 22 10:46:45 CEST 2013 +#Fri Apr 26 18:46:10 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=createAccidentalBatch.html\#actions tutti.createAccidentalBatch.action.save.help=createAccidentalBatch.html\#actions @@ -314,6 +291,10 @@ tutti.splitSpeciesBatch.field.sampleWeightField.help=splitSpeciesBatch.html\#fields tutti.splitSpeciesBatch.field.speciesField.help=splitSpeciesBatch.html\#fields tutti.splitSpeciesBatch.help=splitSpeciesBatch.html +tutti.validateCruise.navigation.action.export.all.help= +tutti.validateCruise.navigation.action.export.help= +tutti.validateCruise.navigation.action.export.operation.help= +tutti.validateCruise.navigation.action.refresh.all.help= tuttihelp.config.help= tuttihelp.editAccidentalBatch.help= tuttihelp.editIndividualObservationBatch.help= Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-04-26 17:21:26 UTC (rev 876) @@ -445,19 +445,9 @@ case EDIT_FISHING_OPERATION: - String validationContext = context.getValidationContext(); - - if (ValidationService.VALIDATION_CONTEXT_EDIT.equals(validationContext)) { - - // edit operations - screenTitle = _("tutti.fishingOperations.title.edit.operations", getSelectedCruiseTitle()); - icon = ui.getMenuActionEditCatches().getIcon(); - } else { - - // validate operations - screenTitle = _("tutti.fishingOperations.title.validate.operations", getSelectedCruiseTitle()); - icon = ui.getMenuActionValidateCatches().getIcon(); - } + // edit operations + screenTitle = _("tutti.fishingOperations.title.edit.operations", getSelectedCruiseTitle()); + icon = ui.getMenuActionEditCatches().getIcon(); screenUI = new FishingOperationsUI(ui); break; @@ -469,12 +459,9 @@ break; case VALIDATE_CRUISE: - screenTitle = EditCruiseUIHandler.getTitle( - context.isCruiseFilled()); - screenUI = new ValidateCruiseUI(ui); -// rightDecoration = ((ValidateCruiseUI) screenUI).getTopToolBar(); - icon = ui.getMenuActionEditCruise().getIcon(); + screenTitle = _("tutti.fishingOperations.title.validate.operations", getSelectedCruiseTitle()); + icon = ui.getMenuActionValidateCatches().getIcon(); break; } 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-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseFishingOperationAction.java 2013-04-26 17:21:26 UTC (rev 876) @@ -24,11 +24,23 @@ * #L% */ +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.service.catches.ValidateCruiseOperationsService; +import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIModel; +import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; +import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.validator.NuitonValidatorResult; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.List; + import static org.nuiton.i18n.I18n._; /** @@ -39,10 +51,12 @@ */ public class EditCruiseFishingOperationAction extends AbstractTuttiAction<ValidateCruiseUIModel, ValidateCruiseUI, ValidateCruiseUIHandler> { - /** Logger. */ private static final Log log = LogFactory.getLog(EditCruiseFishingOperationAction.class); + /** Validation service. */ + private final ValidateCruiseOperationsService validationService = getContext().getValidateCruiseOperationsService(); + /** * The incoming fishing operation to edit. * <p/> @@ -52,6 +66,79 @@ */ protected FishingOperation fishingOperation; + protected final PropertyChangeListener editFishingOperationModelListener = new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + + List<String> propertiesToIgnore = Lists.newArrayList( + EditFishingOperationUIModel.PROPERTY_MODIFY, + EditFishingOperationUIModel.PROPERTY_VALID, + EditFishingOperationUIModel.PROPERTY_PERSISTED + ); + EditFishingOperationUIModel model = (EditFishingOperationUIModel) evt.getSource(); + + if (!model.isLoadingData() + && model.getFishingOperation() != null + && !propertiesToIgnore.contains(evt.getPropertyName())) { + + if (model.getCoordinateEditorType() != CoordinateEditorType.DD) { + model.convertGearShootingCoordinatesDMSToDD(); + } + + FishingOperation operation = model.toBean(); + NuitonValidatorResult validationResult = validationService.validateCruiseOperation(operation); + + ValidateCruiseUIModel uiModel = getModel(); + uiModel.getValidator().put(uiModel.getSelectedFishingOperation(), validationResult); + + getHandler().updateCurrentOperatonNode(validationResult); + + } + } + }; + + protected final PropertyChangeListener editCatchesModelListener = new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + + List<String> propertiesToIgnore = Lists.newArrayList( + EditCatchesUIModel.PROPERTY_MODIFY, + EditCatchesUIModel.PROPERTY_VALID, + EditCatchesUIModel.PROPERTY_CATCH_TOTAL_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_CATCH_TOTAL_SORTED_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_CATCH_TOTAL_UNSORTED_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_CATCH_TOTAL_REJECTED_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_SPECIES_TOTAL_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_SPECIES_TOTAL_SORTED_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_SPECIES_TOTAL_UNSORTED_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_SPECIES_TOTAL_SAMPLE_SORTED_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_SPECIES_TOTAL_INERT_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_SPECIES_TOTAL_LIVING_NOT_ITEMIZED_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_BENTHOS_TOTAL_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_BENTHOS_TOTAL_SORTED_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_BENTHOS_TOTAL_UNSORTED_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_BENTHOS_TOTAL_SAMPLE_SORTED_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_BENTHOS_TOTAL_INERT_COMPUTED_WEIGHT, + EditCatchesUIModel.PROPERTY_BENTHOS_TOTAL_LIVING_NOT_ITEMIZED_COMPUTED_WEIGHT + ); + EditCatchesUIModel model = (EditCatchesUIModel) evt.getSource(); + + if (!model.isLoadingData() + && model.getFishingOperation() != null + && !propertiesToIgnore.contains(evt.getPropertyName())) { + + CatchBatch catchBatch = model.toBean(); + NuitonValidatorResult validationResult = validationService.validateCruiseOperation(catchBatch); + + ValidateCruiseUIModel uiModel = getModel(); + uiModel.getValidator().put(uiModel.getSelectedFishingOperation(), validationResult); + + getHandler().updateCurrentOperatonNode(validationResult); + + } + } + }; + public EditCruiseFishingOperationAction(ValidateCruiseUIHandler handler) { super(handler, false); setActionDescription(_("tutti.editFishingOperation.action.editFishingOperation.tip")); @@ -62,11 +149,31 @@ } @Override + protected boolean prepareAction() throws Exception { + FishingOperationsUI operationPanel = getUI().getOperationPanel(); + operationPanel.getFishingOperationTabContent().getModel(). + removePropertyChangeListener(editFishingOperationModelListener); + operationPanel.getCatchesTabContent().getModel(). + removePropertyChangeListener(editCatchesModelListener); + + return super.prepareAction(); + } + + @Override protected void doAction() throws Exception { getUI().getOperationPanel().getModel().setSelectedFishingOperation(fishingOperation); } @Override + public void postSuccessAction() { + super.postSuccessAction(); + + FishingOperationsUI operationPanel = getUI().getOperationPanel(); + operationPanel.getFishingOperationTabContent().getModel().addPropertyChangeListener(editFishingOperationModelListener); + operationPanel.getCatchesTabContent().getModel().addPropertyChangeListener(editCatchesModelListener); + } + + @Override protected void releaseAction() { super.releaseAction(); fishingOperation = null; Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportCruiseValidationMessagesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportCruiseValidationMessagesAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportCruiseValidationMessagesAction.java 2013-04-26 17:21:26 UTC (rev 876) @@ -0,0 +1,64 @@ +package fr.ifremer.tutti.ui.swing.content.cruise; + +import fr.ifremer.tutti.TuttiIOUtil; +import fr.ifremer.tutti.service.catches.ValidateCruiseOperationsService; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; + +import java.io.File; + +import static org.nuiton.i18n.I18n._; + +/** + * @author kmorin <kmorin@codelutin.com> + * @since 2.0.1 + */ +public class ExportCruiseValidationMessagesAction extends AbstractTuttiAction <ValidateCruiseUIModel, ValidateCruiseUI, ValidateCruiseUIHandler> { + + protected File file; + + /** Validation service. */ + protected ValidateCruiseOperationsService validationService = getContext().getValidateCruiseOperationsService(); + + public ExportCruiseValidationMessagesAction(ValidateCruiseUIHandler handler) { + super(handler, false); + setActionDescription(_("tutti.validateCruise.action.export.all.tip")); + } + + @Override + protected boolean prepareAction() throws Exception { + boolean doAction = super.prepareAction(); + + // choose file to export + file = TuttiUIUtil.saveFile( + _("tutti.validateCruise.action.export.all.chooseFile.defaultFile", getDataContext().getCruise().getName()), + getContext().getMainUI(), + _("tutti.validateCruise.action.export.all.chooseFile.title"), + _("tutti.validateCruise.action.export.all.chooseFile.label") + ); + doAction = file != null; + if (doAction) { + // ask user to confirm overwrite. + doAction = getHandler().askOverwriteFile(file); + } + return doAction; + } + + @Override + protected void doAction() throws Exception { + ValidateCruiseUIModel uiModel = getModel(); + validationService.exportValidationResults(file, uiModel.getValidator()); + } + + @Override + protected void releaseAction() { + super.releaseAction(); + file = null; + } + + @Override + public void postSuccessAction() { + super.postSuccessAction(); + sendMessage(_("tutti.validateCruise.action.export.all.success", file)); + } +} Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportOperationValidationMessagesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportOperationValidationMessagesAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ExportOperationValidationMessagesAction.java 2013-04-26 17:21:26 UTC (rev 876) @@ -0,0 +1,67 @@ +package fr.ifremer.tutti.ui.swing.content.cruise; + +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.service.catches.ValidateCruiseOperationsService; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; + +import java.io.File; + +import static org.nuiton.i18n.I18n._; + +/** + * @author kmorin <kmorin@codelutin.com> + * @since 2.0.1 + */ +public class ExportOperationValidationMessagesAction extends AbstractTuttiAction <ValidateCruiseUIModel, ValidateCruiseUI, ValidateCruiseUIHandler> { + + protected File file; + + /** Validation service. */ + protected ValidateCruiseOperationsService validationService = getContext().getValidateCruiseOperationsService(); + + public ExportOperationValidationMessagesAction(ValidateCruiseUIHandler handler) { + super(handler, false); + setActionDescription(_("tutti.validateCruise.action.export.operation.tip")); + } + + @Override + protected boolean prepareAction() throws Exception { + boolean doAction = super.prepareAction(); + + // choose file to export + file = TuttiUIUtil.saveFile( + _("tutti.validateCruise.action.export.operation.chooseFile.defaultFile", + decorate(getModel().getSelectedFishingOperation(), DecoratorService.FILE_NAME_COMPATIBLE)), + getContext().getMainUI(), + _("tutti.validateCruise.action.export.operation.chooseFile.title"), + _("tutti.validateCruise.action.export.operation.chooseFile.label") + ); + doAction = file != null; + if (doAction) { + // ask user to confirm overwrite. + doAction = getHandler().askOverwriteFile(file); + } + return doAction; + } + + @Override + protected void doAction() throws Exception { + ValidateCruiseUIModel uiModel = getModel(); + FishingOperation operation = getModel().getSelectedFishingOperation(); + validationService.exportValidationResult(file, operation, uiModel.getValidator().get(operation)); + } + + @Override + protected void releaseAction() { + super.releaseAction(); + file = null; + } + + @Override + public void postSuccessAction() { + super.postSuccessAction(); + sendMessage(_("tutti.validateCruise.action.export.operation.success", file)); + } +} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUI.css 2013-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUI.css 2013-04-26 17:21:26 UTC (rev 876) @@ -21,6 +21,40 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ + +#navigationTitledPanel { + rightDecoration: {topToolBar}; + border: {null}; + title: "tutti.validateCruise.navigation.title"; +} + +#topToolBar { + floatable: false; + opaque: false; + borderPainted: false; +} + +#exportButton { + actionIcon: export; + toolTipText: "tutti.validateCruise.navigation.action.export.all.tip"; + _tuttiAction: {ExportCruiseValidationMessagesAction.class}; + _help: {"tutti.validateCruise.navigation.action.export.all.help"}; +} + +#menuPopup { + label: "tutti.editAccidentalBatch.title.batchActions"; +} + +#exportOperationMessagesItem { + actionIcon: export; + text: "tutti.validateCruise.navigation.action.export.operation"; + toolTipText: "tutti.validateCruise.navigation.action.export.operation.tip"; + i18nMnemonic: "tutti.validateCruise.navigation.action.export.operation.mnemonic"; + _tuttiAction: {ExportOperationValidationMessagesAction.class}; + enabled: {model.getSelectedFishingOperation() != null}; + _help: {"tutti.validateCruise.navigation.action.export.operation.help"}; +} + #navigation { rootVisible: false; } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUI.jaxx 2013-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUI.jaxx 2013-04-26 17:21:26 UTC (rev 876) @@ -30,6 +30,8 @@ fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI fr.ifremer.tutti.ui.swing.util.TuttiUI + org.jdesktop.swingx.JXTitledPanel + </import> <script><![CDATA[ @@ -54,10 +56,24 @@ <TuttiHelpBroker id='broker' constructorParams='"tutti.validateCruise.help"'/> - <JScrollPane id='navigationPanel'> - <JTree id='navigation'/> - </JScrollPane> + <JXTitledPanel id='navigationTitledPanel'> + <JToolBar id='topToolBar'> + <JButton id='exportButton'/> + </JToolBar> + + <JPopupMenu id='menuPopup'> + <JMenuItem id='exportOperationMessagesItem'/> + </JPopupMenu> + + <JScrollPane id='navigationPanel'> + <JTree id='navigation' + onMouseClicked='handler.autoSelectNode(event, menuPopup)' + onKeyPressed='handler.openNodeMenu(event, menuPopup)'/> + </JScrollPane> + + </JXTitledPanel> + <FishingOperationsUI id='operationPanel' constructorParams='this'> </FishingOperationsUI> 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-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIHandler.java 2013-04-26 17:21:26 UTC (rev 876) @@ -25,17 +25,9 @@ */ import com.google.common.base.Preconditions; -import com.google.common.collect.LinkedListMultimap; import com.google.common.collect.Lists; -import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.ValidationService; import fr.ifremer.tutti.service.catches.ValidateCruiseOperationsService; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.content.MainUI; -import fr.ifremer.tutti.ui.swing.content.MainUIHandler; -import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIModel; import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.CloseableUI; @@ -43,33 +35,23 @@ 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 fr.ifremer.tutti.ui.swing.util.action.TuttiUIAction; -import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; -import jaxx.runtime.validator.swing.SwingValidatorMessage; -import jaxx.runtime.validator.swing.SwingValidatorMessageTableModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorResult; import org.nuiton.validator.NuitonValidatorScope; -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.JTree; -import javax.swing.event.TableModelEvent; -import javax.swing.event.TableModelListener; +import javax.swing.*; import javax.swing.tree.*; -import java.awt.Component; -import java.awt.event.MouseAdapter; +import java.awt.*; +import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; import java.util.List; import java.util.Map; import static org.nuiton.i18n.I18n._; -import static org.nuiton.i18n.I18n.n_; /** * @author kmorin <kmorin@codelutin.com> @@ -84,34 +66,6 @@ protected EditCruiseFishingOperationAction editFishingOperationAction; - protected final PropertyChangeListener editFishingOperationModelListener = new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - - List<String> propertiesToIgnore = Lists.newArrayList( - EditFishingOperationUIModel.PROPERTY_MODIFY, - EditFishingOperationUIModel.PROPERTY_VALID, - EditFishingOperationUIModel.PROPERTY_PERSISTED - ); - EditFishingOperationUIModel model = (EditFishingOperationUIModel) evt.getSource(); - - if (!getUI().getOperationPanel().getModel().isEditionAdjusting() - && model.getFishingOperation() != null - &&!propertiesToIgnore.contains(evt.getPropertyName())) { - - if (model.getCoordinateEditorType() != CoordinateEditorType.DD) { - model.convertGearShootingCoordinatesDMSToDD(); - } - - FishingOperation operation = model.toBean(); - NuitonValidatorResult validationResult = validationService.validateCruiseOperation(operation); - - updateCurrentOperatonNode(validationResult); - - } - } - }; - public ValidateCruiseUIHandler(TuttiUI parentUi, ValidateCruiseUI ui) { super(parentUi.getHandler().getContext(), ui); validationService = context.getValidateCruiseOperationsService(); @@ -130,9 +84,6 @@ public void propertyChange(PropertyChangeEvent evt) { FishingOperation operation = (FishingOperation) evt.getNewValue(); - ui.getOperationPanel().getFishingOperationTabContent().getModel(). - removePropertyChangeListener(editFishingOperationModelListener); - editFishingOperationAction.setFishingOperation(null); AbstractTuttiAction.runAction(editFishingOperationAction); @@ -164,42 +115,14 @@ } TreeModel model = new DefaultTreeModel(root); - final JTree navigation = ui.getNavigation(); + JTree navigation = ui.getNavigation(); navigation.setModel(model); navigation.setCellRenderer(new ValidationTreeCellRenderer()); - navigation.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - TreePath selectionPath = navigation.getSelectionPath(); - Preconditions.checkArgument(selectionPath.getPathCount() > 1); - - Object o = selectionPath.getPathComponent(1); - FishingOperation operation = null; - - if (o != null) { - operation = (FishingOperation) ((OperationTreeNode) o).getUserObject(); - } - getModel().setSelectedFishingOperation(operation); - } - }); SwingUtil.expandTree(navigation); SwingUtil.addExpandOnClickListener(navigation); FishingOperationsUI operationPanel = ui.getOperationPanel(); operationPanel.getTopPanel().setVisible(false); - - operationPanel.getFishingOperationTabContent().getModel().addPropertyChangeListener( - EditFishingOperationUIModel.PROPERTY_PERSISTED, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - EditFishingOperationUIModel model = (EditFishingOperationUIModel) evt.getSource(); - if (Boolean.TRUE.equals(evt.getNewValue())) { - model.addPropertyChangeListener(editFishingOperationModelListener); - } else { - model.removePropertyChangeListener(editFishingOperationModelListener); - } - } - }); } @Override @@ -225,6 +148,61 @@ return true; } + public void autoSelectNode(MouseEvent e, JPopupMenu popup) { + JTree navigation = (JTree) e.getSource(); + + boolean rightClick = SwingUtilities.isRightMouseButton(e); + + if (rightClick) { + + // get the path at this point + TreePath path = navigation.getPathForLocation(e.getX(), e.getY()); + + // select row (could empty selection) + if (path == null) { + navigation.clearSelection(); + + } else { + navigation.setSelectionPath(path); + } + + // on right click show popup + popup.show(navigation, e.getX(), e.getY()); + + } + + TreePath selectionPath = navigation.getSelectionPath(); + FishingOperation operation = null; + + if (selectionPath != null && selectionPath.getPathCount() > 1) { + Object o = selectionPath.getPathComponent(1); + + if (o != null) { + operation = (FishingOperation) ((OperationTreeNode) o).getUserObject(); + } + } + getModel().setSelectedFishingOperation(operation); + } + + public void openNodeMenu(KeyEvent e, JPopupMenu popup) { + + if (e.getKeyCode() == KeyEvent.VK_CONTEXT_MENU) { + + JTree navigation = (JTree) e.getSource(); + + TreePath path = navigation.getSelectionPath(); + + if (path != null) { + Rectangle r = navigation.getPathBounds(path); + + // get the point in the middle lower of the node + Point p = new Point(r.x + r.width / 2, r.y + r.height); + + popup.show(navigation, p.x, p.y); + } + } + } + protected void updateCurrentOperatonNode(NuitonValidatorResult validationResult) { JTree navigation = ui.getNavigation(); TreePath selectionPath = navigation.getSelectionPath(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseForSumatraAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseForSumatraAction.java 2013-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseForSumatraAction.java 2013-04-26 17:21:26 UTC (rev 876) @@ -53,7 +53,7 @@ protected File file; public ExportCruiseForSumatraAction(SelectCruiseUIHandler handler) { - super(handler, true); + super(handler, false); } @Override @@ -64,7 +64,8 @@ if (doAction) { // choose file to export - file = TuttiUIUtil.chooseFile( + file = TuttiUIUtil.saveFile( + _("tutti.exportCruiseForSumatra.choose.exportFile.default"), getContext().getMainUI(), _("tutti.exportCruiseForSumatra.title.choose.exportFile"), _("tutti.exportCruiseForSumatra.action.chooseFile"), 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-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-04-26 17:21:26 UTC (rev 876) @@ -382,6 +382,8 @@ EditFishingOperationUIModel editFishingOperationUIModel = ui.getModel(); + editFishingOperationUIModel.setLoadingData(true); + editFishingOperationUIModel.removeAllAttachment(editFishingOperationUIModel.getAttachment()); handler.uninstallStartDateListener(); @@ -461,6 +463,8 @@ handler.registerValidator(); } + editFishingOperationUIModel.setLoadingData(false); + ui.getTraitGeneralTabPane().setTitle(fishingOperationText); ui.getVesselUseFeatureTabPane().setTitle(fishingOperationText); ui.getGearUseFeatureTabPane().setTitle(fishingOperationText); @@ -498,6 +502,9 @@ ui.getHandler().getCatchBatchMonitor(); EditCatchesUIModel catchesUIModel = ui.getModel(); + + catchesUIModel.setLoadingData(true); + catchesUIModel.reset(); CatchBatch batch; @@ -577,6 +584,7 @@ // ui.getPlanktonTabContent().getHandler().selectFishingOperation(bean); } + catchesUIModel.setLoadingData(false); } } 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-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-04-26 17:21:26 UTC (rev 876) @@ -127,6 +127,8 @@ protected CoordinateEditorType coordinateEditorType; + protected boolean loadingData; + protected static Binder<EditFishingOperationUIModel, FishingOperation> toBeanBinder = BinderFactory.newBinder(EditFishingOperationUIModel.class, FishingOperation.class); @@ -142,6 +144,14 @@ gearShootingEndLongitudeAsSexagecimal = SexagecimalPosition.valueOf(getGearShootingEndLongitude()); } + public boolean isLoadingData() { + return loadingData; + } + + public void setLoadingData(boolean loadingData) { + this.loadingData = loadingData; + } + @Override public String getTitle() { return TITLE; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/ComputeWeightsAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/ComputeWeightsAction.java 2013-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/ComputeWeightsAction.java 2013-04-26 17:21:26 UTC (rev 876) @@ -60,6 +60,7 @@ TuttiWeightComputingService tuttiWeightComputingService = getContext().getTuttiWeightComputingService(); EditCatchesUIModel model = getModel(); + model.setLoadingData(true); BatchContainer<SpeciesBatch> computedSpeciesBatches; Float totalSpeciesSortedWeight; @@ -158,6 +159,8 @@ computedMarineLitterBatches); model.setCatchBatch(catchBatch); model.fromBean(catchBatch); + model.setLoadingData(false); + model.setModify(modified); } 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-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-04-26 17:21:26 UTC (rev 876) @@ -124,6 +124,7 @@ setCustomTab(4, ui.getAccidentalTabContent().getModel()); setCustomTab(5, ui.getIndividualObservationTabContent().getModel()); + getTabPanel().setSelectedIndex(1); } @Override 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-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java 2013-04-26 17:21:26 UTC (rev 876) @@ -126,6 +126,8 @@ protected final Multimap<CaracteristicQualitativeValue, CaracteristicQualitativeValue> marineLitterCategoriesUsed = ArrayListMultimap.create(); + protected boolean loadingData; + public EditCatchesUIModel() { super(CatchBatch.class, fromBeanBinder, toBeanBinder); speciesTotalSortedComputedOrNotWeight.addPropagateListener( @@ -151,6 +153,14 @@ PROPERTY_CATCH_TOTAL_REJECTED_WEIGHT, this); } + public boolean isLoadingData() { + return loadingData; + } + + public void setLoadingData(boolean loadingData) { + this.loadingData = loadingData; + } + @Override public String getTitle() { return _("tutti.label.tab.catchesCaracteristics"); 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-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-04-26 17:21:26 UTC (rev 876) @@ -1,3 +1,4 @@ +export= swing.error.cannot.mail= swing.error.cannot.open.file= swing.error.cannot.open.link= @@ -4,6 +5,7 @@ swing.error.desktop.browse.not.supported= swing.error.desktop.mail.not.supported= swing.error.desktop.not.supported= +traits= tutti.about.bottomText= tutti.about.message= tutti.about.title= @@ -820,6 +822,7 @@ tutti.exportCruise.action.success= tutti.exportCruiseForSumatra.action.chooseFile= tutti.exportCruiseForSumatra.action.success= +tutti.exportCruiseForSumatra.choose.exportFile.default= tutti.exportCruiseForSumatra.title.choose.exportFile= tutti.exportProgram.action.success= tutti.exportProtocol.action.success= @@ -1119,6 +1122,29 @@ tutti.updateApplication.message.success= tutti.updateApplication.noUpdate= tutti.updateApplication.title.success= +tutti.validateCruise.action.export.all.chooseFile.defaultFile= +tutti.validateCruise.action.export.all.chooseFile.label= +tutti.validateCruise.action.export.all.chooseFile.title= +tutti.validateCruise.action.export.all.success= +tutti.validateCruise.action.export.all.tip= +tutti.validateCruise.action.export.chooseFile.defaultFile= +tutti.validateCruise.action.export.chooseFile.label= +tutti.validateCruise.action.export.chooseFile.title= +tutti.validateCruise.action.export.operation.chooseFile.defaultFile= +tutti.validateCruise.action.export.operation.chooseFile.label= +tutti.validateCruise.action.export.operation.chooseFile.title= +tutti.validateCruise.action.export.operation.success= +tutti.validateCruise.action.export.operation.tip= +tutti.validateCruise.action.export.tip= +tutti.validateCruise.action.refresh.all.tip= +tutti.validateCruise.navigation.action.export= +tutti.validateCruise.navigation.action.export.all.tip= +tutti.validateCruise.navigation.action.export.operation= +tutti.validateCruise.navigation.action.export.operation.mnemonic= +tutti.validateCruise.navigation.action.export.operation.tip= +tutti.validateCruise.navigation.action.export.tip= +tutti.validateCruise.navigation.action.refresh.all.tip= +tutti.validateCruise.navigation.title= tutti.validator.error.createAccidentalBatch.species.required= tutti.validator.error.createIndividualObservationBatch.lengthStepCaracteristic.required= tutti.validator.error.createIndividualObservationBatch.size.required= 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-04-25 17:22:52 UTC (rev 875) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-04-26 17:21:26 UTC (rev 876) @@ -807,6 +807,7 @@ tutti.exportCruise.action.success=La campagne <strong>%s</strong> a été exportée dans le fichier <strong>%s</strong>. tutti.exportCruiseForSumatra.action.chooseFile=Choisir le fichier d'export tutti.exportCruiseForSumatra.action.success=Les captures ont correctement été exporté dans le fichier %s +tutti.exportCruiseForSumatra.choose.exportFile.default=import_sumatra tutti.exportCruiseForSumatra.title.choose.exportFile=Exporter les captures de la campagne tutti.exportProgram.action.success=La série de campagne <strong>%s</strong> a été exportée dans le fichier <strong>%s</strong>. tutti.exportProtocol.action.success=Protocole [%1s] exporté dans le fichier <strong>%2s</strong>. @@ -1105,6 +1106,22 @@ tutti.updateApplication.message.success=La mise à jour nécessite le redémarrage du Tutti.\nL'application va se fermer puis se ré-ouvrir automatiquement. tutti.updateApplication.noUpdate=Aucune mise à jour de l'application détectée. tutti.updateApplication.title.success=Redémarrage de Tutti nécessaire... +tutti.validateCruise.action.export.all.chooseFile.defaultFile=validation_%s +tutti.validateCruise.action.export.all.chooseFile.label=Choisir le fichier d'export +tutti.validateCruise.action.export.all.chooseFile.title=Exporter les messages de validation de la campagne +tutti.validateCruise.action.export.all.success=Les messages de validation des captures ont correctement été exporté dans le fichier %s +tutti.validateCruise.action.export.all.tip=Exporter les messages de validation de la campagne +tutti.validateCruise.action.export.operation.chooseFile.defaultFile=validation_%s +tutti.validateCruise.action.export.operation.chooseFile.label=Choisir le fichier d'export +tutti.validateCruise.action.export.operation.chooseFile.title=Exporter les messages de validation de l'opération +tutti.validateCruise.action.export.operation.success=Les messages de validation de l'opération ont correctement été exporté dans le fichier %s +tutti.validateCruise.action.export.operation.tip=Exporter les messages de validation de l'opération +tutti.validateCruise.navigation.action.export.all.tip=Exporter les messages de validation de la campagne +tutti.validateCruise.navigation.action.export.operation=Exporter +tutti.validateCruise.navigation.action.export.operation.mnemonic=x +tutti.validateCruise.navigation.action.export.operation.tip=Exporter les messages de validation de l'opération +tutti.validateCruise.navigation.action.refresh.all.tip=Rafraîchir les messages de validation de la campagne +tutti.validateCruise.navigation.title=Traits tutti.validator.error.createAccidentalBatch.species.required=L'espèce est obligatoire tutti.validator.error.createIndividualObservationBatch.lengthStepCaracteristic.required=La classe de taille est obligatoire tutti.validator.error.createIndividualObservationBatch.size.required=La taille est obligatoire
participants (1)
-
kmorin@users.forge.codelutin.com