r746 - in trunk: . tutti-persistence/src/main/java/fr/ifremer/tutti/persistence tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service tutti-persistence/src/main/resources tutti-service tutti-service/src/main/java/fr/ifremer/tutti/service tutti-service/src/main/java/fr/ifremer/tutti/service/export tutti-service/src/test/java/fr/ifremer/tutti/service tutti-service/src/test/java/fr/ifremer/tutti/service/export
Author: tchemit Date: 2013-04-07 14:56:47 +0200 (Sun, 07 Apr 2013) New Revision: 746 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/746 Log: refs #1875: [IMP/EXP] - Export des donn?\195?\169es de campagne : format g?\195?\169n?\195?\169rique (continue + add complete test (from the bottom method) Modified: trunk/pom.xml trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiEnumerationFile.java trunk/tutti-persistence/src/main/resources/tutti-db-enumerations.properties trunk/tutti-service/pom.xml trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.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/TuttiExportService.java trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/AbstractServiceTest.java 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/operation/EditFishingOperationUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/pom.xml 2013-04-07 12:56:47 UTC (rev 746) @@ -131,9 +131,6 @@ <eugenePluginVersion>2.6.2-SNAPSHOT</eugenePluginVersion> <hibernateVersion>3.6.10.Final</hibernateVersion> - <h2Version>1.3.168</h2Version> - <postgresqlVersion>9.1-901-1.jdbc4</postgresqlVersion> - <licensePluginVersion>1.4</licensePluginVersion> <jaxxVersion>2.5.16-SNAPSHOT</jaxxVersion> <swingXVersion>1.6.4</swingXVersion> @@ -305,12 +302,6 @@ </exclusions> </dependency> - <!--dependency> - <groupId>com.ezware.oxbow</groupId> - <artifactId>swing-bits</artifactId> - <version>0.5.0</version> - </dependency--> - <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> @@ -396,6 +387,13 @@ </dependency> <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <version>1.9.0</version> + <scope>test</scope> + </dependency> + + <dependency> <groupId>org.jmock</groupId> <artifactId>jmock</artifactId> <version>${jMockVersion}</version> Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-04-07 12:56:47 UTC (rev 746) @@ -212,6 +212,12 @@ Caracteristic getMarineLitterSizeCategoryCaracteristic(); + Caracteristic getVerticalOpeningCaracteristic(); + + Caracteristic getHorizontalOpeningWingCaracteristic(); + + Caracteristic getHorizontalOpeningDoorCaracteristic(); + List<Gear> getAllScientificGear(); List<Gear> getAllFishingGear(); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-04-07 12:56:47 UTC (rev 746) @@ -315,6 +315,21 @@ } @Override + public Caracteristic getVerticalOpeningCaracteristic() { + return referentialService.getVerticalOpeningCaracteristic(); + } + + @Override + public Caracteristic getHorizontalOpeningWingCaracteristic() { + return referentialService.getHorizontalOpeningWingCaracteristic(); + } + + @Override + public Caracteristic getHorizontalOpeningDoorCaracteristic() { + return referentialService.getHorizontalOpeningDoorCaracteristic(); + } + + @Override public List<Gear> getAllScientificGear() { return referentialService.getAllScientificGear(); } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java 2013-04-07 12:56:47 UTC (rev 746) @@ -172,6 +172,21 @@ } @Override + public Caracteristic getVerticalOpeningCaracteristic() { + throw new RuntimeException("method not implemented"); + } + + @Override + public Caracteristic getHorizontalOpeningWingCaracteristic() { + throw new RuntimeException("method not implemented"); + } + + @Override + public Caracteristic getHorizontalOpeningDoorCaracteristic() { + throw new RuntimeException("method not implemented"); + } + + @Override public List<Gear> getAllScientificGear() { throw new RuntimeException("method not implemented"); } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2013-04-07 12:56:47 UTC (rev 746) @@ -37,6 +37,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Species; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.time.DurationFormatUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.cfg.Environment; @@ -50,11 +51,14 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; +import static org.nuiton.i18n.I18n._; + /** * Usefull method around tutti entities. * @@ -369,4 +373,17 @@ return result; } + public static String getDuration(Date startDate, + Date endDate, + String format) { + String duration = ""; + if (startDate != null && endDate != null && !startDate.after(endDate)) { + duration = DurationFormatUtils.formatPeriod( + startDate.getTime(), + endDate.getTime(), + format); + } + return duration; + } + } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-04-07 12:56:47 UTC (rev 746) @@ -206,6 +206,12 @@ Caracteristic getMarineLitterSizeCategoryCaracteristic(); + Caracteristic getVerticalOpeningCaracteristic(); + + Caracteristic getHorizontalOpeningWingCaracteristic(); + + Caracteristic getHorizontalOpeningDoorCaracteristic(); + List<Gear> getAllScientificGear(); List<Gear> getAllFishingGear(); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-04-07 12:56:47 UTC (rev 746) @@ -548,6 +548,27 @@ } @Override + public Caracteristic getVerticalOpeningCaracteristic() { + Integer pmfmId = enumeration.PMFM_ID_VERTICAL_OPENING; + Caracteristic result = thisService.getCaracteristic(pmfmId); + return result; + } + + @Override + public Caracteristic getHorizontalOpeningWingCaracteristic() { + Integer pmfmId = enumeration.PMFM_ID_HORIZONTAL_OPENING_WING; + Caracteristic result = thisService.getCaracteristic(pmfmId); + return result; + } + + @Override + public Caracteristic getHorizontalOpeningDoorCaracteristic() { + Integer pmfmId = enumeration.PMFM_ID_HORIZONTAL_OPENING_DOOR; + Caracteristic result = thisService.getCaracteristic(pmfmId); + return result; + } + + @Override public Caracteristic getCaracteristic(Integer pmfmId) { Object[] source = queryUniqueWithStatus("pmfmById", "pmfmId", IntegerType.INSTANCE, pmfmId, Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiEnumerationFile.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiEnumerationFile.java 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiEnumerationFile.java 2013-04-07 12:56:47 UTC (rev 746) @@ -233,6 +233,15 @@ @Value("${PmfmId.SURVEY_PART}") public final Integer PMFM_ID_SURVEY_PART = null; + @Value("${PmfmId.VERTICAL_OPENING}") + public final Integer PMFM_ID_VERTICAL_OPENING = null; + + @Value("${PmfmId.HORIZONTAL_OPENING_WING}") + public final Integer PMFM_ID_HORIZONTAL_OPENING_WING= null; + + @Value("${PmfmId.HORIZONTAL_OPENING_DOOR}") + public final Integer PMFM_ID_HORIZONTAL_OPENING_DOOR= null; + //FIXME-TC Remove this when no more used @Value("${PmfmId.SURVEY_PART}") public final Integer PMFM_ID_MEASUREMENT_FILE = null; Modified: trunk/tutti-persistence/src/main/resources/tutti-db-enumerations.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/tutti-db-enumerations.properties 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-persistence/src/main/resources/tutti-db-enumerations.properties 2013-04-07 12:56:47 UTC (rev 746) @@ -375,6 +375,13 @@ QualitativeValueId.SORTING_TYPE_2_INERT=2162 QualitativeValueId.SORTING_TYPE_2_ALIVE_ITEMIZED=2160 +# PSFM "Ouverture verticale (chalut ou drague)" (pour export operation) +PmfmID.VERTICAL_OPENING=832 +# PSFM "Ouverture Horizontale aux pointes d'ailes" (pour export operation) +PmfmID.HORIZONTAL_OPENING_WING=827 +# PSFM "Ouverture horizontale aux panneaux" (pour export operation) +PmfmID.HORIZONTAL_OPENING_DOOR=830 + # (20=observateur volant, 95=Administrateur SIH) -> L'avantage du 20 est qu'il est inactif (=20), donc plus facilement detectable PersonId.UNKNOWN_RECORDER_PERSON=20 Modified: trunk/tutti-service/pom.xml =================================================================== --- trunk/tutti-service/pom.xml 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-service/pom.xml 2013-04-07 12:56:47 UTC (rev 746) @@ -128,6 +128,11 @@ <artifactId>junit</artifactId> </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + </dependency> + </dependencies> <build> Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-04-07 12:56:47 UTC (rev 746) @@ -413,6 +413,21 @@ } @Override + public Caracteristic getVerticalOpeningCaracteristic() { + return driver.getVerticalOpeningCaracteristic(); + } + + @Override + public Caracteristic getHorizontalOpeningWingCaracteristic() { + return driver.getHorizontalOpeningWingCaracteristic(); + } + + @Override + public Caracteristic getHorizontalOpeningDoorCaracteristic() { + return driver.getHorizontalOpeningDoorCaracteristic(); + } + + @Override public Vessel getVessel(String vesselCode) { return driver.getVessel(vesselCode); } 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-06 12:37:18 UTC (rev 745) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-04-07 12:56:47 UTC (rev 746) @@ -26,6 +26,7 @@ import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.persistence.entities.TuttiEntity; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import org.apache.commons.beanutils.BeanUtilsBean; import org.apache.commons.lang3.StringUtils; import org.nuiton.util.csv.Common; @@ -38,6 +39,7 @@ import org.nuiton.util.csv.ext.RepeatableExport; import org.nuiton.util.decorator.Decorator; +import java.io.Serializable; import java.io.Writer; import java.text.ParseException; import java.util.Collections; @@ -247,6 +249,9 @@ public static final ValueParserFormatter<Date> TIME = new DateValue("HH:mm:ss"); + public static final ValueFormatter<Serializable> CARACTERISTIC_VALUE_FORMATTER= + new CaracteristicValueFormatter(); + public static <E> BeanPropertyFormatter<E> newBeanFormatter(String propertyName, String defaultNullValue) { return new BeanPropertyFormatter<E>(propertyName, defaultNullValue); @@ -321,6 +326,31 @@ } } + protected static class CaracteristicValueFormatter implements ValueFormatter<Serializable> { + + ValueParserFormatter<Integer> integerDelegate = INTEGER; + + ValueParserFormatter<Float> floatDelegate = FLOAT; + + ValueParserFormatter<String> textDelegate = STRING; + + @Override + public String format(Serializable value) { + if (value instanceof Float) { + return floatDelegate.format((Float) value); + } + if (value instanceof Integer) { + return integerDelegate.format((Integer) value); + } + if (value instanceof String) { + return textDelegate.format((String) value); + } + // qualitive value + CaracteristicQualitativeValue qv = (CaracteristicQualitativeValue) value; + return qv.getName(); + } + } + protected TuttiCsvUtil() { // no instance } Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java 2013-04-07 12:56:47 UTC (rev 746) @@ -112,6 +112,9 @@ } public <S extends TuttiService> S getService(Class<S> serviceType) { + if (serviceType==null) { + return null; + } try { S s = (S) services.get(serviceType); return s; Modified: 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 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/OperationExportModel.java 2013-04-07 12:56:47 UTC (rev 746) @@ -27,6 +27,7 @@ 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.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.Vessel; @@ -42,9 +43,21 @@ */ public class OperationExportModel extends TuttiCsvUtil.AbstractTuttiExportModel<OperationExportRow> { - public OperationExportModel(char separator) { + + protected final Caracteristic verticalOpeningCaracteristic; + + protected final Caracteristic horizontalOpeningWingCaracteristic; + + protected final Caracteristic horizontalOpeningDoorCaracteristic; + + public OperationExportModel(char separator, + Caracteristic verticalOpeningCaracteristic, + Caracteristic horizontalOpeningWingCaracteristic, + Caracteristic horizontalOpeningDoorCaracteristic) { super(separator); - + this.verticalOpeningCaracteristic = verticalOpeningCaracteristic; + this.horizontalOpeningWingCaracteristic = horizontalOpeningWingCaracteristic; + this.horizontalOpeningDoorCaracteristic = horizontalOpeningDoorCaracteristic; newColumnForExport("Annee", Cruise.PROPERTY_BEGIN_DATE, TuttiCsvUtil.YEAR); newColumnForExport("Serie", Cruise.PROPERTY_PROGRAM, Program.PROPERTY_NAME); newColumnForExport("Serie_Partielle", Cruise.PROPERTY_SURVEY_PART); @@ -61,19 +74,18 @@ newColumnForExport("HeureFin_OP", FishingOperation.PROPERTY_GEAR_SHOOTING_END_DATE, TuttiCsvUtil.TIME); newColumnForExport("LatFin", FishingOperation.PROPERTY_GEAR_SHOOTING_END_LATITUDE, TuttiCsvUtil.FLOAT); newColumnForExport("LongFin", FishingOperation.PROPERTY_GEAR_SHOOTING_END_LONGITUDE, TuttiCsvUtil.FLOAT); -//FIXME newColumnForExport("Duree", FishingOperation.PROPERTY_); + newColumnForExport("Duree", OperationExportRow.PROPERTY_DURATION); 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",); +//FIXME newColumnForExport("Rectangle_CIEM",); // Carré statistique newColumnForExport("Validite_OP", FishingOperation.PROPERTY_FISHING_OPERATION_VALID, TuttiCsvUtil.BOOLEAN); newColumnForExport("Rectiligne", FishingOperation.PROPERTY_FISHING_OPERATION_RECTILIGNE, TuttiCsvUtil.BOOLEAN); newColumnForExport("Distance", FishingOperation.PROPERTY_TRAWL_DISTANCE, TuttiCsvUtil.FLOAT); -//FIXME newColumnForExport("Ouv_Verticale",); -//FIXME newColumnForExport("Ouv_Horizontale_Ailes",); -//FIXME newColumnForExport("Ouv_Horizontale_Panneaux",); + newColumnForExport("Ouv_Verticale", OperationExportRow.PROPERTY_VERTICAL_OPENING_GEAR_USE_FEATURE, TuttiCsvUtil.CARACTERISTIC_VALUE_FORMATTER); + newColumnForExport("Ouv_Horizontale_Ailes", OperationExportRow.PROPERTY_HORIZONTAL_OPENING_WING_GEAR_USE_FEATURE, TuttiCsvUtil.CARACTERISTIC_VALUE_FORMATTER); + newColumnForExport("Ouv_Horizontale_Panneaux", OperationExportRow.PROPERTY_HORIZONTAL_OPENING_DOOR_GEAR_USE_FEATURE, TuttiCsvUtil.CARACTERISTIC_VALUE_FORMATTER); newColumnForExport("Commentaire", FishingOperation.PROPERTY_COMMENT); - } public void prepareRows(List<OperationExportRow> rows, @@ -82,7 +94,10 @@ for (FishingOperation operation : operations) { - OperationExportRow row = new OperationExportRow(); + OperationExportRow row = new OperationExportRow( + verticalOpeningCaracteristic, + horizontalOpeningWingCaracteristic, + horizontalOpeningDoorCaracteristic); row.setCruise(cruise); row.setFishingOperation(operation); rows.add(row); Modified: 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 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/OperationExportRow.java 2013-04-07 12:56:47 UTC (rev 746) @@ -24,9 +24,12 @@ * #L% */ +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.Vessel; @@ -42,12 +45,36 @@ */ public class OperationExportRow implements Serializable { + public static final String PROPERTY_DURATION = "duration"; + + public static final String PROPERTY_VERTICAL_OPENING_GEAR_USE_FEATURE = "verticalOpeningGearUseFeature"; + + public static final String PROPERTY_HORIZONTAL_OPENING_WING_GEAR_USE_FEATURE = "horizontalOpeningWingGearUseFeature"; + + public static final String PROPERTY_HORIZONTAL_OPENING_DOOR_GEAR_USE_FEATURE = "horizontalOpeningDoorGearUseFeature"; + + private static final long serialVersionUID = 1L; protected Cruise cruise; protected FishingOperation fishingOperation; + private Caracteristic verticalOpeningCaracteristic; + + private Caracteristic horizontalOpeningWingCaracteristic; + + private Caracteristic horizontalOpeningDoorCaracteristic; + + public OperationExportRow(Caracteristic verticalOpeningCaracteristic, + Caracteristic horizontalOpeningWingCaracteristic, + Caracteristic horizontalOpeningDoorCaracteristic) { + + this.verticalOpeningCaracteristic = verticalOpeningCaracteristic; + this.horizontalOpeningWingCaracteristic = horizontalOpeningWingCaracteristic; + this.horizontalOpeningDoorCaracteristic = horizontalOpeningDoorCaracteristic; + } + public void setCruise(Cruise cruise) { this.cruise = cruise; } @@ -135,4 +162,32 @@ public String getComment() { return fishingOperation.getComment(); } + + public String getDuration() { + return TuttiEntities.getDuration( + getGearShootingStartDate(), + getGearShootingEndDate(), + "mm"); + } + + public Serializable getVerticalOpeningGearUseFeature() { + Serializable result = getGearUseFeature(verticalOpeningCaracteristic); + return result; + } + + public Serializable getHorizontalOpeningWingGearUseFeature() { + Serializable result = getGearUseFeature(horizontalOpeningWingCaracteristic); + return result; + } + + public Serializable getHorizontalOpeningDoorGearUseFeature() { + Serializable result = getGearUseFeature(horizontalOpeningDoorCaracteristic); + return result; + } + + protected Serializable getGearUseFeature(Caracteristic caracteristic) { + CaracteristicMap gearUseFeatures = fishingOperation.getGearUseFeatures(); + Serializable serializable = gearUseFeatures.get(caracteristic); + return serializable; + } } \ No newline at end of file Modified: 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 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/ParameterExportModel.java 2013-04-07 12:56:47 UTC (rev 746) @@ -28,11 +28,8 @@ 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.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.TuttiCsvUtil; -import org.nuiton.util.csv.ValueFormatter; -import org.nuiton.util.csv.ValueParserFormatter; import java.io.Serializable; import java.util.List; @@ -57,30 +54,7 @@ newColumnForExport("Code_PMFM", ParameterExportRow.PROPERTY_CARACTERISTIC, Caracteristic.PROPERTY_ID); newColumnForExportByDecorator("Libelle_PMFm", ParameterExportRow.PROPERTY_CARACTERISTIC, decoratorService.getDecoratorByType(Caracteristic.class)); - newColumnForExport("Valeur", ParameterExportRow.PROPERTY_VALUE, new ValueFormatter<Serializable>() { - - ValueParserFormatter<Integer> integerDelegate = TuttiCsvUtil.INTEGER; - - ValueParserFormatter<Float> floatDelegate = TuttiCsvUtil.FLOAT; - - ValueParserFormatter<String> textDelegate = TuttiCsvUtil.STRING; - - @Override - public String format(Serializable value) { - if (value instanceof Float) { - return floatDelegate.format((Float) value); - } - if (value instanceof Integer) { - return integerDelegate.format((Integer) value); - } - if (value instanceof String) { - return textDelegate.format((String) value); - } - // qualitive value - CaracteristicQualitativeValue qv = (CaracteristicQualitativeValue) value; - return qv.getName(); - } - }); + newColumnForExport("Valeur", ParameterExportRow.PROPERTY_VALUE, TuttiCsvUtil.CARACTERISTIC_VALUE_FORMATTER); } public void prepareRows(List<ParameterExportRow> rows, 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-06 12:37:18 UTC (rev 745) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java 2013-04-07 12:56:47 UTC (rev 746) @@ -34,6 +34,7 @@ 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.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.AbstractTuttiService; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.PersistenceService; @@ -67,12 +68,21 @@ protected char csvSeparator; + private Caracteristic verticalOpeningCaracteristic; + + private Caracteristic horizontalOpeningWingCaracteristic; + + private Caracteristic horizontalOpeningDoorCaracteristic; + @Override public void setServiceContext(TuttiServiceContext context) { super.setServiceContext(context); persistenceService = getService(PersistenceService.class); decoratorService = getService(DecoratorService.class); csvSeparator = context.getConfig().getCsvSeparator(); + verticalOpeningCaracteristic = persistenceService.getVerticalOpeningCaracteristic(); + horizontalOpeningWingCaracteristic = persistenceService.getHorizontalOpeningWingCaracteristic(); + horizontalOpeningDoorCaracteristic = persistenceService.getHorizontalOpeningDoorCaracteristic(); } public void exportCruise(String cruiseId, File exportFile) { @@ -86,9 +96,10 @@ List<FishingOperation> operations = persistenceService.getAllFishingOperation(cruiseId); - File basedir = context.getConfig().newTempFile( - "exportCruise-" + cruiseId); + File basedir = new File(context.getConfig().newTempFile( + "exportCruise"), "exportCruise-" + cruiseId); + TuttiIOUtil.forceMkdir(basedir, "Could not create directory"); File surveyFile = new File(basedir, "survey.csv"); exportSurvey(surveyFile, cruise); @@ -98,8 +109,8 @@ File parameterFile = new File(basedir, "parameter.csv"); exportParameters(parameterFile, cruise, operations); - File catchesFile = new File(basedir, "catch.csv"); - exportCatches(catchesFile, cruise, operations); +// File catchesFile = new File(basedir, "catch.csv"); +// exportCatches(catchesFile, cruise, operations); TuttiIOUtil.zip(basedir, exportFile, "Could not create export zip"); } @@ -143,7 +154,11 @@ writer = Files.newWriter(file, Charsets.UTF_8); OperationExportModel model = - new OperationExportModel(csvSeparator); + new OperationExportModel( + csvSeparator, + verticalOpeningCaracteristic, + horizontalOpeningWingCaracteristic, + horizontalOpeningDoorCaracteristic); List<OperationExportRow> rows = Lists.newArrayList(); model.prepareRows(rows, cruise, operations); Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/AbstractServiceTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/AbstractServiceTest.java 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/AbstractServiceTest.java 2013-04-07 12:56:47 UTC (rev 746) @@ -27,6 +27,7 @@ import fr.ifremer.tutti.persistence.RessourceClassLoader; import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfigOption; import fr.ifremer.tutti.service.config.TuttiServiceConfig; +import fr.ifremer.tutti.service.config.TuttiServiceConfigOption; import org.apache.commons.io.FileUtils; import org.junit.After; import org.junit.Before; @@ -70,8 +71,12 @@ new ApplicationConfig("tutti-test.properties"); applicationConfig.loadDefaultOptions( TuttiPersistenceConfigOption.values()); - applicationConfig.setDefaultOption("tutti.data.directory", - new File(datadirectory, "data").getAbsolutePath()); + applicationConfig.loadDefaultOptions( + TuttiServiceConfigOption.values()); + applicationConfig.setDefaultOption(TuttiServiceConfigOption.BASEDIR.getKey(), + datadirectory.getAbsolutePath()); +// applicationConfig.setDefaultOption(TuttiServiceConfigOption.DATA_DIRECTORY.getKey(), +// new File(datadirectory, "data").getAbsolutePath()); applicationConfig.parse(); RessourceClassLoader loader = 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-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java 2013-04-07 12:56:47 UTC (rev 746) @@ -40,6 +40,7 @@ import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.service.AbstractServiceTest; +import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiServiceContext; import fr.ifremer.tutti.service.config.TuttiServiceConfig; import org.apache.commons.io.Charsets; @@ -49,6 +50,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.mockito.Mockito; import java.io.File; import java.util.Date; @@ -66,6 +68,10 @@ protected TuttiExportService service; + protected Cruise cruise; + + protected List<FishingOperation> operations; + @Override protected TuttiServiceContext createServiceContext(RessourceClassLoader loader, TuttiServiceConfig config) { @@ -76,11 +82,44 @@ public void setUp() throws Exception { super.setUp(); + createCaracteristics(); + + cruise = createCruise(); + operations = createOperations(cruise); + serviceContext.getConfig().setCsvSeparator(';'); - service = serviceContext.getService(TuttiExportService.class); + + PersistenceService persistenceService = Mockito.mock(PersistenceService.class); + persistenceService.setServiceContext(serviceContext); + + Mockito.when(persistenceService.getVerticalOpeningCaracteristic()).thenReturn(caracteristicVerticalOpening); + Mockito.when(persistenceService.getHorizontalOpeningDoorCaracteristic()).thenReturn(caracteristicHorizontalOpeningDoor); + Mockito.when(persistenceService.getHorizontalOpeningWingCaracteristic()).thenReturn(caracteristicHorizontalOpeningWing); + Mockito.when(persistenceService.getCruise(Mockito.<String>any())).thenReturn(cruise); + Mockito.when(persistenceService.getAllFishingOperation(Mockito.<String>any())).thenReturn(operations); + + TuttiServiceContext serviceContextSpy = Mockito.spy(serviceContext); + Mockito.when(serviceContextSpy.getService(Mockito.eq(PersistenceService.class))).thenReturn(persistenceService); + + service = Mockito.mock(TuttiExportService.class, Mockito.withSettings().defaultAnswer(Mockito.CALLS_REAL_METHODS)); + + service.setServiceContext(serviceContextSpy); } @Test + public void exportCruise() throws Exception { + + File exportFile = new File(datadirectory, "exportCruise.zip"); + + Files.createParentDirs(exportFile); + + Assert.assertFalse(exportFile.exists()); + + service.exportCruise(cruise.getId(), exportFile); + Assert.assertTrue(exportFile.exists()); + } + + @Test public void exportSurvey() throws Exception { File exportFile = new File(datadirectory, "exportSurvey.csv"); @@ -89,8 +128,6 @@ Assert.assertFalse(exportFile.exists()); - Cruise cruise = createCruise(); - service.exportSurvey(exportFile, cruise); Assert.assertTrue(exportFile.exists()); @@ -109,9 +146,6 @@ Assert.assertFalse(exportFile.exists()); - Cruise cruise = createCruise(); - List<FishingOperation> operations = createOperations(cruise); - service.exportOperations(exportFile, cruise, operations); Assert.assertTrue(exportFile.exists()); @@ -130,9 +164,6 @@ Assert.assertFalse(exportFile.exists()); - Cruise cruise = createCruise(); - List<FishingOperation> operations = createOperations(cruise); - service.exportParameters(exportFile, cruise, operations); Assert.assertTrue(exportFile.exists()); @@ -212,12 +243,50 @@ vessel.setInternationalRegistrationCode("VesselInternationalRegistrationCode"); cruise.setVessel(vessel); + return cruise; } + Caracteristic caracteristicVerticalOpening; + + Caracteristic caracteristicHorizontalOpeningWing; + + Caracteristic caracteristicHorizontalOpeningDoor; + + private void createCaracteristics() { + + caracteristicVerticalOpening = TuttiBeanFactory.newCaracteristic(); + caracteristicVerticalOpening.setCaracteristicType(CaracteristicType.NUMBER); + caracteristicVerticalOpening.setId(10); + caracteristicVerticalOpening.setNumericType(true); + caracteristicVerticalOpening.setParameterName("CaracteristicVerticalOpeningParameterName"); + caracteristicVerticalOpening.setMatrixName("CaracteristicVerticalOpeningMatrixName"); + caracteristicVerticalOpening.setFractionName("CaracteristicVerticalOpeningFractionName"); + caracteristicVerticalOpening.setMethodName("CaracteristicVerticalOpeningMethodName"); + + caracteristicHorizontalOpeningWing = TuttiBeanFactory.newCaracteristic(); + caracteristicHorizontalOpeningWing.setCaracteristicType(CaracteristicType.NUMBER); + caracteristicHorizontalOpeningWing.setId(11); + caracteristicHorizontalOpeningWing.setNumericType(true); + caracteristicHorizontalOpeningWing.setParameterName("CaracteristicHorizontalOpeningWingParameterName"); + caracteristicHorizontalOpeningWing.setMatrixName("CaracteristicHorizontalOpeningWingMatrixName"); + caracteristicHorizontalOpeningWing.setFractionName("CaracteristicHorizontalOpeningWingFractionName"); + caracteristicHorizontalOpeningWing.setMethodName("CaracteristicHorizontalOpeningWingMethodName"); + + caracteristicHorizontalOpeningDoor = TuttiBeanFactory.newCaracteristic(); + caracteristicHorizontalOpeningDoor.setCaracteristicType(CaracteristicType.NUMBER); + caracteristicHorizontalOpeningDoor.setId(12); + caracteristicHorizontalOpeningDoor.setNumericType(true); + caracteristicHorizontalOpeningDoor.setParameterName("CaracteristicHorizontalOpeningDoorParameterName"); + caracteristicHorizontalOpeningDoor.setMatrixName("CaracteristicHorizontalOpeningDoorMatrixName"); + caracteristicHorizontalOpeningDoor.setFractionName("CaracteristicHorizontalOpeningDoorFractionName"); + caracteristicHorizontalOpeningDoor.setMethodName("CaracteristicHorizontalOpeningDoorMethodName"); + } + private List<FishingOperation> createOperations(Cruise cruise) { List<FishingOperation> result = Lists.newArrayList(); + Caracteristic caracteristicInteger = TuttiBeanFactory.newCaracteristic(); caracteristicInteger.setCaracteristicType(CaracteristicType.NUMBER); caracteristicInteger.setId(0); @@ -302,6 +371,9 @@ gearUseFeatures.put(caracteristicText, "Text"); gearUseFeatures.put(caracteristicQualitative, caracteristicQualitative.getQualitativeValue(0)); gearUseFeatures.put(caracteristicQualitative2, caracteristicQualitative.getQualitativeValue(1)); + gearUseFeatures.put(caracteristicVerticalOpening, 5); + gearUseFeatures.put(caracteristicHorizontalOpeningDoor, -2); + gearUseFeatures.put(caracteristicHorizontalOpeningWing, -9); CaracteristicMap vesselUseFeatures = new CaracteristicMap(); gearUseFeatures.put(caracteristicInteger, 20); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-04-07 12:56:47 UTC (rev 746) @@ -50,7 +50,6 @@ import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.time.DateUtils; -import org.apache.commons.lang3.time.DurationFormatUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXDatePicker; @@ -518,13 +517,11 @@ } public String getDuration(Date startDate, Date endDate) { - String duration = ""; - if (startDate != null && endDate != null && !startDate.after(endDate)) { - duration = DurationFormatUtils.formatPeriod( - startDate.getTime(), - endDate.getTime(), - _("tutti.editFishingOperation.duration.format")); - } + String duration = TuttiEntities.getDuration( + startDate, + endDate, + _("tutti.editFishingOperation.duration.format") + ); return duration; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-04-06 12:37:18 UTC (rev 745) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-04-07 12:56:47 UTC (rev 746) @@ -26,6 +26,7 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.TuttiTechnicalException; +import jaxx.runtime.FileChooserUtil; import jaxx.runtime.JAXXBinding; import jaxx.runtime.JAXXObject; import jaxx.runtime.SwingUtil; @@ -35,9 +36,7 @@ import org.jdesktop.beans.AbstractBean; import org.jdesktop.swingx.decorator.HighlightPredicate; import org.jdesktop.swingx.decorator.Highlighter; -import org.nuiton.util.FileUtil; -import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.UIManager; import java.awt.Color; @@ -85,13 +84,13 @@ String buttonLabel, String... filters) { - File file = FileUtil.getFile(title, buttonLabel, parent, filters); + File file = FileChooserUtil.getFile(title, buttonLabel, parent, filters); if (log.isDebugEnabled()) { log.debug(title + " : " + file); } if (file != null) { File newDir = file.isDirectory() ? file : file.getParentFile(); - FileUtil.setCurrentDirectory(newDir); + FileChooserUtil.setCurrentDirectory(newDir); } return file; } @@ -113,13 +112,13 @@ String buttonLabel, String... filters) { - File file = saveFile(filename, title, buttonLabel, parent, filters); + File file = FileChooserUtil.saveFile(filename, title, buttonLabel, parent, filters); if (log.isDebugEnabled()) { log.debug(title + " : " + file); } if (file != null) { Preconditions.checkState(!file.isDirectory()); - FileUtil.setCurrentDirectory(file.getParentFile()); + FileChooserUtil.setCurrentDirectory(file.getParentFile()); } return file; } @@ -137,7 +136,7 @@ String title, String buttonLabel) { - String file = FileUtil.getDirectory(parent, title, buttonLabel); + String file = FileChooserUtil.getDirectory(parent, title, buttonLabel); if (log.isDebugEnabled()) { log.debug(title + " : " + file); } @@ -146,7 +145,7 @@ if (!newDir.isDirectory()) { newDir = newDir.getParentFile(); } - FileUtil.setCurrentDirectory(newDir); + FileChooserUtil.setCurrentDirectory(newDir); } return file == null ? null : new File(file); } @@ -334,87 +333,4 @@ } } - //TODO Move this to jaxx (but not to nuiton-utils) - - /** - * Retourne le nom du fichier entre dans la boite de dialogue. - * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null. - * - * @param title le titre de la boite de dialogue - * @param approvalText le label du boutton d'acceptation - * @param parent le component parent du dialog - * @param patternOrDescriptionFilters les filtres a utiliser, les chaines doivent etre données - * par deux, le pattern du filtre + la description du filtre - * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé - */ - public static File saveFile(String filename, - String title, - String approvalText, - Component parent, - String... patternOrDescriptionFilters) { - - if (patternOrDescriptionFilters.length % 2 != 0) { - throw new IllegalArgumentException( - "Arguments must be (pattern, description) couple"); - } - javax.swing.filechooser.FileFilter[] filters = - new javax.swing.filechooser.FileFilter[ - patternOrDescriptionFilters.length / 2]; - for (int i = 0; i < filters.length; i++) { - String pattern = patternOrDescriptionFilters[i * 2]; - String description = patternOrDescriptionFilters[i * 2 + 1]; - filters[i] = new FileUtil.PatternChooserFilter(pattern, description); - } - File result; - result = saveFile(filename, title, approvalText, parent, filters); - return result; - } - - //TODO Move this to jaxx (but not to nuiton-utils) - - /** - * Retourne le nom du fichier entre dans la boite de dialogue. - * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null. - * - * @param title le titre de la boite de dialogue - * @param approvalText le label du boutton d'acceptation - * @param parent le component parent du dialog - * @param filters les filtres a ajouter - * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé - */ - public static File saveFile(String filename, - String title, - String approvalText, - Component parent, - javax.swing.filechooser.FileFilter... filters) { - File selectedFile = new File(FileUtil.getCurrentDirectory(), filename); - JFileChooser chooser = new JFileChooser(selectedFile); - - chooser.setDialogType(JFileChooser.SAVE_DIALOG); - chooser.setSelectedFile(selectedFile); - if (filters.length > 0) { - if (filters.length == 1) { - chooser.setFileFilter(filters[0]); - } else { - for (javax.swing.filechooser.FileFilter filter : filters) { - chooser.addChoosableFileFilter(filter); - } - } - } - chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - chooser.setDialogTitle(title); - - File result = null; - - int returnVal = chooser.showDialog(parent, approvalText); - if (returnVal == JFileChooser.APPROVE_OPTION) { - result = chooser.getSelectedFile(); - if (result != null) { - FileUtil.setCurrentDirectory(result); - result = result.getAbsoluteFile(); - } - } - return result; - } - }
participants (1)
-
tchemit@users.forge.codelutin.com