Author: tchemit Date: 2013-05-21 13:59:13 +0200 (Tue, 21 May 2013) New Revision: 968 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/968 Log: fixes #2419: [EXPORT GENERIQUE] il manque le poids total macro-d?\195?\169chets dans l'export marineLitter.csv fixes #2439: [EXPORT GENERIQUE] ajouter un fichier de transcodage des code esp?\195?\169ces vers nom scientifique + code rubin + code campagne Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SpeciesExportModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SpeciesExportRow.java Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/MarineLitterExportModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/MarineLitterExportRow.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/MarineLitterExportModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/MarineLitterExportModel.java 2013-05-21 10:06:05 UTC (rev 967) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/MarineLitterExportModel.java 2013-05-21 11:59:13 UTC (rev 968) @@ -25,6 +25,7 @@ */ import fr.ifremer.tutti.persistence.entities.data.BatchContainer; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; @@ -62,6 +63,7 @@ newColumnForExport("Number", MarineLitterBatch.PROPERTY_NUMBER, TuttiCsvUtil.INTEGER); newColumnForExport("Weight", MarineLitterBatch.PROPERTY_WEIGHT, TuttiCsvUtil.FLOAT); newColumnForExport("Comment", MarineLitterBatch.PROPERTY_COMMENT); + newColumnForExport("TotalWeight", MarineLitterExportRow.PROPERTY_TOTAL_WEIGHT, TuttiCsvUtil.FLOAT); } public void prepareRows(PersistenceService persistenceService, @@ -69,6 +71,9 @@ Cruise cruise, FishingOperation operation) { + CatchBatch catchBatch = + persistenceService.getCatchBatchFromFishingOperation(operation.getId()); + BatchContainer<MarineLitterBatch> rootMarineLitterBatch = persistenceService.getRootMarineLitterBatch(operation.getId()); @@ -79,6 +84,7 @@ row.setCruise(cruise); row.setFishingOperation(operation); row.setBatch(child); + row.setTotalWeight(catchBatch.getMarineLitterTotalWeight()); rows.add(row); } } Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/MarineLitterExportRow.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/MarineLitterExportRow.java 2013-05-21 10:06:05 UTC (rev 967) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/MarineLitterExportRow.java 2013-05-21 11:59:13 UTC (rev 968) @@ -43,6 +43,8 @@ */ public class MarineLitterExportRow implements Serializable { + public static final String PROPERTY_TOTAL_WEIGHT = "totalWeight"; + public static final String PROPERTY_BATCH= "batch"; private static final long serialVersionUID = 1L; @@ -53,6 +55,16 @@ protected MarineLitterBatch batch; + protected Float totalWeight; + + public Float getTotalWeight() { + return totalWeight; + } + + public void setTotalWeight(Float totalWeight) { + this.totalWeight = totalWeight; + } + public void setCruise(Cruise cruise) { this.cruise = cruise; } Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SpeciesExportModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SpeciesExportModel.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SpeciesExportModel.java 2013-05-21 11:59:13 UTC (rev 968) @@ -0,0 +1,53 @@ +package fr.ifremer.tutti.service.export; + +import fr.ifremer.tutti.persistence.entities.data.BatchContainer; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.TuttiCsvUtil; + +import java.util.List; + +/** + * To export a species used in data to export. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.3 + */ +public class SpeciesExportModel extends TuttiCsvUtil.AbstractTuttiExportModel<SpeciesExportRow> { + + public SpeciesExportModel(char separator) { + super(separator); + newColumnForExport("Id", SpeciesExportRow.SPECIES + "." + Species.PROPERTY_REFERENCE_TAXON_ID, TuttiCsvUtil.PRIMITIVE_INTEGER); + newColumnForExport("Code_Rubin", SpeciesExportRow.SPECIES + "." + Species.PROPERTY_REF_TAX_CODE); + newColumnForExport("Nom Scientifique", SpeciesExportRow.SPECIES + "." + Species.PROPERTY_NAME); + newColumnForExport("Code campagne", SpeciesExportRow.SPECIES + "." + Species.PROPERTY_SURVEY_CODE); + } + + public void prepareBatchRows(TuttiExportService.ExportContext exportContext, + BatchContainer<SpeciesBatch> rootSpeciesBatch, + BatchContainer<BenthosBatch> rootBenthosBatch) { + + for (SpeciesBatch speciesBatch : rootSpeciesBatch.getChildren()) { + + exportContext.addSpecies(speciesBatch.getSpecies()); + } + for (BenthosBatch benthosBatch : rootBenthosBatch.getChildren()) { + exportContext.addSpecies(benthosBatch.getSpecies()); + } + } + + public void prepareIndividualRowsRows(TuttiExportService.ExportContext exportContext, + List<IndividualObservationExportRow> rows) { + for (IndividualObservationExportRow row : rows) { + exportContext.addSpecies(row.getSpecies()); + } + } + + public void prepareAccidentalRows(TuttiExportService.ExportContext exportContext, + List<AccidentalCatchExportRow> rows) { + for (AccidentalCatchExportRow row : rows) { + exportContext.addSpecies(row.getSpecies()); + } + } +} \ No newline at end of file Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SpeciesExportModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SpeciesExportRow.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SpeciesExportRow.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SpeciesExportRow.java 2013-05-21 11:59:13 UTC (rev 968) @@ -0,0 +1,28 @@ +package fr.ifremer.tutti.service.export; + +import fr.ifremer.tutti.persistence.entities.referential.Species; + +import java.io.Serializable; + +/** + * A species in a export. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.3 + */ +public class SpeciesExportRow implements Serializable { + + private static final long serialVersionUID = 1L; + + public static final String SPECIES = "species"; + + protected Species species; + + public Species getSpecies() { + return species; + } + + public void setSpecies(Species species) { + this.species = species; + } +} Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SpeciesExportRow.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java 2013-05-21 10:06:05 UTC (rev 967) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java 2013-05-21 11:59:13 UTC (rev 968) @@ -28,6 +28,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import com.google.common.io.Files; import fr.ifremer.tutti.TuttiBusinessException; import fr.ifremer.tutti.TuttiIOUtil; @@ -43,7 +44,9 @@ import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryEnum; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.service.AbstractTuttiService; import fr.ifremer.tutti.service.DecoratorService; @@ -62,8 +65,11 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Map; +import java.util.Set; import static org.nuiton.i18n.I18n._; @@ -162,6 +168,7 @@ } public void exportProgram(String programId, + TuttiProtocol protocol, File exportFile, ProgressionModel progressionModel) { Preconditions.checkNotNull(programId); @@ -183,7 +190,7 @@ TuttiIOUtil.forceMkdir(basedir, _("tutti.service.mkDir.error", basedir)); - ExportContext exportContext = createExportContext(basedir); + ExportContext exportContext = createExportContext(basedir, protocol); try { for (Cruise cruise : allCruise) { @@ -204,6 +211,7 @@ } public void exportCruise(String cruiseId, + TuttiProtocol protocol, File exportFile, ProgressionModel progressionModel) { @@ -225,7 +233,7 @@ TuttiIOUtil.forceMkdir(basedir, _("tutti.service.mkDir.error", basedir)); - ExportContext exportContext = createExportContext(basedir); + ExportContext exportContext = createExportContext(basedir, protocol); try { exportCruise(cruise, exportContext, progressionModel); @@ -241,7 +249,13 @@ } } - protected ExportContext createExportContext(File basedir) { + protected ExportContext createExportContext(File basedir, + TuttiProtocol protocol) { + + + List<Species> allReferentSpecies = persistenceService.getAllReferentSpecies(protocol); + Map<String, Species> speciesById = TuttiEntities.splitById(allReferentSpecies); + return new ExportContext( basedir, csvSeparator, @@ -256,7 +270,8 @@ genderCaracteristic, pmfmIdCaracteristic, samplingOrder, - samplingToCaracteristic); + samplingToCaracteristic, + speciesById); } protected void checkCruise(ProgressionModel progressionModel, Cruise cruise) { @@ -345,6 +360,12 @@ _("tutti.service.exportCruise.exportCatches", cruiseName)); exportCatches(exportContext, cruise, loadedOperations); progressionModel.increments(1); + + progressionModel.setMessage( + _("tutti.service.exportCruise.exportSpecies", cruiseName)); + + exportSpecies(exportContext, exportContext.getSpeciesToExport()); + progressionModel.increments(1); } protected void exportSurvey(ExportContext exportContext, @@ -424,6 +445,9 @@ } List<IndividualObservationExportRow> rows = Lists.newArrayList(); exportContext.individualObservationModel.prepareRows(persistenceService, rows, cruise, operation); + exportContext.speciesModel.prepareIndividualRowsRows( + exportContext, + rows); exportContext.individualObservationExport.write(rows, exportContext.individualObservationWriter); } @@ -440,6 +464,9 @@ for (FishingOperation operation : operations) { List<AccidentalCatchExportRow> rows = Lists.newArrayList(); exportContext.accidentalCatchModel.prepareRows(persistenceService, rows, cruise, operation); + exportContext.speciesModel.prepareAccidentalRows( + exportContext, + rows); exportContext.accidentalCatchExport.write(rows, exportContext.accidentalCatchWriter); } @@ -479,6 +506,11 @@ rootBenthosBatch, rootMarineLitterBatch); + exportContext.speciesModel.prepareBatchRows( + exportContext, + rootSpeciesBatch, + rootBenthosBatch); + List<CatchExportRow> rows = Lists.newArrayList(); exportContext.catchModel.prepareRows(persistenceService, rows, @@ -496,6 +528,19 @@ } } + protected void exportSpecies(ExportContext exportContext, + List<SpeciesExportRow> rows) { + + try { + + exportContext.speciesExport.write(rows, exportContext.speciesWriter); + + } catch (Exception e) { + throw new TuttiTechnicalException( + _("tutti.service.export.catches.error"), e); + } + } + protected boolean withCatch(FishingOperation operation) { String operationId = operation.getId(); @@ -528,6 +573,8 @@ File accidentalCatchFile; + File speciesFile; + BufferedWriter surveyWriter; BufferedWriter operationWriter; @@ -542,6 +589,8 @@ BufferedWriter individualObservationWriter; + BufferedWriter speciesWriter; + SurveyExportModel surveyModel; OperationExportModel operationModel; @@ -556,6 +605,10 @@ IndividualObservationExportModel individualObservationModel; + SpeciesExportModel speciesModel; + + final Set<SpeciesExportRow> speciesToExport = Sets.newHashSet(); + TuttiCsvUtil.TuttiRepeatableExport<SurveyExportRow> surveyExport; TuttiCsvUtil.TuttiRepeatableExport<OperationExportRow> operationExport; @@ -570,6 +623,10 @@ TuttiCsvUtil.TuttiRepeatableExport<IndividualObservationExportRow> individualObservationExport; + TuttiCsvUtil.TuttiRepeatableExport<SpeciesExportRow> speciesExport; + + Map<String, Species> speciesById; + ExportContext(File basedir, char csvSeparator, DecoratorService decoratorService, @@ -583,8 +640,10 @@ Caracteristic genderCaracteristic, Caracteristic pmfmIdCaracteristic, List<SampleCategoryEnum> samplingOrder, - Map<SampleCategoryEnum, Caracteristic> samplingToCaracteristic) { + Map<SampleCategoryEnum, Caracteristic> samplingToCaracteristic, + Map<String, Species> speciesById) { + this.speciesById = speciesById; try { surveyFile = new File(basedir, "survey.csv"); @@ -608,6 +667,9 @@ individualObservationFile = new File(basedir, "individualObservation.csv"); individualObservationWriter = Files.newWriter(individualObservationFile, Charsets.UTF_8); + speciesFile = new File(basedir, "species.csv"); + speciesWriter = Files.newWriter(speciesFile, Charsets.UTF_8); + } catch (FileNotFoundException e) { // should never happen @@ -643,6 +705,9 @@ weightMeasuredCaracteristic, pmfmIdCaracteristic); + speciesModel = new SpeciesExportModel( + csvSeparator); + surveyExport = TuttiCsvUtil.newRepeatableExport( surveyModel); @@ -658,8 +723,16 @@ catchExport = TuttiCsvUtil.newRepeatableExport(catchModel); accidentalCatchExport = TuttiCsvUtil.newRepeatableExport(accidentalCatchModel); individualObservationExport = TuttiCsvUtil.newRepeatableExport(individualObservationModel); + speciesExport = TuttiCsvUtil.newRepeatableExport(speciesModel); } + protected void addSpecies(Species species) { + Species fullSpecies = speciesById.get(species.getId()); + SpeciesExportRow row = new SpeciesExportRow(); + row.setSpecies(fullSpecies); + speciesToExport.add(row); + } + @Override public void close() throws IOException { IOUtils.closeQuietly(surveyWriter); @@ -669,7 +742,21 @@ IOUtils.closeQuietly(accidentalCatchWriter); IOUtils.closeQuietly(marineLitterWriter); IOUtils.closeQuietly(individualObservationWriter); + IOUtils.closeQuietly(speciesWriter); } + + public List<SpeciesExportRow> getSpeciesToExport() { + List<SpeciesExportRow> result = + Lists.newArrayList(speciesToExport); + + Collections.sort(result, new Comparator<SpeciesExportRow>() { + @Override + public int compare(SpeciesExportRow o1, SpeciesExportRow o2) { + return o1.getSpecies().getReferenceTaxonId().compareTo(o2.getSpecies().getReferenceTaxonId()); + } + }); + return result; + } } } 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-21 10:06:05 UTC (rev 967) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-05-21 11:59:13 UTC (rev 968) @@ -69,6 +69,7 @@ tutti.service.exportCruise.checkCruise=Vérification de la campagne %s tutti.service.exportCruise.exportAccidentalCatches=Export du fichier <strong>accidentalCatch.csv</strong> pour la campagne %s tutti.service.exportCruise.exportCatches=Export du fichier <strong>catch.csv</strong> pour la campagne %s +tutti.service.exportCruise.exportSpecies=Export du fichier <strong>species.csv</strong> pour la campagne %s tutti.service.exportCruise.exportIndividualObservations=Export du fichier <strong>individualObservation.csv</strong> pour la campagne %s tutti.service.exportCruise.exportMarineLitters=Export du fichier <strong>marineLitter.csv</strong> pour la campagne %s tutti.service.exportCruise.exportOperations=Export du fichier <strong>operations.csv</strong> pour la campagne %s Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java 2013-05-21 10:06:05 UTC (rev 967) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java 2013-05-21 11:59:13 UTC (rev 968) @@ -33,6 +33,7 @@ import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.ServiceDbResource; @@ -48,6 +49,7 @@ import java.io.File; import java.io.IOException; import java.util.List; +import java.util.Map; /** * @author tchemit <chemit@codelutin.com> @@ -103,9 +105,9 @@ "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;11242;Hors Vrac;1;20.0;;Poids;;NA;;;;;;NA;;;;;;NA;;;;;;NA;;;;;;;;;;;;;"; public static final String MARINE_LITTER_CONTENT = - "Annee;Serie;Serie_Partielle;Engin;Poche;Id_Operation;NumOrdre_Station;Navire;MarineLitterCategory;MarineLitterSizeCategory;Number;Weight;Comment\n" + - "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;L1 PLASTIQUE;A: <5*5 cm= 25 cm2;2;5.0;S1;\n" + - "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;L1a Sacs;B: <10*10 cm= 100 cm2;3;1.0;S2;"; + "Annee;Serie;Serie_Partielle;Engin;Poche;Id_Operation;NumOrdre_Station;Navire;MarineLitterCategory;MarineLitterSizeCategory;Number;Weight;Comment;TotalWeight\n" + + "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;L1 PLASTIQUE;A: <5*5 cm= 25 cm2;2;5.0;S1;;\n" + + "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;L1a Sacs;B: <10*10 cm= 100 cm2;3;1.0;S2;;"; public static final String INDIVIDUAL_OBSERVATION_CONTENT = "Annee;Serie;Serie_Partielle;Engin;Poche;Id_Operation;NumOrdre_Station;Navire;BatchId;ReferenceTaxonId;ReferenceTaxonName;Comment;CaracteristicId;CaracteristicValue\n" + @@ -126,6 +128,12 @@ "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;100001;3835;Abalistes;;1433;1425;\n" + "2013;Campagne CGFS;;GOV 19.7/25.9;1;A;1;GWEN DREZ;100001;3835;Abalistes;;1425;4.0;"; + public static final String SPECIES_CONTENT = + "Id;Code_Rubin;Nom Scientifique;Code campagne\n" + + "3835;ABAL;Abalistes;;\n" + + "11242;AAPT;Aaptos;;\n" + + "11243;AAPTAAP;Aaptos aaptos;;"; + protected TuttiExportService service; protected PersistenceService persistenceService; @@ -187,7 +195,7 @@ operations = loadedOperations; progressionModel = new ProgressionModel(); - progressionModel.setTotal(7); + progressionModel.setTotal(8); } @Test @@ -199,7 +207,7 @@ Assert.assertFalse(exportFile.exists()); - service.exportProgram(program.getId(), exportFile, progressionModel); + service.exportProgram(program.getId(), null, exportFile, progressionModel); Assert.assertTrue(exportFile.exists()); } @@ -212,7 +220,7 @@ Assert.assertFalse(exportFile.exists()); - service.exportCruise(cruise.getId(), exportFile, progressionModel); + service.exportCruise(cruise.getId(), null, exportFile, progressionModel); Assert.assertTrue(exportFile.exists()); } @@ -220,7 +228,7 @@ public void exportSurvey() throws Exception { TuttiExportService.ExportContext exportContext = - service.createExportContext(dataDirectory); + service.createExportContext(dataDirectory, null); try { service.exportSurvey(exportContext, cruise); @@ -236,7 +244,7 @@ public void exportOperations() throws Exception { TuttiExportService.ExportContext exportContext = - service.createExportContext(dataDirectory); + service.createExportContext(dataDirectory, null); try { service.exportOperations(exportContext, cruise, operations); @@ -252,7 +260,7 @@ public void exportParameters() throws Exception { TuttiExportService.ExportContext exportContext = - service.createExportContext(dataDirectory); + service.createExportContext(dataDirectory, null); try { service.exportParameters(exportContext, cruise, operations); @@ -268,7 +276,7 @@ public void exportCatches() throws Exception { TuttiExportService.ExportContext exportContext = - service.createExportContext(dataDirectory); + service.createExportContext(dataDirectory, null); try { service.exportCatches(exportContext, cruise, operations); @@ -284,7 +292,7 @@ public void exportMarineLitters() throws Exception { TuttiExportService.ExportContext exportContext = - service.createExportContext(dataDirectory); + service.createExportContext(dataDirectory, null); try { service.exportMarineLitters(exportContext, cruise, operations); @@ -300,7 +308,7 @@ public void exportIndividualObservations() throws Exception { TuttiExportService.ExportContext exportContext = - service.createExportContext(dataDirectory); + service.createExportContext(dataDirectory, null); try { service.exportIndividualObservations(exportContext, cruise, operations); @@ -316,7 +324,7 @@ public void exportAccidentalCatch() throws Exception { TuttiExportService.ExportContext exportContext = - service.createExportContext(dataDirectory); + service.createExportContext(dataDirectory, null); try { service.exportAccidentalCatch(exportContext, cruise, operations); @@ -328,6 +336,33 @@ ACCIDENTAL_CATCH_CONTENT); } + + @Test + public void exportSpecies() throws Exception { + + TuttiExportService.ExportContext exportContext = + service.createExportContext(dataDirectory, null); + + try { + List<Species> allReferentSpecies = + persistenceService.getAllReferentSpecies(); + + Map<String, Species> allReferentSpeciesById = + TuttiEntities.splitById(allReferentSpecies); + exportContext.addSpecies(allReferentSpeciesById.get("35883")); + exportContext.addSpecies(allReferentSpeciesById.get("35884")); + exportContext.addSpecies(allReferentSpeciesById.get("19279")); + + service.exportSpecies(exportContext, + exportContext.getSpeciesToExport()); + } finally { + exportContext.close(); + } + assertFileContent("species export:\n", + exportContext.speciesFile, + SPECIES_CONTENT); + } + protected void assertFileContent(String message, File actualFile, String expectedContent) throws IOException { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java 2013-05-21 10:06:05 UTC (rev 967) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java 2013-05-21 11:59:13 UTC (rev 968) @@ -28,6 +28,7 @@ import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.export.TuttiExportService; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; @@ -102,11 +103,16 @@ ProgressionModel progressionModel = new ProgressionModel(); setProgressionModel(progressionModel); - // (check cruise / export cruise / operation / parameter / accidental catches / catches / individual observation) / zip - progressionModel.setTotal(8); + // (check cruise / export cruise / operation / parameter / accidental catches / catches / individual observation / species) / zip + progressionModel.setTotal(9); + TuttiProtocol protocol = null; + if (getContext().isProtocolFilled()) { + protocol = getDataContext().getProtocol(); + } + TuttiExportService service = getContext().getTuttiExportService(); - service.exportCruise(cruise.getId(), file, progressionModel); + service.exportCruise(cruise.getId(), protocol, file, progressionModel); getHandler().resetEditCruiseAction(); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java 2013-05-21 10:06:05 UTC (rev 967) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java 2013-05-21 11:59:13 UTC (rev 968) @@ -29,6 +29,7 @@ import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.export.TuttiExportService; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; @@ -101,16 +102,20 @@ " to file: " + file); } - // nbCruise * (check cruise / export cruise / operation / parameter / catches / individual observation / accidental catches) + zip + // nbCruise * (check cruise / export cruise / operation / parameter / catches / individual observation / accidental catches / species) + zip List<Cruise> allCruise = getContext().getPersistenceService().getAllCruise(program.getId()); ProgressionModel progressionModel = new ProgressionModel(); setProgressionModel(progressionModel); - progressionModel.setTotal(7 * allCruise.size() + 1); + progressionModel.setTotal(8 * allCruise.size() + 1); + TuttiProtocol protocol = null; + if (getContext().isProtocolFilled()) { + protocol = getDataContext().getProtocol(); + } TuttiExportService service = getContext().getTuttiExportService(); - service.exportProgram(program.getId(), file, progressionModel); + service.exportProgram(program.getId(), protocol, file, progressionModel); getHandler().resetEditProgramAction(); }