annotate artifacts/src/main/java/org/dive4elements/river/utils/UniqueDateFormatter.java @ 6955:94cb1845c667

(issue1452) Coalesce to zero to avoid NaN arithmetic.
author Andre Heinecke <aheinecke@intevation.de>
date Fri, 30 Aug 2013 15:45:14 +0200
parents 90f66b4fc34d
children 0a5239a1e46e
rev   line source
6865
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
3 *
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
7 */
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
8
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
9 package org.dive4elements.river.utils;
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
10
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
11 import java.text.DateFormat;
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
12 import java.util.Collection;
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
13 import java.util.Date;
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
14 import java.util.HashMap;
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
15 import java.util.Map;
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
16
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
17 import org.apache.log4j.Logger;
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
18
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
19 public class UniqueDateFormatter {
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
20
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
21 private static Logger log = Logger.getLogger(UniqueDateFormatter.class);
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
22
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
23 private DateFormat df;
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
24 private DateFormat lf;
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
25 private Map<String, int[]> collisions;
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
26
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
27 public UniqueDateFormatter(
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
28 DateFormat df,
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
29 DateFormat lf,
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
30 Collection<Date> dates
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
31 ) {
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
32 this.df = df;
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
33 this.lf = lf;
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
34 collisions = build(dates);
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
35 }
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
36
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
37 private Map<String, int []> build(Collection<Date> dates) {
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
38 Map<String, int []> collisions = new HashMap<String, int[]>();
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
39 for (Date d: dates) {
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
40 String s = df.format(d);
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
41 int [] count = collisions.get(s);
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
42 if (count == null) {
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
43 collisions.put(s, count = new int[1]);
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
44 }
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
45 if (++count[0] > 1) {
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
46 log.debug("date collsion found: " + d);
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
47 }
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
48 }
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
49 return collisions;
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
50 }
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
51
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
52 public String format(Date date) {
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
53 String s = df.format(date);
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
54 int [] count = collisions.get(s);
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
55 return count == null || count[0] < 2
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
56 ? s
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
57 : lf.format(date);
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
58 }
90f66b4fc34d Factored our date formatter.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
59 }

http://dive4elements.wald.intevation.org