Mercurial > dive4elements > river
changeset 6844:437d056ce426
Part of flys/issue1168: Make facet names unique. It should help but there must be bug before the facet generation.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 15 Aug 2013 18:56:20 +0200 |
parents | 2e002f989c24 |
children | 30b6ff8fd688 |
files | artifacts/src/main/java/org/dive4elements/river/artifacts/states/fixation/FixAnalysisCompute.java |
diffstat | 1 files changed, 62 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/fixation/FixAnalysisCompute.java Thu Aug 15 18:00:16 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/fixation/FixAnalysisCompute.java Thu Aug 15 18:56:20 2013 +0200 @@ -9,8 +9,11 @@ package org.dive4elements.river.artifacts.states.fixation; import java.text.DateFormat; +import java.util.Collection; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.apache.log4j.Logger; @@ -41,6 +44,7 @@ import org.dive4elements.river.artifacts.model.fixings.FixWQCurveFacet; import org.dive4elements.river.artifacts.resources.Resources; import org.dive4elements.river.artifacts.states.DefaultState; +import org.dive4elements.river.utils.Formatter; import org.dive4elements.river.utils.IdGenerator; /** @@ -171,15 +175,15 @@ int qsS = access.getQSectorStart(); int qsE = access.getQSectorEnd(); - // TODO: i18n - DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM); + DateFormat df = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy"); + DateFormat lf = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyy'T'HH:mm"); DateRange [] periods = access.getAnalysisPeriods(); for (int i = 0; i < periods.length; i++) { DateRange period = periods[i]; String startDate = df.format(period.getFrom()); - String endDate = df.format(period.getTo()); + String endDate = df.format(period.getTo()); for (int j = qsS; j <= qsE; j++) { @@ -233,19 +237,22 @@ I18N_ANALYSIS, I18N_ANALYSIS); + Collection<Date> aeds = fr.getAnalysisEventsDates(i); + UniqueDateFormatter cf = new UniqueDateFormatter(df, lf, aeds); + int k = 0; - for (Date d: fr.getAnalysisEventsDates(i)) { + for (Date d: aeds) { int anaNdx = i << 8; anaNdx = anaNdx | k; facets.add(new FixAnalysisEventsFacet(anaNdx, FIX_ANALYSIS_EVENTS_DWT, - eventDesc + (i+1) + " - " + df.format(d))); + eventDesc + (i+1) + " - " + cf.format(d))); facets.add(new FixLongitudinalAnalysisFacet(anaNdx, FIX_ANALYSIS_EVENTS_LS, - eventDesc + (i+1) + " - " + df.format(d))); + eventDesc + (i+1) + " - " + cf.format(d))); facets.add(new FixAnalysisEventsFacet(anaNdx, FIX_ANALYSIS_EVENTS_WQ, - eventDesc + (i+1) +" - " + df.format(d))); + eventDesc + (i+1) +" - " + cf.format(d))); k++; } } @@ -259,27 +266,29 @@ I18N_REFERENCEDEVIATION, I18N_REFERENCEDEVIATION); + Collection<Date> reds = fr.getReferenceEventsDates(); + UniqueDateFormatter cf = new UniqueDateFormatter(df, lf, reds); + int i = 0; - for (Date d: fr.getReferenceEventsDates()) { + for (Date d: reds) { int refNdx = idg.next() << 8; refNdx |= i; facets.add(new FixReferenceEventsFacet(refNdx, FIX_REFERENCE_EVENTS_DWT, - i18n_ref + " - " + df.format(d))); + i18n_ref + " - " + cf.format(d))); refNdx = idg.next() << 8; refNdx = refNdx | i; facets.add(new FixLongitudinalReferenceFacet(refNdx, FIX_REFERENCE_EVENTS_LS, - i18n_ref + " - " + df.format(d))); + i18n_ref + " - " + cf.format(d))); refNdx = idg.next() << 8; refNdx |= i; facets.add(new FixReferenceEventsFacet(refNdx, FIX_REFERENCE_EVENTS_WQ, - i18n_ref + " - " + df.format(d))); + i18n_ref + " - " + cf.format(d))); i++; } - facets.add(new FixLongitudinalDeviationFacet(idg.next(), FIX_DEVIATION_LS, i18n_dev)); @@ -333,5 +342,46 @@ I18N_DEVIATION))); return res; } + + /** Little hack to format dates unique if they collide. */ + private static class UniqueDateFormatter { + + private DateFormat df; + private DateFormat lf; + private Map<String, int[]> collisions; + + UniqueDateFormatter( + DateFormat df, + DateFormat lf, + Collection<Date> dates + ) { + this.df = df; + this.lf = lf; + collisions = build(dates); + } + + private Map<String, int []> build(Collection<Date> dates) { + Map<String, int []> collisions = new HashMap<String, int[]>(); + for (Date d: dates) { + String s = df.format(d); + int [] count = collisions.get(s); + if (count == null) { + collisions.put(s, count = new int[1]); + } + if (++count[0] > 1) { + log.debug("date collsion found: " + d); + } + } + return collisions; + } + + String format(Date date) { + String s = df.format(date); + int [] count = collisions.get(s); + return count == null || count[0] < 2 + ? s + : lf.format(date); + } + } // class UniqueDateFormatter } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :