[Git][ultreiaio/ird-t3][develop] [N1][N2][N3] Permettre la sélection mutliple d'océans (See #260) - correction…
Tony CHEMIT pushed to branch develop at ultreiaio / ird-t3 Commits: 00d3c99d by Tony CHEMIT at 2018-03-20T14:37:44Z [N1][N2][N3] Permettre la sélection mutliple d'océans (See #260) - correction sur le N1.5 (plus un peu de nettoyage de code) - - - - - 3 changed files: - t3-actions/src/main/java/fr/ird/t3/actions/data/level1/ExtrapolateSampleWeightToSetAction.java - t3-domain/src/main/java/fr/ird/t3/entities/reference/LengthWeightConversionHelper.java - t3-domain/src/test/java/fr/ird/t3/entities/reference/LengthWeightConversionHelperTest.java Changes: ===================================== t3-actions/src/main/java/fr/ird/t3/actions/data/level1/ExtrapolateSampleWeightToSetAction.java ===================================== --- a/t3-actions/src/main/java/fr/ird/t3/actions/data/level1/ExtrapolateSampleWeightToSetAction.java +++ b/t3-actions/src/main/java/fr/ird/t3/actions/data/level1/ExtrapolateSampleWeightToSetAction.java @@ -38,7 +38,6 @@ import fr.ird.t3.entities.reference.Species; import fr.ird.t3.entities.reference.SpeciesTopiaDao; import fr.ird.t3.entities.reference.WeightCategories; import fr.ird.t3.entities.reference.WeightCategorySample; -import fr.ird.t3.entities.reference.WeightCategorySampleImpl; import fr.ird.t3.services.DecoratorService; import fr.ird.t3.services.ioc.InjectDAO; import org.apache.commons.logging.Log; @@ -46,6 +45,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.util.TimeLog; import java.util.Collection; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -54,7 +54,7 @@ import java.util.Set; import static org.nuiton.i18n.I18n.l; /** - * Extrapolate weigth from sample to their owing set. + * Extrapolate weight from sample to their owing set. * * @author Tony Chemit - dev@tchemit.fr * @since 1.0 @@ -69,16 +69,13 @@ public class ExtrapolateSampleWeightToSetAction extends AbstractLevel1Action { private LengthWeightConversionTopiaDao lengthWeightConversionDAO; @InjectDAO(entityType = SetSpeciesFrequency.class) private SetSpeciesFrequencyTopiaDao setSpeciesFrequencyDAO; - // @InjectDAO(entityType = WeightCategoryWellPlan.class) -// private WeightCategoryWellPlanTopiaDao weightCategoryWellPlanDAO; - // private WeightCategoryWellPlan categoryM10; -// private WeightCategoryWellPlan categoryP10; private LengthWeightConversionHelper conversionHelper; public ExtrapolateSampleWeightToSetAction() { super(Level1Step.EXTRAPOLATE_SAMPLE_WEIGHT_TO_SET); } + @SuppressWarnings("unused") public int getNbTreatedSets() { return nbTreatedSets; } @@ -87,6 +84,7 @@ public class ExtrapolateSampleWeightToSetAction extends AbstractLevel1Action { this.nbTreatedSets = nbTreatedSets; } + @SuppressWarnings("unused") public float getNbTreatedFishesInSamples() { return nbTreatedFishesInSamples; } @@ -95,6 +93,7 @@ public class ExtrapolateSampleWeightToSetAction extends AbstractLevel1Action { this.nbTreatedFishesInSamples = nbTreatedFishesInSamples; } + @SuppressWarnings("unused") public float getNbCreatedFishesInSetSpeciesFrequency() { return nbCreatedFishesInSetSpeciesFrequency; } @@ -106,10 +105,6 @@ public class ExtrapolateSampleWeightToSetAction extends AbstractLevel1Action { @Override protected void prepareAction() throws Exception { super.prepareAction(); -// // get the -10Kg category -// setCategoryM10(weightCategoryWellPlanDAO.forCodeEquals(1).findUnique()); -// // get the +10Kg category -// setCategoryP10(weightCategoryWellPlanDAO.forCodeEquals(2).findUnique()); conversionHelper = lengthWeightConversionDAO.newConversionHelper(); } @@ -137,21 +132,21 @@ public class ExtrapolateSampleWeightToSetAction extends AbstractLevel1Action { private void doExecuteTrip(Trip trip, Collection<Sample> samples) { incrementsProgression(); - //FIXME I replace ocean by trip.departureHarbour.ocean, check this is ok (See #260) - // get the length class +10kg limit - Map<Species, Integer> limitLengthClassBySpecie = getThredHoldPlus10ForSpecies(trip, samples, trip.getDepartureHarbour().getOcean()); Set<Activity> tripActivities = new HashSet<>(); // extrapolate for each sample set number to set for (Sample sample : samples) { long s0 = TimeLog.getTime(); incrementsProgression(); - String sampleStr = l(locale, "t3.level1.extrapolateSampleWeightToSet.sampleStr", - decorate(trip), sample.getSampleNumber()); + String sampleStr = l(locale, "t3.level1.extrapolateSampleWeightToSet.sampleStr", decorate(trip), sample.getSampleNumber()); float nb = sample.getTotalStandardiseSampleSpeciesFrequencyNumber(); addInfoMessage(l(locale, "t3.level1.extrapolateSampleWeightToSet.sample.nbFishes", sampleStr, nb)); nbTreatedFishesInSamples += nb; + Set<Species> species = SpeciesTopiaDao.getAllSpeciesFromSampleSpecies(samples); for (SampleSet sampleSet : sample.getSampleSet()) { Activity activity = sampleSet.getActivity(); + Ocean ocean = activity.getOcean(); + // get the length class +10kg limit + Map<Species, Integer> limitLengthClassBySpecie = getThresholdPlus10ForSpecies(species, ocean, activity.getRoute().getDate()); boolean added = tripActivities.add(activity); if (added) { // remove all stuff from activity @@ -240,7 +235,7 @@ public class ExtrapolateSampleWeightToSetAction extends AbstractLevel1Action { } /** - * Given a sample well, compute the {@link SampleWellSetWeight}, says : + * Given a sample well, compute the {@link SampleWellSetWeight}, says: * <ul> * <li>his total weight</<li> * <li>his weight of -10Kg category</<li> @@ -272,25 +267,25 @@ public class ExtrapolateSampleWeightToSetAction extends AbstractLevel1Action { * * @param sampleWellStr sampleSet decorate value * @param setWeight the sampleSet weight computed - * @param sampletWeight the sampleSet weight computed + * @param sampleWeight the sampleSet weight computed * @param useRfMinus10AndRfPlus10 flag to try to use rf-10 and rf+10 * @return the computed rf context for the given sample set */ - private RFContext computeRFContext(String sampleWellStr, SampleWellSetWeight setWeight, SampleWellSampleWeight sampletWeight, boolean useRfMinus10AndRfPlus10) { + private RFContext computeRFContext(String sampleWellStr, SampleWellSetWeight setWeight, SampleWellSampleWeight sampleWeight, boolean useRfMinus10AndRfPlus10) { float pondt = setWeight.getTotalWeight(); Float pondp = setWeight.getPlus10Weight(); Float pondm = setWeight.getMinus10Weight(); // compute rftot - float pdecht = sampletWeight.getTotalWeight(); + float pdecht = sampleWeight.getTotalWeight(); float rftot = pondt / pdecht; // compute rfMinus10 - Float pdechm = sampletWeight.getMinus10Weight(); + Float pdechm = sampleWeight.getMinus10Weight(); Float rfMinus10 = null; if (pdechm != null && pdechm > 0 && pondm != null) { rfMinus10 = pondm / pdechm; } // compute rfPlus10 - Float pdechp = sampletWeight.getPlus10Weight(); + Float pdechp = sampleWeight.getPlus10Weight(); Float rfPlus10 = null; if (pdechp != null && pdechp > 0 && pondp != null) { rfPlus10 = pondp / pdechp; @@ -310,7 +305,7 @@ public class ExtrapolateSampleWeightToSetAction extends AbstractLevel1Action { rfMinus10Status = RfUsageStatus.REJECTED_RF_NOT_DEFINED; } else { int rfMinus10MinNumber = getConfiguration().getRfMinus10MinNumber(); - Float sampletWeightMinus10Number = sampletWeight.getMinus10Number(); + Float sampletWeightMinus10Number = sampleWeight.getMinus10Number(); if (Math.abs(rfMinus10) < 0.001f) { addWarningMessage(l(locale, "t3.level1.extrapolateSampleWeightToSet.warning.rfMinus10.too.low", sampleWellStr, rfMinus10, rftot)); @@ -331,7 +326,7 @@ public class ExtrapolateSampleWeightToSetAction extends AbstractLevel1Action { rfPlus10Status = RfUsageStatus.REJECTED_RF_NOT_DEFINED; } else { int rfPlus10MinNumber = getConfiguration().getRfPlus10MinNumber(); - Float sampletWeightPlus10Number = sampletWeight.getPlus10Number(); + Float sampletWeightPlus10Number = sampleWeight.getPlus10Number(); if (Math.abs(rfPlus10) < 0.001f) { addWarningMessage(l(locale, "t3.level1.extrapolateSampleWeightToSet.warning.rfPlus10.too.low", sampleWellStr, rfPlus10, rftot)); @@ -387,25 +382,21 @@ public class ExtrapolateSampleWeightToSetAction extends AbstractLevel1Action { } /** - * Obtain for each species used in one of the given sample the first length - * class which represents a +10Kg weight. + * Obtain for each species used in one of the given sample the first length class which represents a +10Kg weight. * - * @param trip the trip where samples are done - * @param samples the sample to scan - * @param ocean ocean where trip happens + * @param species species to scan + * @param ocean where (used to get conversion) + * @param date when (used to get conversion) * @return the universe of length class limits computed indexed by species */ - private Map<Species, Integer> getThredHoldPlus10ForSpecies(Trip trip, Collection<Sample> samples, Ocean ocean) { - Set<Species> species = SpeciesTopiaDao.getAllSpeciesFromSampleSpecies(samples); + private Map<Species, Integer> getThresholdPlus10ForSpecies(Set<Species> species, Ocean ocean, Date date) { // for each of those species, found the length class which matches a weight > 10Kg Map<Species, Integer> result = new HashMap<>(); for (Species specie : species) { - LengthWeightConversion conversion = conversionHelper.getConversions(specie, ocean, 0, trip.getLandingDate()); + LengthWeightConversion conversion = conversionHelper.getConversions(specie, ocean, 0, date); if (conversion != null) { // only add conversion for species if found - WeightCategorySample fakeCategory = new WeightCategorySampleImpl(); - fakeCategory.setMax(10); - int lengthClass = conversionHelper.getSpecieHighestLengthClass(conversion, fakeCategory); + int lengthClass = conversionHelper.getSpecieHighestLengthClass(conversion, 10); result.put(specie, lengthClass); } } @@ -417,14 +408,6 @@ public class ExtrapolateSampleWeightToSetAction extends AbstractLevel1Action { return result; } -// private void setCategoryM10(WeightCategoryWellPlan categoryM10) { -// this.categoryM10 = categoryM10; -// } -// -// private void setCategoryP10(WeightCategoryWellPlan categoryP10) { -// this.categoryP10 = categoryP10; -// } - /** * This object contains the sample weights (-10,+10 and total) for sample well. * <ul> @@ -436,9 +419,9 @@ public class ExtrapolateSampleWeightToSetAction extends AbstractLevel1Action { */ protected static class SampleWellSampleWeight { - /** sum of fishes wieght for length class < +10Kg. */ + /** sum of fishes weight for length class < +10Kg. */ Float minus10Weight; - /** sum of fishes wieght for length class > +10Kg. */ + /** sum of fishes weight for length class > +10Kg. */ Float plus10Weight; /** Number of fishes for length class > -10Kg. */ private Float plus10Number; @@ -476,8 +459,7 @@ public class ExtrapolateSampleWeightToSetAction extends AbstractLevel1Action { } /** - * This object contains the set weights (-10,+10 and total) for - * sample well. + * This object contains the set weights (-10,+10 and total) for sample well. * <ul> * <li>{@link #getMinus10Weight()} is legacy {@code pondm}</li> * <li>{@link #getPlus10Weight()}} is legacy {@code pondp}</li> @@ -486,11 +468,11 @@ public class ExtrapolateSampleWeightToSetAction extends AbstractLevel1Action { */ protected static class SampleWellSetWeight { - /** sum of fishes wieght for length class < +10Kg. */ + /** sum of fishes weight for length class < +10Kg. */ Float totalWeight; - /** sum of fishes wieght for length class < +10Kg. */ + /** sum of fishes weight for length class < +10Kg. */ Float minus10Weight; - /** sum of fishes wieght for length class > +10Kg. */ + /** sum of fishes weight for length class > +10Kg. */ Float plus10Weight; protected static SampleWellSetWeight create(Float totalWeight, Float minus10Weight, Float plus10Weight) { ===================================== t3-domain/src/main/java/fr/ird/t3/entities/reference/LengthWeightConversionHelper.java ===================================== --- a/t3-domain/src/main/java/fr/ird/t3/entities/reference/LengthWeightConversionHelper.java +++ b/t3-domain/src/main/java/fr/ird/t3/entities/reference/LengthWeightConversionHelper.java @@ -40,28 +40,25 @@ import java.util.TreeMap; */ public class LengthWeightConversionHelper { - /** Logger. */ - private static final Log log = - LogFactory.getLog(LengthWeightConversionHelper.class); + private static final Log log = LogFactory.getLog(LengthWeightConversionHelper.class); - protected final LengthWeightConversionTopiaDao dao; + private final LengthWeightConversionTopiaDao dao; private final Map<String, LengthWeightConversion> lengthWeightConversions; private final Map<String, Integer> lengthClassMap; - private final ConversionContext conversionContext; LengthWeightConversionHelper(LengthWeightConversionTopiaDao dao, Ocean ocean, int sex, Date date) { this.dao = dao; this.conversionContext = new ConversionContext(ocean, sex, date); - lengthWeightConversions = new TreeMap<>(); - lengthClassMap = new TreeMap<>(); + this.lengthWeightConversions = new TreeMap<>(); + this.lengthClassMap = new TreeMap<>(); } LengthWeightConversionHelper(LengthWeightConversionTopiaDao dao) { this.dao = dao; this.conversionContext = null; - lengthWeightConversions = new TreeMap<>(); - lengthClassMap = new TreeMap<>(); + this.lengthWeightConversions = new TreeMap<>(); + this.lengthClassMap = new TreeMap<>(); } private <W extends WeightCategory> W getNextCategory(LengthWeightConversion conversion, int lengthClass, Iterator<W> itr) { @@ -77,7 +74,7 @@ public class LengthWeightConversionHelper { } else { // get max lengthClass - int nextLengthClass = getSpecieHighestLengthClass(conversion, result); + int nextLengthClass = getSpecieHighestLengthClass(conversion, result.getMax()); if (nextLengthClass < lengthClass) { @@ -89,10 +86,9 @@ public class LengthWeightConversionHelper { return result; } - public <W extends WeightCategory> Map<Integer, W> getWeightCategoriesDistribution( - LengthWeightConversion conversion, - List<W> weightCategories, - List<Integer> lengthClasses) { + public <W extends WeightCategory> Map<Integer, W> getWeightCategoriesDistribution(LengthWeightConversion conversion, + List<W> weightCategories, + List<Integer> lengthClasses) { Map<Integer, W> result = new TreeMap<>(); W currentWeightCategory = null; int currentMaxLengthClass = -1; @@ -105,7 +101,7 @@ public class LengthWeightConversionHelper { if (currentWeightCategory == null) { // get the correct weight category currentWeightCategory = getNextCategory(conversion, lengthClass, itr); - currentMaxLengthClass = getSpecieHighestLengthClass(conversion, currentWeightCategory); + currentMaxLengthClass = getSpecieHighestLengthClass(conversion, currentWeightCategory.getMax()); } result.put(lengthClass, currentWeightCategory); } @@ -113,7 +109,7 @@ public class LengthWeightConversionHelper { } /** - * Get the convertor for the given parameters from the cache. + * Get the converter for the given parameters from the cache. * <p/> * If not found, then load it from db. * @@ -122,13 +118,10 @@ public class LengthWeightConversionHelper { * @param sex sex to use * @param date min date to use * @return convertor found - * @throws TopiaException if any db while querying db */ public LengthWeightConversion getConversions(Species species, Ocean ocean, int sex, Date date) { - LengthWeightConversion result; - String key = species.getCode() + "-" + ocean.getCode() + - "-" + sex + "-" + T3Date.newDate(date); - result = lengthWeightConversions.get(key); + String key = species.getCode() + "-" + ocean.getCode() + "-" + sex + "-" + T3Date.newDate(date); + LengthWeightConversion result = lengthWeightConversions.get(key); if (result == null && !lengthWeightConversions.containsKey(key)) { // load it from db result = dao.findLengthWeightConversion(species, ocean, 0, date); @@ -140,17 +133,16 @@ public class LengthWeightConversionHelper { } /** - * Get the convertor for the given parameters from the cache. + * Get the converter for the given parameters from the cache. * <p/> * If not found, then load it from db. * * @param species species to use * @return convertor found - * @throws TopiaException if any db while querying db */ public LengthWeightConversion getConversions(Species species) { Objects.requireNonNull(conversionContext, - "No conversion context, must specify all parameters to obtain a convertor."); + "No conversion context, must specify all parameters to obtain a converter."); LengthWeightConversion result; String key = species.getCode() + conversionContext.getKey(); result = lengthWeightConversions.get(key); @@ -163,24 +155,24 @@ public class LengthWeightConversionHelper { } return result; } - - public Integer getSpecieHighestLengthClass(Species species, WeightCategory weightCategory) { - LengthWeightConversion conversions = getConversions(species); - Integer result; - if (conversions == null) { - result = null; - } else { - result = getSpecieHighestLengthClass(conversions, weightCategory); - } - return result; - } - - public int getSpecieHighestLengthClass(LengthWeightConversion conversion, WeightCategory weightCategory) { - String key = conversion.getTopiaId() + "-" + weightCategory.getTopiaId(); +// +// public Integer getSpecieHighestLengthClass(Species species, WeightCategory weightCategory) { +// LengthWeightConversion conversions = getConversions(species); +// Integer result; +// if (conversions == null) { +// result = null; +// } else { +// result = getSpecieHighestLengthClass(conversions, weightCategory); +// } +// return result; +// } + + public int getSpecieHighestLengthClass(LengthWeightConversion conversion, Integer max) { + String key = conversion.getTopiaId() + "-" + max/*weightCategory.getTopiaId()*/; Integer result = lengthClassMap.get(key); if (result == null) { // load it once for all - result = conversion.getSpecieHighestLengthClass(weightCategory.getMax()); + result = conversion.getSpecieHighestLengthClass(max /*weightCategory.getMax()*/); // store it once for all lengthClassMap.put(key, result); log.info(String.format("Cache lengthClassMap [%d] for %s", lengthClassMap.size(), key)); ===================================== t3-domain/src/test/java/fr/ird/t3/entities/reference/LengthWeightConversionHelperTest.java ===================================== --- a/t3-domain/src/test/java/fr/ird/t3/entities/reference/LengthWeightConversionHelperTest.java +++ b/t3-domain/src/test/java/fr/ird/t3/entities/reference/LengthWeightConversionHelperTest.java @@ -127,7 +127,7 @@ public class LengthWeightConversionHelperTest extends AbstractDatabaseTest { Assert.assertFalse(allCategories.isEmpty()); for (WeightCategoryTreatment category : allCategories) { - conversionHelper.getSpecieHighestLengthClass(conversion, category); + conversionHelper.getSpecieHighestLengthClass(conversion, category.getMax()); } Range<Integer> open = Range.open(0, 1000); View it on GitLab: https://gitlab.com/ultreiaio/ird-t3/commit/00d3c99d6971d8f50e8bdf2935b671ab1... --- View it on GitLab: https://gitlab.com/ultreiaio/ird-t3/commit/00d3c99d6971d8f50e8bdf2935b671ab1... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT