branch feature/6116 updated (9989c2e -> eaa28b6)
This is an automated email from the git hooks/post-receive script. New change to branch feature/6116 in repository tutti. See http://git.codelutin.com/tutti.git omits 9989c2e ajout de la conf dans l'ui (fixes #6116) omits 144713e ajout des lots manquants lors de l'import (refs #6116) omits 799b75f ajout des catégories meme si elles ne sont pas dans le fichier (refs #6116) adds d5c74b5 séparation du service d'import pupitri en 2 parties : - lecture des fichiers d'import - enregistrement des données importées cela permet de saisir un poids total de melag avant de faire l'élévation des poids (fixes #6592) adds 772a8ea Fix javadoc adds 55d4672 Fixes #6592 Merge branch 'feature/6592' into develop adds 6e150ec Passage en java 8u65 (Fixes #7898) adds 0f49e69 ordonnancement des lignes importées par rapport à l'ordinal du signe dans l'enum (fixes #6061) adds e842320 Simplification de l'énumération Signs adds 68f6265 Amélioration du code pour créer les ensemble immuables adds 33c2d43 Fixes #6061. Merge branch 'feature/6061' into develop new 7138094 ajout des catégories meme si elles ne sont pas dans le fichier (refs #6116) new aaa14fe ajout des lots manquants lors de l'import (refs #6116) new ae09213 ajout de la conf dans l'ui (fixes #6116) new ef240ad ajout de test + création des lots manquants avec des poids nuls (fixes #6116) new a0916bf merge with develop new eaa28b6 ne pas mettre les lignes créées dans le rapport (fixes #6116) This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (9989c2e) \ N -- N -- N refs/heads/feature/6116 (eaa28b6) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omits" are not gone; other references still refer to them. Any revisions marked "discards" are gone forever. The 6 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 eaa28b632060c4aa40d45410afb79960030058ae Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 13 11:03:09 2016 +0100 ne pas mettre les lignes créées dans le rapport (fixes #6116) commit a0916bffb802d19478a65c0fecd3f44eaa0de104 Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 13 10:58:08 2016 +0100 merge with develop commit ef240adc1b1e0d9d3931f0aa675b09ab5af160f3 Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 13 10:38:26 2016 +0100 ajout de test + création des lots manquants avec des poids nuls (fixes #6116) commit ae09213e820564a4e68e51b6fa95b9e3b4267843 Author: Kevin Morin <morin@codelutin.com> Date: Tue Jan 12 18:24:04 2016 +0100 ajout de la conf dans l'ui (fixes #6116) commit aaa14fe16955a3e89dc30008cd30175785889226 Author: Kevin Morin <morin@codelutin.com> Date: Tue Jan 12 17:28:39 2016 +0100 ajout des lots manquants lors de l'import (refs #6116) commit 7138094370a41953447ac9c3113b3182d798172b Author: Kevin Morin <morin@codelutin.com> Date: Mon Jan 11 18:11:30 2016 +0100 ajout des catégories meme si elles ne sont pas dans le fichier (refs #6116) Summary of changes: pom.xml | 2 +- .../tutti/service/pupitri/PupitriImportResult.java | 4 + .../service/pupitri/PupitriImportService.java | 53 +++- .../service/pupitri/PupitriSpeciesContext.java | 17 +- .../fr/ifremer/tutti/service/pupitri/Signs.java | 128 ++------- .../pupitri/PupitriImportServiceEvo6116Test.java | 293 +++++++++++++++++++++ .../pupitri/PupitriImportServiceEvo6149Test.java | 4 +- ...t.java => PupitriImportServiceEvo6592Test.java} | 39 +-- .../src/test/resources/pupitri/evo-6116.car | 7 + .../pupitri/{evo-6149.tnk => evo-6116.tnk} | 0 .../test/resources/pupitri/evo-6116.tuttiProtocol | 198 ++++++++++++++ .../pupitri/{evo-6149.car => evo-6592.car} | 0 .../pupitri/{evo-6149.tnk => evo-6592.tnk} | 0 ...o-6149.tuttiProtocol => evo-6592.tuttiProtocol} | 0 .../species/ImportPupitriMelagWeightPopupUI.css} | 43 ++- .../species/ImportPupitriMelagWeightPopupUI.jaxx} | 46 ++-- .../ImportPupitriMelagWeightPopupUIHandler.java | 79 ++++++ .../ImportPupitriMelagWeightPopupUIModel.java | 35 +++ .../species/actions/ImportPupitriAction.java | 60 +++-- ...mportPupitriMelagWeightPopupValidateAction.java | 20 ++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 6 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 3 + 22 files changed, 829 insertions(+), 208 deletions(-) create mode 100644 tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo6116Test.java copy tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/{PupitriImportServiceEvo6149Test.java => PupitriImportServiceEvo6592Test.java} (86%) create mode 100644 tutti-service/src/test/resources/pupitri/evo-6116.car copy tutti-service/src/test/resources/pupitri/{evo-6149.tnk => evo-6116.tnk} (100%) create mode 100644 tutti-service/src/test/resources/pupitri/evo-6116.tuttiProtocol copy tutti-service/src/test/resources/pupitri/{evo-6149.car => evo-6592.car} (100%) copy tutti-service/src/test/resources/pupitri/{evo-6149.tnk => evo-6592.tnk} (100%) copy tutti-service/src/test/resources/pupitri/{evo-6149.tuttiProtocol => evo-6592.tuttiProtocol} (100%) copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/{util/auth/LoginUI.css => content/operation/catches/species/ImportPupitriMelagWeightPopupUI.css} (51%) copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/{util/auth/LoginUI.jaxx => content/operation/catches/species/ImportPupitriMelagWeightPopupUI.jaxx} (53%) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriMelagWeightPopupUIHandler.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriMelagWeightPopupUIModel.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriMelagWeightPopupValidateAction.java -- 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 feature/6116 in repository tutti. See http://git.codelutin.com/tutti.git commit 7138094370a41953447ac9c3113b3182d798172b Author: Kevin Morin <morin@codelutin.com> Date: Mon Jan 11 18:11:30 2016 +0100 ajout des catégories meme si elles ne sont pas dans le fichier (refs #6116) --- .../service/pupitri/PupitriSpeciesContext.java | 29 +++++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java index 6e3dee6..841c777 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java @@ -144,7 +144,7 @@ public class PupitriSpeciesContext implements Serializable { public void addToSignContext(Signs sign, BoxType boxType, Float weight) { - PupitriSignContext signContext = getOrCreateSignContext(sign); + PupitriSignContext signContext = getOrCreateSignContext(sign, true); signContext.addWeight(weight); switch (boxType) { case SMALL: @@ -160,7 +160,7 @@ public class PupitriSpeciesContext implements Serializable { public void setMelagElevatedWeight(Signs melagElevatedSign, Float weight) { PupitriSignContext melagContext = getSignContext(Signs.MELAG); - PupitriSignContext pupitriSignContext = getOrCreateSignContext(melagElevatedSign); + PupitriSignContext pupitriSignContext = getOrCreateSignContext(melagElevatedSign, true); pupitriSignContext.addWeight(weight); //FIXME Check this??? pupitriSignContext.addNbBoxs(melagContext); @@ -174,7 +174,7 @@ public class PupitriSpeciesContext implements Serializable { PupitriSignContext melagContext = getSignContext(Signs.MELAG); - PupitriSignContext defaultSignContext = getOrCreateSignContext(Signs.DEFAULT); + PupitriSignContext defaultSignContext = getOrCreateSignContext(Signs.DEFAULT, true); defaultSignContext.addWeight(melagContext.getWeight()); //FIXME Check this??? defaultSignContext.addNbBoxs(melagContext); @@ -272,12 +272,33 @@ public class PupitriSpeciesContext implements Serializable { return signs.get(sign); } - private PupitriSignContext getOrCreateSignContext(Signs sign) { + private PupitriSignContext getOrCreateSignContext(Signs sign, boolean createOtherCategorySigns) { PupitriSignContext signContext = getSignContext(sign); if (signContext == null) { signContext = new PupitriSignContext(sign); signs.put(sign, signContext); } + + if (createOtherCategorySigns) { + // cf #6116 + + switch (sign) { + case MALE: + getOrCreateSignContext(Signs.FEMALE, false); + break; + case FEMALE: + getOrCreateSignContext(Signs.MALE, false); + break; + case BIG: + getOrCreateSignContext(Signs.SMALL, false); + break; + case SMALL: + getOrCreateSignContext(Signs.BIG, false); + break; + + } + } + return signContext; } -- 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 feature/6116 in repository tutti. See http://git.codelutin.com/tutti.git commit aaa14fe16955a3e89dc30008cd30175785889226 Author: Kevin Morin <morin@codelutin.com> Date: Tue Jan 12 17:28:39 2016 +0100 ajout des lots manquants lors de l'import (refs #6116) --- .../entities/protocol/TuttiProtocols.java | 31 ++++++ .../pupitri/CarrouselImportRequestResult.java | 8 +- .../service/pupitri/PupitriImportService.java | 109 ++++++++++++++++++--- .../service/pupitri/PupitriSpeciesContext.java | 53 +++++----- .../species/actions/ImportPupitriAction.java | 3 +- 5 files changed, 162 insertions(+), 42 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java index 42145e0..c2a0130 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java @@ -56,12 +56,14 @@ import org.nuiton.jaxx.application.ApplicationTechnicalException; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; +import javax.annotation.Nullable; import java.io.BufferedWriter; import java.io.File; import java.io.Reader; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -651,4 +653,33 @@ public class TuttiProtocols extends AbstractTuttiProtocols { return message; } + + public static Collection<String> getSurveyCodeWhoseCategoryIsMandatory(TuttiProtocol protocol, + final Caracteristic caracteristic) { + + Preconditions.checkNotNull(protocol); + Preconditions.checkNotNull(caracteristic); + + Collection<SpeciesProtocol> speciesProtocols = Collections2.filter(protocol.getSpecies(), + new Predicate<SpeciesProtocol>() { + + @Override + public boolean apply(@Nullable SpeciesProtocol input) { + List<Integer> mandatorySampleCategoryId = input.getMandatorySampleCategoryId(); + return mandatorySampleCategoryId != null + && mandatorySampleCategoryId.contains(caracteristic.getIdAsInt()); + } + }); + + Collection<String> surveyCodes = Collections2.transform(speciesProtocols, + new Function<SpeciesProtocol, String>() { + + @Override + public String apply(@Nullable SpeciesProtocol input) { + return input.getSpeciesSurveyCode(); + } + }); + + return new HashSet<>(surveyCodes); + } } 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 index 364bd4d..12ce5dc 100644 --- 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 @@ -107,12 +107,16 @@ public class CarrouselImportRequestResult { notImportedSpeciesIds.add(speciesId); } - public PupitriSpeciesContext getOrCreateCatch(List<Species> speciesList, boolean sorted) { + public PupitriSpeciesContext getOrCreateCatch(List<Species> speciesList, + boolean createMissingSigns, + boolean sorted) { // on utilise la première espèce trouvée dans la liste des candidates //FIXME Bien s'assurer que cela est ok Species species = speciesList.get(0); - PupitriSpeciesContext pupitriSpeciesContext = new PupitriSpeciesContext(species, sorted); + PupitriSpeciesContext pupitriSpeciesContext = new PupitriSpeciesContext(species, + createMissingSigns, + sorted); int catchIndex = catches.indexOf(pupitriSpeciesContext); if (catchIndex >= 0) { pupitriSpeciesContext = catches.get(catchIndex); 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 ddaf547..c4afb4c 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,6 +24,7 @@ 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 fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmId; @@ -35,6 +36,8 @@ 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.data.SpeciesBatchs; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValues; @@ -72,6 +75,7 @@ import java.io.Reader; import java.io.Serializable; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Locale; @@ -149,6 +153,22 @@ public class PupitriImportService extends AbstractTuttiService { File carrouselFile, FishingOperation operation, CatchBatch catchBatch) { + return importPupitri(trunkFile, carrouselFile, operation, catchBatch, false); + } + + /** + * @param trunkFile incoming trunk file + * @param carrouselFile incoming carroussle file + * @param operation target operation + * @param catchBatch target catch batch + * @param importMissingCategoryBatches import or not empty batches for missing sex or size batches + * @return the number of rows of the .car file which have not been imported + */ + public PupitriImportResult importPupitri(File trunkFile, + File carrouselFile, + FishingOperation operation, + CatchBatch catchBatch, + boolean importMissingCategoryBatches) { PupitriImportResult result = readImportPupitri(trunkFile, carrouselFile, operation); return saveImportPupitri(trunkFile, carrouselFile, operation, catchBatch, result); @@ -167,7 +187,7 @@ public class PupitriImportService extends AbstractTuttiService { PupitriImportResult result = new PupitriImportResult(); importPupitriTrunk(result, trunkFile, operation); - importPupitriCarrousel(result, carrouselFile, operation); + importPupitriCarrousel(result, carrouselFile, operation, importMissingCategoryBatches); return result; } @@ -196,7 +216,7 @@ public class PupitriImportService extends AbstractTuttiService { try { // persistence des lots - savePupitriImportResult(result, operation, catchBatch); + savePupitriImportResult(result, operation, catchBatch, importMissingCategoryBatches); // ajout des pièces-jointes addFileAsAttachment(trunkFile, catchBatch); @@ -244,7 +264,7 @@ public class PupitriImportService extends AbstractTuttiService { } - protected void addCatchEntry(TaxonCache taxonCache, PupitriSpeciesContext aCatch, PupitriImportReportModel reportModel) { + protected void addCatchEntry(TaxonCache taxonCache, PupitriSpeciesContext aCatch, PupitriImportReportModel reportModel) { Species species = aCatch.getSpecies(); taxonCache.load(species); @@ -338,7 +358,10 @@ public class PupitriImportService extends AbstractTuttiService { } - protected void importPupitriCarrousel(PupitriImportResult result, File carrouselFile, FishingOperation operation) { + protected void importPupitriCarrousel(PupitriImportResult result, + File carrouselFile, + FishingOperation operation, + boolean importMissingCategoryBatches) { if (log.isInfoEnabled()) { log.info("Will import pupitri operation [" + operation.toString() + @@ -346,14 +369,18 @@ public class PupitriImportService extends AbstractTuttiService { } // process import file - CarrouselImportRequestResult carrouselImportRequestResult = processCarrouselImportFile(carrouselFile, operation); + CarrouselImportRequestResult carrouselImportRequestResult = processCarrouselImportFile(carrouselFile, + operation, + importMissingCategoryBatches); // save it to global result result.flushCarrouselResult(carrouselImportRequestResult); } - protected CarrouselImportRequestResult processCarrouselImportFile(File carrouselFile, FishingOperation operation) { + protected CarrouselImportRequestResult processCarrouselImportFile(File carrouselFile, + FishingOperation operation, + boolean importMissingCategoryBatches) { // get the map of species by survey code or reftax code ListMultimap<String, Species> speciesBySurveyCode = ArrayListMultimap.create(); @@ -373,7 +400,7 @@ public class PupitriImportService extends AbstractTuttiService { for (CarrouselRow bean : importer) { - importCarrouselRow(result, operation, bean); + importCarrouselRow(result, operation, bean, importMissingCategoryBatches); } } @@ -392,7 +419,10 @@ public class PupitriImportService extends AbstractTuttiService { } - protected void importCarrouselRow(CarrouselImportRequestResult result, FishingOperation operation, CarrouselRow bean) { + protected void importCarrouselRow(CarrouselImportRequestResult result, + FishingOperation operation, + CarrouselRow bean, + boolean importMissingCategoryBatches) { if (!bean.acceptOperation(operation)) { @@ -440,7 +470,9 @@ public class PupitriImportService extends AbstractTuttiService { // creation d'un nouveau lot (par rapport au tuple (espece, trie)) // ou bien recuperation d'un lot deja existant - PupitriSpeciesContext pupitriSpeciesContext = result.getOrCreateCatch(speciesList, sorted); + PupitriSpeciesContext pupitriSpeciesContext = result.getOrCreateCatch(speciesList, + importMissingCategoryBatches, + sorted); // ajout des données (type de box, poids) au signe donne dans le lot pupitriSpeciesContext.addToSignContext(bean.getSign(), bean.getBoxType(), beanWeight); @@ -451,7 +483,8 @@ public class PupitriImportService extends AbstractTuttiService { protected void savePupitriImportResult(PupitriImportResult result, FishingOperation operation, - CatchBatch catchBatch) { + CatchBatch catchBatch, + boolean importMissingCategoryBatches) { catchBatch.setCatchTotalSortedTremisWeight(result.getSortedWeight()); catchBatch.setCatchTotalRejectedWeight(result.getRejectedWeight()); @@ -467,6 +500,25 @@ public class PupitriImportService extends AbstractTuttiService { // insert all imported species batches + TuttiProtocol protocol = dataContext.getProtocol(); + + // especes à sexer + Collection<String> surveyCodesToSex = + TuttiProtocols.getSurveyCodeWhoseCategoryIsMandatory(protocol, + persistenceService.getSexCaracteristic()); + + // especes à trier par taille + Collection<String> surveyCodesToSize = + TuttiProtocols.getSurveyCodeWhoseCategoryIsMandatory(protocol, + persistenceService.getSizeCategoryCaracteristic()); + + // especes à sexer et trier par taille + Collection<String> surveyCodesToSexAndSize = CollectionUtils.intersection(surveyCodesToSex, surveyCodesToSize); + + // on ne veut que les espèces qu'il faut soit sexer soit trier par taille + surveyCodesToSex.removeAll(surveyCodesToSexAndSize); + surveyCodesToSize.removeAll(surveyCodesToSexAndSize); + String melagComment = result.getMelagComment(); Decorator<Species> speciesDecorator = decoratorService.getDecoratorByType(Species.class); @@ -499,7 +551,6 @@ public class PupitriImportService extends AbstractTuttiService { for (Signs signs : pupitriSpeciesContext.getSigns()) { - boolean addMelagComment = pupitriSpeciesContext.isAddMelagComment(signs); float catchWeight = pupitriSpeciesContext.getWeight(signs); @@ -530,7 +581,6 @@ public class PupitriImportService extends AbstractTuttiService { log.info("Create a unique batch for species " + speciesStr + " with total weight: " + totalWeight); } - SpeciesBatch batch = createSpeciesBatch(operation, species, totalWeight, @@ -545,7 +595,40 @@ public class PupitriImportService extends AbstractTuttiService { batch.setComment(melagComment); } - persistenceService.createSpeciesBatch(batch, null, true); + batch = persistenceService.createSpeciesBatch(batch, null, true); + + if (importMissingCategoryBatches) { + + String parentBatchId = batch.getId(); + String speciesId = species.getSurveyCode(); + + List<Signs> signs2add = null; + + if (surveyCodesToSex.contains(speciesId)) { + + signs2add = Lists.newArrayList(Signs.MALE, Signs.FEMALE, Signs.DEFAULT); + + } else if (surveyCodesToSize.contains(speciesId)) { + + signs2add = Lists.newArrayList(Signs.SMALL, Signs.BIG); + } + + if (signs2add != null) { + for (Signs signs : signs2add) { + + Integer categoryId = signs.getCategory(); + CaracteristicQualitativeValue splitCqv = signsToCaracteristicValue.get(signs); + SpeciesBatch childBatch = createSpeciesBatch( + operation, + species, + null, + categoryId, + splitCqv); + + persistenceService.createSpeciesBatch(childBatch, parentBatchId, true); + } + } + } } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java index 841c777..efe388c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java @@ -87,10 +87,13 @@ public class PupitriSpeciesContext implements Serializable { */ protected final TreeMap<Signs, PupitriSignContext> signs; - public PupitriSpeciesContext(Species species, boolean sorted) { + protected boolean createMissingSigns; + + public PupitriSpeciesContext(Species species, boolean createMissingSigns, boolean sorted) { this.species = species; this.sorted = sorted; this.signs = new TreeMap<>(); + this.createMissingSigns = createMissingSigns; } public Species getSpecies() { @@ -144,7 +147,7 @@ public class PupitriSpeciesContext implements Serializable { public void addToSignContext(Signs sign, BoxType boxType, Float weight) { - PupitriSignContext signContext = getOrCreateSignContext(sign, true); + PupitriSignContext signContext = getOrCreateSignContext(sign); signContext.addWeight(weight); switch (boxType) { case SMALL: @@ -155,12 +158,30 @@ public class PupitriSpeciesContext implements Serializable { break; } + // cf #6116 + switch (sign) { + case MALE: + getOrCreateSignContext(Signs.FEMALE); + getOrCreateSignContext(Signs.DEFAULT); + break; + case FEMALE: + getOrCreateSignContext(Signs.MALE); + getOrCreateSignContext(Signs.DEFAULT); + break; + + case SMALL: + getOrCreateSignContext(Signs.BIG); + break; + case BIG: + getOrCreateSignContext(Signs.SMALL); + break; + } } public void setMelagElevatedWeight(Signs melagElevatedSign, Float weight) { PupitriSignContext melagContext = getSignContext(Signs.MELAG); - PupitriSignContext pupitriSignContext = getOrCreateSignContext(melagElevatedSign, true); + PupitriSignContext pupitriSignContext = getOrCreateSignContext(melagElevatedSign); pupitriSignContext.addWeight(weight); //FIXME Check this??? pupitriSignContext.addNbBoxs(melagContext); @@ -174,7 +195,7 @@ public class PupitriSpeciesContext implements Serializable { PupitriSignContext melagContext = getSignContext(Signs.MELAG); - PupitriSignContext defaultSignContext = getOrCreateSignContext(Signs.DEFAULT, true); + PupitriSignContext defaultSignContext = getOrCreateSignContext(Signs.DEFAULT); defaultSignContext.addWeight(melagContext.getWeight()); //FIXME Check this??? defaultSignContext.addNbBoxs(melagContext); @@ -272,33 +293,13 @@ public class PupitriSpeciesContext implements Serializable { return signs.get(sign); } - private PupitriSignContext getOrCreateSignContext(Signs sign, boolean createOtherCategorySigns) { + private PupitriSignContext getOrCreateSignContext(Signs sign) { + PupitriSignContext signContext = getSignContext(sign); if (signContext == null) { signContext = new PupitriSignContext(sign); signs.put(sign, signContext); } - - if (createOtherCategorySigns) { - // cf #6116 - - switch (sign) { - case MALE: - getOrCreateSignContext(Signs.FEMALE, false); - break; - case FEMALE: - getOrCreateSignContext(Signs.MALE, false); - break; - case BIG: - getOrCreateSignContext(Signs.SMALL, false); - break; - case SMALL: - getOrCreateSignContext(Signs.BIG, false); - break; - - } - } - return signContext; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java index fc14abb..1a682ee 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java @@ -194,7 +194,8 @@ public class ImportPupitriAction extends LongActionSupport<SpeciesBatchUIModel, importedCarrouselFile, operation, catchBatch, - importResult); + importResult, + true); if (importResult.isFishingOperationFound()) { -- 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 feature/6116 in repository tutti. See http://git.codelutin.com/tutti.git commit ae09213e820564a4e68e51b6fa95b9e3b4267843 Author: Kevin Morin <morin@codelutin.com> Date: Tue Jan 12 18:24:04 2016 +0100 ajout de la conf dans l'ui (fixes #6116) --- .../java/fr/ifremer/tutti/TuttiConfiguration.java | 4 ++ .../fr/ifremer/tutti/TuttiConfigurationOption.java | 8 +++ .../i18n/tutti-persistence_en_GB.properties | 1 + .../i18n/tutti-persistence_fr_FR.properties | 1 + .../service/pupitri/PupitriSpeciesContext.java | 34 ++++----- .../swing/content/config/TuttiConfigUIHandler.java | 4 ++ .../catches/species/ImportPupitriPopupUI.css | 9 +++ .../catches/species/ImportPupitriPopupUI.jaxx | 24 +++++-- .../species/ImportPupitriPopupUIHandler.java | 82 +++++++++++++--------- .../catches/species/ImportPupitriPopupUIModel.java | 54 ++++++++++++++ .../species/actions/ImportPupitriAction.java | 19 ++++- .../resources/i18n/tutti-ui-swing_en_GB.properties | 4 ++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 4 ++ 13 files changed, 189 insertions(+), 59 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java index 905245c..4d95ce7 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java @@ -580,6 +580,10 @@ public class TuttiConfiguration extends ApplicationConfiguration { return applicationConfig.getOptionAsFloat(TuttiConfigurationOption.TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE.getKey()); } + public boolean getPupitriImportMissingBatches() { + return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.PUPITRI_IMPORT_MISSING_BATCHES.getKey()); + } + public String getTremieCarousselVesselId() { return applicationConfig.getOption(TuttiConfigurationOption.TREMIE_CAROUSSEL_VESSEL_ID.getKey()); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java index 7b406a8..9cdb4f7 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java @@ -391,6 +391,14 @@ public enum TuttiConfigurationOption implements ConfigOptionDef { false ), + PUPITRI_IMPORT_MISSING_BATCHES( + "tutti.pupitriImportMissingBatches", + n("tutti.config.option.pupitriImportMissingBatches.description"), + "false", + Boolean.class, + false + ), + TREMIE_CAROUSSEL_VESSEL_ID( "tutti.tremieCarousselVessel", n("tutti.config.option.tremieCarousselVessel.description"), diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties index 0d2bf90..5a20bce 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties @@ -45,6 +45,7 @@ tutti.config.option.persistence.showBatchLog.description= tutti.config.option.persistence.showMemoryUsage.description= tutti.config.option.programId.description= tutti.config.option.protocolId.description= +tutti.config.option.pupitriImportMissingBatches.description= tutti.config.option.report.backup.directory.description= tutti.config.option.report.directory.description= tutti.config.option.report.home.directory.description= diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties index 935293d..d817e42 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties @@ -41,6 +41,7 @@ tutti.config.option.persistence.showBatchLog.description=Pour afficher dans les tutti.config.option.persistence.showMemoryUsage.description=Voir l'utilisation de la mémoire tutti.config.option.programId.description=Identifiant de la dernière série de campagne utilisée tutti.config.option.protocolId.description=Identifiant du dernier protocole utilisé +tutti.config.option.pupitriImportMissingBatches.description=Créer les lots mâle, femelle et indéterminé ou petit, gros s'ils ne sont pas présents dans l'import Pupitri tutti.config.option.report.backup.directory.description=Répertoire contenant les rapports générés tutti.config.option.report.directory.description=Répertoire contenant les modèles de rapports tutti.config.option.report.home.directory.description=Répertoire contenant la structure nécessaire pour les rapport diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java index efe388c..54aabaf 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java @@ -159,22 +159,24 @@ public class PupitriSpeciesContext implements Serializable { } // cf #6116 - switch (sign) { - case MALE: - getOrCreateSignContext(Signs.FEMALE); - getOrCreateSignContext(Signs.DEFAULT); - break; - case FEMALE: - getOrCreateSignContext(Signs.MALE); - getOrCreateSignContext(Signs.DEFAULT); - break; - - case SMALL: - getOrCreateSignContext(Signs.BIG); - break; - case BIG: - getOrCreateSignContext(Signs.SMALL); - break; + if (createMissingSigns) { + switch (sign) { + case MALE: + getOrCreateSignContext(Signs.FEMALE); + getOrCreateSignContext(Signs.DEFAULT); + break; + case FEMALE: + getOrCreateSignContext(Signs.MALE); + getOrCreateSignContext(Signs.DEFAULT); + break; + + case SMALL: + getOrCreateSignContext(Signs.BIG); + break; + case BIG: + getOrCreateSignContext(Signs.SMALL); + break; + } } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java index 8592b5b..9914e08 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java @@ -157,6 +157,10 @@ public class TuttiConfigUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, .addOption(TuttiConfigurationOption.IMPORT_DB_SKIP_BACKUP) .setOptionShortLabel(t("tutti.config.option.ui.db.import.skipBackup.shortLabel")) + .addOption(TuttiConfigurationOption.PUPITRI_IMPORT_MISSING_BATCHES) + .setOptionShortLabel(t("tutti.config.option.pupitriImportMissingBatches.shortLabel")) + + ; TuttiUIContext context = getContext(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.css index 3b0de25..7fa4b71 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.css @@ -39,6 +39,7 @@ FileEditor { #trunkFile { exts: {t("tutti.importPupitri.trunkFile.extension")}; extsDescription: {t("tutti.importPupitri.trunkFile.extension.description")}; + selectedFile: { model.getTrunkFile() }; } #carrouselFileLabel { @@ -49,6 +50,14 @@ FileEditor { #carrouselFile { exts: {t("tutti.importPupitri.carrouselFile.extension")}; extsDescription: {t("tutti.importPupitri.carrouselFile.extension.description")}; + selectedFile: { model.getCarrouselFile() }; +} + +#importMissingBatches { + text: "tutti.importPupitri.importMissingBatches"; + toolTipText: "tutti.importPupitri.importMissingBatches.tip"; + i18nMnemonic: "tutti.importPupitri.importMissingBatches.mnemonic"; + selected: { model.isImportMissingBatches() }; } #cancelButton { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.jaxx index 1e88b04..44e518d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.jaxx @@ -19,10 +19,12 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<JDialog id='importPupitriDialog' layout='{new BorderLayout()}'> +<JDialog id='importPupitriDialog' layout='{new BorderLayout()}' + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<ImportPupitriPopupUIModel, ImportPupitriPopupUIHandler>'> <import> fr.ifremer.tutti.ui.swing.TuttiUIContext + fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil jaxx.runtime.swing.editor.FileEditor @@ -30,9 +32,9 @@ <script><![CDATA[ -public ImportPupitriPopupUI(TuttiUIContext context) { - super(context.getMainUI()); - TuttiUIUtil.setApplicationContext(this, context); + +public ImportPupitriPopupUI(TuttiUI<?,?> parentUI) { + TuttiUIUtil.setParentUI(this, parentUI); } public void open() { @@ -40,6 +42,9 @@ public void open() { } ]]></script> + <ImportPupitriPopupUIModel id='model' + initializer='getContextValue(ImportPupitriPopupUIModel.class)'/> + <Table id='mainPanel' fill='both'> <row> @@ -47,7 +52,7 @@ public void open() { <JLabel id='trunkFileLabel'/> </cell> <cell weightx='1'> - <FileEditor id='trunkFile' onActionPerformed='handler.updateCarrouselFile()'/> + <FileEditor id='trunkFile' onActionPerformed='handler.setFile(event, ImportPupitriPopupUIModel.PROPERTY_TRUNK_FILE)'/> </cell> </row> @@ -56,7 +61,14 @@ public void open() { <JLabel id='carrouselFileLabel'/> </cell> <cell weightx='1'> - <FileEditor id='carrouselFile' onActionPerformed='handler.updateTrunkFile()'/> + <FileEditor id='carrouselFile' onActionPerformed='handler.setFile(event, ImportPupitriPopupUIModel.PROPERTY_CARROUSEL_FILE)'/> + </cell> + </row> + + <row> + <cell columns='2'> + <JCheckBox id='importMissingBatches' + onItemStateChanged='handler.setBoolean(event, ImportPupitriPopupUIModel.PROPERTY_IMPORT_MISSING_BATCHES)'/> </cell> </row> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIHandler.java index d4a6cf1..869ba20 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIHandler.java @@ -23,13 +23,16 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species; */ import com.google.common.io.Files; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import jaxx.runtime.SwingUtil; -import jaxx.runtime.spi.UIHandler; +import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import javax.swing.JComponent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.io.File; /** @@ -37,39 +40,65 @@ import java.io.File; * @author tchemit <chemit@codelutin.com> * @since 0.2 */ -public class ImportPupitriPopupUIHandler implements UIHandler<ImportPupitriPopupUI> { +public class ImportPupitriPopupUIHandler extends AbstractTuttiUIHandler<ImportPupitriPopupUIModel, ImportPupitriPopupUI> { /** Logger. */ private static final Log log = LogFactory.getLog(ImportPupitriPopupUIHandler.class); - protected ImportPupitriPopupUI ui; - @Override public void beforeInit(ImportPupitriPopupUI ui) { - this.ui = ui; + super.beforeInit(ui); + + ImportPupitriPopupUIModel model = new ImportPupitriPopupUIModel(); + boolean pupitriImportMissingBatches = getConfig().getPupitriImportMissingBatches(); + model.setImportMissingBatches(pupitriImportMissingBatches); + + ui.setContextValue(model); } @Override public void afterInit(ImportPupitriPopupUI ui) { + initUI(ui); ui.getTrunkFile().setDialogOwner(ui); ui.getCarrouselFile().setDialogOwner(ui); ui.pack(); ui.setResizable(true); - TuttiUIUtil.initButton(TuttiUIContext.getApplicationContext(), ui, ui.getCancelButton()); - TuttiUIUtil.initButton(TuttiUIContext.getApplicationContext(), ui, ui.getValidateButton()); + getModel().addPropertyChangeListener(ImportPupitriPopupUIModel.PROPERTY_TRUNK_FILE, new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + updateCarrouselFile(); + } + }); + + getModel().addPropertyChangeListener(ImportPupitriPopupUIModel.PROPERTY_CARROUSEL_FILE, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + updateTrunkFile(); + } + }); } - private boolean objectIsAdjusting; + @Override + protected JComponent getComponentToFocus() { + return ui.getTrunkFile(); + } - public void updateTrunkFile() { + @Override + public void onCloseUI() { + resetFields(); + } - if (objectIsAdjusting) { - // avoid re-entrant code - return; - } - File carrouselFile = ui.getCarrouselFile().getSelectedFile(); + @Override + public SwingValidator<ImportPupitriPopupUIModel> getValidator() { + return null; + } + + protected void updateTrunkFile() { + + File carrouselFile = getModel().getCarrouselFile(); if (carrouselFile != null) { String nameWithoutExtension = Files.getNameWithoutExtension(carrouselFile.getName()); @@ -80,12 +109,7 @@ public class ImportPupitriPopupUIHandler implements UIHandler<ImportPupitriPopup log.info("Select from carrousel file, trunk file: " + trunkFile); } - objectIsAdjusting = true; - try { - ui.getTrunkFile().setSelectedFile(trunkFile); - } finally { - objectIsAdjusting = false; - } + getModel().setTrunkFile(trunkFile); } else { if (log.isDebugEnabled()) { @@ -96,14 +120,9 @@ public class ImportPupitriPopupUIHandler implements UIHandler<ImportPupitriPopup } - public void updateCarrouselFile() { + protected void updateCarrouselFile() { - if (objectIsAdjusting) { - // avoid re-entrant code - return; - } - - File trunkFile = ui.getTrunkFile().getSelectedFile(); + File trunkFile = getModel().getTrunkFile(); if (trunkFile != null) { String nameWithoutExtension = Files.getNameWithoutExtension(trunkFile.getName()); File carrouselFile = new File(trunkFile.getParentFile(), nameWithoutExtension + ".car"); @@ -113,12 +132,7 @@ public class ImportPupitriPopupUIHandler implements UIHandler<ImportPupitriPopup log.info("Select from trunk file, carrousel file: " + carrouselFile); } - objectIsAdjusting = true; - try { - ui.getCarrouselFile().setSelectedFile(carrouselFile); - } finally { - objectIsAdjusting = false; - } + getModel().setCarrouselFile(carrouselFile); } else { if (log.isDebugEnabled()) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIModel.java new file mode 100644 index 0000000..8fb0586 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIModel.java @@ -0,0 +1,54 @@ +package fr.ifremer.tutti.ui.swing.content.operation.catches.species; + +import org.jdesktop.beans.AbstractSerializableBean; + +import java.io.File; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.3 + */ +public class ImportPupitriPopupUIModel extends AbstractSerializableBean { + + public static final String PROPERTY_TRUNK_FILE = "trunkFile"; + + public static final String PROPERTY_CARROUSEL_FILE = "carrouselFile"; + + public static final String PROPERTY_IMPORT_MISSING_BATCHES = "importMissingBatches"; + + protected File trunkFile; + + protected File carrouselFile; + + protected boolean importMissingBatches; + + public File getTrunkFile() { + return trunkFile; + } + + public void setTrunkFile(File trunkFile) { + Object oldValue = getTrunkFile(); + this.trunkFile = trunkFile; + firePropertyChange(PROPERTY_TRUNK_FILE, oldValue, trunkFile); + } + + public File getCarrouselFile() { + return carrouselFile; + } + + public void setCarrouselFile(File carrouselFile) { + Object oldValue = getCarrouselFile(); + this.carrouselFile = carrouselFile; + firePropertyChange(PROPERTY_CARROUSEL_FILE, oldValue, carrouselFile); + } + + public boolean isImportMissingBatches() { + return importMissingBatches; + } + + public void setImportMissingBatches(boolean importMissingBatches) { + Object oldValue = isImportMissingBatches(); + this.importMissingBatches = importMissingBatches; + firePropertyChange(PROPERTY_IMPORT_MISSING_BATCHES, oldValue, importMissingBatches); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java index 1a682ee..30ba626 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java @@ -31,6 +31,12 @@ import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.pupitri.PupitriImportResult; import fr.ifremer.tutti.service.pupitri.PupitriImportService; +<<<<<<< HEAD +======= +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.ImportPupitriPopupUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.actions.EditFishingOperationAction; +>>>>>>> ajout de la conf dans l'ui (fixes #6116) import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; @@ -69,6 +75,8 @@ public class ImportPupitriAction extends LongActionSupport<SpeciesBatchUIModel, protected File importedCarrouselFile; + protected boolean importMissingBatches; + protected PersistenceService persistenceService; protected EditFishingOperationAction editAction; @@ -137,10 +145,14 @@ public class ImportPupitriAction extends LongActionSupport<SpeciesBatchUIModel, if (result) { - ImportPupitriPopupUI importPupitriDialog = new ImportPupitriPopupUI(handler.getContext()); + ImportPupitriPopupUI importPupitriDialog = new ImportPupitriPopupUI(getUI()); importPupitriDialog.open(); - importedTrunkFile = importPupitriDialog.getTrunkFile().getSelectedFile(); - importedCarrouselFile = importPupitriDialog.getCarrouselFile().getSelectedFile(); + + ImportPupitriPopupUIModel importPupitriDialogModel = importPupitriDialog.getModel(); + importedTrunkFile = importPupitriDialogModel.getTrunkFile(); + importedCarrouselFile = importPupitriDialogModel.getCarrouselFile(); + importMissingBatches = importPupitriDialogModel.isImportMissingBatches(); + result = importedTrunkFile != null && importedCarrouselFile != null; } @@ -208,6 +220,7 @@ public class ImportPupitriAction extends LongActionSupport<SpeciesBatchUIModel, public void releaseAction() { importedTrunkFile = null; importedCarrouselFile = null; + importMissingBatches = false; super.releaseAction(); } diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 4491961..5fbb92f 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -142,6 +142,7 @@ tutti.config.option.persistence.db.directory.shortLabel= tutti.config.option.persistence.db.enumerationPath.shortLabel= tutti.config.option.persistence.db.protocol.directory.shortLabel= tutti.config.option.persistence.jdbc.url.shortLabel= +tutti.config.option.pupitriImportMissingBatches.shortLabel= tutti.config.option.service.export.backup.directory.shortLabel= tutti.config.option.service.genericFormat.export.backup.directory.shortLabel= tutti.config.option.service.report.backup.directory.shortLabel= @@ -1671,6 +1672,9 @@ tutti.importPupitri.error.fileMissing.message= tutti.importPupitri.error.fileMissing.title= tutti.importPupitri.field.carrouselFile= tutti.importPupitri.field.trunkFile= +tutti.importPupitri.importMissingBatches= +tutti.importPupitri.importMissingBatches.mnemonic= +tutti.importPupitri.importMissingBatches.tip= tutti.importPupitri.melagWeight.field= tutti.importPupitri.melagWeight.field.melagWeight= tutti.importPupitri.melagWeight.message= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index df9bf99..c167ced 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -124,6 +124,7 @@ tutti.config.option.persistence.db.directory.shortLabel=Répertoire de la base d tutti.config.option.persistence.db.enumerationPath.shortLabel=Chemin vers le fichier constantes adagio tutti.config.option.persistence.db.protocol.directory.shortLabel=Répertoire des protocoles tutti.config.option.persistence.jdbc.url.shortLabel=Url jdbc de connexion +tutti.config.option.pupitriImportMissingBatches.shortLabel=Créer les lots manquants lors de l'import Pupitri tutti.config.option.service.export.backup.directory.shortLabel=Répertoire des sauvegardes d'export générique tutti.config.option.service.genericFormat.export.backup.directory.shortLabel=Répertoire des sauvegardes de rapport d'import générique tutti.config.option.service.report.backup.directory.shortLabel=Répertoire des sauvegardes de rapport @@ -1585,6 +1586,9 @@ tutti.importPupitri.error.fileMissing.message=Vous devez sélectionner un fichie tutti.importPupitri.error.fileMissing.title=Fichier non renseigné tutti.importPupitri.field.carrouselFile=Fichier du carrousel tutti.importPupitri.field.trunkFile=Fichier du trémie +tutti.importPupitri.importMissingBatches=Créer les lots de sexe ou de classe de tri manquants +tutti.importPupitri.importMissingBatches.mnemonic=l +tutti.importPupitri.importMissingBatches.tip=Créer les lots mâle, femelle et indéterminé ou petit, gros s'ils ne sont pas présents dans l'import tutti.importPupitri.melagWeight.field=Poids total du melag tutti.importPupitri.melagWeight.message=Du melag a été détecté lors de l'import, veuillez saisir le poids total du melag. tutti.importPupitri.melagWeight.title=Melag détecté -- 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 feature/6116 in repository tutti. See http://git.codelutin.com/tutti.git commit ef240adc1b1e0d9d3931f0aa675b09ab5af160f3 Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 13 10:38:26 2016 +0100 ajout de test + création des lots manquants avec des poids nuls (fixes #6116) --- .../service/pupitri/PupitriImportService.java | 2 +- .../pupitri/PupitriImportServiceEvo6116Test.java | 293 +++++++++++++++++++++ .../src/test/resources/pupitri/evo-6116.car | 7 + .../src/test/resources/pupitri/evo-6116.tnk | 32 +++ .../test/resources/pupitri/evo-6116.tuttiProtocol | 198 ++++++++++++++ 5 files changed, 531 insertions(+), 1 deletion(-) 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 c4afb4c..c37edf6 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 @@ -559,7 +559,7 @@ public class PupitriImportService extends AbstractTuttiService { SpeciesBatch childBatch = createSpeciesBatch( operation, species, - catchWeight, + Weights.isNullOrZero(catchWeight) ? null : catchWeight, categoryId, splitCqv); diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo6116Test.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo6116Test.java new file mode 100644 index 0000000..9fcb52a --- /dev/null +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo6116Test.java @@ -0,0 +1,293 @@ +package fr.ifremer.tutti.service.pupitri; + +/* + * #%L + * Tutti :: Service + * $Id:$ + * $HeadURL:$ + * %% + * Copyright (C) 2012 - 2014 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +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.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.referential.Species; +import org.apache.commons.io.FileUtils; +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 PupitriImportServiceEvo6116Test extends PupitryImportServiceTestSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(PupitriImportServiceEvo6116Test.class); + + @Test + public void importPupitri() throws IOException { + + File trunk = dbResource.copyClassPathResource("pupitri/evo-6116.tnk", "pupitri.tnk"); + File carroussel = dbResource.copyClassPathResource("pupitri/evo-6116.car", "pupitri.car"); + dbResource.loadInternalProtocolFile("pupitri/", "evo-6116"); + + 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, true); + Assert.assertTrue(pupitriImportResult.isFishingOperationFound()); + int nbNotAdded = pupitriImportResult.getNbCarrousselNotImported(); + Assert.assertEquals(0, nbNotAdded); + + // copy result file into temp directory to check it after the test ends + String reportAttachmentId = pupitriImportResult.getReportAttachmentId(); + File attachmentFile = persistenceService.getAttachmentFile(reportAttachmentId); + File destFile = new File(FileUtils.getTempDirectory(), pupitriImportResult.getReportAttachmentFilename()); + FileUtils.copyFile(attachmentFile, destFile); + log.info("Generated report copied to " + destFile.getPath()); + + BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId(), false); + Assert.assertEquals(7, rootSpeciesBatchAfter.sizeChildren()); + + /* + MERL-MCC un lot VRAC 0 (100Kg) + TRAC-TRU un lot VRAC 0 (25kg) + ACANPAL un lot VRAC 0 (25Kg) + ENGR-ENC un lot HV 0 75Kg + MERL-MCC un lot HV 2 (100Kg) + TRAC-TRU un lot HV G (25kg) + ACANPAL un lot HV 1 (25Kg) + */ + Set<Integer> expectedSpecies = Sets.newHashSet( + + 16994, // MERL-MCC + 17116, // TRAC-TRU + 16816, // ENGR-ENC + 17186 // ACANPAL + ); + + + Predicate<SpeciesAbleBatch> batchVracPredicate = SpeciesAbleBatchs.newSpeciesAbleBatchCategoryPredicate( + PmfmId.SORTED_UNSORTED.getValue(), + QualitativeValueId.SORTED_VRAC.getValue()); + + Predicate<SpeciesAbleBatch> batchHorsVracPredicate = SpeciesAbleBatchs.newSpeciesAbleBatchCategoryPredicate( + PmfmId.SORTED_UNSORTED.getValue(), + QualitativeValueId.SORTED_HORS_VRAC.getValue()); + + + Predicate<SpeciesAbleBatch> bigPredicate = SpeciesAbleBatchs.newSpeciesAbleBatchCategoryPredicate( + PmfmId.SIZE_CATEGORY.getValue(), + QualitativeValueId.SIZE_BIG.getValue()); + + Predicate<SpeciesAbleBatch> smallPredicate = SpeciesAbleBatchs.newSpeciesAbleBatchCategoryPredicate( + PmfmId.SIZE_CATEGORY.getValue(), + QualitativeValueId.SIZE_SMALL.getValue()); + + Predicate<SpeciesAbleBatch> malePredicate = SpeciesAbleBatchs.newSpeciesAbleBatchCategoryPredicate( + PmfmId.SEX.getValue(), + QualitativeValueId.SEX_MALE.getValue()); + + Predicate<SpeciesAbleBatch> femalePredicate = SpeciesAbleBatchs.newSpeciesAbleBatchCategoryPredicate( + PmfmId.SEX.getValue(), + QualitativeValueId.SEX_FEMALE.getValue()); + + Predicate<SpeciesAbleBatch> undefinedPredicate = SpeciesAbleBatchs.newSpeciesAbleBatchCategoryPredicate( + PmfmId.SEX.getValue(), + QualitativeValueId.SEX_UNDEFINED.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 (16816 == speciesId) { + + // un lot HV 75Kg + Assert.assertTrue(batchHorsVracPredicate.apply(speciesBatch)); + Assert.assertTrue(speciesBatch.isChildBatchsEmpty()); + Assert.assertEquals(75, speciesBatch.getSampleCategoryWeight(), 0.001); + continue; + + } + if (16994 == speciesId) { + + // un lot VRAC (100kg) sans fils + // un lot HV (sans poids) avec 3 fils + // un M (sans poids) + // un F (100Kg) + // un 0 (sans poids) + + if (batchVracPredicate.apply(speciesBatch)) { + Assert.assertTrue(speciesBatch.isChildBatchsEmpty()); + Assert.assertEquals(100, speciesBatch.getSampleCategoryWeight(), 0.001); + + } else { + Assert.assertEquals(3, speciesBatch.sizeChildBatchs()); + Assert.assertNull(speciesBatch.getSampleCategoryWeight()); + + { + SpeciesBatch child = speciesBatch.getChildBatchs(0); + Assert.assertTrue(malePredicate.apply(child)); + Assert.assertNull(child.getSampleCategoryWeight()); + } + { + SpeciesBatch child = speciesBatch.getChildBatchs(1); + Assert.assertTrue(femalePredicate.apply(child)); + Assert.assertEquals(100, child.getSampleCategoryWeight(), 0.001); + } + { + SpeciesBatch child = speciesBatch.getChildBatchs(2); + Assert.assertTrue(undefinedPredicate.apply(child)); + Assert.assertNull(child.getSampleCategoryWeight()); + } + } + + continue; + } + + if (17116 == speciesId) { + + // un lot VRAC (25kg) avec 2 fils + // un P (sans poids) + // un G (sans poids) + // un lot HV (sans poids) avec 2 fils + // un P (sans poids) + // un G (25Kg) + + if (batchVracPredicate.apply(speciesBatch)) { + Assert.assertEquals(2, speciesBatch.sizeChildBatchs()); + Assert.assertEquals(25, speciesBatch.getSampleCategoryWeight(), 0.001); + + { + SpeciesBatch child = speciesBatch.getChildBatchs(0); + Assert.assertTrue(smallPredicate.apply(child)); + Assert.assertNull(child.getSampleCategoryWeight()); + } + { + SpeciesBatch child = speciesBatch.getChildBatchs(1); + Assert.assertTrue(bigPredicate.apply(child)); + Assert.assertEquals(25, child.getSampleCategoryWeight(), 0.001); + } + + } else { + Assert.assertEquals(2, speciesBatch.sizeChildBatchs()); + Assert.assertNull(speciesBatch.getSampleCategoryWeight()); + + { + SpeciesBatch child = speciesBatch.getChildBatchs(0); + Assert.assertTrue(smallPredicate.apply(child)); + Assert.assertNull(child.getSampleCategoryWeight()); + } + { + SpeciesBatch child = speciesBatch.getChildBatchs(1); + Assert.assertTrue(bigPredicate.apply(child)); + Assert.assertEquals(25, child.getSampleCategoryWeight(), 0.001); + } + } + + continue; + } + + if (17186 == speciesId) { + + // un lot VRAC (25kg) avec 3 fils + // un M (sans poids) + // un F (sans poids) + // un 0 (sans poids) + // un lot HV (sans poids) avec 3 fils + // un M (25Kg) + // un F (sans poids) + // un 0 (sans poids) + + if (batchVracPredicate.apply(speciesBatch)) { + Assert.assertEquals(3, speciesBatch.sizeChildBatchs()); + Assert.assertEquals(25, speciesBatch.getSampleCategoryWeight(), 0.001); + + { + SpeciesBatch child = speciesBatch.getChildBatchs(0); + Assert.assertTrue(malePredicate.apply(child)); + Assert.assertNull(child.getSampleCategoryWeight()); + } + { + SpeciesBatch child = speciesBatch.getChildBatchs(1); + Assert.assertTrue(femalePredicate.apply(child)); + Assert.assertNull(child.getSampleCategoryWeight()); + } + { + SpeciesBatch child = speciesBatch.getChildBatchs(2); + Assert.assertTrue(undefinedPredicate.apply(child)); + Assert.assertNull(child.getSampleCategoryWeight()); + } + + } else { + Assert.assertEquals(3, speciesBatch.sizeChildBatchs()); + Assert.assertNull(speciesBatch.getSampleCategoryWeight()); + + { + SpeciesBatch child = speciesBatch.getChildBatchs(0); + Assert.assertTrue(malePredicate.apply(child)); + Assert.assertEquals(25, child.getSampleCategoryWeight(), 0.001); + } + { + SpeciesBatch child = speciesBatch.getChildBatchs(1); + Assert.assertTrue(femalePredicate.apply(child)); + Assert.assertNull(child.getSampleCategoryWeight()); + } + { + SpeciesBatch child = speciesBatch.getChildBatchs(2); + Assert.assertTrue(undefinedPredicate.apply(child)); + Assert.assertNull(child.getSampleCategoryWeight()); + } + } + } + + } + + } +} \ No newline at end of file diff --git a/tutti-service/src/test/resources/pupitri/evo-6116.car b/tutti-service/src/test/resources/pupitri/evo-6116.car new file mode 100644 index 0000000..be8a678 --- /dev/null +++ b/tutti-service/src/test/resources/pupitri/evo-6116.car @@ -0,0 +1,7 @@ +$TSMES,27/11/13,13:28:27.717,BLCAR, 0,A,1,002,MERL-MCC,0,VAT,0100.0, +$TSMES,27/11/13,13:31:17.004,BLCAR, 0,A,1,001,TRAC-TRU,0,VAT,0025.0, +$TSMES,27/11/13,13:31:17.004,BLCAR, 0,A,1,001,ACANPAL,0,VAT,0025.0, +$TSMES,27/11/13,13:31:17.004,BLCAR, 0,A,1,001,ENGR-ENC,0,HOV,0075.0, +$TSMES,27/11/13,13:28:27.717,BLCAR, 0,A,1,002,MERL-MCC,2,HOV,0100.0, +$TSMES,27/11/13,13:31:17.004,BLCAR, 0,A,1,001,TRAC-TRU,G,HOV,0025.0, +$TSMES,27/11/13,13:31:17.004,BLCAR, 0,A,1,001,ACANPAL,1,HOV,0025.0, diff --git a/tutti-service/src/test/resources/pupitri/evo-6116.tnk b/tutti-service/src/test/resources/pupitri/evo-6116.tnk new file mode 100644 index 0000000..bdb8624 --- /dev/null +++ b/tutti-service/src/test/resources/pupitri/evo-6116.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-6116.tuttiProtocol b/tutti-service/src/test/resources/pupitri/evo-6116.tuttiProtocol new file mode 100644 index 0000000..23e67f6 --- /dev/null +++ b/tutti-service/src/test/resources/pupitri/evo-6116.tuttiProtocol @@ -0,0 +1,198 @@ +id: b7f7f354-8a94-4760-9a3d-d0ae3b6e84c9 +name: Protocole pupitri 6592 +caracteristicMapping: +- !CaracteristicMappingRow + pmfmId: 194 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 173 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 131 + tab: GEAR_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 230 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 850 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 851 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 857 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 858 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 859 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 782 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 881 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 882 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 861 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 883 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 884 + tab: GEAR_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 862 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 863 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 843 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 965 + tab: GEAR_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 844 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 846 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 847 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 848 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 849 + tab: VESSEL_USE_FEATURE +- !CaracteristicMappingRow + pmfmId: 828 + tab: GEAR_USE_FEATURE +comment: Protocole pour les tests 2013 avec Jean Jacques Rivoalen +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: 58a92026-9b41-4379-bbfc-62c0bd778873 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + speciesReferenceTaxonId: 2786 + speciesSurveyCode: EUPH-AUX + weightEnabled: true +- !SpeciesProtocol + id: 1a318ee8-9bb0-4ed0-a8b7-9ad6616d05a2 + calcifySampleEnabled: true + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: + - 198 + - 196 + speciesReferenceTaxonId: 1540 + speciesSurveyCode: MERL-MCC + weightEnabled: true +- !SpeciesProtocol + id: 01f69643-6fe1-443c-8d6c-29b5a52cf732 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: + - 198 + speciesReferenceTaxonId: 1662 + speciesSurveyCode: TRAC-TRU + weightEnabled: true +- !SpeciesProtocol + id: 97929e1d-199c-48de-8d83-9a874c627849 + calcifySampleEnabled: true + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 307 + speciesReferenceTaxonId: 1362 + speciesSurveyCode: ENGR-ENC + weightEnabled: true +- !SpeciesProtocol + id: d90952f1-4cf3-4841-93e9-6c22ba7b567d + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + speciesReferenceTaxonId: 1920 + speciesSurveyCode: EUTR-GUR + weightEnabled: true +- !SpeciesProtocol + id: 8d4d89bd-368e-4824-8cb5-24f23c0559d2 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: + - 198 + speciesReferenceTaxonId: 1772 + speciesSurveyCode: SCOM-SCO + weightEnabled: true +- !SpeciesProtocol + id: 59b76771-7ba4-452a-be7f-77497b7427e3 + calcifySampleEnabled: true + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: + - 198 + - 196 + speciesReferenceTaxonId: 1553 + speciesSurveyCode: MICR-POU + weightEnabled: true +- !SpeciesProtocol + id: fa297381-8022-4cb7-93a1-466bba873bb5 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + speciesReferenceTaxonId: 1415 + speciesSurveyCode: MYCT-PUN + weightEnabled: true +- !SpeciesProtocol + id: 2aa7221d-084f-4b1a-b231-73d16d4ac95d + calcifySampleEnabled: true + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + speciesReferenceTaxonId: 1551 + speciesSurveyCode: MELA-NGE + weightEnabled: true +- !SpeciesProtocol + id: c62b549b-c9cf-4119-b0e0-4d6ada3ca157 + countIfNoFrequencyEnabled: true + speciesReferenceTaxonId: 872 + speciesSurveyCode: ACAN-PEL + weightEnabled: true +- !SpeciesProtocol + id: 1b55b9fb-e17c-4248-840e-c5163963409f + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: + - 196 + speciesReferenceTaxonId: 1732 + speciesSurveyCode: ACANPAL + weightEnabled: true +version: 3 -- 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 feature/6116 in repository tutti. See http://git.codelutin.com/tutti.git commit a0916bffb802d19478a65c0fecd3f44eaa0de104 Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 13 10:58:08 2016 +0100 merge with develop --- .../service/pupitri/PupitriImportService.java | 22 ++++++++++++++-------- .../pupitri/PupitriImportServiceEvo6592Test.java | 4 ++-- .../species/actions/ImportPupitriAction.java | 14 +++++--------- 3 files changed, 21 insertions(+), 19 deletions(-) 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 c37edf6..e8954d5 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 @@ -143,20 +143,22 @@ public class PupitriImportService extends AbstractTuttiService { /** * Used merely in tests. - * @param trunkFile - * @param carrouselFile - * @param operation - * @param catchBatch - * @return + * @param trunkFile incoming trunk file + * @param carrouselFile incoming carroussle file + * @param operation target operation + * @param catchBatch target catch batch + * @return the number of rows of the .car file which have not been imported */ public PupitriImportResult importPupitri(File trunkFile, File carrouselFile, FishingOperation operation, CatchBatch catchBatch) { + return importPupitri(trunkFile, carrouselFile, operation, catchBatch, false); } /** + * Used merely in tests. * @param trunkFile incoming trunk file * @param carrouselFile incoming carroussle file * @param operation target operation @@ -170,19 +172,21 @@ public class PupitriImportService extends AbstractTuttiService { CatchBatch catchBatch, boolean importMissingCategoryBatches) { - PupitriImportResult result = readImportPupitri(trunkFile, carrouselFile, operation); - return saveImportPupitri(trunkFile, carrouselFile, operation, catchBatch, result); + PupitriImportResult result = readImportPupitri(trunkFile, carrouselFile, operation, importMissingCategoryBatches); + return saveImportPupitri(trunkFile, carrouselFile, operation, catchBatch, importMissingCategoryBatches, result); } /** * @param trunkFile incoming trunk file * @param carrouselFile incoming carroussle file * @param operation target operation + * @param importMissingCategoryBatches import or not empty batches for missing sex or size batches * @return the number of rows of the .car file which have not been imported */ public PupitriImportResult readImportPupitri(File trunkFile, File carrouselFile, - FishingOperation operation) { + FishingOperation operation, + boolean importMissingCategoryBatches) { PupitriImportResult result = new PupitriImportResult(); @@ -196,12 +200,14 @@ public class PupitriImportService extends AbstractTuttiService { * @param trunkFile incoming trunk file * @param carrouselFile incoming carroussle file * @param operation target operation + * @param importMissingCategoryBatches import or not empty batches for missing sex or size batches * @return the number of rows of the .car file which have not been imported */ public PupitriImportResult saveImportPupitri(File trunkFile, File carrouselFile, FishingOperation operation, CatchBatch catchBatch, + boolean importMissingCategoryBatches, PupitriImportResult result) { if (result.isFishingOperationFound()) { diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo6592Test.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo6592Test.java index eae13ab..3a2783c 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo6592Test.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceEvo6592Test.java @@ -71,9 +71,9 @@ public class PupitriImportServiceEvo6592Test extends PupitryImportServiceTestSup BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId(), false); Assert.assertEquals(0, rootSpeciesBatch.sizeChildren()); - PupitriImportResult pupitriImportResult = service.readImportPupitri(trunk, carroussel, operation); + PupitriImportResult pupitriImportResult = service.readImportPupitri(trunk, carroussel, operation, false); pupitriImportResult.setMelagTotalWeight(200); - pupitriImportResult = service.saveImportPupitri(trunk, carroussel, operation, catchBatch, pupitriImportResult); + pupitriImportResult = service.saveImportPupitri(trunk, carroussel, operation, catchBatch, false, pupitriImportResult); Assert.assertTrue(pupitriImportResult.isFishingOperationFound()); int nbNotAdded = pupitriImportResult.getNbCarrousselNotImported(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java index 30ba626..a7bfaa6 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java @@ -31,17 +31,12 @@ import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.pupitri.PupitriImportResult; import fr.ifremer.tutti.service.pupitri.PupitriImportService; -<<<<<<< HEAD -======= -import fr.ifremer.tutti.ui.swing.content.operation.catches.species.ImportPupitriPopupUIModel; -import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; -import fr.ifremer.tutti.ui.swing.content.operation.fishing.actions.EditFishingOperationAction; ->>>>>>> ajout de la conf dans l'ui (fixes #6116) import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.ImportPupitriMelagWeightPopupUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.ImportPupitriPopupUI; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.ImportPupitriPopupUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIHandler; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIModel; @@ -166,7 +161,8 @@ public class ImportPupitriAction extends LongActionSupport<SpeciesBatchUIModel, PupitriImportService service = getContext().getPupitriImportService(); importResult = service.readImportPupitri(importedTrunkFile, importedCarrouselFile, - operation); + operation, + importMissingBatches); result = importResult.isFishingOperationFound(); @@ -206,8 +202,8 @@ public class ImportPupitriAction extends LongActionSupport<SpeciesBatchUIModel, importedCarrouselFile, operation, catchBatch, - importResult, - true); + importMissingBatches, + importResult); if (importResult.isFishingOperationFound()) { -- 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 feature/6116 in repository tutti. See http://git.codelutin.com/tutti.git commit eaa28b632060c4aa40d45410afb79960030058ae Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 13 11:03:09 2016 +0100 ne pas mettre les lignes créées dans le rapport (fixes #6116) --- .../tutti/service/pupitri/PupitriImportService.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) 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 e8954d5..fc7e787 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 @@ -283,14 +283,17 @@ public class PupitriImportService extends AbstractTuttiService { for (Signs signs : aCatch.getSigns()) { - PupitriImportReportRow reportCatch = PupitriImportReportRow.newRow(code, - name, - vernacularCode, - aCatch.isSorted(), - aCatch.getSignContext(signs)); + PupitriSignContext signContext = aCatch.getSignContext(signs); - reportModel.addRow(reportCatch); + if (!Weights.isNullOrZero(signContext.getWeight())) { + PupitriImportReportRow reportCatch = PupitriImportReportRow.newRow(code, + name, + vernacularCode, + aCatch.isSorted(), + signContext); + reportModel.addRow(reportCatch); + } } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm