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;
|
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.DateTime;
|
||||||
import org.joda.time.LocalDate;
|
import org.joda.time.LocalDate;
|
||||||
import org.joda.time.Months;
|
import org.joda.time.Months;
|
||||||
import org.joda.time.ReadablePeriod;
|
import org.joda.time.ReadablePeriod;
|
||||||
import org.zkoss.ganttz.util.Interval;
|
|
||||||
import org.zkoss.util.Locales;
|
import org.zkoss.util.Locales;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Zoom level with semesters in the first level and months in the second level
|
* Zoom level with semesters in the first level and months in the second level
|
||||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
* @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();
|
public static final DetailThreeTimeTrackerState INSTANCE = new DetailThreeTimeTrackerState();
|
||||||
|
|
||||||
private static final int FIRST_LEVEL_SIZE = 300;
|
private static final int FIRST_LEVEL_SIZE = 300;
|
||||||
protected static final int SECOND_LEVEL_SIZE = 50;
|
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() {
|
private DetailThreeTimeTrackerState() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Collection<DetailItem> createDetailsForFirstLevel(
|
protected ReadablePeriod getPeriodFirstLevel() {
|
||||||
Interval interval) {
|
return Months.months(6);
|
||||||
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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Collection<DetailItem> createDetailsForSecondLevel(
|
protected ReadablePeriod getPeriodSecondLevel() {
|
||||||
Interval interval) {
|
return Months.months(1);
|
||||||
return createDetails(getRealIntervalFor(interval), Months.months(1),
|
|
||||||
new IDetailItemCreator() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DetailItem create(DateTime dateTime) {
|
|
||||||
return new DetailItem(SECOND_LEVEL_SIZE,
|
|
||||||
getMonthString(dateTime));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
if (date.getMonthOfYear() == 1 && date.getDayOfMonth() == 1)
|
||||||
return date;
|
return date;
|
||||||
if (date.getMonthOfYear() == 7 && date.getDayOfMonth() == 1)
|
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) {
|
private String getMonthString(DateTime dateTime) {
|
||||||
return dateTime.toString("MMM", Locales.getCurrent());
|
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