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
May 2013
- 4 participants
- 180 discussions
15 May '13
Author: kmorin
Date: 2013-05-15 14:43:52 +0200 (Wed, 15 May 2013)
New Revision: 947
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/947
Log:
refs #1873 [IMP/EXP] - Import/Export multi-postes
Added:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRow.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRow.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRow.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRow.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/ExportMultiPostAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/ImportMultiPostAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/ExportMultiPostAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/ImportMultiPostAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/ExportMultiPostAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/ImportMultiPostAction.java
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRow.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRow.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportExportService.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/operation/catches/MultiPostImportLogDialog.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/RemoveAccidentalBatchAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUI.css
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
Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRow.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRow.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRow.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -0,0 +1,112 @@
+package fr.ifremer.tutti.service.catches.multipost;
+
+import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
+
+import java.io.Serializable;
+
+/**
+ * @author kmorin <morin(a)codelutin.com>
+ * @since 2.2
+ */
+public class AccidentalCatchRow implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String BATCH_ID = "batchId";
+
+ public static final String SPECIES = "species";
+
+ public static final String GENDER = "gender";
+
+ public static final String WEIGHT = "weight";
+
+ public static final String SIZE = "size";
+
+ public static final String LENGTH_STEP_CARACTERISTIC = "lengthStepCaracteristic";
+
+ public static final String DEAD_OR_ALIVE = "deadOrAlive";
+
+ public static final String COMMENT = "comment";
+
+ protected String batchId;
+
+ protected Species species;
+
+ protected CaracteristicQualitativeValue gender;
+
+ protected Float weight;
+
+ protected Float size;
+
+ protected Caracteristic lengthStepCaracteristic;
+
+ protected CaracteristicQualitativeValue deadOrAlive;
+
+ protected String comment;
+
+ public String getBatchId() {
+ return batchId;
+ }
+
+ public void setBatchId(String batchId) {
+ this.batchId = batchId;
+ }
+
+ public Species getSpecies() {
+ return species;
+ }
+
+ public void setSpecies(Species species) {
+ this.species = species;
+ }
+
+ public CaracteristicQualitativeValue getGender() {
+ return gender;
+ }
+
+ public void setGender(CaracteristicQualitativeValue gender) {
+ this.gender = gender;
+ }
+
+ public Float getWeight() {
+ return weight;
+ }
+
+ public void setWeight(Float weight) {
+ this.weight = weight;
+ }
+
+ public Float getSize() {
+ return size;
+ }
+
+ public void setSize(Float size) {
+ this.size = size;
+ }
+
+ public Caracteristic getLengthStepCaracteristic() {
+ return lengthStepCaracteristic;
+ }
+
+ public void setLengthStepCaracteristic(Caracteristic lengthStepCaracteristic) {
+ this.lengthStepCaracteristic = lengthStepCaracteristic;
+ }
+
+ public CaracteristicQualitativeValue getDeadOrAlive() {
+ return deadOrAlive;
+ }
+
+ public void setDeadOrAlive(CaracteristicQualitativeValue deadOrAlive) {
+ this.deadOrAlive = deadOrAlive;
+ }
+
+ public String getComment() {
+ return comment;
+ }
+
+ public void setComment(String comment) {
+ this.comment = comment;
+ }
+}
Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -0,0 +1,145 @@
+package fr.ifremer.tutti.service.catches.multipost;
+
+/*
+ * #%L
+ * Tutti :: Service
+ * $Id: IndividualObservationExportModel.java 897 2013-04-30 14:28:59Z tchemit $
+ * $HeadURL: http://svn.forge.codelutin.com/svn/tutti/trunk/tutti-service/src/main/java/… $
+ * %%
+ * 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 com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import fr.ifremer.tutti.persistence.entities.TuttiEntities;
+import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
+import fr.ifremer.tutti.service.TuttiCsvUtil;
+import org.nuiton.util.csv.ValueFormatter;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Model of a individual observation export.
+ *
+ * @author kmorin <morin(a)codelutin.com>
+ * @since 2.2
+ */
+public class AccidentalCatchRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<AccidentalCatchRow> {
+
+ public AccidentalCatchRowModel(char separator) {
+ this(separator, null, null, null, null);
+ }
+
+ public AccidentalCatchRowModel(char separator,
+ List<Species> species,
+ List<CaracteristicQualitativeValue> genderValues,
+ List<Caracteristic> lengthStepCaracteristics,
+ List<CaracteristicQualitativeValue> deadOrAliveValues) {
+ super(separator);
+
+ ValueFormatter<CaracteristicQualitativeValue> cqvFormatter =
+ new ValueFormatter<CaracteristicQualitativeValue>() {
+ @Override
+ public String format(CaracteristicQualitativeValue value) {
+ String result = "";
+ if (value != null) {
+ result = value.getId();
+ }
+ return result;
+ }
+ };
+
+ newColumnForImportExport(AccidentalCatchRow.BATCH_ID);
+
+ newColumnForExport(AccidentalCatchRow.SPECIES,
+ new ValueFormatter<Species>() {
+ @Override
+ public String format(Species value) {
+ return value != null ? String.valueOf(value.getReferenceTaxonId()) : null;
+ }
+ });
+
+ if (species == null) {
+ species = Lists.newArrayList();
+ }
+ Map<String, Species> speciesMap = TuttiEntities.splitByTaxonId(species);
+ newForeignKeyColumn(AccidentalCatchRow.SPECIES,
+ Species.class,
+ Species.PROPERTY_REFERENCE_TAXON_ID,
+ speciesMap);
+
+ newColumnForExport(AccidentalCatchRow.GENDER,
+ cqvFormatter);
+
+ if (genderValues == null) {
+ genderValues = Lists.newArrayList();
+ }
+ Map<String, CaracteristicQualitativeValue> genderValuesMap =
+ Maps.uniqueIndex(genderValues, TuttiEntities.GET_ID);
+ newForeignKeyColumn(AccidentalCatchRow.GENDER,
+ CaracteristicQualitativeValue.class,
+ CaracteristicQualitativeValue.PROPERTY_ID,
+ genderValuesMap);
+
+ newColumnForImportExport(AccidentalCatchRow.WEIGHT, TuttiCsvUtil.FLOAT);
+
+ newColumnForImportExport(AccidentalCatchRow.SIZE, TuttiCsvUtil.FLOAT);
+
+ newColumnForExport(AccidentalCatchRow.LENGTH_STEP_CARACTERISTIC,
+ new ValueFormatter<Caracteristic>() {
+ @Override
+ public String format(Caracteristic value) {
+ return value != null ? value.getId() : "";
+ }
+ });
+
+ if (lengthStepCaracteristics == null) {
+ lengthStepCaracteristics = Lists.newArrayList();
+ }
+ Map<String, Caracteristic> caracteristicMap = Maps.uniqueIndex(lengthStepCaracteristics, TuttiEntities.GET_ID);
+ newForeignKeyColumn(AccidentalCatchRow.LENGTH_STEP_CARACTERISTIC,
+ Caracteristic.class,
+ Caracteristic.PROPERTY_ID,
+ caracteristicMap);
+
+ newColumnForExport(AccidentalCatchRow.DEAD_OR_ALIVE,
+ cqvFormatter);
+
+ if (deadOrAliveValues == null) {
+ deadOrAliveValues = Lists.newArrayList();
+ }
+ Map<String, CaracteristicQualitativeValue> deadOraliveValuesMap =
+ Maps.uniqueIndex(deadOrAliveValues, TuttiEntities.GET_ID);
+ newForeignKeyColumn(AccidentalCatchRow.DEAD_OR_ALIVE,
+ CaracteristicQualitativeValue.class,
+ CaracteristicQualitativeValue.PROPERTY_ID,
+ deadOraliveValuesMap);
+
+ newColumnForImportExport(AccidentalCatchRow.COMMENT);
+
+ }
+
+ @Override
+ public AccidentalCatchRow newEmptyInstance() {
+ return new AccidentalCatchRow();
+ }
+}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRow.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRow.java 2013-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRow.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -12,6 +12,8 @@
*/
public class AttachmentRow implements Serializable {
+ private static final long serialVersionUID = 1L;
+
public static final String ATTACHMENT_NAME = "name";
public static final String ATTACHMENT_BATCH_ID = "batchId";
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java 2013-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -20,17 +20,13 @@
public AttachmentRowModel(char separator, final File directory) {
super(separator);
- newColumnForImportExport(AttachmentRow.ATTACHMENT_BATCH_ID,
- AttachmentRow.ATTACHMENT_BATCH_ID);
+ newColumnForImportExport(AttachmentRow.ATTACHMENT_BATCH_ID);
- newColumnForImportExport(AttachmentRow.ATTACHMENT_NAME,
- AttachmentRow.ATTACHMENT_NAME);
+ newColumnForImportExport(AttachmentRow.ATTACHMENT_NAME);
- newColumnForImportExport(AttachmentRow.ATTACHMENT_COMMENT,
- AttachmentRow.ATTACHMENT_COMMENT);
+ newColumnForImportExport(AttachmentRow.ATTACHMENT_COMMENT);
newColumnForExport(AttachmentRow.ATTACHMENT_FILE,
- AttachmentRow.ATTACHMENT_FILE,
new ValueFormatter<File>() {
@Override
@@ -40,7 +36,6 @@
});
newMandatoryColumn(AttachmentRow.ATTACHMENT_FILE,
- AttachmentRow.ATTACHMENT_FILE,
new ValueParser<File>() {
@Override
public File parse(String value) throws ParseException {
Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRow.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRow.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRow.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -0,0 +1,50 @@
+package fr.ifremer.tutti.service.catches.multipost;
+
+import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+
+import java.io.Serializable;
+
+/**
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 2.3
+ */
+public class CaracteristicRow implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String BATCH_ID = "batchId";
+
+ public static final String CARACTERISTIC = "caracteristic";
+
+ public static final String VALUE = "value";
+
+ protected String batchId;
+
+ protected Caracteristic caracteristic;
+
+ protected Serializable value;
+
+ public String getBatchId() {
+ return batchId;
+ }
+
+ public void setBatchId(String batchId) {
+ this.batchId = batchId;
+ }
+
+ public Caracteristic getCaracteristic() {
+ return caracteristic;
+ }
+
+ public void setCaracteristic(Caracteristic caracteristic) {
+ this.caracteristic = caracteristic;
+ }
+
+ public Serializable getValue() {
+ return value;
+ }
+
+ public void setValue(Serializable value) {
+ this.value = value;
+ }
+}
Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -0,0 +1,75 @@
+package fr.ifremer.tutti.service.catches.multipost;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import fr.ifremer.tutti.persistence.entities.TuttiEntities;
+import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
+import fr.ifremer.tutti.service.TuttiCsvUtil;
+import org.nuiton.util.csv.ValueFormatter;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 2.3
+ */
+public class CaracteristicRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CaracteristicRow> {
+
+ public CaracteristicRowModel(char separator) {
+ this(separator, null);
+ }
+
+ public CaracteristicRowModel(char separator,
+ List<Caracteristic> caracteristics) {
+ super(separator);
+
+ newColumnForImportExport(CaracteristicRow.BATCH_ID);
+
+ newColumnForExport(CaracteristicRow.CARACTERISTIC,
+ new ValueFormatter<Caracteristic>() {
+ @Override
+ public String format(Caracteristic value) {
+ return value != null ? value.getId() : "";
+ }
+ });
+
+ if (caracteristics == null) {
+ caracteristics = Lists.newArrayList();
+ }
+ Map<String, Caracteristic> caracteristicMap = Maps.uniqueIndex(caracteristics, TuttiEntities.GET_ID);
+ newForeignKeyColumn(CaracteristicRow.CARACTERISTIC,
+ Caracteristic.class,
+ Caracteristic.PROPERTY_ID,
+ caracteristicMap);
+
+ newColumnForExport(CaracteristicRow.VALUE,
+ new ValueFormatter<Serializable>() {
+ @Override
+ public String format(Serializable value) {
+ String result = "";
+ if (value != null) {
+ if (CaracteristicQualitativeValue.class.isAssignableFrom(value.getClass())) {
+ CaracteristicQualitativeValue cqv = (CaracteristicQualitativeValue) value;
+ result = cqv.getId();
+
+ } else {
+ result = String.valueOf(value);
+ }
+ }
+ return result;
+ }
+ });
+
+ newMandatoryColumn(CaracteristicRow.VALUE,
+ TuttiCsvUtil.STRING);
+
+ }
+
+ @Override
+ public CaracteristicRow newEmptyInstance() {
+ return new CaracteristicRow();
+ }
+}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRow.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRow.java 2013-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRow.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -34,6 +34,8 @@
*/
public class CatchFrequencyRow implements Serializable {
+ private static final long serialVersionUID = 1L;
+
public static final String BATCH_ID = "batchId";
public static final String FREQUENCY_LENGTH_STEP_CARACTERISTIC = "lengthStepCaracteristic";
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java 2013-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -52,11 +52,9 @@
public CatchFrequencyRowModel(char separator, List<Caracteristic> caracteristics) {
super(separator);
- newColumnForImportExport(CatchFrequencyRow.BATCH_ID,
- CatchFrequencyRow.BATCH_ID);
+ newColumnForImportExport(CatchFrequencyRow.BATCH_ID);
newColumnForExport(CatchFrequencyRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC,
- CatchFrequencyRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC,
new ValueFormatter<Caracteristic>() {
@Override
public String format(Caracteristic value) {
@@ -69,21 +67,17 @@
}
Map<String, Caracteristic> caracteristicMap = Maps.uniqueIndex(caracteristics, TuttiEntities.GET_ID);
newForeignKeyColumn(CatchFrequencyRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC,
- CatchFrequencyRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC,
Caracteristic.class,
Caracteristic.PROPERTY_ID,
caracteristicMap);
newColumnForImportExport(CatchFrequencyRow.FREQUENCY_LENGTH_STEP,
- CatchFrequencyRow.FREQUENCY_LENGTH_STEP,
TuttiCsvUtil.FLOAT);
newColumnForImportExport(CatchFrequencyRow.FREQUENCY_NUMBER,
- CatchFrequencyRow.FREQUENCY_NUMBER,
TuttiCsvUtil.INTEGER);
newColumnForImportExport(CatchFrequencyRow.FREQUENCY_WEIGHT,
- CatchFrequencyRow.FREQUENCY_WEIGHT,
TuttiCsvUtil.FLOAT);
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java 2013-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -24,6 +24,8 @@
* #L%
*/
+import com.google.common.collect.Lists;
+import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.data.*;
import fr.ifremer.tutti.persistence.entities.referential.*;
import fr.ifremer.tutti.service.PersistenceService;
@@ -49,7 +51,7 @@
}
public CatchRowModel(char separator,
- Map<String, Species> speciesMap) {
+ List<Species> species) {
super(separator);
ValueFormatter<Serializable> caracteristicValueFormatter = new ValueFormatter<Serializable>() {
@@ -69,14 +71,11 @@
}
};
- newColumnForImportExport(CatchRow.ID,
- CatchRow.ID);
+ newColumnForImportExport(CatchRow.ID);
- newColumnForImportExport(CatchRow.PARENT_ID,
- CatchRow.PARENT_ID);
+ newColumnForImportExport(CatchRow.PARENT_ID);
newColumnForExport(CatchRow.SPECIES,
- CatchRow.SPECIES,
new ValueFormatter<Species>() {
@Override
public String format(Species value) {
@@ -84,69 +83,57 @@
}
});
+ if (species == null) {
+ species = Lists.newArrayList();
+ }
+ Map<String, Species> speciesMap = TuttiEntities.splitByTaxonId(species);
newForeignKeyColumn(CatchRow.SPECIES,
- CatchRow.SPECIES,
Species.class,
Species.PROPERTY_REFERENCE_TAXON_ID,
speciesMap);
newColumnForExport(CatchRow.SORTED_UNSORTED_SAMPLE_CATEGORY,
- CatchRow.SORTED_UNSORTED_SAMPLE_CATEGORY,
caracteristicValueFormatter);
newMandatoryColumn(CatchRow.SORTED_UNSORTED_SAMPLE_CATEGORY,
- CatchRow.SORTED_UNSORTED_SAMPLE_CATEGORY,
TuttiCsvUtil.STRING);
newColumnForExport(CatchRow.SIZE_SAMPLE_CATEGORY,
- CatchRow.SIZE_SAMPLE_CATEGORY,
caracteristicValueFormatter);
newMandatoryColumn(CatchRow.SIZE_SAMPLE_CATEGORY,
- CatchRow.SIZE_SAMPLE_CATEGORY,
TuttiCsvUtil.STRING);
newColumnForExport(CatchRow.SEX_SAMPLE_CATEGORY,
- CatchRow.SEX_SAMPLE_CATEGORY,
caracteristicValueFormatter);
newMandatoryColumn(CatchRow.SEX_SAMPLE_CATEGORY,
- CatchRow.SEX_SAMPLE_CATEGORY,
TuttiCsvUtil.STRING);
newColumnForExport(CatchRow.MATURITY_SAMPLE_CATEGORY,
- CatchRow.MATURITY_SAMPLE_CATEGORY,
caracteristicValueFormatter);
newMandatoryColumn(CatchRow.MATURITY_SAMPLE_CATEGORY,
- CatchRow.MATURITY_SAMPLE_CATEGORY,
TuttiCsvUtil.STRING);
newColumnForExport(CatchRow.AGE_SAMPLE_CATEGORY,
- CatchRow.AGE_SAMPLE_CATEGORY,
caracteristicValueFormatter);
newMandatoryColumn(CatchRow.AGE_SAMPLE_CATEGORY,
- CatchRow.AGE_SAMPLE_CATEGORY,
TuttiCsvUtil.STRING);
newColumnForImportExport(CatchRow.CATEGORY_WEIGHT,
- CatchRow.CATEGORY_WEIGHT,
TuttiCsvUtil.FLOAT);
newColumnForImportExport(CatchRow.WEIGHT,
- CatchRow.WEIGHT,
TuttiCsvUtil.FLOAT);
newColumnForImportExport(CatchRow.NUMBER,
- CatchRow.NUMBER,
TuttiCsvUtil.INTEGER);
- newColumnForImportExport(CatchRow.COMMENT,
- CatchRow.COMMENT);
+ newColumnForImportExport(CatchRow.COMMENT);
newColumnForImportExport(CatchRow.TO_CONFIRM,
- CatchRow.TO_CONFIRM,
TuttiCsvUtil.PRIMITIVE_BOOLEAN);
}
Copied: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRow.java (from rev 919, trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/IndividualObservationExportRow.java)
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRow.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRow.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -0,0 +1,118 @@
+package fr.ifremer.tutti.service.catches.multipost;
+
+import fr.ifremer.tutti.persistence.entities.data.Cruise;
+import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch;
+import fr.ifremer.tutti.persistence.entities.data.Program;
+import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import fr.ifremer.tutti.persistence.entities.referential.Gear;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
+import fr.ifremer.tutti.persistence.entities.referential.Vessel;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author kmorin <morin(a)codelutin.com>
+ * @since 2.2
+ */
+public class IndividualObservationRow implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String BATCH_ID = "batchId";
+
+ public static final String SPECIES = "species";
+
+ public static final String WEIGHT = "weight";
+
+ public static final String SIZE = "size";
+
+ public static final String LENGTH_STEP_CARACTERISTIC = "lengthStepCaracteristic";
+
+ public static final String SAMPLING_CODE = "samplingCode";
+
+ public static final String CALCIFIED_PIECE_SAMPLING_CODE = "calcifiedPieceSamplingCode";
+
+ public static final String COMMENT = "comment";
+
+ protected String batchId;
+
+ protected Species species;
+
+ protected Float weight;
+
+ protected Float size;
+
+ protected Caracteristic lengthStepCaracteristic;
+
+ protected String samplingCode;
+
+ protected String calcifiedPieceSamplingCode;
+
+ protected String comment;
+
+ public String getBatchId() {
+ return batchId;
+ }
+
+ public void setBatchId(String batchId) {
+ this.batchId = batchId;
+ }
+
+ public Species getSpecies() {
+ return species;
+ }
+
+ public void setSpecies(Species species) {
+ this.species = species;
+ }
+
+ public Float getWeight() {
+ return weight;
+ }
+
+ public void setWeight(Float weight) {
+ this.weight = weight;
+ }
+
+ public Float getSize() {
+ return size;
+ }
+
+ public void setSize(Float size) {
+ this.size = size;
+ }
+
+ public Caracteristic getLengthStepCaracteristic() {
+ return lengthStepCaracteristic;
+ }
+
+ public void setLengthStepCaracteristic(Caracteristic lengthStepCaracteristic) {
+ this.lengthStepCaracteristic = lengthStepCaracteristic;
+ }
+
+ public String getSamplingCode() {
+ return samplingCode;
+ }
+
+ public void setSamplingCode(String samplingCode) {
+ this.samplingCode = samplingCode;
+ }
+
+ public String getCalcifiedPieceSamplingCode() {
+ return calcifiedPieceSamplingCode;
+ }
+
+ public void setCalcifiedPieceSamplingCode(String calcifiedPieceSamplingCode) {
+ this.calcifiedPieceSamplingCode = calcifiedPieceSamplingCode;
+ }
+
+ public String getComment() {
+ return comment;
+ }
+
+ public void setComment(String comment) {
+ this.comment = comment;
+ }
+}
Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRow.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Copied: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java (from rev 919, trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/IndividualObservationExportModel.java)
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -0,0 +1,118 @@
+package fr.ifremer.tutti.service.catches.multipost;
+
+/*
+ * #%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 com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import fr.ifremer.tutti.persistence.entities.CaracteristicMap;
+import fr.ifremer.tutti.persistence.entities.TuttiEntities;
+import fr.ifremer.tutti.persistence.entities.data.Cruise;
+import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch;
+import fr.ifremer.tutti.persistence.entities.data.Program;
+import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import fr.ifremer.tutti.persistence.entities.referential.Gear;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
+import fr.ifremer.tutti.persistence.entities.referential.Vessel;
+import fr.ifremer.tutti.service.PersistenceService;
+import fr.ifremer.tutti.service.TuttiCsvUtil;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
+import org.nuiton.util.csv.ValueFormatter;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Model of a individual observation export.
+ *
+ * @author kmorin <morin(a)codelutin.com>
+ * @since 2.2
+ */
+public class IndividualObservationRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<IndividualObservationRow> {
+
+ public IndividualObservationRowModel(char separator) {
+ this(separator, null, null);
+ }
+
+ public IndividualObservationRowModel(char separator,
+ List<Species> species,
+ List<Caracteristic> lengthStepCaracteristics) {
+ super(separator);
+
+ newColumnForImportExport(IndividualObservationRow.BATCH_ID);
+
+ newColumnForExport(IndividualObservationRow.SPECIES,
+ new ValueFormatter<Species>() {
+ @Override
+ public String format(Species value) {
+ return value != null ? String.valueOf(value.getReferenceTaxonId()) : null;
+ }
+ });
+
+ if (species == null) {
+ species = Lists.newArrayList();
+ }
+ Map<String, Species> speciesMap = TuttiEntities.splitByTaxonId(species);
+ newForeignKeyColumn(IndividualObservationRow.SPECIES,
+ Species.class,
+ Species.PROPERTY_REFERENCE_TAXON_ID,
+ speciesMap);
+
+ newColumnForImportExport(IndividualObservationRow.WEIGHT, TuttiCsvUtil.FLOAT);
+
+ newColumnForImportExport(IndividualObservationRow.SIZE, TuttiCsvUtil.FLOAT);
+
+ newColumnForExport(IndividualObservationRow.LENGTH_STEP_CARACTERISTIC,
+ new ValueFormatter<Caracteristic>() {
+ @Override
+ public String format(Caracteristic value) {
+ return value != null ? value.getId() : "";
+ }
+ });
+
+ if (lengthStepCaracteristics == null) {
+ lengthStepCaracteristics = Lists.newArrayList();
+ }
+ Map<String, Caracteristic> caracteristicMap = Maps.uniqueIndex(lengthStepCaracteristics, TuttiEntities.GET_ID);
+ newForeignKeyColumn(IndividualObservationRow.LENGTH_STEP_CARACTERISTIC,
+ Caracteristic.class,
+ Caracteristic.PROPERTY_ID,
+ caracteristicMap);
+
+ newColumnForImportExport(IndividualObservationRow.SAMPLING_CODE);
+
+ newColumnForImportExport(IndividualObservationRow.CALCIFIED_PIECE_SAMPLING_CODE);
+
+ newColumnForImportExport(IndividualObservationRow.COMMENT);
+
+ }
+
+ @Override
+ public IndividualObservationRow newEmptyInstance() {
+ return new IndividualObservationRow();
+ }
+}
Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Copied: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRow.java (from rev 919, trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/MarineLitterExportRow.java)
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRow.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRow.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -0,0 +1,93 @@
+package fr.ifremer.tutti.service.catches.multipost;
+
+import fr.ifremer.tutti.persistence.entities.data.Cruise;
+import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch;
+import fr.ifremer.tutti.persistence.entities.data.Program;
+import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
+import fr.ifremer.tutti.persistence.entities.referential.Gear;
+import fr.ifremer.tutti.persistence.entities.referential.Vessel;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author kmorin <morin(a)codelutin.com>
+ * @since 2.2
+ */
+public class MarineLitterRow implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String BATCH_ID = "batchId";
+
+ public static final String CATEGORY = "category";
+
+ public static final String SIZE_CATEGORY = "sizeCategory";
+
+ public static final String NUMBER = "number";
+
+ public static final String WEIGHT = "weight";
+
+ public static final String COMMENT = "comment";
+
+ protected String batchId;
+
+ protected CaracteristicQualitativeValue category;
+
+ protected CaracteristicQualitativeValue sizeCategory;
+
+ protected Integer number;
+
+ protected Float weight;
+
+ protected String comment;
+
+ public String getBatchId() {
+ return batchId;
+ }
+
+ public void setBatchId(String batchId) {
+ this.batchId = batchId;
+ }
+
+ public CaracteristicQualitativeValue getCategory() {
+ return category;
+ }
+
+ public void setCategory(CaracteristicQualitativeValue category) {
+ this.category = category;
+ }
+
+ public CaracteristicQualitativeValue getSizeCategory() {
+ return sizeCategory;
+ }
+
+ public void setSizeCategory(CaracteristicQualitativeValue sizeCategory) {
+ this.sizeCategory = sizeCategory;
+ }
+
+ public Integer getNumber() {
+ return number;
+ }
+
+ public void setNumber(Integer number) {
+ this.number = number;
+ }
+
+ public Float getWeight() {
+ return weight;
+ }
+
+ public void setWeight(Float weight) {
+ this.weight = weight;
+ }
+
+ public String getComment() {
+ return comment;
+ }
+
+ public void setComment(String comment) {
+ this.comment = comment;
+ }
+}
Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRow.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Copied: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java (from rev 919, trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/MarineLitterExportModel.java)
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -0,0 +1,85 @@
+package fr.ifremer.tutti.service.catches.multipost;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import fr.ifremer.tutti.persistence.entities.TuttiEntities;
+import fr.ifremer.tutti.persistence.entities.data.*;
+import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
+import fr.ifremer.tutti.persistence.entities.referential.Gear;
+import fr.ifremer.tutti.persistence.entities.referential.Vessel;
+import fr.ifremer.tutti.service.PersistenceService;
+import fr.ifremer.tutti.service.TuttiCsvUtil;
+import org.apache.commons.collections.CollectionUtils;
+import org.nuiton.util.csv.ValueFormatter;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author kmorin <morin(a)codelutin.com>
+ * @since 2.2
+ */
+public class MarineLitterRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<MarineLitterRow> {
+
+ public MarineLitterRowModel(char separator) {
+ this(separator, null, null);
+ }
+
+ public MarineLitterRowModel(char separator,
+ List<CaracteristicQualitativeValue> categoryValues,
+ List<CaracteristicQualitativeValue> sizeCategoryValues) {
+ super(separator);
+
+ if (categoryValues == null) {
+ categoryValues = Lists.newArrayList();
+ }
+ Map<String, CaracteristicQualitativeValue> categoryValueMap =
+ Maps.uniqueIndex(categoryValues, TuttiEntities.GET_ID);
+
+ if (sizeCategoryValues == null) {
+ sizeCategoryValues = Lists.newArrayList();
+ }
+ Map<String, CaracteristicQualitativeValue> sizeCategoryValueMap =
+ Maps.uniqueIndex(sizeCategoryValues, TuttiEntities.GET_ID);
+
+ ValueFormatter<CaracteristicQualitativeValue> caracteristicQualitativeValueFormatter =
+ new ValueFormatter<CaracteristicQualitativeValue>() {
+ @Override
+ public String format(CaracteristicQualitativeValue value) {
+ String result = "";
+ if (value != null) {
+ result = value.getId();
+ }
+ return result;
+ }
+ };
+
+ newColumnForImportExport(MarineLitterRow.BATCH_ID);
+
+ newColumnForExport(MarineLitterRow.CATEGORY, caracteristicQualitativeValueFormatter);
+
+ newForeignKeyColumn(MarineLitterRow.CATEGORY,
+ CaracteristicQualitativeValue.class,
+ CaracteristicQualitativeValue.PROPERTY_ID,
+ categoryValueMap);
+
+ newColumnForExport(MarineLitterRow.SIZE_CATEGORY, caracteristicQualitativeValueFormatter);
+
+ newForeignKeyColumn(MarineLitterRow.SIZE_CATEGORY,
+ CaracteristicQualitativeValue.class,
+ CaracteristicQualitativeValue.PROPERTY_ID,
+ sizeCategoryValueMap);
+
+ newColumnForImportExport(MarineLitterRow.NUMBER, TuttiCsvUtil.INTEGER);
+
+ newColumnForImportExport(MarineLitterRow.WEIGHT, TuttiCsvUtil.FLOAT);
+
+ newColumnForImportExport(MarineLitterRow.COMMENT);
+ }
+
+ @Override
+ public MarineLitterRow newEmptyInstance() {
+ return new MarineLitterRow();
+ }
+}
Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportExportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportExportService.java 2013-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportExportService.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -33,10 +33,13 @@
import com.google.common.io.Files;
import fr.ifremer.tutti.TuttiIOUtil;
import fr.ifremer.tutti.TuttiTechnicalException;
+import fr.ifremer.tutti.persistence.entities.CaracteristicMap;
import fr.ifremer.tutti.persistence.entities.TuttiBeanFactory;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.data.*;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
+import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.service.*;
import org.apache.commons.io.IOUtils;
@@ -76,8 +79,16 @@
protected static final String BENTHOS_FILE = "benthos.csv";
+ protected static final String MARINE_LITTER_FILE = "marineLitter.csv";
+
+ protected static final String INDIVIDUAL_OBSERVATION_FILE = "individualObservation.csv";
+
+ protected static final String ACCIDENTAL_CATCHES_FILE = "accidentalCatches.csv";
+
protected static final String FREQUENCIES_FILE = "frequencies.csv";
+ protected static final String CARACTERISTIC_FILE = "caracteristics.csv";
+
protected PersistenceService persistenceService;
protected DecoratorService decoratorService;
@@ -153,6 +164,245 @@
}
/**
+ * Export marine litter batches.
+ *
+ * @param file the file to export the batches into
+ * @param operation the operation to export
+ */
+ public void exportMarineLitter(File file, FishingOperation operation) {
+
+ BatchContainer<MarineLitterBatch> marineLitterBatchContainer =
+ persistenceService.getRootMarineLitterBatch(operation.getId());
+
+ List<MarineLitterRow> rows = Lists.newArrayList();
+ List<AttachmentRow> attachmentRows = Lists.newArrayList();
+
+ for (MarineLitterBatch batch : marineLitterBatchContainer.getChildren()) {
+ MarineLitterRow row = new MarineLitterRow();
+
+ String id = UUID.randomUUID().toString();
+ row.setBatchId(id);
+
+ row.setCategory(batch.getMarineLitterCategory());
+ row.setSizeCategory(batch.getMarineLitterSizeCategory());
+ row.setNumber(batch.getNumber());
+ row.setWeight(batch.getWeight());
+ row.setComment(batch.getComment());
+
+ rows.add(row);
+
+ addAttachments(id, batch.getIdAsInt(), AttachementObjectTypeEnum.BATCH, attachmentRows);
+ }
+
+ MarineLitterRowModel csvModel = new MarineLitterRowModel(csvSeparator);
+
+ BufferedWriter writer = null;
+ File directory = Files.createTempDir();
+ List<File> file2zip = Lists.newArrayList();
+
+ File speciesFile = new File(directory, MARINE_LITTER_FILE);
+ file2zip.add(speciesFile);
+ try {
+ writer = Files.newWriter(speciesFile, Charsets.UTF_8);
+ Export export = Export.newExport(csvModel, rows);
+ export.write(writer);
+ writer.close();
+ } catch (Exception e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.export.batches.error", speciesFile), e);
+ } finally {
+ IOUtils.closeQuietly(writer);
+ }
+
+ exportAttachments(directory, file2zip, attachmentRows);
+
+ try {
+ ZipUtil.compressFiles(file, directory, file2zip);
+
+ } catch (IOException e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.export.error", file), e);
+
+ } finally {
+ TuttiIOUtil.deleteDirectory(directory, _("tutti.service.multipost.export.deleteTempDirectory.error", file));
+ }
+ }
+
+ /**
+ * Export individual observation batches.
+ *
+ * @param file the file to export the batches into
+ * @param operation the operation to export
+ */
+ public void exportIndividualObservation(File file, FishingOperation operation) {
+ List<IndividualObservationBatch> individualObservations =
+ persistenceService.getAllIndividualObservationBatch(operation.getId());
+
+ List<IndividualObservationRow> rows = Lists.newArrayList();
+ List<CaracteristicRow> caracteristicRows = Lists.newArrayList();
+ List<AttachmentRow> attachmentRows = Lists.newArrayList();
+
+ for (IndividualObservationBatch batch : individualObservations) {
+ IndividualObservationRow row = new IndividualObservationRow();
+
+ String id = UUID.randomUUID().toString();
+ row.setBatchId(id);
+
+ row.setSpecies(batch.getSpecies());
+ row.setWeight(batch.getWeight());
+ row.setSize(batch.getSize());
+ row.setLengthStepCaracteristic(batch.getLengthStepCaracteristic());
+ row.setSamplingCode(batch.getSamplingCode());
+ row.setCalcifiedPieceSamplingCode(batch.getCalcifiedPieceSamplingCode());
+ row.setComment(batch.getComment());
+
+ rows.add(row);
+
+ CaracteristicMap caracteristicMap = batch.getCaracteristics();
+ for (Caracteristic caracteristic : caracteristicMap.keySet()) {
+ CaracteristicRow caracteristicRow = new CaracteristicRow();
+ caracteristicRow.setBatchId(id);
+ caracteristicRow.setCaracteristic(caracteristic);
+ caracteristicRow.setValue(caracteristicMap.get(caracteristic));
+ caracteristicRows.add(caracteristicRow);
+ }
+
+ addAttachments(id, batch.getIdAsInt(), AttachementObjectTypeEnum.SAMPLE, attachmentRows);
+ }
+
+ IndividualObservationRowModel csvModel = new IndividualObservationRowModel(csvSeparator);
+
+ BufferedWriter writer = null;
+ File directory = Files.createTempDir();
+ List<File> file2zip = Lists.newArrayList();
+
+ File individualObservationFile = new File(directory, INDIVIDUAL_OBSERVATION_FILE);
+ file2zip.add(individualObservationFile);
+ try {
+ writer = Files.newWriter(individualObservationFile, Charsets.UTF_8);
+ Export export = Export.newExport(csvModel, rows);
+ export.write(writer);
+ writer.close();
+ } catch (Exception e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.export.batches.error", file), e);
+ } finally {
+ IOUtils.closeQuietly(writer);
+ }
+
+ CaracteristicRowModel caracteristicCsvModel = new CaracteristicRowModel(csvSeparator);
+ File caracteristicFile = new File(directory, CARACTERISTIC_FILE);
+ file2zip.add(caracteristicFile);
+ try {
+ writer = Files.newWriter(caracteristicFile, Charsets.UTF_8);
+ Export export = Export.newExport(caracteristicCsvModel, caracteristicRows);
+ export.write(writer);
+ writer.close();
+ } catch (Exception e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.export.batches.error", caracteristicFile), e);
+ } finally {
+ IOUtils.closeQuietly(writer);
+ }
+
+ exportAttachments(directory, file2zip, attachmentRows);
+
+ try {
+ ZipUtil.compressFiles(file, directory, file2zip);
+
+ } catch (IOException e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.export.error", file), e);
+
+ } finally {
+ TuttiIOUtil.deleteDirectory(directory, _("tutti.service.multipost.export.deleteTempDirectory.error", file));
+ }
+ }
+
+ /**
+ * Export accidental catch batches.
+ *
+ * @param file the file to export the batches into
+ * @param operation the operation to export
+ */
+ public void exportAccidentalCatch(File file, FishingOperation operation) {
+ List<AccidentalBatch> accidentalCatches =
+ persistenceService.getAllAccidentalBatch(operation.getId());
+
+ List<AccidentalCatchRow> rows = Lists.newArrayList();
+ List<CaracteristicRow> caracteristicRows = Lists.newArrayList();
+ List<AttachmentRow> attachmentRows = Lists.newArrayList();
+
+ for (AccidentalBatch batch : accidentalCatches) {
+ AccidentalCatchRow row = new AccidentalCatchRow();
+
+ String id = UUID.randomUUID().toString();
+ row.setBatchId(id);
+
+ row.setSpecies(batch.getSpecies());
+ row.setGender(batch.getGender());
+ row.setWeight(batch.getWeight());
+ row.setSize(batch.getSize());
+ row.setLengthStepCaracteristic(batch.getLengthStepCaracteristic());
+ row.setDeadOrAlive(batch.getDeadOrAlive());
+ row.setComment(batch.getComment());
+
+ rows.add(row);
+
+ CaracteristicMap caracteristicMap = batch.getCaracteristics();
+ for (Caracteristic caracteristic : caracteristicMap.keySet()) {
+ CaracteristicRow caracteristicRow = new CaracteristicRow();
+ caracteristicRow.setBatchId(id);
+ caracteristicRow.setCaracteristic(caracteristic);
+ caracteristicRow.setValue(caracteristicMap.get(caracteristic));
+ caracteristicRows.add(caracteristicRow);
+ }
+
+ addAttachments(id, batch.getIdAsInt(), AttachementObjectTypeEnum.SAMPLE, attachmentRows);
+ }
+
+ AccidentalCatchRowModel csvModel = new AccidentalCatchRowModel(csvSeparator);
+
+ BufferedWriter writer = null;
+ File directory = Files.createTempDir();
+ List<File> file2zip = Lists.newArrayList();
+
+ File accidentalCatchesFile = new File(directory, ACCIDENTAL_CATCHES_FILE);
+ file2zip.add(accidentalCatchesFile);
+ try {
+ writer = Files.newWriter(accidentalCatchesFile, Charsets.UTF_8);
+ Export export = Export.newExport(csvModel, rows);
+ export.write(writer);
+ writer.close();
+ } catch (Exception e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.export.batches.error", file), e);
+ } finally {
+ IOUtils.closeQuietly(writer);
+ }
+
+ CaracteristicRowModel caracteristicCsvModel = new CaracteristicRowModel(csvSeparator);
+ File caracteristicFile = new File(directory, CARACTERISTIC_FILE);
+ file2zip.add(caracteristicFile);
+ try {
+ writer = Files.newWriter(caracteristicFile, Charsets.UTF_8);
+ Export export = Export.newExport(caracteristicCsvModel, caracteristicRows);
+ export.write(writer);
+ writer.close();
+ } catch (Exception e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.export.batches.error", caracteristicFile), e);
+ } finally {
+ IOUtils.closeQuietly(writer);
+ }
+
+ exportAttachments(directory, file2zip, attachmentRows);
+
+ try {
+ ZipUtil.compressFiles(file, directory, file2zip);
+
+ } catch (IOException e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.export.error", file), e);
+
+ } finally {
+ TuttiIOUtil.deleteDirectory(directory, _("tutti.service.multipost.export.deleteTempDirectory.error", file));
+ }
+ }
+
+ /**
* Import species batches from a satellite post
*
* @param file the file to import the batches from
@@ -161,14 +411,13 @@
*/
public Collection<SpeciesBatch> importSpecies(File file, FishingOperation operation) {
- final Map<String, SpeciesBatch> notImportedBatches = Maps.newHashMap();
+ final Map<String, SpeciesBatch> notImportedBatches = Maps.newLinkedHashMap();
BatchContainer<SpeciesBatch> speciesBatches =
persistenceService.getRootSpeciesBatch(operation.getId());
TuttiDataContext dataContext = context.getDataContext();
List<Species> speciesList = dataContext.getReferentSpecies();
- Map<String, Species> speciesMap = TuttiEntities.splitByTaxonId(speciesList);
// map containing the batches by their persistence id
final Map<String, SpeciesBatch> batches = Maps.newHashMap();
@@ -195,7 +444,7 @@
}
CatchRowModel csvModel = new CatchRowModel(csvSeparator,
- speciesMap);
+ speciesList);
Import<CatchRow> importer = Import.newImport(csvModel, reader);
@@ -310,7 +559,7 @@
return result;
}
};
- importAttachments(tempDir, getObjetcIdFunction);
+ importAttachments(tempDir, getObjetcIdFunction, AttachementObjectTypeEnum.BATCH);
return notImportedBatches.values();
}
@@ -324,14 +573,13 @@
*/
public Collection<BenthosBatch> importBenthos(File file, FishingOperation operation) {
- final Map<String, BenthosBatch> notImportedBatches = Maps.newHashMap();
+ final Map<String, BenthosBatch> notImportedBatches = Maps.newLinkedHashMap();
BatchContainer<BenthosBatch> benthosBatches =
persistenceService.getRootBenthosBatch(operation.getId());
TuttiDataContext dataContext = context.getDataContext();
List<Species> speciesList = dataContext.getReferentSpecies();
- Map<String, Species> speciesMap = TuttiEntities.splitByTaxonId(speciesList);
// map containing the batches by their persistence id
final Map<String, BenthosBatch> batches = Maps.newHashMap();
@@ -358,7 +606,7 @@
}
CatchRowModel csvModel = new CatchRowModel(csvSeparator,
- speciesMap);
+ speciesList);
Import<CatchRow> importer = Import.newImport(csvModel, reader);
@@ -473,11 +721,343 @@
return result;
}
};
- importAttachments(tempDir, getObjetcIdFunction);
+ importAttachments(tempDir, getObjetcIdFunction, AttachementObjectTypeEnum.BATCH);
return notImportedBatches.values();
}
+ /**
+ * Import marine litter batches from a satellite post
+ *
+ * @param file the file to import the batches from
+ * @param operation the operation in which to add the batches
+ * @return the list of the marine litter which have not been imported, because there were concurrent batches
+ */
+ public Collection<MarineLitterBatch> importMarineLitter(File file, FishingOperation operation) {
+
+ final Map<String, MarineLitterBatch> notImportedBatches = Maps.newLinkedHashMap();
+
+ BatchContainer<MarineLitterBatch> marineLitterBatches =
+ persistenceService.getRootMarineLitterBatch(operation.getId());
+
+ // map containing the batches by their persistence id
+ final Map<String, MarineLitterBatch> batches = Maps.newHashMap();
+
+ File tempDir = Files.createTempDir();
+ FileObject fileObject = TuttiIOUtil.resolveFile("zip:" + file.getAbsolutePath(),
+ _("tutti.service.multipost.resolveArchive.error", file));
+
+ TuttiIOUtil.explode(fileObject,
+ tempDir,
+ new AllFileSelector(),
+ _("tutti.service.multipost.explodeArchive.error", file));
+
+ // Import batches
+
+ File marineLitterFile = new File(tempDir, MARINE_LITTER_FILE);
+
+ Reader reader = null;
+ try {
+ reader = Files.newReader(marineLitterFile, Charsets.UTF_8);
+
+ } catch (FileNotFoundException e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.import.batches.error", marineLitterFile), e);
+ }
+
+ List<CaracteristicQualitativeValue> categoryValues =
+ persistenceService.getMarineLitterCategoryCaracteristic().getQualitativeValue();
+ List<CaracteristicQualitativeValue> sizeCategoryValues =
+ persistenceService.getMarineLitterSizeCategoryCaracteristic().getQualitativeValue();
+
+ MarineLitterRowModel csvModel = new MarineLitterRowModel(csvSeparator,
+ categoryValues,
+ sizeCategoryValues);
+
+ Import<MarineLitterRow> importer = Import.newImport(csvModel, reader);
+
+ for (MarineLitterRow row : importer) {
+
+ // create batch
+ MarineLitterBatch batch = TuttiBeanFactory.newMarineLitterBatch();
+ batch.setFishingOperation(operation);
+
+ batch.setWeight(row.getWeight());
+ batch.setNumber(row.getNumber());
+ batch.setComment(row.getComment());
+ batch.setMarineLitterCategory(row.getCategory());
+ batch.setMarineLitterSizeCategory(row.getSizeCategory());
+
+ MarineLitterBatch existingBatch = null;
+ List<MarineLitterBatch> batchesToBrowse = marineLitterBatches.getChildren();
+
+ // check if the parent has already a batch with the caracteristic value
+ // and if the children batch are categorized with the same caracterstic
+ if (batchesToBrowse != null) {
+ for (MarineLitterBatch mlb : batchesToBrowse) {
+ if (mlb.getMarineLitterCategory().equals(batch.getMarineLitterCategory())
+ && mlb.getMarineLitterSizeCategory().equals(batch.getMarineLitterSizeCategory())) {
+
+ existingBatch = mlb;
+ batches.put(row.getBatchId(), mlb);
+ notImportedBatches.put(row.getBatchId(), batch);
+ break;
+ }
+ }
+ }
+
+ if (existingBatch == null) {
+ batch = persistenceService.createMarineLitterBatch(batch);
+ batches.put(row.getBatchId(), batch);
+ }
+ }
+
+ // Import attachments
+ Function<AttachmentRow, Integer> getObjetcIdFunction = new Function<AttachmentRow, Integer>() {
+ @Override
+ public Integer apply(AttachmentRow input) {
+ Integer result = null;
+ if (notImportedBatches.get(input.getBatchId()) == null) {
+ MarineLitterBatch batch = batches.get(input.getBatchId());
+ if (batch != null) {
+ result = batch.getIdAsInt();
+ }
+ }
+ return result;
+ }
+ };
+ importAttachments(tempDir, getObjetcIdFunction, AttachementObjectTypeEnum.BATCH);
+
+ return notImportedBatches.values();
+ }
+
+ /**
+ * Import individual observation batches from a satellite post
+ *
+ * @param file the file to import the batches from
+ * @param operation the operation in which to add the batches
+ */
+ public void importIndividualObservation(File file, FishingOperation operation) {
+
+ // map containing the batches by their persistence id
+ final Map<String, IndividualObservationBatch> batches = Maps.newLinkedHashMap();
+
+ File tempDir = Files.createTempDir();
+ FileObject fileObject = TuttiIOUtil.resolveFile("zip:" + file.getAbsolutePath(),
+ _("tutti.service.multipost.resolveArchive.error", file));
+
+ TuttiIOUtil.explode(fileObject,
+ tempDir,
+ new AllFileSelector(),
+ _("tutti.service.multipost.explodeArchive.error", file));
+
+ // Import batches
+
+ File observationFile = new File(tempDir, INDIVIDUAL_OBSERVATION_FILE);
+
+ Reader reader = null;
+ try {
+ reader = Files.newReader(observationFile, Charsets.UTF_8);
+
+ } catch (FileNotFoundException e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.import.batches.error", observationFile), e);
+ }
+
+ TuttiDataContext dataContext = context.getDataContext();
+ List<Species> speciesList = dataContext.getReferentSpecies();
+ List<Caracteristic> caracteristics = dataContext.getCaracteristics();
+
+ IndividualObservationRowModel csvModel = new IndividualObservationRowModel(csvSeparator,
+ speciesList,
+ caracteristics);
+ Import<IndividualObservationRow> importer = Import.newImport(csvModel, reader);
+
+ for (IndividualObservationRow row : importer) {
+
+ // create batch
+ IndividualObservationBatch batch = TuttiBeanFactory.newIndividualObservationBatch();
+ batch.setFishingOperation(operation);
+
+ batch.setSpecies(row.getSpecies());
+ batch.setWeight(row.getWeight());
+ batch.setSize(row.getSize());
+ batch.setLengthStepCaracteristic(row.getLengthStepCaracteristic());
+ batch.setSamplingCode(row.getSamplingCode());
+ batch.setCalcifiedPieceSamplingCode(row.getCalcifiedPieceSamplingCode());
+ batch.setComment(row.getComment());
+ batch.setCaracteristics(new CaracteristicMap());
+
+ batches.put(row.getBatchId(), batch);
+ }
+
+ // Import caracteristics
+
+ File caracteristicFile = new File(tempDir, CARACTERISTIC_FILE);
+ try {
+ reader = Files.newReader(caracteristicFile, Charsets.UTF_8);
+
+ } catch (FileNotFoundException e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.import.caracteristics.error", caracteristicFile), e);
+ }
+
+ CaracteristicRowModel caracteristicModel = new CaracteristicRowModel(csvSeparator,
+ caracteristics);
+
+ Import<CaracteristicRow> caracteristicImporter = Import.newImport(caracteristicModel, reader);
+
+ for (CaracteristicRow caracteristicRow : caracteristicImporter) {
+ IndividualObservationBatch batch = batches.get(caracteristicRow.getBatchId());
+ if (batch != null) {
+ Caracteristic caracteristic = caracteristicRow.getCaracteristic();
+ Serializable value = caracteristicRow.getValue();
+
+ switch (caracteristic.getCaracteristicType()) {
+ case QUALITATIVE:
+ value = TuttiEntities.getQualitativeValue(caracteristic, Integer.parseInt(value.toString()));
+ break;
+
+ case NUMBER:
+ value = Float.parseFloat(value.toString());
+ break;
+ }
+ CaracteristicMap map = batch.getCaracteristics();
+ map.put(caracteristic, value);
+ }
+ }
+ for (IndividualObservationBatch batch : batches.values()) {
+ persistenceService.createIndividualObservationBatch(batch);
+ }
+
+ // Import attachments
+ Function<AttachmentRow, Integer> getObjetcIdFunction = new Function<AttachmentRow, Integer>() {
+ @Override
+ public Integer apply(AttachmentRow input) {
+ Integer result = null;
+ IndividualObservationBatch batch = batches.get(input.getBatchId());
+ if (batch != null) {
+ result = batch.getIdAsInt();
+ }
+ return result;
+ }
+ };
+ importAttachments(tempDir, getObjetcIdFunction, AttachementObjectTypeEnum.SAMPLE);
+ }
+
+ /**
+ * Import accidental catches batches from a satellite post
+ *
+ * @param file the file to import the batches from
+ * @param operation the operation in which to add the batches
+ */
+ public void importAccidentalCatches(File file, FishingOperation operation) {
+
+ // map containing the batches by their persistence id
+ final Map<String, AccidentalBatch> batches = Maps.newLinkedHashMap();
+
+ File tempDir = Files.createTempDir();
+ FileObject fileObject = TuttiIOUtil.resolveFile("zip:" + file.getAbsolutePath(),
+ _("tutti.service.multipost.resolveArchive.error", file));
+
+ TuttiIOUtil.explode(fileObject,
+ tempDir,
+ new AllFileSelector(),
+ _("tutti.service.multipost.explodeArchive.error", file));
+
+ // Import batches
+
+ File accidentalFile = new File(tempDir, ACCIDENTAL_CATCHES_FILE);
+
+ Reader reader = null;
+ try {
+ reader = Files.newReader(accidentalFile, Charsets.UTF_8);
+
+ } catch (FileNotFoundException e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.import.batches.error", accidentalFile), e);
+ }
+
+ TuttiDataContext dataContext = context.getDataContext();
+ List<Species> speciesList = dataContext.getReferentSpecies();
+ List<CaracteristicQualitativeValue> genderValues = dataContext.getGenderValues();
+ List<Caracteristic> caracteristics = dataContext.getCaracteristics();
+ List<CaracteristicQualitativeValue> dedOrAliveValues = dataContext.getDeadOrAliveValues();
+
+ AccidentalCatchRowModel csvModel = new AccidentalCatchRowModel(csvSeparator,
+ speciesList,
+ genderValues,
+ caracteristics,
+ dedOrAliveValues);
+ Import<AccidentalCatchRow> importer = Import.newImport(csvModel, reader);
+
+ for (AccidentalCatchRow row : importer) {
+
+ // create batch
+ AccidentalBatch batch = TuttiBeanFactory.newAccidentalBatch();
+ batch.setFishingOperation(operation);
+
+ batch.setSpecies(row.getSpecies());
+ batch.setGender(row.getGender());
+ batch.setWeight(row.getWeight());
+ batch.setSize(row.getSize());
+ batch.setLengthStepCaracteristic(row.getLengthStepCaracteristic());
+ batch.setDeadOrAlive(row.getDeadOrAlive());
+ batch.setComment(row.getComment());
+ batch.setCaracteristics(new CaracteristicMap());
+
+ batches.put(row.getBatchId(), batch);
+ }
+
+ // Import caracteristics
+
+ File caracteristicFile = new File(tempDir, CARACTERISTIC_FILE);
+ try {
+ reader = Files.newReader(caracteristicFile, Charsets.UTF_8);
+
+ } catch (FileNotFoundException e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.import.caracteristics.error", caracteristicFile), e);
+ }
+
+ CaracteristicRowModel caracteristicModel = new CaracteristicRowModel(csvSeparator,
+ caracteristics);
+
+ Import<CaracteristicRow> caracteristicImporter = Import.newImport(caracteristicModel, reader);
+
+ for (CaracteristicRow caracteristicRow : caracteristicImporter) {
+ AccidentalBatch batch = batches.get(caracteristicRow.getBatchId());
+ if (batch != null) {
+ Caracteristic caracteristic = caracteristicRow.getCaracteristic();
+ Serializable value = caracteristicRow.getValue();
+
+ switch (caracteristic.getCaracteristicType()) {
+ case QUALITATIVE:
+ value = TuttiEntities.getQualitativeValue(caracteristic, Integer.parseInt(value.toString()));
+ break;
+
+ case NUMBER:
+ value = Float.parseFloat(value.toString());
+ break;
+ }
+ CaracteristicMap map = batch.getCaracteristics();
+ map.put(caracteristic, value);
+ }
+ }
+ for (AccidentalBatch batch : batches.values()) {
+ persistenceService.createAccidentalBatch(batch);
+ }
+
+ // Import attachments
+ Function<AttachmentRow, Integer> getObjetcIdFunction = new Function<AttachmentRow, Integer>() {
+ @Override
+ public Integer apply(AttachmentRow input) {
+ Integer result = null;
+ AccidentalBatch batch = batches.get(input.getBatchId());
+ if (batch != null) {
+ result = batch.getIdAsInt();
+ }
+ return result;
+ }
+ };
+ importAttachments(tempDir, getObjetcIdFunction, AttachementObjectTypeEnum.SAMPLE);
+ }
+
/*
* Protected methods
*/
@@ -495,17 +1075,6 @@
File directory = Files.createTempDir();
List<File> file2zip = Lists.newArrayList();
- File attachmentDirectory = new File(directory, ATTACHMENTS_DIRECTORY);
- file2zip.add(attachmentDirectory);
- for (AttachmentRow attachmentRow : attachmentRows) {
- File attachmentFile = attachmentRow.getFile();
- File destFile = new File(attachmentDirectory, attachmentFile.getName());
- TuttiIOUtil.copyFile(attachmentFile,
- destFile,
- _("tutti.service.multipost.attachment.copy.error", attachmentFile));
- file2zip.add(destFile);
- }
-
File speciesFile = new File(directory, batchFile);
file2zip.add(speciesFile);
try {
@@ -533,20 +1102,8 @@
IOUtils.closeQuietly(writer);
}
- File attachmentFile = new File(directory, ATTACHMENTS_FILE);
- file2zip.add(attachmentFile);
- try {
- writer = Files.newWriter(attachmentFile, Charsets.UTF_8);
- Export export = Export.newExport(csvAttachmentModel, attachmentRows);
- export.write(writer);
- writer.close();
+ exportAttachments(directory, file2zip, attachmentRows);
- } catch (Exception e) {
- throw new TuttiTechnicalException(_("tutti.service.multipost.export.attachments.error", attachmentFile), e);
- } finally {
- IOUtils.closeQuietly(writer);
- }
-
try {
ZipUtil.compressFiles(file, directory, file2zip);
@@ -648,6 +1205,38 @@
}
}
+ protected void exportAttachments(File directory, List<File> file2zip, List<AttachmentRow> attachmentRows) {
+
+ AttachmentRowModel csvAttachmentModel = new AttachmentRowModel(csvSeparator);
+
+ File attachmentDirectory = new File(directory, ATTACHMENTS_DIRECTORY);
+ attachmentDirectory.mkdir();
+ file2zip.add(attachmentDirectory);
+ for (AttachmentRow attachmentRow : attachmentRows) {
+ File attachmentFile = attachmentRow.getFile();
+ File destFile = new File(attachmentDirectory, attachmentFile.getName());
+ TuttiIOUtil.copyFile(attachmentFile,
+ destFile,
+ _("tutti.service.multipost.attachment.copy.error", attachmentFile));
+ file2zip.add(destFile);
+ }
+
+ File attachmentFile = new File(directory, ATTACHMENTS_FILE);
+ file2zip.add(attachmentFile);
+ Writer writer = null;
+ try {
+ writer = Files.newWriter(attachmentFile, Charsets.UTF_8);
+ Export export = Export.newExport(csvAttachmentModel, attachmentRows);
+ export.write(writer);
+ writer.close();
+
+ } catch (Exception e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.export.attachments.error", attachmentFile), e);
+ } finally {
+ IOUtils.closeQuietly(writer);
+ }
+ }
+
protected void addFrequencies(String rowId,
String batchId,
List<CatchFrequencyRow> frequencyRows) {
@@ -723,7 +1312,9 @@
return new Object[]{categoryType, value};
}
- protected void importAttachments(File directory, Function<AttachmentRow, Integer> getObjetcIdFunction) {
+ protected void importAttachments(File directory,
+ Function<AttachmentRow, Integer> getObjetcIdFunction,
+ AttachementObjectTypeEnum objectType) {
File attachmentFile = new File(directory, ATTACHMENTS_FILE);
File attachmentDirectory = new File(directory, ATTACHMENTS_DIRECTORY);
Reader reader;
@@ -745,7 +1336,7 @@
Attachment attachment = TuttiBeanFactory.newAttachment();
attachment.setName(row.getName());
attachment.setComment(row.getComment());
- attachment.setObjectType(AttachementObjectTypeEnum.BATCH);
+ attachment.setObjectType(objectType);
attachment.setObjectId(objectId);
Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties
===================================================================
--- trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-05-15 12:43:52 UTC (rev 947)
@@ -94,6 +94,7 @@
tutti.service.multipost.export.species.error=
tutti.service.multipost.import.attachments.error=
tutti.service.multipost.import.batches.error=
+tutti.service.multipost.import.caracteristics.error=
tutti.service.multipost.import.frequencies.error=
tutti.service.multipost.import.species.error=
tutti.service.multipost.resolveArchive.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-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-05-15 12:43:52 UTC (rev 947)
@@ -90,6 +90,7 @@
tutti.service.multipost.export.frequencies.error=Erreur lors de l'export des mensurations
tutti.service.multipost.import.attachments.error=Erreur lors de l'import des pièces-jointes
tutti.service.multipost.import.batches.error=Erreur lors de l'import des lots
+tutti.service.multipost.import.caracteristics.error=Erreur lors de l'import des caractéristiques
tutti.service.multipost.import.frequencies.error=Erreur lors de l'import des mensurations
tutti.service.multipost.resolveArchive.error=Erreur lors de l'ouverture de l'archive
tutti.service.operations.computeWeights.error.benthos.incoherentCategoryWeight=Le poids total des mensurations d'un lot du benthos est supérieur au poids de la catégorie
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/MultiPostImportLogDialog.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/MultiPostImportLogDialog.css 2013-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/MultiPostImportLogDialog.css 2013-05-15 12:43:52 UTC (rev 947)
@@ -20,6 +20,8 @@
}
#closeButton {
+ actionIcon: validate;
text: "tutti.multiPostImportLog.close";
- actionIcon: close;
+ toolTipText: "tutti.multiPostImportLog.close.tip";
+ i18nMnemonic: "tutti.multiPostImportLog.close.mnemonic";
}
\ No newline at end of file
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUI.css 2013-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUI.css 2013-05-15 12:43:52 UTC (rev 947)
@@ -44,7 +44,7 @@
text: "tutti.editAccidentalBatch.action.importMultiPost";
toolTipText: "tutti.editAccidentalBatch.action.importMultiPost.tip";
i18nMnemonic: "tutti.editAccidentalBatch.action.importMultiPost.mnemonic";
- /*_tuttiAction: {ImportMultiPostAction.class};*/
+ _tuttiAction: {ImportMultiPostAction.class};
_help: {"tutti.editAccidentalBatch.action.importMultiPost.help"};
}
@@ -53,7 +53,7 @@
text: "tutti.editAccidentalBatch.action.exportMultiPost";
toolTipText: "tutti.editAccidentalBatch.action.exportMultiPost.tip";
i18nMnemonic: "tutti.editAccidentalBatch.action.exportMultiPost.mnemonic";
- /*_tuttiAction: {ExportMultiPostAction.class};*/
+ _tuttiAction: {ExportMultiPostAction.class};
_help: {"tutti.editAccidentalBatch.action.exportMultiPost.help"};
}
Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/ExportMultiPostAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/ExportMultiPostAction.java (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/ExportMultiPostAction.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -0,0 +1,48 @@
+package fr.ifremer.tutti.ui.swing.content.operation.catches.accidental;
+
+import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractExportMultiPostAction;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 2.2
+ */
+public class ExportMultiPostAction
+ extends AbstractExportMultiPostAction<AccidentalBatchUIModel, AccidentalBatchUI, AccidentalBatchUIHandler> {
+
+ public ExportMultiPostAction(AccidentalBatchUIHandler handler) {
+ super(handler);
+ }
+
+ @Override
+ protected String getFileExtension() {
+ return "tuttiAccidental";
+ }
+
+ @Override
+ protected String getFileExtensionDescription() {
+ return _("tutti.common.file.tuttiAccidental");
+ }
+
+ @Override
+ protected String getFileChooserTitle() {
+ return _("tutti.editAccidentalBatch.action.exportMultiPost.destinationFile.title");
+ }
+
+ @Override
+ protected String getFileChooserButton() {
+ return _("tutti.editAccidentalBatch.action.exportMultiPost.destinationFile.button");
+ }
+
+ @Override
+ protected void doAction() throws Exception {
+ multiPostImportExportService.exportAccidentalCatch(file, currentOperation);
+ }
+
+ @Override
+ public void postSuccessAction() {
+ super.postSuccessAction();
+ sendMessage(_("tutti.editAccidentalBatch.action.exportMultiPost.success", file));
+ }
+}
Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/ImportMultiPostAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/ImportMultiPostAction.java (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/ImportMultiPostAction.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -0,0 +1,53 @@
+package fr.ifremer.tutti.ui.swing.content.operation.catches.accidental;
+
+import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractImportMultiPostAction;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUI;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUIHandler;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUIModel;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 2.2
+ */
+public class ImportMultiPostAction
+ extends AbstractImportMultiPostAction<AccidentalBatchUIModel, AccidentalBatchUI, AccidentalBatchUIHandler> {
+
+ public ImportMultiPostAction(AccidentalBatchUIHandler handler) {
+ super(handler);
+ }
+
+ @Override
+ protected String getFileExtension() {
+ return "tuttiAccidental";
+ }
+
+ @Override
+ protected String getFileExtensionDescription() {
+ return _("tutti.common.file.tuttiAccidental");
+ }
+
+ @Override
+ protected String getFileChooserTitle() {
+ return _("tutti.editAccidentalBatch.action.importMultiPost.sourceFile.title");
+ }
+
+ @Override
+ protected String getFileChooserButton() {
+ return _("tutti.editAccidentalBatch.action.importMultiPost.sourceFile.button");
+ }
+
+ @Override
+ protected void importBatches(FishingOperation operation) {
+ multiPostImportExportService.importAccidentalCatches(file, operation);
+ }
+
+ @Override
+ public void postSuccessAction() {
+ super.postSuccessAction();
+
+ sendMessage(_("tutti.editAccidentalBatch.action.importMultiPost.success", file));
+ }
+}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/RemoveAccidentalBatchAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/RemoveAccidentalBatchAction.java 2013-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/RemoveAccidentalBatchAction.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -68,13 +68,13 @@
String id = selectedBatch.getId();
if (log.isInfoEnabled()) {
- log.info("Remove marineLitter with id: " + id);
+ log.info("Remove accidental with id: " + id);
}
TuttiPersistence persistenceService =
getContext().getPersistenceService();
- persistenceService.deleteMarineLitterBatch(id);
+ persistenceService.deleteAccidentalBatch(id);
}
}
Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/ExportMultiPostAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/ExportMultiPostAction.java (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/ExportMultiPostAction.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -0,0 +1,51 @@
+package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation;
+
+import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractExportMultiPostAction;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.marinelitter.MarineLitterBatchUI;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.marinelitter.MarineLitterBatchUIHandler;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.marinelitter.MarineLitterBatchUIModel;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 2.2
+ */
+public class ExportMultiPostAction
+ extends AbstractExportMultiPostAction<IndividualObservationBatchUIModel, IndividualObservationBatchUI, IndividualObservationBatchUIHandler> {
+
+ public ExportMultiPostAction(IndividualObservationBatchUIHandler handler) {
+ super(handler);
+ }
+
+ @Override
+ protected String getFileExtension() {
+ return "tuttiIndividualObservation";
+ }
+
+ @Override
+ protected String getFileExtensionDescription() {
+ return _("tutti.common.file.tuttiIndividualObservation");
+ }
+
+ @Override
+ protected String getFileChooserTitle() {
+ return _("tutti.editIndividualObservationBatch.action.exportMultiPost.destinationFile.title");
+ }
+
+ @Override
+ protected String getFileChooserButton() {
+ return _("tutti.editIndividualObservationBatch.action.exportMultiPost.destinationFile.button");
+ }
+
+ @Override
+ protected void doAction() throws Exception {
+ multiPostImportExportService.exportIndividualObservation(file, currentOperation);
+ }
+
+ @Override
+ public void postSuccessAction() {
+ super.postSuccessAction();
+ sendMessage(_("tutti.editIndividualObservationBatch.action.exportMultiPost.success", file));
+ }
+}
Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/ImportMultiPostAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/ImportMultiPostAction.java (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/ImportMultiPostAction.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -0,0 +1,59 @@
+package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation;
+
+import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractImportMultiPostAction;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.MultiPostImportLogDialog;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.marinelitter.MarineLitterBatchUI;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.marinelitter.MarineLitterBatchUIHandler;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.marinelitter.MarineLitterBatchUIModel;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.Collection;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 2.2
+ */
+public class ImportMultiPostAction
+ extends AbstractImportMultiPostAction<IndividualObservationBatchUIModel, IndividualObservationBatchUI, IndividualObservationBatchUIHandler> {
+
+ public ImportMultiPostAction(IndividualObservationBatchUIHandler handler) {
+ super(handler);
+ }
+
+ @Override
+ protected String getFileExtension() {
+ return "tuttiIndividualObservation";
+ }
+
+ @Override
+ protected String getFileExtensionDescription() {
+ return _("tutti.common.file.tuttiIndividualObservation");
+ }
+
+ @Override
+ protected String getFileChooserTitle() {
+ return _("tutti.editIndividualObservationBatch.action.importMultiPost.sourceFile.title");
+ }
+
+ @Override
+ protected String getFileChooserButton() {
+ return _("tutti.editIndividualObservationBatch.action.importMultiPost.sourceFile.button");
+ }
+
+ @Override
+ protected void importBatches(FishingOperation operation) {
+ multiPostImportExportService.importIndividualObservation(file, operation);
+ }
+
+ @Override
+ public void postSuccessAction() {
+ super.postSuccessAction();
+
+ sendMessage(_("tutti.editIndividualObservationBatch.action.importMultiPost.success", file));
+ }
+}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.css 2013-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.css 2013-05-15 12:43:52 UTC (rev 947)
@@ -37,7 +37,7 @@
text: "tutti.editIndividualObservationBatch.action.importMultiPost";
toolTipText: "tutti.editIndividualObservationBatch.action.importMultiPost.tip";
i18nMnemonic: "tutti.editIndividualObservationBatch.action.importMultiPost.mnemonic";
- /*_tuttiAction: {ImportMultiPostAction.class};*/
+ _tuttiAction: {ImportMultiPostAction.class};
_help: {"tutti.editIndividualObservationBatch.action.importMultiPost.help"};
}
@@ -46,7 +46,7 @@
text: "tutti.editIndividualObservationBatch.action.exportMultiPost";
toolTipText: "tutti.editIndividualObservationBatch.action.exportMultiPost.tip";
i18nMnemonic: "tutti.editIndividualObservationBatch.action.exportMultiPost.mnemonic";
- /*_tuttiAction: {ExportMultiPostAction.class};*/
+ _tuttiAction: {ExportMultiPostAction.class};
_help: {"tutti.editIndividualObservationBatch.action.exportMultiPost.help"};
}
Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/ExportMultiPostAction.java (from rev 945, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ExportMultiPostAction.java)
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/ExportMultiPostAction.java (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/ExportMultiPostAction.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -0,0 +1,50 @@
+package fr.ifremer.tutti.ui.swing.content.operation.catches.marinelitter;
+
+import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractExportMultiPostAction;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIHandler;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIModel;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 2.2
+ */
+public class ExportMultiPostAction extends AbstractExportMultiPostAction<MarineLitterBatchUIModel, MarineLitterBatchUI, MarineLitterBatchUIHandler> {
+
+ public ExportMultiPostAction(MarineLitterBatchUIHandler handler) {
+ super(handler);
+ }
+
+ @Override
+ protected String getFileExtension() {
+ return "tuttiMarineLitter";
+ }
+
+ @Override
+ protected String getFileExtensionDescription() {
+ return _("tutti.common.file.tuttiMarineLitter");
+ }
+
+ @Override
+ protected String getFileChooserTitle() {
+ return _("tutti.editMarineLitterBatch.action.exportMultiPost.destinationFile.title");
+ }
+
+ @Override
+ protected String getFileChooserButton() {
+ return _("tutti.editMarineLitterBatch.action.exportMultiPost.destinationFile.button");
+ }
+
+ @Override
+ protected void doAction() throws Exception {
+ multiPostImportExportService.exportMarineLitter(file, currentOperation);
+ }
+
+ @Override
+ public void postSuccessAction() {
+ super.postSuccessAction();
+ sendMessage(_("tutti.editMarineLitterBatch.action.exportMultiPost.success", file));
+ }
+}
Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/ImportMultiPostAction.java (from rev 945, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportMultiPostAction.java)
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/ImportMultiPostAction.java (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/ImportMultiPostAction.java 2013-05-15 12:43:52 UTC (rev 947)
@@ -0,0 +1,77 @@
+package fr.ifremer.tutti.ui.swing.content.operation.catches.marinelitter;
+
+import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch;
+import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractImportMultiPostAction;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.MultiPostImportLogDialog;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.Collection;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 2.2
+ */
+public class ImportMultiPostAction extends AbstractImportMultiPostAction<MarineLitterBatchUIModel, MarineLitterBatchUI, MarineLitterBatchUIHandler> {
+
+ protected Collection<MarineLitterBatch> notImportedMarineLitterBatches;
+
+ public ImportMultiPostAction(MarineLitterBatchUIHandler handler) {
+ super(handler);
+ }
+
+ @Override
+ protected String getFileExtension() {
+ return "tuttiMarineLitter";
+ }
+
+ @Override
+ protected String getFileExtensionDescription() {
+ return _("tutti.common.file.tuttiMarineLitter");
+ }
+
+ @Override
+ protected String getFileChooserTitle() {
+ return _("tutti.editMarineLitterBatch.action.importMultiPost.sourceFile.title");
+ }
+
+ @Override
+ protected String getFileChooserButton() {
+ return _("tutti.editMarineLitterBatch.action.importMultiPost.sourceFile.button");
+ }
+
+ @Override
+ protected void releaseAction() {
+ notImportedMarineLitterBatches = null;
+ super.releaseAction();
+ }
+
+ @Override
+ protected void importBatches(FishingOperation operation) {
+ notImportedMarineLitterBatches = multiPostImportExportService.importMarineLitter(file, operation);
+ }
+
+ @Override
+ public void postSuccessAction() {
+ super.postSuccessAction();
+
+ if (!notImportedMarineLitterBatches.isEmpty()) {
+ MultiPostImportLogDialog dialog = new MultiPostImportLogDialog((Dialog) getContext().getActionUI());
+
+ JTextArea batchList = dialog.getBatchList();
+ for (MarineLitterBatch mlb : notImportedMarineLitterBatches) {
+ batchList.append("- " + decorate(mlb.getMarineLitterCategory()) + " / " + decorate(mlb.getMarineLitterSizeCategory()) + "\n");
+ }
+
+ dialog.setSize(400, 300);
+ dialog.setLocationRelativeTo(getContext().getMainUI());
+ dialog.setVisible(true);
+ }
+
+ sendMessage(_("tutti.editMarineLitterBatch.action.importMultiPost.success", file));
+ }
+}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUI.css 2013-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUI.css 2013-05-15 12:43:52 UTC (rev 947)
@@ -47,7 +47,7 @@
text: "tutti.editMarineLitterBatch.action.importMultiPost";
toolTipText: "tutti.editMarineLitterBatch.action.importMultiPost.tip";
i18nMnemonic: "tutti.editMarineLitterBatch.action.importMultiPost.mnemonic";
- /*_tuttiAction: {ImportMultiPostAction.class};*/
+ _tuttiAction: {ImportMultiPostAction.class};
_help: {"tutti.editMarineLitterBatch.action.importMultiPost.help"};
}
@@ -56,7 +56,7 @@
text: "tutti.editMarineLitterBatch.action.exportMultiPost";
toolTipText: "tutti.editMarineLitterBatch.action.exportMultiPost.tip";
i18nMnemonic: "tutti.editMarineLitterBatch.action.exportMultiPost.mnemonic";
- /*_tuttiAction: {ExportMultiPostAction.class};*/
+ _tuttiAction: {ExportMultiPostAction.class};
_help: {"tutti.editMarineLitterBatch.action.exportMultiPost.help"};
}
Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-05-15 12:43:52 UTC (rev 947)
@@ -83,7 +83,10 @@
tutti.common.file.export=
tutti.common.file.pdf=
tutti.common.file.protocol=
+tutti.common.file.tuttiAccidental=
tutti.common.file.tuttiBenthos=
+tutti.common.file.tuttiIndividualObservation=
+tutti.common.file.tuttiMarineLitter=
tutti.common.file.tuttiSpecies=
tutti.common.file.zip=
tutti.common.selected.fishingOperation=
@@ -263,10 +266,16 @@
tutti.editAccidentalBatch.action.createBatch.mnemonic=
tutti.editAccidentalBatch.action.createBatch.tip=
tutti.editAccidentalBatch.action.exportMultiPost=
+tutti.editAccidentalBatch.action.exportMultiPost.destinationFile.button=
+tutti.editAccidentalBatch.action.exportMultiPost.destinationFile.title=
tutti.editAccidentalBatch.action.exportMultiPost.mnemonic=
+tutti.editAccidentalBatch.action.exportMultiPost.success=
tutti.editAccidentalBatch.action.exportMultiPost.tip=
tutti.editAccidentalBatch.action.importMultiPost=
tutti.editAccidentalBatch.action.importMultiPost.mnemonic=
+tutti.editAccidentalBatch.action.importMultiPost.sourceFile.button=
+tutti.editAccidentalBatch.action.importMultiPost.sourceFile.title=
+tutti.editAccidentalBatch.action.importMultiPost.success=
tutti.editAccidentalBatch.action.importMultiPost.tip=
tutti.editAccidentalBatch.action.removeBatch=
tutti.editAccidentalBatch.action.removeBatch.mnemonic=
@@ -616,10 +625,16 @@
tutti.editIndividualObservationBatch.action.createBatch.mnemonic=
tutti.editIndividualObservationBatch.action.createBatch.tip=
tutti.editIndividualObservationBatch.action.exportMultiPost=
+tutti.editIndividualObservationBatch.action.exportMultiPost.destinationFile.button=
+tutti.editIndividualObservationBatch.action.exportMultiPost.destinationFile.title=
tutti.editIndividualObservationBatch.action.exportMultiPost.mnemonic=
+tutti.editIndividualObservationBatch.action.exportMultiPost.success=
tutti.editIndividualObservationBatch.action.exportMultiPost.tip=
tutti.editIndividualObservationBatch.action.importMultiPost=
tutti.editIndividualObservationBatch.action.importMultiPost.mnemonic=
+tutti.editIndividualObservationBatch.action.importMultiPost.sourceFile.button=
+tutti.editIndividualObservationBatch.action.importMultiPost.sourceFile.title=
+tutti.editIndividualObservationBatch.action.importMultiPost.success=
tutti.editIndividualObservationBatch.action.importMultiPost.tip=
tutti.editIndividualObservationBatch.action.removeBatch=
tutti.editIndividualObservationBatch.action.removeBatch.mnemonic=
@@ -655,10 +670,16 @@
tutti.editMarineLitterBatch.action.createBatch.mnemonic=
tutti.editMarineLitterBatch.action.createBatch.tip=
tutti.editMarineLitterBatch.action.exportMultiPost=
+tutti.editMarineLitterBatch.action.exportMultiPost.destinationFile.button=
+tutti.editMarineLitterBatch.action.exportMultiPost.destinationFile.title=
tutti.editMarineLitterBatch.action.exportMultiPost.mnemonic=
+tutti.editMarineLitterBatch.action.exportMultiPost.success=
tutti.editMarineLitterBatch.action.exportMultiPost.tip=
tutti.editMarineLitterBatch.action.importMultiPost=
tutti.editMarineLitterBatch.action.importMultiPost.mnemonic=
+tutti.editMarineLitterBatch.action.importMultiPost.sourceFile.button=
+tutti.editMarineLitterBatch.action.importMultiPost.sourceFile.title=
+tutti.editMarineLitterBatch.action.importMultiPost.success=
tutti.editMarineLitterBatch.action.importMultiPost.tip=
tutti.editMarineLitterBatch.action.removeBatch=
tutti.editMarineLitterBatch.action.removeBatch.mnemonic=
@@ -1121,6 +1142,8 @@
tutti.manageTemporaryReferential.title.choose.importTemporaryVesselFile=
tutti.message.action.running=
tutti.multiPostImportLog.close=
+tutti.multiPostImportLog.close.mnemonic=
+tutti.multiPostImportLog.close.tip=
tutti.multiPostImportLog.message=
tutti.multiPostImportLog.title=
tutti.property.=
Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-05-15 12:21:47 UTC (rev 946)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-05-15 12:43:52 UTC (rev 947)
@@ -78,7 +78,10 @@
tutti.common.file.csv=Extension d'un fichier csv
tutti.common.file.pdf=Extension d'un fichier pdf
tutti.common.file.protocol=Extension d'un fichier de protocole Tutti
+tutti.common.file.tuttiAccidental=Fichier d'import/export des lots de captures accidentelles
tutti.common.file.tuttiBenthos=Fichier d'import/export des lots de benthos
+tutti.common.file.tuttiIndividualObservation=Fichier d'import/export des lots d'observations individuelles
+tutti.common.file.tuttiMarineLitter=Fichier d'import/export des lots de déchets
tutti.common.file.tuttiSpecies=Fichier d'import/export des lots d'espèces
tutti.common.file.zip=Extension d'une archive zip
tutti.common.selected.fishingOperation=l'opération de pêche sélectionnée
@@ -257,10 +260,16 @@
tutti.editAccidentalBatch.action.createBatch.mnemonic=C
tutti.editAccidentalBatch.action.createBatch.tip=Créer une capture accidentelle
tutti.editAccidentalBatch.action.exportMultiPost=Exporter les captures accidentelles
+tutti.editAccidentalBatch.action.exportMultiPost.destinationFile.button=Choisir le fichier pour l'export
+tutti.editAccidentalBatch.action.exportMultiPost.destinationFile.title=Exporter les lots de captures accidentelles
tutti.editAccidentalBatch.action.exportMultiPost.mnemonic=E
+tutti.editAccidentalBatch.action.exportMultiPost.success=Les lots de captures accidentelles ont été exportés dans le fichier %s
tutti.editAccidentalBatch.action.exportMultiPost.tip=Exporter les captures accidentelles pour les importer sur le poste maître
tutti.editAccidentalBatch.action.importMultiPost=Importer des captures accidentelles
tutti.editAccidentalBatch.action.importMultiPost.mnemonic=I
+tutti.editAccidentalBatch.action.importMultiPost.sourceFile.button=Choisir le fichier à importer
+tutti.editAccidentalBatch.action.importMultiPost.sourceFile.title=Importer des lots de captures accidentelles
+tutti.editAccidentalBatch.action.importMultiPost.success=Des lots de captures accidentelles ont été importés depuis le fichier %s
tutti.editAccidentalBatch.action.importMultiPost.tip=Importer des captures accidentelles créées sur un poste satellite
tutti.editAccidentalBatch.action.removeBatch=Supprimer la capture courante
tutti.editAccidentalBatch.action.removeBatch.mnemonic=S
@@ -599,10 +608,16 @@
tutti.editIndividualObservationBatch.action.createBatch.mnemonic=C
tutti.editIndividualObservationBatch.action.createBatch.tip=Créer une nouvelle observation
tutti.editIndividualObservationBatch.action.exportMultiPost=Exporter les observations
+tutti.editIndividualObservationBatch.action.exportMultiPost.destinationFile.button=Choisir le fichier pour l'export
+tutti.editIndividualObservationBatch.action.exportMultiPost.destinationFile.title=Exporter les lots d'observations individuelles
tutti.editIndividualObservationBatch.action.exportMultiPost.mnemonic=E
+tutti.editIndividualObservationBatch.action.exportMultiPost.success=Les lots d'observations individuelles ont été exportés dans le fichier %s
tutti.editIndividualObservationBatch.action.exportMultiPost.tip=Exporter les observations pour les importer sur le poste maître
tutti.editIndividualObservationBatch.action.importMultiPost=Importer des observations
tutti.editIndividualObservationBatch.action.importMultiPost.mnemonic=I
+tutti.editIndividualObservationBatch.action.importMultiPost.sourceFile.button=Choisir le fichier à importer
+tutti.editIndividualObservationBatch.action.importMultiPost.sourceFile.title=Importer des lots d'observations individuelles
+tutti.editIndividualObservationBatch.action.importMultiPost.success=Des lots d'observations individuelles ont été importés depuis le fichier %s
tutti.editIndividualObservationBatch.action.importMultiPost.tip=Importer des observations créées sur un poste satellite
tutti.editIndividualObservationBatch.action.removeBatch=Supprimer la ligne sélectionnée
tutti.editIndividualObservationBatch.action.removeBatch.mnemonic=S
@@ -638,10 +653,16 @@
tutti.editMarineLitterBatch.action.createBatch.mnemonic=C
tutti.editMarineLitterBatch.action.createBatch.tip=Créer un nouveau lot de déchet
tutti.editMarineLitterBatch.action.exportMultiPost=Exporter les lots de déchets
+tutti.editMarineLitterBatch.action.exportMultiPost.destinationFile.button=Choisir le fichier pour l'export
+tutti.editMarineLitterBatch.action.exportMultiPost.destinationFile.title=Exporter les lots de déchets
tutti.editMarineLitterBatch.action.exportMultiPost.mnemonic=E
+tutti.editMarineLitterBatch.action.exportMultiPost.success=Les lots de déchets ont été exportés dans le fichier %s
tutti.editMarineLitterBatch.action.exportMultiPost.tip=Exporter les lots de déchets pour les importer sur le poste maître
tutti.editMarineLitterBatch.action.importMultiPost=Importer des lots de déchets
tutti.editMarineLitterBatch.action.importMultiPost.mnemonic=I
+tutti.editMarineLitterBatch.action.importMultiPost.sourceFile.button=Choisir le fichier à importer
+tutti.editMarineLitterBatch.action.importMultiPost.sourceFile.title=Importer des lots de déchets
+tutti.editMarineLitterBatch.action.importMultiPost.success=Des lots de déchets ont été importés depuis le fichier %s
tutti.editMarineLitterBatch.action.importMultiPost.tip=Importer des lots de déchets créés sur un poste satellite
tutti.editMarineLitterBatch.action.removeBatch=Supprimer la ligne sélectionnée
tutti.editMarineLitterBatch.action.removeBatch.mnemonic=S
@@ -1084,6 +1105,8 @@
tutti.manageTemporaryReferential.title.choose.importTemporaryVesselFile=Importer un réferentiel Navire
tutti.message.action.running=<html>Action <strong>%s</strong> en cours d'execution...<hr/></html>
tutti.multiPostImportLog.close=Fermer
+tutti.multiPostImportLog.close.mnemonic=F
+tutti.multiPostImportLog.close.tip=Fermer la popup
tutti.multiPostImportLog.message=Des lots n'ont pas été importés car des lots existants avaient déjà les mêmes espèces et catégorie de tri
tutti.multiPostImportLog.title=Lots non importés
tutti.property.get.error=Propriété %1s non trouvée sur l'objet de type %2s
1
0
r946 - in trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing: content/operation/catches/accidental content/operation/catches/individualobservation util
by kmorin@users.forge.codelutin.com 15 May '13
by kmorin@users.forge.codelutin.com 15 May '13
15 May '13
Author: kmorin
Date: 2013-05-15 14:21:47 +0200 (Wed, 15 May 2013)
New Revision: 946
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/946
Log:
fixes #2428 [CAPTURE] - Captures accidentelles - Les autres caract?\195?\169ristiques ne sont pas sauvegard?\195?\169es
fixes #2427 [CAPTURES] - Captures accidentelles - Erreur lors de la suppression d'une ligne
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchRowModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchRowModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchRowModel.java 2013-05-14 14:31:57 UTC (rev 945)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchRowModel.java 2013-05-15 12:21:47 UTC (rev 946)
@@ -92,7 +92,7 @@
}
//------------------------------------------------------------------------//
- //-- MarineLitterBatch --//
+ //-- AccidentalBatch --//
//------------------------------------------------------------------------//
@Override
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java 2013-05-14 14:31:57 UTC (rev 945)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java 2013-05-15 12:21:47 UTC (rev 946)
@@ -93,6 +93,7 @@
AccidentalBatchRowModel.PROPERTY_SIZE,
AccidentalBatchRowModel.PROPERTY_LENGTH_STEP_CARACTERISTIC,
AccidentalBatchRowModel.PROPERTY_DEAD_OR_ALIVE,
+ AccidentalBatchRowModel.PROPERTY_CARACTERISTICS,
AccidentalBatchRowModel.PROPERTY_COMMENT,
AccidentalBatchRowModel.PROPERTY_ATTACHMENT);
}
@@ -236,7 +237,7 @@
Highlighter commentHighlighter = TuttiUIUtil.newBackgroundColorHighlighter(
new HighlightPredicate.AndHighlightPredicate(
- new HighlightPredicate.IdentifierHighlightPredicate(IndividualObservationBatchTableModel.COMMENT),
+ new HighlightPredicate.IdentifierHighlightPredicate(AccidentalBatchTableModel.COMMENT),
// for not null value
new HighlightPredicate() {
@Override
@@ -251,7 +252,7 @@
Highlighter attachmentHighlighter = TuttiUIUtil.newBackgroundColorHighlighter(
new HighlightPredicate.AndHighlightPredicate(
- new HighlightPredicate.IdentifierHighlightPredicate(IndividualObservationBatchTableModel.ATTACHMENT),
+ new HighlightPredicate.IdentifierHighlightPredicate(AccidentalBatchTableModel.ATTACHMENT),
// for not null value
new HighlightPredicate() {
@Override
@@ -494,7 +495,7 @@
if (TuttiEntities.isNew(catchBean)) {
- catchBean = persistenceService.createAccidentalBatch(catchBean);
+ persistenceService.createAccidentalBatch(catchBean);
row.setId(catchBean.getId());
} else {
persistenceService.saveAccidentalBatch(catchBean);
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java 2013-05-14 14:31:57 UTC (rev 945)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java 2013-05-15 12:21:47 UTC (rev 946)
@@ -91,7 +91,7 @@
}
//------------------------------------------------------------------------//
- //-- MarineLitterBatch --//
+ //-- IndividualObservationBatch --//
//------------------------------------------------------------------------//
@Override
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-05-14 14:31:57 UTC (rev 945)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-05-15 12:21:47 UTC (rev 946)
@@ -67,6 +67,8 @@
/** Logger. */
private static final Log log = LogFactory.getLog(TuttiUIUtil.class);
+ public static final double EARTH_RADIUS = 6378288.0;
+
private TuttiUIUtil() {
// never instanciate util class
}
@@ -201,7 +203,7 @@
double eLat = endLatitude * Math.PI / 180.0;
double eLong = endLongitude * Math.PI / 180.0;
- Double d = 6378288.0 *
+ Double d = EARTH_RADIUS *
(Math.PI / 2 - Math.asin(Math.sin(eLat) * Math.sin(sLat)
+ Math.cos(eLong - sLong) * Math.cos(eLat) * Math.cos(sLat)));
return d.intValue();
1
0
r945 - in trunk: tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost tutti-service/src/main/resources/i18n tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species tutti-ui-swing/src/main/resources/i18n
by kmorin@users.forge.codelutin.com 14 May '13
by kmorin@users.forge.codelutin.com 14 May '13
14 May '13
Author: kmorin
Date: 2013-05-14 16:31:57 +0200 (Tue, 14 May 2013)
New Revision: 945
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/945
Log:
refs #1873 [IMP/EXP] - Import/Export multi-postes
Added:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRow.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractExportMultiPostAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractImportMultiPostAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/MultiPostImportLogDialog.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/MultiPostImportLogDialog.jaxx
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ExportMultiPostAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ImportMultiPostAction.java
Modified:
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRow.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportExportService.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/operation/catches/benthos/BenthosBatchUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ExportMultiPostAction.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportMultiPostAction.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
Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRow.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRow.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRow.java 2013-05-14 14:31:57 UTC (rev 945)
@@ -0,0 +1,62 @@
+package fr.ifremer.tutti.service.catches.multipost;
+
+import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum;
+import fr.ifremer.tutti.persistence.entities.data.Attachment;
+
+import java.io.File;
+import java.io.Serializable;
+
+/**
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 2.2
+ */
+public class AttachmentRow implements Serializable {
+
+ public static final String ATTACHMENT_NAME = "name";
+
+ public static final String ATTACHMENT_BATCH_ID = "batchId";
+
+ public static final String ATTACHMENT_COMMENT = "comment";
+
+ public static final String ATTACHMENT_FILE = "file";
+
+ protected String name;
+
+ protected String batchId;
+
+ protected String comment;
+
+ protected File file;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getBatchId() {
+ return batchId;
+ }
+
+ public void setBatchId(String batchId) {
+ this.batchId = batchId;
+ }
+
+ public String getComment() {
+ return comment;
+ }
+
+ public void setComment(String comment) {
+ this.comment = comment;
+ }
+
+ public File getFile() {
+ return file;
+ }
+
+ public void setFile(File file) {
+ this.file = file;
+ }
+}
Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java (rev 0)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java 2013-05-14 14:31:57 UTC (rev 945)
@@ -0,0 +1,57 @@
+package fr.ifremer.tutti.service.catches.multipost;
+
+import fr.ifremer.tutti.service.TuttiCsvUtil;
+import org.nuiton.util.csv.ValueFormatter;
+import org.nuiton.util.csv.ValueParser;
+
+import java.io.File;
+import java.text.ParseException;
+
+/**
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 2.2
+ */
+public class AttachmentRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<AttachmentRow> {
+
+ public AttachmentRowModel(char separator) {
+ this(separator, null);
+ }
+
+ public AttachmentRowModel(char separator, final File directory) {
+ super(separator);
+
+ newColumnForImportExport(AttachmentRow.ATTACHMENT_BATCH_ID,
+ AttachmentRow.ATTACHMENT_BATCH_ID);
+
+ newColumnForImportExport(AttachmentRow.ATTACHMENT_NAME,
+ AttachmentRow.ATTACHMENT_NAME);
+
+ newColumnForImportExport(AttachmentRow.ATTACHMENT_COMMENT,
+ AttachmentRow.ATTACHMENT_COMMENT);
+
+ newColumnForExport(AttachmentRow.ATTACHMENT_FILE,
+ AttachmentRow.ATTACHMENT_FILE,
+ new ValueFormatter<File>() {
+
+ @Override
+ public String format(File value) {
+ return value != null ? value.getName() : null;
+ }
+ });
+
+ newMandatoryColumn(AttachmentRow.ATTACHMENT_FILE,
+ AttachmentRow.ATTACHMENT_FILE,
+ new ValueParser<File>() {
+ @Override
+ public File parse(String value) throws ParseException {
+ return new File(directory, value);
+ }
+ });
+
+ }
+
+ @Override
+ public AttachmentRow newEmptyInstance() {
+ return new AttachmentRow();
+ }
+}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java 2013-05-13 13:00:31 UTC (rev 944)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java 2013-05-14 14:31:57 UTC (rev 945)
@@ -24,6 +24,9 @@
* #L%
*/
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.Species;
@@ -31,6 +34,8 @@
import org.nuiton.util.csv.ValueFormatter;
import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
/**
* Model of a catch export.
@@ -38,13 +43,17 @@
* @author kmorin <morin(a)codelutin.com>
* @since 2.2
*/
-public class CatchFrequencyRowModel extends TuttiCsvUtil.AbstractTuttiExportModel<CatchFrequencyRow> {
+public class CatchFrequencyRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CatchFrequencyRow> {
public CatchFrequencyRowModel(char separator) {
+ this(separator, null);
+ }
+
+ public CatchFrequencyRowModel(char separator, List<Caracteristic> caracteristics) {
super(separator);
- newColumnForExport(CatchFrequencyRow.BATCH_ID,
- CatchFrequencyRow.BATCH_ID);
+ newColumnForImportExport(CatchFrequencyRow.BATCH_ID,
+ CatchFrequencyRow.BATCH_ID);
newColumnForExport(CatchFrequencyRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC,
CatchFrequencyRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC,
@@ -55,17 +64,32 @@
}
});
- newColumnForExport(CatchFrequencyRow.FREQUENCY_LENGTH_STEP,
- CatchFrequencyRow.FREQUENCY_LENGTH_STEP,
- TuttiCsvUtil.FLOAT);
+ if (caracteristics == null) {
+ caracteristics = Lists.newArrayList();
+ }
+ Map<String, Caracteristic> caracteristicMap = Maps.uniqueIndex(caracteristics, TuttiEntities.GET_ID);
+ newForeignKeyColumn(CatchFrequencyRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC,
+ CatchFrequencyRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC,
+ Caracteristic.class,
+ Caracteristic.PROPERTY_ID,
+ caracteristicMap);
- newColumnForExport(CatchFrequencyRow.FREQUENCY_NUMBER,
- CatchFrequencyRow.FREQUENCY_NUMBER,
- TuttiCsvUtil.INTEGER);
+ newColumnForImportExport(CatchFrequencyRow.FREQUENCY_LENGTH_STEP,
+ CatchFrequencyRow.FREQUENCY_LENGTH_STEP,
+ TuttiCsvUtil.FLOAT);
- newColumnForExport(CatchFrequencyRow.FREQUENCY_WEIGHT,
- CatchFrequencyRow.FREQUENCY_WEIGHT,
- TuttiCsvUtil.FLOAT);
+ newColumnForImportExport(CatchFrequencyRow.FREQUENCY_NUMBER,
+ CatchFrequencyRow.FREQUENCY_NUMBER,
+ TuttiCsvUtil.INTEGER);
+ newColumnForImportExport(CatchFrequencyRow.FREQUENCY_WEIGHT,
+ CatchFrequencyRow.FREQUENCY_WEIGHT,
+ TuttiCsvUtil.FLOAT);
+
}
+
+ @Override
+ public CatchFrequencyRow newEmptyInstance() {
+ return new CatchFrequencyRow();
+ }
}
\ No newline at end of file
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRow.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRow.java 2013-05-13 13:00:31 UTC (rev 944)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRow.java 2013-05-14 14:31:57 UTC (rev 945)
@@ -48,6 +48,8 @@
public static final String ID = "id";
+ public static final String PARENT_ID = "parentId";
+
public static final String SPECIES = "species";
public static final String SORTED_UNSORTED_SAMPLE_CATEGORY = "sortedUnsortedSampleCategory";
@@ -72,6 +74,8 @@
protected String id;
+ protected String parentId;
+
protected Species species;
protected Serializable sortedUnsortedSampleCategory;
@@ -102,6 +106,14 @@
this.id = id;
}
+ public String getParentId() {
+ return parentId;
+ }
+
+ public void setParentId(String parentId) {
+ this.parentId = parentId;
+ }
+
public Species getSpecies() {
return species;
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java 2013-05-13 13:00:31 UTC (rev 944)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java 2013-05-14 14:31:57 UTC (rev 945)
@@ -34,6 +34,7 @@
import java.io.Serializable;
import java.util.List;
+import java.util.Map;
/**
* Model of a catch export.
@@ -41,9 +42,14 @@
* @author kmorin <morin(a)codelutin.com>
* @since 2.2
*/
-public class CatchRowModel extends TuttiCsvUtil.AbstractTuttiExportModel<CatchRow> {
+public class CatchRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CatchRow> {
public CatchRowModel(char separator) {
+ this(separator, null);
+ }
+
+ public CatchRowModel(char separator,
+ Map<String, Species> speciesMap) {
super(separator);
ValueFormatter<Serializable> caracteristicValueFormatter = new ValueFormatter<Serializable>() {
@@ -63,56 +69,90 @@
}
};
- newColumnForExport(CatchRow.ID,
+ newColumnForImportExport(CatchRow.ID,
CatchRow.ID);
+ newColumnForImportExport(CatchRow.PARENT_ID,
+ CatchRow.PARENT_ID);
+
newColumnForExport(CatchRow.SPECIES,
CatchRow.SPECIES,
new ValueFormatter<Species>() {
- @Override
- public String format(Species value) {
- return value != null ? String.valueOf(value.getReferenceTaxonId()) : null;
- }
- });
+ @Override
+ public String format(Species value) {
+ return value != null ? String.valueOf(value.getReferenceTaxonId()) : null;
+ }
+ });
+ newForeignKeyColumn(CatchRow.SPECIES,
+ CatchRow.SPECIES,
+ Species.class,
+ Species.PROPERTY_REFERENCE_TAXON_ID,
+ speciesMap);
+
newColumnForExport(CatchRow.SORTED_UNSORTED_SAMPLE_CATEGORY,
CatchRow.SORTED_UNSORTED_SAMPLE_CATEGORY,
caracteristicValueFormatter);
+ newMandatoryColumn(CatchRow.SORTED_UNSORTED_SAMPLE_CATEGORY,
+ CatchRow.SORTED_UNSORTED_SAMPLE_CATEGORY,
+ TuttiCsvUtil.STRING);
+
newColumnForExport(CatchRow.SIZE_SAMPLE_CATEGORY,
CatchRow.SIZE_SAMPLE_CATEGORY,
caracteristicValueFormatter);
+ newMandatoryColumn(CatchRow.SIZE_SAMPLE_CATEGORY,
+ CatchRow.SIZE_SAMPLE_CATEGORY,
+ TuttiCsvUtil.STRING);
+
newColumnForExport(CatchRow.SEX_SAMPLE_CATEGORY,
CatchRow.SEX_SAMPLE_CATEGORY,
caracteristicValueFormatter);
+ newMandatoryColumn(CatchRow.SEX_SAMPLE_CATEGORY,
+ CatchRow.SEX_SAMPLE_CATEGORY,
+ TuttiCsvUtil.STRING);
+
newColumnForExport(CatchRow.MATURITY_SAMPLE_CATEGORY,
CatchRow.MATURITY_SAMPLE_CATEGORY,
caracteristicValueFormatter);
+ newMandatoryColumn(CatchRow.MATURITY_SAMPLE_CATEGORY,
+ CatchRow.MATURITY_SAMPLE_CATEGORY,
+ TuttiCsvUtil.STRING);
+
newColumnForExport(CatchRow.AGE_SAMPLE_CATEGORY,
CatchRow.AGE_SAMPLE_CATEGORY,
caracteristicValueFormatter);
- newColumnForExport(CatchRow.CATEGORY_WEIGHT,
+ newMandatoryColumn(CatchRow.AGE_SAMPLE_CATEGORY,
+ CatchRow.AGE_SAMPLE_CATEGORY,
+ TuttiCsvUtil.STRING);
+
+ newColumnForImportExport(CatchRow.CATEGORY_WEIGHT,
CatchRow.CATEGORY_WEIGHT,
TuttiCsvUtil.FLOAT);
- newColumnForExport(CatchRow.WEIGHT,
+ newColumnForImportExport(CatchRow.WEIGHT,
CatchRow.WEIGHT,
TuttiCsvUtil.FLOAT);
- newColumnForExport(CatchRow.NUMBER,
+ newColumnForImportExport(CatchRow.NUMBER,
CatchRow.NUMBER,
TuttiCsvUtil.INTEGER);
- newColumnForExport(CatchRow.COMMENT,
+ newColumnForImportExport(CatchRow.COMMENT,
CatchRow.COMMENT);
- newColumnForExport(CatchRow.TO_CONFIRM,
- CatchRow.TO_CONFIRM,
- TuttiCsvUtil.PRIMITIVE_BOOLEAN);
+ newColumnForImportExport(CatchRow.TO_CONFIRM,
+ CatchRow.TO_CONFIRM,
+ TuttiCsvUtil.PRIMITIVE_BOOLEAN);
}
+
+ @Override
+ public CatchRow newEmptyInstance() {
+ return new CatchRow();
+ }
}
\ No newline at end of file
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportExportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportExportService.java 2013-05-13 13:00:31 UTC (rev 944)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportExportService.java 2013-05-14 14:31:57 UTC (rev 945)
@@ -25,28 +25,32 @@
*/
import com.google.common.base.Charsets;
+import com.google.common.base.Function;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.google.common.io.Files;
+import fr.ifremer.tutti.TuttiIOUtil;
import fr.ifremer.tutti.TuttiTechnicalException;
+import fr.ifremer.tutti.persistence.entities.TuttiBeanFactory;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.data.*;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
-import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation;
-import fr.ifremer.tutti.service.AbstractTuttiService;
-import fr.ifremer.tutti.service.DecoratorService;
-import fr.ifremer.tutti.service.PersistenceService;
-import fr.ifremer.tutti.service.TuttiServiceContext;
-import fr.ifremer.tutti.service.catches.TuttiWeightComputingService;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
+import fr.ifremer.tutti.service.*;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.util.FileUtil;
+import org.apache.commons.vfs2.AllFileSelector;
+import org.apache.commons.vfs2.FileObject;
import org.nuiton.util.ZipUtil;
import org.nuiton.util.csv.Export;
+import org.nuiton.util.csv.Import;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.IOException;
+import java.io.*;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -54,6 +58,8 @@
import static org.nuiton.i18n.I18n._;
/**
+ * Service to export batches from a satellite post or import batches into a master post.
+ *
* @author kmorin <kmorin(a)codelutin.com>
* @since 2.2
*/
@@ -62,6 +68,16 @@
private static final Log log =
LogFactory.getLog(TuttiMultiPostImportExportService.class);
+ protected static final String ATTACHMENTS_DIRECTORY = "attachments";
+
+ protected static final String ATTACHMENTS_FILE = "attachments.csv";
+
+ protected static final String SPECIES_FILE = "species.csv";
+
+ protected static final String BENTHOS_FILE = "benthos.csv";
+
+ protected static final String FREQUENCIES_FILE = "frequencies.csv";
+
protected PersistenceService persistenceService;
protected DecoratorService decoratorService;
@@ -93,36 +109,418 @@
}
}
+ /**
+ * Export species batches.
+ *
+ * @param file the file to export the batches into
+ * @param operation the operation to export
+ */
public void exportSpecies(File file, FishingOperation operation) {
- CatchRowModel csvModel = new CatchRowModel(csvSeparator);
- CatchFrequencyRowModel csvFrequencyModel = new CatchFrequencyRowModel(csvSeparator);
BatchContainer<SpeciesBatch> speciesBatchContainer =
persistenceService.getRootSpeciesBatch(operation.getId());
List<CatchRow> rows = Lists.newArrayList();
List<CatchFrequencyRow> frequencyRows = Lists.newArrayList();
+ List<AttachmentRow> attachmentRows = Lists.newArrayList();
for (SpeciesBatch batch : speciesBatchContainer.getChildren()) {
- createSpeciesRow(batch, rows, frequencyRows);
+ createSpeciesRow(batch, null, rows, frequencyRows, attachmentRows);
}
+ exportCatches(file, SPECIES_FILE, rows, frequencyRows, attachmentRows);
+ }
+
+ /**
+ * Export benthos batches.
+ *
+ * @param file the file to export the batches into
+ * @param operation the operation to export
+ */
+ public void exportBenthos(File file, FishingOperation operation) {
+ BatchContainer<BenthosBatch> benthosBatchContainer =
+ persistenceService.getRootBenthosBatch(operation.getId());
+
+ List<CatchRow> rows = Lists.newArrayList();
+ List<CatchFrequencyRow> frequencyRows = Lists.newArrayList();
+ List<AttachmentRow> attachmentRows = Lists.newArrayList();
+
+ for (BenthosBatch batch : benthosBatchContainer.getChildren()) {
+ createBenthosRow(batch, null, rows, frequencyRows, attachmentRows);
+ }
+
+ exportCatches(file, BENTHOS_FILE, rows, frequencyRows, attachmentRows);
+ }
+
+ /**
+ * Import species batches from a satellite post
+ *
+ * @param file the file to import the batches from
+ * @param operation the operation in which to add the batches
+ * @return the list of the species which have not been imported, because there were concurrent batches
+ */
+ public Collection<SpeciesBatch> importSpecies(File file, FishingOperation operation) {
+
+ final Map<String, SpeciesBatch> notImportedBatches = Maps.newHashMap();
+
+ BatchContainer<SpeciesBatch> speciesBatches =
+ persistenceService.getRootSpeciesBatch(operation.getId());
+
+ TuttiDataContext dataContext = context.getDataContext();
+ List<Species> speciesList = dataContext.getReferentSpecies();
+ Map<String, Species> speciesMap = TuttiEntities.splitByTaxonId(speciesList);
+
+ // map containing the batches by their persistence id
+ final Map<String, SpeciesBatch> batches = Maps.newHashMap();
+
+ File tempDir = Files.createTempDir();
+ FileObject fileObject = TuttiIOUtil.resolveFile("zip:" + file.getAbsolutePath(),
+ _("tutti.service.multipost.resolveArchive.error", file));
+
+ TuttiIOUtil.explode(fileObject,
+ tempDir,
+ new AllFileSelector(),
+ _("tutti.service.multipost.explodeArchive.error", file));
+
+ // Import batches
+
+ File speciesFile = new File(tempDir, SPECIES_FILE);
+
+ Reader reader = null;
+ try {
+ reader = Files.newReader(speciesFile, Charsets.UTF_8);
+
+ } catch (FileNotFoundException e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.import.batches.error", speciesFile), e);
+ }
+
+ CatchRowModel csvModel = new CatchRowModel(csvSeparator,
+ speciesMap);
+
+ Import<CatchRow> importer = Import.newImport(csvModel, reader);
+
+ for (CatchRow row : importer) {
+
+ // create batch
+ SpeciesBatch batch = TuttiBeanFactory.newSpeciesBatch();
+ batch.setFishingOperation(operation);
+
+ Species species = row.getSpecies();
+ batch.setSpecies(row.getSpecies());
+ batch.setWeight(row.getWeight());
+ batch.setNumber(row.getNumber());
+ batch.setComment(row.getComment());
+ batch.setSpeciesToConfirm(row.isToConfirm());
+
+ Object[] valueAndCategoryType = getValueAndCategoryType(row);
+ SampleCategoryEnum categoryType = (SampleCategoryEnum) valueAndCategoryType[0];
+ Serializable value = (Serializable) valueAndCategoryType[1];
+
+ batch.setSampleCategoryType(categoryType);
+ batch.setSampleCategoryValue(value);
+ batch.setSampleCategoryWeight(row.getCategoryWeight());
+
+ // get parent batch
+ String parentId = row.getParentId();
+ String parentPersistedId = null;
+ SpeciesBatch parent = null;
+ if (StringUtils.isNotEmpty(parentId)) {
+ parent = batches.get(parentId);
+ batch.setParentBatch(parent);
+ parentPersistedId = parent.getId();
+ }
+
+ SpeciesBatch existingBatch = null;
+ List<SpeciesBatch> batchesToBrowse;
+ if (parent == null) {
+ batchesToBrowse = speciesBatches.getChildren();
+ } else {
+ batchesToBrowse = parent.getChildBatchs();
+ }
+
+ // check if the parent has already a batch with the caracteristic value
+ // and if the children batch are categorized with the same caracterstic
+ if (batchesToBrowse != null) {
+ for (SpeciesBatch sb : batchesToBrowse) {
+ if (sb.getSpecies().equals(species)
+ && (!sb.getSampleCategoryType().equals(batch.getSampleCategoryType())
+ || sb.getSampleCategoryValue().equals(value))) {
+
+ existingBatch = sb;
+ batches.put(row.getId(), sb);
+ notImportedBatches.put(row.getId(), batch);
+ break;
+ }
+ }
+ }
+
+ if (existingBatch == null) {
+ batch = persistenceService.createSpeciesBatch(batch, parentPersistedId);
+ batches.put(row.getId(), batch);
+ }
+ }
+
+ // Import frequencies
+
+ File frequencyFile = new File(tempDir, FREQUENCIES_FILE);
+ try {
+ reader = Files.newReader(frequencyFile, Charsets.UTF_8);
+
+ } catch (FileNotFoundException e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.import.frequencies.error", frequencyFile), e);
+ }
+
+ CatchFrequencyRowModel frequencyModel = new CatchFrequencyRowModel(csvSeparator,
+ dataContext.getCaracteristics());
+
+ Import<CatchFrequencyRow> frequencyImporter = Import.newImport(frequencyModel, reader);
+
+ ListMultimap<String, SpeciesBatchFrequency> frequencyMap = ArrayListMultimap.create();
+
+ for (CatchFrequencyRow frequencyRow : frequencyImporter) {
+ if (notImportedBatches.get(frequencyRow.getBatchId()) == null) {
+ SpeciesBatch batch = batches.get(frequencyRow.getBatchId());
+ if (batch != null) {
+ SpeciesBatchFrequency frequency = TuttiBeanFactory.newSpeciesBatchFrequency();
+ frequency.setLengthStepCaracteristic(frequencyRow.getLengthStepCaracteristic());
+ frequency.setLengthStep(frequencyRow.getLengthStep());
+ frequency.setNumber(frequencyRow.getNumber());
+ frequency.setWeight(frequencyRow.getWeight());
+ frequency.setBatch(batch);
+ frequencyMap.put(batch.getId(), frequency);
+ }
+ }
+ }
+ for (String batchId : frequencyMap.keySet()) {
+ List<SpeciesBatchFrequency> frequencies = frequencyMap.get(batchId);
+ persistenceService.saveSpeciesBatchFrequency(batchId, frequencies);
+ }
+
+ // Import attachments
+ Function<AttachmentRow, Integer> getObjetcIdFunction = new Function<AttachmentRow, Integer>() {
+ @Override
+ public Integer apply(AttachmentRow input) {
+ Integer result = null;
+ if (notImportedBatches.get(input.getBatchId()) == null) {
+ SpeciesBatch batch = batches.get(input.getBatchId());
+ if (batch != null) {
+ result = batch.getIdAsInt();
+ }
+ }
+ return result;
+ }
+ };
+ importAttachments(tempDir, getObjetcIdFunction);
+
+ return notImportedBatches.values();
+ }
+
+ /**
+ * Import benthos batches from a satellite post
+ *
+ * @param file the file to import the batches from
+ * @param operation the operation in which to add the batches
+ * @return the list of the benthos which have not been imported, because there were concurrent batches
+ */
+ public Collection<BenthosBatch> importBenthos(File file, FishingOperation operation) {
+
+ final Map<String, BenthosBatch> notImportedBatches = Maps.newHashMap();
+
+ BatchContainer<BenthosBatch> benthosBatches =
+ persistenceService.getRootBenthosBatch(operation.getId());
+
+ TuttiDataContext dataContext = context.getDataContext();
+ List<Species> speciesList = dataContext.getReferentSpecies();
+ Map<String, Species> speciesMap = TuttiEntities.splitByTaxonId(speciesList);
+
+ // map containing the batches by their persistence id
+ final Map<String, BenthosBatch> batches = Maps.newHashMap();
+
+ File tempDir = Files.createTempDir();
+ FileObject fileObject = TuttiIOUtil.resolveFile("zip:" + file.getAbsolutePath(),
+ _("tutti.service.multipost.resolveArchive.error", file));
+
+ TuttiIOUtil.explode(fileObject,
+ tempDir,
+ new AllFileSelector(),
+ _("tutti.service.multipost.explodeArchive.error", file));
+
+ // Import batches
+
+ File benthosFile = new File(tempDir, BENTHOS_FILE);
+
+ Reader reader = null;
+ try {
+ reader = Files.newReader(benthosFile, Charsets.UTF_8);
+
+ } catch (FileNotFoundException e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.import.batches.error", benthosFile), e);
+ }
+
+ CatchRowModel csvModel = new CatchRowModel(csvSeparator,
+ speciesMap);
+
+ Import<CatchRow> importer = Import.newImport(csvModel, reader);
+
+ for (CatchRow row : importer) {
+
+ // create batch
+ BenthosBatch batch = TuttiBeanFactory.newBenthosBatch();
+ batch.setFishingOperation(operation);
+
+ Species species = row.getSpecies();
+ batch.setSpecies(row.getSpecies());
+ batch.setWeight(row.getWeight());
+ batch.setNumber(row.getNumber());
+ batch.setComment(row.getComment());
+ batch.setSpeciesToConfirm(row.isToConfirm());
+
+ Object[] valueAndCategoryType = getValueAndCategoryType(row);
+ SampleCategoryEnum categoryType = (SampleCategoryEnum) valueAndCategoryType[0];
+ Serializable value = (Serializable) valueAndCategoryType[1];
+
+ batch.setSampleCategoryType(categoryType);
+ batch.setSampleCategoryValue(value);
+ batch.setSampleCategoryWeight(row.getCategoryWeight());
+
+ // get parent batch
+ String parentId = row.getParentId();
+ String parentPersistedId = null;
+ BenthosBatch parent = null;
+ if (StringUtils.isNotEmpty(parentId)) {
+ parent = batches.get(parentId);
+ batch.setParentBatch(parent);
+ parentPersistedId = parent.getId();
+ }
+
+ BenthosBatch existingBatch = null;
+ List<BenthosBatch> batchesToBrowse;
+ if (parent == null) {
+ batchesToBrowse = benthosBatches.getChildren();
+ } else {
+ batchesToBrowse = parent.getChildBatchs();
+ }
+
+ // check if the parent has already a batch with the caracteristic value
+ // and if the children batch are categorized with the same caracterstic
+ if (batchesToBrowse != null) {
+ for (BenthosBatch bb : batchesToBrowse) {
+ if (bb.getSpecies().equals(species)
+ && (!bb.getSampleCategoryType().equals(batch.getSampleCategoryType())
+ || bb.getSampleCategoryValue().equals(value))) {
+
+ existingBatch = bb;
+ batches.put(row.getId(), bb);
+ notImportedBatches.put(row.getId(), batch);
+ break;
+ }
+ }
+ }
+
+ if (existingBatch == null) {
+ batch = persistenceService.createBenthosBatch(batch, parentPersistedId);
+ batches.put(row.getId(), batch);
+ }
+ }
+
+ // Import frequencies
+
+ File frequencyFile = new File(tempDir, FREQUENCIES_FILE);
+ try {
+ reader = Files.newReader(frequencyFile, Charsets.UTF_8);
+
+ } catch (FileNotFoundException e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.import.frequencies.error", frequencyFile), e);
+ }
+
+ CatchFrequencyRowModel frequencyModel = new CatchFrequencyRowModel(csvSeparator,
+ dataContext.getCaracteristics());
+
+ Import<CatchFrequencyRow> frequencyImporter = Import.newImport(frequencyModel, reader);
+
+ ListMultimap<String, BenthosBatchFrequency> frequencyMap = ArrayListMultimap.create();
+
+ for (CatchFrequencyRow frequencyRow : frequencyImporter) {
+ if (notImportedBatches.get(frequencyRow.getBatchId()) == null) {
+ BenthosBatch batch = batches.get(frequencyRow.getBatchId());
+ if (batch != null) {
+ BenthosBatchFrequency frequency = TuttiBeanFactory.newBenthosBatchFrequency();
+ frequency.setLengthStepCaracteristic(frequencyRow.getLengthStepCaracteristic());
+ frequency.setLengthStep(frequencyRow.getLengthStep());
+ frequency.setNumber(frequencyRow.getNumber());
+ frequency.setWeight(frequencyRow.getWeight());
+ frequency.setBatch(batch);
+ frequencyMap.put(batch.getId(), frequency);
+ }
+ }
+ }
+ for (String batchId : frequencyMap.keySet()) {
+ List<BenthosBatchFrequency> frequencies = frequencyMap.get(batchId);
+ persistenceService.saveBenthosBatchFrequency(batchId, frequencies);
+ }
+
+ // Import attachments
+ Function<AttachmentRow, Integer> getObjetcIdFunction = new Function<AttachmentRow, Integer>() {
+ @Override
+ public Integer apply(AttachmentRow input) {
+ Integer result = null;
+ if (notImportedBatches.get(input.getBatchId()) == null) {
+ BenthosBatch batch = batches.get(input.getBatchId());
+ if (batch != null) {
+ result = batch.getIdAsInt();
+ }
+ }
+ return result;
+ }
+ };
+ importAttachments(tempDir, getObjetcIdFunction);
+
+ return notImportedBatches.values();
+ }
+
+ /*
+ * Protected methods
+ */
+
+ protected void exportCatches(File file,
+ String batchFile,
+ List<CatchRow> rows,
+ List<CatchFrequencyRow> frequencyRows,
+ List<AttachmentRow> attachmentRows) {
+ CatchRowModel csvModel = new CatchRowModel(csvSeparator);
+ CatchFrequencyRowModel csvFrequencyModel = new CatchFrequencyRowModel(csvSeparator);
+ AttachmentRowModel csvAttachmentModel = new AttachmentRowModel(csvSeparator);
+
BufferedWriter writer = null;
File directory = Files.createTempDir();
+ List<File> file2zip = Lists.newArrayList();
- File speciesFile = new File(directory, "species.csv");
+ File attachmentDirectory = new File(directory, ATTACHMENTS_DIRECTORY);
+ file2zip.add(attachmentDirectory);
+ for (AttachmentRow attachmentRow : attachmentRows) {
+ File attachmentFile = attachmentRow.getFile();
+ File destFile = new File(attachmentDirectory, attachmentFile.getName());
+ TuttiIOUtil.copyFile(attachmentFile,
+ destFile,
+ _("tutti.service.multipost.attachment.copy.error", attachmentFile));
+ file2zip.add(destFile);
+ }
+
+ File speciesFile = new File(directory, batchFile);
+ file2zip.add(speciesFile);
try {
writer = Files.newWriter(speciesFile, Charsets.UTF_8);
Export export = Export.newExport(csvModel, rows);
export.write(writer);
writer.close();
} catch (Exception e) {
- throw new TuttiTechnicalException(_("tutti.service.multipost.export.error", file), e);
+ throw new TuttiTechnicalException(_("tutti.service.multipost.export.batches.error", file), e);
} finally {
IOUtils.closeQuietly(writer);
}
- File frequencyFile = new File(directory, "frequencies.csv");
+ File frequencyFile = new File(directory, FREQUENCIES_FILE);
+ file2zip.add(frequencyFile);
try {
writer = Files.newWriter(frequencyFile, Charsets.UTF_8);
Export export = Export.newExport(csvFrequencyModel, frequencyRows);
@@ -135,20 +533,41 @@
IOUtils.closeQuietly(writer);
}
+ File attachmentFile = new File(directory, ATTACHMENTS_FILE);
+ file2zip.add(attachmentFile);
try {
- ZipUtil.compressFiles(file, directory, Lists.newArrayList(speciesFile, frequencyFile));
+ writer = Files.newWriter(attachmentFile, Charsets.UTF_8);
+ Export export = Export.newExport(csvAttachmentModel, attachmentRows);
+ export.write(writer);
+ writer.close();
+ } catch (Exception e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.export.attachments.error", attachmentFile), e);
+ } finally {
+ IOUtils.closeQuietly(writer);
+ }
+
+ try {
+ ZipUtil.compressFiles(file, directory, file2zip);
+
} catch (IOException e) {
throw new TuttiTechnicalException(_("tutti.service.multipost.export.error", file), e);
+
+ } finally {
+ TuttiIOUtil.deleteDirectory(directory, _("tutti.service.multipost.export.deleteTempDirectory.error", file));
}
}
- protected void createSpeciesRow(SpeciesBatch batch, List<CatchRow> rows, List<CatchFrequencyRow> frequencyRows) {
+ protected void createSpeciesRow(SpeciesBatch batch,
+ String parentId,
+ List<CatchRow> rows,
+ List<CatchFrequencyRow> frequencyRows,
+ List<AttachmentRow> attachmentRows) {
CatchRow row = new CatchRow();
String id = UUID.randomUUID().toString();
row.setId(id);
-
+ row.setParentId(parentId);
row.setSpecies(batch.getSpecies());
switch (batch.getSampleCategoryType()) {
@@ -176,75 +595,24 @@
rows.add(row);
- List<SpeciesBatchFrequency> frequencies =
- persistenceService.getAllSpeciesBatchFrequency(batch.getId());
- for (SpeciesBatchFrequency frequency : frequencies) {
- CatchFrequencyRow frequencyRow = new CatchFrequencyRow();
- frequencyRow.setBatchId(id);
- frequencyRow.setLengthStepCaracteristic(frequency.getLengthStepCaracteristic());
- frequencyRow.setLengthStep(frequency.getLengthStep());
- frequencyRow.setNumber(frequency.getNumber());
- frequencyRow.setWeight(frequency.getWeight());
- frequencyRows.add(frequencyRow);
- }
+ addFrequencies(id, batch.getId(), frequencyRows);
+ addAttachments(id, batch.getIdAsInt(), AttachementObjectTypeEnum.BATCH, attachmentRows);
for (SpeciesBatch child : batch.getChildBatchs()) {
- createSpeciesRow(child, rows, frequencyRows);
+ createSpeciesRow(child, id, rows, frequencyRows, attachmentRows);
}
}
- public void exportBenthos(File file, FishingOperation operation) {
- CatchRowModel csvModel = new CatchRowModel(csvSeparator);
- CatchFrequencyRowModel csvFrequencyModel = new CatchFrequencyRowModel(csvSeparator);
-
- BatchContainer<BenthosBatch> benthosBatchContainer =
- persistenceService.getRootBenthosBatch(operation.getId());
-
- List<CatchRow> rows = Lists.newArrayList();
- List<CatchFrequencyRow> frequencyRows = Lists.newArrayList();
-
- for (BenthosBatch batch : benthosBatchContainer.getChildren()) {
- createBenthosRow(batch, rows, frequencyRows);
- }
-
- BufferedWriter writer = null;
- File directory = Files.createTempDir();
-
- File benthosFile = new File(directory, "benthos.csv");
- try {
- writer = Files.newWriter(benthosFile, Charsets.UTF_8);
- Export export = Export.newExport(csvModel, rows);
- export.write(writer);
- writer.close();
- } catch (Exception e) {
- throw new TuttiTechnicalException(_("tutti.service.multipost.export.error", file), e);
- } finally {
- IOUtils.closeQuietly(writer);
- }
-
- File frequencyFile = new File(directory, "frequencies.csv");
- try {
- writer = Files.newWriter(frequencyFile, Charsets.UTF_8);
- Export export = Export.newExport(csvFrequencyModel, frequencyRows);
- export.write(writer);
- writer.close();
-
- } catch (Exception e) {
- throw new TuttiTechnicalException(_("tutti.service.multipost.export.frequencies.error", frequencyFile), e);
- } finally {
- IOUtils.closeQuietly(writer);
- }
-
- compressZipFile(file, directory);
-
- }
-
- protected void createBenthosRow(BenthosBatch batch, List<CatchRow> rows, List<CatchFrequencyRow> frequencyRows) {
+ protected void createBenthosRow(BenthosBatch batch,
+ String parentId,
+ List<CatchRow> rows,
+ List<CatchFrequencyRow> frequencyRows,
+ List<AttachmentRow> attachmentRows) {
CatchRow row = new CatchRow();
String id = UUID.randomUUID().toString();
row.setId(id);
-
+ row.setParentId(parentId);
row.setSpecies(batch.getSpecies());
switch (batch.getSampleCategoryType()) {
@@ -272,20 +640,117 @@
rows.add(row);
+ addFrequencies(id, batch.getId(), frequencyRows);
+ addAttachments(id, batch.getIdAsInt(), AttachementObjectTypeEnum.BATCH, attachmentRows);
+
+ for (BenthosBatch child : batch.getChildBatchs()) {
+ createBenthosRow(child, id, rows, frequencyRows, attachmentRows);
+ }
+ }
+
+ protected void addFrequencies(String rowId,
+ String batchId,
+ List<CatchFrequencyRow> frequencyRows) {
List<SpeciesBatchFrequency> frequencies =
- persistenceService.getAllSpeciesBatchFrequency(batch.getId());
+ persistenceService.getAllSpeciesBatchFrequency(batchId);
for (SpeciesBatchFrequency frequency : frequencies) {
CatchFrequencyRow frequencyRow = new CatchFrequencyRow();
- frequencyRow.setBatchId(id);
+ frequencyRow.setBatchId(rowId);
frequencyRow.setLengthStepCaracteristic(frequency.getLengthStepCaracteristic());
frequencyRow.setLengthStep(frequency.getLengthStep());
frequencyRow.setNumber(frequency.getNumber());
frequencyRow.setWeight(frequency.getWeight());
frequencyRows.add(frequencyRow);
}
+ }
- for (BenthosBatch child : batch.getChildBatchs()) {
- createBenthosRow(child, rows, frequencyRows);
+ protected void addAttachments(String batchId,
+ int objectId,
+ AttachementObjectTypeEnum objectType,
+ List<AttachmentRow> attachmentRows) {
+ List<Attachment> attachments =
+ persistenceService.getAllAttachments(objectType, objectId);
+ for (Attachment attachment : attachments) {
+ AttachmentRow attachmentRow = new AttachmentRow();
+ attachmentRow.setBatchId(batchId);
+ attachmentRow.setName(attachment.getName());
+ attachmentRow.setComment(attachment.getComment());
+ attachmentRow.setFile(persistenceService.getAttachmentFile(attachment.getId()));
+ attachmentRows.add(attachmentRow);
}
}
+
+ protected Object[] getValueAndCategoryType(CatchRow row) {
+
+ String sortedUnsortedValue = (String) row.getSortedUnsortedSampleCategory();
+ String sizeValue = (String) row.getSizeSampleCategory();
+ String sexValue = (String) row.getSexSampleCategory();
+ String maturityValue = (String) row.getMaturitySampleCategory();
+ String ageValue = (String) row.getAgeSampleCategory();
+
+ Serializable value = null;
+ SampleCategoryEnum categoryType = null;
+
+ if (StringUtils.isNotEmpty(sortedUnsortedValue)) {
+ Integer id = Integer.parseInt(sortedUnsortedValue);
+ Caracteristic caracteristic = persistenceService.getSortedUnsortedCaracteristic();
+ value = TuttiEntities.getQualitativeValue(caracteristic, id);
+ categoryType = SampleCategoryEnum.sortedUnsorted;
+
+ } else if (StringUtils.isNotEmpty(sizeValue)) {
+ Integer id = Integer.parseInt(sizeValue);
+ Caracteristic caracteristic = persistenceService.getSizeCategoryCaracteristic();
+ value = TuttiEntities.getQualitativeValue(caracteristic, id);
+ categoryType = SampleCategoryEnum.size;
+
+ } else if (StringUtils.isNotEmpty(sexValue)) {
+ Integer id = Integer.parseInt(sexValue);
+ Caracteristic caracteristic = persistenceService.getSexCaracteristic();
+ value = TuttiEntities.getQualitativeValue(caracteristic, id);
+ categoryType = SampleCategoryEnum.sex;
+
+ } else if (StringUtils.isNotEmpty(maturityValue)) {
+ Integer id = Integer.parseInt(maturityValue);
+ Caracteristic caracteristic = persistenceService.getMaturityCaracteristic();
+ value = TuttiEntities.getQualitativeValue(caracteristic, id);
+ categoryType = SampleCategoryEnum.maturity;
+
+ } else if (StringUtils.isNotEmpty(ageValue)) {
+ categoryType = SampleCategoryEnum.age;
+ value = Float.parseFloat(ageValue);
+ }
+
+ return new Object[]{categoryType, value};
+ }
+
+ protected void importAttachments(File directory, Function<AttachmentRow, Integer> getObjetcIdFunction) {
+ File attachmentFile = new File(directory, ATTACHMENTS_FILE);
+ File attachmentDirectory = new File(directory, ATTACHMENTS_DIRECTORY);
+ Reader reader;
+
+ try {
+ reader = Files.newReader(attachmentFile, Charsets.UTF_8);
+
+ } catch (FileNotFoundException e) {
+ throw new TuttiTechnicalException(_("tutti.service.multipost.import.attachments.error", attachmentFile), e);
+ }
+
+ AttachmentRowModel attachmentModel = new AttachmentRowModel(csvSeparator, attachmentDirectory);
+
+ Import<AttachmentRow> attachmentImporter = Import.newImport(attachmentModel, reader);
+
+ for (AttachmentRow row : attachmentImporter) {
+ Integer objectId = getObjetcIdFunction.apply(row);
+ if (objectId != null) {
+ Attachment attachment = TuttiBeanFactory.newAttachment();
+ attachment.setName(row.getName());
+ attachment.setComment(row.getComment());
+ attachment.setObjectType(AttachementObjectTypeEnum.BATCH);
+
+ attachment.setObjectId(objectId);
+
+ persistenceService.createAttachment(attachment, row.getFile());
+ }
+ }
+ }
}
Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties
===================================================================
--- trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-05-13 13:00:31 UTC (rev 944)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-05-14 14:31:57 UTC (rev 945)
@@ -83,8 +83,20 @@
tutti.service.exportSumatra.header.station=
tutti.service.exportSumatra.header.weight=
tutti.service.mkDir.error=
+tutti.service.multipost.attachment.copy.error=
+tutti.service.multipost.explodeArchive.error=
+tutti.service.multipost.export.attachments.error=
+tutti.service.multipost.export.batches.error=
+tutti.service.multipost.export.benthos.error=
+tutti.service.multipost.export.deleteTempDirectory.error=
tutti.service.multipost.export.error=
tutti.service.multipost.export.frequencies.error=
+tutti.service.multipost.export.species.error=
+tutti.service.multipost.import.attachments.error=
+tutti.service.multipost.import.batches.error=
+tutti.service.multipost.import.frequencies.error=
+tutti.service.multipost.import.species.error=
+tutti.service.multipost.resolveArchive.error=
tutti.service.operations.accidental.error.species.required=
tutti.service.operations.computeWeights.benthos.error.incoherentCategoryWeight=
tutti.service.operations.computeWeights.benthos.error.incoherentParentCategoryWeight=
Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties
===================================================================
--- trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-05-13 13:00:31 UTC (rev 944)
+++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-05-14 14:31:57 UTC (rev 945)
@@ -81,8 +81,17 @@
tutti.service.exportSumatra.header.station=Station
tutti.service.exportSumatra.header.weight=Total
tutti.service.mkDir.error=Erreur à la création du dossier %s
-tutti.service.multipost.export.error=
-tutti.service.multipost.export.frequencies.error=
+tutti.service.multipost.attachment.copy.error=Erreur lors de l'export de la pièce-jointe %s
+tutti.service.multipost.explodeArchive.error=Erreur lors de la décompression de l'archive
+tutti.service.multipost.export.attachments.error=Erreur lors de l'export des pièces-jointes
+tutti.service.multipost.export.batches.error=Erreur lors de l'export des lots
+tutti.service.multipost.export.deleteTempDirectory.error=Erreur lors de la suppression du dossier temporaire
+tutti.service.multipost.export.error=Erreur lors de la création du fichier d'export
+tutti.service.multipost.export.frequencies.error=Erreur lors de l'export des mensurations
+tutti.service.multipost.import.attachments.error=Erreur lors de l'import des pièces-jointes
+tutti.service.multipost.import.batches.error=Erreur lors de l'import des lots
+tutti.service.multipost.import.frequencies.error=Erreur lors de l'import des mensurations
+tutti.service.multipost.resolveArchive.error=Erreur lors de l'ouverture de l'archive
tutti.service.operations.computeWeights.error.benthos.incoherentCategoryWeight=Le poids total des mensurations d'un lot du benthos est supérieur au poids de la catégorie
tutti.service.operations.computeWeights.error.benthos.incoherentParentCategoryWeight=Le poids de la catégorie d'un lot du benthos est différent de la somme des poids de ses sous-catégories
tutti.service.operations.computeWeights.error.benthos.incoherentRowWeightCategory=Le poids de sous-échantillon est renseigné alors que le lot n'a pas de poids.
Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractExportMultiPostAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractExportMultiPostAction.java (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractExportMultiPostAction.java 2013-05-14 14:31:57 UTC (rev 945)
@@ -0,0 +1,82 @@
+package fr.ifremer.tutti.ui.swing.content.operation.catches;
+
+import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.service.DecoratorService;
+import fr.ifremer.tutti.service.catches.multipost.TuttiMultiPostImportExportService;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.BenthosBatchUI;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.BenthosBatchUIHandler;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.BenthosBatchUIModel;
+import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler;
+import fr.ifremer.tutti.ui.swing.util.TuttiUI;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
+import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
+import org.jdesktop.beans.AbstractBean;
+
+import java.io.File;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 2.2
+ */
+public abstract class AbstractExportMultiPostAction<M extends AbstractBean, UI extends TuttiUI<M, ?>, H extends AbstractTuttiUIHandler<M, UI>>
+ extends AbstractTuttiAction<M, UI, H> {
+
+ protected File file;
+
+ protected FishingOperation currentOperation;
+
+ protected TuttiMultiPostImportExportService multiPostImportExportService;
+
+ public AbstractExportMultiPostAction(H handler) {
+ super(handler, false);
+ multiPostImportExportService = getContext().getMultiPostImportExportService();
+ }
+
+ @Override
+ protected boolean prepareAction() throws Exception {
+
+ boolean doAction = super.prepareAction();
+
+ if (doAction) {
+
+ EditCatchesUI catchesUI = getUI().getParentContainer(EditCatchesUI.class);
+ currentOperation = catchesUI.getModel().getFishingOperation();
+
+ String extension = getFileExtension();
+ // choose file to export
+ file = TuttiUIUtil.saveFile(
+ decorate(currentOperation, DecoratorService.FILE_NAME_COMPATIBLE) + "." + extension,
+ getContext().getMainUI(),
+ getFileChooserTitle(),
+ getFileChooserButton(),
+ "^.*\\." + extension,
+ getFileExtensionDescription()
+ );
+ if (file == null) {
+
+ // user cancel
+ doAction = false;
+ } else {
+
+ // ask user to confirm overwrite.
+ doAction = getHandler().askOverwriteFile(file);
+ }
+ }
+ return doAction;
+ }
+
+ protected abstract String getFileExtension();
+ protected abstract String getFileExtensionDescription();
+ protected abstract String getFileChooserTitle();
+ protected abstract String getFileChooserButton();
+
+ @Override
+ protected void releaseAction() {
+ file = null;
+ currentOperation = null;
+ super.releaseAction();
+ }
+
+}
\ No newline at end of file
Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractImportMultiPostAction.java (from rev 937, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportMultiPostAction.java)
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractImportMultiPostAction.java (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractImportMultiPostAction.java 2013-05-14 14:31:57 UTC (rev 945)
@@ -0,0 +1,97 @@
+package fr.ifremer.tutti.ui.swing.content.operation.catches;
+
+import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch;
+import fr.ifremer.tutti.service.DecoratorService;
+import fr.ifremer.tutti.service.catches.multipost.TuttiMultiPostImportExportService;
+import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationAction;
+import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI;
+import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler;
+import fr.ifremer.tutti.ui.swing.util.TuttiUI;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
+import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
+import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper;
+import org.jdesktop.beans.AbstractBean;
+
+import javax.swing.*;
+import java.awt.*;
+import java.io.File;
+import java.util.Collection;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 2.2
+ */
+public abstract class AbstractImportMultiPostAction <M extends AbstractBean, UI extends TuttiUI<M, ?>, H extends AbstractTuttiUIHandler<M, UI>>
+ extends AbstractTuttiAction<M, UI, H> {
+
+ protected File file;
+
+ protected EditFishingOperationAction editAction;
+
+ protected TuttiMultiPostImportExportService multiPostImportExportService;
+
+ public AbstractImportMultiPostAction(H handler) {
+ super(handler, false);
+ multiPostImportExportService = getContext().getMultiPostImportExportService();
+ }
+
+ public EditFishingOperationAction getEditAction() {
+ FishingOperationsUI parentUI = getUI().getParentContainer(FishingOperationsUI.class);
+ if (editAction == null) {
+ editAction = TuttiActionHelper.createLogicAction(parentUI.getHandler(),
+ EditFishingOperationAction.class);
+ }
+ return editAction;
+ }
+
+ @Override
+ protected boolean prepareAction() throws Exception {
+
+ boolean doAction = super.prepareAction();
+
+ if (doAction) {
+
+ // choose file to import
+ file = TuttiUIUtil.chooseFile(
+ getContext().getMainUI(),
+ getFileChooserTitle(),
+ getFileChooserButton(),
+ "^.*\\." + getFileExtension(),
+ getFileExtensionDescription()
+ );
+ doAction = file != null;
+ }
+ return doAction;
+ }
+
+ protected abstract String getFileExtension();
+ protected abstract String getFileExtensionDescription();
+ protected abstract String getFileChooserTitle();
+ protected abstract String getFileChooserButton();
+
+ @Override
+ protected void releaseAction() {
+ file = null;
+ super.releaseAction();
+ }
+
+ @Override
+ protected void doAction() throws Exception {
+ EditCatchesUI editCatchesUI = getUI().getParentContainer(EditCatchesUI.class);
+ EditCatchesUIModel editCatchesUIModel = editCatchesUI.getModel();
+
+ FishingOperation operation = editCatchesUIModel.getFishingOperation();
+
+ importBatches(operation);
+
+ String fishingOperationText = getEditAction().getFishingOperationTitle(operation);
+
+ getEditAction().loadCatchBatch(operation, fishingOperationText, true);
+ }
+
+ protected abstract void importBatches(FishingOperation operation);
+
+}
Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/MultiPostImportLogDialog.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/MultiPostImportLogDialog.css (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/MultiPostImportLogDialog.css 2013-05-14 14:31:57 UTC (rev 945)
@@ -0,0 +1,25 @@
+#importMultiPostLogDialog {
+ title: "tutti.multiPostImportLog.title";
+ modal: true;
+}
+
+#message {
+ text: {_("tutti.multiPostImportLog.message")};
+ border: { BorderFactory.createEmptyBorder(10, 20, 10, 20) };
+ font: { javax.swing.UIManager.getFont("Label.font") };
+ editable: false;
+ opaque: false;
+ wrapStyleWord: true;
+ lineWrap: true;
+ cursor: { null };
+ focusable: false;
+}
+
+#batchList {
+ editable: false;
+}
+
+#closeButton {
+ text: "tutti.multiPostImportLog.close";
+ actionIcon: close;
+}
\ No newline at end of file
Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/MultiPostImportLogDialog.jaxx
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/MultiPostImportLogDialog.jaxx (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/MultiPostImportLogDialog.jaxx 2013-05-14 14:31:57 UTC (rev 945)
@@ -0,0 +1,12 @@
+<JDialog id='importMultiPostLogDialog' layout='{new BorderLayout()}'>
+
+ <JTextArea id="message" constraints='BorderLayout.NORTH'/>
+
+ <JScrollPane constraints='BorderLayout.CENTER'>
+ <JTextArea id="batchList"/>
+ </JScrollPane>
+
+ <JButton id="closeButton" constraints='BorderLayout.SOUTH'
+ onActionPerformed='dispose();'/>
+
+</JDialog>
\ No newline at end of file
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-05-13 13:00:31 UTC (rev 944)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css 2013-05-14 14:31:57 UTC (rev 945)
@@ -57,7 +57,7 @@
text: "tutti.editBenthosBatch.action.importMultiPost";
toolTipText: "tutti.editBenthosBatch.action.importMultiPost.tip";
i18nMnemonic: "tutti.editBenthosBatch.action.importMultiPost.mnemonic";
- /*_tuttiAction: {ImportMultiPostAction.class};*/
+ _tuttiAction: {ImportMultiPostAction.class};
_help: {"tutti.editBenthosBatch.action.importMultiPost.help"};
}
@@ -66,7 +66,7 @@
text: "tutti.editBenthosBatch.action.exportMultiPost";
toolTipText: "tutti.editBenthosBatch.action.exportMultiPost.tip";
i18nMnemonic: "tutti.editBenthosBatch.action.exportMultiPost.mnemonic";
- /*_tuttiAction: {ExportMultiPostAction.class};*/
+ _tuttiAction: {ExportMultiPostAction.class};
_help: {"tutti.editBenthosBatch.action.exportMultiPost.help"};
}
Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ExportMultiPostAction.java (from rev 937, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ExportMultiPostAction.java)
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ExportMultiPostAction.java (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ExportMultiPostAction.java 2013-05-14 14:31:57 UTC (rev 945)
@@ -0,0 +1,59 @@
+package fr.ifremer.tutti.ui.swing.content.operation.catches.benthos;
+
+import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.service.DecoratorService;
+import fr.ifremer.tutti.service.catches.multipost.TuttiMultiPostImportExportService;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractExportMultiPostAction;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIHandler;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIModel;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
+import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
+
+import java.io.File;
+
+import static org.nuiton.i18n.I18n._;
+import static org.nuiton.i18n.I18n.n_;
+
+/**
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 2.2
+ */
+public class ExportMultiPostAction extends AbstractExportMultiPostAction<BenthosBatchUIModel, BenthosBatchUI, BenthosBatchUIHandler> {
+
+ public ExportMultiPostAction(BenthosBatchUIHandler handler) {
+ super(handler);
+ }
+
+ @Override
+ protected String getFileExtension() {
+ return "tuttiBenthos";
+ }
+
+ @Override
+ protected String getFileExtensionDescription() {
+ return _("tutti.common.file.tuttiBenthos");
+ }
+
+ @Override
+ protected String getFileChooserTitle() {
+ return _("tutti.editBenthosBatch.action.exportMultiPost.destinationFile.title");
+ }
+
+ @Override
+ protected String getFileChooserButton() {
+ return _("tutti.editBenthosBatch.action.exportMultiPost.destinationFile.button");
+ }
+
+ @Override
+ protected void doAction() throws Exception {
+ multiPostImportExportService.exportBenthos(file, currentOperation);
+ }
+
+ @Override
+ public void postSuccessAction() {
+ super.postSuccessAction();
+ sendMessage(_("tutti.editBenthosBatch.action.exportMultiPost.success", file));
+ }
+}
Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ImportMultiPostAction.java (from rev 937, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportMultiPostAction.java)
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ImportMultiPostAction.java (rev 0)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ImportMultiPostAction.java 2013-05-14 14:31:57 UTC (rev 945)
@@ -0,0 +1,80 @@
+package fr.ifremer.tutti.ui.swing.content.operation.catches.benthos;
+
+import fr.ifremer.tutti.persistence.entities.data.BenthosBatch;
+import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractImportMultiPostAction;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.MultiPostImportLogDialog;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIHandler;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIModel;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.Collection;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * @author kmorin <kmorin(a)codelutin.com>
+ * @since 2.2
+ */
+public class ImportMultiPostAction extends AbstractImportMultiPostAction<BenthosBatchUIModel, BenthosBatchUI, BenthosBatchUIHandler> {
+
+ protected Collection<BenthosBatch> notImportedBenthosBatches;
+
+ public ImportMultiPostAction(BenthosBatchUIHandler handler) {
+ super(handler);
+ }
+
+ @Override
+ protected String getFileExtension() {
+ return "tuttiBenthos";
+ }
+
+ @Override
+ protected String getFileExtensionDescription() {
+ return _("tutti.common.file.tuttiBenthos");
+ }
+
+ @Override
+ protected String getFileChooserTitle() {
+ return _("tutti.editBenthosBatch.action.importMultiPost.sourceFile.title");
+ }
+
+ @Override
+ protected String getFileChooserButton() {
+ return _("tutti.editBenthosBatch.action.importMultiPost.sourceFile.button");
+ }
+
+ @Override
+ protected void releaseAction() {
+ notImportedBenthosBatches = null;
+ super.releaseAction();
+ }
+
+ @Override
+ protected void importBatches(FishingOperation operation) {
+ notImportedBenthosBatches = multiPostImportExportService.importBenthos(file, operation);
+ }
+
+ @Override
+ public void postSuccessAction() {
+ super.postSuccessAction();
+
+ if (!notImportedBenthosBatches.isEmpty()) {
+ MultiPostImportLogDialog dialog = new MultiPostImportLogDialog((Dialog) getContext().getActionUI());
+
+ JTextArea batchList = dialog.getBatchList();
+ for (BenthosBatch sb : notImportedBenthosBatches) {
+ batchList.append("- " + decorate(sb.getSpecies()) + " / " + decorate(sb.getSampleCategoryValue()) + "\n");
+ }
+
+ dialog.setSize(400, 300);
+ dialog.setLocationRelativeTo(getContext().getMainUI());
+ dialog.setVisible(true);
+ }
+
+ sendMessage(_("tutti.editBenthosBatch.action.importMultiPost.success", file));
+ }
+}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ExportMultiPostAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ExportMultiPostAction.java 2013-05-13 13:00:31 UTC (rev 944)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ExportMultiPostAction.java 2013-05-14 14:31:57 UTC (rev 945)
@@ -27,6 +27,7 @@
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.service.DecoratorService;
import fr.ifremer.tutti.service.catches.multipost.TuttiMultiPostImportExportService;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractExportMultiPostAction;
import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI;
import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
@@ -39,55 +40,30 @@
* @author kmorin <kmorin(a)codelutin.com>
* @since 2.2
*/
-public class ExportMultiPostAction extends AbstractTuttiAction<SpeciesBatchUIModel, SpeciesBatchUI, SpeciesBatchUIHandler> {
+public class ExportMultiPostAction extends AbstractExportMultiPostAction<SpeciesBatchUIModel, SpeciesBatchUI, SpeciesBatchUIHandler> {
- protected File file;
-
- protected FishingOperation currentOperation;
-
- protected TuttiMultiPostImportExportService multiPostImportExportService;
-
public ExportMultiPostAction(SpeciesBatchUIHandler handler) {
- super(handler, false);
- multiPostImportExportService = getContext().getMultiPostImportExportService();
+ super(handler);
}
@Override
- protected boolean prepareAction() throws Exception {
+ protected String getFileExtension() {
+ return "tuttiSpecies";
+ }
- boolean doAction = super.prepareAction();
+ @Override
+ protected String getFileExtensionDescription() {
+ return _("tutti.common.file.tuttiSpecies");
+ }
- if (doAction) {
-
- EditCatchesUI catchesUI = getUI().getParentContainer(EditCatchesUI.class);
- currentOperation = catchesUI.getModel().getFishingOperation();
-
- // choose file to export
- file = TuttiUIUtil.saveFile(
- decorate(currentOperation, DecoratorService.FILE_NAME_COMPATIBLE) + ".zip",
- getContext().getMainUI(),
- _("tutti.editSpeciesBatch.action.exportMultiPost.destinationFile.title"),
- _("tutti.editSpeciesBatch.action.exportMultiPost.destinationFile.button"),
- "^.*\\.zip", _("tutti.common.file.zip")
- );
- if (file == null) {
-
- // user cancel
- doAction = false;
- } else {
-
- // ask user to confirm overwrite.
- doAction = getHandler().askOverwriteFile(file);
- }
- }
- return doAction;
+ @Override
+ protected String getFileChooserTitle() {
+ return _("tutti.editSpeciesBatch.action.exportMultiPost.destinationFile.title");
}
@Override
- protected void releaseAction() {
- file = null;
- currentOperation = null;
- super.releaseAction();
+ protected String getFileChooserButton() {
+ return _("tutti.editSpeciesBatch.action.exportMultiPost.destinationFile.button");
}
@Override
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportMultiPostAction.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportMultiPostAction.java 2013-05-13 13:00:31 UTC (rev 944)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportMultiPostAction.java 2013-05-14 14:31:57 UTC (rev 945)
@@ -24,19 +24,27 @@
* #L%
*/
-import fr.ifremer.tutti.persistence.entities.data.CatchBatch;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch;
+import fr.ifremer.tutti.service.catches.multipost.TuttiMultiPostImportExportService;
import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationAction;
import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractImportMultiPostAction;
import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI;
-import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIHandler;
import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel;
-import fr.ifremer.tutti.ui.swing.content.operation.catches.ImportPupitriPopupUI;
+import fr.ifremer.tutti.ui.swing.content.operation.catches.MultiPostImportLogDialog;
import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction;
import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper;
+import jaxx.runtime.SwingUtil;
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
import java.io.File;
+import java.util.Collection;
+import java.util.List;
import static org.nuiton.i18n.I18n._;
@@ -44,67 +52,62 @@
* @author kmorin <kmorin(a)codelutin.com>
* @since 2.2
*/
-public class ImportMultiPostAction extends AbstractTuttiAction<SpeciesBatchUIModel, SpeciesBatchUI, SpeciesBatchUIHandler> {
+public class ImportMultiPostAction extends AbstractImportMultiPostAction<SpeciesBatchUIModel, SpeciesBatchUI, SpeciesBatchUIHandler> {
- protected File file;
+ protected Collection<SpeciesBatch> notImportedSpeciesBatches;
- protected EditFishingOperationAction editAction;
-
public ImportMultiPostAction(SpeciesBatchUIHandler handler) {
- super(handler, false);
+ super(handler);
}
- public EditFishingOperationAction getEditAction() {
- FishingOperationsUI parentUI = getUI().getParentContainer(FishingOperationsUI.class);
- if (editAction == null) {
- editAction = TuttiActionHelper.createLogicAction(parentUI.getHandler(),
- EditFishingOperationAction.class);
- }
- return editAction;
+ @Override
+ protected String getFileExtension() {
+ return "tuttiSpecies";
}
@Override
- protected boolean prepareAction() throws Exception {
+ protected String getFileExtensionDescription() {
+ return _("tutti.common.file.tuttiSpecies");
+ }
- boolean doAction = super.prepareAction();
+ @Override
+ protected String getFileChooserTitle() {
+ return _("tutti.editSpeciesBatch.action.importMultiPost.sourceFile.title");
+ }
- if (doAction) {
-
- // choose file to import
- file = TuttiUIUtil.chooseFile(
- getContext().getMainUI(),
- _("tutti.editSpeciesBatch.action.importMultiPost.sourceFile.title"),
- _("tutti.editSpeciesBatch.action.importMultiPost.sourceFile.button")
- );
-
- doAction = file != null;
- }
- return doAction;
+ @Override
+ protected String getFileChooserButton() {
+ return _("tutti.editSpeciesBatch.action.importMultiPost.sourceFile.button");
}
@Override
protected void releaseAction() {
- file = null;
+ notImportedSpeciesBatches = null;
super.releaseAction();
}
@Override
- protected void doAction() throws Exception {
- EditCatchesUI editCatchesUI = getUI().getParentContainer(EditCatchesUI.class);
- EditCatchesUIModel editCatchesUIModel = editCatchesUI.getModel();
-
- FishingOperation operation = editCatchesUIModel.getFishingOperation();
- CatchBatch catchBatch = editCatchesUIModel.getCatchBatch();
-
- String fishingOperationText = getEditAction().getFishingOperationTitle(operation);
-
- getEditAction().loadCatchBatch(operation, fishingOperationText, true);
+ protected void importBatches(FishingOperation operation) {
+ notImportedSpeciesBatches = multiPostImportExportService.importSpecies(file, operation);
}
@Override
public void postSuccessAction() {
super.postSuccessAction();
+ if (!notImportedSpeciesBatches.isEmpty()) {
+ MultiPostImportLogDialog dialog = new MultiPostImportLogDialog((Dialog) getContext().getActionUI());
+
+ JTextArea batchList = dialog.getBatchList();
+ for (SpeciesBatch sb : notImportedSpeciesBatches) {
+ batchList.append("- " + decorate(sb.getSpecies()) + " / " + decorate(sb.getSampleCategoryValue()) + "\n");
+ }
+
+ dialog.setSize(400, 300);
+ dialog.setLocationRelativeTo(getContext().getMainUI());
+ dialog.setVisible(true);
+ }
+
sendMessage(_("tutti.editSpeciesBatch.action.importMultiPost.success", file));
}
}
Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-05-13 13:00:31 UTC (rev 944)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-05-14 14:31:57 UTC (rev 945)
@@ -77,11 +77,14 @@
tutti.common.askSaveBeforeLeaving.title=
tutti.common.cancel=
tutti.common.cancel.mnemonic=
+tutti.common.close=
tutti.common.datefield.tip=
tutti.common.file.csv=
tutti.common.file.export=
tutti.common.file.pdf=
tutti.common.file.protocol=
+tutti.common.file.tuttiBenthos=
+tutti.common.file.tuttiSpecies=
tutti.common.file.zip=
tutti.common.selected.fishingOperation=
tutti.common.selected.protocol=
@@ -293,10 +296,16 @@
tutti.editBenthosBatch.action.createMelag.mnemonic=
tutti.editBenthosBatch.action.createMelag.tip=
tutti.editBenthosBatch.action.exportMultiPost=
+tutti.editBenthosBatch.action.exportMultiPost.destinationFile.button=
+tutti.editBenthosBatch.action.exportMultiPost.destinationFile.title=
tutti.editBenthosBatch.action.exportMultiPost.mnemonic=
+tutti.editBenthosBatch.action.exportMultiPost.success=
tutti.editBenthosBatch.action.exportMultiPost.tip=
tutti.editBenthosBatch.action.importMultiPost=
tutti.editBenthosBatch.action.importMultiPost.mnemonic=
+tutti.editBenthosBatch.action.importMultiPost.sourceFile.button=
+tutti.editBenthosBatch.action.importMultiPost.sourceFile.title=
+tutti.editBenthosBatch.action.importMultiPost.success=
tutti.editBenthosBatch.action.importMultiPost.tip=
tutti.editBenthosBatch.action.removeBatch=
tutti.editBenthosBatch.action.removeBatch.mnemonic=
@@ -807,6 +816,9 @@
tutti.editSpeciesBatch.action.importMultiPost=
tutti.editSpeciesBatch.action.importMultiPost.destinationFile.title=
tutti.editSpeciesBatch.action.importMultiPost.mnemonic=
+tutti.editSpeciesBatch.action.importMultiPost.notImportedSpecies=
+tutti.editSpeciesBatch.action.importMultiPost.notImportedSpeciesDialog.message=
+tutti.editSpeciesBatch.action.importMultiPost.notImportedSpeciesDialog.title=
tutti.editSpeciesBatch.action.importMultiPost.sourceFile.button=
tutti.editSpeciesBatch.action.importMultiPost.sourceFile.title=
tutti.editSpeciesBatch.action.importMultiPost.success=
@@ -1108,6 +1120,9 @@
tutti.manageTemporaryReferential.title.choose.importTemporarySpeciesFile=
tutti.manageTemporaryReferential.title.choose.importTemporaryVesselFile=
tutti.message.action.running=
+tutti.multiPostImportLog.close=
+tutti.multiPostImportLog.message=
+tutti.multiPostImportLog.title=
tutti.property.=
tutti.property.get.error=
tutti.property.set.error=
Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-05-13 13:00:31 UTC (rev 944)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-05-14 14:31:57 UTC (rev 945)
@@ -78,6 +78,8 @@
tutti.common.file.csv=Extension d'un fichier csv
tutti.common.file.pdf=Extension d'un fichier pdf
tutti.common.file.protocol=Extension d'un fichier de protocole Tutti
+tutti.common.file.tuttiBenthos=Fichier d'import/export des lots de benthos
+tutti.common.file.tuttiSpecies=Fichier d'import/export des lots d'espèces
tutti.common.file.zip=Extension d'une archive zip
tutti.common.selected.fishingOperation=l'opération de pêche sélectionnée
tutti.common.selected.protocol=le protocole sélectionné
@@ -288,10 +290,16 @@
tutti.editBenthosBatch.action.createMelag.mnemonic=C
tutti.editBenthosBatch.action.createMelag.tip=Calcul des poids des lots appartenant à un MELAG
tutti.editBenthosBatch.action.exportMultiPost=Exporter les lots de benthos
+tutti.editBenthosBatch.action.exportMultiPost.destinationFile.button=Choisir le fichier pour l'export
+tutti.editBenthosBatch.action.exportMultiPost.destinationFile.title=Exporter les lots du benthos
tutti.editBenthosBatch.action.exportMultiPost.mnemonic=E
+tutti.editBenthosBatch.action.exportMultiPost.success=Les lots du benthos ont été exportés dans le fichier %s
tutti.editBenthosBatch.action.exportMultiPost.tip=Exporter les lots de benthos pour les importer sur le poste maître
tutti.editBenthosBatch.action.importMultiPost=Importer des lots de benthos
tutti.editBenthosBatch.action.importMultiPost.mnemonic=I
+tutti.editBenthosBatch.action.importMultiPost.sourceFile.button=Choisir le fichier à importer
+tutti.editBenthosBatch.action.importMultiPost.sourceFile.title=Importer des lots de benthos
+tutti.editBenthosBatch.action.importMultiPost.success=Des lots de benthos ont été importés depuis le fichier %s
tutti.editBenthosBatch.action.importMultiPost.tip=Importer des lots de benthos créés sur un poste satellite
tutti.editBenthosBatch.action.removeBatch=Supprimer le lot
tutti.editBenthosBatch.action.removeBatch.mnemonic=S
@@ -505,7 +513,7 @@
tutti.editFishingOperation.action.importCasino.mnemonic=I
tutti.editFishingOperation.action.importCasino.tip=Import Casino
tutti.editFishingOperation.action.resetEditFishingOperation=Réinitialiser
-tutti.editFishingOperation.action.resetEditFishingOperation.mnemonic=
+tutti.editFishingOperation.action.resetEditFishingOperation.mnemonic=R
tutti.editFishingOperation.action.resetEditFishingOperation.tip=Réinitialiser l'édition du trait
tutti.editFishingOperation.action.resetFishingOperationValidState=Réinitialiser
tutti.editFishingOperation.action.resetFishingOperationValidState.mnemonic=é
@@ -772,13 +780,13 @@
tutti.editSpeciesBatch.action.exportMultiPost.destinationFile.button=Choisir le fichier pour l'export
tutti.editSpeciesBatch.action.exportMultiPost.destinationFile.title=Exporter les lots d'espèces
tutti.editSpeciesBatch.action.exportMultiPost.mnemonic=E
-tutti.editSpeciesBatch.action.exportMultiPost.success=
+tutti.editSpeciesBatch.action.exportMultiPost.success=Les lots d'espèces ont été exportés dans le fichier %s
tutti.editSpeciesBatch.action.exportMultiPost.tip=Exporter les lots d'espèces pour les importer sur le poste maître
tutti.editSpeciesBatch.action.importMultiPost=Importer des lots d'espèces
tutti.editSpeciesBatch.action.importMultiPost.mnemonic=I
tutti.editSpeciesBatch.action.importMultiPost.sourceFile.button=Choisir le fichier à importer
tutti.editSpeciesBatch.action.importMultiPost.sourceFile.title=Importer des lots d'espèces
-tutti.editSpeciesBatch.action.importMultiPost.success=
+tutti.editSpeciesBatch.action.importMultiPost.success=Des lots d'espèces ont été importés depuis le fichier %s
tutti.editSpeciesBatch.action.importMultiPost.tip=Importer des lots d'espèces créés sur un poste satellite
tutti.editSpeciesBatch.action.removeBatch=Supprimer le lot
tutti.editSpeciesBatch.action.removeBatch.mnemonic=S
@@ -1075,7 +1083,9 @@
tutti.manageTemporaryReferential.title.choose.importTemporarySpeciesFile=Importer un réferentiel Espèce
tutti.manageTemporaryReferential.title.choose.importTemporaryVesselFile=Importer un réferentiel Navire
tutti.message.action.running=<html>Action <strong>%s</strong> en cours d'execution...<hr/></html>
-tutti.property.=
+tutti.multiPostImportLog.close=Fermer
+tutti.multiPostImportLog.message=Des lots n'ont pas été importés car des lots existants avaient déjà les mêmes espèces et catégorie de tri
+tutti.multiPostImportLog.title=Lots non importés
tutti.property.get.error=Propriété %1s non trouvée sur l'objet de type %2s
tutti.property.set.error=Propriété %1s non trouvée sur l'objet de type %2s
tutti.sampleOrder.caracteristicNotFound=La caractéristique d'id %s n'est pas prévue pour l'échantillonage
1
0
Author: tchemit
Date: 2013-05-13 15:00:31 +0200 (Mon, 13 May 2013)
New Revision: 944
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/944
Log:
optimize dependencies
Modified:
tags/tutti-2.2/tutti-service/pom.xml
Modified: tags/tutti-2.2/tutti-service/pom.xml
===================================================================
--- tags/tutti-2.2/tutti-service/pom.xml 2013-05-13 12:55:23 UTC (rev 943)
+++ tags/tutti-2.2/tutti-service/pom.xml 2013-05-13 13:00:31 UTC (rev 944)
@@ -125,11 +125,6 @@
<artifactId>xwork-core</artifactId>
</dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-tx</artifactId>
- </dependency>
-
<!-- Logging -->
<dependency>
1
0
r943 - in trunk: . tutti-persistence tutti-service tutti-ui-swing
by maven-release@users.forge.codelutin.com 13 May '13
by maven-release@users.forge.codelutin.com 13 May '13
13 May '13
Author: maven-release
Date: 2013-05-13 14:55:23 +0200 (Mon, 13 May 2013)
New Revision: 943
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/943
Log:
[maven-release-plugin] prepare for next development iteration
Modified:
trunk/pom.xml
trunk/tutti-persistence/pom.xml
trunk/tutti-service/pom.xml
trunk/tutti-ui-swing/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2013-05-13 12:55:15 UTC (rev 942)
+++ trunk/pom.xml 2013-05-13 12:55:23 UTC (rev 943)
@@ -33,7 +33,7 @@
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>2.2</version>
+ <version>2.3-SNAPSHOT</version>
<modules>
<module>tutti-persistence</module>
@@ -89,12 +89,12 @@
</developers>
<scm>
- <url>http://svn.forge.codelutin.com/svn/tutti/tags/tutti-2.2</url>
+ <url>http://svn.forge.codelutin.com/svn/tutti/trunk</url>
<connection>
- scm:svn:http://svn.forge.codelutin.com/svn/tutti/tags/tutti-2.2
+ scm:svn:http://svn.forge.codelutin.com/svn/tutti/trunk
</connection>
<developerConnection>
- scm:svn:http://svn.forge.codelutin.com/svn/tutti/tags/tutti-2.2
+ scm:svn:http://svn.forge.codelutin.com/svn/tutti/trunk
</developerConnection>
</scm>
Modified: trunk/tutti-persistence/pom.xml
===================================================================
--- trunk/tutti-persistence/pom.xml 2013-05-13 12:55:15 UTC (rev 942)
+++ trunk/tutti-persistence/pom.xml 2013-05-13 12:55:23 UTC (rev 943)
@@ -28,7 +28,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>2.2</version>
+ <version>2.3-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
Modified: trunk/tutti-service/pom.xml
===================================================================
--- trunk/tutti-service/pom.xml 2013-05-13 12:55:15 UTC (rev 942)
+++ trunk/tutti-service/pom.xml 2013-05-13 12:55:23 UTC (rev 943)
@@ -28,7 +28,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>2.2</version>
+ <version>2.3-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
Modified: trunk/tutti-ui-swing/pom.xml
===================================================================
--- trunk/tutti-ui-swing/pom.xml 2013-05-13 12:55:15 UTC (rev 942)
+++ trunk/tutti-ui-swing/pom.xml 2013-05-13 12:55:23 UTC (rev 943)
@@ -28,7 +28,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>2.2</version>
+ <version>2.3-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
1
0
Author: maven-release
Date: 2013-05-13 14:55:15 +0200 (Mon, 13 May 2013)
New Revision: 942
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/942
Log:
[maven-release-plugin] copy for tag tutti-2.2
Added:
tags/tutti-2.2/
1
0
r941 - in trunk: . tutti-persistence tutti-service tutti-ui-swing
by maven-release@users.forge.codelutin.com 13 May '13
by maven-release@users.forge.codelutin.com 13 May '13
13 May '13
Author: maven-release
Date: 2013-05-13 14:55:06 +0200 (Mon, 13 May 2013)
New Revision: 941
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/941
Log:
[maven-release-plugin] prepare release tutti-2.2
Modified:
trunk/pom.xml
trunk/tutti-persistence/pom.xml
trunk/tutti-service/pom.xml
trunk/tutti-ui-swing/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2013-05-13 12:46:36 UTC (rev 940)
+++ trunk/pom.xml 2013-05-13 12:55:06 UTC (rev 941)
@@ -33,7 +33,7 @@
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>2.2-SNAPSHOT</version>
+ <version>2.2</version>
<modules>
<module>tutti-persistence</module>
@@ -89,12 +89,12 @@
</developers>
<scm>
- <url>http://svn.forge.codelutin.com/svn/tutti/trunk</url>
+ <url>http://svn.forge.codelutin.com/svn/tutti/tags/tutti-2.2</url>
<connection>
- scm:svn:http://svn.forge.codelutin.com/svn/tutti/trunk
+ scm:svn:http://svn.forge.codelutin.com/svn/tutti/tags/tutti-2.2
</connection>
<developerConnection>
- scm:svn:http://svn.forge.codelutin.com/svn/tutti/trunk
+ scm:svn:http://svn.forge.codelutin.com/svn/tutti/tags/tutti-2.2
</developerConnection>
</scm>
Modified: trunk/tutti-persistence/pom.xml
===================================================================
--- trunk/tutti-persistence/pom.xml 2013-05-13 12:46:36 UTC (rev 940)
+++ trunk/tutti-persistence/pom.xml 2013-05-13 12:55:06 UTC (rev 941)
@@ -28,7 +28,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>2.2-SNAPSHOT</version>
+ <version>2.2</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
Modified: trunk/tutti-service/pom.xml
===================================================================
--- trunk/tutti-service/pom.xml 2013-05-13 12:46:36 UTC (rev 940)
+++ trunk/tutti-service/pom.xml 2013-05-13 12:55:06 UTC (rev 941)
@@ -28,7 +28,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>2.2-SNAPSHOT</version>
+ <version>2.2</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
Modified: trunk/tutti-ui-swing/pom.xml
===================================================================
--- trunk/tutti-ui-swing/pom.xml 2013-05-13 12:46:36 UTC (rev 940)
+++ trunk/tutti-ui-swing/pom.xml 2013-05-13 12:55:06 UTC (rev 941)
@@ -28,7 +28,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>2.2-SNAPSHOT</version>
+ <version>2.2</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
1
0
r940 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test tutti-service/src/test/java/fr/ifremer/tutti/service/export
by tchemit@users.forge.codelutin.com 13 May '13
by tchemit@users.forge.codelutin.com 13 May '13
13 May '13
Author: tchemit
Date: 2013-05-13 14:46:36 +0200 (Mon, 13 May 2013)
New Revision: 940
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/940
Log:
fix tests
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.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/test/DatabaseResource.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.java 2013-05-13 12:12:16 UTC (rev 939)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.java 2013-05-13 12:46:36 UTC (rev 940)
@@ -329,6 +329,8 @@
log.info("After test " + testClass);
}
+ closeSpring();
+
Set<Failure> failures = TuttiRunListener.getFailuresForClass(
description.getClassName());
@@ -360,6 +362,11 @@
Thread.currentThread().setContextClassLoader(oldClassLoader);
}
+ TuttiPersistenceConfig.setInstance(null);
+ }
+
+ protected void closeSpring() {
+
TuttiPersistenceServiceLocator.close();
if (beanFactoryReferenceLocation != null) {
@@ -367,8 +374,6 @@
// push back default tutti configuration
TuttiPersistenceServiceLocator.initTuttiDefault();
}
-
- TuttiPersistenceConfig.setInstance(null);
}
public Connection createEmptyDb(String dbDirectory,
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-05-13 12:12:16 UTC (rev 939)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java 2013-05-13 12:46:36 UTC (rev 940)
@@ -232,19 +232,6 @@
SURVEY_CONTENT);
}
- protected void assertFileContent(String message,
- File actualFile,
- String expectedContent) throws IOException {
- Assert.assertTrue(actualFile.exists());
- String fileContent = Files.toString(actualFile,
- Charsets.UTF_8).trim();
- Assert.assertEquals(expectedContent, fileContent);
-
- if (log.isInfoEnabled()) {
- log.info(message + fileContent);
- }
- }
-
@Test
public void exportOperations() throws Exception {
@@ -340,4 +327,17 @@
exportContext.accidentalCatchFile,
ACCIDENTAL_CATCH_CONTENT);
}
+
+ protected void assertFileContent(String message,
+ File actualFile,
+ String expectedContent) throws IOException {
+ Assert.assertTrue(actualFile.exists());
+ String fileContent = Files.toString(actualFile,
+ Charsets.UTF_8).trim();
+ Assert.assertEquals(expectedContent, fileContent);
+
+ if (log.isInfoEnabled()) {
+ log.info(message + fileContent);
+ }
+ }
}
1
0
r939 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch tutti-service/src/main/java/fr/ifremer/tutti/service 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 13 May '13
by tchemit@users.forge.codelutin.com 13 May '13
13 May '13
Author: tchemit
Date: 2013-05-13 14:12:16 +0200 (Mon, 13 May 2013)
New Revision: 939
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/939
Log:
fixes #1875: [IMP/EXP] - Export des donn?\195?\169es de campagne : format g?\195?\169n?\195?\169rique
Modified:
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchPersistenceHelper.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportRow.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/ExportSampleCategory.java
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.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/service/batch/BatchPersistenceHelper.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchPersistenceHelper.java 2013-05-13 09:40:03 UTC (rev 938)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchPersistenceHelper.java 2013-05-13 12:12:16 UTC (rev 939)
@@ -470,8 +470,9 @@
}
public Integer convertSampleCategoryValueIntoQualitativeId(Serializable value) {
- if (value == null)
+ if (value == null) {
return null;
+ }
Integer qualitativeValueId = null;
if (value instanceof CaracteristicQualitativeValue) {
CaracteristicQualitativeValue cqValue = (CaracteristicQualitativeValue) value;
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-05-13 09:40:03 UTC (rev 938)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-05-13 12:12:16 UTC (rev 939)
@@ -32,11 +32,14 @@
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.Person;
import org.apache.commons.beanutils.BeanUtilsBean;
+import org.apache.commons.beanutils.NestedNullException;
+import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang3.StringUtils;
import org.nuiton.util.csv.Common;
import org.nuiton.util.csv.ExportModel;
import org.nuiton.util.csv.ExportableColumn;
import org.nuiton.util.csv.ValueFormatter;
+import org.nuiton.util.csv.ValueGetter;
import org.nuiton.util.csv.ValueParserFormatter;
import org.nuiton.util.csv.ext.AbstractExportModel;
import org.nuiton.util.csv.ext.AbstractImportExportModel;
@@ -135,6 +138,14 @@
return new ForeignKeyValue<E>(type, propertyName, universe);
}
+ public <T> ExportableColumn<M, T> newNullableColumnForExport(String headerName, String propertyName, ValueFormatter<T> valueFormatter) {
+ return modelBuilder.newColumnForExport(headerName, new BeanNullableGetter<M, T>(propertyName), valueFormatter);
+ }
+
+ public ExportableColumn<M, String> newNullableColumnForExport(String headerName, String propertyName) {
+ return newNullableColumnForExport(headerName, propertyName, TuttiCsvUtil.STRING);
+ }
+
}
public static class StringParserFormatter extends Common.NullableParserFormatter<String> {
@@ -206,6 +217,26 @@
}
}
+ public static class BeanNullableGetter<E, T> implements ValueGetter<E, T> {
+
+ protected String propertyName;
+
+ BeanNullableGetter(String propertyName) {
+ this.propertyName = propertyName;
+ }
+
+ @Override
+ public T get(E object) throws Exception {
+ T value;
+ try {
+ value = (T) PropertyUtils.getProperty(object, propertyName);
+ } catch (NestedNullException e) {
+ value = null;
+ }
+ return value;
+ }
+ }
+
/**
* @author tchemit <chemit(a)codelutin.com>
* @since 1.0
@@ -281,7 +312,7 @@
}
public static <E> DecoratorPropertyFormatter<E> newDecoratorFormatter(Decorator<E> decorator,
- String defaultNullValue) {
+ String defaultNullValue) {
return new DecoratorPropertyFormatter<E>(decorator, defaultNullValue);
}
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-05-13 09:40:03 UTC (rev 938)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.java 2013-05-13 12:12:16 UTC (rev 939)
@@ -26,6 +26,7 @@
import fr.ifremer.tutti.persistence.entities.data.BatchContainer;
import fr.ifremer.tutti.persistence.entities.data.BenthosBatch;
+import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency;
import fr.ifremer.tutti.persistence.entities.data.Cruise;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.persistence.entities.data.Program;
@@ -42,6 +43,7 @@
import java.io.Serializable;
import java.util.List;
+import java.util.Map;
/**
* Model of a catch export.
@@ -53,8 +55,11 @@
public static final String WEIGHT_OR_VOL_TYPE = "Poids";
- public CatchExportModel(char separator, List<SampleCategoryEnum> samplingOrder) {
+ Map<SampleCategoryEnum, Caracteristic> sampleCategoryToCaracteristics;
+
+ public CatchExportModel(char separator, List<SampleCategoryEnum> samplingOrder, Map<SampleCategoryEnum, Caracteristic> sampleCategoryToCaracteristics) {
super(separator);
+ this.sampleCategoryToCaracteristics = sampleCategoryToCaracteristics;
newColumnForExport("Annee", Cruise.PROPERTY_BEGIN_DATE, TuttiCsvUtil.YEAR);
newColumnForExport("Serie", Cruise.PROPERTY_PROGRAM, Program.PROPERTY_NAME);
@@ -64,68 +69,42 @@
newColumnForExport("Id_Operation", FishingOperation.PROPERTY_STATION_NUMBER);
newColumnForExport("NumOrdre_Station", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, TuttiCsvUtil.INTEGER);
newColumnForExport("Navire", Cruise.PROPERTY_VESSEL, Vessel.PROPERTY_NAME);
+ newColumnForExport("Taxon", SpeciesBatch.PROPERTY_SPECIES + "." + Species.PROPERTY_REFERENCE_TAXON_ID, TuttiCsvUtil.INTEGER);
- newColumnForExport("Taxon", CatchExportRow.SPECIES_SAMPLE_CATEGORY);
- newColumnForExport("NumOrdre_Taxon_H2", CatchExportRow.SPECIES_SAMPLE_CATEGORY + "." + ExportSampleCategory.PROPERTY_RANK_ORDER, TuttiCsvUtil.INTEGER);
- newColumnForExport("Tot_Taxon", CatchExportRow.SPECIES_SAMPLE_CATEGORY);
- newColumnForExport("Ech_Taxon", CatchExportRow.SPECIES_SAMPLE_CATEGORY);
- newColumnForExport("Type_Volume_Poids_Taxon", CatchExportRow.SPECIES_SAMPLE_CATEGORY + "." + ExportSampleCategory.PROPERTY_WEIGHT_OR_VOL_TYPE);
- newColumnForExport("Unite_Volume_Poids_Taxon", CatchExportRow.SPECIES_SAMPLE_CATEGORY + "." + Caracteristic.PROPERTY_UNIT);
-
for (SampleCategoryEnum sampleCategoryEnum : samplingOrder) {
switch (sampleCategoryEnum) {
case sortedUnsorted:
- newColumnForExport("Vrac/Hors_Vrac", CatchExportRow.SORTED_UNSORTED_SAMPLE_CATEGORY);
- newColumnForExport("NumOrdre_Vrac_H2", CatchExportRow.SORTED_UNSORTED_SAMPLE_CATEGORY + "." + ExportSampleCategory.PROPERTY_RANK_ORDER, TuttiCsvUtil.INTEGER);
- newColumnForExport("Tot_Vrac", CatchExportRow.SORTED_UNSORTED_SAMPLE_CATEGORY);
- newColumnForExport("Ech_Vrac", CatchExportRow.SORTED_UNSORTED_SAMPLE_CATEGORY);
- newColumnForExport("Type_Volume_Poids_Vrac", CatchExportRow.SORTED_UNSORTED_SAMPLE_CATEGORY + "." + ExportSampleCategory.PROPERTY_WEIGHT_OR_VOL_TYPE);
- newColumnForExport("Unite_Volume_Poids_Vrac", CatchExportRow.SORTED_UNSORTED_SAMPLE_CATEGORY + "." + Caracteristic.PROPERTY_UNIT);
+ addSampleCategory("Vrac", CatchExportRow.SORTED_UNSORTED_SAMPLE_CATEGORY);
break;
case size:
- newColumnForExport("Categorie", CatchExportRow.SIZE_SAMPLE_CATEGORY);
- newColumnForExport("NumOrdre_Cat_H2", CatchExportRow.SIZE_SAMPLE_CATEGORY + "." + ExportSampleCategory.PROPERTY_RANK_ORDER, TuttiCsvUtil.INTEGER);
- newColumnForExport("Tot_Cat", CatchExportRow.SIZE_SAMPLE_CATEGORY);
- newColumnForExport("Ech_Cat", CatchExportRow.SIZE_SAMPLE_CATEGORY);
- newColumnForExport("Type_Volume_Poids_Cat", CatchExportRow.SIZE_SAMPLE_CATEGORY + "." + ExportSampleCategory.PROPERTY_WEIGHT_OR_VOL_TYPE);
- newColumnForExport("Unite_Volume_Poids_Cat", CatchExportRow.SIZE_SAMPLE_CATEGORY + "." + Caracteristic.PROPERTY_UNIT);
+ addSampleCategory("Cat_Tri", CatchExportRow.SIZE_SAMPLE_CATEGORY);
break;
case sex:
- newColumnForExport("Sexe", CatchExportRow.SEX_SAMPLE_CATEGORY);
- newColumnForExport("NumOrdre_Sexe_H2", CatchExportRow.SEX_SAMPLE_CATEGORY + "." + ExportSampleCategory.PROPERTY_RANK_ORDER, TuttiCsvUtil.INTEGER);
- newColumnForExport("Tot_Sexe", CatchExportRow.SEX_SAMPLE_CATEGORY);
- newColumnForExport("Ech_Sexe", CatchExportRow.SEX_SAMPLE_CATEGORY);
- newColumnForExport("Type_Volume_Poids_Sexe", CatchExportRow.SEX_SAMPLE_CATEGORY + "." + ExportSampleCategory.PROPERTY_WEIGHT_OR_VOL_TYPE);
- newColumnForExport("Unite_Volume_Poids_Sexe", CatchExportRow.SEX_SAMPLE_CATEGORY + "." + Caracteristic.PROPERTY_UNIT);
+ addSampleCategory("Sexe", CatchExportRow.SEX_SAMPLE_CATEGORY);
break;
case maturity:
- newColumnForExport("Maturite", CatchExportRow.MATURITY_SAMPLE_CATEGORY);
- newColumnForExport("NumOrdre_Maturite_H2", CatchExportRow.MATURITY_SAMPLE_CATEGORY + "." + ExportSampleCategory.PROPERTY_RANK_ORDER, TuttiCsvUtil.INTEGER);
- newColumnForExport("Tot_Maturite", CatchExportRow.MATURITY_SAMPLE_CATEGORY);
- newColumnForExport("Ech_Maturite", CatchExportRow.MATURITY_SAMPLE_CATEGORY);
- newColumnForExport("Type_Volume_Poids_Maturite", CatchExportRow.MATURITY_SAMPLE_CATEGORY + "." + ExportSampleCategory.PROPERTY_WEIGHT_OR_VOL_TYPE);
- newColumnForExport("Unite_Volume_Poids_Maturite", CatchExportRow.MATURITY_SAMPLE_CATEGORY + "." + Caracteristic.PROPERTY_UNIT);
+ addSampleCategory("Maturite", CatchExportRow.MATURITY_SAMPLE_CATEGORY);
break;
case age:
- newColumnForExport("Age", CatchExportRow.AGE_SAMPLE_CATEGORY);
- newColumnForExport("Num_Ordre_Age_H2", CatchExportRow.AGE_SAMPLE_CATEGORY);
+ addSampleCategory("Age", CatchExportRow.AGE_SAMPLE_CATEGORY);
break;
}
}
// mensuration
- newColumnForExport("Code_Longueur", CatchExportRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC, Caracteristic.PROPERTY_ID);
- newColumnForExport("Taille", CatchExportRow.FREQUENCY_LENGTH_STEP);
- newColumnForExport("NumOrdre_Taille_H2", CatchExportRow.FREQUENCY_RANK_ORDER, TuttiCsvUtil.INTEGER);
- newColumnForExport("Poids_Classe_Taille", CatchExportRow.FREQUENCY_WEIGHT, TuttiCsvUtil.FLOAT);
- newColumnForExport("Unite_Taille", CatchExportRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC + "." + Caracteristic.PROPERTY_UNIT);
- newColumnForExport("Precision_Mesure", CatchExportRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC + "." + Caracteristic.PROPERTY_PRECISION, TuttiCsvUtil.FLOAT);
- newColumnForExport("Nbr", CatchExportRow.FREQUENCY_NUMBER, TuttiCsvUtil.INTEGER);
+ newNullableColumnForExport("Code_Longueur", CatchExportRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC + "." + Caracteristic.PROPERTY_ID);
+ newNullableColumnForExport("Taille", CatchExportRow.FREQUENCY_LENGTH_STEP, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("NumOrdre_Taille_H2", CatchExportRow.FREQUENCY_RANK_ORDER, TuttiCsvUtil.INTEGER);
+ newNullableColumnForExport("Poids_Classe_Taille", CatchExportRow.FREQUENCY_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Unite_Taille", CatchExportRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC + "." + Caracteristic.PROPERTY_UNIT);
+ newNullableColumnForExport("Precision_Mesure", CatchExportRow.FREQUENCY_LENGTH_STEP_CARACTERISTIC + "." + Caracteristic.PROPERTY_PRECISION, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Nbr", CatchExportRow.FREQUENCY_NUMBER, TuttiCsvUtil.INTEGER);
- newColumnForExport("Poids_Reference", Cruise.PROPERTY_HEAD_OF_SORT_ROOM);
- newColumnForExport("Coef_Final_Elevation", Cruise.PROPERTY_COMMENT);
+ //TODO
+// newColumnForExport("Poids_Reference", Cruise.PROPERTY_HEAD_OF_SORT_ROOM);
+// newColumnForExport("Coef_Final_Elevation", Cruise.PROPERTY_COMMENT);
}
public void prepareRows(PersistenceService persistenceService,
@@ -135,35 +114,20 @@
BatchContainer<SpeciesBatch> rootSpeciesBatch,
BatchContainer<BenthosBatch> rootBenthosBatch) {
-
for (SpeciesBatch speciesBatch : rootSpeciesBatch.getChildren()) {
CatchExportRow row = new CatchExportRow();
row.setCruise(cruise);
row.setFishingOperation(operation);
- ExportSampleCategory<Species> speciesCategory = new ExportSampleCategory<Species>();
- speciesCategory.setCategoryValue(speciesBatch.getSpecies());
- speciesCategory.setCategoryWeight(speciesBatch.getWeight());
- speciesCategory.setComputedWeight(speciesBatch.getComputedWeight());
- speciesCategory.setNumber(speciesBatch.getNumber());
- speciesCategory.setComputedNumber(speciesBatch.getComputedNumber());
- speciesCategory.setWeightOrVolType(WEIGHT_OR_VOL_TYPE);
- speciesCategory.setRankOrder(speciesBatch.getRankOrder());
- row.setSpeciesCategory(speciesCategory);
+ row.setSpecies(speciesBatch.getSpecies());
+
prepareRows(persistenceService, row, rows, speciesBatch);
}
for (BenthosBatch benthosBatch : rootBenthosBatch.getChildren()) {
CatchExportRow row = new CatchExportRow();
row.setCruise(cruise);
row.setFishingOperation(operation);
- ExportSampleCategory<Species> speciesCategory = new ExportSampleCategory<Species>();
- speciesCategory.setCategoryValue(benthosBatch.getSpecies());
- speciesCategory.setCategoryWeight(benthosBatch.getWeight());
- speciesCategory.setComputedWeight(benthosBatch.getComputedWeight());
- speciesCategory.setNumber(benthosBatch.getNumber());
- speciesCategory.setComputedNumber(benthosBatch.getComputedNumber());
- speciesCategory.setWeightOrVolType(WEIGHT_OR_VOL_TYPE);
- speciesCategory.setRankOrder(benthosBatch.getRankOrder());
- row.setSpeciesCategory(speciesCategory);
+ row.setSpecies(benthosBatch.getSpecies());
+
prepareRows(persistenceService, row, rows, benthosBatch);
}
}
@@ -175,9 +139,14 @@
ExportSampleCategory<Serializable> sampleCategory =
new ExportSampleCategory<Serializable>();
- sampleCategory.setCategoryType(speciesBatch.getSampleCategoryType());
+ SampleCategoryEnum sampleCategoryType = speciesBatch.getSampleCategoryType();
+ Caracteristic caracteristic = sampleCategoryToCaracteristics.get(sampleCategoryType);
+ sampleCategory.setCategoryCaracteristic(caracteristic);
+ sampleCategory.setCategoryType(sampleCategoryType);
sampleCategory.setCategoryValue(speciesBatch.getSampleCategoryValue());
sampleCategory.setCategoryWeight(speciesBatch.getSampleCategoryWeight());
+ sampleCategory.setSampleWeight(speciesBatch.getWeight());
+
sampleCategory.setComputedWeight(speciesBatch.getSampleCategoryComputedWeight());
sampleCategory.setNumber(speciesBatch.getNumber());
sampleCategory.setComputedNumber(speciesBatch.getComputedNumber());
@@ -201,7 +170,7 @@
} else {
for (SpeciesBatchFrequency batchFrequency : speciesBatchFrequency) {
CatchExportRow row = currentRow.copy();
- row.setFrequency(batchFrequency);
+ row.setSpeciesFrequency(batchFrequency);
rows.add(row);
}
}
@@ -218,6 +187,60 @@
CatchExportRow currentRow,
List<CatchExportRow> rows,
BenthosBatch benthosBatch) {
+
+ ExportSampleCategory<Serializable> sampleCategory =
+ new ExportSampleCategory<Serializable>();
+ SampleCategoryEnum sampleCategoryType = benthosBatch.getSampleCategoryType();
+ Caracteristic caracteristic = sampleCategoryToCaracteristics.get(sampleCategoryType);
+ sampleCategory.setCategoryCaracteristic(caracteristic);
+ sampleCategory.setCategoryType(sampleCategoryType);
+ sampleCategory.setCategoryValue(benthosBatch.getSampleCategoryValue());
+ sampleCategory.setCategoryWeight(benthosBatch.getSampleCategoryWeight());
+ sampleCategory.setSampleWeight(benthosBatch.getWeight());
+
+ sampleCategory.setComputedWeight(benthosBatch.getSampleCategoryComputedWeight());
+ sampleCategory.setNumber(benthosBatch.getNumber());
+ sampleCategory.setComputedNumber(benthosBatch.getComputedNumber());
+ sampleCategory.setWeightOrVolType(WEIGHT_OR_VOL_TYPE);
+ sampleCategory.setRankOrder(benthosBatch.getRankOrder());
+
+ currentRow.addCategory(sampleCategory);
+
+ if (benthosBatch.isChildBatchsEmpty()) {
+
+ // on a leaf, get frequencies
+
+ List<BenthosBatchFrequency> speciesBatchFrequency =
+ persistenceService.getAllBenthosBatchFrequency(benthosBatch.getId());
+
+ if (CollectionUtils.isEmpty(speciesBatchFrequency)) {
+
+ // no frequency
+ // simple denombrement
+ rows.add(currentRow.copy());
+ } else {
+ for (BenthosBatchFrequency batchFrequency : speciesBatchFrequency) {
+ CatchExportRow row = currentRow.copy();
+ row.setBenthosFrequency(batchFrequency);
+ rows.add(row);
+ }
+ }
+
+ } else {
+
+ for (BenthosBatch childBatch : benthosBatch.getChildBatchs()) {
+ prepareRows(persistenceService, currentRow, rows, childBatch);
+ }
+ }
}
+ protected void addSampleCategory(String headerPrefix, String categoryName) {
+ newNullableColumnForExport(headerPrefix, categoryName + "." + ExportSampleCategory.PROPERTY_CATEGORY_VALUE, TuttiCsvUtil.CARACTERISTIC_VALUE_FORMATTER);
+ newNullableColumnForExport("Num_Ordre_" + headerPrefix + "_H2", categoryName + "." + ExportSampleCategory.PROPERTY_RANK_ORDER, TuttiCsvUtil.INTEGER);
+ newNullableColumnForExport("Tot_" + headerPrefix, categoryName + "." + ExportSampleCategory.PROPERTY_CATEGORY_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Ech_" + headerPrefix, categoryName + "." + ExportSampleCategory.PROPERTY_SAMPLE_WEIGHT, TuttiCsvUtil.FLOAT);
+ newNullableColumnForExport("Type_Volume_Poids_" + headerPrefix, categoryName + "." + ExportSampleCategory.PROPERTY_WEIGHT_OR_VOL_TYPE);
+ newNullableColumnForExport("Unite_Volume_Poids_" + headerPrefix, categoryName + "." + ExportSampleCategory.PROPERTY_CATEGORY_CARACTERISTIC + "." + Caracteristic.PROPERTY_UNIT);
+ }
+
}
\ No newline at end of file
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportRow.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportRow.java 2013-05-13 09:40:03 UTC (rev 938)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportRow.java 2013-05-13 12:12:16 UTC (rev 939)
@@ -25,13 +25,14 @@
*/
import com.google.common.collect.Maps;
+import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency;
import fr.ifremer.tutti.persistence.entities.data.Cruise;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.persistence.entities.data.Program;
import fr.ifremer.tutti.persistence.entities.data.SampleCategoryEnum;
import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency;
-import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.Gear;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.persistence.entities.referential.Vessel;
import java.io.Serializable;
@@ -48,23 +49,21 @@
private static final long serialVersionUID = 1L;
- public static final String FREQUENCY_LENGTH_STEP_CARACTERISTIC = "frequencyLengthStepCaracteristic";
+ public static final String FREQUENCY_LENGTH_STEP = "frequency.lengthStep";
- public static final String FREQUENCY_LENGTH_STEP = "frequencyLengthStep";
+ public static final String FREQUENCY_NUMBER = "frequency.number";
- public static final String FREQUENCY_WEIGHT = "frequencyWeight";
+ public static final String FREQUENCY_WEIGHT = "frequency.weight";
- public static final String FREQUENCY_NUMBER = "frequencyNumber";
+ public static final String FREQUENCY_LENGTH_STEP_CARACTERISTIC = "frequency.lengthStepCaracteristic";
- public static final String FREQUENCY_RANK_ORDER = "frequencyRankOrder";
+ public static final String FREQUENCY_RANK_ORDER = "frequency.rankOrder";
- public static final String SPECIES_SAMPLE_CATEGORY = "speciesSampleCategory";
-
public static final String SORTED_UNSORTED_SAMPLE_CATEGORY = "sortedUnsortedSampleCategory";
public static final String SIZE_SAMPLE_CATEGORY = "sizeSampleCategory";
- public static final String SEX_SAMPLE_CATEGORY = "SexSampleCategory";
+ public static final String SEX_SAMPLE_CATEGORY = "sexSampleCategory";
public static final String MATURITY_SAMPLE_CATEGORY = "maturitySampleCategory";
@@ -78,8 +77,12 @@
protected final Map<SampleCategoryEnum, ExportSampleCategory> categories = Maps.newEnumMap(SampleCategoryEnum.class);
- protected SpeciesBatchFrequency frequency;
+ protected SpeciesBatchFrequency speciesFrequency;
+ protected BenthosBatchFrequency benthosFrequency;
+
+ protected Species species;
+
public void setCruise(Cruise cruise) {
this.cruise = cruise;
}
@@ -96,10 +99,14 @@
categories.put(sampleCategory.getCategoryType(), sampleCategory);
}
- public void setFrequency(SpeciesBatchFrequency speciesFrequency) {
- this.frequency = speciesFrequency;
+ public void setSpeciesFrequency(SpeciesBatchFrequency speciesFrequency) {
+ this.speciesFrequency = speciesFrequency;
}
+ public void setBenthosFrequency(BenthosBatchFrequency benthosFrequency) {
+ this.benthosFrequency = benthosFrequency;
+ }
+
public Date getBeginDate() {
return cruise.getBeginDate();
}
@@ -132,26 +139,10 @@
return fishingOperation.getMultirigAggregation();
}
- public Caracteristic getFrequencyLengthStepCaracteristic() {
- return frequency == null ? null : frequency.getLengthStepCaracteristic();
+ public Object getFrequency() {
+ return speciesFrequency == null ? benthosFrequency : speciesFrequency;
}
- public Float getFrequencyLengthStep() {
- return frequency == null ? null : frequency.getLengthStep();
- }
-
- public Float getFrequencyWeight() {
- return frequency == null ? null : frequency.getWeight();
- }
-
- public Integer getFrequencyNumber() {
- return frequency == null ? null : frequency.getNumber();
- }
-
- public Integer getFrequencyRankOrder() {
- return frequency == null ? null : frequency.getRankOrder();
- }
-
public ExportSampleCategory getSpeciesSampleCategory() {
return speciesCategory;
}
@@ -176,14 +167,23 @@
return categories.get(SampleCategoryEnum.age);
}
+ public Species getSpecies() {
+ return species;
+ }
+
+ public void setSpecies(Species species) {
+ this.species = species;
+ }
+
public CatchExportRow copy() {
CatchExportRow result = new CatchExportRow();
result.setCruise(cruise);
result.setFishingOperation(fishingOperation);
result.setSpeciesCategory(speciesCategory);
result.categories.putAll(categories);
- result.setFrequency(frequency);
-
+ result.setBenthosFrequency(benthosFrequency);
+ result.setSpeciesFrequency(speciesFrequency);
+ result.setSpecies(species);
return result;
}
}
\ No newline at end of file
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/ExportSampleCategory.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/ExportSampleCategory.java 2013-05-13 09:40:03 UTC (rev 938)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/ExportSampleCategory.java 2013-05-13 12:12:16 UTC (rev 939)
@@ -25,6 +25,7 @@
*/
import fr.ifremer.tutti.persistence.entities.data.SampleCategory;
+import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import java.io.Serializable;
@@ -39,6 +40,8 @@
private static final long serialVersionUID = 1L;
+ public static final String PROPERTY_CATEGORY_CARACTERISTIC = "categoryCaracteristic";
+
public static final String PROPERTY_CATEGORY_VALUE = "categoryValue";
public static final String PROPERTY_CATEGORY_WEIGHT = "categoryWeight";
@@ -51,15 +54,22 @@
public static final String PROPERTY_WEIGHT_OR_VOL_TYPE = "weightOrVolType";
- public static final String PROPERTY_RANK_ORDER= "rankOrder";
+ public static final String PROPERTY_RANK_ORDER = "rankOrder";
+ public static final String PROPERTY_SAMPLE_WEIGHT = "sampleWeight";
+
private Integer number;
private Integer computedNumber;
+
private Integer rankOrder;
private String weightOrVolType;
+ private Float sampleWeight;
+
+ private Caracteristic categoryCaracteristic;
+
public Integer getNumber() {
return number;
}
@@ -91,4 +101,20 @@
public void setRankOrder(Integer rankOrder) {
this.rankOrder = rankOrder;
}
+
+ public Float getSampleWeight() {
+ return sampleWeight;
+ }
+
+ public void setSampleWeight(Float sampleWeight) {
+ this.sampleWeight = sampleWeight;
+ }
+
+ public void setCategoryCaracteristic(Caracteristic categoryCaracteristic) {
+ this.categoryCaracteristic = categoryCaracteristic;
+ }
+
+ public Caracteristic getCategoryCaracteristic() {
+ return categoryCaracteristic;
+ }
}
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java 2013-05-13 09:40:03 UTC (rev 938)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java 2013-05-13 12:12:16 UTC (rev 939)
@@ -27,6 +27,7 @@
import com.google.common.base.Charsets;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.google.common.io.Files;
import fr.ifremer.tutti.TuttiBusinessException;
import fr.ifremer.tutti.TuttiIOUtil;
@@ -97,6 +98,8 @@
protected List<SampleCategoryEnum> samplingOrder;
+ protected Map<SampleCategoryEnum, Caracteristic> samplingToCaracteristic;
+
protected Caracteristic sampleIdCaracteristic;
protected Caracteristic otolitheIdCaracteristic;
@@ -131,6 +134,11 @@
String countryId = context.getConfig().getExportCountryId();
country = TuttiEntities.splitById(allCountry).get(countryId);
+ List<Caracteristic> allCaracteristic = persistenceService.getAllCaracteristic();
+ Map<String, Caracteristic> allCaracteristicById = TuttiEntities.splitById(allCaracteristic);
+
+ samplingToCaracteristic = Maps.newEnumMap(SampleCategoryEnum.class);
+
Map<Integer, SampleCategoryEnum> idMapping = SampleCategoryEnum.toIdMapping();
samplingOrder = Lists.newArrayList();
@@ -138,11 +146,18 @@
// always first sampling category
samplingOrder.add(SampleCategoryEnum.sortedUnsorted);
+ samplingToCaracteristic.put(
+ SampleCategoryEnum.sortedUnsorted,
+ allCaracteristicById.get(SampleCategoryEnum.sortedUnsorted.getFieldValue().toString()));
+
for (Integer categoryId : context.getConfig().getSamplingOrderIds()) {
SampleCategoryEnum categoryEnum = idMapping.get(categoryId);
if (SampleCategoryEnum.sortedUnsorted != categoryEnum) {
samplingOrder.add(categoryEnum);
}
+ samplingToCaracteristic.put(
+ categoryEnum,
+ allCaracteristicById.get(categoryId.toString()));
}
}
@@ -240,7 +255,8 @@
deadOrAliveCaracteristic,
genderCaracteristic,
pmfmIdCaracteristic,
- samplingOrder);
+ samplingOrder,
+ samplingToCaracteristic);
}
protected void checkCruise(ProgressionModel progressionModel, Cruise cruise) {
@@ -337,7 +353,6 @@
List<SurveyExportRow> rows = Lists.newArrayList();
exportContext.surveyModel.prepareRows(rows, cruise, country);
-
exportContext.surveyExport.write(rows, exportContext.surveyWriter);
} catch (Exception e) {
throw new TuttiTechnicalException(_("tutti.service.export.survey.error"), e);
@@ -382,6 +397,10 @@
try {
for (FishingOperation operation : operations) {
+ boolean withCatchBatch = withCatch(operation);
+ if (!withCatchBatch) {
+ continue;
+ }
List<MarineLitterExportRow> rows = Lists.newArrayList();
exportContext.marineLitterModel.prepareRows(persistenceService, rows, cruise, operation);
exportContext.marineLitterExport.write(rows, exportContext.marineLitterWriter);
@@ -399,6 +418,10 @@
try {
for (FishingOperation operation : operations) {
+ boolean withCatchBatch = withCatch(operation);
+ if (!withCatchBatch) {
+ continue;
+ }
List<IndividualObservationExportRow> rows = Lists.newArrayList();
exportContext.individualObservationModel.prepareRows(persistenceService, rows, cruise, operation);
exportContext.individualObservationExport.write(rows, exportContext.individualObservationWriter);
@@ -412,7 +435,6 @@
protected void exportAccidentalCatch(ExportContext exportContext,
Cruise cruise,
List<FishingOperation> operations) {
-
try {
for (FishingOperation operation : operations) {
@@ -433,19 +455,11 @@
for (FishingOperation operation : operations) {
- String operationId = operation.getId();
-
- boolean withCatchBatch =
- persistenceService.isFishingOperationWithCatchBatch(
- operationId);
-
+ boolean withCatchBatch = withCatch(operation);
if (!withCatchBatch) {
- if (log.isWarnEnabled()) {
- log.warn("Skip fishing operation " + operationId +
- " since no catchBatch associated.");
- }
continue;
}
+ String operationId = operation.getId();
CatchBatch catchBatch =
persistenceService.getCatchBatchFromFishingOperation(
operationId);
@@ -482,6 +496,22 @@
}
}
+ protected boolean withCatch(FishingOperation operation) {
+ String operationId = operation.getId();
+
+ boolean withCatchBatch =
+ persistenceService.isFishingOperationWithCatchBatch(
+ operationId);
+
+ if (!withCatchBatch) {
+ if (log.isWarnEnabled()) {
+ log.warn("Skip fishing operation " + operationId +
+ " since no catchBatch associated.");
+ }
+ }
+ return withCatchBatch;
+ }
+
protected static class ExportContext implements Closeable {
File surveyFile;
@@ -552,7 +582,8 @@
Caracteristic deadOrAliveCaracteristic,
Caracteristic genderCaracteristic,
Caracteristic pmfmIdCaracteristic,
- List<SampleCategoryEnum> samplingOrder) {
+ List<SampleCategoryEnum> samplingOrder,
+ Map<SampleCategoryEnum, Caracteristic> samplingToCaracteristic) {
try {
@@ -596,7 +627,9 @@
csvSeparator, decoratorService);
marineLitterModel = new MarineLitterExportModel(csvSeparator);
- catchModel = new CatchExportModel(csvSeparator, samplingOrder);
+ catchModel = new CatchExportModel(csvSeparator,
+ samplingOrder,
+ samplingToCaracteristic);
accidentalCatchModel = new AccidentalCatchExportModel(
csvSeparator,
deadOrAliveCaracteristic,
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-05-13 09:40:03 UTC (rev 938)
+++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java 2013-05-13 12:12:16 UTC (rev 939)
@@ -90,7 +90,17 @@
"2013;Campagne CGFS;;A;2;1062;Catégorie de fraicheur - produit/lot - totale - Diffusion par une Halle à marée;A - Catégorie A;\n" +
"2013;Campagne CGFS;;A;2;308;Nombre d'engin - engin - totale - Déclaration d'un professionnel;2.0;";
- public static final String CATCH_CONTENT = "";
+ public static final String CATCH_CONTENT =
+ "Annee;Serie;Serie_Partielle;Engin;Poche;Id_Operation;NumOrdre_Station;Navire;Taxon;Vrac;Num_Ordre_Vrac_H2;Tot_Vrac;Ech_Vrac;Type_Volume_Poids_Vrac;Unite_Volume_Poids_Vrac;Cat_Tri;Num_Ordre_Cat_Tri_H2;Tot_Cat_Tri;Ech_Cat_Tri;Type_Volume_Poids_Cat_Tri;Unite_Volume_Poids_Cat_Tri;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturite;Num_Ordre_Maturite_H2;Tot_Maturite;Ech_Maturite;Type_Volume_Poids_Maturite;Unite_Volume_Poids_Maturite;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;11242;Vrac;1;100.0;;Poids;;G - Gros;1;80.0;;Poids;;Mâle;1;30.0;;Poids;;1 - Stade 1;1;10.0;5.0;Poids;;NA;;;;;;307;10.0;1;;cm;0.5;5;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;11242;Vrac;1;100.0;;Poids;;G - Gros;1;80.0;;Poids;;Mâle;1;30.0;;Poids;;1 - Stade 1;1;10.0;5.0;Poids;;NA;;;;;;307;10.5;2;;cm;0.5;2;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;11242;Vrac;1;100.0;;Poids;;G - Gros;1;80.0;;Poids;;Mâle;1;30.0;;Poids;;1 - Stade 1;1;10.0;5.0;Poids;;NA;;;;;;307;11.0;3;;cm;0.5;1;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;11242;Vrac;1;100.0;;Poids;;G - Gros;1;80.0;;Poids;;Mâle;1;30.0;;Poids;;3 - Stade 3;3;10.0;;Poids;;NA;;;;;;307;11.0;1;;cm;0.5;5;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;11242;Vrac;1;100.0;;Poids;;G - Gros;1;80.0;;Poids;;Femelle;2;50.0;30.0;Poids;;3 - Stade 3;3;10.0;;Poids;;NA;;;;;;1425;10.0;1;;cm;;5;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;11242;Vrac;1;100.0;;Poids;;G - Gros;1;80.0;;Poids;;Femelle;2;50.0;30.0;Poids;;3 - Stade 3;3;10.0;;Poids;;NA;;;;;;1425;11.0;2;;cm;;6;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;11242;Vrac;1;100.0;;Poids;;G - Gros;1;80.0;;Poids;;Femelle;2;50.0;30.0;Poids;;3 - Stade 3;3;10.0;;Poids;;NA;;;;;;1425;12.0;3;;cm;;7;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;11242;Vrac;1;100.0;;Poids;;M - Moyen;2;20.0;;Poids;;Femelle;2;50.0;30.0;Poids;;3 - Stade 3;3;10.0;;Poids;;NA;;;;;;;;;;;;;\n" +
+ "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;11242;Hors Vrac;1;20.0;;Poids;;NA;;;;;;NA;;;;;;NA;;;;;;NA;;;;;;;;;;;;;";
public static final String MARINE_LITTER_CONTENT =
"Annee;Serie;Serie_Partielle;Engin;Poche;Id_Operation;NumOrdre_Station;Navire;MarineLitterCategory;MarineLitterSizeCategory;Number;Weight;Comment\n" +
@@ -267,7 +277,7 @@
PARAMETER_CONTENT);
}
- //TODO
+ @Test
public void exportCatches() throws Exception {
TuttiExportService.ExportContext exportContext =
1
0
Author: tchemit
Date: 2013-05-13 11:40:03 +0200 (Mon, 13 May 2013)
New Revision: 938
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/938
Log:
update version before release
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2013-05-12 20:37:39 UTC (rev 937)
+++ trunk/pom.xml 2013-05-13 09:40:03 UTC (rev 938)
@@ -132,16 +132,14 @@
<eugenePluginVersion>2.6.2</eugenePluginVersion>
<hibernateVersion>3.6.10.Final</hibernateVersion>
- <jaxxVersion>2.5.19-SNAPSHOT</jaxxVersion>
+ <jaxxVersion>2.5.19</jaxxVersion>
<swingXVersion>1.6.4</swingXVersion>
<xworkVersion>2.3.7</xworkVersion>
<slf4jVersion>1.7.5</slf4jVersion>
- <adagioVersion>3.3.6-SNAPSHOT</adagioVersion>
+ <adagioVersion>3.3.6</adagioVersion>
- <msaccessImporterVersion>1.4.1</msaccessImporterVersion>
-
<i18n.bundles>fr_FR,en_GB</i18n.bundles>
<i18n.silent>true</i18n.silent>
1
0