This is an automated email from the git hooks/post-receive script. New commit to branch feature/8170 in repository echobase. See https://gitlab.nuiton.org/codelutin/echobase.git commit 30740d94ecf9e2080e433c36d28c767b359aeef6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Apr 1 23:24:36 2016 +0200 Import Catches total sample works --- .../echobase/entities/data/SampleDatas.java | 19 +++++ .../VoyageCatchesTotalSampleImportAction.java | 91 +++++++++++++++++++++- .../csv/TotalSampleImportExportModel.java | 4 +- .../importdata/csv/TotalSampleImportRow.java | 25 +++++- ...oyageCatchesImportServiceOnlyTotalSampleIT.java | 17 ++-- 5 files changed, 138 insertions(+), 18 deletions(-) diff --git a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/SampleDatas.java b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/SampleDatas.java new file mode 100644 index 0000000..d15d721 --- /dev/null +++ b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/SampleDatas.java @@ -0,0 +1,19 @@ +package fr.ifremer.echobase.entities.data; + +import com.google.common.base.Function; +import fr.ifremer.echobase.entities.references.SampleDataType; + +/** + * Created on 01/04/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class SampleDatas { + + public static final Function<SampleData, SampleDataType> TO_SAMPLE_DATA_TYPE = new Function<SampleData, SampleDataType>() { + @Override + public SampleDataType apply(SampleData input) { + return input.getSampleDataType(); + } + }; +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCatchesTotalSampleImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCatchesTotalSampleImportAction.java index 75b7801..ba2ebc2 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCatchesTotalSampleImportAction.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCatchesTotalSampleImportAction.java @@ -1,7 +1,12 @@ package fr.ifremer.echobase.services.service.importdata.actions; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; 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.data.SampleDatas; import fr.ifremer.echobase.entities.references.SampleDataType; import fr.ifremer.echobase.entities.references.SampleType; import fr.ifremer.echobase.entities.references.SizeCategories; @@ -19,6 +24,11 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Import; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.TreeMap; + /** * Created on 25/03/16. * @@ -44,6 +54,9 @@ public class VoyageCatchesTotalSampleImportAction extends VoyageCatchesImportDat return TotalSampleImportExportModel.forExport(importDataContext); } + private final Map<String, String> sampleIdToOperationId = new TreeMap<>(); + private final Map<String, String> sampleIdToSortedSampleId = new TreeMap<>(); + @Override protected void performImport(VoyageCatchesImportDataContext importDataContext, InputFile inputFile, ImportDataFileResult result) { @@ -51,6 +64,8 @@ public class VoyageCatchesTotalSampleImportAction extends VoyageCatchesImportDat log.info("Starts import of totalSample from file " + inputFile.getFileName()); } + sampleIdToOperationId.clear(); + SpeciesCategoryCache speciesCategoryCache = importDataContext.getSpeciesCategoryCache(); SampleType sampleTypeTotal = importDataContext.getSampleTypeTotal(); @@ -96,13 +111,13 @@ public class VoyageCatchesTotalSampleImportAction extends VoyageCatchesImportDat } - // must create it sample = row.getSample(); sample.setSpeciesCategory(category); sample.setSampleType(sampleType); sample = addSample(operation, sample, result); + addProcessedRow(result, row); // create datas @@ -129,8 +144,14 @@ public class VoyageCatchesTotalSampleImportAction extends VoyageCatchesImportDat createdSortedSample.setSampleWeight(row.getSortedWeight()); // create sorted sample - createdSortedSample = addSample(operation, createdSortedSample, result); + Sample sortedSample = addSample(operation, createdSortedSample, result); + + // add to sample ids cache (need to compte imported export later) + sampleIdToOperationId.put(sample.getTopiaId(), operation.getTopiaId()); + sampleIdToSortedSampleId.put(sample.getTopiaId(), sortedSample.getTopiaId()); + } + } } @@ -138,7 +159,71 @@ public class VoyageCatchesTotalSampleImportAction extends VoyageCatchesImportDat @Override protected void computeImportedExport(VoyageCatchesImportDataContext importDataContext, ImportDataFileResult result) { - // TODO + SampleDataType sampleDataTypeMeanLength = importDataContext.getSampleDataTypeMeanLength(); + SampleDataType sampleDataTypeMeanWeight = importDataContext.getSampleDataTypeMeanWeight(); + SampleDataType sampleDataTypeNoPerKg = importDataContext.getSampleDataTypeNoPerKg(); + + LinkedHashSet<String> sampleIds = filterIds(Sample.class, result.getIds()); + + Collection<String> sortedSampleIds = sampleIdToSortedSampleId.values(); + for (String sampleId : sampleIds) { + + if (sortedSampleIds.contains(sampleId)) { + + // skip sorted sample + continue; + } + + if (log.isInfoEnabled()) { + log.info("Adding sample: " + sampleId + " to imported export."); + } + + String operationId = sampleIdToOperationId.get(sampleId); + Preconditions.checkNotNull(operationId); + + Operation operation = persistenceService.getOperation(operationId); + Preconditions.checkNotNull(operation); + + Sample sample = persistenceService.getSample(sampleId); + Preconditions.checkNotNull(sample); + + String sortedSampleId = sampleIdToSortedSampleId.get(sampleId); + Preconditions.checkNotNull(sortedSampleId); + + Sample sortedSample = persistenceService.getSample(sortedSampleId); + Preconditions.checkNotNull(sortedSample); + + TotalSampleImportRow importedRow = TotalSampleImportRow.of(operation, sample, sortedSample); + + if (sample.isSampleDataNotEmpty()) { + + Collection<SampleData> sampleData = sample.getSampleData(); + ImmutableMap<SampleDataType, SampleData> sampleDataByType = Maps.uniqueIndex(sampleData, SampleDatas.TO_SAMPLE_DATA_TYPE); + + { + SampleData sampleData1 = sampleDataByType.get(sampleDataTypeMeanLength); + if (sampleData1 != null) { + importedRow.setMeanLength(sampleData1.getDataValue()); + } + } + { + SampleData sampleData1 = sampleDataByType.get(sampleDataTypeMeanWeight); + if (sampleData1 != null) { + importedRow.setMeanWeight(sampleData1.getDataValue()); + } + } + { + SampleData sampleData1 = sampleDataByType.get(sampleDataTypeNoPerKg); + if (sampleData1 != null) { + importedRow.setNoPerKg(sampleData1.getDataValue()); + } + } + } + + addImportedRow(result, importedRow); + + } + } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TotalSampleImportExportModel.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TotalSampleImportExportModel.java index 8986f8e..79932fe 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TotalSampleImportExportModel.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TotalSampleImportExportModel.java @@ -58,8 +58,8 @@ public class TotalSampleImportExportModel extends EchoBaseImportExportModelSuppo public static TotalSampleImportExportModel forExport(VoyageCatchesImportDataContext importDataContext) { TotalSampleImportExportModel model = new TotalSampleImportExportModel(importDataContext.getCsvSeparator()); - model.newColumnForExport(EchoBaseCsvUtil.OPERATION_ID, EchoBaseCsvUtil.OPERATION_FORMATTER); - model.newColumnForExport(Species.PROPERTY_BARACOUDA_CODE, EchoBaseCsvUtil.SPECIES_FORMATTER); + model.newColumnForExport(EchoBaseCsvUtil.OPERATION_ID, TotalSampleImportRow.PROPERTY_OPERATION, EchoBaseCsvUtil.OPERATION_FORMATTER); + model.newColumnForExport(Species.PROPERTY_BARACOUDA_CODE,TotalSampleImportRow.PROPERTY_SPECIES, EchoBaseCsvUtil.SPECIES_FORMATTER); model.newColumnForExport(TotalSampleImportRow.PROPERTY_SIZE_CATEGORY, EchoBaseCsvUtil.SIZE_CATEGORY_FORMATTER); model.newColumnForExport(Sample.PROPERTY_SAMPLE_WEIGHT, EchoBaseCsvUtil.PRIMITIVE_FLOAT); model.newColumnForExport(Sample.PROPERTY_NUMBER_SAMPLED, EchoBaseCsvUtil.NA_TO_INTEGER_PARSER_FORMATTER); diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TotalSampleImportRow.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TotalSampleImportRow.java index 1ad6dea..5bed089 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TotalSampleImportRow.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TotalSampleImportRow.java @@ -40,8 +40,6 @@ public class TotalSampleImportRow { public static final String PROPERTY_SIZE_CATEGORY = "sizeCategory"; - public static final String PROPERTY_SAMPLE = "sample"; - public static final String PROPERTY_MEAN_LENGTH = "meanLength"; public static final String PROPERTY_MEAN_WEIGHT = "meanWeight"; @@ -59,7 +57,11 @@ public class TotalSampleImportRow { protected SizeCategory sizeCategory; public TotalSampleImportRow() { - sample = new SampleImpl(); + this(new SampleImpl()); + } + + public TotalSampleImportRow(Sample sample) { + this.sample = sample; } public Sample getSample() { @@ -90,10 +92,18 @@ public class TotalSampleImportRow { this.sizeCategory = sizeCategory; } + public Integer getNumberSampled() { + return sample.getNumberSampled(); + } + public void setNumberSampled(Integer numberSampled) { sample.setNumberSampled(numberSampled); } + public Float getSampleWeight() { + return sample.getSampleWeight(); + } + public void setSampleWeight(Float sampleWeight) { sample.setSampleWeight(sampleWeight); } @@ -129,4 +139,13 @@ public class TotalSampleImportRow { public void setSortedWeight(float sortedWeight) { this.sortedWeight = sortedWeight; } + + public static TotalSampleImportRow of(Operation operation, Sample sample, Sample sortedSample) { + TotalSampleImportRow row = new TotalSampleImportRow(sample); + row.setOperation(operation); + row.setSpecies(sample.getSpeciesCategory().getSpecies()); + row.setSizeCategory(sample.getSpeciesCategory().getSizeCategory()); + row.setSortedWeight(sortedSample.getSampleWeight()); + return row; + } } diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageCatchesImportServiceOnlyTotalSampleIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageCatchesImportServiceOnlyTotalSampleIT.java index dac2d50..302be2d 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageCatchesImportServiceOnlyTotalSampleIT.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageCatchesImportServiceOnlyTotalSampleIT.java @@ -54,18 +54,15 @@ public class VoyageCatchesImportServiceOnlyTotalSampleIT extends VoyageCatchesIm @Override protected void assertAfertImport(ImportDataResult<VoyageCatchesImportConfiguration> result) throws IOException { + + ImportDataFileResult importDataFileResult = Iterables.get(result.getImportResults(), 0); - { - ImportDataFileResult importDataFileResult = Iterables.get(result.getImportResults(), 0); - - int nbSamples = fixtures.NB_SAMPLE_TOTAL(); - int nbSampleData = fixtures.NB_SAMPLE_DATA_TOTAL(); - - assertCsvImportResultPerEntity(importDataFileResult, Sample.class, nbSamples, 0, nbSamples); - assertCsvImportResultPerEntity(importDataFileResult, SampleData.class, nbSampleData, 0, nbSampleData); - assertCsvImportResult0(importDataFileResult, nbSamples); - } + int nbSamples = fixtures.NB_SAMPLE_TOTAL(); + int nbSampleData = fixtures.NB_SAMPLE_DATA_TOTAL(); + assertCsvImportResultPerEntity(importDataFileResult, Sample.class, nbSamples, 0, nbSamples); + assertCsvImportResultPerEntity(importDataFileResult, SampleData.class, nbSampleData, 0, nbSampleData); + assertCsvImportResult0(importDataFileResult, nbSamples); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.