This is an automated email from the git hooks/post-receive script. New commit to branch develop-4.x in repository observe. See http://git.codelutin.com/observe.git commit 9b996071442c61f4f3ea9eaf78e2436b0fddf160 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 3 14:36:11 2015 +0100 Revue de l'algorithme de recherche d'une RTP (on essaye d'abord avec le sex fourni puis ensuite avec le sex indéterminé si pas trouvé (See #7673) --- .../src/main/java/fr/ird/observe/DataService.java | 153 ++++++++++++++------- 1 file changed, 103 insertions(+), 50 deletions(-) diff --git a/observe-business/src/main/java/fr/ird/observe/DataService.java b/observe-business/src/main/java/fr/ird/observe/DataService.java index 1588771..efb29b8 100644 --- a/observe-business/src/main/java/fr/ird/observe/DataService.java +++ b/observe-business/src/main/java/fr/ird/observe/DataService.java @@ -21,6 +21,7 @@ */ package fr.ird.observe; +import com.google.common.base.Preconditions; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; @@ -887,13 +888,110 @@ public class DataService { * @throws DataSourceException pour toute erreur * @since 1.5 */ - public <P extends LengthWeightParameter> P findLengthWeightParameter( + public <P extends LengthWeightParameter> P findLengthWeightParameter(TopiaContext tx, + Species species, + Ocean ocean, + Sex sex, + Date date) throws DataSourceException { + + try { + + Sex unknownSex = getUnknownSex(tx); + + if (sex == null) { + + // on utilise le sexe indéterminé + sex = unknownSex; + } + + List<P> list = findLengthWeightParameter0(tx, species, ocean, sex, date); + + if (CollectionUtils.isEmpty(list) && !unknownSex.equals(sex)) { + + // on essaye avec le sexe indéterminé + + sex = unknownSex; + + list = findLengthWeightParameter0(tx, species, ocean, sex, date); + + } + + if (CollectionUtils.isEmpty(list)) { + + 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 DataSourceException(sb.toString(), "findLengthWeightParameter"); + } + + P 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; + + } catch (Exception e) { + throw new DataSourceException(e, "findLengthWeightParameter"); + } + } + + /** + * 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 tx 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é + * @param date le jour recherché (peut être null) + * @return la liste des paramétrages disponibles + * @throws DataSourceException pour toute erreur + * @since 1.5 + */ + public <P extends LengthWeightParameter> List<P> findLengthWeightParameter0( TopiaContext tx, Species species, Ocean ocean, Sex sex, Date date) throws DataSourceException { + Preconditions.checkNotNull(tx, "tx parameter can't be null"); + Preconditions.checkNotNull(species, "species parameter can't be null"); + Preconditions.checkNotNull(sex, "sex parameter can't be null"); + try { List<P> list = LengthWeightParemeterHelper.findBySpecies((TopiaContextImplementor) tx, species); @@ -921,21 +1019,7 @@ public class DataService { } // filtrage par sexe - List<P> filterBySexe = LengthWeightParemeterHelper.filterBySexe(list, sex); - - if (CollectionUtils.isEmpty(filterBySexe)) { - - Sex unkwonSex = getUnknownSex(tx); - - if (sex==null || unkwonSex.equals(sex)) { - - // filtrage par sexe indetermine - filterBySexe = LengthWeightParemeterHelper.filterBySexe(list, unkwonSex); - } - - list = filterBySexe; - - } + list = LengthWeightParemeterHelper.filterBySexe(list, sex); if (CollectionUtils.isEmpty(list)) { @@ -961,38 +1045,7 @@ public class DataService { 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 DataSourceException(sb.toString(), "findLengthWeightParameter"); - } - - P 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; } catch (Exception e) { throw new DataSourceException(e, "findLengthWeightParameter"); @@ -1668,7 +1721,7 @@ public class DataService { closeTransaction(source, tx, txName); } } - + public List<GearUseFeaturesMeasurementLongline> getGearUseFeaturesMeasurementLongline(DataSource source, GearUseFeaturesLongline bean, final TopiaEntityBinder<GearUseFeaturesMeasurementLongline> binder) throws DataSourceException { String txName = "getGearUseFeaturesMeasurementLongline : " + bean.getTopiaId(); @@ -1740,7 +1793,7 @@ public class DataService { } catch (TopiaException e) { throw new DataSourceException(e, txName); - } finally{ + } finally { closeTransaction(source, tx, txName); } return tripMapPoints; -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.