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>.