This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository echobase. See https://gitlab.nuiton.org/codelutin/echobase.git commit 15ee4d79238dbddae776c0481e2e01ceed415026 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Apr 29 13:07:03 2016 +0200 Enregistrement d'un sampleData avec le numéro de spéciment lors d'un import de données biométriques (See #8295) --- .../entities/references/SampleDataTypeImpl.java | 2 ++ .../services/service/UserDbPersistenceService.java | 20 ++++++++----- .../VoyageCatchesBiometrySampleImportAction.java | 34 +++++++++++++++------- .../contexts/VoyageCatchesImportDataContext.java | 14 +++++++++ .../echobase/services/EchoBaseServiceFixtures.java | 2 +- 5 files changed, 54 insertions(+), 18 deletions(-) diff --git a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/references/SampleDataTypeImpl.java b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/references/SampleDataTypeImpl.java index 0a5e8ef..b1020bd 100644 --- a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/references/SampleDataTypeImpl.java +++ b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/references/SampleDataTypeImpl.java @@ -31,6 +31,8 @@ public class SampleDataTypeImpl extends SampleDataTypeAbstract { public static final String NO_PER_KG = "NoPerKg"; + public static final String SPECIMEN_INDEX = "specimenIndex"; + public static final String WEIGHT_AT_LENGTHKG = "WeightAtLengthkg"; public static final String L_TCM_1 = "LTcm1"; diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java index e76de7a..0161d7a 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java @@ -774,19 +774,19 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { //--- SampleData ---------------------------------------------------------// //------------------------------------------------------------------------// - public SampleData createSampleData(SampleDataType sampleDataType, - String label, - float value) { + public SampleData getSampleData(String sampleDataId) { + return persistenceContext.getSampleDataDao().forTopiaIdEquals(sampleDataId).findUnique(); + } + + public SampleData createSampleData(SampleDataType sampleDataType, String label, float value) { return persistenceContext.getSampleDataDao().create( SampleData.PROPERTY_SAMPLE_DATA_TYPE, sampleDataType, SampleData.PROPERTY_DATA_LABEL, label, - SampleData.PROPERTY_DATA_VALUE, value - ); + SampleData.PROPERTY_DATA_VALUE, value); } public SampleData createSampleData(SampleData sample) { - return persistenceContext.getSampleDataDao().create( - sample); + return persistenceContext.getSampleDataDao().create(sample); } //------------------------------------------------------------------------// @@ -797,6 +797,12 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { return persistenceContext.getSampleDataTypeDao().forNameEquals(name).findUnique(); } + public SampleDataType createSampleDataType(String sampleDataTypeName) { + return persistenceContext.getSampleDataTypeDao().create( + SampleDataType.PROPERTY_NAME, sampleDataTypeName); + } + + //------------------------------------------------------------------------// //--- SizeCategory -------------------------------------------------------// //------------------------------------------------------------------------// diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCatchesBiometrySampleImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCatchesBiometrySampleImportAction.java index d310fe5..ebb2c3d 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCatchesBiometrySampleImportAction.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCatchesBiometrySampleImportAction.java @@ -6,6 +6,7 @@ import fr.ifremer.echobase.entities.ImportFileId; import fr.ifremer.echobase.entities.data.Operation; import fr.ifremer.echobase.entities.data.Sample; import fr.ifremer.echobase.entities.data.SampleData; +import fr.ifremer.echobase.entities.references.SampleDataType; import fr.ifremer.echobase.entities.references.SampleType; import fr.ifremer.echobase.entities.references.Species; import fr.ifremer.echobase.entities.references.SpeciesCategory; @@ -35,7 +36,6 @@ public class VoyageCatchesBiometrySampleImportAction extends VoyageCatchesImport private static final Log log = LogFactory.getLog(VoyageCatchesBiometrySampleImportAction.class); private final Map<String, String> sampleIdToOperationId = new TreeMap<>(); private final Map<String, String> sampleDataIdToSampleId = new TreeMap<>(); - private final Map<String, Integer> sampleIdToNumFish = new TreeMap<>(); public VoyageCatchesBiometrySampleImportAction(VoyageCatchesImportDataContext importDataContext) { super(importDataContext, importDataContext.getConfiguration().getBiometrySampleFile()); @@ -58,6 +58,7 @@ public class VoyageCatchesBiometrySampleImportAction extends VoyageCatchesImport log.info("Starts import of subSample from file " + inputFile.getFileName()); } + SampleDataType sampleDataTypeFishIndex = importDataContext.getSampleDataTypeSpecimenIndex(); SampleType sampleTypeIndividual = importDataContext.getSampleTypeIndividualType(); Collection<Operation> operationWithTotalOrUnsortedSample = importDataContext.getVoyageOperationsWithTotalOrUnsortedSample(); SpeciesCategoryCache speciesCategoryCache = importDataContext.getSpeciesCategoryCache(); @@ -103,11 +104,13 @@ public class VoyageCatchesBiometrySampleImportAction extends VoyageCatchesImport // add to sample ids cache (need to compute imported export later) sampleIdToOperationId.put(sample.getTopiaId(), operation.getTopiaId()); - sampleIdToNumFish.put(sample.getTopiaId(), numFish); - SampleData sampleData = row.getSampleData(); + SampleData sampleDataFishIndex = persistenceService.createSampleData(sampleDataTypeFishIndex, null, (float) numFish); + sample.addSampleData(sampleDataFishIndex); + addId(result, EchoBaseUserEntityEnum.SampleData, sampleDataFishIndex, rowNumber); - SampleData sampleDataCreated = persistenceService.createSampleData(sampleData); + SampleData sampleData = row.getSampleData(); + SampleData sampleDataCreated = persistenceService.createSampleData(row.getSampleData()); sample.addSampleData(sampleDataCreated); addId(result, EchoBaseUserEntityEnum.SampleData, sampleDataCreated, rowNumber); @@ -122,32 +125,43 @@ public class VoyageCatchesBiometrySampleImportAction extends VoyageCatchesImport @Override protected void computeImportedExport(VoyageCatchesImportDataContext importDataContext, ImportDataFileResult result) { + SampleDataType sampleDataTypeFishIndex = importDataContext.getSampleDataTypeSpecimenIndex(); + + SampleData sampleDataFishIndex = null; + for (ImportFileId importFileId : filterIds(SampleData.class, result)) { String sampleDataId = importFileId.getEntityId(); + SampleData sampleData = persistenceService.getSampleData(sampleDataId); + if (sampleDataTypeFishIndex.equals(sampleData.getSampleDataType())) { + sampleDataFishIndex = sampleData; + continue; + } + String sampleId = sampleDataIdToSampleId.get(sampleDataId); Preconditions.checkNotNull(sampleId); String operationId = sampleIdToOperationId.get(sampleId); Preconditions.checkNotNull(operationId); - Integer numFish = sampleIdToNumFish.get(sampleId); - Preconditions.checkNotNull(numFish); - Operation operation = persistenceService.getOperation(operationId); Preconditions.checkNotNull(operation); Sample sample = persistenceService.getSample(sampleId); Preconditions.checkNotNull(sample); - SampleData sampleData = sample.getSampleDataByTopiaId(sampleDataId); - Preconditions.checkNotNull(sampleData); + Preconditions.checkNotNull(sample.getSampleDataByTopiaId(sampleDataId)); if (log.isInfoEnabled()) { log.info("Adding sampleData: " + sampleId + " to imported export."); } - VoyageCatchesBiometrySampleImportRow importedRow = VoyageCatchesBiometrySampleImportRow.of(operation, sample, sampleData, numFish); + Preconditions.checkNotNull(sampleDataFishIndex); + + Float numFishSampleDataValue = sampleDataFishIndex.getDataValue(); + Preconditions.checkNotNull(numFishSampleDataValue); + + VoyageCatchesBiometrySampleImportRow importedRow = VoyageCatchesBiometrySampleImportRow.of(operation, sample, sampleData, numFishSampleDataValue.intValue()); addImportedRow(result, importedRow); diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/VoyageCatchesImportDataContext.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/VoyageCatchesImportDataContext.java index c98e2f2..8db7cd7 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/VoyageCatchesImportDataContext.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/VoyageCatchesImportDataContext.java @@ -7,6 +7,7 @@ import fr.ifremer.echobase.entities.references.SampleType; import fr.ifremer.echobase.entities.references.SampleTypeImpl; import fr.ifremer.echobase.services.service.UserDbPersistenceService; import fr.ifremer.echobase.services.service.importdata.configurations.VoyageCatchesImportConfiguration; +import org.nuiton.topia.persistence.TopiaNoResultException; import java.util.Date; import java.util.Locale; @@ -26,6 +27,7 @@ public class VoyageCatchesImportDataContext extends VoyageImportDataContextSuppo private SampleDataType sampleDataTypeMeanLength; private SampleDataType sampleDataTypeMeanWeight; private SampleDataType sampleDataTypeNoPerKg; + private SampleDataType sampleDataTypeFishIndex; private SampleDataType sampleDataTypeNumberAtLength; private SampleDataType sampleDataTypeNumberAtLength05cm; private SampleDataType sampleDataTypeNumberAtLength1cm; @@ -112,6 +114,18 @@ public class VoyageCatchesImportDataContext extends VoyageImportDataContextSuppo return sampleDataTypeNoPerKg; } + public final SampleDataType getSampleDataTypeSpecimenIndex() { + if (sampleDataTypeFishIndex == null) { + try { + sampleDataTypeFishIndex = persistenceService.getSampleDataTypeByName(SampleDataTypeImpl.SPECIMEN_INDEX); + } catch (TopiaNoResultException e) { + // create on the fly... + sampleDataTypeFishIndex = persistenceService.createSampleDataType(SampleDataTypeImpl.SPECIMEN_INDEX); + } + } + return sampleDataTypeFishIndex; + } + public final SampleType getSampleTypeIndividualType() { if (sampleTypeIndividualType == null) { sampleTypeIndividualType = persistenceService.getSampleTypeByName(SampleTypeImpl.INDIVIDUAL_SAMPLE_TYPE); diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java index 09df0f6..edb522b 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java @@ -104,7 +104,7 @@ public class EchoBaseServiceFixtures { } public int NB_SAMPLE_DATA_BIOMETRY() { - return 43; + return 86; } public int NB_SAMPLE() { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.