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@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/f... $ + * %% + * 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@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@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@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@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@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@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@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@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@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@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@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@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@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