branch develop updated (3318653 -> 51ecc0c)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository tutti. See http://git.codelutin.com/tutti.git from 3318653 fixes #6146: [CAPTURE] Pouvoir effectuer du melag sur un lot catégorisé (centrage des fenetres) new 7de70d3 reecriture de l'import pupitri pour mieux le gerer new fd9f6d3 les tests d'import pupitri refonctionnent new f742ba8 - ajout du commentaire de melag - ajout règle metier lors de l'import du melag pour changer en poids petit si aussi un poid G trouve new 51e9b2f amelioration du code d'import pupitri + ajout d'un test pour la fonctionnalite #6149 new 51ecc0c fixes #6147 fixes #6149 Merge branch 'feature/6147' into develop The 5 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 51ecc0c7ff9735f6b198e7d269ec9474d4bb20a0 Merge: 3318653 51e9b2f Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Nov 21 18:37:31 2014 +0100 fixes #6147 fixes #6149 Merge branch 'feature/6147' into develop commit 51e9b2fa3a92c5be9d6afd0ec61dd0de3eb0413f Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Nov 21 18:36:50 2014 +0100 amelioration du code d'import pupitri + ajout d'un test pour la fonctionnalite #6149 commit f742ba87cbe7e01af617911670dbfcb49d2d30bb Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Nov 21 18:00:02 2014 +0100 - ajout du commentaire de melag - ajout règle metier lors de l'import du melag pour changer en poids petit si aussi un poid G trouve commit fd9f6d3f6b2f90b6c68c213d779c8f2b1d96689a Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Nov 21 16:19:30 2014 +0100 les tests d'import pupitri refonctionnent commit 7de70d388fa024f52b8cd269ef3a3928a21cbb0a Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Nov 21 16:19:00 2014 +0100 reecriture de l'import pupitri pour mieux le gerer Summary of changes: .../pupitri/CarrouselImportRequestResult.java | 83 ++++++ .../tutti/service/pupitri/PupitriCatch.java | 27 +- .../tutti/service/pupitri/PupitriImportResult.java | 194 ++++++++------ .../service/pupitri/PupitriImportService.java | 298 ++++++++++++++------- .../resources/i18n/tutti-service_en_GB.properties | 1 - .../resources/i18n/tutti-service_fr_FR.properties | 4 +- .../pupitri/PupitriImportServiceAno3898Test.java | 58 +--- .../pupitri/PupitriImportServiceAno5032Test.java | 60 +---- .../pupitri/PupitriImportServiceAno5079Test.java | 57 +--- .../pupitri/PupitriImportServiceEvo5060Test.java | 56 +--- .../pupitri/PupitriImportServiceEvo5062Test.java | 56 +--- .../pupitri/PupitriImportServiceEvo6149.java | 153 +++++++++++ .../service/pupitri/PupitriImportServiceTest.java | 68 ++--- .../pupitri/PupitryImportServiceTestSupport.java | 53 ++++ .../src/test/resources/pupitri/evo-6149.car | 6 + .../pupitri/{evo-5060.tnk => evo-6149.tnk} | 0 ...o-5062.tuttiProtocol => evo-6149.tuttiProtocol} | 0 17 files changed, 705 insertions(+), 469 deletions(-) create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselImportRequestResult.java create mode 100644 tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo6149.java create mode 100644 tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitryImportServiceTestSupport.java create mode 100644 tutti-service/src/test/resources/pupitri/evo-6149.car copy tutti-service/src/test/resources/pupitri/{evo-5060.tnk => evo-6149.tnk} (100%) copy tutti-service/src/test/resources/pupitri/{evo-5062.tuttiProtocol => evo-6149.tuttiProtocol} (100%) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 7de70d388fa024f52b8cd269ef3a3928a21cbb0a Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Nov 21 16:19:00 2014 +0100 reecriture de l'import pupitri pour mieux le gerer --- .../tutti/service/pupitri/PupitriImportResult.java | 130 +++++----- .../service/pupitri/PupitriImportService.java | 270 ++++++++++++++------- .../resources/i18n/tutti-service_en_GB.properties | 1 - .../resources/i18n/tutti-service_fr_FR.properties | 1 - .../pupitri/PupitryImportServiceTestSupport.java | 18 ++ 5 files changed, 263 insertions(+), 157 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java index 04a2d4f..a88fe84 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java @@ -60,8 +60,6 @@ public class PupitriImportResult { int nbCarrousselImported; -// int nbCarrousselNotImported; - private Float sortedWeight; private Float rejectedWeight; @@ -153,16 +151,12 @@ public class PupitriImportResult { return melagSortedWeight == null ? null : melagSortedWeight.floatValue(); } - public Set<Species> getMelagSpecies() { - return melagSpecies; - } - public Set<String> getNotImportedSpeciesIds() { return ImmutableSet.copyOf(notImportedSpeciesIds); } /** - * @return {@code true} if there is a total melga weight defined (at least one species MELA-GNE found). + * @return {@code true} if there is a total melag weight defined (at least one species MELA-GNE found). * @since 3.4.2 */ public boolean isFoundTotalMelag() { @@ -185,18 +179,6 @@ public class PupitriImportResult { this.nbTrunkNotImported++; } - void incrementNbCarrousselImported() { - this.nbCarrousselImported++; - } - -// void incrementNbCarrousselNotImported() { -// this.nbCarrousselNotImported++; -// } - -// void setNbCarrousselNotImported(int nbCarrousselNotImported) { -// this.nbCarrousselNotImported = nbCarrousselNotImported; -// } - void setSortedWeight(Float sortedWeight) { this.sortedWeight = sortedWeight; } @@ -205,61 +187,17 @@ public class PupitriImportResult { this.rejectedWeight = rejectedWeight; } - void setCarrouselSortedWeight(Float carrouselSortedWeight) { - this.carrouselSortedWeight = carrouselSortedWeight; - } + void flushCarrouselResult(CarrouselImportRequestResult carrouselImportRequestResult) { - void setCatches(List<PupitriCatch> catches) { - for (PupitriCatch aCatch : catches) { - addCatch(aCatch); - } - } + // set carrousel sorted weight + this.carrouselSortedWeight = Weights.roundKiloGram(carrouselImportRequestResult.getCarrouselSortedWeight()); - void addNotImportedSpeciesId(String notImportedSpeciesId) { - notImportedSpeciesIds.add(notImportedSpeciesId); - } + // set nb carrousel imported batches + this.nbCarrousselImported = carrouselImportRequestResult.getNbCarrousselImported(); + this.notImportedSpeciesIds.addAll(carrouselImportRequestResult.getNotImportedSpeciesIds()); - void addCatch(PupitriCatch aCatch) { - - catches.add(aCatch); - - if (aCatch.isMelagMetaSpecies()) { - - if (log.isInfoEnabled()) { - log.info("Found a MELAG catch: " + aCatch); - } - // add weight to melag - addMelagTotalWeight(aCatch.getWeight(Signs.DEFAULT)); - - } - - if (aCatch.isForMelag()) { - - // add species as a melag one - melagSpecies.add(aCatch.getSpecies()); - - // add weight to sorted melag - addMelagSortedWeight(aCatch.getWeight(Signs.MELAG)); - - } - - } - - void addMelagTotalWeight(float weight) { - - if (melagTotalWeight == null) { - melagTotalWeight = new MutableFloat(); - } - melagTotalWeight.add(weight); - - } - - void addMelagSortedWeight(float weight) { - - if (melagSortedWeight == null) { - melagSortedWeight = new MutableFloat(); - } - melagSortedWeight.add(weight); + List<PupitriCatch> incomingCatches = carrouselImportRequestResult.getCatches(); + setCatches(incomingCatches); } @@ -310,4 +248,54 @@ public class PupitriImportResult { } } + + private void setCatches(List<PupitriCatch> catches) { + for (PupitriCatch aCatch : catches) { + addCatch(aCatch); + } + } + + private void addCatch(PupitriCatch aCatch) { + + catches.add(aCatch); + + if (aCatch.isMelagMetaSpecies()) { + + if (log.isInfoEnabled()) { + log.info("Found a MELAG catch: " + aCatch); + } + // add weight to melag + addMelagTotalWeight(aCatch.getWeight(Signs.DEFAULT)); + + } + + if (aCatch.isForMelag()) { + + // add species as a melag one + melagSpecies.add(aCatch.getSpecies()); + + // add weight to sorted melag + addMelagSortedWeight(aCatch.getWeight(Signs.MELAG)); + + } + + } + + private void addMelagTotalWeight(float weight) { + + if (melagTotalWeight == null) { + melagTotalWeight = new MutableFloat(); + } + melagTotalWeight.add(weight); + + } + + private void addMelagSortedWeight(float weight) { + + if (melagSortedWeight == null) { + melagSortedWeight = new MutableFloat(); + } + melagSortedWeight.add(weight); + + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java index 8d35c6d..117c4b2 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java @@ -24,7 +24,6 @@ package fr.ifremer.tutti.service.pupitri; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; -import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; @@ -51,7 +50,6 @@ import fr.ifremer.tutti.service.TuttiServiceContext; import fr.ifremer.tutti.util.Weights; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.mutable.MutableFloat; import org.apache.commons.logging.Log; @@ -173,8 +171,7 @@ public class PupitriImportService extends AbstractTuttiService { protected void importPupitriTrunk(PupitriImportResult result, File file, FishingOperation operation) { if (log.isInfoEnabled()) { - log.info("Will import pupitri operation [" + operation.toString() + - "] trunk from file: " + file); + log.info("Will import pupitri operation [" + operation.toString() + "] trunk from file: " + file); } // prepare import @@ -182,44 +179,36 @@ public class PupitriImportService extends AbstractTuttiService { float sortedWeight = 0f; float rejectedWeight = 0f; - Import<TrunkRow> importer = null; - TrunkRowModel csvModel = new TrunkRowModel(','); - File fileWithHeaders = createFileWithHeaders(csvModel, file); - Reader reader = ApplicationIOUtil.newReader( + try (Reader reader = ApplicationIOUtil.newReader( fileWithHeaders, - n("tutti.service.puttiri.carroussel.import.error")); - try { - importer = Import.newImport(csvModel, reader); - - for (TrunkRow bean : importer) { - if (bean.acceptOperation(operation)) { - switch (bean.getDirection()) { - case VAT: - sortedWeight += bean.getWeight(); - break; - - case VNT: - rejectedWeight += bean.getWeight(); + n("tutti.service.pupitri.import.trunk.error"))) { + try (Import<TrunkRow> importer = Import.newImport(csvModel, reader)) { + + for (TrunkRow bean : importer) { + if (bean.acceptOperation(operation)) { + switch (bean.getDirection()) { + case VAT: + sortedWeight += bean.getWeight(); + break; + + case VNT: + rejectedWeight += bean.getWeight(); + } + result.incrementNbTrunkImported(); + } else { + result.incrementNbTrunkNotImported(); } - result.incrementNbTrunkImported(); - } else { - result.incrementNbTrunkNotImported(); } } - importer.close(); - reader.close(); - } catch (Exception e) { throw new ApplicationTechnicalException( t("tutti.service.pupitri.import.trunk.error", operation.toString(), file), e); } finally { - IOUtils.closeQuietly(importer); - IOUtils.closeQuietly(reader); FileUtils.deleteQuietly(fileWithHeaders); } @@ -242,90 +231,204 @@ public class PupitriImportService extends AbstractTuttiService { "] carrousel from file: " + carrouselFile); } - // prepare import + // process import file + CarrouselImportRequestResult carrouselImportRequestResult = processCarrouselImportFile(carrouselFile, operation); + + // adjust result (deal with melag for example) + + // save it to global result + result.flushCarrouselResult(carrouselImportRequestResult); + + } + + protected CarrouselImportRequestResult processCarrouselImportFile(File carrouselFile, FishingOperation operation) { + + if (log.isInfoEnabled()) { + log.info("Will import pupitri operation [" + operation.toString() + "] carrousel from file: " + carrouselFile); + } // get the map of species by survey code or reftax code ListMultimap<String, Species> speciesBySurveyCode = ArrayListMultimap.create(); speciesBySurveyCode.putAll(Speciess.splitBySurveyCode(dataContext.getReferentSpeciesWithSurveyCode())); speciesBySurveyCode.putAll(Speciess.splitByRefTaxCode(dataContext.getReferentSpecies())); - // import the batches - - Float carrouselSortedWeight = 0f; - - List<PupitriCatch> catches = Lists.newArrayList(); -// Set<String> notFoundSpecies = Sets.newHashSet(); - - Import<CarrouselRow> importer = null; + CarrouselImportRequestResult result = new CarrouselImportRequestResult(speciesBySurveyCode); CarrouselRowModel carrouselCsvModel = new CarrouselRowModel(','); + File fileWithHeaders = createFileWithHeaders(carrouselCsvModel, carrouselFile); - File fileWithHeaders = createFileWithHeaders(carrouselCsvModel, - carrouselFile); - Reader reader = ApplicationIOUtil.newReader( + try (Reader reader = ApplicationIOUtil.newReader( fileWithHeaders, - n("tutti.service.puttiri.carroussel.import.error")); - try { - - importer = Import.newImport(carrouselCsvModel, reader); + n("tutti.service.pupitri.import.carrousel.error"))) { - for (CarrouselRow bean : importer) { - // is the bean from the current operation and rig ? - if (bean.acceptOperation(operation)) { + try (Import<CarrouselRow> importer = Import.newImport(carrouselCsvModel, reader)) { - result.incrementNbCarrousselImported(); + for (CarrouselRow bean : importer) { - String speciesId = bean.getSpeciesId(); + importCarrouselRow(result, operation, bean); - List<Species> speciesList = speciesBySurveyCode.get(speciesId); - Float beanWeight = bean.getWeight(); - if (beanWeight < 0f) { - beanWeight = 0f; - } - boolean sorted = bean.isSorted(); - if (sorted) { - carrouselSortedWeight += beanWeight; - } - - if (CollectionUtils.isNotEmpty(speciesList)) { - - Species species = speciesList.get(0); - PupitriCatch pupitriCatch = new PupitriCatch(species, sorted); - int catchIndex = catches.indexOf(pupitriCatch); - if (catchIndex >= 0) { - pupitriCatch = catches.get(catchIndex); - } else { - catches.add(pupitriCatch); - } - pupitriCatch.addToSign(bean.getSign(), beanWeight); - } else { - result.addNotImportedSpeciesId(speciesId); - } } } - importer.close(); - reader.close(); - } catch (Exception e) { DecoratorService service = getService(DecoratorService.class); throw new ApplicationTechnicalException( t("tutti.service.pupitri.import.carrousel.error", carrouselFile, service.getDecorator(operation).toString(operation)), e); } finally { - IOUtils.closeQuietly(importer); - IOUtils.closeQuietly(reader); + FileUtils.deleteQuietly(fileWithHeaders); } -// result.setNbCarrousselNotImported(notFoundSpecies.size()); - result.setCarrouselSortedWeight(Weights.roundKiloGram(carrouselSortedWeight)); - result.setCatches(catches); + return result; + + } + + protected void importCarrouselRow(CarrouselImportRequestResult result, FishingOperation operation, CarrouselRow bean) { + + if (!bean.acceptOperation(operation)) { + + // ce lot n'est pas sur la bonne operation + return; + + } + + // le lot est sur la bonne operation + result.incrementNbCarrousselImported(); + + // poids du lot + Float beanWeight = bean.getWeight(); + if (beanWeight < 0f) { + + //FIXME Savoir pourquoi cela doit arriver ? + beanWeight = 0f; + + } + + boolean sorted = bean.isSorted(); + if (sorted) { + + // ajout au total des poids trie du carrousel + // meme si ensuite l'espèce peut-être rejeté + result.addCarrouselSortedWeight(beanWeight); + + } + + String speciesId = bean.getSpeciesId(); + List<Species> speciesList = result.getSpecies(speciesId); + if (CollectionUtils.isEmpty(speciesList)) { + + // l'espece n'est pas reconnu + // pas de traitement sur ce lot + result.addNotImportedSpeciesId(speciesId); + + } else { + + // creation d'un nouveau lot (par rapport au tuple (espece, trie)) + // ou bien recuperation d'un lot deja existant + PupitriCatch pupitriCatch = result.getExistingCatchOrAdd(speciesList, sorted); + + // ajout du poids au signe donne dans le lot + pupitriCatch.addToSign(bean.getSign(), beanWeight); + + } + } +// protected void importPupitriCarrousel(PupitriImportResult result, +// File carrouselFile, +// FishingOperation operation) { +// +// if (log.isInfoEnabled()) { +// log.info("Will import pupitri operation [" + operation.toString() + +// "] carrousel from file: " + carrouselFile); +// } +// +// // prepare import +// +// // get the map of species by survey code or reftax code +// ListMultimap<String, Species> speciesBySurveyCode = ArrayListMultimap.create(); +// speciesBySurveyCode.putAll(Speciess.splitBySurveyCode(dataContext.getReferentSpeciesWithSurveyCode())); +// speciesBySurveyCode.putAll(Speciess.splitByRefTaxCode(dataContext.getReferentSpecies())); +// +// // import the batches +// +// Float carrouselSortedWeight = 0f; +// +// List<PupitriCatch> catches = Lists.newArrayList(); +//// Set<String> notFoundSpecies = Sets.newHashSet(); +// +// Import<CarrouselRow> importer = null; +// +// CarrouselRowModel carrouselCsvModel = new CarrouselRowModel(','); +// +// File fileWithHeaders = createFileWithHeaders(carrouselCsvModel, +// carrouselFile); +// Reader reader = ApplicationIOUtil.newReader( +// fileWithHeaders, +// n("tutti.service.pupitri.carroussel.import.error")); +// try { +// +// importer = Import.newImport(carrouselCsvModel, reader); +// +// for (CarrouselRow bean : importer) { +// // is the bean from the current operation and rig ? +// if (bean.acceptOperation(operation)) { +// +// result.incrementNbCarrousselImported(); +// +// String speciesId = bean.getSpeciesId(); +// +// List<Species> speciesList = speciesBySurveyCode.get(speciesId); +// Float beanWeight = bean.getWeight(); +// if (beanWeight < 0f) { +// beanWeight = 0f; +// } +// boolean sorted = bean.isSorted(); +// if (sorted) { +// carrouselSortedWeight += beanWeight; +// } +// +// if (CollectionUtils.isNotEmpty(speciesList)) { +// +// Species species = speciesList.get(0); +// PupitriCatch pupitriCatch = new PupitriCatch(species, sorted); +// int catchIndex = catches.indexOf(pupitriCatch); +// if (catchIndex >= 0) { +// pupitriCatch = catches.get(catchIndex); +// } else { +// catches.add(pupitriCatch); +// } +// pupitriCatch.addToSign(bean.getSign(), beanWeight); +// } else { +// result.addNotImportedSpeciesId(speciesId); +// } +// } +// } +// +// importer.close(); +// reader.close(); +// +// } catch (Exception e) { +// DecoratorService service = getService(DecoratorService.class); +// throw new ApplicationTechnicalException( +// t("tutti.service.pupitri.import.carrousel.error", carrouselFile, service.getDecorator(operation).toString(operation)), e); +// +// } finally { +// IOUtils.closeQuietly(importer); +// IOUtils.closeQuietly(reader); +// FileUtils.deleteQuietly(fileWithHeaders); +// } +// +//// result.setNbCarrousselNotImported(notFoundSpecies.size()); +// result.setCarrouselSortedWeight(Weights.roundKiloGram(carrouselSortedWeight)); +// result.setCatches(catches); +// } + protected void savePupitriImportResult(PupitriImportResult result, FishingOperation operation, CatchBatch catchBatch) { + addFileAsAttachment(result.getTrunkFile(), catchBatch); addFileAsAttachment(result.getCarrousselFile(), catchBatch); @@ -352,8 +455,7 @@ public class PupitriImportService extends AbstractTuttiService { boolean splitSpecies = isSplitSpecies(pupitriCatch); - Map<Signs, MutableFloat> weightBySign = - pupitriCatch.getWeightBySign(); + Map<Signs, MutableFloat> weightBySign = pupitriCatch.getWeightBySign(); if (splitSpecies) { diff --git a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties index 2774bc4..d985a05 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties @@ -212,7 +212,6 @@ tutti.service.pupitri.export.species.error= tutti.service.pupitri.import.attachment.comment= tutti.service.pupitri.import.carrousel.error= tutti.service.pupitri.import.trunk.error= -tutti.service.puttiri.carroussel.import.error= tutti.service.referential.export.gear.error= tutti.service.referential.export.person.error= tutti.service.referential.export.species.error= diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 4a69a80..4d638cd 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -192,7 +192,6 @@ tutti.service.pupitri.export.species.error=Erreur lors de l'export des espèces tutti.service.pupitri.import.attachment.comment=Import Pupitri du %s tutti.service.pupitri.import.carrousel.error=Erreur lors de l'import du fichier de carrousel %2s pour le trait %1s tutti.service.pupitri.import.trunk.error=Erreur lors de l'import du fichier de trémie %2s pour le trait %1s -tutti.service.puttiri.carroussel.import.error= tutti.service.referential.export.gear.error=Erreur lors de l'export des engins dans le fichier %s tutti.service.referential.export.person.error=Erreur lors de l'export des personnes dans le fichier %s tutti.service.referential.export.species.error=Erreur lors de l'export des espèces dans le fichier %s diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitryImportServiceTestSupport.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitryImportServiceTestSupport.java new file mode 100644 index 0000000..8c67f06 --- /dev/null +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitryImportServiceTestSupport.java @@ -0,0 +1,18 @@ +package fr.ifremer.tutti.service.pupitri; + +/** + * Created on 11/21/14. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.10 + */ +public class PupitryImportServiceTestSupport { + + public static final String PROGRAM_ID = "CAM-CGFS"; + + public static final String CRUISE_ID = "100000"; + + public static final String OPERATION_1_ID = "100000"; + + public static final String OPERATION_2_ID = "100001"; +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit fd9f6d3f6b2f90b6c68c213d779c8f2b1d96689a Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Nov 21 16:19:30 2014 +0100 les tests d'import pupitri refonctionnent --- .../pupitri/CarrouselImportRequestResult.java | 83 ++++++++++++++++++++++ .../pupitri/PupitriImportServiceAno3898Test.java | 58 +++------------ .../pupitri/PupitriImportServiceAno5032Test.java | 60 +++------------- .../pupitri/PupitriImportServiceAno5079Test.java | 57 +++------------ .../pupitri/PupitriImportServiceEvo5060Test.java | 56 ++------------- .../pupitri/PupitriImportServiceEvo5062Test.java | 56 ++------------- .../service/pupitri/PupitriImportServiceTest.java | 68 +++++------------- .../pupitri/PupitryImportServiceTestSupport.java | 37 +++++++++- 8 files changed, 177 insertions(+), 298 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselImportRequestResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselImportRequestResult.java new file mode 100644 index 0000000..4adcbec --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselImportRequestResult.java @@ -0,0 +1,83 @@ +package fr.ifremer.tutti.service.pupitri; + +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.referential.Species; + +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +/** + * Created on 11/21/14. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.10 + */ +public class CarrouselImportRequestResult { + + private final ListMultimap<String, Species> speciesByCode; + + int nbCarrousselImported; + + float carrouselSortedWeight; + + private final Set<String> notImportedSpeciesIds; + + private final List<PupitriCatch> catches; + + public CarrouselImportRequestResult(ListMultimap<String, Species> speciesByCode) { + + this.speciesByCode = speciesByCode; + this.notImportedSpeciesIds = new LinkedHashSet<>(); + this.catches = Lists.newArrayList(); + } + + public void incrementNbCarrousselImported() { + nbCarrousselImported++; + } + + public void addCarrouselSortedWeight(Float beanWeight) { + carrouselSortedWeight += beanWeight; + } + + public List<Species> getSpecies(String speciesId) { + return speciesByCode.get(speciesId); + } + + public void addNotImportedSpeciesId(String speciesId) { + notImportedSpeciesIds.add(speciesId); + } + + public PupitriCatch getExistingCatchOrAdd(List<Species> speciesList, boolean sorted) { + + // on utilise la première espèce trouvée dans la liste des candidate + //FIXME Bien s'assurer que cela est ok + Species species = speciesList.get(0); + PupitriCatch pupitriCatch = new PupitriCatch(species, sorted); + int catchIndex = catches.indexOf(pupitriCatch); + if (catchIndex >= 0) { + pupitriCatch = catches.get(catchIndex); + } else { + catches.add(pupitriCatch); + } + return pupitriCatch; + + } + + public float getCarrouselSortedWeight() { + return carrouselSortedWeight; + } + + public int getNbCarrousselImported() { + return nbCarrousselImported; + } + + public Set<String> getNotImportedSpeciesIds() { + return notImportedSpeciesIds; + } + + public List<PupitriCatch> getCatches() { + return catches; + } +} diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno3898Test.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno3898Test.java index 2eb0b28..ae0d0aa 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno3898Test.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno3898Test.java @@ -29,65 +29,19 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.ServiceDbResource; -import fr.ifremer.tutti.service.TuttiServiceContext; import org.junit.Assert; -import org.junit.Before; -import org.junit.ClassRule; import org.junit.Test; import org.nuiton.decorator.Decorator; import java.io.File; import java.io.IOException; +import java.util.Set; /** * @author tchemit <chemit@codelutin.com> * @since 3.0-rc-2 */ -public class PupitriImportServiceAno3898Test { - - @ClassRule - public static final ServiceDbResource dbResource = - ServiceDbResource.writeDb("dbExport"); - - public static final String PROGRAM_ID = "CAM-TEST_ELEVATION"; - - public static final String CRUISE_ID = "100003"; - - public static final String OPERATION_1_ID = "100112"; - - public static final String OPERATION_2_ID = "100113"; - - public static final String OPERATION_3_ID = "100115"; - - protected PupitriImportService service; - - protected PersistenceService persistenceService; - - protected DecoratorService decoratorService; - - protected ServiceDbResource.DataContext dataContext; - - @Before - public void setUp() throws Exception { - - TuttiServiceContext serviceContext = dbResource.getServiceContext(); - - persistenceService = serviceContext.getService(PersistenceService.class); - - decoratorService = serviceContext.getService(DecoratorService.class); - - dbResource.openDataContext(); - - service = serviceContext.getService(PupitriImportService.class); - - dataContext = dbResource.loadContext(PROGRAM_ID, CRUISE_ID, 3, - OPERATION_2_ID, - OPERATION_1_ID, - OPERATION_3_ID); - } +public class PupitriImportServiceAno3898Test extends PupitryImportServiceTestSupport { @Test public void importPupitri() throws IOException { @@ -104,10 +58,16 @@ public class PupitriImportServiceAno3898Test { catchBatch.setFishingOperation(operation); BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), false); - Assert.assertEquals(3, rootSpeciesBatch.sizeChildren()); + Assert.assertEquals(0, rootSpeciesBatch.sizeChildren()); + PupitriImportResult pupitriImportResult = service.importPupitri(trunk, carroussel, operation, catchBatch); + Assert.assertTrue(pupitriImportResult.isFishingOperationFound()); int nbNotAdded = pupitriImportResult.getNbCarrousselNotImported(); Assert.assertEquals(0, nbNotAdded); + Set<String> notImportedSpeciesIds = pupitriImportResult.getNotImportedSpeciesIds(); + Assert.assertNotNull(notImportedSpeciesIds); + Assert.assertTrue(notImportedSpeciesIds.isEmpty()); + BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId(), false); Assert.assertEquals(31, rootSpeciesBatchAfter.sizeChildren()); diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno5032Test.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno5032Test.java index dc17050..8b197d3 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno5032Test.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno5032Test.java @@ -30,15 +30,9 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.ServiceDbResource; -import fr.ifremer.tutti.service.TuttiServiceContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; -import org.junit.Before; -import org.junit.ClassRule; import org.junit.Test; import org.nuiton.decorator.Decorator; @@ -50,52 +44,11 @@ import java.util.Set; * @author tchemit <chemit@codelutin.com> * @since 3.0-rc-2 */ -public class PupitriImportServiceAno5032Test { +public class PupitriImportServiceAno5032Test extends PupitryImportServiceTestSupport { /** Logger. */ private static final Log log = LogFactory.getLog(PupitriImportServiceAno5032Test.class); - @ClassRule - public static final ServiceDbResource dbResource = - ServiceDbResource.writeDb("dbExport"); - - public static final String PROGRAM_ID = "CAM-TEST_ELEVATION"; - - public static final String CRUISE_ID = "100003"; - - public static final String OPERATION_1_ID = "100112"; - - public static final String OPERATION_2_ID = "100113"; - - public static final String OPERATION_3_ID = "100115"; - - protected PupitriImportService service; - - protected PersistenceService persistenceService; - - protected DecoratorService decoratorService; - - protected ServiceDbResource.DataContext dataContext; - - @Before - public void setUp() throws Exception { - - TuttiServiceContext serviceContext = dbResource.getServiceContext(); - - persistenceService = serviceContext.getService(PersistenceService.class); - - decoratorService = serviceContext.getService(DecoratorService.class); - - dbResource.openDataContext(); - - service = serviceContext.getService(PupitriImportService.class); - - dataContext = dbResource.loadContext(PROGRAM_ID, CRUISE_ID, 3, - OPERATION_2_ID, - OPERATION_1_ID, - OPERATION_3_ID); - } - @Test public void importPupitri() throws IOException { @@ -111,10 +64,19 @@ public class PupitriImportServiceAno5032Test { catchBatch.setFishingOperation(operation); BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), false); - Assert.assertEquals(3, rootSpeciesBatch.sizeChildren()); + Assert.assertEquals(0, rootSpeciesBatch.sizeChildren()); + PupitriImportResult pupitriImportResult = service.importPupitri(trunk, carroussel, operation, catchBatch); + Assert.assertTrue(pupitriImportResult.isFishingOperationFound()); int nbNotAdded = pupitriImportResult.getNbCarrousselNotImported(); Assert.assertEquals(4, nbNotAdded); + Set<String> notImportedSpeciesIds = pupitriImportResult.getNotImportedSpeciesIds(); + Assert.assertNotNull(notImportedSpeciesIds); + Assert.assertTrue(notImportedSpeciesIds.contains("MERL-MNG")); + Assert.assertTrue(notImportedSpeciesIds.contains("ACANPEL")); + Assert.assertTrue(notImportedSpeciesIds.contains("ACAN-PAL")); + Assert.assertTrue(notImportedSpeciesIds.contains("ASRN-ATL")); + BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId(), false); Assert.assertEquals(4, rootSpeciesBatchAfter.sizeChildren()); diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno5079Test.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno5079Test.java index 4294b67..60b411c 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno5079Test.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno5079Test.java @@ -33,15 +33,9 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.SpeciesBean; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.ServiceDbResource; -import fr.ifremer.tutti.service.TuttiServiceContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; -import org.junit.Before; -import org.junit.ClassRule; import org.junit.Test; import org.nuiton.decorator.Decorator; @@ -54,52 +48,11 @@ import java.util.Set; * @author tchemit <chemit@codelutin.com> * @since 3.0-rc-2 */ -public class PupitriImportServiceAno5079Test { +public class PupitriImportServiceAno5079Test extends PupitryImportServiceTestSupport { /** Logger. */ private static final Log log = LogFactory.getLog(PupitriImportServiceAno5079Test.class); - @ClassRule - public static final ServiceDbResource dbResource = - ServiceDbResource.writeDb("dbExport"); - - public static final String PROGRAM_ID = "CAM-TEST_ELEVATION"; - - public static final String CRUISE_ID = "100003"; - - public static final String OPERATION_1_ID = "100112"; - - public static final String OPERATION_2_ID = "100113"; - - public static final String OPERATION_3_ID = "100115"; - - protected PupitriImportService service; - - protected PersistenceService persistenceService; - - protected DecoratorService decoratorService; - - protected ServiceDbResource.DataContext dataContext; - - @Before - public void setUp() throws Exception { - - TuttiServiceContext serviceContext = dbResource.getServiceContext(); - - persistenceService = serviceContext.getService(PersistenceService.class); - - decoratorService = serviceContext.getService(DecoratorService.class); - - dbResource.openDataContext(); - - service = serviceContext.getService(PupitriImportService.class); - - dataContext = dbResource.loadContext(PROGRAM_ID, CRUISE_ID, 3, - OPERATION_2_ID, - OPERATION_1_ID, - OPERATION_3_ID); - } - @Test public void importPupitri() throws IOException { @@ -121,10 +74,16 @@ public class PupitriImportServiceAno5079Test { catchBatch.setFishingOperation(operation); BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), false); - Assert.assertEquals(3, rootSpeciesBatch.sizeChildren()); + Assert.assertEquals(0, rootSpeciesBatch.sizeChildren()); + PupitriImportResult pupitriImportResult = service.importPupitri(trunk, carroussel, operation, catchBatch); + Assert.assertTrue(pupitriImportResult.isFishingOperationFound()); int nbNotAdded = pupitriImportResult.getNbCarrousselNotImported(); Assert.assertEquals(0, nbNotAdded); + Set<String> notImportedSpeciesIds = pupitriImportResult.getNotImportedSpeciesIds(); + Assert.assertNotNull(notImportedSpeciesIds); + Assert.assertTrue(notImportedSpeciesIds.isEmpty()); + BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId(), false); Assert.assertEquals(5, rootSpeciesBatchAfter.sizeChildren()); diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo5060Test.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo5060Test.java index 7cacb22..1f41c30 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo5060Test.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo5060Test.java @@ -30,15 +30,9 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.ServiceDbResource; -import fr.ifremer.tutti.service.TuttiServiceContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; -import org.junit.Before; -import org.junit.ClassRule; import org.junit.Test; import org.nuiton.decorator.Decorator; @@ -52,51 +46,10 @@ import java.util.Set; * @author Tony Chemit <chemit@codelutin.com> * @since 3.4.2 */ -public class PupitriImportServiceEvo5060Test { +public class PupitriImportServiceEvo5060Test extends PupitryImportServiceTestSupport { /** Logger. */ private static final Log log = LogFactory.getLog(PupitriImportServiceEvo5060Test.class); - - @ClassRule - public static final ServiceDbResource dbResource = - ServiceDbResource.writeDb("dbExport"); - - public static final String PROGRAM_ID = "CAM-TEST_ELEVATION"; - - public static final String CRUISE_ID = "100003"; - - public static final String OPERATION_1_ID = "100112"; - - public static final String OPERATION_2_ID = "100113"; - - public static final String OPERATION_3_ID = "100115"; - - protected PupitriImportService service; - - protected PersistenceService persistenceService; - - protected DecoratorService decoratorService; - - protected ServiceDbResource.DataContext dataContext; - - @Before - public void setUp() throws Exception { - - TuttiServiceContext serviceContext = dbResource.getServiceContext(); - - persistenceService = serviceContext.getService(PersistenceService.class); - - decoratorService = serviceContext.getService(DecoratorService.class); - - dbResource.openDataContext(); - - service = serviceContext.getService(PupitriImportService.class); - - dataContext = dbResource.loadContext(PROGRAM_ID, CRUISE_ID, 3, - OPERATION_2_ID, - OPERATION_1_ID, - OPERATION_3_ID); - } @Test public void importPupitri() throws IOException { @@ -113,11 +66,16 @@ public class PupitriImportServiceEvo5060Test { catchBatch.setFishingOperation(operation); BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), false); - Assert.assertEquals(3, rootSpeciesBatch.sizeChildren()); + Assert.assertEquals(0, rootSpeciesBatch.sizeChildren()); PupitriImportResult pupitriImportResult = service.importPupitri(trunk, carroussel, operation, catchBatch); + Assert.assertTrue(pupitriImportResult.isFishingOperationFound()); int nbNotAdded = pupitriImportResult.getNbCarrousselNotImported(); Assert.assertEquals(0, nbNotAdded); + Set<String> notImportedSpeciesIds = pupitriImportResult.getNotImportedSpeciesIds(); + Assert.assertNotNull(notImportedSpeciesIds); + Assert.assertTrue(notImportedSpeciesIds.isEmpty()); + BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId(), false); Assert.assertEquals(3, rootSpeciesBatchAfter.sizeChildren()); diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo5062Test.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo5062Test.java index 430a8ca..4f29abe 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo5062Test.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo5062Test.java @@ -30,15 +30,9 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.ServiceDbResource; -import fr.ifremer.tutti.service.TuttiServiceContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; -import org.junit.Before; -import org.junit.ClassRule; import org.junit.Test; import org.nuiton.decorator.Decorator; @@ -53,52 +47,11 @@ import java.util.Set; * @author Tony Chemit <chemit@codelutin.com> * @since 3.4.2 */ -public class PupitriImportServiceEvo5062Test { +public class PupitriImportServiceEvo5062Test extends PupitryImportServiceTestSupport { /** Logger. */ private static final Log log = LogFactory.getLog(PupitriImportServiceEvo5062Test.class); - @ClassRule - public static final ServiceDbResource dbResource = - ServiceDbResource.writeDb("dbExport"); - - public static final String PROGRAM_ID = "CAM-TEST_ELEVATION"; - - public static final String CRUISE_ID = "100003"; - - public static final String OPERATION_1_ID = "100112"; - - public static final String OPERATION_2_ID = "100113"; - - public static final String OPERATION_3_ID = "100115"; - - protected PupitriImportService service; - - protected PersistenceService persistenceService; - - protected DecoratorService decoratorService; - - protected ServiceDbResource.DataContext dataContext; - - @Before - public void setUp() throws Exception { - - TuttiServiceContext serviceContext = dbResource.getServiceContext(); - - persistenceService = serviceContext.getService(PersistenceService.class); - - decoratorService = serviceContext.getService(DecoratorService.class); - - dbResource.openDataContext(); - - service = serviceContext.getService(PupitriImportService.class); - - dataContext = dbResource.loadContext(PROGRAM_ID, CRUISE_ID, 3, - OPERATION_2_ID, - OPERATION_1_ID, - OPERATION_3_ID); - } - @Test public void importPupitri() throws IOException { @@ -114,11 +67,16 @@ public class PupitriImportServiceEvo5062Test { catchBatch.setFishingOperation(operation); BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), false); - Assert.assertEquals(3, rootSpeciesBatch.sizeChildren()); + Assert.assertEquals(0, rootSpeciesBatch.sizeChildren()); PupitriImportResult pupitriImportResult = service.importPupitri(trunk, carroussel, operation, catchBatch); + Assert.assertTrue(pupitriImportResult.isFishingOperationFound()); int nbNotAdded = pupitriImportResult.getNbCarrousselNotImported(); Assert.assertEquals(0, nbNotAdded); + Set<String> notImportedSpeciesIds = pupitriImportResult.getNotImportedSpeciesIds(); + Assert.assertNotNull(notImportedSpeciesIds); + Assert.assertTrue(notImportedSpeciesIds.isEmpty()); + BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId(), false); Assert.assertEquals(9, rootSpeciesBatchAfter.sizeChildren()); diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceTest.java index 98eb187..4f2feb6 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceTest.java @@ -27,65 +27,19 @@ import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.ServiceDbResource; -import fr.ifremer.tutti.service.TuttiServiceContext; import org.junit.Assert; -import org.junit.Before; -import org.junit.ClassRule; import org.junit.Test; import org.nuiton.decorator.Decorator; import java.io.File; import java.io.IOException; +import java.util.Set; /** * @author tchemit <chemit@codelutin.com> * @since 2.4 */ -public class PupitriImportServiceTest { - - @ClassRule - public static final ServiceDbResource dbResource = - ServiceDbResource.writeDb("dbExport"); - - public static final String PROGRAM_ID = "CAM-TEST_ELEVATION"; - - public static final String CRUISE_ID = "100003"; - - public static final String OPERATION_1_ID = "100112"; - - public static final String OPERATION_2_ID = "100113"; - - public static final String OPERATION_3_ID = "100115"; - - protected PupitriImportService service; - - protected PersistenceService persistenceService; - - protected DecoratorService decoratorService; - - protected ServiceDbResource.DataContext dataContext; - - @Before - public void setUp() throws Exception { - - TuttiServiceContext serviceContext = dbResource.getServiceContext(); - - persistenceService = serviceContext.getService(PersistenceService.class); - - decoratorService = serviceContext.getService(DecoratorService.class); - - dbResource.openDataContext(); - - service = serviceContext.getService(PupitriImportService.class); - - dataContext = dbResource.loadContext(PROGRAM_ID, CRUISE_ID, 3, - OPERATION_2_ID, - OPERATION_1_ID, - OPERATION_3_ID); - } +public class PupitriImportServiceTest extends PupitryImportServiceTestSupport { @Test public void importPupitri() throws IOException { @@ -94,12 +48,12 @@ public class PupitriImportServiceTest { File carroussel = dbResource.copyClassPathResource("pupitri/pupitri.car", "pupitri.car"); { - FishingOperation operation = dataContext.operations.get(0); + FishingOperation operation = dataContext.operations.get(1); CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operation.getId()); catchBatch.setFishingOperation(operation); BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), false); - Assert.assertEquals(3, rootSpeciesBatch.sizeChildren()); + Assert.assertEquals(0, rootSpeciesBatch.sizeChildren()); PupitriImportResult importResult = service.importPupitri(trunk, carroussel, operation, catchBatch); Assert.assertFalse(importResult.isFishingOperationFound()); @@ -107,15 +61,25 @@ public class PupitriImportServiceTest { Assert.assertEquals(0, importResult.getNbTrunkImported()); } { - FishingOperation operation = dataContext.operations.get(1); + FishingOperation operation = dataContext.operations.get(0); CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operation.getId()); catchBatch.setFishingOperation(operation); BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), false); - Assert.assertEquals(3, rootSpeciesBatch.sizeChildren()); + Assert.assertEquals(0, rootSpeciesBatch.sizeChildren()); + PupitriImportResult importResult = service.importPupitri(trunk, carroussel, operation, catchBatch); Assert.assertTrue(importResult.isFishingOperationFound()); Assert.assertEquals(6, importResult.getNbCarrousselNotImported()); + Set<String> notImportedSpeciesIds = importResult.getNotImportedSpeciesIds(); + Assert.assertNotNull(notImportedSpeciesIds); + Assert.assertTrue(notImportedSpeciesIds.contains("SCYLCAN")); + Assert.assertTrue(notImportedSpeciesIds.contains("BENTHOS")); + Assert.assertTrue(notImportedSpeciesIds.contains("MERLMNG")); + Assert.assertTrue(notImportedSpeciesIds.contains("DECHETS")); + Assert.assertTrue(notImportedSpeciesIds.contains("ECHIVIP")); + Assert.assertTrue(notImportedSpeciesIds.contains("PALASER")); + BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId(), false); Assert.assertEquals(18, rootSpeciesBatchAfter.sizeChildren()); diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitryImportServiceTestSupport.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitryImportServiceTestSupport.java index 8c67f06..3877a6f 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitryImportServiceTestSupport.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitryImportServiceTestSupport.java @@ -1,12 +1,19 @@ package fr.ifremer.tutti.service.pupitri; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.ServiceDbResource; +import fr.ifremer.tutti.service.TuttiServiceContext; +import org.junit.Before; +import org.junit.ClassRule; + /** * Created on 11/21/14. * * @author Tony Chemit - chemit@codelutin.com * @since 3.10 */ -public class PupitryImportServiceTestSupport { +public abstract class PupitryImportServiceTestSupport { public static final String PROGRAM_ID = "CAM-CGFS"; @@ -15,4 +22,32 @@ public class PupitryImportServiceTestSupport { public static final String OPERATION_1_ID = "100000"; public static final String OPERATION_2_ID = "100001"; + + @ClassRule + public static final ServiceDbResource dbResource = ServiceDbResource.writeDb("dbPupitri"); + + protected PupitriImportService service; + + protected PersistenceService persistenceService; + + protected DecoratorService decoratorService; + + protected ServiceDbResource.DataContext dataContext; + + @Before + public void setUp() throws Exception { + + TuttiServiceContext serviceContext = dbResource.getServiceContext(); + + persistenceService = serviceContext.getService(PersistenceService.class); + + decoratorService = serviceContext.getService(DecoratorService.class); + + dbResource.openDataContext(); + + service = serviceContext.getService(PupitriImportService.class); + + dataContext = dbResource.loadContext(PupitryImportServiceTestSupport.PROGRAM_ID, PupitryImportServiceTestSupport.CRUISE_ID, 2, PupitryImportServiceTestSupport.OPERATION_2_ID, PupitryImportServiceTestSupport.OPERATION_1_ID); + } + } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit f742ba87cbe7e01af617911670dbfcb49d2d30bb Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Nov 21 18:00:02 2014 +0100 - ajout du commentaire de melag - ajout règle metier lors de l'import du melag pour changer en poids petit si aussi un poid G trouve --- .../tutti/service/pupitri/PupitriCatch.java | 25 +++++- .../tutti/service/pupitri/PupitriImportResult.java | 90 ++++++++++++++++++---- .../service/pupitri/PupitriImportService.java | 36 ++++++--- .../resources/i18n/tutti-service_fr_FR.properties | 3 + 4 files changed, 124 insertions(+), 30 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriCatch.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriCatch.java index 10f4781..26238c2 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriCatch.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriCatch.java @@ -52,11 +52,26 @@ public class PupitriCatch implements Serializable { private static final Set<String> MELAG_SPECIES = ImmutableSet.copyOf( new String[]{MELAG_META_SPECIES, MELAG_2_META_SPECIES}); - + /** + * Espece du lot. + */ protected Species species; + /** + * Is the species is a sorted (VRAC) or unsorted (HORS-VRAC)? + */ protected boolean sorted; + /** + * If the species was involved in the melag, fill this flag. + * + * If species has also a {@link Signs#BIG} weight, then the melga weight is imported as a {@link Signs#SMALL} batch. + * Otherwise using the {@link Signs#DEFAULT} sign. + * + * We will look after this sign while crzating species batch to import. + */ + protected Signs addMelagCommentForSign; + protected Map<Signs, MutableFloat> weightBySign = Maps.newHashMap(); public PupitriCatch(Species species, boolean sorted) { @@ -72,6 +87,10 @@ public class PupitriCatch implements Serializable { return sorted; } + public boolean isAddMelagComment(Signs sign) { + return addMelagCommentForSign != null && addMelagCommentForSign.equals(sign); + } + public boolean isForMelag() { return weightBySign.containsKey(Signs.MELAG); } @@ -107,6 +126,10 @@ public class PupitriCatch implements Serializable { weightBySign.remove(sign); } + public void setAddMelagCommentForSign(Signs addMelagCommentForSign) { + this.addMelagCommentForSign = addMelagCommentForSign; + } + @Override public int hashCode() { int speciesHashCode = species != null ? species.hashCode() : 0; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java index a88fe84..e5f864b 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java @@ -24,19 +24,22 @@ package fr.ifremer.tutti.service.pupitri; import com.google.common.collect.ImmutableSet; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.util.Weights; import org.apache.commons.lang3.mutable.MutableFloat; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.decorator.Decorator; import java.io.File; import java.util.ArrayList; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import static org.nuiton.i18n.I18n.t; + /** * Result of a pupitri import. * <p/> @@ -83,19 +86,23 @@ public class PupitriImportResult { private MutableFloat melagSortedWeight; /** - * Set of all species in the melag (sign = {@code T}). + * Set of species that were not imported from the carrousel file. * - * @since 3.4.2 + * @since 3.10 */ - private final Set<Species> melagSpecies; - private final Set<String> notImportedSpeciesIds; + /** + * Comment to add on each melag batch to import. + * + * @since 3.10 + */ + private String melagComment; + public PupitriImportResult(File trunkFile, File carrousselFile) { this.trunkFile = trunkFile; this.carrousselFile = carrousselFile; - catches = new ArrayList<>(); - melagSpecies = new HashSet<>(); + this.catches = new ArrayList<>(); notImportedSpeciesIds = new LinkedHashSet<>(); } @@ -151,6 +158,10 @@ public class PupitriImportResult { return melagSortedWeight == null ? null : melagSortedWeight.floatValue(); } + public String getMelagComment() { + return melagComment; + } + public Set<String> getNotImportedSpeciesIds() { return ImmutableSet.copyOf(notImportedSpeciesIds); } @@ -197,11 +208,14 @@ public class PupitriImportResult { this.notImportedSpeciesIds.addAll(carrouselImportRequestResult.getNotImportedSpeciesIds()); List<PupitriCatch> incomingCatches = carrouselImportRequestResult.getCatches(); - setCatches(incomingCatches); + + for (PupitriCatch aCatch : incomingCatches) { + addCatch(aCatch); + } } - void prepareMelag() { + void prepareMelag(Decorator<Species> speciesDecorator) { boolean useMelag = isFoundTotalMelag() && isFoundSortedMelag(); @@ -209,8 +223,17 @@ public class PupitriImportResult { if (useMelag) { melagRatio = melagSortedWeight.floatValue() / melagTotalWeight.floatValue(); + + if (log.isInfoEnabled()) { + log.info("Use Melag (sorted weight: " + melagSortedWeight.floatValue() + " / total weight: " + melagTotalWeight.floatValue() + ")"); + } } + + String unitLabel = WeightUnit.KG.getShortLabel(); + + StringBuilder melagCommentBuilder = new StringBuilder(t("tutti.service.pupitri.import.createMelag.comment.part1") + "\n"); + Iterator<PupitriCatch> iterator = catches.iterator(); while (iterator.hasNext()) { PupitriCatch aCatch = iterator.next(); @@ -231,9 +254,37 @@ public class PupitriImportResult { Float sampleWeight = aCatch.getWeight(Signs.MELAG); Float weight = Weights.roundKiloGram(sampleWeight / melagRatio); - aCatch.addToSign(Signs.DEFAULT, weight); + + if (aCatch.getWeight(Signs.BIG) == null) { + + // No BIG batch associated with this melag species + // use default batch + // see https://forge.codelutin.com/issues/5742 + aCatch.addToSign(Signs.DEFAULT, weight); + aCatch.setAddMelagCommentForSign(Signs.DEFAULT); + + if (log.isInfoEnabled()) { + log.info("Add melag batch for " + aCatch + " as default (no G found) : " + weight); + } + + } else { + + // also found a big batch associated with this melga species + // transform it as a small batch instead of default + // see https://forge.codelutin.com/issues/5742 + aCatch.addToSign(Signs.SMALL, weight); + aCatch.setAddMelagCommentForSign(Signs.SMALL); + + if (log.isInfoEnabled()) { + log.info("Add melag batch for " + aCatch + " as small (G found) : " + weight); + } + + } + aCatch.removeSign(Signs.MELAG); + melagCommentBuilder.append(t("tutti.service.pupitri.import.createMelag.comment.part2", sampleWeight, unitLabel, speciesDecorator.toString(aCatch.getSpecies()))).append("\n"); + } else { // move the melag weight as a default weight @@ -247,12 +298,17 @@ public class PupitriImportResult { } - } + if (useMelag) { + + melagCommentBuilder.append(t("tutti.service.pupitri.import.createMelag.comment.part3", melagTotalWeight, unitLabel)); + + melagComment = melagCommentBuilder.toString(); + if (log.isInfoEnabled()) { + log.info("Melag comment:\n" + melagComment); + } - private void setCatches(List<PupitriCatch> catches) { - for (PupitriCatch aCatch : catches) { - addCatch(aCatch); } + } private void addCatch(PupitriCatch aCatch) { @@ -271,10 +327,10 @@ public class PupitriImportResult { if (aCatch.isForMelag()) { - // add species as a melag one - melagSpecies.add(aCatch.getSpecies()); - // add weight to sorted melag + if (log.isInfoEnabled()) { + log.info("Found a catch used in MELAG: " + aCatch); + } addMelagSortedWeight(aCatch.getWeight(Signs.MELAG)); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java index 117c4b2..45aa3e3 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java @@ -148,7 +148,8 @@ public class PupitriImportService extends AbstractTuttiService { // there is some matching rows to import - result.prepareMelag(); + Decorator<Species> decorator = getService(DecoratorService.class).getDecoratorByType(Species.class); + result.prepareMelag(decorator); savePupitriImportResult(result, operation, catchBatch); @@ -243,10 +244,6 @@ public class PupitriImportService extends AbstractTuttiService { protected CarrouselImportRequestResult processCarrouselImportFile(File carrouselFile, FishingOperation operation) { - if (log.isInfoEnabled()) { - log.info("Will import pupitri operation [" + operation.toString() + "] carrousel from file: " + carrouselFile); - } - // get the map of species by survey code or reftax code ListMultimap<String, Species> speciesBySurveyCode = ArrayListMultimap.create(); speciesBySurveyCode.putAll(Speciess.splitBySurveyCode(dataContext.getReferentSpeciesWithSurveyCode())); @@ -446,6 +443,8 @@ public class PupitriImportService extends AbstractTuttiService { // insert all imported species batches + String melagComment = result.getMelagComment(); + Decorator<Species> speciesDecorator = decoratorService.getDecoratorByType(Species.class); for (PupitriCatch pupitriCatch : result.getCatches()) { @@ -463,6 +462,7 @@ public class PupitriImportService extends AbstractTuttiService { if (log.isDebugEnabled()) { log.debug("Create a categorized batches for species " + speciesDecorator.toString(species)); } + SpeciesBatch batch = createSpeciesBatch(operation, species, null, @@ -476,6 +476,7 @@ public class PupitriImportService extends AbstractTuttiService { for (Map.Entry<Signs, MutableFloat> entry : weightBySign.entrySet()) { Signs signs = entry.getKey(); + boolean addMelagComment = pupitriCatch.isAddMelagComment(signs); float catchWeight = entry.getValue().floatValue(); Integer categoryId = signs.getCategory(); @@ -485,9 +486,14 @@ public class PupitriImportService extends AbstractTuttiService { species, catchWeight, categoryId, - splitCqv - ); + splitCqv); + if (addMelagComment) { + childBatch.setComment(melagComment); + if (log.isInfoEnabled()) { + log.info("Add melag comment for sign " + signs + "on " + speciesDecorator.toString(species)); + } + } persistenceService.createSpeciesBatch(childBatch, parentBatchId); } @@ -509,6 +515,14 @@ public class PupitriImportService extends AbstractTuttiService { PmfmId.SORTED_UNSORTED.getValue(), cqv); + boolean addMelagComment = pupitriCatch.isAddMelagComment(Signs.DEFAULT); + if (addMelagComment) { + if (log.isInfoEnabled()) { + log.info("Add melag comment for simple batch " + speciesDecorator.toString(species)); + } + batch.setComment(melagComment); + } + persistenceService.createSpeciesBatch(batch, null); } } @@ -546,16 +560,14 @@ public class PupitriImportService extends AbstractTuttiService { * </ul> * See http://forge.codelutin.com/issues/3898 * - * @param speciesCatch catch to cehck + * @param speciesCatch catch to check * @return {@code true} if species catch is safe, {@code false} otherwise. * @since 3.0-rc-2 */ private boolean isSplitSpecies(PupitriCatch speciesCatch) { boolean result; - Map<Signs, MutableFloat> weightBySign = - speciesCatch.getWeightBySign(); - Set<Signs> signs = - Sets.newHashSet(weightBySign.keySet()); + Map<Signs, MutableFloat> weightBySign = speciesCatch.getWeightBySign(); + Set<Signs> signs = Sets.newHashSet(weightBySign.keySet()); if (DEFAULT_SIGNS.equals(signs)) { diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 4d638cd..1e4416b 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -197,6 +197,9 @@ tutti.service.referential.export.person.error=Erreur lors de l'export des person tutti.service.referential.export.species.error=Erreur lors de l'export des espèces dans le fichier %s tutti.service.referential.export.vessel.error=Erreur lors de l'export des navires dans le fichier %s tutti.service.referential.import.gear.add.noName.error=Le nom de l'engin est obligatoire +tutti.service.pupitri.import.createMelag.comment.part1=Traitement issu d'un mélange composé de \: +tutti.service.pupitri.import.createMelag.comment.part2=- %s%s de %s +tutti.service.pupitri.import.createMelag.comment.part3=avec un poids d'élévation de %s%s tutti.service.referential.import.gear.cannotDeleteNotExisting.error=L'engin temporaire d'identifiant %s n'extsite pas, impossible de la supprimer tutti.service.referential.import.gear.cannotDeleteWithoutId.error=L'identifiant est obligatoire pour la suppression tutti.service.referential.import.gear.existingName.error=L'engin '%s' n'a pas été ajouté au référentiel car il est déjà présent -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 51e9b2fa3a92c5be9d6afd0ec61dd0de3eb0413f Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Nov 21 18:36:50 2014 +0100 amelioration du code d'import pupitri + ajout d'un test pour la fonctionnalite #6149 --- .../tutti/service/pupitri/PupitriCatch.java | 10 +- .../tutti/service/pupitri/PupitriImportResult.java | 10 +- .../service/pupitri/PupitriImportService.java | 2 +- .../pupitri/PupitriImportServiceEvo6149.java | 153 ++++++++++++++++++++ .../src/test/resources/pupitri/evo-6149.car | 6 + .../src/test/resources/pupitri/evo-6149.tnk | 32 +++++ .../test/resources/pupitri/evo-6149.tuttiProtocol | 154 +++++++++++++++++++++ 7 files changed, 355 insertions(+), 12 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriCatch.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriCatch.java index 26238c2..5112ceb 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriCatch.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriCatch.java @@ -70,7 +70,7 @@ public class PupitriCatch implements Serializable { * * We will look after this sign while crzating species batch to import. */ - protected Signs addMelagCommentForSign; + protected Signs melagElevatedSign; protected Map<Signs, MutableFloat> weightBySign = Maps.newHashMap(); @@ -88,7 +88,7 @@ public class PupitriCatch implements Serializable { } public boolean isAddMelagComment(Signs sign) { - return addMelagCommentForSign != null && addMelagCommentForSign.equals(sign); + return melagElevatedSign != null && melagElevatedSign.equals(sign); } public boolean isForMelag() { @@ -126,8 +126,10 @@ public class PupitriCatch implements Serializable { weightBySign.remove(sign); } - public void setAddMelagCommentForSign(Signs addMelagCommentForSign) { - this.addMelagCommentForSign = addMelagCommentForSign; + public void setMelagElevatedWeight(Signs melagElevatedSign, Float weight) { + addToSign(melagElevatedSign, weight); + removeSign(Signs.MELAG); + this.melagElevatedSign = melagElevatedSign; } @Override diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java index e5f864b..7acb4ed 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportResult.java @@ -260,8 +260,7 @@ public class PupitriImportResult { // No BIG batch associated with this melag species // use default batch // see https://forge.codelutin.com/issues/5742 - aCatch.addToSign(Signs.DEFAULT, weight); - aCatch.setAddMelagCommentForSign(Signs.DEFAULT); + aCatch.setMelagElevatedWeight(Signs.DEFAULT, weight); if (log.isInfoEnabled()) { log.info("Add melag batch for " + aCatch + " as default (no G found) : " + weight); @@ -272,17 +271,14 @@ public class PupitriImportResult { // also found a big batch associated with this melga species // transform it as a small batch instead of default // see https://forge.codelutin.com/issues/5742 - aCatch.addToSign(Signs.SMALL, weight); - aCatch.setAddMelagCommentForSign(Signs.SMALL); + aCatch.setMelagElevatedWeight(Signs.SMALL, weight); if (log.isInfoEnabled()) { log.info("Add melag batch for " + aCatch + " as small (G found) : " + weight); } } - - aCatch.removeSign(Signs.MELAG); - + melagCommentBuilder.append(t("tutti.service.pupitri.import.createMelag.comment.part2", sampleWeight, unitLabel, speciesDecorator.toString(aCatch.getSpecies()))).append("\n"); } else { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java index 45aa3e3..09a8ae1 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java @@ -491,7 +491,7 @@ public class PupitriImportService extends AbstractTuttiService { if (addMelagComment) { childBatch.setComment(melagComment); if (log.isInfoEnabled()) { - log.info("Add melag comment for sign " + signs + "on " + speciesDecorator.toString(species)); + log.info("Add melag comment for sign " + signs + " on " + speciesDecorator.toString(species)); } } diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo6149.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo6149.java new file mode 100644 index 0000000..3ebe58b --- /dev/null +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo6149.java @@ -0,0 +1,153 @@ +package fr.ifremer.tutti.service.pupitri; + +import com.google.common.base.Predicate; +import com.google.common.collect.Sets; +import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmId; +import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueId; +import fr.ifremer.tutti.TuttiConfigurationOption; +import fr.ifremer.tutti.persistence.entities.data.BatchContainer; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatchs; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.decorator.Decorator; + +import java.io.File; +import java.io.IOException; +import java.util.Set; + +/** + * Created on 11/21/14. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.10 + */ +public class PupitriImportServiceEvo6149 extends PupitryImportServiceTestSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(PupitriImportServiceEvo5062Test.class); + + @Test + public void importPupitri() throws IOException { + + File trunk = dbResource.copyClassPathResource("pupitri/evo-6149.tnk", "pupitri.tnk"); + File carroussel = dbResource.copyClassPathResource("pupitri/evo-6149.car", "pupitri.car"); + File protocol = dbResource.copyClassPathResource("pupitri/evo-6149.tuttiProtocol", "evo-6149.tuttiProtocol"); + dbResource.getConfig().getApplicationConfig().setOption(TuttiConfigurationOption.DB_PROTOCOL_DIRECTORY.getKey(), protocol.getParentFile().getAbsolutePath()); + TuttiProtocol protocol1 = persistenceService.getProtocol("evo-6149"); + persistenceService.setProtocol(protocol1); + + FishingOperation operation = dataContext.operations.get(1); + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operation.getId()); + catchBatch.setFishingOperation(operation); + + BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), false); + Assert.assertEquals(0, rootSpeciesBatch.sizeChildren()); + + PupitriImportResult pupitriImportResult = service.importPupitri(trunk, carroussel, operation, catchBatch); + Assert.assertTrue(pupitriImportResult.isFishingOperationFound()); + int nbNotAdded = pupitriImportResult.getNbCarrousselNotImported(); + Assert.assertEquals(0, nbNotAdded); + Set<String> notImportedSpeciesIds = pupitriImportResult.getNotImportedSpeciesIds(); + Assert.assertNotNull(notImportedSpeciesIds); + Assert.assertTrue(notImportedSpeciesIds.isEmpty()); + + BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId(), false); + Assert.assertEquals(2, rootSpeciesBatchAfter.sizeChildren()); + + /* + Melange total 100Kg / sorted 50Kg -> ratio = x2 + MERL-MCC un lot G (50Kg) + MERL-MCC un lot P (25x2 -> 50Kg) + TRAC-TRU un lot VRAC (25x2 -> 50Kg) + */ + Set<Integer> expectedSpecies = Sets.newHashSet( + + 16994, // MERL-MCC + 17116 // TRAC-TRU + ); + + + Predicate<SpeciesAbleBatch> batchVracPredicate = SpeciesAbleBatchs.newSpeciesAbleBatchCategoryPredicate( + PmfmId.SORTED_UNSORTED.getValue(), + QualitativeValueId.SORTED_VRAC.getValue()); + + Predicate<SpeciesAbleBatch> bigVracPredicate = SpeciesAbleBatchs.newSpeciesAbleBatchCategoryPredicate( + PmfmId.SIZE_CATEGORY.getValue(), + QualitativeValueId.SIZE_BIG.getValue()); + + Predicate<SpeciesAbleBatch> smallVracPredicate = SpeciesAbleBatchs.newSpeciesAbleBatchCategoryPredicate( + PmfmId.SIZE_CATEGORY.getValue(), + QualitativeValueId.SIZE_SMALL.getValue()); + + Decorator<Species> speciesDecorator = decoratorService.getDecoratorByType(Species.class); + + for (SpeciesBatch speciesBatch : rootSpeciesBatchAfter.getChildren()) { + + Species species = speciesBatch.getSpecies(); + Integer speciesId = species.getIdAsInt(); + + Assert.assertTrue("l'espece " + speciesId + " ne doit pas etre importe", expectedSpecies.contains(speciesId)); + + if (log.isInfoEnabled()) { + log.info("Species : " + speciesId + " : " + speciesDecorator.toString(species)); + } + + if (16994 == speciesId) { + + // un lot VRAC (sans poids) avec deux fils + // un G (100Kg) + // un P (50Kg) + + Assert.assertTrue(batchVracPredicate.apply(speciesBatch)); + Assert.assertFalse(speciesBatch.isChildBatchsEmpty()); + Assert.assertEquals(2, speciesBatch.sizeChildBatchs()); + + { + SpeciesBatch child = speciesBatch.getChildBatchs(0); + + if (bigVracPredicate.apply(child)) { + + Assert.assertEquals(100, child.getSampleCategoryWeight(), 0.001); + + } else if (smallVracPredicate.apply(child)) { + + Assert.assertEquals(50, child.getSampleCategoryWeight(), 0.001); + } else { + Assert.fail("le lot " + child + " doit etre une categorisation Taille Gros ou petit"); + } + } + { + SpeciesBatch child = speciesBatch.getChildBatchs(1); + if (bigVracPredicate.apply(child)) { + + Assert.assertEquals(100, child.getSampleCategoryWeight(), 0.001); + + } else if (smallVracPredicate.apply(child)) { + + Assert.assertEquals(50, child.getSampleCategoryWeight(), 0.001); + } else { + Assert.fail("le lot " + child + " doit etre une categorisation Taille Gros ou petit"); + } + } + } + + if (17116 == speciesId) { + + // un unique lot vrac de 50Kg + Assert.assertTrue(batchVracPredicate.apply(speciesBatch)); + Assert.assertTrue(speciesBatch.isChildBatchsEmpty()); + Assert.assertEquals(50, speciesBatch.getSampleCategoryWeight(), 0.001); + } + + } + + } +} \ No newline at end of file diff --git a/tutti-service/src/test/resources/pupitri/evo-6149.car b/tutti-service/src/test/resources/pupitri/evo-6149.car new file mode 100644 index 0000000..0478192 --- /dev/null +++ b/tutti-service/src/test/resources/pupitri/evo-6149.car @@ -0,0 +1,6 @@ +$TSMES,27/11/13,13:14:46.647,BLCAR, 0,A,1,002,MELA-NGE,0,VAT,0025.0, +$TSMES,27/11/13,13:16:26.243,BLCAR, 0,A,1,002,MELA-NGE,0,VAT,0025.0, +$TSMES,27/11/13,13:16:41.355,BLCAR, 0,A,1,002,MELA-NGE,0,VAT,0050.0, +$TSMES,27/11/13,13:28:27.717,BLCAR, 0,A,1,002,MERL-MCC,G,VAT,0100.0, (du merlu gros) +$TSMES,27/11/13,13:30:30.398,BLCAR, 0,A,1,001,MERL-MCC,T,VAT,0025.0, (du merlu petit) +$TSMES,27/11/13,13:31:17.004,BLCAR, 0,A,1,001,TRAC-TRU,T,VAT,0025.0, (du trac-tru en melange) -> lot unique \ No newline at end of file diff --git a/tutti-service/src/test/resources/pupitri/evo-6149.tnk b/tutti-service/src/test/resources/pupitri/evo-6149.tnk new file mode 100644 index 0000000..bdb8624 --- /dev/null +++ b/tutti-service/src/test/resources/pupitri/evo-6149.tnk @@ -0,0 +1,32 @@ +$TSMES,27/11/13,09:08:45.130,BLTNK, 0,A,1,VAT,0045.4, +$TSMES,27/11/13,09:10:10.522,BLTNK, 0,A,1,VAT,0045.0, +$TSMES,27/11/13,09:12:14.730,BLTNK, 0,A,1,VAT,0043.9, +$TSMES,27/11/13,09:14:06.033,BLTNK, 0,A,1,VAT,0044.0, +$TSMES,27/11/13,09:16:08.907,BLTNK, 0,A,1,VAT,0042.4, +$TSMES,27/11/13,09:17:47.515,BLTNK, 0,A,1,VAT,0044.3, +$TSMES,27/11/13,09:19:44.039,BLTNK, 0,A,1,VAT,0043.6, +$TSMES,27/11/13,09:21:49.166,BLTNK, 0,A,1,VAT,0044.2, +$TSMES,27/11/13,09:26:57.681,BLTNK, 0,A,1,VAT,0045.9, +$TSMES,27/11/13,09:29:20.020,BLTNK, 0,A,1,VAT,0045.8, +$TSMES,27/11/13,09:30:37.535,BLTNK, 0,A,1,VAT,0047.0, +$TSMES,27/11/13,09:32:16.153,BLTNK, 0,A,1,VAT,0046.6, +$TSMES,27/11/13,09:33:30.882,BLTNK, 0,A,1,VAT,0044.4, +$TSMES,27/11/13,09:34:50.649,BLTNK, 0,A,1,VAT,0044.5, +$TSMES,27/11/13,09:36:36.933,BLTNK, 0,A,1,VAT,0043.7, +$TSMES,27/11/13,09:37:53.424,BLTNK, 0,A,1,VAT,0046.4, +$TSMES,27/11/13,09:41:40.944,BLTNK, 0,A,1,VAT,0048.6, +$TSMES,27/11/13,09:43:33.377,BLTNK, 0,A,1,VAT,0046.4, +$TSMES,27/11/13,09:44:46.487,BLTNK, 0,A,1,VAT,0046.4, +$TSMES,27/11/13,09:46:12.192,BLTNK, 0,A,1,VAT,0045.2, +$TSMES,27/11/13,09:47:34.846,BLTNK, 0,A,1,VAT,0045.4, +$TSMES,27/11/13,09:48:55.920,BLTNK, 0,A,1,VAT,0048.4, +$TSMES,27/11/13,09:51:12.724,BLTNK, 0,A,1,VAT,0046.4, +$TSMES,27/11/13,09:54:14.063,BLTNK, 0,A,1,VAT,0040.4, +$TSMES,27/11/13,09:56:11.000,BLTNK, 0,A,1,VAT,0044.2, +$TSMES,27/11/13,09:57:38.344,BLTNK, 0,A,1,VAT,0047.3, +$TSMES,27/11/13,09:59:23.603,BLTNK, 0,A,1,VAT,0047.6, +$TSMES,27/11/13,10:00:51.868,BLTNK, 0,A,1,VAT,0047.9, +$TSMES,27/11/13,10:02:29.655,BLTNK, 0,A,1,VAT,0044.2, +$TSMES,27/11/13,10:04:14.101,BLTNK, 0,A,1,VAT,0045.9, +$TSMES,27/11/13,10:06:08.886,BLTNK, 0,A,1,VAT,0043.2, +$TSMES,27/11/13,10:08:35.000,BLTNK, 0,A,1,VAT,0007.5, diff --git a/tutti-service/src/test/resources/pupitri/evo-6149.tuttiProtocol b/tutti-service/src/test/resources/pupitri/evo-6149.tuttiProtocol new file mode 100644 index 0000000..62af9e3 --- /dev/null +++ b/tutti-service/src/test/resources/pupitri/evo-6149.tuttiProtocol @@ -0,0 +1,154 @@ +id: c6ee2088-9720-46c0-b8d2-8f21c902676f +name: Protocole EVHOE 2013 +benthos: +comment: Protocole pour les tests 2013 avec Jean Jacques Rivoalen +gearUseFeaturePmfmId: +- 131 +- 828 +- 884 +- 965 +lengthClassesPmfmId: +- 306 +- 622 +- 307 +- 302 +- 299 +- 1394 +- 1417 +- 1425 +- 1426 +- 1427 +- 283 +- 284 +- 285 +- 294 +- 295 +- 300 +- 301 +- 304 +- 318 +- 319 +- 322 +- 323 +- 661 +- 662 +species: +- !SpeciesProtocol + id: 056a7ad4-934c-4d69-b068-1a2dd64012cb + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: [] + speciesReferenceTaxonId: 2786 + speciesSurveyCode: EUPH-AUX + weightEnabled: true +- !SpeciesProtocol + id: 5f7e400c-6a03-4092-9ccf-0031823b3a14 + calcifySampleEnabled: true + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: + - 198 + - 196 + speciesReferenceTaxonId: 1540 + speciesSurveyCode: MERL-MCC + weightEnabled: true +- !SpeciesProtocol + id: dc5738bb-ed38-4814-a016-9fabfd833212 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: + - 198 + speciesReferenceTaxonId: 1662 + speciesSurveyCode: TRAC-TRU + weightEnabled: true +- !SpeciesProtocol + id: e4577b1e-18d1-459c-acff-04aedf4e917d + calcifySampleEnabled: true + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 307 + mandatorySampleCategoryId: [] + speciesReferenceTaxonId: 1362 + speciesSurveyCode: ENGR-ENC + weightEnabled: true +- !SpeciesProtocol + id: 4076fe7e-01fe-4164-820a-47b50dfa8e02 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: [] + speciesReferenceTaxonId: 1920 + speciesSurveyCode: EUTR-GUR + weightEnabled: true +- !SpeciesProtocol + id: 16f4a094-1904-4e50-aff9-1f2dcab3a909 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: + - 198 + speciesReferenceTaxonId: 1772 + speciesSurveyCode: SCOM-SCO + weightEnabled: true +- !SpeciesProtocol + id: d5887f0e-bd99-4f66-a967-8fcff8224b32 + calcifySampleEnabled: true + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: + - 198 + - 196 + speciesReferenceTaxonId: 1553 + speciesSurveyCode: MICR-POU + weightEnabled: true +- !SpeciesProtocol + id: 944db3c6-d870-4f03-8abc-9a985a6feb65 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: [] + speciesReferenceTaxonId: 1415 + speciesSurveyCode: MYCT-PUN + weightEnabled: true +- !SpeciesProtocol + id: 2a8122cf-d238-4820-a7b9-eacaf1f302bd + calcifySampleEnabled: true + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: [] + speciesReferenceTaxonId: 1551 + speciesSurveyCode: MELA-NGE + weightEnabled: true +- !SpeciesProtocol + id: 0de3f5c9-0ca9-4a7c-84aa-323d9eaa7f7f + countIfNoFrequencyEnabled: true + mandatorySampleCategoryId: [] + speciesReferenceTaxonId: 872 + speciesSurveyCode: ACAN-PEL + weightEnabled: true +- !SpeciesProtocol + id: ddffa4c9-cbb5-447f-a829-e2ac0cfea0f5 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: [] + speciesReferenceTaxonId: 1732 + speciesSurveyCode: ACANPAL + weightEnabled: true +vesselUseFeaturePmfmId: +- 173 +- 194 +- 230 +- 782 +- 843 +- 844 +- 846 +- 847 +- 848 +- 849 +- 850 +- 851 +- 857 +- 858 +- 859 +- 861 +- 862 +- 863 +- 881 +- 882 +- 883 -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 51ecc0c7ff9735f6b198e7d269ec9474d4bb20a0 Merge: 3318653 51e9b2f Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Nov 21 18:37:31 2014 +0100 fixes #6147 fixes #6149 Merge branch 'feature/6147' into develop .../pupitri/CarrouselImportRequestResult.java | 83 ++++++ .../tutti/service/pupitri/PupitriCatch.java | 27 +- .../tutti/service/pupitri/PupitriImportResult.java | 194 ++++++++------ .../service/pupitri/PupitriImportService.java | 298 ++++++++++++++------- .../resources/i18n/tutti-service_en_GB.properties | 1 - .../resources/i18n/tutti-service_fr_FR.properties | 4 +- .../pupitri/PupitriImportServiceAno3898Test.java | 58 +--- .../pupitri/PupitriImportServiceAno5032Test.java | 60 +---- .../pupitri/PupitriImportServiceAno5079Test.java | 57 +--- .../pupitri/PupitriImportServiceEvo5060Test.java | 56 +--- .../pupitri/PupitriImportServiceEvo5062Test.java | 56 +--- .../pupitri/PupitriImportServiceEvo6149.java | 153 +++++++++++ .../service/pupitri/PupitriImportServiceTest.java | 68 ++--- .../pupitri/PupitryImportServiceTestSupport.java | 53 ++++ .../src/test/resources/pupitri/evo-6149.car | 6 + .../src/test/resources/pupitri/evo-6149.tnk | 32 +++ .../test/resources/pupitri/evo-6149.tuttiProtocol | 154 +++++++++++ 17 files changed, 891 insertions(+), 469 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm