package glug.gui.timebar;
import java.util.ArrayList;
import java.util.List;
import java.util.NavigableMap;
import java.util.TreeMap;
import org.joda.time.DateTimeZone;
import org.joda.time.Duration;
public class TickSet {
private final NavigableMap<Duration, Tick> tickIntervalsByDuration = new TreeMap<Duration, Tick>();
public TickSet(Tick... ticks) {
for (Tick tick : ticks) {
tickIntervalsByDuration.put(tick.getInterval().getDuration(), tick);
}
}
public NavigableMap<Duration, Tick> forRange(Duration smallestDuration, Duration largeDuration) {
return tickIntervalsByDuration.subMap(smallestDuration, true, greaterOrEqualDurationIfAvailable(largeDuration), true);
}
private Duration greaterOrEqualDurationIfAvailable(Duration largeDuration) {
Duration largestDuration = tickIntervalsByDuration.ceilingKey(largeDuration);
return largestDuration==null?largeDuration:largestDuration;
}
public TickSet with(DateTimeZone dateTimeZone) {
List<Tick> ticksWithUpdatedTimeZone = new ArrayList<Tick>(tickIntervalsByDuration.size());
for (Tick tick : tickIntervalsByDuration.values()) {
ticksWithUpdatedTimeZone.add(tick.with(dateTimeZone));
}
return new TickSet(ticksWithUpdatedTimeZone.toArray(new Tick[tickIntervalsByDuration.size()]));
}
}