Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/DateUniqueMaker.java @ 6877:2d96d8240e3e
FixA: Make dates of analysis periods unique, too. TODO: Remap the indices like the reference interval.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Wed, 21 Aug 2013 01:09:25 +0200 |
parents | |
children | a805211690f7 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/DateUniqueMaker.java Wed Aug 21 01:09:25 2013 +0200 @@ -0,0 +1,41 @@ +package org.dive4elements.river.artifacts.model.fixings; + +import java.util.Date; + +import gnu.trove.TIntObjectHashMap; +import gnu.trove.TLongHashSet; + +public class DateUniqueMaker { + + private TLongHashSet times; + private TIntObjectHashMap already; + + public DateUniqueMaker() { + times = new TLongHashSet(); + already = new TIntObjectHashMap(); + } + + public <T extends QWI> void makeUnique(T t) { + + // Map same index to same new value + if (already.containsKey(t.index)) { + t.date = (Date)already.get(t.index); + return; + } + long time = t.date.getTime(); + if (!times.add(time)) { // same found before + do { + time += 30L*1000L; // Add 30secs + } + while (!times.add(time)); + Date newDate = new Date(time); + already.put(t.index, newDate); + // Write back modified time. + t.date = newDate; + } + else { + // register as seen. + already.put(t.index, t.date); + } + } +}