Tutti-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- 4058 discussions
r881 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing java/fr/ifremer/tutti/ui/swing/config java/fr/ifremer/tutti/ui/swing/content/config java/fr/ifremer/tutti/ui/swing/util java/fr/ifremer/tutti/ui/swing/util/action java/fr/ifremer/tutti/ui/swing/util/attachment resources/i18n
by kmorin@users.forge.codelutin.com 29 Apr '13
by kmorin@users.forge.codelutin.com 29 Apr '13
29 Apr '13
Author: kmorin
Date: 2013-04-29 12:22:47 +0200 (Mon, 29 Apr 2013)
New Revision: 881
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/881
Log:
fixes #2000 [TECH] Mettre en place les messages d'erreur m?\195?\169tier
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderIdsTableCell.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java
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/attachment/AttachmentEditorUIHandler.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-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java 2013-04-29 10:03:25 UTC (rev 880)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java 2013-04-29 10:22:47 UTC (rev 881)
@@ -438,13 +438,13 @@
service.prepare(dbDirectory, result);
if (!result.isSuccess()) {
- throw new TuttiTechnicalException("Could not prepare synchro", result.getError());
+ throw new TuttiTechnicalException(_("tutti.applicationUpdater.synchroDB.prepare.error"), result.getError());
}
service.synchronize(dbDirectory, result);
if (!result.isSuccess()) {
- throw new TuttiTechnicalException("Could not synchro db", result.getError());
+ throw new TuttiTechnicalException(_("tutti.applicationUpdater.synchroDB.synchro.error"), result.getError());
}
// reset cache
@@ -463,7 +463,7 @@
try {
ApplicationUpdater.storeVersionFile(target, info.newVersion);
} catch (IOException e) {
- throw new TuttiTechnicalException("Could not write back new db version to file " + versionFile);
+ throw new TuttiTechnicalException(_("tutti.applicationUpdater.synchroDB.writeVersion.error", versionFile));
}
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-04-29 10:03:25 UTC (rev 880)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-04-29 10:22:47 UTC (rev 881)
@@ -74,6 +74,8 @@
import java.util.Properties;
import java.util.Set;
+import static org.nuiton.i18n.I18n._;
+
/**
* UI application context.
*
@@ -552,7 +554,7 @@
try {
serviceContext.close();
} catch (IOException e) {
- throw new TuttiTechnicalException("Could not close services", e);
+ throw new TuttiTechnicalException(_("tutti.context.service.close.error"), e);
}
dataContext.close();
@@ -770,8 +772,7 @@
String value = (String) helpMapping.get(helpId);
if (value == null) {
- throw new TuttiTechnicalException(
- "Could not find help page for " + helpId);
+ throw new TuttiTechnicalException(_("tutti.context.helpPage.notFound", helpId));
}
File helpDirectory = getConfig().getHelpDirectoryWithLocale();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-04-29 10:03:25 UTC (rev 880)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-04-29 10:22:47 UTC (rev 881)
@@ -168,8 +168,7 @@
try {
applicationConfig.save(file, false, optionKeyToNotSave);
} catch (IOException e) {
- throw new TuttiTechnicalException(
- "Could not save configuration at " + file, e);
+ throw new TuttiTechnicalException(_("tutti.config.save.error", file), e);
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderIdsTableCell.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderIdsTableCell.java 2013-04-29 10:03:25 UTC (rev 880)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderIdsTableCell.java 2013-04-29 10:22:47 UTC (rev 881)
@@ -49,6 +49,8 @@
import java.util.List;
import java.util.Map;
+import static org.nuiton.i18n.I18n._;
+
/**
* To edit sampling oder ids in a table cell.
*
@@ -158,7 +160,7 @@
for (Integer id : ids) {
SampleCategoryEnum sampleCategoryEnum = mapping.get(id);
if (sampleCategoryEnum == null) {
- throw new TuttiTechnicalException("caracteristic with id '" + id + "' is not designed form sampling.");
+ throw new TuttiTechnicalException(_("tutti.sampleOrder.caracteristicNotFound", id));
}
Caracteristic caracteristic = caracteristicMap.get(id);
result.add(caracteristic);
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-04-29 10:03:25 UTC (rev 880)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-04-29 10:22:47 UTC (rev 881)
@@ -169,7 +169,7 @@
try {
PropertyUtils.setSimpleProperty(bean, property, value);
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not set property '" + property + "' on object of type '" + bean.getClass().getName() + "'", e);
+ throw new TuttiTechnicalException(_("tutti.property.set.error", property, bean.getClass().getName()), e);
}
}
@@ -179,7 +179,7 @@
try {
return PropertyUtils.getSimpleProperty(bean, property);
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not get property '" + property + "' on object of type '" + bean.getClass().getName() + "'", e);
+ throw new TuttiTechnicalException(_("tutti.property.get.error", property, bean.getClass().getName()), e);
}
}
@@ -259,7 +259,7 @@
try {
openLink(url.toURI());
} catch (URISyntaxException e) {
- throw new TuttiTechnicalException("Could not open link: " + url, e);
+ throw new TuttiTechnicalException(_("swing.error.cannot.open.link", url), e);
}
}
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-04-29 10:03:25 UTC (rev 880)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionHelper.java 2013-04-29 10:22:47 UTC (rev 881)
@@ -33,6 +33,8 @@
import javax.swing.AbstractButton;
import javax.swing.Action;
+import static org.nuiton.i18n.I18n._;
+
/**
* Useful method around TuttiUIAction.
*
@@ -102,8 +104,8 @@
TuttiUIAction<A> result = createUIAction(abstractButton, logicAction);
return result;
} catch (Exception e) {
- throw new TuttiTechnicalException(
- "Could not instanciate action " + actionName, e);
+ throw new TuttiTechnicalException(_("tutti.action.create.error", actionName), e);
+ //"Could not instanciate action " + actionName, e);
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java 2013-04-29 10:03:25 UTC (rev 880)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java 2013-04-29 10:22:47 UTC (rev 881)
@@ -259,7 +259,7 @@
File file = persistenceService.getAttachmentFile(attachment.getId());
if (!file.exists()) {
- throw new TuttiTechnicalException("File " + file.getAbsolutePath() + " does not exists.");
+ throw new TuttiTechnicalException(_("tutti.attachmentEditor.fileNotFound", file.getAbsolutePath()));
}
Desktop desktop = TuttiUIUtil.getDesktopForBrowse();
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-29 10:03:25 UTC (rev 880)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-04-29 10:22:47 UTC (rev 881)
@@ -15,6 +15,10 @@
tutti.about.update.app.up.detail=
tutti.about.update.content=
tutti.about.update.title=
+tutti.action.create.error=
+tutti.applicationUpdater.synchroDB.prepare.error=
+tutti.applicationUpdater.synchroDB.synchro.error=
+tutti.applicationUpdater.synchroDB.writeVersion.error=
tutti.attachmentEditor.action.add.mnemonic=
tutti.attachmentEditor.action.add.tip=
tutti.attachmentEditor.action.closeAttachment.tip=
@@ -30,6 +34,7 @@
tutti.attachmentEditor.field.file=
tutti.attachmentEditor.field.fileComment=
tutti.attachmentEditor.field.fileName=
+tutti.attachmentEditor.fileNotFound=
tutti.attachmentEditor.none.tip=
tutti.attachmentEditor.saveAttachment.button=
tutti.attachmentEditor.saveAttachment.fail.message=
@@ -101,7 +106,10 @@
tutti.config.option.weights.rate.difference.totalAndSorted.description=
tutti.config.parse.error=
tutti.config.sampleOrder.title=
+tutti.config.save.error=
tutti.config.title=
+tutti.context.helpPage.notFound=
+tutti.context.service.close.error=
tutti.createAccidentalBatch.action.cancel=
tutti.createAccidentalBatch.action.cancel.mnemonic=
tutti.createAccidentalBatch.action.cancel.tip=
@@ -1014,6 +1022,8 @@
tutti.manageTemporaryReferential.title.choose.importTemporarySpeciesFile=
tutti.manageTemporaryReferential.title.choose.importTemporaryVesselFile=
tutti.message.action.running=
+tutti.property.get.error=
+tutti.sampleOrder.caracteristicNotFound=
tutti.selectBenthos.title=
tutti.selectCruise.action.chooseCruiseExportFile=
tutti.selectCruise.action.chooseProgramExportFile=
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-29 10:03:25 UTC (rev 880)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-04-29 10:22:47 UTC (rev 881)
@@ -13,6 +13,10 @@
tutti.about.update.app.up.detail=<tr><td>%1$s</td><td>%2$s</td><td><strong>%3$s</strong></td><td><a href\="%4$s">Mettre à jour</a><td></tr>
tutti.about.update.content=<h2>Mise à jour de Tutti</h2><p>Fichier des mises à jour \: <a href\="%1$s">%1$s</a></p><br/><hr/><br/><table><CAPTION><EM>Mises à jour des modules</EM></CAPTION><tr><th>Module</th><th>Version installée</th><th>Dernière version</th><th></th></tr>%2$s</table>
tutti.about.update.title=Mise à jour Tutti
+tutti.action.create.error=Erreur à l'instanciation de l'action %s
+tutti.applicationUpdater.synchroDB.prepare.error=Erreur lors de la préparation de la synchronisation de la base
+tutti.applicationUpdater.synchroDB.synchro.error=Erreur lors de la synchronisation de la base
+tutti.applicationUpdater.synchroDB.writeVersion.error=Erreur lors de l'écriture de la nouvelle version de la base de données dans le fichier %s
tutti.attachmentEditor.action.add.mnemonic=A
tutti.attachmentEditor.action.add.tip=Ajouter une pièce jointe
tutti.attachmentEditor.action.closeAttachment.tip=Fermer la fenêtre des pièces-jointes
@@ -28,6 +32,7 @@
tutti.attachmentEditor.field.file=Fichier
tutti.attachmentEditor.field.fileComment=Commentaire
tutti.attachmentEditor.field.fileName=Nom
+tutti.attachmentEditor.fileNotFound=Le fichier %s de la pièce jointe n'a pas été trouvé
tutti.attachmentEditor.none.tip=Pas de pièce-jointes
tutti.attachmentEditor.saveAttachment.button=Enregistrer
tutti.attachmentEditor.saveAttachment.fail.message=Une erreur est survenue lors de la sauvegarde du fichier.
@@ -95,9 +100,12 @@
tutti.config.option.ui.showNumberEditorButton.description=Afficher le pavé numérique de saisie
tutti.config.option.update.url.description=URL de mise à jour
tutti.config.option.weights.rate.difference.totalAndSorted.description=Pourcentage de différence entre les Poids totaux VRAC triés et les poids totaux VRAC en dessous duquel on demande confirmation sur la saisie.
-tutti.config.parse.error=
+tutti.config.parse.error=Erreur de parsing du fichier de configuration
tutti.config.sampleOrder.title=Catégorie d'échantillonnage
+tutti.config.save.error=Erreur lors de la sauvegarde de la configuration dans le fichier %s
tutti.config.title=Configuration
+tutti.context.helpPage.notFound=La page d'aide %s n'a pas été trouvée
+tutti.context.service.close.error=Erreur lors de la fermeture du service %s
tutti.createAccidentalBatch.action.cancel=Annuler
tutti.createAccidentalBatch.action.cancel.mnemonic=A
tutti.createAccidentalBatch.action.cancel.tip=Annuler la création de la capture accidentelle
@@ -999,6 +1007,9 @@
tutti.manageTemporaryReferential.title.choose.importTemporarySpeciesFile=Importer un réferentiel Espèce
tutti.manageTemporaryReferential.title.choose.importTemporaryVesselFile=Importer un réferentiel Navire
tutti.message.action.running=<html>Action <strong>%s</strong> en cours d'execution...<hr/></html>
+tutti.property.get.error=Propriété %1s non trouvée sur l'objet de type %2s
+tutti.property.set.error=Propriété %1s non trouvée sur l'objet de type %2s
+tutti.sampleOrder.caracteristicNotFound=La caractéristique d'id %s n'est pas prévue pour l'échantillonage
tutti.selectBenthos.title=Choisissez un benthos
tutti.selectCruise.action.chooseCruiseExportFile=Exporter
tutti.selectCruise.action.chooseProgramExportFile=Exporter
1
0
r880 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config tutti-persistence/src/main/resources/i18n tutti-service/src/main/java/fr/ifremer/tutti/service/catches tutti-service/src/main/resources/i18n
by kmorin@users.forge.codelutin.com 29 Apr '13
by kmorin@users.forge.codelutin.com 29 Apr '13
29 Apr '13
Author: kmorin
Date: 2013-04-29 12:03:25 +0200 (Mon, 29 Apr 2013)
New Revision: 880
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/880
Log:
refs #2000 [TECH] Mettre en place les messages d'erreur m?\195?\169tier
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfig.java
trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties
trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties
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
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfig.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfig.java 2013-04-29 09:54:29 UTC (rev 879)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfig.java 2013-04-29 10:03:25 UTC (rev 880)
@@ -44,6 +44,8 @@
import java.util.Properties;
import java.util.Set;
+import static org.nuiton.i18n.I18n._;
+
/**
* Configuration for the persistence driver.
*
@@ -188,14 +190,14 @@
generateDbConfiguration(true);
} catch (IOException e) {
- throw new TuttiTechnicalException("Could not generate db configuration file");
+ throw new TuttiTechnicalException(_("tutti.persistence.config.generateFile.error"));
}
try {
generateDbEnumerationConfiguration(force);
} catch (IOException e) {
- throw new TuttiTechnicalException("Could not generate db enumeration file");
+ throw new TuttiTechnicalException(_("tutti.persistence.config.generateEnumFile.error"));
}
}
Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties
===================================================================
--- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2013-04-29 09:54:29 UTC (rev 879)
+++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2013-04-29 10:03:25 UTC (rev 880)
@@ -27,6 +27,8 @@
tutti.persistence.batch.validation.vracSpeciesInertNotFound=
tutti.persistence.batch.validation.vracSpeciesLifeNotFound=
tutti.persistence.batch.validation.vracSpeciesNotFound=
+tutti.persistence.config.generateEnumFile.error=
+tutti.persistence.config.generateFile.error=
tutti.persistence.protocol.fromFile.error=
tutti.sampleCategoryType.age=
tutti.sampleCategoryType.maturity=
Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties
===================================================================
--- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-04-29 09:54:29 UTC (rev 879)
+++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-04-29 10:03:25 UTC (rev 880)
@@ -27,6 +27,8 @@
tutti.persistence.batch.validation.vracSpeciesInertNotFound=Lot 'Vrac > Espèces > Inerte' non trouvé, ou configuré avec d'autres critères de classement.
tutti.persistence.batch.validation.vracSpeciesLifeNotFound=Lot 'Vrac > Espèces > Vivant' non trouvé, ou configuré avec d'autres critères de classement.
tutti.persistence.batch.validation.vracSpeciesNotFound=Lot 'Vrac > Espèces' non trouvé, ou configuré avec d'autres critères de classement.
+tutti.persistence.config.generateEnumFile.error=Erreur lors de la génération du fichier d'énumération de la configuration de la base de données
+tutti.persistence.config.generateFile.error=Erreur lors de la génération du fichier de configuration de la base de données
tutti.persistence.protocol.fromFile.error=Erreur lors de l'import du protocol du fichier %s
tutti.sampleCategoryType.age=Age
tutti.sampleCategoryType.maturity=Maturité
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-29 09:54:29 UTC (rev 879)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java 2013-04-29 10:03:25 UTC (rev 880)
@@ -130,7 +130,7 @@
FileUtils.writeLines(file, lines);
} catch (IOException e) {
- throw new TuttiTechnicalException("error");
+ throw new TuttiTechnicalException(_("tutti.service.validateCruise.exportResult.error", file));
}
}
@@ -147,7 +147,7 @@
FileUtils.writeLines(file, lines);
} catch (IOException e) {
- throw new TuttiTechnicalException("error");
+ throw new TuttiTechnicalException(_("tutti.service.validateCruise.exportResult.error", file));
}
}
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-29 09:54:29 UTC (rev 879)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-04-29 10:03:25 UTC (rev 880)
@@ -127,6 +127,7 @@
tutti.service.referential.export.species.error=
tutti.service.referential.export.vessel.error=
tutti.service.sumatra.export.error=
+tutti.service.validateCruise.exportResult.error=
tutti.validator.error.accidental.species.required=
tutti.validator.error.benthosBatch.species.required=
tutti.validator.error.comment.too.long=
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-29 09:54:29 UTC (rev 879)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-04-29 10:03:25 UTC (rev 880)
@@ -102,6 +102,7 @@
tutti.service.referential.export.species.error=Erreur lors de l'export des espèces dans le fichier %s
tutti.service.referential.export.vessel.error=Erreur lors de l'export des navires dans le fichier %s
tutti.service.sumatra.export.error=Erreur lors de l'export Sumatra dans le fichier %s
+tutti.service.validateCruise.exportResult.error=Erreur lors de l'export des résultats de validation de la campagne dans le fichier %s
tutti.validator.error.accidental.species.required=L'espèce est obligatoire
tutti.validator.error.benthosBatch.species.required=L'espèce est obligatoire
tutti.validator.error.comment.too.long=Taille de commentaire trop longue (limitée à %s caractères)
1
0
29 Apr '13
Author: kmorin
Date: 2013-04-29 11:54:29 +0200 (Mon, 29 Apr 2013)
New Revision: 879
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/879
Log:
refs #2000 [TECH] Mettre en place les messages d'erreur m?\195?\169tier
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/AbstractTuttiService.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ExportCatchesReportService.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportService.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/sumatra/TuttiCatchesSumatraExportService.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/config/TuttiApplicationConfig.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/AbstractTuttiService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/AbstractTuttiService.java 2013-04-29 09:32:57 UTC (rev 878)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/AbstractTuttiService.java 2013-04-29 09:54:29 UTC (rev 879)
@@ -31,6 +31,8 @@
import java.io.File;
import java.io.IOException;
+import static org.nuiton.i18n.I18n._;
+
/**
* Sammoa service support.
* <p/>
@@ -73,7 +75,7 @@
}
} catch (IOException e) {
- throw new TuttiTechnicalException("Could not compress directory", e);
+ throw new TuttiTechnicalException(_("tutti.service.compressZipFile.error", directory, zipFile), e);
}
}
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-04-29 09:32:57 UTC (rev 878)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-04-29 09:54:29 UTC (rev 879)
@@ -52,6 +52,8 @@
import java.util.Map;
import java.util.Set;
+import static org.nuiton.i18n.I18n._;
+
/**
* Helper around csv import / export in Tutti.
*
@@ -71,7 +73,7 @@
}
public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator, String defaultNullValue) {
- DecoatorPropertyFormatter<T> valueFormatter = newDecoratorFormatter(decorator, defaultNullValue);
+ DecoratorPropertyFormatter<T> valueFormatter = newDecoratorFormatter(decorator, defaultNullValue);
return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter);
}
@@ -116,7 +118,7 @@
}
public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator, String defaultNullValue) {
- DecoatorPropertyFormatter<T> valueFormatter = newDecoratorFormatter(decorator, defaultNullValue);
+ DecoratorPropertyFormatter<T> valueFormatter = newDecoratorFormatter(decorator, defaultNullValue);
return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter);
}
@@ -278,23 +280,23 @@
try {
return (String) BeanUtilsBean.getInstance().getPropertyUtils().getNestedProperty(value, propertyName);
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not format value", e);
+ throw new TuttiTechnicalException(_("tutti.service.cvs.format.error"), e);//"Could not format value"
}
}
}
- public static <E> DecoatorPropertyFormatter<E> newDecoratorFormatter(Decorator<E> decorator,
+ public static <E> DecoratorPropertyFormatter<E> newDecoratorFormatter(Decorator<E> decorator,
String defaultNullValue) {
- return new DecoatorPropertyFormatter<E>(decorator, defaultNullValue);
+ return new DecoratorPropertyFormatter<E>(decorator, defaultNullValue);
}
- public static class DecoatorPropertyFormatter<E> implements ValueFormatter<E> {
+ public static class DecoratorPropertyFormatter<E> implements ValueFormatter<E> {
protected final String defaultNullValue;
protected Decorator<E> decorator;
- DecoatorPropertyFormatter(Decorator<E> decorator, String defaultNullValue) {
+ DecoratorPropertyFormatter(Decorator<E> decorator, String defaultNullValue) {
this.decorator = decorator;
this.defaultNullValue = defaultNullValue;
}
@@ -307,7 +309,7 @@
try {
return decorator.toString(value);
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not format value", e);
+ throw new TuttiTechnicalException(_("tutti.service.cvs.format.error", value), e);
}
}
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java 2013-04-29 09:32:57 UTC (rev 878)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java 2013-04-29 09:54:29 UTC (rev 879)
@@ -43,6 +43,8 @@
import java.util.Date;
import java.util.concurrent.ExecutionException;
+import static org.nuiton.i18n.I18n._;
+
/**
* Tutti application context.
* <p/>
@@ -119,8 +121,7 @@
S s = (S) services.get(serviceType);
return s;
} catch (ExecutionException e) {
- throw new TuttiTechnicalException(
- "Could not instanciate service " + serviceType, e);
+ throw new TuttiTechnicalException(_("tutti.service.context.serviceInstanciation.error", serviceType), e);
}
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ExportCatchesReportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ExportCatchesReportService.java 2013-04-29 09:32:57 UTC (rev 878)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ExportCatchesReportService.java 2013-04-29 09:54:29 UTC (rev 879)
@@ -28,6 +28,7 @@
import com.google.common.collect.Maps;
import com.itextpdf.text.DocumentException;
import fr.ifremer.tutti.TuttiBusinessException;
+import fr.ifremer.tutti.TuttiTechnicalException;
import fr.ifremer.tutti.persistence.entities.data.*;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.AbstractTuttiService;
@@ -174,7 +175,7 @@
os.close();
} catch (Exception ex) {
- throw new TuttiBusinessException(_("tutti.service.operations.exportCatchesReport.error"), ex);
+ throw new TuttiTechnicalException(_("tutti.service.operations.exportCatchesReport.error"), ex);
} finally {
IOUtils.closeQuietly(os);
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java 2013-04-29 09:32:57 UTC (rev 878)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java 2013-04-29 09:54:29 UTC (rev 879)
@@ -293,8 +293,7 @@
exportContext.surveyExport.write(rows, exportContext.surveyWriter);
} catch (Exception e) {
- throw new TuttiTechnicalException(
- "Could not export survey.", e);
+ throw new TuttiTechnicalException(_("tutti.service.export.survey.error"), e);
}
}
@@ -308,8 +307,7 @@
exportContext.operationModel.prepareRows(rows, cruise, operations);
exportContext.operationExport.write(rows, exportContext.operationWriter);
} catch (Exception e) {
- throw new TuttiTechnicalException(
- "Could not export operations.", e);
+ throw new TuttiTechnicalException(_("tutti.service.export.operations.error"), e);
}
}
@@ -326,8 +324,7 @@
}
} catch (Exception e) {
- throw new TuttiTechnicalException(
- "Could not export parameters.", e);
+ throw new TuttiTechnicalException(_("tutti.service.export.parameters.error"), e);
}
}
@@ -371,8 +368,7 @@
}
} catch (Exception e) {
- throw new TuttiTechnicalException(
- "Could not export catches.", e);
+ throw new TuttiTechnicalException(_("tutti.service.export.catches.error"), e);
}
}
@@ -435,8 +431,7 @@
} catch (FileNotFoundException e) {
// should never happen
- throw new TuttiTechnicalException(
- "Could not create writer for export", e);
+ throw new TuttiTechnicalException(_("tutti.service.export.context.error"), e);
}
surveyModel = new SurveyExportModel(csvSeparator);
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportService.java 2013-04-29 09:32:57 UTC (rev 878)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportService.java 2013-04-29 09:54:29 UTC (rev 879)
@@ -57,6 +57,8 @@
import java.util.List;
import java.util.Map;
+import static org.nuiton.i18n.I18n._;
+
/**
* To import / export {@link TuttiProtocol} to {@code Yaml} file formats.
*
@@ -156,7 +158,7 @@
export.write(writer);
writer.close();
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not export all caracteristics to file " + file, e);
+ throw new TuttiTechnicalException(_("tutti.service.protocol.export.caracteristics.all.error", file), e);
} finally {
IOUtils.closeQuietly(writer);
}
@@ -200,7 +202,7 @@
export.write(writer);
writer.close();
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not export protocol [" + protocol.getName() + "] caracteristic to file " + file, e);
+ throw new TuttiTechnicalException(_("tutti.service.protocol.export.caracteristics.protocol.error", protocol.getName(), file), e);
} finally {
IOUtils.closeQuietly(writer);
}
@@ -264,7 +266,7 @@
}
reader.close();
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not import protocol [" + protocol.getName() + "] caracteristic from file " + file, e);
+ throw new TuttiTechnicalException(_("tutti.service.protocol.import.species.error", protocol.getName(), file), e);
} finally {
IOUtils.closeQuietly(reader);
}
@@ -331,7 +333,7 @@
}
reader.close();
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not import protocol [" + protocol.getName() + "] caracteristic from file " + file, e);
+ throw new TuttiTechnicalException(_("tutti.service.protocol.import.benthos.error", protocol.getName(), file), e);
} finally {
IOUtils.closeQuietly(reader);
}
@@ -368,7 +370,7 @@
export.write(writer);
writer.close();
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not export species protocol to file " + file, e);
+ throw new TuttiTechnicalException(_("tutti.service.protocol.export.species.error", file), e);
} finally {
IOUtils.closeQuietly(writer);
}
@@ -402,7 +404,7 @@
export.write(writer);
writer.close();
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not export species protocol to file " + file, e);
+ throw new TuttiTechnicalException(_("tutti.service.protocol.export.benthos.error", file), e);
} finally {
IOUtils.closeQuietly(writer);
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java 2013-04-29 09:32:57 UTC (rev 878)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java 2013-04-29 09:54:29 UTC (rev 879)
@@ -69,6 +69,8 @@
import java.util.List;
import java.util.Set;
+import static org.nuiton.i18n.I18n._;
+
/**
* @author kmorin <kmorin(a)codelutin.com>
* @since 1.2
@@ -214,7 +216,7 @@
reader.close();
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not import protocol [" + operation.toString() + "] caracteristic from file " + file, e);
+ throw new TuttiTechnicalException(_("tutti.service.pupitri.import.trunk.error", operation.toString(), file), e);
} finally {
IOUtils.closeQuietly(importer);
@@ -396,7 +398,7 @@
reader.close();
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not import carrousel data [" + operation.toString() + "] from file " + carrouselFile, e);
+ throw new TuttiTechnicalException(_("tutti.service.pupitri.import.carrousel.error", operation.toString(), carrouselFile), e);//"Could not import carrousel data [" + operation.toString() + "] from file " + carrouselFile
} finally {
IOUtils.closeQuietly(carrouselImporter);
@@ -433,7 +435,7 @@
Export.exportToFile(speciesCsvModel, rows, target, Charsets.UTF_8, false);
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not export all species to file " + target, e);
+ throw new TuttiTechnicalException(_("tutti.service.pupitri.export.species.error", target), e);
}
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java 2013-04-29 09:32:57 UTC (rev 878)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java 2013-04-29 09:54:29 UTC (rev 879)
@@ -52,6 +52,8 @@
import java.util.List;
import java.util.Set;
+import static org.nuiton.i18n.I18n._;
+
/**
* Service to import or export referential.
*
@@ -271,7 +273,7 @@
} catch (IOException e) {
throw e;
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not export species to file: " + file, e);
+ throw new TuttiTechnicalException(_("tutti.service.referential.export.species.error", file), e);
} finally {
IOUtils.closeQuietly(writer);
}
@@ -317,7 +319,7 @@
} catch (IOException e) {
throw e;
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not export species to file: " + file, e);
+ throw new TuttiTechnicalException(_("tutti.service.referential.export.vessel.error", file), e);
} finally {
IOUtils.closeQuietly(writer);
}
@@ -354,7 +356,7 @@
} catch (IOException e) {
throw e;
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not export species to file: " + file, e);
+ throw new TuttiTechnicalException(_("tutti.service.referential.export.person.error", file), e);
} finally {
IOUtils.closeQuietly(writer);
}
@@ -397,7 +399,7 @@
} catch (IOException e) {
throw e;
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not export species to file: " + file, e);
+ throw new TuttiTechnicalException(_("tutti.service.referential.export.gear.error", file), e);
} finally {
IOUtils.closeQuietly(writer);
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/sumatra/TuttiCatchesSumatraExportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/sumatra/TuttiCatchesSumatraExportService.java 2013-04-29 09:32:57 UTC (rev 878)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/sumatra/TuttiCatchesSumatraExportService.java 2013-04-29 09:54:29 UTC (rev 879)
@@ -46,6 +46,8 @@
import java.util.List;
import java.util.Map;
+import static org.nuiton.i18n.I18n._;
+
/**
* @author kmorin <kmorin(a)codelutin.com>
* @since 2.0
@@ -178,7 +180,7 @@
writer.close();
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not export all caracteristics to file " + file, e);
+ throw new TuttiTechnicalException(_("tutti.service.sumatra.export.error", file), e);
} finally {
IOUtils.closeQuietly(writer);
}
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-29 09:32:57 UTC (rev 878)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-04-29 09:54:29 UTC (rev 879)
@@ -48,8 +48,16 @@
tutti.service.catches.computeWeights.benthos.error.incoherentSampleWeight=
tutti.service.catches.computeWeights.error.incoherentRowWeightCategory=
tutti.service.catches.computeWeights.species.error.incoherentSampleWeight=
+tutti.service.compressZipFile.error=
+tutti.service.context.serviceInstanciation.error=
+tutti.service.cvs.format.error=
+tutti.service.export.catches.error=
+tutti.service.export.context.error=
tutti.service.export.invalid.cruise=
tutti.service.export.invalid.fishingOperation=
+tutti.service.export.operations.error=
+tutti.service.export.parameters.error=
+tutti.service.export.survey.error=
tutti.service.exportCruise.buildZip=
tutti.service.exportCruise.checkCruise=
tutti.service.exportCruise.exportCatches=
@@ -105,6 +113,20 @@
tutti.service.operations.validate.marineLitter.error.marineLitterSizeCategory.required=
tutti.service.operations.validate.marineLitter.error.number.required=
tutti.service.operations.validate.marineLitter.warning.weight.required=
+tutti.service.protocol.export.benthos.error=
+tutti.service.protocol.export.caracteristics.all.error=
+tutti.service.protocol.export.caracteristics.protocol.error=
+tutti.service.protocol.export.species.error=
+tutti.service.protocol.import.benthos.error=
+tutti.service.protocol.import.species.error=
+tutti.service.pupitri.export.species.error=
+tutti.service.pupitri.import.carrousel.error=
+tutti.service.pupitri.import.trunk.error=
+tutti.service.referential.export.gear.error=
+tutti.service.referential.export.person.error=
+tutti.service.referential.export.species.error=
+tutti.service.referential.export.vessel.error=
+tutti.service.sumatra.export.error=
tutti.validator.error.accidental.species.required=
tutti.validator.error.benthosBatch.species.required=
tutti.validator.error.comment.too.long=
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-29 09:32:57 UTC (rev 878)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-04-29 09:54:29 UTC (rev 879)
@@ -48,8 +48,16 @@
tutti.service.catches.computeWeights.benthos.error.incoherentSampleWeight=Le poids de sous-échantillon est supérieur au poids du lot.
tutti.service.catches.computeWeights.error.incoherentRowWeightCategory=Le poids de sous-échantillon est renseigné alors que le lot n'a pas de poids.
tutti.service.catches.computeWeights.species.error.incoherentSampleWeight=Le poids de sous-échantillon est supérieur au poids du lot.
+tutti.service.compressZipFile.error=Erreur lors de la compression du dossier %1s dans le fichier %2s
+tutti.service.context.serviceInstanciation.error=Erreur lors de l'instanciation du service %s
+tutti.service.cvs.format.error=Erreur lors du formattage de la valeur %s
+tutti.service.export.catches.error=Erreur lors de l'export des captures
+tutti.service.export.context.error=Erreur lors de la création des fichiers pour l'export
tutti.service.export.invalid.cruise=L'export de la campagne %s ne peut pas être réalisé suite aux erreurs rencontrées sur ses traits lors de l'élévation des poids \:\n%s
tutti.service.export.invalid.fishingOperation=L'élévation des poids ne peut pas être réalisé sur le trait %s, pour la raison suivante %s
+tutti.service.export.operations.error=Erreur lors de l'export des traits
+tutti.service.export.parameters.error=Erreur lors de l'export des paramètres
+tutti.service.export.survey.error=Erreur lors de l'export de la campagne
tutti.service.exportCruise.buildZip=Création de l'archive de l'export (fichier %s)
tutti.service.exportCruise.checkCruise=Vérification de la campagne %s
tutti.service.exportCruise.exportCatches=Export du fichier <strong>catch.csv</strong> pour la campagne %s
@@ -80,6 +88,20 @@
tutti.service.operations.computeWeights.error.species.incoherentTotalSorted=Le poids total Vrac des espèces est inférieur à la somme des poids Vrac triés, inerte trié et vivant non détaillé trié
tutti.service.operations.computeWeights.error.species.noWeight=Un lot des espèces n'a pas de poids
tutti.service.operations.exportCatchesReport.error=Erreur lors de la génération du rapport des captures
+tutti.service.protocol.export.benthos.error=Erreur lors de l'export du benthos dans le fichier %s
+tutti.service.protocol.export.caracteristics.all.error=Erreur lors de l'export des caractéristiques dans le fichier %s
+tutti.service.protocol.export.caracteristics.protocol.error=Erreur lors de l'export des caractéristiques du protocole dans le fichier %s
+tutti.service.protocol.export.species.error=Erreur lors de l'export des espèces dans le fichier %s
+tutti.service.protocol.import.benthos.error=Erreur lors de l'import du benthos du protocole %1s du fichier %2s
+tutti.service.protocol.import.species.error=Erreur lors de l'import des espèces du protocole %1s du fichier %2s
+tutti.service.pupitri.export.species.error=Erreur lors de l'export des espèces pour Pupitri dans le fichier %s
+tutti.service.pupitri.import.carrousel.error=Erreur lors de l'import du fichier de carrousel %2s pour le trait %1s
+tutti.service.pupitri.import.trunk.error=Erreur lors de l'import du fichier de trèmis %2s pour le trait %1s
+tutti.service.referential.export.gear.error=Erreur lors de l'export des engins dans le fichier %s
+tutti.service.referential.export.person.error=Erreur lors de l'export des personnes dans le fichier %s
+tutti.service.referential.export.species.error=Erreur lors de l'export des espèces dans le fichier %s
+tutti.service.referential.export.vessel.error=Erreur lors de l'export des navires dans le fichier %s
+tutti.service.sumatra.export.error=Erreur lors de l'export Sumatra dans le fichier %s
tutti.validator.error.accidental.species.required=L'espèce est obligatoire
tutti.validator.error.benthosBatch.species.required=L'espèce est obligatoire
tutti.validator.error.comment.too.long=Taille de commentaire trop longue (limitée à %s caractères)
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-04-29 09:32:57 UTC (rev 878)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-04-29 09:54:29 UTC (rev 879)
@@ -48,6 +48,8 @@
import java.util.Locale;
import java.util.Set;
+import static org.nuiton.i18n.I18n._;
+
/**
* Tutti application config.
*
@@ -107,8 +109,7 @@
applicationConfig.parse(args);
} catch (ArgumentsParserException e) {
- throw new TuttiTechnicalException(
- "Could not parse configuration", e);
+ throw new TuttiTechnicalException(_("tutti.config.parse.error"), e);
}
//TODO Review this, this is very dirty to do this...
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-29 09:32:57 UTC (rev 878)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-04-29 09:54:29 UTC (rev 879)
@@ -99,6 +99,7 @@
tutti.config.option.ui.showNumberEditorButton.description=
tutti.config.option.update.url.description=
tutti.config.option.weights.rate.difference.totalAndSorted.description=
+tutti.config.parse.error=
tutti.config.sampleOrder.title=
tutti.config.title=
tutti.createAccidentalBatch.action.cancel=
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-29 09:32:57 UTC (rev 878)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-04-29 09:54:29 UTC (rev 879)
@@ -95,6 +95,7 @@
tutti.config.option.ui.showNumberEditorButton.description=Afficher le pavé numérique de saisie
tutti.config.option.update.url.description=URL de mise à jour
tutti.config.option.weights.rate.difference.totalAndSorted.description=Pourcentage de différence entre les Poids totaux VRAC triés et les poids totaux VRAC en dessous duquel on demande confirmation sur la saisie.
+tutti.config.parse.error=
tutti.config.sampleOrder.title=Catégorie d'échantillonnage
tutti.config.title=Configuration
tutti.createAccidentalBatch.action.cancel=Annuler
1
0
r878 - in trunk/tutti-persistence/src/main: java/fr/ifremer/tutti/persistence/entities/protocol resources/i18n
by kmorin@users.forge.codelutin.com 29 Apr '13
by kmorin@users.forge.codelutin.com 29 Apr '13
29 Apr '13
Author: kmorin
Date: 2013-04-29 11:32:57 +0200 (Mon, 29 Apr 2013)
New Revision: 878
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/878
Log:
refs #2000 [TECH] Mettre en place les messages d'erreur m?\195?\169tier
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java
trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties
trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java 2013-04-28 21:08:36 UTC (rev 877)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java 2013-04-29 09:32:57 UTC (rev 878)
@@ -42,6 +42,8 @@
import java.io.Reader;
import java.util.List;
+import static org.nuiton.i18n.I18n._;
+
/**
* Helper classaround {@link TuttiProtocol}.
*
@@ -62,7 +64,7 @@
writer.close();
fileWriter.close();
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not transform protocol " + id + " to file " + file, e);
+ throw new TuttiTechnicalException(_("tutti.persistence.protocol.fromFile.error", id, file), e);//"Could not transform protocol " + to file
} finally {
IOUtils.closeQuietly(fileWriter);
}
@@ -79,7 +81,7 @@
fileReader.close();
return result;
} catch (Exception e) {
- throw new TuttiTechnicalException("Could not import protocol from file " + file, e);
+ throw new TuttiTechnicalException(_("tutti.persistence.protocol.fromFile.error", file), e);
} finally {
IOUtils.closeQuietly(fileReader);
}
Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties
===================================================================
--- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2013-04-28 21:08:36 UTC (rev 877)
+++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2013-04-29 09:32:57 UTC (rev 878)
@@ -27,6 +27,7 @@
tutti.persistence.batch.validation.vracSpeciesInertNotFound=
tutti.persistence.batch.validation.vracSpeciesLifeNotFound=
tutti.persistence.batch.validation.vracSpeciesNotFound=
+tutti.persistence.protocol.fromFile.error=
tutti.sampleCategoryType.age=
tutti.sampleCategoryType.maturity=
tutti.sampleCategoryType.sex=
Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties
===================================================================
--- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-04-28 21:08:36 UTC (rev 877)
+++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-04-29 09:32:57 UTC (rev 878)
@@ -27,6 +27,7 @@
tutti.persistence.batch.validation.vracSpeciesInertNotFound=Lot 'Vrac > Espèces > Inerte' non trouvé, ou configuré avec d'autres critères de classement.
tutti.persistence.batch.validation.vracSpeciesLifeNotFound=Lot 'Vrac > Espèces > Vivant' non trouvé, ou configuré avec d'autres critères de classement.
tutti.persistence.batch.validation.vracSpeciesNotFound=Lot 'Vrac > Espèces' non trouvé, ou configuré avec d'autres critères de classement.
+tutti.persistence.protocol.fromFile.error=Erreur lors de l'import du protocol du fichier %s
tutti.sampleCategoryType.age=Age
tutti.sampleCategoryType.maturity=Maturité
tutti.sampleCategoryType.sex=Sexe
1
0
Author: tchemit
Date: 2013-04-28 23:08:36 +0200 (Sun, 28 Apr 2013)
New Revision: 877
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/877
Log:
updates mavenpom to 3.4.10
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2013-04-26 17:21:26 UTC (rev 876)
+++ trunk/pom.xml 2013-04-28 21:08:36 UTC (rev 877)
@@ -28,7 +28,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>3.4.9</version>
+ <version>3.4.10</version>
</parent>
<groupId>fr.ifremer</groupId>
1
0
26 Apr '13
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(a)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(a)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(a)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
1
0
25 Apr '13
Author: kmorin
Date: 2013-04-25 19:22:52 +0200 (Thu, 25 Apr 2013)
New Revision: 875
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/875
Log:
refs #2079 [CONTROLE] - Contr?\195?\180le / Validation apr?\195?\168s la saisie
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java
trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-edit-warning-validation.xml
trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-error-validation.xml
trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-warning-validation.xml
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/cruise/ValidateCruiseUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java
trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml
trunk/tutti-ui-swing/src/main/resources/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/TuttiDataContext.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2013-04-25 09:22:03 UTC (rev 874)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2013-04-25 17:22:52 UTC (rev 875)
@@ -44,11 +44,13 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdesktop.beans.AbstractBean;
+import org.nuiton.util.DateUtil;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.Closeable;
import java.util.Collections;
+import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -765,6 +767,19 @@
return existingFishingOperations;
}
+ public boolean isDateInCruise(Date date) {
+ return DateUtil.between(date, getCruise().getBeginDate(), getCruise().getEndDate());
+ }
+
+ public boolean isValidDuration(Date gearShootingStartDate, Date gearShootingEndDate) {
+ boolean result = gearShootingStartDate == null || gearShootingEndDate == null;
+ if (!result) {
+ int minutes = DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate);
+ result |= minutes <= 45 && minutes >= 20;
+ }
+ return result;
+ }
+
public void reset() {
existingPrograms = null;
existingProtocols = null;
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 09:22:03 UTC (rev 874)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java 2013-04-25 17:22:52 UTC (rev 875)
@@ -79,6 +79,7 @@
TuttiDataContext dataContext = context.getDataContext();
List<FishingOperation> operations = persistenceService.getAllFishingOperation(dataContext.getCruiseId());
for (FishingOperation operation : operations) {
+ operation = persistenceService.getFishingOperation(operation.getId());
NuitonValidatorResult validator = validationService.validateFishingOperation(operation, ValidationService.VALIDATION_CONTEXT_VALIDATE);
checkOperation(operation, validator);
@@ -89,6 +90,16 @@
}
/**
+ * Validates the operation of the currently selected cruise whose id is the given id.
+ * @return the validation results
+ */
+ public NuitonValidatorResult validateCruiseOperation(FishingOperation operation) {
+ NuitonValidatorResult validator = validationService.validateFishingOperation(operation, ValidationService.VALIDATION_CONTEXT_VALIDATE);
+ checkOperation(operation, validator);
+ return validator;
+ }
+
+ /**
* Adds additional messages to the validation results
* @param fishingOperation the operation to validate
* @param validator the validatpr containing the messages.
Modified: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-edit-warning-validation.xml
===================================================================
--- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-edit-warning-validation.xml 2013-04-25 09:22:03 UTC (rev 874)
+++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-edit-warning-validation.xml 2013-04-25 17:22:52 UTC (rev 875)
@@ -67,8 +67,8 @@
<field-validator type="fieldexpression" short-circuit="true">
<param name="expression">
- <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null
- || isValidDuration()
+ <![CDATA[
+ isValidDuration(gearShootingStartDate, gearShootingEndDate)
]]>
</param>
<message>tutti.validator.error.fishingOperation.dates.wrongTime</message>
@@ -91,8 +91,8 @@
<field-validator type="fieldexpression" short-circuit="true">
<param name="expression">
- <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null
- || isValidDuration()
+ <![CDATA[
+ isValidDuration(gearShootingStartDate, gearShootingEndDate)
]]>
</param>
<message>tutti.validator.error.fishingOperation.dates.wrongTime</message>
Modified: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-error-validation.xml
===================================================================
--- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-error-validation.xml 2013-04-25 09:22:03 UTC (rev 874)
+++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-error-validation.xml 2013-04-25 17:22:52 UTC (rev 875)
@@ -99,13 +99,7 @@
<field name="gearShootingStartLatitude">
- <field-validator type="fieldexpression" short-circuit="true">
- <param name="expression">
- <![CDATA[
- !"DD".equals(coordinateEditorType.toString()) || gearShootingStartLatitude != null
- ]]>
- </param>
-
+ <field-validator type="required" short-circuit="true">
<message>tutti.validator.error.latitude.start.required</message>
</field-validator>
@@ -113,13 +107,9 @@
<param name="doubleParams">min:90.0|max:90.0</param>
<param name="expression">
<![CDATA[
- !"DD".equals(coordinateEditorType.toString()) ||
- ( gearShootingStartLatitude != null
- && -doubles.min <= gearShootingStartLatitude
- && gearShootingStartLatitude <= doubles.max )
+ -doubles.min <= gearShootingStartLatitude && gearShootingStartLatitude <= doubles.max
]]>
</param>
-
<message>tutti.validator.warning.latitude.outOfBounds</message>
</field-validator>
@@ -130,13 +120,7 @@
<field name="gearShootingStartLongitude">
- <field-validator type="fieldexpression" short-circuit="true">
- <param name="expression">
- <![CDATA[
- !"DD".equals(coordinateEditorType.toString()) || gearShootingStartLongitude != null
- ]]>
- </param>
-
+ <field-validator type="required" short-circuit="true">
<message>tutti.validator.error.longitude.start.required</message>
</field-validator>
@@ -144,10 +128,7 @@
<param name="doubleParams">min:180.0|max:180.0</param>
<param name="expression">
<![CDATA[
- !"DD".equals(coordinateEditorType.toString()) ||
- ( gearShootingStartLongitude != null
- && -doubles.min <= gearShootingStartLongitude
- && gearShootingStartLongitude <= doubles.max )
+ -doubles.min <= gearShootingStartLongitude && gearShootingStartLongitude <= doubles.max
]]>
</param>
@@ -161,13 +142,7 @@
<field name="gearShootingEndLatitude">
- <field-validator type="fieldexpression" short-circuit="true">
- <param name="expression">
- <![CDATA[
- !"DD".equals(coordinateEditorType.toString()) || gearShootingEndLatitude != null
- ]]>
- </param>
-
+ <field-validator type="required" short-circuit="true">
<message>tutti.validator.error.latitude.end.required</message>
</field-validator>
@@ -175,10 +150,7 @@
<param name="doubleParams">min:90.0|max:90.0</param>
<param name="expression">
<![CDATA[
- !"DD".equals(coordinateEditorType.toString()) ||
- ( gearShootingEndLatitude != null
- && -doubles.min <= gearShootingEndLatitude
- && gearShootingEndLatitude <= doubles.max )
+ -doubles.min <= gearShootingEndLatitude && gearShootingEndLatitude <= doubles.max
]]>
</param>
@@ -192,13 +164,7 @@
<field name="gearShootingEndLongitude">
- <field-validator type="fieldexpression" short-circuit="true">
- <param name="expression">
- <![CDATA[
- !"DD".equals(coordinateEditorType.toString()) || gearShootingEndLongitude != null
- ]]>
- </param>
-
+ <field-validator type="required" short-circuit="true">
<message>tutti.validator.error.longitude.end.required</message>
</field-validator>
@@ -206,10 +172,7 @@
<param name="doubleParams">min:180.0|max:180.0</param>
<param name="expression">
<![CDATA[
- !"DD".equals(coordinateEditorType.toString()) ||
- ( gearShootingEndLongitude != null
- && -doubles.min <= gearShootingEndLongitude
- && gearShootingEndLongitude <= doubles.max )
+ -doubles.min <= gearShootingEndLongitude && gearShootingEndLongitude <= doubles.max
]]>
</param>
Modified: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-warning-validation.xml
===================================================================
--- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-warning-validation.xml 2013-04-25 09:22:03 UTC (rev 874)
+++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-warning-validation.xml 2013-04-25 17:22:52 UTC (rev 875)
@@ -33,9 +33,8 @@
<field-validator type="fieldexpression" short-circuit="true">
<param name="expression">
- <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null
- || org.nuiton.util.DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate) <= 45
- && org.nuiton.util.DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate) >= 20 )
+ <![CDATA[
+ isValidDuration(gearShootingStartDate, gearShootingEndDate)
]]>
</param>
<message>tutti.validator.error.fishingOperation.dates.wrongTime</message>
@@ -47,9 +46,8 @@
<field-validator type="fieldexpression" short-circuit="true">
<param name="expression">
- <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null
- || org.nuiton.util.DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate) <= 45
- && org.nuiton.util.DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate) >= 20 )
+ <![CDATA[
+ isValidDuration(gearShootingStartDate, gearShootingEndDate)
]]>
</param>
<message>tutti.validator.error.fishingOperation.dates.wrongTime</message>
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 09:22:03 UTC (rev 874)
+++ 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)
@@ -53,7 +53,7 @@
protected FishingOperation fishingOperation;
public EditCruiseFishingOperationAction(ValidateCruiseUIHandler handler) {
- super(handler, true);
+ super(handler, false);
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-04-25 09:22:03 UTC (rev 874)
+++ 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)
@@ -24,19 +24,31 @@
* #L%
*/
+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;
+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 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;
@@ -45,16 +57,19 @@
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTree;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeCellRenderer;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeModel;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.tree.*;
import java.awt.Component;
import java.awt.event.MouseAdapter;
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(a)codelutin.com>
@@ -64,29 +79,71 @@
private final static Log log = LogFactory.getLog(ValidateCruiseUIHandler.class);
- /** Persistence service. */
- private final PersistenceService persistenceService;
-
/** Validation service. */
- private final ValidationService validationService;
+ private final ValidateCruiseOperationsService validationService;
protected EditCruiseFishingOperationAction editFishingOperationAction;
- protected Map<FishingOperation, NuitonValidatorResult> validator;
+ 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);
- persistenceService = context.getPersistenceService();
- validationService = context.getValidationService();
+ validationService = context.getValidateCruiseOperationsService();
}
@Override
public void beforeInitUI() {
- validator = context.getValidateCruiseOperationsService().validateCruiseOperations();
ValidateCruiseUIModel model = new ValidateCruiseUIModel();
+
+ model.setValidator(validationService.validateCruiseOperations());
+
+ model.addPropertyChangeListener(ValidateCruiseUIModel.PROPERTY_SELECTED_FISHING_OPERATION,
+ new RemoveablePropertyChangeListener() {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ FishingOperation operation = (FishingOperation) evt.getNewValue();
+
+ ui.getOperationPanel().getFishingOperationTabContent().getModel().
+ removePropertyChangeListener(editFishingOperationModelListener);
+
+ editFishingOperationAction.setFishingOperation(null);
+ AbstractTuttiAction.runAction(editFishingOperationAction);
+
+ if (operation != null) {
+ editFishingOperationAction.setFishingOperation(operation);
+ TuttiActionHelper.runAction(editFishingOperationAction);
+ }
+ }
+ });
+
ui.setContextValue(model);
-
}
@Override
@@ -98,15 +155,11 @@
ui.getOperationPanel().getModel().setSelectedFishingOperation(null);
DefaultMutableTreeNode root = new DefaultMutableTreeNode();
+ Map<FishingOperation, NuitonValidatorResult> validator = getModel().getValidator();
+
for (FishingOperation operation : validator.keySet()) {
- operation = persistenceService.getFishingOperation(operation.getId());
NuitonValidatorResult result = validator.get(operation);
-
- Multimap<NuitonValidatorScope, String> messages = LinkedListMultimap.create();
- messages.putAll(NuitonValidatorScope.ERROR, result.getMessagesForScope(NuitonValidatorScope.ERROR));
- messages.putAll(NuitonValidatorScope.WARNING, result.getMessagesForScope(NuitonValidatorScope.WARNING));
-
- OperationTreeNode node = new OperationTreeNode(operation, messages);
+ OperationTreeNode node = new OperationTreeNode(operation, result);
root.add(node);
}
TreeModel model = new DefaultTreeModel(root);
@@ -117,23 +170,36 @@
navigation.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
- if (e.getClickCount() == 2) {
- Object[] paths = navigation.getSelectionPath().getPath();
- FishingOperation operation = null;
- for (Object o : paths) {
- if (o != null && OperationTreeNode.class.isAssignableFrom(o.getClass())) {
- operation = (FishingOperation) ((OperationTreeNode) o).getUserObject();
- break;
- }
- }
- editFishingOperationAction.setFishingOperation(operation);
- AbstractTuttiAction.runAction(editFishingOperationAction);
+ 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
@@ -159,6 +225,20 @@
return true;
}
+ protected void updateCurrentOperatonNode(NuitonValidatorResult validationResult) {
+ JTree navigation = ui.getNavigation();
+ TreePath selectionPath = navigation.getSelectionPath();
+ Preconditions.checkArgument(selectionPath.getPathCount() > 1);
+
+ OperationTreeNode operationNode = (OperationTreeNode) selectionPath.getPathComponent(1);
+ operationNode.removeAllChildren();
+ operationNode.createChildren(validationResult);
+
+ DefaultTreeModel treeModel = (DefaultTreeModel) navigation.getModel();
+ treeModel.reload(operationNode);
+ navigation.setSelectionPath(selectionPath);
+ }
+
protected class ValidationTreeCellRenderer extends DefaultTreeCellRenderer {
private static final long serialVersionUID = 1L;
@@ -170,11 +250,15 @@
if (value != null) {
if (value instanceof OperationTreeNode) {
OperationTreeNode node = (OperationTreeNode) value;
- label.setText(getDecorator(FishingOperation.class, null).toString(node.getUserObject()));
+ String text = getDecorator(FishingOperation.class, null).toString(node.getUserObject());
+ label.setText(text);
+ label.setToolTipText(text);
} else if (value instanceof MessageTreeNode) {
MessageTreeNode node = (MessageTreeNode) value;
- label.setText(_(String.valueOf(node.getUserObject())));
+ String text = _(String.valueOf(node.getUserObject()));
+ label.setText(text);
+ label.setToolTipText(text);
String iconName = node.getScope().toString().toLowerCase();
label.setIcon(SwingUtil.createImageIcon(iconName + ".png"));
}
@@ -188,20 +272,32 @@
private static final long serialVersionUID = 1L;
public OperationTreeNode(FishingOperation operation,
- Multimap<NuitonValidatorScope, String> messages) {
+ NuitonValidatorResult validationResult) {
super(operation);
- setAllowsChildren(messages != null);
- createChildren(messages);
+
+ setAllowsChildren(true);
+ createChildren(validationResult);
}
- public void createChildren(Multimap<NuitonValidatorScope, String> messages) {
- for (NuitonValidatorScope scope : messages.keySet()) {
- for (String message : messages.get(scope)) {
- MessageTreeNode child = new MessageTreeNode(scope, message);
- this.add(child);
- }
+ public void createChildren(NuitonValidatorResult validationResult) {
+ int messageNb = 0;
+ messageNb += addMessages(NuitonValidatorScope.ERROR,
+ validationResult.getMessagesForScope(NuitonValidatorScope.ERROR));
+ messageNb += addMessages(NuitonValidatorScope.WARNING,
+ validationResult.getMessagesForScope(NuitonValidatorScope.WARNING));
+
+ if (messageNb == 0) {
+ addMessages(NuitonValidatorScope.INFO, Lists.newArrayList(_("tutti.validator.info.operation.noError")));
}
}
+
+ protected int addMessages(NuitonValidatorScope scope, List<String> messages) {
+ for (String message : messages) {
+ MessageTreeNode child = new MessageTreeNode(scope, message);
+ this.add(child);
+ }
+ return messages.size();
+ }
}
protected class MessageTreeNode extends DefaultMutableTreeNode {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIModel.java 2013-04-25 09:22:03 UTC (rev 874)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIModel.java 2013-04-25 17:22:52 UTC (rev 875)
@@ -35,359 +35,53 @@
import fr.ifremer.tutti.persistence.entities.referential.Vessel;
import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel;
import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentModelAware;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jdesktop.beans.AbstractSerializableBean;
+import org.nuiton.validator.NuitonValidatorResult;
import java.util.Collection;
import java.util.Date;
import java.util.List;
+import java.util.Map;
/**
* @author kmorin <kmorin(a)codelutin.com>
* @since 1.4
*/
-public class ValidateCruiseUIModel extends AbstractTuttiBeanUIModel<FishingOperation, ValidateCruiseUIModel>
- implements AttachmentModelAware, FishingOperation {
+public class ValidateCruiseUIModel extends AbstractSerializableBean {
- protected ValidateCruiseUIModel() {
- super(FishingOperation.class, null, null);
- }
+ private static final long serialVersionUID = 1L;
- /**
- * Delegate edit object.
- *
- * @since 1.4
- */
- protected FishingOperation editObject = null;
+ /** Logger. */
+ private static final Log log =
+ LogFactory.getLog(ValidateCruiseUIModel.class);
- public FishingOperation getEditFishingOperation() {
- return editObject;
- }
+ public static final String PROPERTY_SELECTED_FISHING_OPERATION = "selectedFishingOperation";
- public void setEditFishingOperation(FishingOperation editObject) {
- this.editObject = editObject;
- }
+ public static final String PROPERTY_VALIDATOR = "validator";
- @Override
- protected FishingOperation newEntity() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
+ protected FishingOperation selectedFishingOperation;
- @Override
- public AttachementObjectTypeEnum getObjectType() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
+ protected Map<FishingOperation, NuitonValidatorResult> validator;
- @Override
- public Integer getObjectId() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public FishingOperation getSelectedFishingOperation() {
+ return selectedFishingOperation;
}
- @Override
- public List<Attachment> getAttachment() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public void setSelectedFishingOperation(FishingOperation selectedFishingOperation) {
+ Object oldValue = getSelectedFishingOperation();
+ this.selectedFishingOperation = selectedFishingOperation;
+ firePropertyChange(PROPERTY_SELECTED_FISHING_OPERATION, oldValue, selectedFishingOperation);
}
- @Override
- public void addAllAttachment(Collection<Attachment> attachments) {
- //To change body of implemented methods use File | Settings | File Templates.
+ public Map<FishingOperation, NuitonValidatorResult> getValidator() {
+ return validator;
}
- @Override
- public void addAttachment(Attachment attachment) {
- //To change body of implemented methods use File | Settings | File Templates.
+ public void setValidator(Map<FishingOperation, NuitonValidatorResult> validator) {
+ Object oldValue = getValidator();
+ this.validator = validator;
+ firePropertyChange(PROPERTY_VALIDATOR, oldValue, validator);
}
-
- @Override
- public void removeAllAttachment(Collection<Attachment> attachments) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void removeAttachment(Attachment attachment) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public String getStationNumber() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setStationNumber(String stationNumber) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public Integer getFishingOperationNumber() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setFishingOperationNumber(Integer fishingOperationNumber) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public Float getGearShootingStartLatitude() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setGearShootingStartLatitude(Float gearShootingStartLatitude) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public Float getGearShootingStartLongitude() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setGearShootingStartLongitude(Float gearShootingStartLongitude) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public Date getGearShootingStartDate() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setGearShootingStartDate(Date gearShootingStartDate) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public Float getGearShootingEndLatitude() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setGearShootingEndLatitude(Float gearShootingEndLatitude) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public Float getGearShootingEndLongitude() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setGearShootingEndLongitude(Float gearShootingEndLongitude) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public Date getGearShootingEndDate() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setGearShootingEndDate(Date gearShootingEndDate) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public boolean isFishingOperationRectiligne() {
- return false; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setFishingOperationRectiligne(boolean fishingOperationRectiligne) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public Float getTrawlDistance() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setTrawlDistance(Float trawlDistance) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public Boolean getFishingOperationValid() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setFishingOperationValid(Boolean fishingOperationValid) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public boolean isPlanktonObserved() {
- return false; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setPlanktonObserved(boolean planktonObserved) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public CaracteristicMap getVesselUseFeatures() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setVesselUseFeatures(CaracteristicMap vesselUseFeatures) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public CaracteristicMap getGearUseFeatures() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setGearUseFeatures(CaracteristicMap gearUseFeatures) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public boolean isAccidentalObserved() {
- return false; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setAccidentalObserved(boolean accidentalObserved) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public String getMultirigAggregation() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setMultirigAggregation(String multirigAggregation) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public String getComment() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setComment(String comment) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public Cruise getCruise() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setCruise(Cruise cruise) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public Person getRecorderPerson(int index) {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public boolean isRecorderPersonEmpty() {
- return false; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public int sizeRecorderPerson() {
- return 0; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void addRecorderPerson(Person recorderPerson) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void addAllRecorderPerson(Collection<Person> recorderPerson) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public boolean removeRecorderPerson(Person recorderPerson) {
- return false; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public boolean removeAllRecorderPerson(Collection<Person> recorderPerson) {
- return false; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public boolean containsRecorderPerson(Person recorderPerson) {
- return false; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public boolean containsAllRecorderPerson(Collection<Person> recorderPerson) {
- return false; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public List<Person> getRecorderPerson() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setRecorderPerson(List<Person> recorderPerson) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public Gear getGear() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setGear(Gear gear) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public Vessel getVessel() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setVessel(Vessel vessel) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public TuttiLocation getStrata() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setStrata(TuttiLocation strata) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public TuttiLocation getSubStrata() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setSubStrata(TuttiLocation subStrata) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public TuttiLocation getLocation() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public void setLocation(TuttiLocation location) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java 2013-04-25 09:22:03 UTC (rev 874)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java 2013-04-25 17:22:52 UTC (rev 875)
@@ -29,6 +29,7 @@
import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction;
+import fr.ifremer.tutti.ui.swing.content.MainUI;
import fr.ifremer.tutti.ui.swing.content.MainUIHandler;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml 2013-04-25 09:22:03 UTC (rev 874)
+++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml 2013-04-25 17:22:52 UTC (rev 875)
@@ -29,56 +29,6 @@
<validators>
- <field name="gearShootingStartDate">
-
- <field-validator type="fieldexpression" short-circuit="true">
- <param name="expression">
- <![CDATA[ gearShootingStartDate == null || isDateInCruise(gearShootingStartDate) ]]>
- </param>
- <message>
- tutti.validator.error.fishingOperation.dates.startOutOfCruiseDates
- </message>
- </field-validator>
-
- <field-validator type="fieldexpression" short-circuit="true">
- <param name="expression">
- <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null
- || isValidDuration()
- ]]>
- </param>
- <message>tutti.validator.error.fishingOperation.dates.wrongTime</message>
- </field-validator>
-
- </field>
-
- <field name="gearShootingEndDate">
-
- <field-validator type="required" short-circuit="true">
- <message>
- tutti.validator.error.fishingOperation.date.end.required
- </message>
- </field-validator>
-
- <field-validator type="fieldexpression" short-circuit="true">
- <param name="expression">
- <![CDATA[ gearShootingEndDate == null || isDateInCruise(gearShootingEndDate) ]]>
- </param>
- <message>
- tutti.validator.error.fishingOperation.dates.endOutOfCruiseDates
- </message>
- </field-validator>
-
- <field-validator type="fieldexpression" short-circuit="true">
- <param name="expression">
- <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null
- || isValidDuration()
- ]]>
- </param>
- <message>tutti.validator.error.fishingOperation.dates.wrongTime</message>
- </field-validator>
-
- </field>
-
<field name="gearShootingStartLatitudeDegree">
<field-validator type="fieldexpression" short-circuit="true">
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 09:22:03 UTC (rev 874)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-04-25 17:22:52 UTC (rev 875)
@@ -1147,6 +1147,7 @@
tutti.validator.error.splitSpeciesBatch.sampleWeight.invalidValue=
tutti.validator.error.splitSpeciesBatch.sampleWeight.sampleBatchGreaterThanBatchWeight=
tutti.validator.error.splitSpeciesBatch.selectedCategory.required=
+tutti.validator.info.operation.noError=
tutti.validator.warning.cruise.name.format=
tutti.validator.warning.latitude.degree.outOfBounds=
tutti.validator.warning.latitude.minute.outOfBounds=
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 09:22:03 UTC (rev 874)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-04-25 17:22:52 UTC (rev 875)
@@ -55,7 +55,7 @@
tutti.common.askSaveBeforeLeaving.title=Modifications non enregistrées
tutti.common.cancel=Annuler
tutti.common.cancel.mnemonic=A
-tutti.common.datefield.tip=Format attendu : %s
+tutti.common.datefield.tip=Format attendu \: %s
tutti.common.file.csv=Extension d'un fichier csv
tutti.common.file.pdf=Extension d'un fichier pdf
tutti.common.file.protocol=Extension d'un fichier de protocole Tutti
@@ -1133,6 +1133,7 @@
tutti.validator.error.splitSpeciesBatch.sampleWeight.invalidValue=La somme des poids ventilés doit être strictement positive
tutti.validator.error.splitSpeciesBatch.sampleWeight.sampleBatchGreaterThanBatchWeight=La somme des poids ventilés doit être inférieur ou égale à celle du poids du lot
tutti.validator.error.splitSpeciesBatch.selectedCategory.required=La catégorie est obligatoire
+tutti.validator.info.operation.noError=Trait sans erreur
tutti.validator.warning.cruise.name.format=Le format n'est pas celui ...
tutti.validator.warning.latitude.degree.outOfBounds=Le degré de la latitude doit être compris entre -90 et 90
tutti.validator.warning.latitude.minute.outOfBounds=La minute de la latitude doit être comprise entre 0 et 59
1
0
r874 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing/util resources/i18n
by kmorin@users.forge.codelutin.com 25 Apr '13
by kmorin@users.forge.codelutin.com 25 Apr '13
25 Apr '13
Author: kmorin
Date: 2013-04-25 11:22:03 +0200 (Thu, 25 Apr 2013)
New Revision: 874
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/874
Log:
fixes #2217 [ERGO] - M?\195?\169canisme de validation des champs saisissables
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.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-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-04-23 16:52:15 UTC (rev 873)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-04-25 09:22:03 UTC (rev 874)
@@ -599,6 +599,7 @@
}
String dateFormat = getConfig().getDateFormat();
picker.setFormats(dateFormat);
+ picker.setToolTipText(_("tutti.common.datefield.tip", dateFormat));
picker.getEditor().addFocusListener(new FocusAdapter() {
@Override
@@ -610,6 +611,7 @@
if (log.isDebugEnabled()) {
log.debug("format error", ex);
}
+ picker.requestFocus();
}
}
});
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-23 16:52:15 UTC (rev 873)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-04-25 09:22:03 UTC (rev 874)
@@ -55,6 +55,7 @@
tutti.common.askSaveBeforeLeaving.title=
tutti.common.cancel=
tutti.common.cancel.mnemonic=
+tutti.common.datefield.tip=
tutti.common.file.csv=
tutti.common.file.export=
tutti.common.file.pdf=
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-23 16:52:15 UTC (rev 873)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-04-25 09:22:03 UTC (rev 874)
@@ -55,6 +55,7 @@
tutti.common.askSaveBeforeLeaving.title=Modifications non enregistrées
tutti.common.cancel=Annuler
tutti.common.cancel.mnemonic=A
+tutti.common.datefield.tip=Format attendu : %s
tutti.common.file.csv=Extension d'un fichier csv
tutti.common.file.pdf=Extension d'un fichier pdf
tutti.common.file.protocol=Extension d'un fichier de protocole Tutti
1
0
23 Apr '13
Author: kmorin
Date: 2013-04-23 18:52:15 +0200 (Tue, 23 Apr 2013)
New Revision: 873
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/873
Log:
refs #2079 [CONTROLE] - Contr?\195?\180le / Validation apr?\195?\168s la saisie
Added:
trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/SpeciesBatch-error-validation.xml
Removed:
trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/SpeciesBatch-error-validation.xml
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/TuttiWeightComputingService.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java
trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/AccidentalBatch-error-validation.xml
trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/BenthosBatch-error-validation.xml
trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/IndividualObservationBatch-error-validation.xml
trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/MarineLitterBatch-error-validation.xml
trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/MarineLitterBatch-warning-validation.xml
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-service/src/test/java/fr/ifremer/tutti/service/BeanValidatorDetectorTest.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedCruiseCatchesAction.java
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/ValidateSelectedCruiseCatchesAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCatchesAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java 2013-04-23 16:52:15 UTC (rev 873)
@@ -28,14 +28,19 @@
import com.esotericsoftware.yamlbeans.YamlReader;
import com.esotericsoftware.yamlbeans.YamlWriter;
import com.google.common.base.Charsets;
+import com.google.common.collect.Lists;
import com.google.common.io.Files;
import fr.ifremer.tutti.TuttiTechnicalException;
import fr.ifremer.tutti.persistence.entities.TuttiBeanFactory;
+import fr.ifremer.tutti.persistence.entities.data.*;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.IOUtils;
import java.io.BufferedWriter;
import java.io.File;
import java.io.Reader;
+import java.util.List;
/**
* Helper classaround {@link TuttiProtocol}.
@@ -88,4 +93,111 @@
result.writeConfig.setWriteRootTags(false);
return result;
}
+
+ /**
+ * Is the species batch respecting the protocol recommendations?
+ * @param protocol the current protocol
+ * @param batch the batch to check (it should be a leaf)
+ * @param frequencies the frequencies of the batch
+ * @return true if the batch respects the protocol, false otherwise
+ */
+ public static boolean isSpeciesBatchValid(TuttiProtocol protocol,
+ SpeciesBatch batch,
+ List<SpeciesBatchFrequency> frequencies) {
+ boolean result = true;
+
+ if (protocol != null) {
+ Species species = batch.getSpecies();
+ List<SpeciesProtocol> speciesProtocols = protocol.getSpecies();
+ SpeciesProtocol speciesProtocol = getSpeciesProtocol(species, speciesProtocols);
+
+ if (speciesProtocol != null) {
+ List<SampleCategoryEnum> mandatoryCategories = getMandatoryCategories(speciesProtocol);
+
+ SpeciesBatch browsingBatch = batch;
+ while (browsingBatch.getParentBatch() != null) {
+ mandatoryCategories.remove(browsingBatch.getSampleCategoryType());
+ browsingBatch = browsingBatch.getParentBatch();
+ }
+ result = mandatoryCategories.isEmpty() &&
+ (!speciesProtocol.isCountIfNoFrequencyEnabled()
+ || CollectionUtils.isNotEmpty(frequencies)
+ || batch.getNumber() != null);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Is the benthos batch respecting the protocol recommendations?
+ * @param protocol the current protocol
+ * @param batch the batch to check (it should be a leaf)
+ * @param frequencies the frequencies of the batch
+ * @return true if the batch respects the protocol, false otherwise
+ */
+ public static boolean isBenthosBatchValid(TuttiProtocol protocol,
+ BenthosBatch batch,
+ List<BenthosBatchFrequency> frequencies) {
+ boolean result = true;
+
+ if (protocol != null) {
+ Species species = batch.getSpecies();
+ List<SpeciesProtocol> speciesProtocols = protocol.getBenthos();
+ SpeciesProtocol speciesProtocol = getSpeciesProtocol(species, speciesProtocols);
+
+ if (speciesProtocol != null) {
+ // get the categories which should be set
+ List<SampleCategoryEnum> mandatoryCategories = getMandatoryCategories(speciesProtocol);
+
+ BenthosBatch browsingBatch = batch;
+ while (browsingBatch.getParentBatch() != null) {
+ mandatoryCategories.remove(browsingBatch.getSampleCategoryType());
+ browsingBatch = browsingBatch.getParentBatch();
+ }
+ result = mandatoryCategories.isEmpty() &&
+ (!speciesProtocol.isCountIfNoFrequencyEnabled()
+ || CollectionUtils.isNotEmpty(frequencies)
+ || batch.getNumber() != null);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Retrieve the speciesprotocol corresponding to the species of the batch
+ * @param species
+ * @param speciesProtocols
+ * @return
+ */
+ protected static SpeciesProtocol getSpeciesProtocol(Species species, List<SpeciesProtocol> speciesProtocols) {
+ for (SpeciesProtocol speciesProtocol : speciesProtocols) {
+ if (species.getReferenceTaxonId().equals(
+ speciesProtocol.getSpeciesReferenceTaxonId())) {
+ return speciesProtocol;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Gets the mandatory categories accroding to the protocol
+ * @param speciesProtocol
+ * @return
+ */
+ protected static List<SampleCategoryEnum> getMandatoryCategories(SpeciesProtocol speciesProtocol) {
+ List<SampleCategoryEnum> mandatoryCategories = Lists.newArrayList();
+ if (speciesProtocol.isSizeEnabled()) {
+ mandatoryCategories.add(SampleCategoryEnum.size);
+ }
+ if (speciesProtocol.isSexEnabled()) {
+ mandatoryCategories.add(SampleCategoryEnum.sex);
+ }
+ if (speciesProtocol.isMaturityEnabled()) {
+ mandatoryCategories.add(SampleCategoryEnum.maturity);
+ }
+ if (speciesProtocol.isAgeEnabled()) {
+ mandatoryCategories.add(SampleCategoryEnum.age);
+ }
+ return mandatoryCategories;
+ }
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2013-04-23 16:52:15 UTC (rev 873)
@@ -24,8 +24,10 @@
* #L%
*/
+import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.data.Cruise;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/TuttiWeightComputingService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/TuttiWeightComputingService.java 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/TuttiWeightComputingService.java 2013-04-23 16:52:15 UTC (rev 873)
@@ -142,65 +142,6 @@
return result;
}
- /**
- * To check if can compute the weights of the given operation
- * <p/>
- * If no error found, then return is a empty list, otherwise the errors found
- *
- * @param fishingOperation the operation to check.
- * @return list of errors, or empty list if no error found.
- * @since 1.4
- */
- public List<String> checkOperation(FishingOperation fishingOperation) {
-
- if (log.isDebugEnabled()) {
- log.debug("Will check fishingOperation: " + fishingOperation);
- }
-
- List<String> result = Lists.newArrayList();
- String fishingOperationId = fishingOperation.getId();
- CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(fishingOperationId);
-
- BatchContainer<SpeciesBatch> rootSpeciesBatch;
- try {
- rootSpeciesBatch = getComputedSpeciesBatches(fishingOperation);
-
- } catch (TuttiBusinessException e) {
- result.add(e.getMessage());
- rootSpeciesBatch = persistenceService.getRootSpeciesBatch(fishingOperationId);
- }
-
- BatchContainer<BenthosBatch> rootBenthosBatch;
- try {
- rootBenthosBatch = getComputedBenthosBatches(fishingOperation);
-
- } catch (TuttiBusinessException e) {
- result.add(e.getMessage());
- rootBenthosBatch = persistenceService.getRootBenthosBatch(fishingOperationId);
- }
-
- BatchContainer<MarineLitterBatch> rootMarineLitterBatch;
- try {
- rootMarineLitterBatch = getComputedMarineLitterBatches(fishingOperation);
-
- } catch (TuttiBusinessException e) {
- result.add(e.getMessage());
- rootMarineLitterBatch = persistenceService.getRootMarineLitterBatch(fishingOperationId);
- }
-
- try {
- if (catchBatch != null) {
- computeCatchBatchWeights(catchBatch,
- rootSpeciesBatch,
- rootBenthosBatch,
- rootMarineLitterBatch);
- }
- } catch (TuttiBusinessException e) {
- result.add(e.getMessage());
- }
- return result;
- }
-
public void computeCatchBatchWeights(CatchBatch catchBatch,
BatchContainer<SpeciesBatch> rootSpeciesBatch,
BatchContainer<BenthosBatch> rootBenthosBatch,
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-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java 2013-04-23 16:52:15 UTC (rev 873)
@@ -24,25 +24,37 @@
* #L%
*/
+import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.TuttiBusinessException;
+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 org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.nuiton.validator.NuitonValidatorResult;
import org.nuiton.validator.NuitonValidatorScope;
import java.util.List;
import java.util.Map;
+import static org.nuiton.i18n.I18n._;
+
/**
+ * Service to validate the operations of a cruise
+ *
* @author kmorin <kmorin(a)codelutin.com>
* @since 1.4
*/
public class ValidateCruiseOperationsService extends AbstractTuttiService {
+ private static final Log log = LogFactory.getLog(ValidateCruiseOperationsService.class);
+
protected PersistenceService persistenceService;
protected ValidationService validationService;
@@ -57,6 +69,10 @@
tuttiWeightComputingService = getService(TuttiWeightComputingService.class);
}
+ /**
+ * Validates the operations of the currently selected cruise.
+ * @return a map containing the operations and the validation results
+ */
public Map<FishingOperation, NuitonValidatorResult> validateCruiseOperations() {
Map<FishingOperation, NuitonValidatorResult> result = Maps.newHashMap();
@@ -65,13 +81,134 @@
for (FishingOperation operation : operations) {
NuitonValidatorResult validator = validationService.validateFishingOperation(operation, ValidationService.VALIDATION_CONTEXT_VALIDATE);
- List<String> errors = tuttiWeightComputingService.checkOperation(operation);
- Map<String, List<String>> errorMap = Maps.newHashMap();
- errorMap.put("cacthes", errors);
- validator.addMessagesForScope(NuitonValidatorScope.ERROR, errorMap);
+ checkOperation(operation, validator);
result.put(operation, validator);
}
return result;
}
+
+ /**
+ * 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) {
+ 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 {
+ rootSpeciesBatch = tuttiWeightComputingService.getComputedSpeciesBatches(fishingOperation);
+
+ } catch (TuttiBusinessException e) {
+ errors.add(e.getMessage());
+ rootSpeciesBatch = persistenceService.getRootSpeciesBatch(fishingOperationId);
+ }
+
+ BatchContainer<BenthosBatch> rootBenthosBatch;
+ try {
+ rootBenthosBatch = tuttiWeightComputingService.getComputedBenthosBatches(fishingOperation);
+
+ } catch (TuttiBusinessException e) {
+ errors.add(e.getMessage());
+ rootBenthosBatch = persistenceService.getRootBenthosBatch(fishingOperationId);
+ }
+
+ BatchContainer<MarineLitterBatch> rootMarineLitterBatch;
+ try {
+ rootMarineLitterBatch = tuttiWeightComputingService.getComputedMarineLitterBatches(fishingOperation);
+
+ } catch (TuttiBusinessException e) {
+ errors.add(e.getMessage());
+ rootMarineLitterBatch = persistenceService.getRootMarineLitterBatch(fishingOperationId);
+ }
+
+ try {
+ if (catchBatch != null) {
+ tuttiWeightComputingService.computeCatchBatchWeights(catchBatch,
+ rootSpeciesBatch,
+ rootBenthosBatch,
+ rootMarineLitterBatch);
+ }
+ } catch (TuttiBusinessException e) {
+ errors.add(e.getMessage());
+ }
+
+ Map<String, List<String>> errorMap = Maps.newHashMap();
+ errorMap.put("catches", errors);
+ validator.addMessagesForScope(NuitonValidatorScope.ERROR, errorMap);
+
+ TuttiDataContext dataContext = context.getDataContext();
+ if (dataContext.isProtocolFilled()) {
+ TuttiProtocol protocol = dataContext.getProtocol();
+ Map<String, List<String>> warningMap = Maps.newHashMap();
+
+ for (SpeciesBatch batch : rootSpeciesBatch.getChildren()) {
+ if (isSpeciesBatchInvalid(batch, protocol)) {
+ warningMap.put("species", Lists.newArrayList(_("tutti.validator.warning.species.protocolNotRespected")));
+ break;
+ }
+ }
+
+ for (BenthosBatch batch : rootBenthosBatch.getChildren()) {
+ if (isBenthosBatchInvalid(batch, protocol)) {
+ warningMap.put("benthos", Lists.newArrayList(_("tutti.validator.warning.benthos.protocolNotRespected")));
+ break;
+ }
+ }
+
+ validator.addMessagesForScope(NuitonValidatorScope.WARNING, warningMap);
+ }
+ }
+
+ /**
+ * Is the species batch respecting the protocol recommendations?
+ * @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
+ */
+ protected boolean isSpeciesBatchInvalid(SpeciesBatch batch, TuttiProtocol protocol) {
+ if (batch.isChildBatchsEmpty()) {
+ List<SpeciesBatchFrequency> frequencies =
+ persistenceService.getAllSpeciesBatchFrequency(batch.getId());
+ return !TuttiProtocols.isSpeciesBatchValid(protocol, batch, frequencies);
+ }
+
+ for (SpeciesBatch child : batch.getChildBatchs()) {
+ boolean invalid = isSpeciesBatchInvalid(child, protocol);
+ if (invalid) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Is the benthos batch respecting the protocol recommendations?
+ * @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
+ */
+ protected boolean isBenthosBatchInvalid(BenthosBatch batch, TuttiProtocol protocol) {
+ if (batch.isChildBatchsEmpty()) {
+ List<BenthosBatchFrequency> frequencies =
+ persistenceService.getAllBenthosBatchFrequency(batch.getId());
+ return !TuttiProtocols.isBenthosBatchValid(protocol, batch, frequencies);
+ }
+
+ for (BenthosBatch child : batch.getChildBatchs()) {
+ boolean invalid = isBenthosBatchInvalid(child, protocol);
+ if (invalid) {
+ return true;
+ }
+ }
+ return false;
+ }
}
Modified: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/AccidentalBatch-error-validation.xml
===================================================================
--- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/AccidentalBatch-error-validation.xml 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/AccidentalBatch-error-validation.xml 2013-04-23 16:52:15 UTC (rev 873)
@@ -30,9 +30,7 @@
<field name="species">
<field-validator type="required" short-circuit="true">
- <message>
- tutti.service.operations.accidental.error.species.required
- </message>
+ <message>tutti.validator.error.accidental.species.required</message>
</field-validator>
</field>
Modified: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/BenthosBatch-error-validation.xml
===================================================================
--- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/BenthosBatch-error-validation.xml 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/BenthosBatch-error-validation.xml 2013-04-23 16:52:15 UTC (rev 873)
@@ -28,6 +28,12 @@
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
+ <field name="species">
+ <field-validator type="required" short-circuit="true">
+ <message>tutti.validator.error.benthosBatch.species.required</message>
+ </field-validator>
+ </field>
+
<field name="weight">
<field-validator type="fieldexpression" short-circuit="true">
<param name="expression">
Modified: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/IndividualObservationBatch-error-validation.xml
===================================================================
--- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/IndividualObservationBatch-error-validation.xml 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/IndividualObservationBatch-error-validation.xml 2013-04-23 16:52:15 UTC (rev 873)
@@ -31,7 +31,7 @@
<field name="species">
<field-validator type="required" short-circuit="true">
<message>
- tutti.service.operations.individualObservation.error.species.required
+ tutti.validator.error.individualObservation.species.required
</message>
</field-validator>
</field>
@@ -39,7 +39,7 @@
<field name="weight">
<field-validator type="required" short-circuit="true">
<message>
- tutti.service.operations.individualObservation.error.weight.required
+ tutti.validator.error.individualObservation.weight.required
</message>
</field-validator>
</field>
@@ -47,7 +47,7 @@
<field name="size">
<field-validator type="required" short-circuit="true">
<message>
- tutti.service.operations.individualObservation.error.size.required
+ tutti.validator.error.individualObservation.size.required
</message>
</field-validator>
</field>
@@ -55,7 +55,7 @@
<field name="lengthStepCaracteristic">
<field-validator type="required" short-circuit="true">
<message>
- tutti.service.operations.individualObservation.error.lengthStepCaracteristic.required
+ tutti.validator.error.individualObservation.lengthStepCaracteristic.required
</message>
</field-validator>
</field>
Modified: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/MarineLitterBatch-error-validation.xml
===================================================================
--- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/MarineLitterBatch-error-validation.xml 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/MarineLitterBatch-error-validation.xml 2013-04-23 16:52:15 UTC (rev 873)
@@ -31,19 +31,19 @@
<field name="marineLitterCategory">
<field-validator type="required" short-circuit="true">
- <message>tutti.service.operations.marineLitter.error.marineLitterCategory.required</message>
+ <message>tutti.validator.error.marineLitter.marineLitterCategory.required</message>
</field-validator>
</field>
<field name="marineLitterSizeCategory">
<field-validator type="required" short-circuit="true">
- <message>tutti.service.operations.marineLitter.error.marineLitterSizeCategory.required</message>
+ <message>tutti.validator.error.marineLitter.marineLitterSizeCategory.required</message>
</field-validator>
</field>
<field name="number">
<field-validator type="required" short-circuit="true">
- <message>tutti.service.operations.marineLitter.error.number.required</message>
+ <message>tutti.validator.error.marineLitter.number.required</message>
</field-validator>
</field>
Modified: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/MarineLitterBatch-warning-validation.xml
===================================================================
--- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/MarineLitterBatch-warning-validation.xml 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/MarineLitterBatch-warning-validation.xml 2013-04-23 16:52:15 UTC (rev 873)
@@ -31,7 +31,7 @@
<field name="weight">
<field-validator type="required" short-circuit="true">
- <message>tutti.service.operations.marineLitter.warning.weight.required</message>
+ <message>tutti.validator.warning.marineLitter.weight.required</message>
</field-validator>
</field>
Deleted: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/SpeciesBatch-error-validation.xml
===================================================================
--- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/SpeciesBatch-error-validation.xml 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/SpeciesBatch-error-validation.xml 2013-04-23 16:52:15 UTC (rev 873)
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- #%L
- Tutti :: Service
- $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%
- -->
-
-<!DOCTYPE validators PUBLIC
- "-//Apache Struts//XWork Validator 1.0.3//EN"
- "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
-<validators>
-
- <field name="weight">
- <field-validator type="fieldexpression" short-circuit="true">
- <param name="expression">
- <![CDATA[ !(sampleCategoryWeight == null && weight != null) ]]>
- </param>
- <message>tutti.service.operations.computeWeights.error.species.incoherentRowWeightCategory</message>
- </field-validator>
-
- <field-validator type="fieldexpression" short-circuit="true">
- <param name="expression">
- <![CDATA[ weight == null || sampleCategoryWeight == null || weight <= sampleCategoryWeight ]]>
- </param>
- <message>tutti.service.operations.computeWeights.error.species.incoherentSampleWeight</message>
- </field-validator>
- </field>
-
-</validators>
\ No newline at end of file
Added: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/SpeciesBatch-error-validation.xml
===================================================================
--- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/SpeciesBatch-error-validation.xml (rev 0)
+++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/SpeciesBatch-error-validation.xml 2013-04-23 16:52:15 UTC (rev 873)
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ #%L
+ Tutti :: Service
+ $Id: SpeciesBatch-error-validation.xml 862 2013-04-23 08:09:40Z kmorin $
+ $HeadURL: http://svn.forge.codelutin.com/svn/tutti/trunk/tutti-service/src/main/resou… $
+ %%
+ 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%
+ -->
+
+<!DOCTYPE validators PUBLIC
+ "-//Apache Struts//XWork Validator 1.0.3//EN"
+ "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
+<validators>
+
+ <field name="species">
+ <field-validator type="required" short-circuit="true">
+ <message>tutti.validator.error.speciesBatch.species.required</message>
+ </field-validator>
+ </field>
+
+ <field name="weight">
+ <field-validator type="fieldexpression" short-circuit="true">
+ <param name="expression">
+ <![CDATA[ !(sampleCategoryWeight == null && weight != null) ]]>
+ </param>
+ <message>tutti.service.operations.computeWeights.error.species.incoherentRowWeightCategory</message>
+ </field-validator>
+
+ <field-validator type="fieldexpression" short-circuit="true">
+ <param name="expression">
+ <![CDATA[ weight == null || sampleCategoryWeight == null || weight <= sampleCategoryWeight ]]>
+ </param>
+ <message>tutti.service.operations.computeWeights.error.species.incoherentSampleWeight</message>
+ </field-validator>
+ </field>
+
+</validators>
\ No newline at end of file
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-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-04-23 16:52:15 UTC (rev 873)
@@ -105,6 +105,8 @@
tutti.service.operations.validate.marineLitter.error.marineLitterSizeCategory.required=
tutti.service.operations.validate.marineLitter.error.number.required=
tutti.service.operations.validate.marineLitter.warning.weight.required=
+tutti.validator.error.accidental.species.required=
+tutti.validator.error.benthosBatch.species.required=
tutti.validator.error.comment.too.long=
tutti.validator.error.cruise.beginDate.required=
tutti.validator.error.cruise.dates.endBeforeStart=
@@ -137,10 +139,17 @@
tutti.validator.error.fishingOperation.trawlDistance.tooLong=
tutti.validator.error.fishingOperation.trawlNetNumber.required=
tutti.validator.error.fishingOperation.vessel.required=
+tutti.validator.error.individualObservation.lengthStepCaracteristic.required=
+tutti.validator.error.individualObservation.size.required=
+tutti.validator.error.individualObservation.species.required=
+tutti.validator.error.individualObservation.weight.required=
tutti.validator.error.latitude.end.required=
tutti.validator.error.latitude.start.required=
tutti.validator.error.longitude.end.required=
tutti.validator.error.longitude.start.required=
+tutti.validator.error.marineLitter.marineLitterCategory.required=
+tutti.validator.error.marineLitter.marineLitterSizeCategory.required=
+tutti.validator.error.marineLitter.number.required=
tutti.validator.error.program.description.required=
tutti.validator.error.program.description.too.long=
tutti.validator.error.program.existingKey=
@@ -148,5 +157,9 @@
tutti.validator.error.program.zone.required=
tutti.validator.error.protocol.name.alreadyUsed=
tutti.validator.error.protocol.name.required=
+tutti.validator.error.speciesBatch.species.required=
+tutti.validator.warning.benthos.protocolNotRespected=
tutti.validator.warning.latitude.outOfBounds=
tutti.validator.warning.longitude.outOfBounds=
+tutti.validator.warning.marineLitter.weight.required=
+tutti.validator.warning.species.protocolNotRespected=
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-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-04-23 16:52:15 UTC (rev 873)
@@ -62,7 +62,6 @@
tutti.service.exportSumatra.header.species=Espèce
tutti.service.exportSumatra.header.station=Station
tutti.service.exportSumatra.header.weight=Total
-tutti.service.operations.accidental.error.species.required=L'espèce est obligatoire
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.
@@ -81,14 +80,8 @@
tutti.service.operations.computeWeights.error.species.incoherentTotalSorted=Le poids total Vrac des espèces est inférieur à la somme des poids Vrac triés, inerte trié et vivant non détaillé trié
tutti.service.operations.computeWeights.error.species.noWeight=Un lot des espèces n'a pas de poids
tutti.service.operations.exportCatchesReport.error=Erreur lors de la génération du rapport des captures
-tutti.service.operations.individualObservation.error.lengthStepCaracteristic.required=La classe de taille est obligatoire
-tutti.service.operations.individualObservation.error.size.required=La taille est obligatoire
-tutti.service.operations.individualObservation.error.species.required=L'espèce est obligatoire
-tutti.service.operations.individualObservation.error.weight.required=Le poids est obligatoire
-tutti.service.operations.marineLitter.error.marineLitterCategory.required=La catégorie du lot de macro-déchet est obligatoire
-tutti.service.operations.marineLitter.error.marineLitterSizeCategory.required=La catégorie de taille du lot de macro-déchet est obligatoire
-tutti.service.operations.marineLitter.error.number.required=Le nombre du lot de macro-déchet est obligatoire
-tutti.service.operations.marineLitter.warning.weight.required=Un lot de macro-déchets n'a pas de poids
+tutti.validator.error.accidental.species.required=L'espèce est obligatoire
+tutti.validator.error.benthosBatch.species.required=L'espèce est obligatoire
tutti.validator.error.comment.too.long=Taille de commentaire trop longue (limitée à %s caractères)
tutti.validator.error.cruise.beginDate.required=La date de début est obligatoire
tutti.validator.error.cruise.dates.endBeforeStart=La date de fin doit être après la date de début
@@ -121,10 +114,17 @@
tutti.validator.error.fishingOperation.trawlDistance.tooLong=La distance du trait dépasse 3 milles marin (5556 m), merci de vérifier les coordonnées
tutti.validator.error.fishingOperation.trawlNetNumber.required=Le numéro de poche est obligatoire
tutti.validator.error.fishingOperation.vessel.required=Le navire est obligatoire
+tutti.validator.error.individualObservation.lengthStepCaracteristic.required=La classe de taille est obligatoire
+tutti.validator.error.individualObservation.size.required=La taille est obligatoire
+tutti.validator.error.individualObservation.species.required=L'espèce est obligatoire
+tutti.validator.error.individualObservation.weight.required=Le poids est obligatoire
tutti.validator.error.latitude.end.required=La latitude de fin de traîne est obligatoire
tutti.validator.error.latitude.start.required=La latitude de début de traîne est obligatoire
tutti.validator.error.longitude.end.required=La longitude de fin de traîne est obligatoire
tutti.validator.error.longitude.start.required=La longitude de début de traîne est obligatoire
+tutti.validator.error.marineLitter.marineLitterCategory.required=La catégorie du lot de macro-déchet est obligatoire
+tutti.validator.error.marineLitter.marineLitterSizeCategory.required=La catégorie de taille du lot de macro-déchet est obligatoire
+tutti.validator.error.marineLitter.number.required=Le nombre du lot de macro-déchet est obligatoire
tutti.validator.error.program.description.required=La description de la série est obligatoire
tutti.validator.error.program.description.too.long=Taille de la description trop longue (limitée à %s caractères)
tutti.validator.error.program.existingKey=Le couple nom/zone existe déjà
@@ -132,5 +132,9 @@
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.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
+tutti.validator.warning.marineLitter.weight.required=Un lot de macro-déchets n'a pas de poids
+tutti.validator.warning.species.protocolNotRespected=Un lot des espèces ne suit pas les recommandations du protocole
Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/BeanValidatorDetectorTest.java
===================================================================
--- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/BeanValidatorDetectorTest.java 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/BeanValidatorDetectorTest.java 2013-04-23 16:52:15 UTC (rev 873)
@@ -24,11 +24,7 @@
*/
package fr.ifremer.tutti.service;
-import fr.ifremer.tutti.persistence.entities.data.BenthosBatch;
-import fr.ifremer.tutti.persistence.entities.data.Cruise;
-import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
-import fr.ifremer.tutti.persistence.entities.data.Program;
-import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch;
+import fr.ifremer.tutti.persistence.entities.data.*;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -69,7 +65,10 @@
TuttiProtocol.class,
SpeciesBatch.class,
BenthosBatch.class,
- FishingOperation.class
+ FishingOperation.class,
+ MarineLitterBatch.class,
+ IndividualObservationBatch.class,
+ AccidentalBatch.class
};
}
@@ -84,7 +83,7 @@
SortedSet<NuitonValidator<?>> validators = detectValidators(ALL_TYPES);
assertFalse(validators.isEmpty());
- assertEquals(7, validators.size());
+ assertEquals(10, validators.size());
}
@Test
@@ -95,8 +94,11 @@
validators = detectValidators(Pattern.compile(contextName), ALL_TYPES);
assertValidatorSetWithSameContextName(validators, null,
+ AccidentalBatch.class,
BenthosBatch.class,
Cruise.class,
+ IndividualObservationBatch.class,
+ MarineLitterBatch.class,
Program.class,
SpeciesBatch.class,
TuttiProtocol.class
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-04-23 16:52:15 UTC (rev 873)
@@ -82,10 +82,6 @@
*/
public class TuttiUIContext extends AbstractBean implements Closeable, UIMessageNotifier, JAXXHelpUIHandler, PropagatePropertyChangeListener.PropagatePropertyChange {
- public static final String VALIDATION_CONTEXT_EDIT = "edit";
-
- public static final String VALIDATION_CONTEXT_VALIDATE = "validate";
-
/** Logger. */
private static final Log log = LogFactory.getLog(TuttiUIContext.class);
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedCruiseCatchesAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedCruiseCatchesAction.java 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSelectedCruiseCatchesAction.java 2013-04-23 16:52:15 UTC (rev 873)
@@ -25,6 +25,7 @@
*/
import com.google.common.base.Preconditions;
+import fr.ifremer.tutti.service.ValidationService;
import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import org.apache.commons.logging.Log;
@@ -52,7 +53,7 @@
if (log.isInfoEnabled()) {
log.info("Edit operations of cruise: " + getContext().getCruiseId());
}
- getContext().setValidationContext(TuttiUIContext.VALIDATION_CONTEXT_EDIT);
+ getContext().setValidationContext(ValidationService.VALIDATION_CONTEXT_EDIT);
super.doAction();
}
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-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-04-23 16:52:15 UTC (rev 873)
@@ -29,6 +29,7 @@
import fr.ifremer.tutti.persistence.entities.data.Program;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
import fr.ifremer.tutti.service.PersistenceService;
+import fr.ifremer.tutti.service.ValidationService;
import fr.ifremer.tutti.ui.swing.RunTutti;
import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
@@ -446,7 +447,7 @@
String validationContext = context.getValidationContext();
- if (TuttiUIContext.VALIDATION_CONTEXT_EDIT.equals(validationContext)) {
+ if (ValidationService.VALIDATION_CONTEXT_EDIT.equals(validationContext)) {
// edit operations
screenTitle = _("tutti.fishingOperations.title.edit.operations", getSelectedCruiseTitle());
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ValidateSelectedCruiseCatchesAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ValidateSelectedCruiseCatchesAction.java 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ValidateSelectedCruiseCatchesAction.java 2013-04-23 16:52:15 UTC (rev 873)
@@ -25,6 +25,8 @@
*/
import com.google.common.base.Preconditions;
+import com.sun.org.apache.xerces.internal.impl.dv.ValidationContext;
+import fr.ifremer.tutti.service.ValidationService;
import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import org.apache.commons.logging.Log;
@@ -49,7 +51,7 @@
@Override
protected void doAction() throws Exception {
Preconditions.checkState(getContext().isCruiseFilled());
- getContext().setValidationContext(TuttiUIContext.VALIDATION_CONTEXT_VALIDATE);
+ getContext().setValidationContext(ValidationService.VALIDATION_CONTEXT_VALIDATE);
// getContext().setScreen(null);
if (log.isInfoEnabled()) {
log.info("Validate operations of cruise: " + getContext().getCruiseId());
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCatchesAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCatchesAction.java 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/EditCatchesAction.java 2013-04-23 16:52:15 UTC (rev 873)
@@ -25,6 +25,7 @@
*/
import com.google.common.base.Preconditions;
+import fr.ifremer.tutti.service.ValidationService;
import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction;
@@ -54,7 +55,7 @@
if (log.isInfoEnabled()) {
log.info("Edit operations of cruise: " + getContext().getCruiseId());
}
- getContext().setValidationContext(TuttiUIContext.VALIDATION_CONTEXT_EDIT);
+ getContext().setValidationContext(ValidationService.VALIDATION_CONTEXT_EDIT);
super.doAction();
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java 2013-04-23 16:52:15 UTC (rev 873)
@@ -25,6 +25,7 @@
*/
import com.google.common.base.Preconditions;
+import fr.ifremer.tutti.service.ValidationService;
import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction;
@@ -52,7 +53,7 @@
protected void doAction() throws Exception {
Preconditions.checkState(getContext().isProgramFilled());
Preconditions.checkState(getContext().isCruiseFilled());
- getContext().setValidationContext(TuttiUIContext.VALIDATION_CONTEXT_VALIDATE);
+ getContext().setValidationContext(ValidationService.VALIDATION_CONTEXT_VALIDATE);
if (log.isInfoEnabled()) {
log.info("Validate operations of cruise: " + getContext().getCruiseId());
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-04-23 16:52:15 UTC (rev 873)
@@ -31,6 +31,7 @@
import fr.ifremer.tutti.persistence.entities.data.CatchBatch;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.service.PersistenceService;
+import fr.ifremer.tutti.service.ValidationService;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.content.operation.fishing.AbstractCaracteristicTabUIModel;
import fr.ifremer.tutti.ui.swing.content.operation.fishing.GearUseFeatureTabUIModel;
@@ -129,7 +130,7 @@
saveFishingOperation(toSave);
- if (TuttiUIContext.VALIDATION_CONTEXT_EDIT.equals(getContext().getValidationContext())) {
+ if (ValidationService.VALIDATION_CONTEXT_EDIT.equals(getContext().getValidationContext())) {
handler.getParentUi().getTabPane().setSelectedIndex(1);
handler.getParentUi().getCatchesTabContent().getTabPane().setSelectedIndex(1);
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java 2013-04-23 16:52:15 UTC (rev 873)
@@ -37,9 +37,11 @@
import fr.ifremer.tutti.persistence.entities.data.SampleCategoryEnum;
import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
+import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.DecoratorService;
+import fr.ifremer.tutti.service.ValidationService;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.content.operation.AbstractTuttiBatchTableUIHandler;
import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI;
@@ -56,6 +58,7 @@
import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.split.SplitBenthosBatchUI;
import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.split.SplitBenthosBatchUIModel;
import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel;
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
import fr.ifremer.tutti.ui.swing.util.TuttiUI;
import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
@@ -80,6 +83,7 @@
import org.jdesktop.swingx.decorator.Highlighter;
import org.jdesktop.swingx.table.DefaultTableColumnModelExt;
import org.nuiton.util.decorator.Decorator;
+import org.nuiton.validator.NuitonValidatorResult;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
@@ -134,6 +138,8 @@
private final EnumMap<TableViewMode, RowFilter<BenthosBatchTableModel, Integer>> tableFilters;
+ protected ValidationService validationService = getContext().getValidationService();
+
public BenthosBatchUIHandler(TuttiUI<?, ?> parentUi,
BenthosBatchUI ui) {
super(parentUi, ui,
@@ -277,31 +283,19 @@
@Override
protected boolean isRowValid(BenthosBatchRowModel row) {
+ BenthosBatch batch = convertRowToBean(row, true);
+ NuitonValidatorResult validator = validationService.validateBenthosBatch(batch);
+ boolean result = !validator.hasErrorMessagess();
- // a row is valid if species category is not empty and valid
- // then if any of none empty category is valid
- Species species = row.getSpecies();
- boolean result = species != null;
- if (result && row.isBatchLeaf()) {
- if (TuttiUIContext.VALIDATION_CONTEXT_VALIDATE.equals(getContext().getValidationContext())) {
- TuttiProtocol protocol = getDataContext().getProtocol();
- if (protocol != null) {
- List<SpeciesProtocol> speciesProtocols = protocol.getBenthos();
- for (SpeciesProtocol speciesProtocol : speciesProtocols) {
- if (species.getReferenceTaxonId().equals(
- speciesProtocol.getSpeciesReferenceTaxonId())) {
-
- result = (!speciesProtocol.isSizeEnabled() || row.getSizeCategoryValue() != null)
- && (!speciesProtocol.isSexEnabled() || row.getSexCategoryValue() != null)
- && (!speciesProtocol.isMaturityEnabled() || row.getMaturityCategoryValue() != null)
- && (!speciesProtocol.isAgeEnabled() || row.getAgeCategoryValue() != null)
- && (!speciesProtocol.isCountIfNoFrequencyEnabled()
- || CollectionUtils.isNotEmpty(row.getFrequency())
- || row.getNumber() != null);
- }
- }
- }
- }
+ if (result
+ && ValidationService.VALIDATION_CONTEXT_VALIDATE.equals(
+ getContext().getValidationContext())
+ && row.isBatchLeaf()) {
+ List<BenthosBatchFrequency> frequencies =
+ BenthosFrequencyRowModel.toBeans(row.getFrequency(), batch);
+ result = TuttiProtocols.isBenthosBatchValid(getDataContext().getProtocol(),
+ batch,
+ frequencies);
}
return result;
@@ -967,18 +961,12 @@
BenthosBatchRowModel row = tableModel.getEntry(rowIndex);
int selectedRowCount = getTable().getSelectedRowCount();
- if (row.isValid()) {
+ enableSplit = true;
+ enableRemove = true;
+ enableRemoveSub = true;
+ enableRename = true;
+ enableCreateMelag = true;
- // must have at least species filled in row
- // otherwise nothing can be done
-
- enableSplit = true;
- enableRemove = true;
- enableRemoveSub = true;
- enableRename = true;
- enableCreateMelag = true;
- }
-
if (enableSplit) {
// can split if selected batch is a leaf
@@ -1234,4 +1222,24 @@
return model.getSelectedSpecies();
}
+ protected BenthosBatch convertRowToBean(BenthosBatchRowModel row, boolean convertParent) {
+ SampleCategory<?> sampleCategory = row.getFinestCategory();
+ Preconditions.checkNotNull(sampleCategory);
+ Preconditions.checkNotNull(sampleCategory.getCategoryType());
+ Preconditions.checkNotNull(sampleCategory.getCategoryValue());
+
+ BenthosBatch catchBean = row.toBean();
+
+ // apply sample category
+ catchBean.setSampleCategoryType(sampleCategory.getCategoryType());
+ catchBean.setSampleCategoryValue(sampleCategory.getCategoryValue());
+ catchBean.setSampleCategoryWeight(sampleCategory.getCategoryWeight());
+
+ if (convertParent && row.getParentBatch() != null) {
+ BenthosBatch parent = convertRowToBean(row.getParentBatch(), true);
+ catchBean.setParentBatch(parent);
+ }
+
+ return catchBean;
+ }
}
\ No newline at end of file
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-04-23 16:23:05 UTC (rev 872)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-04-23 16:52:15 UTC (rev 873)
@@ -37,9 +37,11 @@
import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency;
import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
+import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.DecoratorService;
+import fr.ifremer.tutti.service.ValidationService;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.content.operation.AbstractTuttiBatchTableUIHandler;
import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI;
@@ -78,6 +80,7 @@
import org.jdesktop.swingx.decorator.Highlighter;
import org.jdesktop.swingx.table.DefaultTableColumnModelExt;
import org.nuiton.util.decorator.Decorator;
+import org.nuiton.validator.NuitonValidatorResult;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
@@ -132,6 +135,8 @@
private final EnumMap<TableViewMode, RowFilter<SpeciesBatchTableModel, Integer>> tableFilters;
+ protected ValidationService validationService = getContext().getValidationService();
+
public SpeciesBatchUIHandler(TuttiUI<?, ?> parentUi,
SpeciesBatchUI ui) {
super(parentUi, ui,
@@ -274,31 +279,20 @@
@Override
protected boolean isRowValid(SpeciesBatchRowModel row) {
+ SpeciesBatch batch = convertRowToBean(row, true);
+ NuitonValidatorResult validator = validationService.validateSpeciesBatch(batch);
+ boolean result = !validator.hasErrorMessagess();
- // a row is valid if species category is not empty and valid
- // then if any of none empty category is valid
- Species species = row.getSpecies();
- boolean result = species != null;
- if (result && row.isBatchLeaf()) {
- if (TuttiUIContext.VALIDATION_CONTEXT_VALIDATE.equals(getContext().getValidationContext())) {
- TuttiProtocol protocol = getDataContext().getProtocol();
- if (protocol != null) {
- List<SpeciesProtocol> speciesProtocols = protocol.getSpecies();
- for (SpeciesProtocol speciesProtocol : speciesProtocols) {
- if (species.getReferenceTaxonId().equals(
- speciesProtocol.getSpeciesReferenceTaxonId())) {
+ if (result
+ && ValidationService.VALIDATION_CONTEXT_VALIDATE.equals(
+ getContext().getValidationContext())
+ && row.isBatchLeaf()) {
- result = (!speciesProtocol.isSizeEnabled() || row.getSizeCategoryValue() != null)
- && (!speciesProtocol.isSexEnabled() || row.getSexCategoryValue() != null)
- && (!speciesProtocol.isMaturityEnabled() || row.getMaturityCategoryValue() != null)
- && (!speciesProtocol.isAgeEnabled() || row.getAgeCategoryValue() != null)
- && (!speciesProtocol.isCountIfNoFrequencyEnabled()
- || CollectionUtils.isNotEmpty(row.getFrequency())
- || row.getNumber() != null);
- }
- }
- }
- }
+ List<SpeciesBatchFrequency> frequencies =
+ SpeciesFrequencyRowModel.toBeans(row.getFrequency(), batch);
+ result = TuttiProtocols.isSpeciesBatchValid(getDataContext().getProtocol(),
+ batch,
+ frequencies);
}
return result;
@@ -962,18 +956,12 @@
SpeciesBatchRowModel row = tableModel.getEntry(rowIndex);
int selectedRowCount = getTable().getSelectedRowCount();
- if (row.getSpecies() != null) {
+ enableSplit = true;
+ enableRemove = true;
+ enableRemoveSub = true;
+ enableRename = true;
+ enableCreateMelag = true;
- // must have at least species filled in row
- // otherwise nothing can be done
-
- enableSplit = true;
- enableRemove = true;
- enableRemoveSub = true;
- enableRename = true;
- enableCreateMelag = true;
- }
-
if (enableSplit) {
// can split if selected batch is a leaf
@@ -1229,4 +1217,25 @@
return model.getSelectedSpecies();
}
+
+ protected SpeciesBatch convertRowToBean(SpeciesBatchRowModel row, boolean convertParent) {
+ SampleCategory<?> sampleCategory = row.getFinestCategory();
+ Preconditions.checkNotNull(sampleCategory);
+ Preconditions.checkNotNull(sampleCategory.getCategoryType());
+ Preconditions.checkNotNull(sampleCategory.getCategoryValue());
+
+ SpeciesBatch catchBean = row.toBean();
+
+ // apply sample category
+ catchBean.setSampleCategoryType(sampleCategory.getCategoryType());
+ catchBean.setSampleCategoryValue(sampleCategory.getCategoryValue());
+ catchBean.setSampleCategoryWeight(sampleCategory.getCategoryWeight());
+
+ if (convertParent && row.getParentBatch() != null) {
+ SpeciesBatch parent = convertRowToBean(row.getParentBatch(), true);
+ catchBean.setParentBatch(parent);
+ }
+
+ return catchBean;
+ }
}
1
0
r872 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing java/fr/ifremer/tutti/ui/swing/content java/fr/ifremer/tutti/ui/swing/util resources/i18n
by tchemit@users.forge.codelutin.com 23 Apr '13
by tchemit@users.forge.codelutin.com 23 Apr '13
23 Apr '13
Author: tchemit
Date: 2013-04-23 18:23:05 +0200 (Tue, 23 Apr 2013)
New Revision: 872
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/872
Log:
fixes #2351: [TECH] Message d'erreur quand d?\195?\169marrage sans r?\195?\169seau
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ShowAboutAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateApplicationAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateDbAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.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-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java 2013-04-23 15:36:33 UTC (rev 871)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java 2013-04-23 16:23:05 UTC (rev 872)
@@ -24,11 +24,13 @@
* #L%
*/
+import fr.ifremer.tutti.TuttiBusinessException;
import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig;
import fr.ifremer.tutti.ui.swing.content.MainUI;
import fr.ifremer.tutti.ui.swing.content.MainUIHandler;
import fr.ifremer.tutti.ui.swing.content.UpdateApplicationAction;
import fr.ifremer.tutti.ui.swing.util.TuttiExceptionHandler;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper;
import jaxx.runtime.SwingUtil;
import org.apache.commons.logging.Log;
@@ -39,6 +41,8 @@
import java.awt.Color;
import java.util.Arrays;
+import static org.nuiton.i18n.I18n.n_;
+
/**
* To start Tutti application.
*
@@ -96,12 +100,25 @@
log.info("Full launch mode, try to update.");
}
- // try to update jre - i18n - application - help and exit if so
- UpdateApplicationAction logicAction = TuttiActionHelper.createLogicAction(new MainUIHandler(context),
- UpdateApplicationAction.class);
- TuttiActionHelper.runActionAndWait(logicAction);
+ boolean canUpdate = true;
+ try {
+ TuttiUIUtil.tryToConnectToUpdateUrl(
+ config.getUpdateUrl(),
+ n_("tutti.error.update.could.not.reach.url")
+ );
+ } catch (TuttiBusinessException e) {
+ TuttiUIContext.getErrorHelper().showErrorDialog(e.getMessage());
+ canUpdate = false;
+ }
- reload = logicAction.isReload();
+ if (canUpdate) {
+ // try to update jre - i18n - application - help and exit if so
+ UpdateApplicationAction logicAction = TuttiActionHelper.createLogicAction(new MainUIHandler(context),
+ UpdateApplicationAction.class);
+ TuttiActionHelper.runActionAndWait(logicAction);
+
+ reload = logicAction.isReload();
+ }
}
if (!reload) {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ShowAboutAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ShowAboutAction.java 2013-04-23 15:36:33 UTC (rev 871)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ShowAboutAction.java 2013-04-23 16:23:05 UTC (rev 872)
@@ -27,8 +27,11 @@
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+import fr.ifremer.tutti.TuttiBusinessException;
import fr.ifremer.tutti.ui.swing.TuttiApplicationUpdaterCallBack;
+import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig;
+import fr.ifremer.tutti.ui.swing.util.TuttiErrorHelper;
import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper;
@@ -50,6 +53,7 @@
import java.util.Map;
import static org.nuiton.i18n.I18n._;
+import static org.nuiton.i18n.I18n.n_;
/**
* To show about panel.
@@ -68,7 +72,28 @@
super(handler, false);
}
+ protected boolean canUpdate;
+
@Override
+ protected boolean prepareAction() throws Exception {
+ TuttiUIContext context = getContext();
+ TuttiApplicationConfig config = context.getConfig();
+ String url = config.getUpdateUrl();
+
+ try {
+ TuttiUIUtil.tryToConnectToUpdateUrl(
+ url,
+ n_("tutti.error.about.could.not.reach.url"));
+ canUpdate = true;
+ } catch (TuttiBusinessException e) {
+ new TuttiErrorHelper(getContext()).showErrorDialog(e.getMessage());
+ canUpdate = false;
+ }
+
+ return super.prepareAction();
+ }
+
+ @Override
public void postSuccessAction() {
super.postSuccessAction();
@@ -146,12 +171,31 @@
about.getTabs().add(_("tutti.about.translate.title"), translatePane);
- //
- // update tab
- //
+ if (canUpdate) {
+ //
+ // update tab
+ //
+
+ addUpdateTab(config);
+
+ }
+ about.init();
+ }
+
+ protected void addUpdate(Map<String, ApplicationInfo> source,
+ Map<String, ApplicationInfo> target,
+ TuttiApplicationUpdaterCallBack.UpdateType... types) {
+ for (TuttiApplicationUpdaterCallBack.UpdateType type : types) {
+ String appName = type.name().toLowerCase();
+ ApplicationInfo info = source.get(appName);
+ target.put(appName, info);
+ }
+ }
+
+ protected void addUpdateTab(TuttiApplicationConfig config) {
+ File current = config.getTuttiBasedir();
String url = config.getUpdateUrl();
- File current = config.getTuttiBasedir();
ApplicationUpdater up = new ApplicationUpdater();
@@ -250,19 +294,6 @@
}
});
about.getTabs().add(_("tutti.about.update.title"), updatePane);
-
- about.init();
}
- protected void addUpdate(Map<String, ApplicationInfo> source,
- Map<String, ApplicationInfo> target,
- TuttiApplicationUpdaterCallBack.UpdateType... types) {
- for (TuttiApplicationUpdaterCallBack.UpdateType type : types) {
- String appName = type.name().toLowerCase();
- ApplicationInfo info = source.get(appName);
- target.put(appName, info);
- }
- }
-
-
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateApplicationAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateApplicationAction.java 2013-04-23 15:36:33 UTC (rev 871)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateApplicationAction.java 2013-04-23 16:23:05 UTC (rev 872)
@@ -24,11 +24,14 @@
* #L%
*/
+import fr.ifremer.tutti.TuttiBusinessException;
import fr.ifremer.tutti.persistence.ProgressionModel;
import fr.ifremer.tutti.ui.swing.RunTutti;
import fr.ifremer.tutti.ui.swing.TuttiApplicationUpdaterCallBack;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig;
+import fr.ifremer.tutti.ui.swing.util.TuttiErrorHelper;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper;
import org.apache.commons.logging.Log;
@@ -38,6 +41,7 @@
import java.io.File;
import static org.nuiton.i18n.I18n._;
+import static org.nuiton.i18n.I18n.n_;
/**
* To update jre / i18n or tutti using the {@link ApplicationUpdater} mecanism.
@@ -69,6 +73,25 @@
protected boolean reload;
@Override
+ protected boolean prepareAction() throws Exception {
+ TuttiUIContext context = getContext();
+ TuttiApplicationConfig config = context.getConfig();
+ String url = config.getUpdateUrl();
+
+ try {
+ TuttiUIUtil.tryToConnectToUpdateUrl(
+ url,
+ n_("tutti.error.update.could.not.reach.url")
+ );
+ } catch (TuttiBusinessException e) {
+ new TuttiErrorHelper(getContext()).showErrorDialog(e.getMessage());
+ return false;
+ }
+
+ return super.prepareAction();
+ }
+
+ @Override
protected void releaseAction() {
super.releaseAction();
types = ALL_APPLICATION_TYPES;
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateDbAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateDbAction.java 2013-04-23 15:36:33 UTC (rev 871)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateDbAction.java 2013-04-23 16:23:05 UTC (rev 872)
@@ -24,11 +24,14 @@
* #L%
*/
+import fr.ifremer.tutti.TuttiBusinessException;
import fr.ifremer.tutti.persistence.ProgressionModel;
import fr.ifremer.tutti.ui.swing.TuttiApplicationUpdaterCallBack;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig;
import fr.ifremer.tutti.ui.swing.content.db.OpenDbAction;
+import fr.ifremer.tutti.ui.swing.util.TuttiErrorHelper;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -37,6 +40,7 @@
import java.io.File;
import static org.nuiton.i18n.I18n._;
+import static org.nuiton.i18n.I18n.n_;
/**
* To update - install database.
@@ -56,6 +60,25 @@
}
@Override
+ protected boolean prepareAction() throws Exception {
+ TuttiUIContext context = getContext();
+ TuttiApplicationConfig config = context.getConfig();
+ String url = config.getUpdateUrl();
+
+ try {
+ TuttiUIUtil.tryToConnectToUpdateUrl(
+ url,
+ n_("tutti.error.update.could.not.reach.url")
+ );
+ } catch (TuttiBusinessException e) {
+ new TuttiErrorHelper(getContext()).showErrorDialog(e.getMessage());
+ return false;
+ }
+
+ return super.prepareAction();
+ }
+
+ @Override
protected void doAction() {
TuttiUIContext context = getContext();
TuttiApplicationConfig config = context.getConfig();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-04-23 15:36:33 UTC (rev 871)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-04-23 16:23:05 UTC (rev 872)
@@ -25,6 +25,7 @@
*/
import com.google.common.base.Preconditions;
+import fr.ifremer.tutti.TuttiBusinessException;
import fr.ifremer.tutti.TuttiTechnicalException;
import jaxx.runtime.FileChooserUtil;
import jaxx.runtime.JAXXBinding;
@@ -45,10 +46,11 @@
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeListenerProxy;
import java.io.File;
+import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
-import java.net.URLEncoder;
+import java.net.URLConnection;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
@@ -350,4 +352,17 @@
}
}
+ public static void tryToConnectToUpdateUrl(String url, String i18nKey) {
+ try {
+ URLConnection urlConnection = new URL(url).openConnection();
+ urlConnection.setConnectTimeout(5000);
+ urlConnection.connect();
+ } catch (IOException e) {
+ if (log.isErrorEnabled()) {
+ log.error("Could not connect to " + url, e);
+ }
+ // could not connect to
+ throw new TuttiBusinessException(_(i18nKey, url));
+ }
+ }
}
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-23 15:36:33 UTC (rev 871)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-04-23 16:23:05 UTC (rev 872)
@@ -811,9 +811,11 @@
tutti.editSpeciesFrequencies.table.header.number=
tutti.editSpeciesFrequencies.table.header.weight=
tutti.editSpeciesFrequencies.title=
+tutti.error.about.could.not.reach.url=
tutti.error.errorpane.htmlmessage=
tutti.error.ui.business.error=
tutti.error.ui.other.error=
+tutti.error.update.could.not.reach.url=
tutti.exportCruise.action.success=
tutti.exportCruiseForSumatra.action.chooseFile=
tutti.exportCruiseForSumatra.action.success=
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-23 15:36:33 UTC (rev 871)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-04-23 16:23:05 UTC (rev 872)
@@ -798,9 +798,11 @@
tutti.editSpeciesFrequencies.table.header.number=Nombre
tutti.editSpeciesFrequencies.table.header.weight=Poids observé (kg)
tutti.editSpeciesFrequencies.title=Mensuration
+tutti.error.about.could.not.reach.url=Récupération des versions de mises à jour impossible (l'url %s n'est pas joignable)
tutti.error.errorpane.htmlmessage=<html><body><b>Une erreur s'est produite</b>\:<br/>%s</body></html>
tutti.error.ui.business.error=Erreur
tutti.error.ui.other.error=Erreur
+tutti.error.update.could.not.reach.url=Mise à jour impossible (l'url %s n'est pas joignable)
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
1
0