This is an automated email from the git hooks/post-receive script. New commit to branch feature/6910-obsVente-effort-bis in repository wao. See http://git.codelutin.com/wao.git commit aafd4fe689640863644082a3cdbe1060f1fa12b5 Author: Brendan Le Ny <bleny@codelutin.com> Date: Fri Apr 10 16:18:07 2015 +0200 Remaniement dans ExpectedVsActualChartTemplateMethod pour permettre de calculer le réalisé à partir de toute la liste des contacts et pas seulement pour un contact (prérequis pour compter en sorties dans ObsVente) --- .../wao/services/service/SynthesisService.java | 195 +++++---------------- 1 file changed, 47 insertions(+), 148 deletions(-) diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/SynthesisService.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/SynthesisService.java index 4a3efc9..5ffcdc9 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/SynthesisService.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/SynthesisService.java @@ -25,7 +25,6 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.cache.Cache; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.LinkedListMultimap; import com.google.common.collect.ListMultimap; @@ -44,8 +43,6 @@ import fr.ifremer.wao.entity.SampleMonth; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.SynthesisId; import fr.ifremer.wao.services.AuthenticatedWaoUser; -import org.apache.commons.collections4.map.MultiKeyMap; -import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.Range; import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.logging.Log; @@ -544,12 +541,7 @@ public class SynthesisService extends WaoServiceSupport { } // Calcul du réalisé - ListMultimap<Date, Integer> actualObservationsByPeriods = LinkedListMultimap.create(); - for (Contact contact : contacts) { - Preconditions.checkState(sampleRows.contains(contact.getSampleRow())); - Map<Date, Integer> actualPerPeriods = getActualPerPeriods(contact); - actualObservationsByPeriods.putAll(Multimaps.forMap(actualPerPeriods)); - } + Multimap<Date, Integer> actualObservationsByPeriods = getActualObservationsByPeriods(contacts); if (log.isDebugEnabled()) { log.debug("actual effort by periods is " + actualObservationsByPeriods); @@ -607,7 +599,14 @@ public class SynthesisService extends WaoServiceSupport { } - protected abstract Map<Date, Integer> getActualPerPeriods(Contact contact); + /** + * Calcul du réalisé (estimé ou réel, selon l'ensemble de contacts donné en paramètre). + * + * On doit retourner, pour chaque période (trimestre ? mois ?) l'effort qu'on considère réalisé. + * + * C'est une multimap, donc on peut indiquer plusieurs effort pour une même période. + */ + protected abstract Multimap<Date, Integer> getActualObservationsByPeriods(Collection<Contact> contacts); protected abstract String getValueAxisLabel(); @@ -659,19 +658,21 @@ public class SynthesisService extends WaoServiceSupport { return I18n.l(locale, "wao.synthesis.observationsCount"); } - /** - * Le réalisé est le nombre d'observation, on compte 1 observation pour 1 navire donc 1 pour chaque contact. - */ @Override - protected Map<Date, Integer> getActualPerPeriods(Contact contact) { - // on calcule les jours de mers pour chaque mois - Map<Date, Integer> observationDaysByMonthsForObservation = - WaoUtils.getObservationDaysByMonths( - contact.getObservationBeginDate(), - contact.getObservationEndDate()); - // on prend le mois avec le plus de jours de mers pour compter 1 observation - Date month = WaoUtils.getKeyWithHighestValue(observationDaysByMonthsForObservation); - return ImmutableMap.of(month, 1); + protected ListMultimap<Date, Integer> getActualObservationsByPeriods(Collection<Contact> contacts) { + ListMultimap<Date, Integer> actualObservationsByPeriods = LinkedListMultimap.create(); + for (Contact contact : contacts) { + Preconditions.checkState(sampleRows.contains(contact.getSampleRow())); + // on calcule les jours de mers pour chaque mois + Map<Date, Integer> observationDaysByMonthsForObservation = + WaoUtils.getObservationDaysByMonths( + contact.getObservationBeginDate(), + contact.getObservationEndDate()); + // on prend le mois avec le plus de jours de mers pour compter 1 observation + Date month = WaoUtils.getKeyWithHighestValue(observationDaysByMonthsForObservation); + actualObservationsByPeriods.put(month, 1); + } + return actualObservationsByPeriods; } } @@ -710,16 +711,18 @@ public class SynthesisService extends WaoServiceSupport { return I18n.l(locale, "wao.synthesis.daysCount"); } - /** - * Le réalisé est le de jours de mers pour chaque mois. - */ @Override - protected Map<Date, Integer> getActualPerPeriods(Contact contact) { - Map<Date, Integer> observationDaysByMonthsForObservation = - WaoUtils.getObservationDaysByMonths( - contact.getObservationBeginDate(), - contact.getObservationEndDate()); - return observationDaysByMonthsForObservation; + protected ListMultimap<Date, Integer> getActualObservationsByPeriods(Collection<Contact> contacts) { + ListMultimap<Date, Integer> actualObservationsByPeriods = LinkedListMultimap.create(); + for (Contact contact : contacts) { + Preconditions.checkState(sampleRows.contains(contact.getSampleRow())); + Map<Date, Integer> observationDaysByMonthsForObservation = + WaoUtils.getObservationDaysByMonths( + contact.getObservationBeginDate(), + contact.getObservationEndDate()); + actualObservationsByPeriods.putAll(Multimaps.forMap(observationDaysByMonthsForObservation)); + } + return actualObservationsByPeriods; } } @@ -758,118 +761,13 @@ public class SynthesisService extends WaoServiceSupport { } @Override - protected Map<Date, Integer> getActualPerPeriods(Contact contact) { - return ImmutableMap.of(truncateToTimePeriod(contact.getObservationBeginDate()), 1); - } - - @Override - public JFreeChart getChart() { - // définition de la fenêtre - Date periodFromMonth = truncateToTimePeriod(periodFrom); - Date periodToMonth = truncateToTimePeriod(periodTo); - - Range<Date> periodRange = Range.between(periodFromMonth, periodToMonth); - - // Calcul du programmé - SortedMap<Date, Integer> expectedEffortByPeriods = new TreeMap<>(); - for (SampleRow sampleRow : sampleRows) { - for (SampleMonth sampleMonth : sampleRow.getSampleMonth()) { - Date month = sampleMonth.getPeriodDate(); - Date period = truncateToTimePeriod(month); - Integer expected = MoreObjects.firstNonNull( - expectedEffortByPeriods.get(period), - 0); - expected += getExpected(sampleMonth); - expectedEffortByPeriods.put(period, expected); - } - } - - if (log.isDebugEnabled()) { - log.debug("expected effort by periods is " + expectedEffortByPeriods); - } - - // Calcul du réalisé + protected ListMultimap<Date, Integer> getActualObservationsByPeriods(Collection<Contact> contacts) { ListMultimap<Date, Integer> actualObservationsByPeriods = LinkedListMultimap.create(); - - // Le réalisé est le nombre de sortie, on compte 1 sortie pour un et unique couple début/fin d'observation - MultiKeyMap<Object, Pair<Date, Date>> nbRealObservationsByTripForMonth = new MultiKeyMap<>(); - - for (Contact doneObservation : contacts) { - Preconditions.checkState(sampleRows.contains(doneObservation.getSampleRow())); - - Date obsBeginDate = doneObservation.getObservationBeginDate(); - Date obsEndDate = doneObservation.getObservationEndDate(); - - // si le contact doit être compté dans le réel - if (BooleanUtils.isTrue(doneObservation.getValidationCompany())) { - - Pair<Date, Date> real = nbRealObservationsByTripForMonth.get(obsBeginDate, obsEndDate); - if (real == null) { - // on ajoute 1 observation - Pair<Date, Date> obs = Pair.of(obsBeginDate, obsEndDate); - nbRealObservationsByTripForMonth.put(obsBeginDate, obsEndDate, obs); - - Map<Date, Integer> actualPerPeriods = getActualPerPeriods(doneObservation); - actualObservationsByPeriods.putAll(Multimaps.forMap(actualPerPeriods)); - } - } - - } - - if (log.isDebugEnabled()) { - log.debug("actual effort by periods is " + actualObservationsByPeriods); - } - - // Création du graphique - DefaultCategoryDataset dataset = new DefaultCategoryDataset(); - - // pour la barre représentant le planifié - for (Map.Entry<Date, Integer> entry : expectedEffortByPeriods.entrySet()) { - Date period = entry.getKey(); - if (periodRange.contains(period)) { - Integer expected = entry.getValue(); - dataset.setValue(expected, I18n.l(locale, "wao.synthesis.planned"), formatPeriod(period)); - } - } - - // pour la barre représentant l'estimé ou le réel - String rowKey; - if (realVsEstimated) { - rowKey = I18n.l(locale, "wao.ui.samplingPlan.Actual"); - } else { - rowKey = I18n.l(locale, "wao.synthesis.estimated"); - } - for (Map.Entry<Date, Collection<Integer>> entry : actualObservationsByPeriods.asMap().entrySet()) { - Date period = entry.getKey(); - if (periodRange.contains(period)) { - Integer actual = WaoUtils.sum(entry.getValue()); - dataset.setValue(actual, rowKey, formatPeriod(period)); - } + for (Contact contact : contacts) { + Preconditions.checkState(sampleRows.contains(contact.getSampleRow())); + actualObservationsByPeriods.put(truncateToTimePeriod(contact.getObservationBeginDate()), 1); } - - // Axises - CategoryAxis categoryAxis = new CategoryAxis(""); - - String valueAxisLabel = getValueAxisLabel(); - ValueAxis valueAxis = new NumberAxis(valueAxisLabel); - valueAxis.setUpperMargin(0.15); - - // Renderer for Category - AbstractCategoryItemRenderer renderer = new BarRenderer(); - // Show labels on each element - renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); - renderer.setBaseItemLabelsVisible(Boolean.TRUE); - - CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer); - plot.setOrientation(PlotOrientation.VERTICAL); - plot.setAxisOffset(RectangleInsets.ZERO_INSETS); - - JFreeChart chart = new JFreeChart( - I18n.l(locale, SynthesisId.GRAPH_SAMPLING.getI18nKey()), - JFreeChart.DEFAULT_TITLE_FONT, plot, true); - - return chart; - + return actualObservationsByPeriods; } } @@ -907,14 +805,15 @@ public class SynthesisService extends WaoServiceSupport { return I18n.l(locale, "wao.synthesis.observationsCount.sclerochronology"); } - /** - * Le réalisé est le nombre d'individus échantilonnés sur le trimestre. - */ @Override - protected Map<Date, Integer> getActualPerPeriods(Contact contact) { - Date trimester = truncateToTimePeriod(contact.getObservationBeginDate()); - Integer actual = contact.getSampleSize(); - return ImmutableMap.of(trimester, actual); + protected ListMultimap<Date, Integer> getActualObservationsByPeriods(Collection<Contact> contacts) { + ListMultimap<Date, Integer> actualObservationsByPeriods = LinkedListMultimap.create(); + for (Contact contact : contacts) { + Preconditions.checkState(sampleRows.contains(contact.getSampleRow())); + Date trimester = truncateToTimePeriod(contact.getObservationBeginDate()); + actualObservationsByPeriods.put(trimester, contact.getSampleSize()); + } + return actualObservationsByPeriods; } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.