teichmann@6865: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@6865: * Software engineering by Intevation GmbH teichmann@6865: * teichmann@6865: * This file is Free Software under the GNU AGPL (>=v3) teichmann@6865: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@6865: * documentation coming with Dive4Elements River for details. teichmann@6865: */ teichmann@6865: teichmann@6865: package org.dive4elements.river.utils; teichmann@6865: teichmann@6865: import java.text.DateFormat; teichmann@6865: import java.util.Collection; teichmann@6865: import java.util.Date; teichmann@6865: import java.util.HashMap; teichmann@6865: import java.util.Map; teichmann@6865: teichmann@6865: import org.apache.log4j.Logger; teichmann@6865: teichmann@6865: public class UniqueDateFormatter { teichmann@6865: teichmann@6865: private static Logger log = Logger.getLogger(UniqueDateFormatter.class); teichmann@6865: teichmann@6865: private DateFormat df; teichmann@6865: private DateFormat lf; teichmann@6865: private Map collisions; teichmann@6865: teichmann@6865: public UniqueDateFormatter( teichmann@6865: DateFormat df, teichmann@6865: DateFormat lf, teichmann@6865: Collection dates teichmann@6865: ) { teichmann@6865: this.df = df; teichmann@6865: this.lf = lf; teichmann@6865: collisions = build(dates); teichmann@6865: } teichmann@6865: teichmann@6865: private Map build(Collection dates) { teichmann@6865: Map collisions = new HashMap(); teichmann@6865: for (Date d: dates) { teichmann@6865: String s = df.format(d); teichmann@6865: int [] count = collisions.get(s); teichmann@6865: if (count == null) { teichmann@6865: collisions.put(s, count = new int[1]); teichmann@6865: } teichmann@6865: if (++count[0] > 1) { teichmann@6865: log.debug("date collsion found: " + d); teichmann@6865: } teichmann@6865: } teichmann@6865: return collisions; teichmann@6865: } teichmann@6865: teichmann@6865: public String format(Date date) { teichmann@6865: String s = df.format(date); teichmann@6865: int [] count = collisions.get(s); teichmann@6865: return count == null || count[0] < 2 teichmann@6865: ? s teichmann@6865: : lf.format(date); teichmann@6865: } teichmann@6865: }