Author: tchemit Date: 2013-02-04 01:36:29 +0100 (Mon, 04 Feb 2013) New Revision: 315 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/315 Log: refs #1824: [PROTOCOLE] - Gestion des param?\195?\168tres suivis par esp?\195?\168ces (import / export des esp?\195?\168ces) Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRow.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportService.java trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportServiceTest.java 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-02-03 22:03:03 UTC (rev 314) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-02-04 00:36:29 UTC (rev 315) @@ -26,6 +26,7 @@ import fr.ifremer.tutti.persistence.entities.IdAware; import org.apache.commons.lang3.StringUtils; +import org.nuiton.util.csv.Common; import org.nuiton.util.csv.ValueParserFormatter; import org.nuiton.util.csv.ext.AbstractImportExportModel; @@ -59,6 +60,28 @@ } } + + public static class StringParserFormatter extends Common.NullableParserFormatter<String> { + + public StringParserFormatter(String defaultValue, boolean nullAllowed) { + super(defaultValue, nullAllowed); + } + + @Override + public String format(String value) { + String str = ""; + if (value != null) { + str = String.valueOf(value); + } + return str; + } + + @Override + protected String parseNoneEmptyValue(String value) { + return value; + } + } + /** * @param <E> * @author tchemit <chemit@codelutin.com> Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRow.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRow.java 2013-02-03 22:03:03 UTC (rev 314) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRow.java 2013-02-04 00:36:29 UTC (rev 315) @@ -42,6 +42,8 @@ public static final String PROPERTY_ID = "id"; + public static final String PROPERTY_CRUISE_CODE = "cruiseCode"; + public static final String PROPERTY_SPECIES = "species"; public static final String PROPERTY_SIZE_ENABLED = "sizeEnabled"; @@ -52,10 +54,18 @@ public static final String PROPERTY_AGE_ENABLED = "ageEnabled"; - public static final String PROPERTY_LENGTH_CLASS = "lengthClass"; + public static final String PROPERTY_LENGTH_STEP = "lengthStep"; - public static final String PROPERTY_LENGTH_CLASS_ID = "lengthClassId"; + public static final String PROPERTY_LENGTH_STEP_PARAMETER_NAME = "lengthStepParameterName"; + public static final String PROPERTY_LENGTH_STEP_MATRIX_NAME = "lengthStepMatrixName"; + + public static final String PROPERTY_LENGTH_STEP_FRACTION_NAME = "lengthStepFractionName"; + + public static final String PROPERTY_LENGTH_STEP_METHOD_NAME = "lengthStepMethodName"; + + public static final String PROPERTY_LENGTH_STEP_PMFM_ID = "lengthStepPmfmId"; + public static final String PROPERTY_WEIGHT_ENABLED = "weightEnabled"; public static final String PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED = "countIfNoFrequencyEnabled"; @@ -66,7 +76,7 @@ protected Species species; - protected Caracteristic lengthClass; + protected Caracteristic lengthStep; public SpeciesRow() { delegate = new SpeciesProtocol(); @@ -76,19 +86,35 @@ return species; } - public Caracteristic getLengthClass() { - return lengthClass; + public Caracteristic getLengthStep() { + return lengthStep; } - public void setLengthClass(Caracteristic lengthClass) { - this.lengthClass = lengthClass; - delegate.setLengthStepPmfmId(lengthClass == null ? null : lengthClass.getId()); + public void setLengthStep(Caracteristic lengthStep) { + this.lengthStep = lengthStep; + delegate.setLengthStepPmfmId(lengthStep == null ? null : lengthStep.getId()); } - public String getLengthClassId() { + public String getLengthStepPmfmId() { return delegate.getLengthStepPmfmId(); } + public String getLengthStepParameterName() { + return lengthStep == null ? null : lengthStep.getParameterName(); + } + + public String getLengthStepMethodName() { + return lengthStep == null ? null : lengthStep.getMethodName(); + } + + public String getLengthStepMatrixName() { + return lengthStep == null ? null : lengthStep.getMatrixName(); + } + + public String getLengthStepFractionName() { + return lengthStep == null ? null : lengthStep.getFractionName(); + } + public void setSpecies(Species species) { this.species = species; delegate.setSpeciesId(species == null ? null : species.getId()); @@ -158,4 +184,11 @@ return delegate.getSpeciesId(); } + public String getCruiseCode() { + return delegate.getCruiseCode(); + } + + public void setCruiseCode(String cruiseCode) { + delegate.setCruiseCode(cruiseCode); + } } \ No newline at end of file Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java 2013-02-03 22:03:03 UTC (rev 314) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java 2013-02-04 00:36:29 UTC (rev 315) @@ -52,12 +52,18 @@ Species.PROPERTY_ID, speciesMap); - newForeignKeyColumn(SpeciesRow.PROPERTY_LENGTH_CLASS, - SpeciesRow.PROPERTY_LENGTH_CLASS, + newForeignKeyColumn(SpeciesRow.PROPERTY_LENGTH_STEP, + SpeciesRow.PROPERTY_LENGTH_STEP, Caracteristic.class, Caracteristic.PROPERTY_ID, caracteristicMap); + newIgnoredColumn(SpeciesRow.PROPERTY_LENGTH_STEP_PARAMETER_NAME); + newIgnoredColumn(SpeciesRow.PROPERTY_LENGTH_STEP_MATRIX_NAME); + newIgnoredColumn(SpeciesRow.PROPERTY_LENGTH_STEP_FRACTION_NAME); + newIgnoredColumn(SpeciesRow.PROPERTY_LENGTH_STEP_METHOD_NAME); + + newMandatoryColumn(SpeciesRow.PROPERTY_CRUISE_CODE, new TuttiCsvUtil.StringParserFormatter(null,true)); newMandatoryColumn(SpeciesRow.PROPERTY_SIZE_ENABLED, Common.PRIMITIVE_BOOLEAN); newMandatoryColumn(SpeciesRow.PROPERTY_SEX_ENABLED, Common.PRIMITIVE_BOOLEAN); newMandatoryColumn(SpeciesRow.PROPERTY_MATURITY_ENABLED, Common.PRIMITIVE_BOOLEAN); @@ -69,7 +75,13 @@ // export definition newColumnForExport(SpeciesRow.PROPERTY_ID); - newColumnForExport(SpeciesRow.PROPERTY_LENGTH_CLASS, SpeciesRow.PROPERTY_LENGTH_CLASS_ID); + newColumnForExport(SpeciesRow.PROPERTY_CRUISE_CODE); + newColumnForExport(SpeciesRow.PROPERTY_LENGTH_STEP, SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_ID); + newColumnForExport(SpeciesRow.PROPERTY_LENGTH_STEP_PARAMETER_NAME); + newColumnForExport(SpeciesRow.PROPERTY_LENGTH_STEP_MATRIX_NAME); + newColumnForExport(SpeciesRow.PROPERTY_LENGTH_STEP_FRACTION_NAME); + newColumnForExport(SpeciesRow.PROPERTY_LENGTH_STEP_METHOD_NAME); + newColumnForExport(SpeciesRow.PROPERTY_SIZE_ENABLED, Common.PRIMITIVE_BOOLEAN); newColumnForExport(SpeciesRow.PROPERTY_SEX_ENABLED, Common.PRIMITIVE_BOOLEAN); newColumnForExport(SpeciesRow.PROPERTY_MATURITY_ENABLED, Common.PRIMITIVE_BOOLEAN); Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportService.java 2013-02-03 22:03:03 UTC (rev 314) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportService.java 2013-02-04 00:36:29 UTC (rev 315) @@ -45,8 +45,7 @@ import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; import org.nuiton.util.csv.Export; -import org.nuiton.util.csv.Import2; -import org.nuiton.util.csv.ImportRow; +import org.nuiton.util.csv.Import; import java.io.BufferedWriter; import java.io.File; @@ -81,7 +80,7 @@ TuttiProtocol protocol, Map<String, Caracteristic> caracteristicMap) throws IOException { if (log.isInfoEnabled()) { - log.info("Will import protocol [" + protocol.getName() + "] caracteristic from file: " + file); + log.info("Will import protocol caracteristic from file: " + file); } Multimap<CaracteristicType, String> ids = TreeMultimap.create(); @@ -93,30 +92,17 @@ Reader reader = Files.newReader(file, Charsets.UTF_8); try { - Import2<CaracteristicRow> importer = - Import2.newImport(csvModel, reader); + Import<CaracteristicRow> importer = + Import.newImport(csvModel, reader); try { - for (ImportRow<CaracteristicRow> row : importer) { + for (CaracteristicRow bean : importer) { - if (!row.isValid()) { - - //TODO deal with line error - if (log.isErrorEnabled()) { - log.error("there is some error on line " + row.getLineNumber() + ":\n" + row.getErrors()); - } - } else { - - // treat row - CaracteristicRow bean = row.getBean(); - - CaracteristicType caracteristicType = bean.getType(); - - Caracteristic caracteristic = bean.getCaracteristic(); - String id = caracteristic.getId(); - ids.put(caracteristicType, id); - } + CaracteristicType caracteristicType = bean.getType(); + Caracteristic caracteristic = bean.getCaracteristic(); + String id = caracteristic.getId(); + ids.put(caracteristicType, id); } importer.close(); } finally { @@ -230,7 +216,6 @@ "] species from file: " + file); } - Map<String, SpeciesProtocol> ids = Maps.newLinkedHashMap(); if (!protocol.isSpeciesEmpty()) { @@ -250,8 +235,7 @@ Reader reader = Files.newReader(file, Charsets.UTF_8); try { - Import2<SpeciesRow> importer = - Import2.newImport(csvModel, reader); + Import<SpeciesRow> importer = Import.newImport(csvModel, reader); try { @@ -259,28 +243,16 @@ BinderFactory.newBinder(SpeciesRow.class, SpeciesProtocol.class); - for (ImportRow<SpeciesRow> row : importer) { + for (SpeciesRow bean : importer) { - if (!row.isValid()) { + Species species = bean.getSpecies(); + String id = species.getId(); - //TODO deal with line error - if (log.isErrorEnabled()) { - log.error("there is some error on line " + row.getLineNumber() + ":\n" + row.getErrors()); - } - } else { + SpeciesProtocol sp = new SpeciesProtocol(); + binder.copy(bean, sp); + sp.setId(id); - // treat row - SpeciesRow bean = row.getBean(); - - Species species = bean.getSpecies(); - String id = species.getId(); - - SpeciesProtocol sp = new SpeciesProtocol(); - binder.copy(bean, sp); - sp.setId(id); - - ids.put(id, sp); - } + ids.put(id, sp); } importer.close(); } finally { @@ -298,7 +270,7 @@ } public void exportProtocolSpecies(File file, - TuttiProtocol protocol, + List<SpeciesProtocol> protocol, Map<String, Caracteristic> caracteristicMap, Map<String, Species> speciesMap) throws Exception { if (log.isInfoEnabled()) { @@ -307,8 +279,8 @@ List<SpeciesRow> rows = Lists.newArrayList(); - if (!protocol.isSpeciesEmpty()) { - rows = Lists.transform(protocol.getSpecies(), new SpeciesProtocolToSpeciesRowFunction( + if (CollectionUtils.isNotEmpty(protocol)) { + rows = Lists.transform(protocol, new SpeciesProtocolToSpeciesRowFunction( caracteristicMap, speciesMap)); } @@ -389,7 +361,8 @@ Map<String, Species> speciesMap) { this.speciesMap = speciesMap; this.caracteristicMap = caracteristicMap; - this.binder = BinderFactory.newBinder(SpeciesProtocol.class, SpeciesRow.class); + this.binder = BinderFactory.newBinder(SpeciesProtocol.class, + SpeciesRow.class); } @Override @@ -401,7 +374,7 @@ String pmfmId = input.getLengthStepPmfmId(); if (pmfmId != null) { Caracteristic caracteristic = caracteristicMap.get(pmfmId); - result.setLengthClass(caracteristic); + result.setLengthStep(caracteristic); } result.setSpecies(species); return result; Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportServiceTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportServiceTest.java 2013-02-03 22:03:03 UTC (rev 314) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/TuttiProtocolImportExportServiceTest.java 2013-02-04 00:36:29 UTC (rev 315) @@ -82,6 +82,7 @@ "species: \n" + "- !SpeciesProtocol\n" + " calcifySampleEnabled: true\n" + + " cruiseCode: cruiseCode1\n" + " lengthStepPmfmId: 1394\n" + " maturityEnabled: true\n" + " sexEnabled: true\n" + @@ -115,9 +116,9 @@ "5;;parameterName5;matrixName5;fractionName5;methodName5;"; public static final String PROTOCOL_SPECIES_FILE_CONTENT = - "id;lengthClass;sizeEnabled;sexEnabled;maturityEnabled;ageEnabled;weightEnabled;countIfNoFrequencyEnabled;calcifySampleEnabled\n" + - "1;1;Y;Y;Y;Y;Y;Y;Y;\n" + - "2;;N;Y;N;Y;Y;Y;Y;"; + "id;cruiseCode;lengthStep;lengthStepParameterName;lengthStepMatrixName;lengthStepFractionName;lengthStepMethodName;sizeEnabled;sexEnabled;maturityEnabled;ageEnabled;weightEnabled;countIfNoFrequencyEnabled;calcifySampleEnabled\n" + + "1;cruiseCode1;2;parameterName2;matrixName2;fractionName2;methodName2;Y;Y;Y;Y;Y;Y;Y;\n" + + "2;;;;;;;N;Y;N;Y;Y;Y;Y;"; @Before public void setUp() throws Exception { @@ -154,6 +155,7 @@ protocol.setSpecies(Lists.<SpeciesProtocol>newArrayList()); SpeciesProtocol sp1 = new SpeciesProtocol(); sp1.setSpeciesId("11242"); + sp1.setCruiseCode("cruiseCode1"); sp1.setLengthStepPmfmId("1394"); sp1.setCalcifySampleEnabled(true); sp1.setMaturityEnabled(true); @@ -204,6 +206,7 @@ SpeciesProtocol sp1 = protocol.getSpecies().get(0); Assert.assertNotNull(sp1); Assert.assertEquals("11242", sp1.getSpeciesId()); + Assert.assertEquals("cruiseCode1", sp1.getCruiseCode()); Assert.assertEquals("1394", sp1.getLengthStepPmfmId()); Assert.assertFalse(sp1.isAgeEnabled()); Assert.assertTrue(sp1.isCalcifySampleEnabled()); @@ -315,6 +318,32 @@ speciesMap); Assert.assertEquals(2, protocol.sizeSpecies()); + + SpeciesProtocol sp1 = protocol.getSpecies().get(0); + Assert.assertNotNull(sp1); + Assert.assertEquals("1", sp1.getSpeciesId()); + Assert.assertEquals("cruiseCode1", sp1.getCruiseCode()); + Assert.assertEquals("2", sp1.getLengthStepPmfmId()); + Assert.assertTrue(sp1.isAgeEnabled()); + Assert.assertTrue(sp1.isCalcifySampleEnabled()); + Assert.assertTrue(sp1.isCountIfNoFrequencyEnabled()); + Assert.assertTrue(sp1.isMaturityEnabled()); + Assert.assertTrue(sp1.isSexEnabled()); + Assert.assertTrue(sp1.isSizeEnabled()); + Assert.assertTrue(sp1.isWeightEnabled()); + + SpeciesProtocol sp2 = protocol.getSpecies().get(1); + Assert.assertNotNull(sp2); + Assert.assertEquals("2", sp2.getSpeciesId()); + Assert.assertNull(sp2.getCruiseCode()); + Assert.assertNull(sp2.getLengthStepPmfmId()); + Assert.assertTrue(sp2.isAgeEnabled()); + Assert.assertTrue(sp2.isCalcifySampleEnabled()); + Assert.assertTrue(sp2.isCountIfNoFrequencyEnabled()); + Assert.assertFalse(sp2.isMaturityEnabled()); + Assert.assertTrue(sp2.isSexEnabled()); + Assert.assertFalse(sp2.isSizeEnabled()); + Assert.assertTrue(sp2.isWeightEnabled()); } @Test @@ -331,6 +360,7 @@ SpeciesProtocol sp1 = new SpeciesProtocol(); sp1.setSpeciesId("1"); + sp1.setCruiseCode("cruiseCode1"); sp1.setAgeEnabled(true); sp1.setSizeEnabled(true); sp1.setMaturityEnabled(true); @@ -338,7 +368,7 @@ sp1.setWeightEnabled(true); sp1.setCountIfNoFrequencyEnabled(true); sp1.setCalcifySampleEnabled(true); - sp1.setLengthStepPmfmId("1"); + sp1.setLengthStepPmfmId("2"); protocol.addSpecies(sp1); @@ -357,7 +387,7 @@ Assert.assertFalse(file.exists()); service.exportProtocolSpecies(file, - protocol, + protocol.getSpecies(), createCaracteristics(), speciesMap);