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
r1331 - in trunk: . tutti-service tutti-service/src/license tutti-service/src/main/java/fr/ifremer/tutti/service tutti-service/src/main/java/fr/ifremer/tutti/service/config tutti-service/src/main/java/fr/ifremer/tutti/service/report tutti-service/src/main/resources/i18n tutti-ui-swing/src/main/filtered-resources
by tchemit@users.forge.codelutin.com 05 Nov '13
by tchemit@users.forge.codelutin.com 05 Nov '13
05 Nov '13
Author: tchemit
Date: 2013-11-05 14:46:48 +0100 (Tue, 05 Nov 2013)
New Revision: 1331
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1331
Log:
refs #3624: [Rapport] Int?\195?\169gration de rapports g?\195?\169n?\195?\169r?\195?\169s par Birt (config + model)
Added:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportService.java
Modified:
trunk/pom.xml
trunk/tutti-service/pom.xml
trunk/tutti-service/src/license/THIRD-PARTY.properties
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfigOption.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
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2013-11-05 13:43:05 UTC (rev 1330)
+++ trunk/pom.xml 2013-11-05 13:46:48 UTC (rev 1331)
@@ -138,6 +138,7 @@
<slf4jVersion>1.7.5</slf4jVersion>
<adagioVersion>3.4</adagioVersion>
+ <birtVersion>4.2.1a</birtVersion>
<!--<adagioVersion>3.4.1-SNAPSHOT</adagioVersion>-->
<bluecoveVersion>2.1.0</bluecoveVersion>
@@ -167,9 +168,7 @@
<jreVersion>1.7.45</jreVersion>
<!-- Last tutti db version -->
- <dbVersion>2013.06.04</dbVersion>
- <!-- for next release -->
- <!--<dbVersion>2013.08.22</dbVersion>-->
+ <dbVersion>2013.08.22</dbVersion>
</properties>
@@ -208,6 +207,12 @@
<!-- librairies utils -->
<dependency>
+ <groupId>org.milyn</groupId>
+ <artifactId>flute</artifactId>
+ <version>1.3</version>
+ </dependency>
+
+ <dependency>
<groupId>org.nuiton</groupId>
<artifactId>nuiton-profiling</artifactId>
<version>2.7</version>
@@ -361,6 +366,24 @@
<groupId>fr.ifremer.adagio</groupId>
<artifactId>adagio-core-allegro</artifactId>
<version>${adagioVersion}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.andromda.profiles.emf.uml2</groupId>
+ <artifactId>andromda-profile-common</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.andromda.cartridges</groupId>
+ <artifactId>andromda-spring-cartridge</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.andromda.cartridges</groupId>
+ <artifactId>andromda-hibernate-cartridge</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.andromda.cartridges</groupId>
+ <artifactId>andromda-java-cartridge</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<!-- Logging -->
@@ -411,6 +434,28 @@
</dependency>
<dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>${commonsIoVersion}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.eclipse.birt.runtime</groupId>
+ <artifactId>org.eclipse.birt.runtime</artifactId>
+ <version>${birtVersion}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>milyn</groupId>
+ <artifactId>flute</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.milyn</groupId>
+ <artifactId>flute</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>${jdbc.hsqldb.version}</version>
Modified: trunk/tutti-service/pom.xml
===================================================================
--- trunk/tutti-service/pom.xml 2013-11-05 13:43:05 UTC (rev 1330)
+++ trunk/tutti-service/pom.xml 2013-11-05 13:46:48 UTC (rev 1331)
@@ -157,6 +157,17 @@
<artifactId>freemarker</artifactId>
</dependency>
+ <!--dependency>
+ <groupId>org.eclipse.birt.runtime</groupId>
+ <artifactId>org.eclipse.birt.runtime</artifactId>
+ </dependency-->
+ <!-- fix a m-license-p bug ... -->
+ <!--dependency>
+ <groupId>org.milyn</groupId>
+ <artifactId>flute</artifactId>
+ <scope>runtime</scope>
+ </dependency-->
+
</dependencies>
<build>
Modified: trunk/tutti-service/src/license/THIRD-PARTY.properties
===================================================================
--- trunk/tutti-service/src/license/THIRD-PARTY.properties 2013-11-05 13:43:05 UTC (rev 1330)
+++ trunk/tutti-service/src/license/THIRD-PARTY.properties 2013-11-05 13:46:48 UTC (rev 1331)
@@ -21,6 +21,7 @@
# - MPL 1.1
# - New BSD License
# - Public Domain
+# - The AndroMDA Project
# - The Apache Software License, Version 2.0
# - The MIT License
# - license.txt
@@ -28,8 +29,9 @@
# Please fill the missing licenses for dependencies :
#
#
-#Mon May 27 20:20:05 CEST 2013
+#Thu Oct 31 15:46:39 CET 2013
antlr--antlr--2.7.6=BSD License
+commons-cli--commons-cli--1.0=The Apache Software License, Version 2.0
commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0
dom4j--dom4j--1.6.1=BSD License
javax.persistence--persistence-api--1.0.2=COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java 2013-11-05 13:43:05 UTC (rev 1330)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java 2013-11-05 13:46:48 UTC (rev 1331)
@@ -100,6 +100,12 @@
return result;
}
+ /** @return {@link TuttiServiceConfigOption#REPORT_DIRECTORY} value */
+ public File getReportDirectory() {
+ File result = applicationConfig.getOptionAsFile(TuttiServiceConfigOption.REPORT_DIRECTORY.getKey());
+ return result;
+ }
+
public File getTmpDirectory() {
File result = applicationConfig.getOptionAsFile(TuttiServiceConfigOption.TMP_DIRECTORY.getKey());
return result;
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfigOption.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfigOption.java 2013-11-05 13:43:05 UTC (rev 1330)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfigOption.java 2013-11-05 13:46:48 UTC (rev 1331)
@@ -63,6 +63,13 @@
File.class,
true,
true),
+ REPORT_DIRECTORY(
+ "tutti.report.directory",
+ n_("tutti.config.option.report.directory.description"),
+ "${tutti.data.basedir}/report",
+ File.class,
+ true,
+ true),
CSV_SEPARATOR(
"tutti.csv.separator",
n_("tutti.config.option.csv.separator.description"),
Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportModel.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportModel.java 2013-11-05 13:46:48 UTC (rev 1331)
@@ -0,0 +1,72 @@
+package fr.ifremer.tutti.service.report;
+
+/*
+ * #%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%
+ */
+
+import java.io.File;
+import java.io.Serializable;
+
+/**
+ * Model to execute a report (using birt).
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.9
+ */
+public class ReportModel implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /** Report to use. */
+ protected File report;
+
+ /** Input data file. */
+ protected File dataFile;
+
+ /** Where to generate the report. */
+ protected File outputFile;
+
+ public File getReport() {
+ return report;
+ }
+
+ public void setReport(File report) {
+ this.report = report;
+ }
+
+ public File getDataFile() {
+ return dataFile;
+ }
+
+ public void setDataFile(File dataFile) {
+ this.dataFile = dataFile;
+ }
+
+ public File getOutputFile() {
+ return outputFile;
+ }
+
+ public void setOutputFile(File outputFile) {
+ this.outputFile = outputFile;
+ }
+}
Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportModel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportService.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportService.java 2013-11-05 13:46:48 UTC (rev 1331)
@@ -0,0 +1,51 @@
+package fr.ifremer.tutti.service.report;
+
+/*
+ * #%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%
+ */
+
+import fr.ifremer.tutti.service.AbstractTuttiService;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * To generate some reports.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.9
+ */
+public class ReportService extends AbstractTuttiService {
+
+ private static final Log log =
+ LogFactory.getLog(ReportService.class);
+
+
+ public void generateReport(ReportModel model) {
+
+ // TODO
+ if (log.isInfoEnabled()) {
+ log.info("Will generate report using ");
+ }
+ }
+
+}
Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportService.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
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-11-05 13:43:05 UTC (rev 1330)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-11-05 13:46:48 UTC (rev 1331)
@@ -9,6 +9,7 @@
tutti.config.option.export.countryId.description=
tutti.config.option.inceptionYear.description=
tutti.config.option.organizationName.description=
+tutti.config.option.report.directory.description=
tutti.config.option.samplingCategoryOrderIds.description=
tutti.config.option.site.url.description=
tutti.config.option.tmp.directory.description=
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-11-05 13:43:05 UTC (rev 1330)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-11-05 13:46:48 UTC (rev 1331)
@@ -9,6 +9,7 @@
tutti.config.option.export.countryId.description=L'id du pays à utiliser pour les exports (il s'agit de la valeur LOCATION.ID).
tutti.config.option.inceptionYear.description=Année de démarrage du projet
tutti.config.option.organizationName.description=Nom de l'organisation dans la licence
+tutti.config.option.report.directory.description=
tutti.config.option.samplingCategoryOrderIds.description=Ordre des catégories d'échantillonnage
tutti.config.option.site.url.description=Url du site internet de l'application
tutti.config.option.tmp.directory.description=Répertoire temporaire utilisée par l'application (est nettoyé à chaque démarrage de l'application).
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-11-05 13:43:05 UTC (rev 1330)
+++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-11-05 13:46:48 UTC (rev 1331)
@@ -1,3 +1,26 @@
+###
+# #%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
#Tue Oct 08 15:36:15 CEST 2013
tutti.config.help=config.html
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-11-05 13:43:05 UTC (rev 1330)
+++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-11-05 13:46:48 UTC (rev 1331)
@@ -1,3 +1,26 @@
+###
+# #%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
#Tue Oct 08 15:36:15 CEST 2013
tutti.config.help=config.html
1
0
r1330 - trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service
by tchemit@users.forge.codelutin.com 05 Nov '13
by tchemit@users.forge.codelutin.com 05 Nov '13
05 Nov '13
Author: tchemit
Date: 2013-11-05 14:43:05 +0100 (Tue, 05 Nov 2013)
New Revision: 1330
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1330
Log:
fix test build
Modified:
trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceWriteTest.java
Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceWriteTest.java
===================================================================
--- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceWriteTest.java 2013-11-05 13:18:39 UTC (rev 1329)
+++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceWriteTest.java 2013-11-05 13:43:05 UTC (rev 1330)
@@ -262,7 +262,7 @@
cruise.setHeadOfSortRoom(Lists.<Person>newArrayList(referentialService.getAllPerson().get(0)));
// Save changes, then check
- Cruise savedCruise = service.saveCruise(cruise);
+ Cruise savedCruise = service.saveCruise(cruise, true, true);
assertNotNull(savedCruise);
Cruise reloadedCruise = service.getCruise(savedCruise.getId());
1
0
r1329 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation resources/i18n
by tchemit@users.forge.codelutin.com 05 Nov '13
by tchemit@users.forge.codelutin.com 05 Nov '13
05 Nov '13
Author: tchemit
Date: 2013-11-05 14:18:39 +0100 (Tue, 05 Nov 2013)
New Revision: 1329
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1329
Log:
fixes #3676: [DONNEES INDIVIDUELLES] pouvoir copier les mensurations depuis la page ESPECES
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java
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/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-11-05 09:51:46 UTC (rev 1328)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-11-05 13:18:39 UTC (rev 1329)
@@ -637,7 +637,6 @@
}
}
-
int nbRowsToCreate = rowsToCreate.size();
boolean create;
@@ -645,32 +644,13 @@
int maxIndividualObservationRowsToCreate =
getConfig().getMaxIndividualObservationRowsToCreate();
- StringBuilder sb = new StringBuilder("<table>");
-
- sb.append("<tr>");
- sb.append("<th>").append(_("tutti.createIndividualObservationBatch.field.individualObservationSpecies")).append("</th>");
- sb.append("<th>").append(_("tutti.createIndividualObservationBatch.field.individualObservationWeight")).append("</th>");
- sb.append("<th>").append(_("tutti.createIndividualObservationBatch.field.individualObservationSize")).append("</th>");
- sb.append("<th>").append(_("tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic")).append("</th>");
- sb.append("</tr>");
-
- for (IndividualObservationBatchRowModel rowModel : rowsToCreate) {
- sb.append("<tr>");
- sb.append("<td>").append(speciesStr).append("</td>");
- sb.append("<td>").append(rowModel.getWeight()).append("</td>");
- sb.append("<td>").append(rowModel.getSize()).append("</td>");
- sb.append("<td>").append(decorate(rowModel.getLengthStepCaracteristic(), DecoratorService.CARACTERISTIC_WITH_UNIT)).append("</td>");
- sb.append("</tr>");
- }
- sb.append("</table>");
-
if (maxIndividualObservationRowsToCreate < nbRowsToCreate) {
// ask confirmation
String htmlMessage = String.format(
CONFIRMATION_FORMAT,
- _("tutti.createIndividualObservationBatch.confirm.message", speciesStr, nbRowsToCreate, sb.toString()),
+ _("tutti.createIndividualObservationBatch.confirm.message", speciesStr, nbRowsToCreate),
_("tutti.createIndividualObservationBatch.confirm.help"));
int response = JOptionPane.showConfirmDialog(
getTopestUI(),
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-11-05 09:51:46 UTC (rev 1328)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-11-05 13:18:39 UTC (rev 1329)
@@ -245,7 +245,7 @@
tutti.createIndividualObservationBatch.confirm.alreadyUsedSpecies.message=Il existe déjà des données individuelles pour l'espèce <strong>%s</strong><br/>Êtes-vous sûr de vouloir récupérer les données depuis l'onglet <strong>Espèces</strong>?
tutti.createIndividualObservationBatch.confirm.alreadyUsedSpecies.title=Confirmer la création des données individuelles sur une espèce déjà utilisée
tutti.createIndividualObservationBatch.confirm.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour ne pas créer les données individuelles</li><li><strong>Ok</strong> pour confirmer la création des données individuellesd</li></ul>
-tutti.createIndividualObservationBatch.confirm.message=Vous avez demandé la création des données individuelles pour l'espèce %s depuis les captures saisies.<br/>%s données vont être créées \: %s
+tutti.createIndividualObservationBatch.confirm.message=Vous avez demandé la création des données individuelles pour l'espèce <strong>%s</strong> depuis les captures saisies.<br/><strong>%s données vont être créées</strong>.
tutti.createIndividualObservationBatch.confirm.title=Confirmer la création des données individuelles
tutti.createIndividualObservationBatch.field.createFromBatch=Créer les données depuis les captures
tutti.createIndividualObservationBatch.field.createFromBatch.tip=Utiliser les données saisies dans les captures pour créer les données individuelles
1
0
r1328 - in trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation: . create
by tchemit@users.forge.codelutin.com 05 Nov '13
by tchemit@users.forge.codelutin.com 05 Nov '13
05 Nov '13
Author: tchemit
Date: 2013-11-05 10:51:46 +0100 (Tue, 05 Nov 2013)
New Revision: 1328
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1328
Log:
fixes #3675: [DONNEES INDIVIDUELLES] pouvoir copier les mensurations depuis la page ESPECES
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-11-05 08:30:18 UTC (rev 1327)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-11-05 09:51:46 UTC (rev 1328)
@@ -607,11 +607,16 @@
// apply also weight found
weight = frequency.getWeight();
- if (weight != null) {
- // convert weight units
- weight = speciesWeightUnit.toEntity(weight);
- weight = weightUnit.fromEntity(weight);
+ if (weight == null) {
+
+ // try to get it from batch
+ weight = TuttiEntities.getValueOrComputedValue(
+ leaf.getWeight(),
+ leaf.getFinestCategory().getCategoryWeight());
}
+ // convert weight units
+ weight = speciesWeightUnit.toEntity(weight);
+ weight = weightUnit.fromEntity(weight);
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java 2013-11-05 08:30:18 UTC (rev 1327)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java 2013-11-05 09:51:46 UTC (rev 1328)
@@ -269,24 +269,33 @@
Species species = (Species) evt.getNewValue();
- if (species == null ||
- !source.isSpeciesFromBatch()) {
+ source.setValueIsAdjusting(true);
- // reset create from batch flag
- source.setCreateFromBatch(false);
- }
+ try {
+ if (species == null ||
+ !source.isSpeciesFromBatch()) {
- // compute editors enable property
- boolean enabled = species != null &&
- (!source.isCreateFromBatch() ||
- !source.isSpeciesFromBatch() ||
- source.isSpeciesFromBatchWithOneCount());
- if (log.isInfoEnabled()) {
- log.info("can edit? " + enabled + " (species changed: " + species + ")");
+ // reset create from batch flag
+ source.setCreateFromBatch(false);
+ }
+
+ // compute editors enable property
+ boolean enabled = species != null &&
+ (!source.isCreateFromBatch() ||
+ !source.isSpeciesFromBatch());
+// boolean enabled = species != null &&
+// (!source.isCreateFromBatch() ||
+// !source.isSpeciesFromBatch() ||
+// source.isSpeciesFromBatchWithOneCount());
+ if (log.isInfoEnabled()) {
+ log.info("can edit? " + enabled + " (species changed: " + species + ")");
+ }
+ for (JComponent editorComponent : editorComponents) {
+ editorComponent.setEnabled(enabled);
+ }
+ } finally {
+ source.setValueIsAdjusting(false);
}
- for (JComponent editorComponent : editorComponents) {
- editorComponent.setEnabled(enabled);
- }
}
});
@@ -296,14 +305,14 @@
public void propertyChange(PropertyChangeEvent evt) {
CreateIndividualObservationBatchUIModel source = (CreateIndividualObservationBatchUIModel) evt.getSource();
-
Boolean newValue = (Boolean) evt.getNewValue();
newValue = newValue != null && newValue;
// compute editors enable property
- boolean enabled = !newValue ||
- !source.isSpeciesFromBatch() ||
- source.isSpeciesFromBatchWithOneCount();
+ boolean enabled = !newValue || !source.isSpeciesFromBatch();
+// boolean enabled = !newValue ||
+// !source.isSpeciesFromBatch() ||
+// source.isSpeciesFromBatchWithOneCount();
if (log.isInfoEnabled()) {
log.info("can edit? " + enabled + " (createFromBatch changed: " + newValue + ")");
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java 2013-11-05 08:30:18 UTC (rev 1327)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java 2013-11-05 09:51:46 UTC (rev 1328)
@@ -52,8 +52,6 @@
public static final String PROPERTY_SPECIES_FROM_BATCH = "speciesFromBatch";
- public static final String PROPERTY_SPECIES_FROM_BATCH_WITH_ONE_COUNT = "speciesFromBatchWihtOneCount";
-
public static final String PROPERTY_CREATE_FROM_BATCH = "createFromBatch";
public static final String PROPERTY_CARACTERISTICS = "caracteristics";
@@ -80,6 +78,13 @@
protected boolean createFromBatch;
/**
+ * Flag to stop fires when flag is on.
+ *
+ * @since 2.8
+ */
+ protected boolean valueIsAdjusting;
+
+ /**
* Delegate edit object.
*
* @since 1.3
@@ -108,6 +113,14 @@
editObject.setCaracteristics(new CaracteristicMap());
}
+ public boolean isValueIsAdjusting() {
+ return valueIsAdjusting;
+ }
+
+ public void setValueIsAdjusting(boolean valueIsAdjusting) {
+ this.valueIsAdjusting = valueIsAdjusting;
+ }
+
public Species getSpecies() {
return editObject.getSpecies();
}
@@ -115,11 +128,9 @@
public void setSpecies(Species species) {
Object oldValue = getSpecies();
Object oldSpeciesFromBatch = isSpeciesFromBatch();
- Object oldSpeciesFromBatchWithOneCount = isSpeciesFromBatchWithOneCount();
editObject.setSpecies(species);
- firePropertyChange(IndividualObservationBatch.PROPERTY_SPECIES, oldValue, species);
- firePropertyChange(PROPERTY_SPECIES_FROM_BATCH, oldSpeciesFromBatch, isSpeciesFromBatch());
- firePropertyChange(PROPERTY_SPECIES_FROM_BATCH_WITH_ONE_COUNT, oldSpeciesFromBatchWithOneCount, isSpeciesFromBatchWithOneCount());
+ firePropertyChanged(IndividualObservationBatch.PROPERTY_SPECIES, oldValue, species);
+ firePropertyChanged(PROPERTY_SPECIES_FROM_BATCH, oldSpeciesFromBatch, isSpeciesFromBatch());
}
public Float getWeight() {
@@ -129,7 +140,7 @@
public void setWeight(Float weight) {
Object oldValue = getWeight();
editObject.setWeight(weight);
- firePropertyChange(IndividualObservationBatch.PROPERTY_WEIGHT, oldValue, weight);
+ firePropertyChanged(IndividualObservationBatch.PROPERTY_WEIGHT, oldValue, weight);
}
public Float getSize() {
@@ -139,7 +150,7 @@
public void setSize(Float size) {
Object oldValue = getSize();
editObject.setSize(size);
- firePropertyChange(IndividualObservationBatch.PROPERTY_SIZE, oldValue, size);
+ firePropertyChanged(IndividualObservationBatch.PROPERTY_SIZE, oldValue, size);
}
public Caracteristic getLengthStepCaracteristic() {
@@ -149,7 +160,7 @@
public void setLengthStepCaracteristic(Caracteristic lengthStepCaracteristic) {
Object oldValue = getLengthStepCaracteristic();
editObject.setLengthStepCaracteristic(lengthStepCaracteristic);
- firePropertyChange(IndividualObservationBatch.PROPERTY_LENGTH_STEP_CARACTERISTIC, oldValue, lengthStepCaracteristic);
+ firePropertyChanged(IndividualObservationBatch.PROPERTY_LENGTH_STEP_CARACTERISTIC, oldValue, lengthStepCaracteristic);
}
public CaracteristicMap getCaracteristics() {
@@ -159,7 +170,7 @@
public void setCaracteristics(CaracteristicMap caracteristics) {
editObject.setCaracteristics(caracteristics);
- firePropertyChange(IndividualObservationBatch.PROPERTY_CARACTERISTICS, null, caracteristics);
+ firePropertyChanged(IndividualObservationBatch.PROPERTY_CARACTERISTICS, null, caracteristics);
}
@@ -169,7 +180,7 @@
public void setAvailableSpecies(List<Species> availableSpecies) {
this.availableSpecies = availableSpecies;
- firePropertyChange(PROPERTY_AVAILABLE_SPECIES, null, availableSpecies);
+ firePropertyChanged(PROPERTY_AVAILABLE_SPECIES, null, availableSpecies);
}
public Map<Species, Integer> getBatchSpecies() {
@@ -182,19 +193,14 @@
batchSpecies.containsKey(getSpecies());
}
- public boolean isSpeciesFromBatchWithOneCount() {
- return isSpeciesFromBatch() && batchSpecies.get(getSpecies()) == 1;
- }
-
public boolean isSpeciesFromBatchWithCount() {
- return isSpeciesFromBatch() && batchSpecies.get(getSpecies()) >0;
+ return isSpeciesFromBatch() && batchSpecies.get(getSpecies()) > 0;
}
public void setBatchSpecies(Map<Species, Integer> batchSpecies) {
this.batchSpecies = batchSpecies;
- firePropertyChange(PROPERTY_BATCH_SPECIES, null, batchSpecies);
- firePropertyChange(PROPERTY_SPECIES_FROM_BATCH, null, isSpeciesFromBatch());
- firePropertyChange(PROPERTY_SPECIES_FROM_BATCH_WITH_ONE_COUNT, null, isSpeciesFromBatchWithOneCount());
+ firePropertyChanged(PROPERTY_BATCH_SPECIES, null, batchSpecies);
+ firePropertyChanged(PROPERTY_SPECIES_FROM_BATCH, null, isSpeciesFromBatch());
setCreateFromBatch(isCreateFromBatch());
}
@@ -205,7 +211,7 @@
public void setCreateFromBatch(boolean createFromBatch) {
Object oldValue = isCreateFromBatch();
this.createFromBatch = createFromBatch;
- firePropertyChange(PROPERTY_CREATE_FROM_BATCH, oldValue, createFromBatch);
+ firePropertyChanged(PROPERTY_CREATE_FROM_BATCH, oldValue, createFromBatch);
}
@Override
@@ -216,6 +222,7 @@
public void reset() {
setAvailableSpecies(Lists.<Species>newArrayList());
setBatchSpecies(Maps.<Species, Integer>newHashMap());
+ setCreateFromBatch(false);
setSpecies(null);
setWeight(null);
setSize(null);
@@ -259,7 +266,7 @@
this.property = property;
getCaracteristics().put(caracteristic, property);
if (ObjectUtils.notEqual(oldValue, property)) {
- firePropertyChange(PROPERTY_PROPERTY, oldValue, property);
+ firePropertyChanged(PROPERTY_PROPERTY, oldValue, property);
CreateIndividualObservationBatchUIModel.this.firePropertyChanged(PROPERTY_CARACTERISTICS, null, getCaracteristics());
}
}
@@ -268,4 +275,13 @@
this.caracteristic = caracteristic;
}
}
+
+ @Override
+ public void firePropertyChanged(String propertyName,
+ Object oldValue,
+ Object newValue) {
+ if (!valueIsAdjusting) {
+ firePropertyChange(propertyName, oldValue, newValue);
+ }
+ }
}
1
0
05 Nov '13
Author: tchemit
Date: 2013-11-05 09:30:18 +0100 (Tue, 05 Nov 2013)
New Revision: 1327
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1327
Log:
refs #3674: [CAMPAGNE] pouvoir ajouter plusieur engins professionnels de m?\195?\170me type ?\195?\160 une campagn
Modified:
trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml
Modified: trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml
===================================================================
--- trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml 2013-11-05 00:53:28 UTC (rev 1326)
+++ trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml 2013-11-05 08:30:18 UTC (rev 1327)
@@ -268,20 +268,43 @@
<query cacheable="true" name="allFishingOperationsWithGear">
<![CDATA[
SELECT
- o.id AS id
+ g.id AS gearId,
+ guf.rankOrder as gufRankOrder
FROM
FishingOperationImpl o
- LEFT OUTER JOIN o.gearUseFeatures guf
+ INNER JOIN o.gearUseFeatures guf
LEFT OUTER JOIN guf.gear g
WHERE
o.fishingTrip.scientificCruise.id=:cruiseId
- AND
- g.id in (:gearIds)
+ AND g.id in (:gearIds)
]]>
<query-param name="cruiseId" type="java.lang.Integer"/>
<query-param name="gearIds" type="java.lang.Integer"/>
</query>
+ <query cacheable="true" name="updateOperationsGear">
+ <![CDATA[
+ UPDATE GearUseFeaturesImpl guf
+ SET guf.rankOrder=:newRankOrder
+ WHERE
+ guf IN (
+ SELECT
+ guf
+ FROM
+ FishingOperationImpl o
+ INNER JOIN o.gearUseFeatures guf
+ WHERE
+ o.fishingTrip.scientificCruise.id=:cruiseId
+ AND guf.rankOrder= :oldRankOrder
+ AND guf.gear.id= :gearId
+ )
+ ]]>
+ <query-param name="cruiseId" type="java.lang.Integer"/>
+ <query-param name="gearId" type="java.lang.Integer"/>
+ <query-param name="oldRankOrder" type="java.lang.Short"/>
+ <query-param name="newRankOrder" type="java.lang.Short"/>
+ </query>
+
<query cacheable="true" name="fishingOperation">
<![CDATA[
SELECT
1
0
05 Nov '13
Author: tchemit
Date: 2013-11-05 01:53:28 +0100 (Tue, 05 Nov 2013)
New Revision: 1326
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1326
Log:
fixes #3674: [CAMPAGNE] pouvoir ajouter plusieur engins professionnels de m?\195?\170me type ?\195?\160 une campagne
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/GearWithOriginalRankOrderBean.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/GearWithOriginalRankOrders.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java
trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/SaveCruiseAction.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-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-11-04 14:17:33 UTC (rev 1325)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-11-05 00:53:28 UTC (rev 1326)
@@ -54,6 +54,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.io.File;
+import java.util.Collection;
import java.util.List;
import java.util.concurrent.Callable;
@@ -420,12 +421,14 @@
Cruise createCruise(Cruise bean);
@Transactional(readOnly = false)
- Cruise saveCruise(Cruise bean);
+ Cruise saveCruise(Cruise bean, boolean updateVessel, boolean updateGear);
CaracteristicMap getGearCaracteristics(String cruiseId,
String gearId,
short rankOrder);
+ boolean isOperationUseGears(Integer cruiseId, Collection<Gear> gears);
+
@Transactional(readOnly = false)
void saveGearCaracteristics(Gear gear, Cruise cruise);
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-11-04 14:17:33 UTC (rev 1325)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-11-05 00:53:28 UTC (rev 1326)
@@ -81,6 +81,7 @@
import java.io.File;
import java.io.IOException;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;
@@ -558,8 +559,10 @@
}
@Override
- public Cruise saveCruise(Cruise bean) {
- return cruiseService.saveCruise(bean);
+ public Cruise saveCruise(Cruise bean,
+ boolean updateVessel,
+ boolean updateGear) {
+ return cruiseService.saveCruise(bean, updateVessel, updateGear);
}
@Override
@@ -568,6 +571,11 @@
}
@Override
+ public boolean isOperationUseGears(Integer cruiseId, Collection<Gear> gears) {
+ return cruiseService.isOperationUseGears(cruiseId, gears);
+ }
+
+ @Override
public void saveGearCaracteristics(Gear gear, Cruise cruise) {
cruiseService.saveGearCaracteristics(gear, cruise);
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java 2013-11-04 14:17:33 UTC (rev 1325)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java 2013-11-05 00:53:28 UTC (rev 1326)
@@ -54,6 +54,7 @@
import java.io.File;
import java.io.IOException;
+import java.util.Collection;
import java.util.List;
import java.util.concurrent.Callable;
@@ -356,7 +357,9 @@
}
@Override
- public Cruise saveCruise(Cruise bean) {
+ public Cruise saveCruise(Cruise bean,
+ boolean updateVessel,
+ boolean updateGear) {
throw notImplemented();
}
@@ -366,6 +369,11 @@
}
@Override
+ public boolean isOperationUseGears(Integer cruiseId, Collection<Gear> gears) {
+ throw notImplemented();
+ }
+
+ @Override
public void saveGearCaracteristics(Gear gear, Cruise cruise) {
throw notImplemented();
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2013-11-04 14:17:33 UTC (rev 1325)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2013-11-05 00:53:28 UTC (rev 1326)
@@ -111,6 +111,13 @@
return result;
}
+ public static <B extends TuttiEntity> List<Integer> toIntegerIds(Collection<B> list) {
+ List<Integer> result = list == null ?
+ Collections.<Integer>emptyList() :
+ Lists.transform(Lists.newArrayList(list), GET_ID_AS_INT);
+ return result;
+ }
+
public static Set<String> toTaxonIds(List<Species> list) {
Set<String> result = list == null ?
Collections.<String>emptySet() :
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/GearWithOriginalRankOrderBean.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/GearWithOriginalRankOrderBean.java 2013-11-04 14:17:33 UTC (rev 1325)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/GearWithOriginalRankOrderBean.java 2013-11-05 00:53:28 UTC (rev 1326)
@@ -59,4 +59,8 @@
return super.hashCode() + 13 * (rankOrder == null ? 0 : rankOrder.hashCode());
}
+ @Override
+ public String toString() {
+ return super.toString() + " rankOrder: " + rankOrder + ", originalRankOrder:" + originalRankOrder;
+ }
} //GearWithOriginalRankOrderBean
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/GearWithOriginalRankOrders.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/GearWithOriginalRankOrders.java 2013-11-04 14:17:33 UTC (rev 1325)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/GearWithOriginalRankOrders.java 2013-11-05 00:53:28 UTC (rev 1326)
@@ -32,6 +32,13 @@
@Generated(value = "org.nuiton.eugene.java.SimpleJavaBeanTransformer", date = "Wed Oct 02 14:29:49 CEST 2013")
public class GearWithOriginalRankOrders extends AbstractGearWithOriginalRankOrders {
+ public static <BeanType extends GearWithOriginalRankOrder> BeanType newGearWithOriginalRankOrder(Integer id, Short rankOrder) {
+ BeanType result = (BeanType) newGearWithOriginalRankOrder();
+ result.setId(id);
+ result.setRankOrder(rankOrder);
+ return result;
+ }
+
public static <BeanType extends GearWithOriginalRankOrder> BeanType newGearWithOriginalRankOrder(Gear source) {
Class<BeanType> sourceType = typeOfGearWithOriginalRankOrder();
Binder<Gear,BeanType> binder = BinderFactory.newBinder(Gear.class, sourceType);
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java 2013-11-04 14:17:33 UTC (rev 1325)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java 2013-11-05 00:53:28 UTC (rev 1326)
@@ -30,7 +30,9 @@
import fr.ifremer.tutti.persistence.entities.referential.Gear;
import org.springframework.transaction.annotation.Transactional;
+import java.util.Collection;
import java.util.List;
+import java.util.Set;
/**
* CRUD of {@link Cruise} entity.
@@ -49,10 +51,12 @@
Cruise createCruise(Cruise bean);
@Transactional(readOnly = false)
- Cruise saveCruise(Cruise bean);
+ Cruise saveCruise(Cruise bean, boolean updateVessel, boolean updateGear);
CaracteristicMap getGearCaracteristics(String cruiseId, String gearId, short rankOrder);
@Transactional(readOnly = false)
void saveGearCaracteristics(Gear gear, Cruise cruise);
+
+ boolean isOperationUseGears(Integer cruiseId, Collection<Gear> gears);
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-11-04 14:17:33 UTC (rev 1325)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-11-05 00:53:28 UTC (rev 1326)
@@ -70,6 +70,7 @@
import fr.ifremer.tutti.persistence.entities.referential.Gear;
import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrder;
import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrders;
+import fr.ifremer.tutti.persistence.entities.referential.Gears;
import fr.ifremer.tutti.persistence.entities.referential.Person;
import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation;
import fr.ifremer.tutti.persistence.entities.referential.Vessel;
@@ -87,6 +88,7 @@
import javax.annotation.Resource;
import java.io.Serializable;
import java.text.MessageFormat;
+import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
@@ -293,7 +295,9 @@
}
@Override
- public Cruise saveCruise(Cruise bean) {
+ public Cruise saveCruise(Cruise bean,
+ boolean updateVessel,
+ boolean updateGear) {
Preconditions.checkNotNull(bean);
Preconditions.checkNotNull(bean.getId(), "Cruise 'id' must not be null or empty to be saved.");
Preconditions.checkNotNull(bean.getProgram());
@@ -310,14 +314,14 @@
"Could not retrieve cruise with id=" + bean.getId());
}
- boolean vesselChanged = ObjectUtils.notEqual(
- bean.getVessel().getId(),
- scientificCruise.getVessel().getCode());
+// boolean vesselChanged = ObjectUtils.notEqual(
+// bean.getVessel().getId(),
+// scientificCruise.getVessel().getCode());
cruiseToEntity(bean, scientificCruise);
scientificCruiseDao.update(scientificCruise);
- if (vesselChanged) {
+ if (updateVessel) {
Vessel vessel = bean.getVessel();
if (log.isInfoEnabled()) {
log.info("Change vessel to " + vessel.getId() +
@@ -328,6 +332,35 @@
"vesselId", StringType.INSTANCE, scientificCruise.getVessel().getCode());
}
+ if (updateGear) {
+
+ for (GearWithOriginalRankOrder gear : bean.getGear()) {
+
+ Short originalRankOrder = gear.getOriginalRankOrder();
+ Short newRankOrder = gear.getRankOrder();
+
+ if (originalRankOrder != null && originalRankOrder != 0 &&
+ ObjectUtils.notEqual(originalRankOrder, newRankOrder)) {
+
+ // gear was used, but the rank order has changed
+ // must update all operation using it
+
+ if (log.isInfoEnabled()) {
+ log.info("Change gear " + gear.getId() + ", old rankOrder:" +
+ originalRankOrder + " to " + newRankOrder +
+ " for cruise: " + bean.getId());
+ }
+
+ queryUpdate("updateOperationsGear",
+ "cruiseId", IntegerType.INSTANCE, scientificCruise.getId(),
+ "gearId", IntegerType.INSTANCE, gear.getIdAsInt(),
+ "oldRankOrder", ShortType.INSTANCE, originalRankOrder,
+ "newRankOrder", ShortType.INSTANCE, newRankOrder
+ );
+ }
+ }
+ }
+
return bean;
}
@@ -471,6 +504,41 @@
gearPhysicalFeaturesDao.update(gpf);
}
+ @Override
+ public boolean isOperationUseGears(Integer cruiseId, Collection<Gear> gears) {
+
+ Preconditions.checkNotNull(cruiseId);
+ Preconditions.checkNotNull(gears);
+
+ boolean result = false;
+
+ if (!gears.isEmpty()) {
+ // ---
+ // get all gears found in operations of the cruise
+ // ---
+
+ List<Integer> gearIds = TuttiEntities.toIntegerIds(gears);
+ Iterator<Object[]> list = queryList(
+ "allFishingOperationsWithGear",
+ "cruiseId", IntegerType.INSTANCE, cruiseId,
+ "gearIds", IntegerType.INSTANCE, gearIds
+ );
+
+ while (list.hasNext()) {
+ Object[] next = list.next();
+ GearWithOriginalRankOrder g = GearWithOriginalRankOrders.newGearWithOriginalRankOrder(
+ (Integer) next[0],
+ (Short) next[1]
+ );
+ if (gears.contains(g)) {
+ result = true;
+ break;
+ }
+ }
+ }
+ return result;
+ }
+
protected void cruiseToEntity(Cruise source, ScientificCruise target) {
QualityFlag qualityFlagNotQualified = load(
@@ -606,23 +674,22 @@
// Remove deleted gear physical features
if (fishingTrip.getGearPhysicalFeatures() != null && notChangedGearPhysicalFeatures.size() > 0) {
- List<Integer> gearIds = Lists.transform(Lists.newArrayList(notChangedGearPhysicalFeatures),
- new Function<GearPhysicalFeatures, Integer>() {
- @Override
- public Integer apply(GearPhysicalFeatures input) {
- Integer result = null;
- if (input != null && input.getGear() != null) {
- result = input.getGear().getId();
- }
- return result;
- }
- });
- Iterator<Object[]> list = queryList(
- "allFishingOperationsWithGear",
- "cruiseId", IntegerType.INSTANCE, target.getId(),
- "gearIds", IntegerType.INSTANCE, gearIds
- );
- if (list.hasNext()) {
+ List<Gear> gears = Lists.transform(Lists.newArrayList(notChangedGearPhysicalFeatures),
+ new Function<GearPhysicalFeatures, Gear>() {
+ @Override
+ public Gear apply(GearPhysicalFeatures input) {
+ Gear result = Gears.newGear();
+
+ if (input != null && input.getGear() != null) {
+ result.setRankOrder(input.getRankOrder());
+ result.setId(input.getGear().getId());
+ }
+ return result;
+ }
+ });
+
+ boolean gearRemoved = isOperationUseGears(target.getId(), gears);
+ if (gearRemoved) {
throw new TuttiBusinessException(_("tutti.persistence.cruise.gearUsedInOperations.error"));
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-11-04 14:17:33 UTC (rev 1325)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-11-05 00:53:28 UTC (rev 1326)
@@ -82,6 +82,7 @@
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -959,8 +960,8 @@
}
@Override
- public Cruise saveCruise(Cruise bean) {
- return driver.saveCruise(bean);
+ public Cruise saveCruise(Cruise bean, boolean updateVessel, boolean updateGear) {
+ return driver.saveCruise(bean, updateVessel, updateGear);
}
@Override
@@ -968,10 +969,10 @@
return driver.getGearCaracteristics(cruiseId, gearId, rankOrder);
}
-// @Override
-// public Gear getGearWithCaracteristics(Gear gear, short rankOrder, Cruise cruise) {
-// return driver.getGearWithCaracteristics(gear, rankOrder, cruise);
-// }
+ @Override
+ public boolean isOperationUseGears(Integer cruiseId, Collection<Gear> gears) {
+ return driver.isOperationUseGears(cruiseId, gears);
+ }
@Override
public void saveGearCaracteristics(Gear gear, Cruise cruise) {
Modified: trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties
===================================================================
--- trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties 2013-11-04 14:17:33 UTC (rev 1325)
+++ trunk/tutti-ui-swing/src/license/THIRD-PARTY.properties 2013-11-05 00:53:28 UTC (rev 1326)
@@ -22,36 +22,15 @@
# - MPL 1.1
# - New BSD License
# - Public Domain
-# - The AndroMDA Project
# - The Apache Software License, Version 2.0
# - license.txt
#-------------------------------------------------------------------------------
# Please fill the missing licenses for dependencies :
#
#
-#Wed Jul 03 16:24:14 CEST 2013
+#Thu Oct 31 17:05:37 CET 2013
antlr--antlr--2.7.6=BSD License
commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0
dom4j--dom4j--1.6.1=BSD License
javax.persistence--persistence-api--1.0.2=COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
javax.transaction--jta--1.1=Common Development and Distribution License (CDDL) v1.0
-org.andromda--andromda-core--3.3.1=BSD License
-org.andromda--andromda-utils--3.3.1=BSD License
-org.andromda.cartridges--andromda-hibernate-cartridge--3.3.1=BSD License
-org.andromda.cartridges--andromda-java-cartridge--3.3.1=BSD License
-org.andromda.cartridges--andromda-spring-cartridge--3.3.1=BSD License
-org.andromda.metafacades--andromda-metafacades-uml--3.3.1=BSD License
-org.andromda.profiles.emf.uml2--andromda-profile-common--3.3.1=BSD License
-org.andromda.profiles.emf.uml2--andromda-profile-datatype--3.3.1=BSD License
-org.andromda.profiles.emf.uml2--andromda-profile-meta--3.3.1=BSD License
-org.andromda.profiles.emf.uml2--andromda-profile-persistence--3.3.1=BSD License
-org.andromda.profiles.emf.uml2--andromda-profile-presentation--3.3.1=BSD License
-org.andromda.profiles.emf.uml2--andromda-profile-process--3.3.1=BSD License
-org.andromda.profiles.emf.uml2--andromda-profile-screen--3.3.1=BSD License
-org.andromda.profiles.emf.uml2--andromda-profile-service--3.3.1=BSD License
-org.andromda.profiles.emf.uml2--andromda-profile-webservice--3.3.1=BSD License
-org.andromda.profiles.emf.uml2--andromda-profile-xml--3.3.1=BSD License
-org.andromda.translationlibraries--andromda-ocl-translation-core--3.3.1=BSD License
-org.andromda.translationlibraries--andromda-ocl-validation-library--3.3.1=BSD License
-xalan--xalan--2.7.0=The Apache Software License, Version 2.0
-xerces--xercesImpl--2.6.0=The Apache Software License, Version 2.0
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/SaveCruiseAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/SaveCruiseAction.java 2013-11-04 14:17:33 UTC (rev 1325)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/SaveCruiseAction.java 2013-11-05 00:53:28 UTC (rev 1326)
@@ -24,15 +24,20 @@
* #L%
*/
+import com.google.common.collect.Sets;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.data.Cruise;
+import fr.ifremer.tutti.persistence.entities.referential.Gear;
import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrder;
+import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrders;
import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler;
import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
+import org.apache.commons.lang3.ObjectUtils;
import javax.swing.JOptionPane;
+import java.util.Set;
import static org.nuiton.i18n.I18n._;
@@ -46,6 +51,10 @@
protected PersistenceService persistenceService;
+ protected boolean updateVessel;
+
+ protected boolean updateGear;
+
public SaveCruiseAction(EditCruiseUIHandler handler) {
super(handler, true);
persistenceService = getContext().getPersistenceService();
@@ -58,7 +67,11 @@
Cruise bean = getModel().toBean();
if (!TuttiEntities.isNew(bean)) {
Cruise oldCruise = persistenceService.getCruise(bean.getId());
+
+ // check gear has not changed
if (!oldCruise.getVessel().equals(bean.getVessel())) {
+
+ // if so ask user confirmation
String htmlMessage = String.format(
AbstractTuttiUIHandler.CONFIRMATION_FORMAT,
_("tutti.editCruise.action.save.vesselChanged.message"),
@@ -70,8 +83,59 @@
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE);
- result = answer == JOptionPane.OK_OPTION;
+ result = updateVessel = answer == JOptionPane.OK_OPTION;
}
+
+ if (result) {
+
+ if (ObjectUtils.notEqual(oldCruise.getGear(), bean.getGear())) {
+
+ // get all gears to remove
+
+ Set<Gear> gearsToRemove =
+ Sets.<Gear>newHashSet(oldCruise.getGear());
+
+ for (GearWithOriginalRankOrder gearWithOriginalRankOrder : bean.getGear()) {
+ GearWithOriginalRankOrder g =
+ GearWithOriginalRankOrders.newGearWithOriginalRankOrder(
+ gearWithOriginalRankOrder.getIdAsInt(),
+ gearWithOriginalRankOrder.getOriginalRankOrder()
+ );
+ gearsToRemove.remove(g);
+ }
+
+ // check they are not used by any operation of the cruise
+ boolean obsoleteGearIsUsed = persistenceService.isOperationUseGears(
+ bean.getIdAsInt(), gearsToRemove);
+
+ if (obsoleteGearIsUsed) {
+
+ // not possible, can't removed used gears
+
+ String message = _("tutti.persistence.cruise.gearUsedInOperations.error");
+ displayWarningMessage(
+ _("tutti.editCruise.action.save.gearChanged.title"),
+ "<html><body>" + message + "</body></html>"
+ );
+ result = false;
+ } else {
+
+ // if so ask user confirmation
+ String htmlMessage = String.format(
+ AbstractTuttiUIHandler.CONFIRMATION_FORMAT,
+ _("tutti.editCruise.action.save.gearChanged.message"),
+ _("tutti.editCruise.action.save.gearChanged.help"));
+
+ int answer = JOptionPane.showConfirmDialog(getContext().getActionUI(),
+ htmlMessage,
+ _("tutti.editCruise.action.save.gearChanged.title"),
+ JOptionPane.OK_CANCEL_OPTION,
+ JOptionPane.WARNING_MESSAGE);
+
+ result = updateGear = answer == JOptionPane.OK_OPTION;
+ }
+ }
+ }
}
return result;
@@ -91,7 +155,7 @@
model.setId(saved.getId());
sendMessage(_("tutti.flash.info.cruiseCreated", bean.getName()));
} else {
- saved = persistenceService.saveCruise(bean);
+ saved = persistenceService.saveCruise(bean, updateVessel, updateGear);
sendMessage(_("tutti.flash.info.cruiseSaved", bean.getName()));
}
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-11-04 14:17:33 UTC (rev 1325)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-11-05 00:53:28 UTC (rev 1326)
@@ -615,6 +615,9 @@
tutti.editCruise.action.generateCampaignName=
tutti.editCruise.action.generateCampaignName.mnemonic=
tutti.editCruise.action.generateName.tip=
+tutti.editCruise.action.save.gearChanged.help=
+tutti.editCruise.action.save.gearChanged.message=
+tutti.editCruise.action.save.gearChanged.title=
tutti.editCruise.action.save.vesselChanged.help=
tutti.editCruise.action.save.vesselChanged.message=
tutti.editCruise.action.save.vesselChanged.title=
@@ -1382,6 +1385,7 @@
tutti.option.clone=
tutti.option.edit=
tutti.option.import=
+tutti.persistence.cruise.gearUsedInOperations.error=
tutti.property.get.error=
tutti.property.name=
tutti.property.refTaxCode=
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-11-04 14:17:33 UTC (rev 1325)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-11-05 00:53:28 UTC (rev 1326)
@@ -613,6 +613,9 @@
tutti.editCruise.action.generateCampaignName=Générer le nom
tutti.editCruise.action.generateCampaignName.mnemonic=G
tutti.editCruise.action.generateName.tip=Générer le nom normalisé de la campagne
+tutti.editCruise.action.save.gearChanged.help=Les engins des traits de la campagne vont également être modifiés.<ul><li><strong>Annuler</strong> pour ne pas enregistrer les modifications de la campagne ni les traits</li><li><strong>OK</strong> pour enregistrer la campagne et modifier les engins des traits</li></ul>.
+tutti.editCruise.action.save.gearChanged.message=Les engins de la campagne ont été modifiés.
+tutti.editCruise.action.save.gearChanged.title=Engin(s) modifié(s)
tutti.editCruise.action.save.vesselChanged.help=Le navire des traits de la campagne va également être modifié.<ul><li><strong>Annuler</strong> pour ne pas enregistrer les modifications de la campagne ni les traits</li><li><strong>OK</strong> pour enregistrer la campagne et modifier le navire des traits</li></ul>.
tutti.editCruise.action.save.vesselChanged.message=Le navire de la campagne a été modifié.
tutti.editCruise.action.save.vesselChanged.title=Navire modifié
@@ -1380,6 +1383,7 @@
tutti.option.clone=Cloner
tutti.option.edit=Éditer
tutti.option.import=Importer
+tutti.persistence.cruise.gearUsedInOperations.error=
tutti.property.get.error=Propriété %1s non trouvée sur l'objet de type %2s
tutti.property.name=
tutti.property.refTaxCode=
1
0
r1325 - in trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches: benthos species
by tchemit@users.forge.codelutin.com 04 Nov '13
by tchemit@users.forge.codelutin.com 04 Nov '13
04 Nov '13
Author: tchemit
Date: 2013-11-04 15:17:33 +0100 (Mon, 04 Nov 2013)
New Revision: 1325
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1325
Log:
fixes #3619: [ERGO] Tri du tableau des esp?\195?\168ces
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css 2013-10-31 10:58:38 UTC (rev 1324)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css 2013-11-04 14:17:33 UTC (rev 1325)
@@ -134,7 +134,7 @@
#table {
selectionMode: {ListSelectionModel.MULTIPLE_INTERVAL_SELECTION};
selectionForeground: {Color.BLACK};
- sortable: true;
+ sortable: false;
}
#filterTablePane {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-10-31 10:58:38 UTC (rev 1324)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-11-04 14:17:33 UTC (rev 1325)
@@ -134,7 +134,7 @@
#table {
selectionMode: {ListSelectionModel.MULTIPLE_INTERVAL_SELECTION};
selectionForeground: {Color.BLACK};
- sortable: true;
+ sortable: false;
}
#filterTablePane {
1
0
r1324 - in trunk/src/conception/specifications: . Concepts-metiers Fonctionnalites-metiers Fonctionnalites-transversales Presentation
by lkaufmann@users.forge.codelutin.com 31 Oct '13
by lkaufmann@users.forge.codelutin.com 31 Oct '13
31 Oct '13
Author: lkaufmann
Date: 2013-10-31 11:58:38 +0100 (Thu, 31 Oct 2013)
New Revision: 1324
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1324
Log:
Specifications : Ajout des concepts et fonctionnalit?\195?\169s m?\195?\169tiers (Work in progress)
Added:
trunk/src/conception/specifications/AllegroCampagne-Specifications.odt
trunk/src/conception/specifications/AllegroCampagne-Specifications.pdf
trunk/src/conception/specifications/Concepts-metiers/Engin.txt
trunk/src/conception/specifications/Concepts-metiers/OperationPecheTrait.txt
Removed:
trunk/src/conception/specifications/Concepts-metiers/OperationPeche.txt
trunk/src/conception/specifications/Concepts-metiers/Trait.txt
Modified:
trunk/src/conception/specifications/Concepts-metiers/Campagne.txt
trunk/src/conception/specifications/Concepts-metiers/Capture.txt
trunk/src/conception/specifications/Concepts-metiers/ProtocoleSaisie.txt
trunk/src/conception/specifications/Concepts-metiers/SerieCampagne.txt
trunk/src/conception/specifications/Concepts-metiers/VracHorsVrac.txt
trunk/src/conception/specifications/Fonctionnalites-metiers/GestionCampagnes.txt
trunk/src/conception/specifications/Fonctionnalites-metiers/GestionProtocoles.txt
trunk/src/conception/specifications/Fonctionnalites-metiers/GestionRef?\195?\169rentielsTemporaires.txt
trunk/src/conception/specifications/Fonctionnalites-transversales/ControleSaisie.txt
trunk/src/conception/specifications/Fonctionnalites-transversales/GestionnaireBase.txt
trunk/src/conception/specifications/Presentation/PresentationGenerale.txt
/opt/redmine-tools/commit-email.pl: `/usr/bin/svnlook diff /var/lib/svn/svn-forge.codelutin.com/tutti -r 1324' failed with this output:
Added: trunk/src/conception/specifications/AllegroCampagne-Specifications.odt
===================================================================
(Binary files differ)
Property changes on: trunk/src/conception/specifications/AllegroCampagne-Specifications.odt
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/src/conception/specifications/AllegroCampagne-Specifications.pdf
===================================================================
(Binary files differ)
Property changes on: trunk/src/conception/specifications/AllegroCampagne-Specifications.pdf
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: trunk/src/conception/specifications/Concepts-metiers/Campagne.txt
===================================================================
--- trunk/src/conception/specifications/Concepts-metiers/Campagne.txt 2013-10-31 10:56:39 UTC (rev 1323)
+++ trunk/src/conception/specifications/Concepts-metiers/Campagne.txt 2013-10-31 10:58:38 UTC (rev 1324)
@@ -1,3 +1,17 @@
-Les campagnes scientifiques à vocation halieutique ont pour objectif de produire des indices biologiques pour connaître l'état et l'évolution des espèces exploitées : abondance et distribution des espèces commerciales, stades clés du cycle de vie des espèces, description des populations. Elles ont aussi pour but d'élaborer des indicateurs sur les écosystèmes exploités.
+Les campagnes de pêche scientifique standardisées ont deux principaux objectifs : Observer les ressources halieutiques et produire des indices biologiques pour connaître l'état et l'évolution des espèces exploitées.
-Les campagnes de pêche scientifique standardisées ont pour objectif d'observer les ressources halieutiques, en suivant toujours les mêmes méthodes d'échantillonnage. Elles sont toujours réalisées dans la même zone, à la même saison, avec des engins de pêche standardisés, afin que les données soient comparables d'année en année. Elles servent à décrire les espèces, qu'elles soient commerciales ou non, d'une zone et à observer les changements s'il y en a. Les poissons, les mollusques et les crustacés sont dénombrés, mesurés et pesés. Certains d'entre eux font l'objet de prélèvements biologiques. Chaque campagne fournit ainsi une représentation quantitative de l'ensemble des espèces de la zone à une période donnée.
+* Observations et méthodes
+Les campagnes suivent toujours les mêmes méthodes d'échantillonnage. Elles sont toujours réalisées dans la même zone, à la même saison, avec des engins de pêche standardisés, afin que les données soient comparables d'année en année.
+
+Chaque campagne est généralement accomplie une fois par an. Mais certains cas spécifiques imposent sa réalisation plusieurs fois par an, on parle alors de série partielle.
+
+Chaque zone étudiée est découpée en strates en fonction de la profondeur, de la latitude ou d'autres critères. L'échantillonnage prévoit un nombre de traits de chalut ou de mouillages de casiers par strate.
+
+Dans une campagne de chalutage scientifique, les positions des traits de chalut sont choisies selon un plan d'échantillonnage statistique. L'objectif n'est pas d'obtenir les meilleures captures possibles comme le recherchent les pêcheurs, mais de récolter des données comparables d'une année sur l'autre afin de relever des évolutions.
+
+Les observations servent à décrire les espèces, qu'elles soient commerciales ou non, d'une zone et à observer les changements s'il y en a. Les poissons, les mollusques et les crustacés sont dénombrés, mesurés et pesés. Certains d'entre eux font l'objet de prélèvements biologiques. Chaque campagne fournit ainsi une représentation quantitative de l'ensemble des espèces de la zone à une période donnée.
+
+D'autres informations sont également relevées (température, salinité, macrofaune, observation des mammifères marins, oiseaux, macro déchets etc.).
+
+* Analyses et indices d'évolution
+Les campagnes scientifiques à vocation halieutique ont pour objectif de produire des indices biologiques pour connaître l'état et l'évolution des espèces exploitées : abondance et distribution des espèces commerciales, stades clés du cycle de vie des espèces, description des populations. Elles ont aussi pour but d'élaborer des indicateurs sur les écosystèmes exploités.
\ No newline at end of file
Modified: trunk/src/conception/specifications/Concepts-metiers/Capture.txt
===================================================================
--- trunk/src/conception/specifications/Concepts-metiers/Capture.txt 2013-10-31 10:56:39 UTC (rev 1323)
+++ trunk/src/conception/specifications/Concepts-metiers/Capture.txt 2013-10-31 10:58:38 UTC (rev 1324)
@@ -1,12 +1,18 @@
+Les captures peuvent aussi bien être réalisés dans un cadre scientifique que lors d'une pêche professionnelle classique.
+Toutes les prises réalisées lors des captures, de tout type, sont catégorisées. Les constations et les mesures à effectuer varient en fonction de la sorte des éléments capturés.
-Espèces
+* Espèces
-Benthos
+* Benthos
Le benthos regroupe l'ensemble des organismes vivant en relation étroite avec les fonds subaquatiques.
Macro déchets
+Observations individuelles
+
+Captures accidentelles
+
Added: trunk/src/conception/specifications/Concepts-metiers/Engin.txt
===================================================================
--- trunk/src/conception/specifications/Concepts-metiers/Engin.txt (rev 0)
+++ trunk/src/conception/specifications/Concepts-metiers/Engin.txt 2013-10-31 10:58:38 UTC (rev 1324)
@@ -0,0 +1,8 @@
+Différents engins d'échantillonnage sont utilisés :
+- Un chalut de fond à grande ouverture verticale pour l'observation des ressources démersales, sur les plateaux continentaux et le haut des pentes continentales (accores) en mer du Nord, Manche orientale, mer Celtique, golfe de Gascogne, golfe du Lion et Est de la Corse,
+- Un chalut à perche pour les zones très côtières et les estuaires lors des campagnes visant les juvéniles de poissons plats : baies de Somme et de Vilaine,
+- Un échantillonnage au casier pour les campagnes d'évaluation des grands crustacés, en particulier le homard, aux abords du cap de Flamanville.
+
+- Chalut de fond à grande ouverture verticale pour l'observation des ressources démersales,
+- Chalut à perche pour les zones très côtières et les estuaires lors des campagnes visant les juvéniles de poissons plats
+- Echantillonnage au casier pour les campagnes d'évaluation des grands crustacés.
Deleted: trunk/src/conception/specifications/Concepts-metiers/OperationPeche.txt
===================================================================
Copied: trunk/src/conception/specifications/Concepts-metiers/OperationPecheTrait.txt (from rev 1322, trunk/src/conception/specifications/Concepts-metiers/OperationPeche.txt)
===================================================================
Modified: trunk/src/conception/specifications/Concepts-metiers/ProtocoleSaisie.txt
===================================================================
--- trunk/src/conception/specifications/Concepts-metiers/ProtocoleSaisie.txt 2013-10-31 10:56:39 UTC (rev 1323)
+++ trunk/src/conception/specifications/Concepts-metiers/ProtocoleSaisie.txt 2013-10-31 10:58:38 UTC (rev 1324)
@@ -0,0 +1 @@
+Chaque observations d'une campagne doit être réalisée selon un plan d'échantillonnage prédéfini et standardisé. Les protocoles de saisies permettent d'établir les observations à effectuer, ainsi que les informations à relevées et les règles à respecter pour ces observations.
Modified: trunk/src/conception/specifications/Concepts-metiers/SerieCampagne.txt
===================================================================
--- trunk/src/conception/specifications/Concepts-metiers/SerieCampagne.txt 2013-10-31 10:56:39 UTC (rev 1323)
+++ trunk/src/conception/specifications/Concepts-metiers/SerieCampagne.txt 2013-10-31 10:58:38 UTC (rev 1324)
@@ -1,3 +1,6 @@
-Chaque série de campagnes est conduite selon une stratégie d'échantillonnage spécifique. Sauf cas particuliers, les analyses et interprétations doivent être conduites par série, en prenant en compte les stratégies d'échantillonnage propres à chacune de ces séries. Sur le site, les données sont présentées par série.
+Une série de campagne peut regrouper plusieurs campagnes halieutiques différentes ayant une même zone géographique d'étude.
-Chaque série de campagne est définie par zone.
+Il y a 3 grandes séries de campagnes :
+- les séries de campagnes démersales (IBTS en Mer du Nord, EVHOE en Mer Celtique et Golfe de Gascogne, CGFS en Manche Est, RESGASC dans le Golfe de Gascogne, MEDITS dans le Golfe du Lion et Est Corse) ;
+- les séries de campagnes pélagiques (PELMED en Méditerranée Nord-Occidentale, PELGAS dans le Golfe de Gascogne) ;
+- les campagnes côtières pour les "bivalves"
Deleted: trunk/src/conception/specifications/Concepts-metiers/Trait.txt
===================================================================
Modified: trunk/src/conception/specifications/Concepts-metiers/VracHorsVrac.txt
===================================================================
--- trunk/src/conception/specifications/Concepts-metiers/VracHorsVrac.txt 2013-10-31 10:56:39 UTC (rev 1323)
+++ trunk/src/conception/specifications/Concepts-metiers/VracHorsVrac.txt 2013-10-31 10:58:38 UTC (rev 1324)
@@ -1,9 +1,12 @@
-Les notions de Vrac et Hors vrac sont liées à l'échantillonnage des
+Le plus souvent se sont des individus rares et/ou de grande taille qui sont extraits directement de la capture pour être observés. Dans le cas où seul un échantillon de la capture est trié, ceci permet de ne pas appliquer le coefficient d'élévation à ces individus et/ou de bien les observer.
+* Vrac
+Tout est trié car quantité supportable à trier
+* Hors Vrac
+Échantillonnage de la capture car trop grande quantité à trier. Pour ne pas passer à côté des individus importants ils sont conservés en Hors Vrac. Puis observations sur l’échantillon gardés (Vrac). Si vrac échantillonné, on multiplie la quantité pour estimer le total.
-HORS VRAC
-catégorie associée à un lot ou un individu qui a été prélevé directement sur la capture sans passer par le pesage automatique ni le tri.
+Catégorie associée à un lot ou un individu qui a été prélevé directement sur la capture sans passer par le pesage automatique ni le tri.
Cas 1
Cette notion est utile dans les cas de capture abondante où seule une fraction de la capture va être observée. Dans cette configuration, les lots (catégorisés à VRAC) observés dans l'échantillon seront élevés (facteur d'élévation) pour obtenir les poids et nombre totaux dans la capture.
Cas 2
Modified: trunk/src/conception/specifications/Fonctionnalites-metiers/GestionCampagnes.txt
===================================================================
--- trunk/src/conception/specifications/Fonctionnalites-metiers/GestionCampagnes.txt 2013-10-31 10:56:39 UTC (rev 1323)
+++ trunk/src/conception/specifications/Fonctionnalites-metiers/GestionCampagnes.txt 2013-10-31 10:58:38 UTC (rev 1324)
@@ -1,17 +1,48 @@
-a. Création d'une série de campagne
+a. Données caractéristiques
-Pour identifier une série de campagne, un nom et un description sont à saisir lors de la création d'une série de campagne.
+Une campagne est caractérisée par les données suivantes :
+Une série de campagne est caractérisée par les données suivantes :
b. Création d'une campagne
+L'écran de création d'une campagne est accessible depuis la page d'accueil de l'application, en cliquant sur Nouveau. Lorsqu'une campagne est sélectionnée, elle peut être éditée à partir de ce menu.
+b. Création d'une série de campagne
+
+
c. Export de campagnes
-Export d'une campagne
+* Export d'une campagne
-Export Sumatra d'une campagne
+La fonctionnalité d'export d'une série de campagne est accessible directement depuis la page d'accueil de l'application.
+L'utilisateur est invité à choisir l'emplacement de l'archive d'export. Cette archive est au format .zip et respecte l'architecture suivante:
+Nom de l'archive/
+accidentalCatch.csv
+catch.csv
+gearCaracteristics.csv
+individualObservation.csv
+marineLitter.csv
+operation.csv
+parameter.csv
+species.csv
+survey.csv
-Export d'une série de campagne
+* Export Sumatra d'une campagne
+* Export d'une série de campagne
+
+La fonctionnalité d'export d'une série de campagne est accessible directement depuis la page d'accueil de l'application.
+L'utilisateur est invité à choisir l'emplacement de l'archive d'export. Cette archive est au format .zip et respecte l'architecture suivante:
+Nom de l'archive/
+accidentalCatch.csv
+catch.csv
+gearCaracteristics.csv
+individualObservation.csv
+marineLitter.csv
+operation.csv
+parameter.csv
+species.csv
+survey.csv
+
d. Envoi d'une campagne
Modified: trunk/src/conception/specifications/Fonctionnalites-metiers/GestionProtocoles.txt
===================================================================
--- trunk/src/conception/specifications/Fonctionnalites-metiers/GestionProtocoles.txt 2013-10-31 10:56:39 UTC (rev 1323)
+++ trunk/src/conception/specifications/Fonctionnalites-metiers/GestionProtocoles.txt 2013-10-31 10:58:38 UTC (rev 1324)
@@ -1,9 +1,17 @@
-a. Création
+a. Données caractéristiques
-b. Suppression
+Un protocole de saisie est caractérisé par :
+- Informations générales
+- Caractéristiques
+- Espèces
+- Benthos
-c. Import
+b. Création d'un protocole de saisie
-d. Configuration
+c. Suppression d'un protocole de saisie
-e. Clonage
\ No newline at end of file
+d. Import d'un protocole de saisie
+
+e. Configuration d'un protocole de saisie
+
+f. Clonage d'un protocole de saisie
\ No newline at end of file
Modified: trunk/src/conception/specifications/Fonctionnalites-metiers/GestionRef?\195?\169rentielsTemporaires.txt
===================================================================
svnlook: Can't convert string from 'UTF-8' to native encoding:
svnlook: --- trunk/src/conception/specifications/Fonctionnalites-metiers/GestionRef?\195?\169rentielsTemporaires.txt 2013-10-31 10:56:39 UTC (rev 1323)
+++ trunk/src/conception/specifications/Fonctionnalites-metiers/GestionRef?\195?\169rentielsTemporaires.txt 2013-10-31 10:58:38 UTC (rev 1324)
1
0
r1323 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data tutti-service/src/main/java/fr/ifremer/tutti/service/export tutti-service/src/test/java/fr/ifremer/tutti/service/export
by tchemit@users.forge.codelutin.com 31 Oct '13
by tchemit@users.forge.codelutin.com 31 Oct '13
31 Oct '13
Author: tchemit
Date: 2013-10-31 11:56:39 +0100 (Thu, 31 Oct 2013)
New Revision: 1323
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1323
Log:
fixes #3656: [EXPORT] Normalisation des noms de colonnes
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModelEntry.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.java
trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportService2Test.java
trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModelEntry.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModelEntry.java 2013-10-30 14:47:32 UTC (rev 1322)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModelEntry.java 2013-10-31 10:56:39 UTC (rev 1323)
@@ -46,6 +46,8 @@
protected String label;
+ protected String canonicalLabel;
+
protected Integer categoryId;
protected int order;
@@ -64,8 +66,27 @@
public void setLabel(String label) {
this.label = label;
+ this.canonicalLabel = null;
}
+ public String getCanonicalLabel() {
+ if (canonicalLabel == null) {
+
+ canonicalLabel = "";
+
+ if (StringUtils.isNotEmpty(label)) {
+ for (int i = 0; i < label.length(); i++) {
+ char a = label.charAt(i);
+ if (!Character.isLetterOrDigit(a)) {
+ a = '_';
+ }
+ canonicalLabel += a;
+ }
+ }
+ }
+ return canonicalLabel;
+ }
+
public Caracteristic getCaracteristic() {
return caracteristic;
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.java 2013-10-30 14:47:32 UTC (rev 1322)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.java 2013-10-31 10:56:39 UTC (rev 1323)
@@ -77,7 +77,7 @@
newColumnForExport("Commentaire", SpeciesBatch.PROPERTY_COMMENT);
for (SampleCategoryModelEntry entry : sampleCategoryModel.getCategory()) {
- addSampleCategory(entry.getLabel(), entry.getOrder());
+ addSampleCategory(entry.getCanonicalLabel(), entry.getOrder());
}
// mensuration
Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportService2Test.java
===================================================================
--- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportService2Test.java 2013-10-30 14:47:32 UTC (rev 1322)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportService2Test.java 2013-10-31 10:56:39 UTC (rev 1323)
@@ -157,7 +157,7 @@
URL url = new URL(urlPrefix + "operation.csv");
ServiceDbResource.assertFileContent("operation export:\n",
url,
- "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireSecondaire;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
+ "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
"2013;test elevation;1;B;2;1;OTB 20/28.10;278970;01/07/2013 00:00:00;;;01/07/2013 00:00:00;;;00;NA;NA;NA;?;N;;NA;NA;NA;;;\"Commentaire sur le trait B-2-1\n" +
"\n" +
"avec\n" +
@@ -201,7 +201,7 @@
URL url = new URL("jar:" + exportFile.toURI().toURL() + "!/exportCruise-" + CRUISE_ID + "/catch.csv");
ServiceDbResource.assertFileContent("Catch export:\n",
url,
- "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V/HV;Num_Ordre_V/HV_H2;Tot_V/HV;Ech_V/HV;Type_Volume_Poids_V/HV;Unite_Volume_Poids_V/HV;Class Tri.;Num_Ordre_Class Tri._H2;Tot_Class Tri.;Ech_Class Tri.;Type_Volume_Poids_Class Tri.;Unite_Volume_Poids_Class Tri.;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
+ "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
"2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1938;Agonus cataphractus;Trait B-2-1 AGONCAT-vrac 80;Vrac;1;80.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;80.0;3.5;\n" +
"2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1358;Alosa alosa;Trait B-2-1 ALOSALO Vrac|Trait B-2-1 ALOSALO Vrac - Male 60;Vrac;2;;;Poids;kg;NA;;;;;kg;Mâle;1;60.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;60.0;5.8333335;\n" +
"2013;test elevation;1;OTB 20/28.10;B;2;1;278970;1358;Alosa alosa;Trait B-2-1 ALOSALO Vrac|Trait B-2-1 ALOSALO Vrac - Femelle 40.0;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;40.0;8.75;\n" +
Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java
===================================================================
--- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java 2013-10-30 14:47:32 UTC (rev 1322)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java 2013-10-31 10:56:39 UTC (rev 1323)
@@ -76,15 +76,15 @@
"2013;Campagne CGFS;;ScientificGear;287;Volet dépresseur (drague) - engin - totale - Déclaration d'un professionnel;Oui;";
public static final String OPERATION_WITH_NO_CATCH_CONTENT =
- "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireSecondaire;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
+ "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
"2010;Campagne CGFS;;65;65;1;GOV 19.7/25.9;278970;13/10/2010 13:35:00;50.22833;0.31833;13/10/2010 14:05:00;50.22167;0.28333;30;Strate 4J;NA;Localité 4J2;N;Y;2512.0;NA;NA;NA;;;avarie - chalut annulé completement à poil;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;";
public static final String OPERATION_WITH_NO_CATCH_CONTENT_AND_NO_GEAR =
- "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireSecondaire;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
+ "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
"2010;Campagne CGFS;;65;65;1;;278970;13/10/2010 13:35:00;50.22833;0.31833;13/10/2010 14:05:00;50.22167;0.28333;30;Strate 4J;NA;Localité 4J2;N;Y;2512.0;NA;NA;NA;;;avarie - chalut annulé completement à poil;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;";
public static final String OPERATION_CONTENT =
- "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireSecondaire;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
+ "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;NavireAssocie;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" +
"2013;Campagne CGFS;;A;1;1;GOV 19.7/25.9;278970;01/05/2013 00:00:00;;;01/05/2013 00:23:00;;;23;Strate 1D;NA;Localité 1D2;?;N;;NA;NA;NA;Vincent AURECHE;;op1;120.0;Y;100.0;Y;20.0;Y;0.0;Y;;?;;?;120.0;Y;100.0;Y;100.0;Y;20.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;6.0;Y;\n" +
"2013;Campagne CGFS;;A;2;1;GOV 19.7/25.9;278970;11/05/2013 08:00:00;;;11/05/2013 08:23:00;;;23;Strate 1D;NA;Localité 1D2;?;N;;NA;NA;NA;Robert BELLAIL|Herve BARONE;;OP2;0.0;Y;0.0;Y;0.0;Y;0.0;Y;;?;;?;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;0.0;Y;";
@@ -99,7 +99,7 @@
"2013;Campagne CGFS;;A;2;1;308;Nombre d'engin - engin - totale - Déclaration d'un professionnel;2.0;";
public static final String CATCH_CONTENT =
- "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V/HV;Num_Ordre_V/HV_H2;Tot_V/HV;Ech_V/HV;Type_Volume_Poids_V/HV;Unite_Volume_Poids_V/HV;Class Tri.;Num_Ordre_Class Tri._H2;Tot_Class Tri.;Ech_Class Tri.;Type_Volume_Poids_Class Tri.;Unite_Volume_Poids_Class Tri.;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
+ "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;10.0;1;;cm;0.5;5;5.0;20.0;\n" +
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;10.5;2;;cm;0.5;2;5.0;20.0;\n" +
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;11.0;3;;cm;0.5;1;5.0;20.0;\n" +
@@ -111,7 +111,7 @@
"2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;;Hors Vrac;1;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;2;20.0;1.0;";
public static final String CATCH_CONTENT_2 =
- "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V/HV;Num_Ordre_V/HV_H2;Tot_V/HV;Ech_V/HV;Type_Volume_Poids_V/HV;Unite_Volume_Poids_V/HV;Class Tri.;Num_Ordre_Class Tri._H2;Tot_Class Tri.;Ech_Class Tri.;Type_Volume_Poids_Class Tri.;Unite_Volume_Poids_Class Tri.;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
+ "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Class_Tri_;Num_Ordre_Class_Tri__H2;Tot_Class_Tri_;Ech_Class_Tri_;Type_Volume_Poids_Class_Tri_;Unite_Volume_Poids_Class_Tri_;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" +
"2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;365;Aequipecten opercularis;taxon;Vrac;1;0.005;0.005;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.005;1.0;\n" +
"2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;491;Alloteuthis;taxon;Vrac;2;0.004;0.004;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.004;1.0;\n" +
"2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;300;Buccinum undatum;taxon;Vrac;3;0.015;0.015;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.015;1.0;\n" +
1
0
r1322 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti tutti-service/src/main/java/fr/ifremer/tutti/service tutti-service/src/main/resources/i18n tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db
by tchemit@users.forge.codelutin.com 30 Oct '13
by tchemit@users.forge.codelutin.com 30 Oct '13
30 Oct '13
Author: tchemit
Date: 2013-10-30 15:47:32 +0100 (Wed, 30 Oct 2013)
New Revision: 1322
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1322
Log:
fixes #3623: [TECH] Import de base : Structure autoris?\195?\169e pour le zip contenant la base ?\195?\160 importer
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiIOUtil.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java
trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties
trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiIOUtil.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiIOUtil.java 2013-10-30 10:49:27 UTC (rev 1321)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiIOUtil.java 2013-10-30 14:47:32 UTC (rev 1322)
@@ -31,6 +31,7 @@
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSelector;
import org.apache.commons.vfs2.FileSystemManager;
+import org.apache.commons.vfs2.FileType;
import org.apache.commons.vfs2.VFS;
import org.nuiton.util.ZipUtil;
@@ -109,6 +110,15 @@
}
}
+
+ public static FileType getType(FileObject objectFile, String errorMessage) {
+ try {
+ return objectFile.getType();
+ } catch (IOException e) {
+ throw new TuttiTechnicalException(errorMessage, e);
+ }
+ }
+
public static void explode(FileObject archiveFile,
File target,
FileSelector fileSelector, String errorMessage) {
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-10-30 10:49:27 UTC (rev 1321)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-10-30 14:47:32 UTC (rev 1322)
@@ -72,7 +72,9 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.vfs2.AllFileSelector;
+import org.apache.commons.vfs2.FileName;
import org.apache.commons.vfs2.FileObject;
+import org.apache.commons.vfs2.FileType;
import org.nuiton.util.TimeLog;
import org.nuiton.util.Version;
@@ -269,8 +271,12 @@
}
}
+ public static enum ImportStructureType {
+ NORMAL, // normal structure with a db directory + optional meas_file directory
+ INLINE
+ }
- public void checkImportStructure(File file) {
+ public ImportStructureType checkImportStructure(File file) {
if (!file.exists()) {
throw new TuttiBusinessException(_("tutti.service.persistence.checkImportstructure.fileNotExist", file));
@@ -286,9 +292,48 @@
if (children.length != 1) {
throw new TuttiBusinessException(_("tutti.service.persistence.checkImportstructure.tooManyChildren", file));
}
+
+ ImportStructureType result;
+
fileObject = children[0];
- checkArchiveDb(file, fileObject, "db", true);
- checkArchiveDb(file, fileObject, "meas_files", false);
+ children = TuttiIOUtil.getChildren(fileObject, _("tutti.service.persistence.openArchive.error", file));
+
+ // try to detect a db directory
+ boolean dbDirectoyDetected = false;
+ for (FileObject child : children) {
+ FileName name = child.getName();
+ if (name.getBaseName().equals("db")) {
+ dbDirectoyDetected = true;
+ break;
+ }
+ }
+
+ if (dbDirectoyDetected) {
+
+ // NORMAL type (two directories)
+ result = ImportStructureType.NORMAL;
+
+ checkArchiveDb(file, fileObject, "db", true);
+ checkArchiveDb(file, fileObject, "meas_files", false);
+ } else {
+
+ // INLINE type
+ result = ImportStructureType.INLINE;
+
+ // should have no directory
+ for (FileObject child : children) {
+ FileType type = TuttiIOUtil.getType(child, "Could not get type of " + child);
+ if (FileType.FOLDER.equals(type)) {
+ throw new TuttiBusinessException(_("tutti.service.persistence.checkImportstructure.inlineForbidDirectory"));
+ }
+ }
+ }
+
+ if (log.isInfoEnabled()) {
+ log.info("Database import type: " + result);
+ }
+
+ return result;
}
protected void checkArchiveDb(File file,
@@ -312,10 +357,11 @@
/**
* Import a db from a zip archive (including the attachments and protocols).
*
- * @param file archive file where to store
+ * @param importStructureType type of structure of import
+ * @param file archive file where to store
* @since 1.0.2
*/
- public void importDb(File file) {
+ public void importDb(ImportStructureType importStructureType, File file) {
// can not do this operation on a opened db
Preconditions.checkState(!isDbLoaded());
@@ -330,13 +376,32 @@
if (log.isInfoEnabled()) {
log.info("Import db to " + target);
}
- FileObject fileObject = TuttiIOUtil.resolveFile("zip:" + file.getAbsolutePath(),
- _("tutti.service.persistence.getArchive.error", file));
+ FileObject fileObject = TuttiIOUtil.resolveFile(
+ "zip:" + file.getAbsolutePath(),
+ _("tutti.service.persistence.getArchive.error", file));
- FileObject[] children = TuttiIOUtil.getChildren(fileObject, _("tutti.service.persistence.openArchive.error", file));
+ FileObject[] children = TuttiIOUtil.getChildren(
+ fileObject,
+ _("tutti.service.persistence.openArchive.error", file));
fileObject = children[0];
+ switch (importStructureType) {
+
+ case NORMAL:
+ // nothing special to do
+ break;
+
+ case INLINE:
+ target = new File(target, "db");
+ TuttiIOUtil.forceMkdir(
+ target,
+ _("tutti.service.persistence.createDbDirectory.error", file));
+
+
+ break;
+ }
+
TuttiIOUtil.explode(fileObject,
target,
new AllFileSelector(),
@@ -572,8 +637,8 @@
// driver.getImplementationName() + "* opened.");
// }
- TIME_LOG.log(t0,"Persistence driver *" +
- driver.getImplementationName() + "* opened.");
+ TIME_LOG.log(t0, "Persistence driver *" +
+ driver.getImplementationName() + "* opened.");
}
@Override
@@ -592,8 +657,8 @@
// driver.getImplementationName() + "* closed.");
// }
- TIME_LOG.log(t0,"Persistence driver *" +
- driver.getImplementationName() + "* closed.");
+ TIME_LOG.log(t0, "Persistence driver *" +
+ driver.getImplementationName() + "* closed.");
}
//------------------------------------------------------------------------//
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-10-30 10:49:27 UTC (rev 1321)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-10-30 14:47:32 UTC (rev 1322)
@@ -140,9 +140,11 @@
tutti.service.operations.exportCatchesReport.specialRows.inertAndLivinngNotItemized.name=
tutti.service.persistence.checkArchiveDb.error=
tutti.service.persistence.checkImportstructure.fileNotExist=
+tutti.service.persistence.checkImportstructure.inlineForbidDirectory=
tutti.service.persistence.checkImportstructure.tooManyChildren=
tutti.service.persistence.copyDirectory.attachment.error=
tutti.service.persistence.copyDirectory.db.error=
+tutti.service.persistence.createDbDirectory.error=
tutti.service.persistence.exportDb.deleteTempDir.error=
tutti.service.persistence.exportDb.zip.error=
tutti.service.persistence.extractArchive.error=
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-10-30 10:49:27 UTC (rev 1321)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-10-30 14:47:32 UTC (rev 1322)
@@ -140,9 +140,11 @@
tutti.service.operations.exportCatchesReport.specialRows.inertAndLivinngNotItemized.name=Inerte et végétal
tutti.service.persistence.checkArchiveDb.error=L'archive de base de données %1s ne contient pas le dossier %2s
tutti.service.persistence.checkImportstructure.fileNotExist=L'archive de base de données %s n'existe pas
+tutti.service.persistence.checkImportstructure.inlineForbidDirectory=La structure d'un import simplifié interdit deux niveaux de répertoire
tutti.service.persistence.checkImportstructure.tooManyChildren=L'archive de base de données %s ne doit avoir qu'un sous-dossier
tutti.service.persistence.copyDirectory.attachment.error=Erreur lors de la copie du dossier des pièces jointes
tutti.service.persistence.copyDirectory.db.error=Erreur lors de la copie du dossier de base de données
+tutti.service.persistence.createDbDirectory.error=Impossible de créer le répertoire de base %s
tutti.service.persistence.exportDb.deleteTempDir.error=Erreur lors de la suppression du dossier temporaire
tutti.service.persistence.exportDb.zip.error=Erreur lors de la création de l'archive %s
tutti.service.persistence.extractArchive.error=Erreur lors de l'extraction de l'archive %s
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java 2013-10-30 10:49:27 UTC (rev 1321)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java 2013-10-30 14:47:32 UTC (rev 1322)
@@ -29,6 +29,7 @@
import fr.ifremer.tutti.persistence.ProgressionModel;
import fr.ifremer.tutti.persistence.TuttiPersistence;
import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig;
+import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction;
import fr.ifremer.tutti.ui.swing.content.MainUIHandler;
import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler;
@@ -65,6 +66,8 @@
protected Version applicationVersion;
+ protected PersistenceService.ImportStructureType importStructureType;
+
public ImportDbAction(MainUIHandler handler) {
super(handler, true);
setActionDescription(_("tutti.dbManager.action.importDb.tip"));
@@ -77,6 +80,7 @@
@Override
public boolean prepareAction() throws Exception {
+ importStructureType = null;
jdbcUrl = null;
dbVersion = applicationVersion = null;
closeDb = updateSchema = false;
@@ -113,7 +117,8 @@
progressionModel.setTotal(3);
setProgressionModel(progressionModel);
- getContext().getPersistenceService().checkImportStructure(importFile);
+ importStructureType =
+ getContext().getPersistenceService().checkImportStructure(importFile);
}
}
return doAction;
@@ -141,7 +146,7 @@
progressionModel.increments(_("tutti.importDb.step.unzipArchive"));
- getContext().getPersistenceService().importDb(importFile);
+ getContext().getPersistenceService().importDb(importStructureType, importFile);
// ------------------------------------------------------------------ //
// --- open db //
1
0