/* * */ package ext.egantt.model.drawing.granularity; import com.egantt.model.drawing.DrawingGranularity; import com.egantt.model.drawing.DrawingTransform; import com.egantt.model.drawing.granularity.iterator.ArrayIterator; import ext.egantt.model.drawing.granularity.iterator.CalendarIterator; import java.util.*; public class CachedCalendarGranularity implements DrawingGranularity { public CachedCalendarGranularity(int step, Object granularities[]) { this(step, true, granularities); } protected CachedCalendarGranularity(int step, boolean round, Object granularities[]) { this.round = round; this.step = step; this.granularities = granularities; } public long width(Object granularity, DrawingTransform transform, long width) { long startTime = ((Long)transform.inverseTransform(0L, width)).longValue(); int field = ((Integer)granularity).intValue(); Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date(startTime)); calendar.add(field, step); long resultPixelsFromZero = transform.transform(new Long(calendar.getTime().getTime()), width); calendar.setTime(new Date(startTime)); for(int i = field + 1; i < 14; i++) calendar.clear(i); long resultDeadPixels = transform.transform(new Long(calendar.getTime().getTime()), width); return resultPixelsFromZero - resultDeadPixels; } public Iterator keys() { return new ArrayIterator(granularities, 1); } public Iterator values(Object granularity, DrawingTransform transform, long width) { return new CalendarIterator(transform, ((Integer)granularity).intValue(), step, width, round); } protected Object granularities[]; protected boolean round; protected int step; }