ItEr15S12RFComportamentoGraficoPlanificadorItEr14S13: Extracted superclass from DetailThreeTimeTrackerState.
TimeTrackerStateUsingJodaTime contains functionality that can be reused.
This commit is contained in:
parent
6f1099836b
commit
eb34677ef1
2 changed files with 107 additions and 66 deletions
|
|
@ -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 <ogonzalez@igalia.com>
|
||||
*/
|
||||
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<DetailItem> createDetails(Interval interval,
|
||||
ReadablePeriod period, IDetailItemCreator detailItemCreator) {
|
||||
DateTime current = asLocalDate(interval.getStart())
|
||||
.toDateTimeAtStartOfDay();
|
||||
DateTime end = asLocalDate(interval.getFinish())
|
||||
.toDateTimeAtStartOfDay();
|
||||
List<DetailItem> result = new ArrayList<DetailItem>();
|
||||
while (current.isBefore(end)) {
|
||||
result.add(detailItemCreator.create(current));
|
||||
current = current.plus(period);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private DetailThreeTimeTrackerState() {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<DetailItem> 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<DetailItem> 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));
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -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 <ogonzalez@igalia.com>
|
||||
*/
|
||||
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<DetailItem> createDetails(Interval interval,
|
||||
ReadablePeriod period, IDetailItemCreator detailItemCreator) {
|
||||
DateTime current = asLocalDate(interval.getStart())
|
||||
.toDateTimeAtStartOfDay();
|
||||
DateTime end = asLocalDate(interval.getFinish())
|
||||
.toDateTimeAtStartOfDay();
|
||||
List<DetailItem> result = new ArrayList<DetailItem>();
|
||||
while (current.isBefore(end)) {
|
||||
result.add(detailItemCreator.create(current));
|
||||
current = current.plus(period);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<DetailItem> createDetailsForFirstLevel(
|
||||
Interval interval) {
|
||||
return createDetails(getRealIntervalFor(interval),
|
||||
getPeriodFirstLevel(), getDetailItemCreatorFirstLevel());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<DetailItem> 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());
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue