branch feature/7719 created (now 00828bf)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7719 in repository observe. See http://git.codelutin.com/observe.git at 00828bf revue de l'algo de recherche d'une RTP : on essaye d'abord avec le sex fourni puis ensuite avec le sex indéterminé si pas trouvé cf https://forge.codelutin.com/projects/observe/repository/revisions/9b99607144... fixes #7719 This branch includes the following new commits: new 00828bf revue de l'algo de recherche d'une RTP : on essaye d'abord avec le sex fourni puis ensuite avec le sex indéterminé si pas trouvé cf https://forge.codelutin.com/projects/observe/repository/revisions/9b99607144... fixes #7719 The 1 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 00828bf31ec111bbecca35025ab713e742057f6e Author: Kevin Morin <morin@codelutin.com> Date: Fri Nov 13 10:48:37 2015 +0100 revue de l'algo de recherche d'une RTP : on essaye d'abord avec le sex fourni puis ensuite avec le sex indéterminé si pas trouvé cf https://forge.codelutin.com/projects/observe/repository/revisions/9b99607144... fixes #7719 -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7719 in repository observe. See http://git.codelutin.com/observe.git commit 00828bf31ec111bbecca35025ab713e742057f6e Author: Kevin Morin <morin@codelutin.com> Date: Fri Nov 13 10:48:37 2015 +0100 revue de l'algo de recherche d'une RTP : on essaye d'abord avec le sex fourni puis ensuite avec le sex indéterminé si pas trouvé cf https://forge.codelutin.com/projects/observe/repository/revisions/9b99607144... fixes #7719 --- .../referentiel/LengthWeightParameters.java | 137 +++++++++++++-------- 1 file changed, 83 insertions(+), 54 deletions(-) diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/LengthWeightParameters.java b/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/LengthWeightParameters.java index d55afdf..aa22a75 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/LengthWeightParameters.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/LengthWeightParameters.java @@ -22,6 +22,7 @@ package fr.ird.observe.entities.referentiel; * #L% */ +import com.google.common.base.Preconditions; import fr.ird.observe.ObserveTopiaDaoSupplier; import fr.ird.observe.util.Numbers; import org.apache.commons.collections4.CollectionUtils; @@ -79,17 +80,17 @@ public class LengthWeightParameters { /** * Recherche d'un {@link LengthWeightParameter} à partir des paramètres donnés. - * + * <p/> * La recherche peut ne peut être aussi exacte que les paramètres donnés : - * + * <p/> * Dans le cas d'une espèce faune, si non trouvé alors on recherche sur son * speciesGroup d'espèce. - * + * <p/> * Si non trouvé pour l'océan donné (et que celui-ci est non null), alors on * recherche avec un ocean vide. - * - * Si non trouvé sur le gender (et que le sexe n'est pas indéterminé) , alors - * on recherche avec le gender indéterminé (sexe=0). + * <p/> + * 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 @@ -105,6 +106,80 @@ public class LengthWeightParameters { Sex sex, Date date) { + Sex unknownSex = getUnknownSex(daoSupplier); + + if (sex == null) { + + // on utilise le sexe indéterminé + sex = unknownSex; + } + + List<LengthWeightParameter> list = findLengthWeightParameter0(daoSupplier, species, ocean, sex, date); + + if (CollectionUtils.isEmpty(list) && !unknownSex.equals(sex)) { + + // on essaye avec le sexe indéterminé + sex = unknownSex; + list = findLengthWeightParameter0(daoSupplier, species, ocean, sex, date); + } + + if (CollectionUtils.isEmpty(list)) { + return null; + } + + // au final il ne devrait en rester qu'un + + if (list.size() > 1) { + throw new DuplicateLengthWeightParameterException(species, ocean, sex, date, list); + } + + LengthWeightParameter result = list.get(0); + +// 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 result; + + } + /** + * Recherche de la liste des {@link LengthWeightParameter} à partir des paramètres donnés. + * + * La recherche peut ne peut être aussi exacte que les paramètres donnés : + * + * Dans le cas d'une espèce faune, si non trouvé alors on recherche sur son + * speciesGroup d'espèce. + * + * Si non trouvé pour l'océan donné (et que celui-ci est non null), alors on + * recherche avec un ocean vide. + * + * @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é + * @return le paramétrage adéquate + * @since 1.5 + */ + public static List<LengthWeightParameter> findLengthWeightParameter0(ObserveTopiaDaoSupplier daoSupplier, + Species species, + Ocean ocean, + Sex sex, + Date date) { + + Preconditions.checkNotNull(daoSupplier, "daoSupplier parameter can't be null"); + Preconditions.checkNotNull(species, "species parameter can't be null"); + Preconditions.checkNotNull(sex, "sex parameter can't be null"); + List<LengthWeightParameter> list = findBySpecies(daoSupplier, species); if (CollectionUtils.isEmpty(list)) { @@ -130,21 +205,7 @@ public class LengthWeightParameters { } // filtrage par sexe - List<LengthWeightParameter> filterBySexe = filterBySexe(list, sex); - - if (CollectionUtils.isEmpty(filterBySexe)) { - - Sex unkwonSex = getUnknownSex(daoSupplier); - - if (sex == null || unkwonSex.equals(sex)) { - - // filtrage par sexe indetermine - filterBySexe = filterBySexe(list, unkwonSex); - } - - list = filterBySexe; - - } + list = filterBySexe(list, sex); if (CollectionUtils.isEmpty(list)) { @@ -170,39 +231,7 @@ public class LengthWeightParameters { return null; } - // au final il ne devrait en rester qu'un - - if (list.size() > 1) { -// StringBuilder sb = new StringBuilder("Il existe plusieurs paramétrages possibles 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étrages trouvés : "); -// for (P p : list) { -// sb.append("\n - ").append(getDecoratorService().decorate(p)); -// } - throw new DuplicateLengthWeightParameterException(species, ocean, sex, date, list); - } - - LengthWeightParameter result = list.get(0); -// 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 result; - + return list; } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
participants (1)
-
codelutin.com scm