This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit b9f1339edaf1a4f82f44d8f21489a9cd4f36f642 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Nov 6 15:48:25 2016 +0100 Utilisation de la conversion taille - taille quand requis --- .../observe/entities/LengthWeightComputable.java | 5 +- .../referentiel/LengthLengthParameterTopiaDao.java | 16 ++++++ .../referentiel/LengthLengthParameters.java | 9 ++++ .../referentiel/LengthWeightParameters.java | 63 ++++++++++------------ .../observe/entities/seine/NonTargetCatchImpl.java | 6 +++ .../consolidate/ConsolidateDataServiceTopia.java | 31 +++++++++-- .../topia/entity/LengthWeightParemetersTest.java | 4 +- 7 files changed, 92 insertions(+), 42 deletions(-) diff --git a/entities/src/main/java/fr/ird/observe/entities/LengthWeightComputable.java b/entities/src/main/java/fr/ird/observe/entities/LengthWeightComputable.java index 0e2a5d6..7d8a60b 100644 --- a/entities/src/main/java/fr/ird/observe/entities/LengthWeightComputable.java +++ b/entities/src/main/java/fr/ird/observe/entities/LengthWeightComputable.java @@ -22,6 +22,7 @@ package fr.ird.observe.entities; * #L% */ +import fr.ird.observe.entities.referentiel.SizeMeasureType; import org.nuiton.topia.persistence.TopiaEntity; public interface LengthWeightComputable extends TopiaEntity { @@ -42,4 +43,6 @@ public interface LengthWeightComputable extends TopiaEntity { void setIsWeightComputed(boolean weightSource); -} //LengthWeightComputable + SizeMeasureType getSizeMeasureType(); + +} diff --git a/entities/src/main/java/fr/ird/observe/entities/referentiel/LengthLengthParameterTopiaDao.java b/entities/src/main/java/fr/ird/observe/entities/referentiel/LengthLengthParameterTopiaDao.java new file mode 100644 index 0000000..9d21663 --- /dev/null +++ b/entities/src/main/java/fr/ird/observe/entities/referentiel/LengthLengthParameterTopiaDao.java @@ -0,0 +1,16 @@ +package fr.ird.observe.entities.referentiel; + +import java.util.Optional; + +public class LengthLengthParameterTopiaDao extends AbstractLengthLengthParameterTopiaDao<LengthLengthParameter> { + + Optional<LengthLengthParameter> find(SizeMeasureType inputSizeMeasureType, SizeMeasureType outputSizeMeasureType) { + + return Optional.ofNullable( + forProperties(LengthLengthParameter.PROPERTY_INPUT_SIZE_MEASURE_TYPE, inputSizeMeasureType, + LengthLengthParameter.PROPERTY_OUTPUT_SIZE_MEASURE_TYPE, outputSizeMeasureType) + .tryFindAny() + .orNull()); + } +} + diff --git a/entities/src/main/java/fr/ird/observe/entities/referentiel/LengthLengthParameters.java b/entities/src/main/java/fr/ird/observe/entities/referentiel/LengthLengthParameters.java index d24f086..89f2506 100644 --- a/entities/src/main/java/fr/ird/observe/entities/referentiel/LengthLengthParameters.java +++ b/entities/src/main/java/fr/ird/observe/entities/referentiel/LengthLengthParameters.java @@ -1,5 +1,9 @@ package fr.ird.observe.entities.referentiel; +import fr.ird.observe.ObserveTopiaDaoSupplier; + +import java.util.Optional; + /** * Created on 05/11/16. * @@ -8,5 +12,10 @@ package fr.ird.observe.entities.referentiel; */ public class LengthLengthParameters { + public static Optional<LengthLengthParameter> findLengthLengthParameter(ObserveTopiaDaoSupplier daoSupplier, + SizeMeasureType inputSizeMeasureType, + SizeMeasureType outputSizeMeasureType) { + return daoSupplier.getLengthLengthParameterDao().find(inputSizeMeasureType, outputSizeMeasureType); + } } diff --git a/entities/src/main/java/fr/ird/observe/entities/referentiel/LengthWeightParameters.java b/entities/src/main/java/fr/ird/observe/entities/referentiel/LengthWeightParameters.java index 197d5e4..381826e 100644 --- a/entities/src/main/java/fr/ird/observe/entities/referentiel/LengthWeightParameters.java +++ b/entities/src/main/java/fr/ird/observe/entities/referentiel/LengthWeightParameters.java @@ -30,6 +30,7 @@ import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * Created on 28/08/15. @@ -52,15 +53,17 @@ public class LengthWeightParameters { * Si non trouvé sur le gender (et que le gender n'est pas indéterminé) , alors * on recherche avec le gender indéterminé (gender=0). * - * @param daoSupplier la transaction en cours d'utilisation - * @param species l'espèce sur lequel on recherche le paramétrage - * @param ocean l'ocean recherché (peut être null) - * @param sex le sexe recherché (on essayera sans sexe (sexe.code=0) si non trouvé) - * @param date le jour recherché + * @param daoSupplier la transaction en cours d'utilisation + * @param sizeMeasureType le type de mensuration recherché + * @param species l'espèce sur lequel on recherche le paramétrage + * @param ocean l'ocean recherché (peut être null) + * @param sex le sexe recherché (on essayera sans sexe (sexe.code=0) si non trouvé) + * @param date le jour recherché * @return le paramétrage adéquate * @since 1.5 */ public static LengthWeightParameter findLengthWeightParameter(ObserveTopiaDaoSupplier daoSupplier, + SizeMeasureType sizeMeasureType, Species species, Ocean ocean, Sex sex, @@ -87,25 +90,25 @@ public class LengthWeightParameters { return null; } + if (sizeMeasureType!=null) { + + // on filtre par le type de mensuration entrant + List<LengthWeightParameter> list2 = filterBySizeMeasureType(list, sizeMeasureType); + + if (!list2.isEmpty()) { + + // ok pas trouvé avec le bon type de mensuration, on fera la conversion plus tard + // on tente cependante d'utiliser la RTP trouvé + list = list2; + } + } + // au final il ne devrait en rester qu'un if (list.size() > 1) { throw new DuplicateLengthWeightParameterException(species, ocean, sex, date, list); } - // if (log.isDebugEnabled()) { -// StringBuilder sb = new StringBuilder("Paramétrage trouvé pour les données suivantes :"); -// sb.append("\nEspece : "); -// sb.append(getDecoratorService().decorate(species)); -// sb.append("\nOcean : "); -// sb.append(getDecoratorService().decorate(ocean)); -// sb.append("\nSex : "); -// sb.append(getDecoratorService().decorate(sex)); -// sb.append("\nDate : ").append(date); -// sb.append("\nParamétrage: ").append(getDecoratorService().decorate(result)); -// log.debug(sb.toString()); -// } - return list.get(0); } @@ -246,27 +249,17 @@ public class LengthWeightParameters { } public static List<LengthWeightParameter> filterBySexe(List<LengthWeightParameter> list, Sex sex) { - List<LengthWeightParameter> result = new ArrayList<>(); + return list.stream().filter(l -> l.getSex() == sex).collect(Collectors.toList()); + } - for (LengthWeightParameter parametrageLengthWeight : list) { - if (parametrageLengthWeight.getSex() == sex) { - result.add(parametrageLengthWeight); - } - } - return result; + public static List<LengthWeightParameter> filterBySizeMeasureType(List<LengthWeightParameter> list, SizeMeasureType sizeMeasureType) { + return list.stream().filter(l -> l.getSizeMeasureType() == sizeMeasureType).collect(Collectors.toList()); } public static List<LengthWeightParameter> filterByDateDebutValidite(List<LengthWeightParameter> list, Date startDate) { - List<LengthWeightParameter> result = new ArrayList<>(); - - for (LengthWeightParameter parametrageLengthWeight : list) { - - if (parametrageLengthWeight.getStartDate() == null || parametrageLengthWeight.getStartDate().before(startDate) || - parametrageLengthWeight.getStartDate().equals(startDate)) { - result.add(parametrageLengthWeight); - } - } - return result; + return list.stream() + .filter(l -> l.getStartDate() == null || l.getStartDate().before(startDate) || l.getStartDate().equals(startDate)) + .collect(Collectors.toList()); } public static List<LengthWeightParameter> filterByDateFinValidite(List<LengthWeightParameter> list, Date endDate) { diff --git a/entities/src/main/java/fr/ird/observe/entities/seine/NonTargetCatchImpl.java b/entities/src/main/java/fr/ird/observe/entities/seine/NonTargetCatchImpl.java index 867bb76..8901543 100644 --- a/entities/src/main/java/fr/ird/observe/entities/seine/NonTargetCatchImpl.java +++ b/entities/src/main/java/fr/ird/observe/entities/seine/NonTargetCatchImpl.java @@ -23,6 +23,7 @@ package fr.ird.observe.entities.seine; import fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSourcePersist; import fr.ird.observe.entities.referentiel.LengthWeightParameter; +import fr.ird.observe.entities.referentiel.SizeMeasureType; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.NumberUtil; @@ -88,6 +89,11 @@ public class NonTargetCatchImpl extends NonTargetCatchAbstract { } @Override + public SizeMeasureType getSizeMeasureType() { + return null; // pas utilisé pour les captures + } + + @Override public void setMeanWeight(Float meanWeight) { if (meanWeight != null) { diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java index 303240c..9ce88be 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java @@ -28,11 +28,14 @@ import fr.ird.observe.ObserveTopiaPersistenceContext; import fr.ird.observe.entities.LengthWeightComputable; import fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSourcePersist; import fr.ird.observe.entities.constants.seine.SchoolTypePersist; +import fr.ird.observe.entities.referentiel.LengthLengthParameter; +import fr.ird.observe.entities.referentiel.LengthLengthParameters; import fr.ird.observe.entities.referentiel.LengthWeightParameter; import fr.ird.observe.entities.referentiel.LengthWeightParameterNotFoundException; import fr.ird.observe.entities.referentiel.LengthWeightParameters; import fr.ird.observe.entities.referentiel.Ocean; import fr.ird.observe.entities.referentiel.Sex; +import fr.ird.observe.entities.referentiel.SizeMeasureType; import fr.ird.observe.entities.referentiel.Species; import fr.ird.observe.entities.seine.ActivitySeine; import fr.ird.observe.entities.seine.NonTargetCatch; @@ -276,7 +279,7 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements Species species = nonTargetCatch.getSpecies(); // récupération du référentiel - LengthWeightParameter lengthWeightParameter = activityContext.findLengthWeightParameter(species, null /* pas de sexe spécifié*/); + LengthWeightParameter lengthWeightParameter = activityContext.findLengthWeightParameter(null, species, null /* pas de sexe spécifié*/); // -- Cas n°1 (calcul uniquement à partir des relations taille - poids) updateNonTargetCatchByLengthWeightRelation(nonTargetCatch, lengthWeightParameter); @@ -541,7 +544,8 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements } // recherche du parametrage adequate - LengthWeightParameter lengthWeightParameter = activityContext.findLengthWeightParameter(species, sex); + SizeMeasureType inputSizeMeasureType = lengthWeightComputable.getSizeMeasureType(); + LengthWeightParameter lengthWeightParameter = activityContext.findLengthWeightParameter(inputSizeMeasureType, species, sex); if (lengthWeightParameter == null) { @@ -566,6 +570,25 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements } + SizeMeasureType outputSizeMeasureType = lengthWeightParameter.getSizeMeasureType(); + if (!outputSizeMeasureType.equals(inputSizeMeasureType)) { + + // on doit effectuer une conversion taille - taille avant de convertir en poids + Optional<LengthLengthParameter> optionalLengthLengthParameter = LengthLengthParameters.findLengthLengthParameter(activityContext.daoSupplier, inputSizeMeasureType, outputSizeMeasureType); + + if (optionalLengthLengthParameter.isPresent()) { + + length = optionalLengthLengthParameter.get().computeFromFomulaOne(length); + + } else { + + if (log.isWarnEnabled()) { + log.warn("Could not find lengLengthParameter for input: " + inputSizeMeasureType + " - output: " + outputSizeMeasureType); + } + return; + } + } + // on cherche obligatoirement a calculer le poids Float newWeight = lengthWeightParameter.computeFromFomulaOne(length); if (newWeight != null) { @@ -669,10 +692,10 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements return activity.getSetSeine(); } - public LengthWeightParameter findLengthWeightParameter(Species species, Sex sex) { + public LengthWeightParameter findLengthWeightParameter(SizeMeasureType sizeMeasureType, Species species, Sex sex) { Ocean ocean = getOcean(); Date routeDate = getRouteDate(); - LengthWeightParameter lengthWeightParameter = LengthWeightParameters.findLengthWeightParameter(daoSupplier, species, ocean, sex, routeDate); + LengthWeightParameter lengthWeightParameter = LengthWeightParameters.findLengthWeightParameter(daoSupplier, sizeMeasureType, species, ocean, sex, routeDate); if (lengthWeightParameter == null) { if (failIfLenghtWeightParameterNotFound) { diff --git a/services-topia/src/test/java/fr/ird/observe/services/topia/entity/LengthWeightParemetersTest.java b/services-topia/src/test/java/fr/ird/observe/services/topia/entity/LengthWeightParemetersTest.java index 67db9a1..be7d169 100644 --- a/services-topia/src/test/java/fr/ird/observe/services/topia/entity/LengthWeightParemetersTest.java +++ b/services-topia/src/test/java/fr/ird/observe/services/topia/entity/LengthWeightParemetersTest.java @@ -222,7 +222,7 @@ public class LengthWeightParemetersTest extends AbstractServiceTopiaTest { if (log.isInfoEnabled()) { log.info("Try to find length weith parameter for species " + species.getFaoCode() + " - ocean " + ocean.getLabel1() + " - sex " + (sex == null ? "null" : sex.getLabel1()) + " at " + date); } - LengthWeightParameter lengthWeightParameter = LengthWeightParameters.findLengthWeightParameter(supplier, species, ocean, sex, date); + LengthWeightParameter lengthWeightParameter = LengthWeightParameters.findLengthWeightParameter(supplier, null, species, ocean, sex, date); Assert.assertNotNull("length weith parameter not found for species " + species.getFaoCode() + " - ocean " + ocean.getLabel1() + " - sex " + (sex == null ? "null" : sex.getLabel1()) + " at " + date, lengthWeightParameter); Assert.assertEquals("Expected sex is " + expectedSex.getLabel1() + " but the one found was " + lengthWeightParameter.getSex().getLabel1(), expectedSex, lengthWeightParameter.getSex()); @@ -237,7 +237,7 @@ public class LengthWeightParemetersTest extends AbstractServiceTopiaTest { if (log.isInfoEnabled()) { log.info("Try to find length weith parameter for species " + species.getFaoCode() + " - ocean " + ocean.getLabel1() + " - sex " + (sex == null ? "null" : sex.getLabel1()) + " at " + date); } - LengthWeightParameter lengthWeightParameter = LengthWeightParameters.findLengthWeightParameter(supplier, species, ocean, sex, date); + LengthWeightParameter lengthWeightParameter = LengthWeightParameters.findLengthWeightParameter(supplier, null, species, ocean, sex, date); Assert.assertNull("length weith parameter should not ne found for species " + species.getFaoCode() + " - ocean " + ocean.getLabel1() + " - sex " + (sex == null ? "null" : sex.getLabel1()) + " at " + date, lengthWeightParameter); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.