diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailThreeTimeTrackerState.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailThreeTimeTrackerState.java index 6df6454c6..19e9cdccd 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailThreeTimeTrackerState.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/DetailThreeTimeTrackerState.java @@ -1,87 +1,49 @@ package org.zkoss.ganttz.util.zoom; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.List; - import org.joda.time.DateTime; import org.joda.time.LocalDate; import org.joda.time.Months; import org.joda.time.ReadablePeriod; -import org.zkoss.ganttz.util.Interval; import org.zkoss.util.Locales; /** * Zoom level with semesters in the first level and months in the second level * @author Óscar González Fernández */ -public class DetailThreeTimeTrackerState extends TimeTrackerState { +public class DetailThreeTimeTrackerState extends TimeTrackerStateUsingJodaTime { public static final DetailThreeTimeTrackerState INSTANCE = new DetailThreeTimeTrackerState(); private static final int FIRST_LEVEL_SIZE = 300; protected static final int SECOND_LEVEL_SIZE = 50; - private static LocalDate asLocalDate(Date date) { - return new LocalDate(date); - } - - public interface IDetailItemCreator { - DetailItem create(DateTime dateTime); - } - - public static Collection createDetails(Interval interval, - ReadablePeriod period, IDetailItemCreator detailItemCreator) { - DateTime current = asLocalDate(interval.getStart()) - .toDateTimeAtStartOfDay(); - DateTime end = asLocalDate(interval.getFinish()) - .toDateTimeAtStartOfDay(); - List result = new ArrayList(); - while (current.isBefore(end)) { - result.add(detailItemCreator.create(current)); - current = current.plus(period); - } - return result; - } - private DetailThreeTimeTrackerState() { } @Override - protected Collection createDetailsForFirstLevel( - Interval interval) { - return createDetails(getRealIntervalFor(interval), Months.months(6), - new IDetailItemCreator() { - - @Override - public DetailItem create(DateTime dateTime) { - return new DetailItem(FIRST_LEVEL_SIZE, - getYearWithSemesterString(dateTime)); - } - }); - } - - private String getYearWithSemesterString(DateTime dateTime) { - return dateTime.getYear() + "," - + (dateTime.getMonthOfYear() < 6 ? "H1" : "H2"); + protected ReadablePeriod getPeriodFirstLevel() { + return Months.months(6); } @Override - protected Collection createDetailsForSecondLevel( - Interval interval) { - return createDetails(getRealIntervalFor(interval), Months.months(1), - new IDetailItemCreator() { - - @Override - public DetailItem create(DateTime dateTime) { - return new DetailItem(SECOND_LEVEL_SIZE, - getMonthString(dateTime)); - } - }); + protected ReadablePeriod getPeriodSecondLevel() { + return Months.months(1); } - public LocalDate round(LocalDate date, boolean down) { + @Override + protected IDetailItemCreator getDetailItemCreatorSecondLevel() { + return new IDetailItemCreator() { + + @Override + public DetailItem create(DateTime dateTime) { + return new DetailItem(SECOND_LEVEL_SIZE, + getMonthString(dateTime)); + } + }; + } + + @Override + protected LocalDate round(LocalDate date, boolean down) { if (date.getMonthOfYear() == 1 && date.getDayOfMonth() == 1) return date; if (date.getMonthOfYear() == 7 && date.getDayOfMonth() == 1) @@ -95,15 +57,23 @@ public class DetailThreeTimeTrackerState extends TimeTrackerState { } } - @Override - public Interval getRealIntervalFor(Interval testInterval) { - LocalDate start = round(asLocalDate(testInterval.getStart()), true); - LocalDate finish = round(asLocalDate(testInterval.getFinish()), false); - return new Interval(start.toDateTimeAtStartOfDay().toDate(), finish - .toDateTimeAtStartOfDay().toDate()); - } - private String getMonthString(DateTime dateTime) { return dateTime.toString("MMM", Locales.getCurrent()); } -} + + private String getYearWithSemesterString(DateTime dateTime) { + return dateTime.getYear() + "," + + (dateTime.getMonthOfYear() < 6 ? "H1" : "H2"); + } + + @Override + protected IDetailItemCreator getDetailItemCreatorFirstLevel() { + return new IDetailItemCreator() { + @Override + public DetailItem create(DateTime dateTime) { + return new DetailItem(FIRST_LEVEL_SIZE, + getYearWithSemesterString(dateTime)); + } + }; + } +} \ No newline at end of file diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/TimeTrackerStateUsingJodaTime.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/TimeTrackerStateUsingJodaTime.java new file mode 100644 index 000000000..8aa123bba --- /dev/null +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/zoom/TimeTrackerStateUsingJodaTime.java @@ -0,0 +1,71 @@ +package org.zkoss.ganttz.util.zoom; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.List; + +import org.joda.time.DateTime; +import org.joda.time.LocalDate; +import org.joda.time.ReadablePeriod; +import org.zkoss.ganttz.util.Interval; + +/** + * @author Óscar González Fernández + */ +public abstract class TimeTrackerStateUsingJodaTime extends TimeTrackerState { + + protected static LocalDate asLocalDate(Date date) { + return new LocalDate(date); + } + + public interface IDetailItemCreator { + DetailItem create(DateTime dateTime); + } + + public static Collection createDetails(Interval interval, + ReadablePeriod period, IDetailItemCreator detailItemCreator) { + DateTime current = asLocalDate(interval.getStart()) + .toDateTimeAtStartOfDay(); + DateTime end = asLocalDate(interval.getFinish()) + .toDateTimeAtStartOfDay(); + List result = new ArrayList(); + while (current.isBefore(end)) { + result.add(detailItemCreator.create(current)); + current = current.plus(period); + } + return result; + } + + @Override + protected Collection createDetailsForFirstLevel( + Interval interval) { + return createDetails(getRealIntervalFor(interval), + getPeriodFirstLevel(), getDetailItemCreatorFirstLevel()); + } + + @Override + protected Collection createDetailsForSecondLevel( + Interval interval) { + return createDetails(getRealIntervalFor(interval), + getPeriodSecondLevel(), getDetailItemCreatorSecondLevel()); + } + + protected abstract IDetailItemCreator getDetailItemCreatorFirstLevel(); + + protected abstract ReadablePeriod getPeriodFirstLevel(); + + protected abstract IDetailItemCreator getDetailItemCreatorSecondLevel(); + + protected abstract ReadablePeriod getPeriodSecondLevel(); + + protected abstract LocalDate round(LocalDate date, boolean down); + + @Override + public Interval getRealIntervalFor(Interval testInterval) { + LocalDate start = round(asLocalDate(testInterval.getStart()), true); + LocalDate finish = round(asLocalDate(testInterval.getFinish()), false); + return new Interval(start.toDateTimeAtStartOfDay().toDate(), finish + .toDateTimeAtStartOfDay().toDate()); + } +}