Author: tchemit Date: 2013-07-06 14:57:36 +0200 (Sat, 06 Jul 2013) New Revision: 1117 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1117 Log: fixes #2711: [EXPORT GENERIQUE] points ?\195?\160 am?\195?\169liorer (table gearCaracteristics ajoutee) Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/GearCaracteristicExportModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/GearCaracteristicExportRow.java Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.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-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportServiceTest.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 Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/GearCaracteristicExportModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/GearCaracteristicExportModel.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/GearCaracteristicExportModel.java 2013-07-06 12:57:36 UTC (rev 1117) @@ -0,0 +1,76 @@ +package fr.ifremer.tutti.service.export; + +/* + * #%L + * Tutti :: Service + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +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.service.DecoratorService; +import fr.ifremer.tutti.service.TuttiCsvUtil; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * To export gear caracteristics. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.3.2 + */ +public class GearCaracteristicExportModel extends TuttiCsvUtil.AbstractTuttiExportModel<GearCaracteristicExportRow> { + + public GearCaracteristicExportModel(char separator, DecoratorService decoratorService) { + super(separator); + + newColumnForExport("Annee", Cruise.PROPERTY_BEGIN_DATE, TuttiCsvUtil.YEAR); + newColumnForExport("Serie", Cruise.PROPERTY_PROGRAM, Program.PROPERTY_NAME); + newColumnForExport("Serie_Partielle", Cruise.PROPERTY_SURVEY_PART); + newColumnForExport("Engin", GearCaracteristicExportRow.PROPERTY_GEAR, Gear.PROPERTY_NAME); + newColumnForExport("Code_PMFM", GearCaracteristicExportRow.PROPERTY_CARACTERISTIC, Caracteristic.PROPERTY_ID); + newColumnForExportByDecorator("Libelle_PMFM", GearCaracteristicExportRow.PROPERTY_CARACTERISTIC, decoratorService.getDecoratorByType(Caracteristic.class)); + newColumnForExport("Valeur", GearCaracteristicExportRow.PROPERTY_VALUE, TuttiCsvUtil.CARACTERISTIC_VALUE_FORMATTER); + } + + public void prepareRows(List<GearCaracteristicExportRow> rows, Cruise cruise, + Gear gear) { + CaracteristicMap caracteristics = gear.getCaracteristics(); + if (caracteristics != null) { + for (Map.Entry<Caracteristic, Serializable> entry : caracteristics.entrySet()) { + Caracteristic caracteristic = entry.getKey(); + Serializable value = entry.getValue(); + GearCaracteristicExportRow row = new GearCaracteristicExportRow(); + row.setCruise(cruise); + row.setGear(gear); + row.setCaracteristic(caracteristic); + row.setValue(value); + rows.add(row); + } + } + } + +} \ No newline at end of file Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/GearCaracteristicExportModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/GearCaracteristicExportRow.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/GearCaracteristicExportRow.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/GearCaracteristicExportRow.java 2013-07-06 12:57:36 UTC (rev 1117) @@ -0,0 +1,98 @@ +package fr.ifremer.tutti.service.export; + +/* + * #%L + * Tutti :: Service + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.persistence.entities.data.Cruise; +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 java.io.Serializable; +import java.util.Date; + +/** + * A row in a gear caracteristics export. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.3.2 + */ +public class GearCaracteristicExportRow implements Serializable { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_GEAR = "gear"; + + public static final String PROPERTY_CARACTERISTIC = "caracteristic"; + + public static final String PROPERTY_VALUE = "value"; + + protected Cruise cruise; + + protected Gear gear; + + protected Caracteristic caracteristic; + + private Serializable value; + + public void setCruise(Cruise cruise) { + this.cruise = cruise; + } + + public void setGear(Gear gear) { + this.gear = gear; + } + + public void setCaracteristic(Caracteristic caracteristic) { + this.caracteristic = caracteristic; + } + + public void setValue(Serializable value) { + this.value = value; + } + + public Date getBeginDate() { + return cruise.getBeginDate(); + } + + public Program getProgram() { + return cruise.getProgram(); + } + + public String getSurveyPart() { + return cruise.getSurveyPart(); + } + + public Gear getGear() { + return gear; + } + + public Caracteristic getCaracteristic() { + return caracteristic; + } + + public Serializable getValue() { + return value; + } +} Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/GearCaracteristicExportRow.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/export/TuttiExportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java 2013-07-05 16:36:48 UTC (rev 1116) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java 2013-07-06 12:57:36 UTC (rev 1117) @@ -45,6 +45,7 @@ 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.Gear; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.service.AbstractTuttiService; @@ -342,6 +343,11 @@ progressionModel.increments(1); progressionModel.setMessage( + _("tutti.service.exportCruise.exportGearCaracteristics", cruiseName)); + exportGearCaracteristics(exportContext, cruise); + progressionModel.increments(1); + + progressionModel.setMessage( _("tutti.service.exportCruise.exportOperations", cruiseName)); exportOperations(exportContext, cruise, loadedOperations); progressionModel.increments(1); @@ -390,6 +396,24 @@ } } + protected void exportGearCaracteristics(ExportContext exportContext, + Cruise cruise) { + try { + + List<GearCaracteristicExportRow> rows = Lists.newArrayList(); + + for (Gear gear : cruise.getGear() ) { + + Gear gearWithCaracteristics = persistenceService.getGearWithCaracteristics(gear, cruise); + exportContext.gearCaracteristicsModel.prepareRows(rows, cruise, gearWithCaracteristics); + } + + exportContext.gearCaracteristicsExport.write(rows, exportContext.gearCaracteristicsWriter); + } catch (Exception e) { + throw new TuttiTechnicalException(_("tutti.service.export.survey.error"), e); + } + } + protected void exportOperations(ExportContext exportContext, Cruise cruise, List<FishingOperation> operations) { @@ -606,6 +630,8 @@ File surveyFile; + File gearCaracteristicsFile; + File operationFile; File parameterFile; @@ -622,6 +648,8 @@ BufferedWriter surveyWriter; + BufferedWriter gearCaracteristicsWriter; + BufferedWriter operationWriter; BufferedWriter parameterWriter; @@ -638,6 +666,8 @@ SurveyExportModel surveyModel; + GearCaracteristicExportModel gearCaracteristicsModel; + OperationExportModel operationModel; MarineLitterExportModel marineLitterModel; @@ -656,6 +686,8 @@ TuttiCsvUtil.TuttiRepeatableExport<SurveyExportRow> surveyExport; + TuttiCsvUtil.TuttiRepeatableExport<GearCaracteristicExportRow> gearCaracteristicsExport; + TuttiCsvUtil.TuttiRepeatableExport<OperationExportRow> operationExport; TuttiCsvUtil.TuttiRepeatableExport<MarineLitterExportRow> marineLitterExport; @@ -694,6 +726,9 @@ surveyFile = new File(basedir, "survey.csv"); surveyWriter = Files.newWriter(surveyFile, Charsets.UTF_8); + gearCaracteristicsFile = new File(basedir, "gearCaracteristics.csv"); + gearCaracteristicsWriter = Files.newWriter(gearCaracteristicsFile, Charsets.UTF_8); + operationFile = new File(basedir, "operation.csv"); operationWriter = Files.newWriter(operationFile, Charsets.UTF_8); @@ -723,6 +758,9 @@ surveyModel = new SurveyExportModel(csvSeparator); + gearCaracteristicsModel = new GearCaracteristicExportModel( + csvSeparator, decoratorService); + operationModel = new OperationExportModel( csvSeparator, @@ -754,9 +792,11 @@ speciesModel = new SpeciesExportModel( csvSeparator); - surveyExport = TuttiCsvUtil.newRepeatableExport( - surveyModel); + surveyExport = TuttiCsvUtil.newRepeatableExport(surveyModel); + gearCaracteristicsExport = TuttiCsvUtil.newRepeatableExport( + gearCaracteristicsModel); + operationExport = TuttiCsvUtil.newRepeatableExport( operationModel); @@ -775,6 +815,7 @@ @Override public void close() throws IOException { IOUtils.closeQuietly(surveyWriter); + IOUtils.closeQuietly(gearCaracteristicsWriter); IOUtils.closeQuietly(operationWriter); IOUtils.closeQuietly(parameterWriter); IOUtils.closeQuietly(catchWriter); 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-07-05 16:36:48 UTC (rev 1116) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-07-06 12:57:36 UTC (rev 1117) @@ -72,6 +72,7 @@ tutti.service.exportCruise.checkCruise= tutti.service.exportCruise.exportAccidentalCatches= tutti.service.exportCruise.exportCatches= +tutti.service.exportCruise.exportGearCaracteristics= tutti.service.exportCruise.exportIndividualObservations= tutti.service.exportCruise.exportMarineLitters= tutti.service.exportCruise.exportOperations= 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-07-05 16:36:48 UTC (rev 1116) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-07-06 12:57:36 UTC (rev 1117) @@ -70,6 +70,7 @@ tutti.service.exportCruise.checkCruise=Vérification de la campagne %s tutti.service.exportCruise.exportAccidentalCatches=<html>Export du fichier <strong>accidentalCatch.csv</strong> pour la campagne %s</html> tutti.service.exportCruise.exportCatches=<html>Export du fichier <strong>catch.csv</strong> pour la campagne %s</html> +tutti.service.exportCruise.exportGearCaracteristics=<html>Export du fichier <strong>gearCaracteristics.csv</strong> pour la campagne %s</html> tutti.service.exportCruise.exportIndividualObservations=<html>Export du fichier <strong>individualObservation.csv</strong> pour la campagne %s</html> tutti.service.exportCruise.exportMarineLitters=<html>Export du fichier <strong>marineLitter.csv</strong> pour la campagne %s</html> tutti.service.exportCruise.exportOperations=<html>Export du fichier <strong>operations.csv</strong> pour la campagne %s</html> 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-07-05 16:36:48 UTC (rev 1116) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java 2013-07-06 12:57:36 UTC (rev 1117) @@ -79,8 +79,15 @@ public static final String SURVEY_CONTENT = "Annee;Serie;Serie_Partielle;Navire;Pays;Zone_Etude;Id_Sismer;Date_Deb_Campagne;Port_Deb_Campagne;Date_Fin_Campagne;Port_Fin_Campagne;Chef_Mission;Resp_Salle_Tri;Commentaire\n" + - "2013;Campagne CGFS;;278970;FRA;CGFS - Manche Est / Sud Mer du Nord;Campagne CGFS_2013;01/05/2013 00:00:00;La Barbotière (Gujan-Mestras);31/05/2013 00:00:00;Etang de Palo;Vincent AURECHE;;;"; + "2013;Campagne CGFS;;278970;FRA;CGFS - Manche Est / Sud Mer du Nord;Campagne CGFS_2013;01/05/2013 00:00:00;La Barbotière (Gujan-Mestras);31/05/2013 00:00:00;Etang de Palo;Vincent AURECHE;Alain TETARD;;"; + public static final String GEAR_CARACTERISTICS_CONTENT = + "Annee;Serie;Serie_Partielle;Engin;Code_PMFM;Libelle_PMFM;Valeur\n" + + "2013;Campagne CGFS;;ScientificGear;289;Armature (drague) - engin - totale - Déclaration d'un professionnel;Lame;\n" + + "2013;Campagne CGFS;;ScientificGear;121;Diamètre du goulot (Casier) - engin - goulotte - Déclaration d'un professionnel;120.0;\n" + + "2013;Campagne CGFS;;ScientificGear;927;Maillage étiré de l'engin - engin - Maille des ailes - Inconnue;15.0;\n" + + "2013;Campagne CGFS;;ScientificGear;287;Volet dépresseur (drague) - engin - totale - Déclaration d'un professionnel;Oui;"; + public static final String OPERATION_WITH_NO_CATCH_CONTENT = "Annee;Serie;Serie_Partielle;Code_Station;Numero_Trait;Poche;Engin;Navire;DateDeb_Op;LatDeb;LongDeb;DateFin_Op;LatFin;LongFin;Duree;Strate;Sous-Strate;Localite;Validite_OP;Rectiligne;Distance;Ouv_Verticale;Ouv_Horizontale_Ailes;Ouv_Horizontale_Panneaux;Saisisseur;Commentaire;Poids_Total;Poids_Total_Calcule;Poids_Total_Vrac;Poids_Total_Vrac_Calcule;Poids_Total_HorsVrac;Poids_Total_HorsVrac_Calcule;Poids_Total_Non_Trie;Poids_Total_Non_Trie_Calcule;Poids_Total_Tremis;Poids_Total_Tremis_Calcule;Poids_Total_Carroussel;Poids_Total_Carroussel_Calcule;Poids_Total_Espece;Poids_Total_Espece_Calcule;Poids_Total_Espece_Vrac;Poids_Total_Espece_Vrac_Calcule;Poids_Total_Espece_Vrac_Trie;Poids_Total_Espece_Vrac_Trie_Calcule;Poids_Total_Espece_HorsVrac;Poids_Total_Espece_HorsVrac_Calcule;Poids_Total_Espece_Inerte_Trie;Poids_Total_Espece_Inerte_Trie_Calcule;Poids_Total_Espece_Vivant_non_detaille_trie;Poids_Total_Espece_Vivant_non_detaille_trie_Calcule;Poids_Total_Benthos;Poids_Total_Benthos_Calcule;Poids_Total_Benthos_Vrac;Poids_Total_Benthos_Vrac_Calcule;Poids_Total_Benthos_Vrac_Trie;Poids_Total_Benthos_Vrac_Trie_Calcule;Poids_Total_Benthos_HorsVrac;Poids_Total_Benthos_HorsVrac_Calcule;Poids_Total_Benthos_Inerte_Trie;Poids_Total_Benthos_Inerte_Trie_Calcule;Poids_Total_Benthos_Vivant_non_detaille_trie;Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule;Poids_Total_Macro_Dechet;Poids_Total_Macro_Dechet_Calcule\n" + "2010;Campagne CGFS;;65;65;1;GOV 19.7/25.9;278970;13/10/2010 13:35:00;50.22833;0.31833;13/10/2010 14:05:00;50.22167;0.28333;30;Strate 4J;NA;Localité 4J2;N;Y;2512.0;NA;NA;NA;;avarie - chalut annulé completement à poil;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;;?;"; @@ -237,7 +244,7 @@ Assert.assertEquals(OPERATION_2_ID, operations.get(1).getId()); progressionModel = new ProgressionModel(); - progressionModel.setTotal(8); + progressionModel.setTotal(9); } @Ignore @@ -284,6 +291,21 @@ } @Test + public void exportGearCaracteristics() throws Exception { + + TuttiExportService.ExportContext exportContext = + service.createExportContext(dataDirectory, null); + + try { + service.exportGearCaracteristics(exportContext, cruise); + } finally { + exportContext.close(); + } + assertFileContent("Gear caracteristics export:\n", + exportContext.gearCaracteristicsFile, + GEAR_CARACTERISTICS_CONTENT); + } + @Test public void exportOperations() throws Exception { // loadData(PROGRAM_ID, CRUISE_CGFS_ID); Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportServiceTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportServiceTest.java 2013-07-05 16:36:48 UTC (rev 1116) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportServiceTest.java 2013-07-06 12:57:36 UTC (rev 1117) @@ -218,7 +218,7 @@ for (int i = 1; i <= 2; i++) { Gear actual = result.get(i - 1); Assert.assertNotNull(actual); - Assert.assertEquals("-" + i, actual.getId()); + Assert.assertTrue(actual.getId().startsWith("-")); Assert.assertEquals("Gear fishing name " + i, actual.getName()); Assert.assertEquals("Gear fishing label " + i, actual.getLabel()); Assert.assertFalse(actual.isScientificGear()); @@ -226,7 +226,7 @@ for (int i = 3; i <= 4; i++) { Gear actual = result.get(i - 1); Assert.assertNotNull(actual); - Assert.assertEquals("-" + i, actual.getId()); + Assert.assertTrue(actual.getId().startsWith("-")); Assert.assertEquals("Gear scientific name " + i, actual.getName()); Assert.assertEquals("Gear scientific label " + i, actual.getLabel()); Assert.assertTrue(actual.isScientificGear()); 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-07-05 16:36:48 UTC (rev 1116) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportCruiseAction.java 2013-07-06 12:57:36 UTC (rev 1117) @@ -103,8 +103,8 @@ ProgressionModel progressionModel = new ProgressionModel(); setProgressionModel(progressionModel); - // (check cruise / export cruise / operation / parameter / accidental catches / catches / individual observation / species) / zip - progressionModel.setTotal(9); + // (check cruise / export cruise / gear caracteristics / operation / parameter / accidental catches / catches / individual observation / species) / zip + progressionModel.setTotal(10); TuttiProtocol protocol = null; if (getContext().isProtocolFilled()) { 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-07-05 16:36:48 UTC (rev 1116) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProgramAction.java 2013-07-06 12:57:36 UTC (rev 1117) @@ -102,13 +102,13 @@ " to file: " + file); } - // nbCruise * (check cruise / export cruise / operation / parameter / catches / individual observation / accidental catches / species) + zip + // nbCruise * (check cruise / export cruise / gear caracteristics / 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(8 * allCruise.size() + 1); + progressionModel.setTotal(9 * allCruise.size() + 1); TuttiProtocol protocol = null; if (getContext().isProtocolFilled()) {