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 :

http://dive4elements.wald.intevation.org