Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/states/fixation/FixAnalysisCompute.java @ 6865:90f66b4fc34d
Factored our date formatter.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Mon, 19 Aug 2013 12:45:27 +0200 |
parents | b87b20c71407 |
children | 3e93f29281bc |
comparison
equal
deleted
inserted
replaced
6864:b55111e13acd | 6865:90f66b4fc34d |
---|---|
9 package org.dive4elements.river.artifacts.states.fixation; | 9 package org.dive4elements.river.artifacts.states.fixation; |
10 | 10 |
11 import java.text.DateFormat; | 11 import java.text.DateFormat; |
12 import java.util.Collection; | 12 import java.util.Collection; |
13 import java.util.Date; | 13 import java.util.Date; |
14 import java.util.HashMap; | |
15 import java.util.List; | 14 import java.util.List; |
16 import java.util.Map; | |
17 | 15 |
18 import org.apache.log4j.Logger; | 16 import org.apache.log4j.Logger; |
19 | 17 |
20 import org.dive4elements.artifactdatabase.state.Facet; | 18 import org.dive4elements.artifactdatabase.state.Facet; |
21 import org.dive4elements.artifactdatabase.state.FacetActivity; | 19 import org.dive4elements.artifactdatabase.state.FacetActivity; |
44 import org.dive4elements.river.artifacts.model.fixings.FixWQCurveFacet; | 42 import org.dive4elements.river.artifacts.model.fixings.FixWQCurveFacet; |
45 import org.dive4elements.river.artifacts.resources.Resources; | 43 import org.dive4elements.river.artifacts.resources.Resources; |
46 import org.dive4elements.river.artifacts.states.DefaultState; | 44 import org.dive4elements.river.artifacts.states.DefaultState; |
47 import org.dive4elements.river.utils.Formatter; | 45 import org.dive4elements.river.utils.Formatter; |
48 import org.dive4elements.river.utils.IdGenerator; | 46 import org.dive4elements.river.utils.IdGenerator; |
47 import org.dive4elements.river.utils.UniqueDateFormatter; | |
49 | 48 |
50 /** | 49 /** |
51 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> | 50 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> |
52 */ | 51 */ |
53 public class FixAnalysisCompute | 52 public class FixAnalysisCompute |
338 Resources.getMsg(context.getMeta(), | 337 Resources.getMsg(context.getMeta(), |
339 I18N_DEVIATION, | 338 I18N_DEVIATION, |
340 I18N_DEVIATION))); | 339 I18N_DEVIATION))); |
341 return res; | 340 return res; |
342 } | 341 } |
343 | |
344 /** Little hack to format dates unique if they collide. */ | |
345 private static class UniqueDateFormatter { | |
346 | |
347 private DateFormat df; | |
348 private DateFormat lf; | |
349 private Map<String, int[]> collisions; | |
350 | |
351 UniqueDateFormatter( | |
352 DateFormat df, | |
353 DateFormat lf, | |
354 Collection<Date> dates | |
355 ) { | |
356 this.df = df; | |
357 this.lf = lf; | |
358 collisions = build(dates); | |
359 } | |
360 | |
361 private Map<String, int []> build(Collection<Date> dates) { | |
362 Map<String, int []> collisions = new HashMap<String, int[]>(); | |
363 for (Date d: dates) { | |
364 String s = df.format(d); | |
365 int [] count = collisions.get(s); | |
366 if (count == null) { | |
367 collisions.put(s, count = new int[1]); | |
368 } | |
369 if (++count[0] > 1) { | |
370 log.debug("date collsion found: " + d); | |
371 } | |
372 } | |
373 return collisions; | |
374 } | |
375 | |
376 String format(Date date) { | |
377 String s = df.format(date); | |
378 int [] count = collisions.get(s); | |
379 return count == null || count[0] < 2 | |
380 ? s | |
381 : lf.format(date); | |
382 } | |
383 } // class UniqueDateFormatter | |
384 } | 342 } |
385 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : | 343 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : |