r743 - in trunk/tutti-service/src/main: java/fr/ifremer/tutti/service java/fr/ifremer/tutti/service/catches java/fr/ifremer/tutti/service/export resources/fr/ifremer/tutti/persistence/entities/data
Author: tchemit Date: 2013-04-06 13:27:27 +0200 (Sat, 06 Apr 2013) New Revision: 743 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/743 Log: refs #1875: [IMP/EXP] - Export des donn?\195?\169es de campagne : format g?\195?\169n?\195?\169rique (prepareation des imports) Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportRow.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/OperationExportModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/OperationExportRow.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/ParameterExportModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/ParameterExportRow.java Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/TuttiWeightComputingService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SurveyExportModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SurveyExportRow.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/SpeciesBatch-error-validation.xml Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-04-05 17:17:13 UTC (rev 742) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-04-06 11:27:27 UTC (rev 743) @@ -24,13 +24,23 @@ * #L% */ +import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.persistence.entities.TuttiEntity; +import org.apache.commons.beanutils.BeanUtilsBean; import org.apache.commons.lang3.StringUtils; import org.nuiton.util.csv.Common; +import org.nuiton.util.csv.ExportModel; +import org.nuiton.util.csv.ExportableColumn; +import org.nuiton.util.csv.ValueFormatter; import org.nuiton.util.csv.ValueParserFormatter; +import org.nuiton.util.csv.ext.AbstractExportModel; import org.nuiton.util.csv.ext.AbstractImportExportModel; +import org.nuiton.util.csv.ext.RepeatableExport; +import org.nuiton.util.decorator.Decorator; +import java.io.Writer; import java.text.ParseException; +import java.util.Collections; import java.util.Date; import java.util.Map; import java.util.Set; @@ -49,6 +59,24 @@ super(separator); } + public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) { + return newColumnForExportByDecorator(headerName, propertyName, decorator, null); + } + + public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator, String defaultNullValue) { + DecoatorPropertyFormatter<T> valueFormatter = newDecoratorFormatter(decorator, defaultNullValue); + return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter); + } + + public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName) { + return newColumnForExport(headerName, propertyName, formatterPropertyName, null); + } + + public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName, String defaultNullValue) { + BeanPropertyFormatter<T> valueFormatter = newBeanFormatter(formatterPropertyName, defaultNullValue); + return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter); + } + public <E extends TuttiEntity> void newForeignKeyColumn(String headerName, String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) { newMandatoryColumn(headerName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe)); } @@ -70,6 +98,36 @@ } } + public static abstract class AbstractTuttiExportModel<M> extends AbstractExportModel<M> { + + public AbstractTuttiExportModel(char separator) { + super(separator); + } + + public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) { + return newColumnForExportByDecorator(headerName, propertyName, decorator, null); + } + + public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator, String defaultNullValue) { + DecoatorPropertyFormatter<T> valueFormatter = newDecoratorFormatter(decorator, defaultNullValue); + return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter); + } + + public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName) { + return newColumnForExport(headerName, propertyName, formatterPropertyName, null); + } + + public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName, String defaultNullValue) { + BeanPropertyFormatter<T> valueFormatter = newBeanFormatter(formatterPropertyName, defaultNullValue); + return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter); + } + + public <E extends TuttiEntity> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) { + return new ForeignKeyValue<E>(type, propertyName, universe); + } + + } + public static class StringParserFormatter extends Common.NullableParserFormatter<String> { public StringParserFormatter(String defaultValue, boolean nullAllowed) { @@ -189,6 +247,80 @@ public static final ValueParserFormatter<Date> TIME = new DateValue("HH:mm:ss"); + public static <E> BeanPropertyFormatter<E> newBeanFormatter(String propertyName, + String defaultNullValue) { + return new BeanPropertyFormatter<E>(propertyName, defaultNullValue); + } + + public static class BeanPropertyFormatter<E> implements ValueFormatter<E> { + + protected final String defaultNullValue; + + protected String propertyName; + + BeanPropertyFormatter(String propertyName, String defaultNullValue) { + this.propertyName = propertyName; + this.defaultNullValue = defaultNullValue; + } + + @Override + public String format(E value) { + if (value == null) { + return defaultNullValue; + } + try { + return (String) BeanUtilsBean.getInstance().getPropertyUtils().getNestedProperty(value, propertyName); + } catch (Exception e) { + throw new TuttiTechnicalException("Could not format value", e); + } + } + } + + public static <E> DecoatorPropertyFormatter<E> newDecoratorFormatter(Decorator<E> decorator, + String defaultNullValue) { + return new DecoatorPropertyFormatter<E>(decorator, defaultNullValue); + } + + public static class DecoatorPropertyFormatter<E> implements ValueFormatter<E> { + + protected final String defaultNullValue; + + protected Decorator<E> decorator; + + DecoatorPropertyFormatter(Decorator<E> decorator, String defaultNullValue) { + this.decorator = decorator; + this.defaultNullValue = defaultNullValue; + } + + @Override + public String format(E value) { + if (value == null) { + return defaultNullValue; + } + try { + return decorator.toString(value); + } catch (Exception e) { + throw new TuttiTechnicalException("Could not format value", e); + } + } + } + + public static <E> TuttiRepeatableExport<E> newRepeatableExport(ExportModel<E> model) { + return new TuttiRepeatableExport<E>(model); + } + + public static class TuttiRepeatableExport<E> extends RepeatableExport<E> { + + public TuttiRepeatableExport(ExportModel<E> model) { + super(model, Collections.<E>emptyList(), true); + } + + public void write(Iterable<E> data, Writer writer) throws Exception { + this.data = data; + write(writer); + } + } + protected TuttiCsvUtil() { // no instance } Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/TuttiWeightComputingService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/TuttiWeightComputingService.java 2013-04-05 17:17:13 UTC (rev 742) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/TuttiWeightComputingService.java 2013-04-06 11:27:27 UTC (rev 743) @@ -1,5 +1,29 @@ package fr.ifremer.tutti.service.catches; +/* + * #%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.TuttiBusinessException; import fr.ifremer.tutti.persistence.entities.data.*; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.java 2013-04-06 11:27:27 UTC (rev 743) @@ -0,0 +1,80 @@ +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.BatchContainer; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.service.TuttiCsvUtil; + +import java.util.List; + +/** + * Model of a catch export. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.3 + */ +public class CatchExportModel extends TuttiCsvUtil.AbstractTuttiExportModel<CatchExportRow> { + + public CatchExportModel(char separator) { + 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("Id_Operation", FishingOperation.PROPERTY_STATION_NUMBER); + newColumnForExport("NumOrdre_Station", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER); + newColumnForExport("Navire", Cruise.PROPERTY_VESSEL, Vessel.PROPERTY_NAME); + +//FIXME newColumnForExport("Pays", Cruise.PROPERTY_VESSEL); + newColumnForExport("Zone_Etude", "programeZoneName"); + newColumnForExport("Id_Sismer", Cruise.PROPERTY_NAME); + newColumnForExport("Date_Deb_Campagne", Cruise.PROPERTY_BEGIN_DATE, TuttiCsvUtil.DAY_EMPTY_TIME); + newColumnForExport("Heure_Deb_Campagne", Cruise.PROPERTY_BEGIN_DATE, TuttiCsvUtil.TIME); + newColumnForExport("Port_Deb_Campagne", Cruise.PROPERTY_DEPARTURE_LOCATION); + newColumnForExport("Date_Fin_Campagne", Cruise.PROPERTY_END_DATE, TuttiCsvUtil.DAY_EMPTY_TIME); + newColumnForExport("Heure_Fin_Campagne", Cruise.PROPERTY_END_DATE, TuttiCsvUtil.TIME); + newColumnForExport("Port_Fin_Campagne", Cruise.PROPERTY_RETURN_LOCATION); +//FIXME newColumnForExport("Responsable_Serie", Cruise.PROPERTY_HEAD_OF_MISSION); + newColumnForExport("Chef_Mission", Cruise.PROPERTY_HEAD_OF_MISSION); + newColumnForExport("Resp_Salle_Tri", Cruise.PROPERTY_HEAD_OF_SORT_ROOM); + newColumnForExport("Commentaire", Cruise.PROPERTY_COMMENT); + } + + public void prepareRows(List<CatchExportRow> rows, + Cruise cruise, + FishingOperation operation, + BatchContainer<SpeciesBatch> rootSpeciesBatch) { + CatchExportRow row = new CatchExportRow(); + row.setCruise(cruise); + row.setFishingOperation(operation); + rows.add(row); + } + +} \ No newline at end of file Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportModel.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/CatchExportRow.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportRow.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportRow.java 2013-04-06 11:27:27 UTC (rev 743) @@ -0,0 +1,80 @@ +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.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; + +import java.io.Serializable; +import java.util.Date; + +/** + * A row in a catch export. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.3 + */ +public class CatchExportRow implements Serializable { + + private static final long serialVersionUID = 1L; + + protected Cruise cruise; + + protected FishingOperation fishingOperation; + + public void setCruise(Cruise cruise) { + this.cruise = cruise; + } + + public void setFishingOperation(FishingOperation fishingOperation) { + this.fishingOperation = fishingOperation; + } + + public Date getBeginDate() { + return cruise.getBeginDate(); + } + + public Program getProgram() { + return cruise.getProgram(); + } + + public String getSurveyPart() { + return cruise.getSurveyPart(); + } + + public String getStationNumber() { + return fishingOperation.getStationNumber(); + } + + public Integer getFishingOperationNumber() { + return fishingOperation.getFishingOperationNumber(); + } + + public Vessel getVessel() { + return cruise.getVessel(); + } +} \ No newline at end of file Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/CatchExportRow.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/OperationExportModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/OperationExportModel.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/OperationExportModel.java 2013-04-06 11:27:27 UTC (rev 743) @@ -0,0 +1,91 @@ +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.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.service.TuttiCsvUtil; + +import java.util.List; + +/** + * Model of a operation export. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.3 + */ +public class OperationExportModel extends TuttiCsvUtil.AbstractTuttiExportModel<OperationExportRow> { + + public OperationExportModel(char separator) { + 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("Id_Operation", FishingOperation.PROPERTY_STATION_NUMBER); + newColumnForExport("NumOrdre_Station", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER); + + newColumnForExport("Engin", Cruise.PROPERTY_GEAR, Gear.PROPERTY_NAME); + newColumnForExport("Navire", Cruise.PROPERTY_VESSEL, Vessel.PROPERTY_NAME); + newColumnForExport("DateDeb_Op", FishingOperation.PROPERTY_GEAR_SHOOTING_START_DATE, TuttiCsvUtil.DAY_EMPTY_TIME); + newColumnForExport("HeureDeb_Op", FishingOperation.PROPERTY_GEAR_SHOOTING_START_DATE, TuttiCsvUtil.TIME); + newColumnForExport("LatDeb", FishingOperation.PROPERTY_GEAR_SHOOTING_START_LATITUDE); + newColumnForExport("LongDeb", FishingOperation.PROPERTY_GEAR_SHOOTING_START_LONGITUDE); + newColumnForExport("DateFin_Op", FishingOperation.PROPERTY_GEAR_SHOOTING_END_DATE, TuttiCsvUtil.DAY_EMPTY_TIME); + newColumnForExport("HeureFin_OP", FishingOperation.PROPERTY_GEAR_SHOOTING_END_DATE, TuttiCsvUtil.TIME); + newColumnForExport("LatFin", FishingOperation.PROPERTY_GEAR_SHOOTING_END_LATITUDE); + newColumnForExport("LongFin", FishingOperation.PROPERTY_GEAR_SHOOTING_END_LONGITUDE); +//FIXME newColumnForExport("Duree", FishingOperation.PROPERTY_); + newColumnForExport("Strate", FishingOperation.PROPERTY_STRATA, TuttiLocation.PROPERTY_NAME, "NA"); + newColumnForExport("Sous-Strate", FishingOperation.PROPERTY_SUB_STRATA, TuttiLocation.PROPERTY_NAME, "NA"); + newColumnForExport("Localite", FishingOperation.PROPERTY_LOCATION, TuttiLocation.PROPERTY_NAME, "NA"); +//FIXME newColumnForExport("Rectangle_CIEM",); + newColumnForExport("Validite_OP", FishingOperation.PROPERTY_FISHING_OPERATION_VALID); + newColumnForExport("Rectiligne", FishingOperation.PROPERTY_FISHING_OPERATION_RECTILIGNE); + newColumnForExport("Distance", FishingOperation.PROPERTY_TRAWL_DISTANCE); +//FIXME newColumnForExport("Ouv_Verticale",); +//FIXME newColumnForExport("Ouv_Horizontale_Ailes",); +//FIXME newColumnForExport("Ouv_Horizontale_Panneaux",); + newColumnForExport("Commentaire", FishingOperation.PROPERTY_COMMENT); + + } + + public void prepareRows(List<OperationExportRow> rows, + Cruise cruise, + List<FishingOperation> operations) { + + for (FishingOperation operation : operations) { + + OperationExportRow row = new OperationExportRow(); + row.setCruise(cruise); + row.setFishingOperation(operation); + rows.add(row); + } + } +} \ No newline at end of file Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/OperationExportModel.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/OperationExportRow.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/OperationExportRow.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/OperationExportRow.java 2013-04-06 11:27:27 UTC (rev 743) @@ -0,0 +1,138 @@ +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.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; + +import java.io.Serializable; +import java.util.Date; + +/** + * A row in a operation export. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.3 + */ +public class OperationExportRow implements Serializable { + + private static final long serialVersionUID = 1L; + + protected Cruise cruise; + + protected FishingOperation fishingOperation; + + public void setCruise(Cruise cruise) { + this.cruise = cruise; + } + + public void setFishingOperation(FishingOperation fishingOperation) { + this.fishingOperation = fishingOperation; + } + + public Date getBeginDate() { + return cruise.getBeginDate(); + } + + public Program getProgram() { + return cruise.getProgram(); + } + + public String getSurveyPart() { + return cruise.getSurveyPart(); + } + + public String getStationNumber() { + return fishingOperation.getStationNumber(); + } + + public Integer getFishingOperationNumber() { + return fishingOperation.getFishingOperationNumber(); + } + + public Gear getGear() { + return fishingOperation.getGear(); + } + + public Vessel getVessel() { + return cruise.getVessel(); + } + + public Date getGearShootingStartDate() { + return fishingOperation.getGearShootingStartDate(); + } + + public Float getGearShootingStartLatitude() { + return fishingOperation.getGearShootingStartLatitude(); + } + + public Float getGearShootingStartLongitude() { + return fishingOperation.getGearShootingStartLongitude(); + } + + public Date getGearShootingEndDate() { + return fishingOperation.getGearShootingEndDate(); + } + + public Float getGearShootingEndLatitude() { + return fishingOperation.getGearShootingEndLatitude(); + } + + public Float getGearShootingEndLongitude() { + return fishingOperation.getGearShootingEndLongitude(); + } + + public TuttiLocation getStrata() { + return fishingOperation.getStrata(); + } + + public TuttiLocation getSubStrata() { + return fishingOperation.getSubStrata(); + } + + public TuttiLocation getLocation() { + return fishingOperation.getLocation(); + } + + public Boolean getFishingOperationValid() { + return fishingOperation.getFishingOperationValid(); + } + + public boolean isFishingOperationRectiligne() { + return fishingOperation.isFishingOperationRectiligne(); + } + + public Float getTrawlDistance() { + return fishingOperation.getTrawlDistance(); + } + + public String getComment() { + return fishingOperation.getComment(); + } +} \ No newline at end of file Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/OperationExportRow.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/ParameterExportModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/ParameterExportModel.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/ParameterExportModel.java 2013-04-06 11:27:27 UTC (rev 743) @@ -0,0 +1,87 @@ +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.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.service.TuttiCsvUtil; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * Model of a parameter export. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.3 + */ +public class ParameterExportModel extends TuttiCsvUtil.AbstractTuttiExportModel<ParameterExportRow> { + + + public ParameterExportModel(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("Id_Operation", FishingOperation.PROPERTY_STATION_NUMBER); + newColumnForExport("NumOrdre_Station", FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER); + + newColumnForExport("Code_PMFM", ParameterExportRow.PROPERTY_CARACTERISTIC, Caracteristic.PROPERTY_ID); + newColumnForExportByDecorator("Libelle_PMFm", ParameterExportRow.PROPERTY_CARACTERISTIC, decoratorService.getDecoratorByType(Caracteristic.class)); + newColumnForExport("Valeur", ParameterExportRow.PROPERTY_VALUE); + } + + public void prepareRows(List<ParameterExportRow> rows, + Cruise cruise, + FishingOperation operation) { + + for (Map.Entry<Caracteristic, Serializable> entry : operation.getGearUseFeatures().entrySet()) { + Caracteristic caracteristic = entry.getKey(); + + ParameterExportRow row = new ParameterExportRow(); + row.setCruise(cruise); + row.setFishingOperation(operation); + row.setCaracteristic(caracteristic); + row.setValue(entry.getValue()); + rows.add(row); + } + for (Map.Entry<Caracteristic, Serializable> entry : operation.getVesselUseFeatures().entrySet()) { + Caracteristic caracteristic = entry.getKey(); + + ParameterExportRow row = new ParameterExportRow(); + row.setCruise(cruise); + row.setFishingOperation(operation); + row.setCaracteristic(caracteristic); + row.setValue(entry.getValue()); + rows.add(row); + } + } + +} \ No newline at end of file Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/ParameterExportModel.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/ParameterExportRow.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/ParameterExportRow.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/ParameterExportRow.java 2013-04-06 11:27:27 UTC (rev 743) @@ -0,0 +1,100 @@ +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.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; + +import java.io.Serializable; +import java.util.Date; + +/** + * A row in a parameter export. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.3 + */ +public class ParameterExportRow implements Serializable { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_CARACTERISTIC = "caracteristic"; + public static final String PROPERTY_VALUE = "value"; + + + protected Cruise cruise; + + protected FishingOperation fishingOperation; + + protected Caracteristic caracteristic; + + private Serializable value; + + public void setCruise(Cruise cruise) { + this.cruise = cruise; + } + + public void setFishingOperation(FishingOperation fishingOperation) { + this.fishingOperation = fishingOperation; + } + + 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 String getStationNumber() { + return fishingOperation.getStationNumber(); + } + + public Integer getFishingOperationNumber() { + return fishingOperation.getFishingOperationNumber(); + } + + public Caracteristic getCaracteristic() { + return caracteristic; + } + + public Serializable getValue() { + return value; + } +} \ No newline at end of file Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/ParameterExportRow.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/SurveyExportModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SurveyExportModel.java 2013-04-05 17:17:13 UTC (rev 742) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SurveyExportModel.java 2013-04-06 11:27:27 UTC (rev 743) @@ -25,41 +25,46 @@ */ import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.service.TuttiCsvUtil; +import java.util.List; + /** * Model of a survey export. * * @author tchemit <chemit@codelutin.com> * @since 1.3 */ -public class SurveyExportModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<SurveyExportRow> { +public class SurveyExportModel extends TuttiCsvUtil.AbstractTuttiExportModel<SurveyExportRow> { public SurveyExportModel(char separator) { super(separator); newColumnForExport("Annee", Cruise.PROPERTY_BEGIN_DATE, TuttiCsvUtil.YEAR); - newColumnForExport("Serie", Cruise.PROPERTY_PROGRAM); + newColumnForExport("Serie", Cruise.PROPERTY_PROGRAM, Program.PROPERTY_NAME); newColumnForExport("Serie_Partielle", Cruise.PROPERTY_SURVEY_PART); - newColumnForExport("Navire", Cruise.PROPERTY_VESSEL); + newColumnForExport("Navire", Cruise.PROPERTY_VESSEL, Vessel.PROPERTY_NAME); //FIXME newColumnForExport("Pays", Cruise.PROPERTY_VESSEL); - newColumnForExport("Zone_Etude", "programeZoneName"); + newColumnForExport("Zone_Etude", Program.PROPERTY_ZONE, TuttiLocation.PROPERTY_NAME); newColumnForExport("Id_Sismer", Cruise.PROPERTY_NAME); newColumnForExport("Date_Deb_Campagne", Cruise.PROPERTY_BEGIN_DATE, TuttiCsvUtil.DAY_EMPTY_TIME); newColumnForExport("Heure_Deb_Campagne", Cruise.PROPERTY_BEGIN_DATE, TuttiCsvUtil.TIME); - newColumnForExport("Port_Deb_Campagne", Cruise.PROPERTY_DEPARTURE_LOCATION); + newColumnForExport("Port_Deb_Campagne", Cruise.PROPERTY_DEPARTURE_LOCATION, TuttiLocation.PROPERTY_NAME); newColumnForExport("Date_Fin_Campagne", Cruise.PROPERTY_END_DATE, TuttiCsvUtil.DAY_EMPTY_TIME); newColumnForExport("Heure_Fin_Campagne", Cruise.PROPERTY_END_DATE, TuttiCsvUtil.TIME); - newColumnForExport("Port_Fin_Campagne", Cruise.PROPERTY_RETURN_LOCATION); + newColumnForExport("Port_Fin_Campagne", Cruise.PROPERTY_RETURN_LOCATION, TuttiLocation.PROPERTY_NAME); //FIXME newColumnForExport("Responsable_Serie", Cruise.PROPERTY_HEAD_OF_MISSION); - newColumnForExport("Chef_Mission", Cruise.PROPERTY_HEAD_OF_MISSION); - newColumnForExport("Resp_Salle_Tri", Cruise.PROPERTY_HEAD_OF_SORT_ROOM); +// newColumnForExport("Chef_Mission", Cruise.PROPERTY_HEAD_OF_MISSION); +// newColumnForExport("Resp_Salle_Tri", Cruise.PROPERTY_HEAD_OF_SORT_ROOM); newColumnForExport("Commentaire", Cruise.PROPERTY_COMMENT); } - @Override - public SurveyExportRow newEmptyInstance() { - return new SurveyExportRow(); + public void prepareRows(List<SurveyExportRow> rows, Cruise cruise) { + SurveyExportRow row = new SurveyExportRow(); + row.setCruise(cruise); + rows.add(row); } - } \ No newline at end of file Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SurveyExportRow.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SurveyExportRow.java 2013-04-05 17:17:13 UTC (rev 742) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SurveyExportRow.java 2013-04-06 11:27:27 UTC (rev 743) @@ -25,7 +25,10 @@ */ import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.referential.Person; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; import java.io.Serializable; import java.util.Date; @@ -43,7 +46,7 @@ protected Cruise cruise; - public SurveyExportRow(Cruise cruise) { + public void setCruise(Cruise cruise) { this.cruise = cruise; } @@ -51,20 +54,20 @@ return cruise.getBeginDate(); } - public String getProgram() { - return cruise.getProgram().getName(); + public Program getProgram() { + return cruise.getProgram(); } public String getSurveyPart() { return cruise.getSurveyPart(); } - public String getProgramZone() { - return cruise.getProgram().getZone().getName(); + public TuttiLocation getProgramZone() { + return cruise.getProgram().getZone(); } - public String getVessel() { - return cruise.getVessel().getName(); + public Vessel getVessel() { + return cruise.getVessel(); } public String getCountry() { @@ -77,16 +80,16 @@ return cruise.getName(); } - public String getDepartureLocation() { - return cruise.getDepartureLocation().getName(); + public TuttiLocation getDepartureLocation() { + return cruise.getDepartureLocation(); } public Date getEndDate() { return cruise.getEndDate(); } - public String getReturnLocation() { - return cruise.getReturnLocation().getName(); + public TuttiLocation getReturnLocation() { + return cruise.getReturnLocation(); } public String getComment() { 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-04-05 17:17:13 UTC (rev 742) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java 2013-04-06 11:27:27 UTC (rev 743) @@ -30,25 +30,22 @@ import com.google.common.io.Files; import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.TuttiTechnicalException; +import fr.ifremer.tutti.persistence.entities.data.BatchContainer; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.service.AbstractTuttiService; +import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.TuttiCsvUtil; import fr.ifremer.tutti.service.TuttiServiceContext; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.csv.Export; -import org.nuiton.util.csv.ExportModel; -import org.nuiton.util.csv.ext.RepeatableExport; import java.io.BufferedWriter; -import java.io.Closeable; import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.Writer; -import java.util.Collections; import java.util.List; /** @@ -66,10 +63,16 @@ protected PersistenceService persistenceService; + protected DecoratorService decoratorService; + + protected char csvSeparator; + @Override public void setServiceContext(TuttiServiceContext context) { super.setServiceContext(context); persistenceService = getService(PersistenceService.class); + decoratorService = getService(DecoratorService.class); + csvSeparator = context.getConfig().getCsvSeparator(); } public void exportCruise(String cruiseId, File exportFile) { @@ -80,43 +83,24 @@ Cruise cruise = persistenceService.getCruise(cruiseId); Preconditions.checkNotNull(cruise); - File basedir = context.getConfig().newTempFile("exportCruise-" + cruiseId); + List<FishingOperation> operations = + persistenceService.getAllFishingOperation(cruiseId); + File basedir = context.getConfig().newTempFile( + "exportCruise-" + cruiseId); + File surveyFile = new File(basedir, "survey.csv"); exportSurvey(surveyFile, cruise); - File parameterFile = new File(basedir, "parameter.csv"); File operationFile = new File(basedir, "operation.csv"); - File catchesFile = new File(basedir, "catch.csv"); + exportOperations(operationFile, cruise, operations); - SurveyExportModel operationExportModel = null; - SurveyExportModel parameterExportModel = null; - SurveyExportModel catchExportModel = null; + File parameterFile = new File(basedir, "parameter.csv"); + exportParameters(parameterFile, cruise, operations); - OperationWriter operationWriter = null; + File catchesFile = new File(basedir, "catch.csv"); + exportCatches(catchesFile, cruise, operations); - try { - operationWriter = new OperationWriter( - operationFile, - parameterFile, - catchesFile, - operationExportModel, - parameterExportModel, - catchExportModel); - - List<FishingOperation> operations = - persistenceService.getAllFishingOperation(cruiseId); - - for (FishingOperation operation : operations) { - exportOperation(operationWriter, cruise, operation); - } - operationWriter.close(); - } catch (Exception e) { - throw new TuttiTechnicalException( - "Could not export operations", e); - } finally { - IOUtils.closeQuietly(operationWriter); - } TuttiIOUtil.zip(basedir, exportFile, "Could not create export zip"); } @@ -126,17 +110,16 @@ log.info("Will export survey to file: " + file); } - SurveyExportModel csvModel = - new SurveyExportModel(context.getConfig().getCsvSeparator()); - - SurveyExportRow row = new SurveyExportRow(cruise); - List<SurveyExportRow> rows = Lists.newArrayList((row)); - BufferedWriter writer = null; try { writer = Files.newWriter(file, Charsets.UTF_8); - Export export = Export.newExport(csvModel, rows); + SurveyExportModel model = new SurveyExportModel(csvSeparator); + + List<SurveyExportRow> rows = Lists.newArrayList(); + model.prepareRows(rows, cruise); + + Export export = Export.newExport(model, rows); export.write(writer); writer.close(); } catch (Exception e) { @@ -147,106 +130,103 @@ } } - protected void exportOperation(OperationWriter operationWriter, - Cruise cruise, - FishingOperation operation) throws Exception { + protected void exportOperations(File file, + Cruise cruise, + List<FishingOperation> operations) { if (log.isInfoEnabled()) { - log.info("Will export operation: " + operation.getId()); + log.info("Will export operations to file: " + file); } - operationWriter.exportOperation(cruise, operation); - operationWriter.exportParameter(cruise, operation); - operationWriter.exportCatch(cruise, operation); - } + BufferedWriter writer = null; + try { + writer = Files.newWriter(file, Charsets.UTF_8); + OperationExportModel model = + new OperationExportModel(csvSeparator); - class OperationWriter implements Closeable { + List<OperationExportRow> rows = Lists.newArrayList(); + model.prepareRows(rows, cruise, operations); - final BufferedWriter operationWriter; + Export export = Export.newExport(model, rows); + export.write(writer); + writer.close(); + } catch (Exception e) { + throw new TuttiTechnicalException( + "Could not export operations to file: " + file, e); + } finally { + IOUtils.closeQuietly(writer); + } + } - final BufferedWriter parameterWriter; + protected void exportParameters(File file, + Cruise cruise, + List<FishingOperation> operations) { - final BufferedWriter catchWriter; + if (log.isInfoEnabled()) { + log.info("Will export parameters to file: " + file); + } - final TuttiRepeatableExport<SurveyExportRow> operationExporter; + BufferedWriter writer = null; + try { + writer = Files.newWriter(file, Charsets.UTF_8); - final TuttiRepeatableExport<SurveyExportRow> parameterExporter; + ParameterExportModel model = + new ParameterExportModel(csvSeparator, + decoratorService); - final TuttiRepeatableExport<SurveyExportRow> catchExporter; + TuttiCsvUtil.TuttiRepeatableExport<ParameterExportRow> export = + TuttiCsvUtil.newRepeatableExport(model); - OperationWriter(File operationFile, - File parameterFile, - File catchesFile, - SurveyExportModel operationExportModel, - SurveyExportModel parameterExportModel, - SurveyExportModel catchExportModel) { - - try { - - operationWriter = Files.newWriter(operationFile, Charsets.UTF_8); - parameterWriter = Files.newWriter(parameterFile, Charsets.UTF_8); - catchWriter = Files.newWriter(catchesFile, Charsets.UTF_8); - } catch (FileNotFoundException e) { - throw new TuttiTechnicalException(e); + for (FishingOperation operation : operations) { + List<ParameterExportRow> rows = Lists.newArrayList(); + model.prepareRows(rows, cruise, operation); + export.write(rows, writer); } - operationExporter = new TuttiRepeatableExport<SurveyExportRow>(operationExportModel); - parameterExporter = new TuttiRepeatableExport<SurveyExportRow>(parameterExportModel); - catchExporter = new TuttiRepeatableExport<SurveyExportRow>(catchExportModel); + + writer.close(); + } catch (Exception e) { + throw new TuttiTechnicalException( + "Could not export parameters to file: " + file, e); + } finally { + IOUtils.closeQuietly(writer); } + } - void exportOperation(Cruise cruise, FishingOperation operation) throws Exception { + protected void exportCatches(File file, + Cruise cruise, + List<FishingOperation> operations) { - SurveyExportRow row = new SurveyExportRow(cruise); - List<SurveyExportRow> rows = Lists.newArrayList((row)); - operationExporter.write(rows, operationWriter); + if (log.isInfoEnabled()) { + log.info("Will export catches to file: " + file); } - void exportParameter(Cruise cruise, FishingOperation operation) throws Exception { + BufferedWriter writer = null; + try { + writer = Files.newWriter(file, Charsets.UTF_8); - SurveyExportRow row = new SurveyExportRow(cruise); - List<SurveyExportRow> rows = Lists.newArrayList((row)); - parameterExporter.write(rows, parameterWriter); - } + CatchExportModel model = new CatchExportModel(csvSeparator); - void exportCatch(Cruise cruise, FishingOperation operation) throws Exception { - SurveyExportRow row = new SurveyExportRow(cruise); - List<SurveyExportRow> rows = Lists.newArrayList((row)); - catchExporter.write(rows, catchWriter); - } + TuttiCsvUtil.TuttiRepeatableExport<CatchExportRow> export = + TuttiCsvUtil.newRepeatableExport(model); - @Override - public void close() throws IOException { - try { - if (operationWriter != null) { - operationWriter.close(); - } - } finally { + for (FishingOperation operation : operations) { - try { - if (parameterWriter != null) { - parameterWriter.close(); - } - } catch (IOException e) { + BatchContainer<SpeciesBatch> rootSpeciesBatch = + persistenceService.getRootSpeciesBatch(operation.getId()); - if (catchWriter != null) { - catchWriter.close(); - } - } + List<CatchExportRow> rows = Lists.newArrayList(); + model.prepareRows(rows, cruise, operation, rootSpeciesBatch); + export.write(rows, writer); } - } - } - class TuttiRepeatableExport<E> extends RepeatableExport<E> { - - public TuttiRepeatableExport(ExportModel<E> model) { - super(model, Collections.<E>emptyList(), true); + writer.close(); + } catch (Exception e) { + throw new TuttiTechnicalException( + "Could not export catches to file: " + file, e); + } finally { + IOUtils.closeQuietly(writer); } - - public void write(Iterable<E> data, Writer writer) throws Exception { - this.data = data; - write(writer); - } } } Modified: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/SpeciesBatch-error-validation.xml =================================================================== --- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/SpeciesBatch-error-validation.xml 2013-04-05 17:17:13 UTC (rev 742) +++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/SpeciesBatch-error-validation.xml 2013-04-06 11:27:27 UTC (rev 743) @@ -1,4 +1,28 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + #%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% + --> + <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> Property changes on: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/SpeciesBatch-error-validation.xml ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native
participants (1)
-
tchemit@users.forge.codelutin.com