ItEr37S16RFMaquetacionDesenhoAplicacionItEr36S18: Supporting the application of IDetailItemModificator

This commit is contained in:
Óscar González Fernández 2009-12-08 01:19:17 +01:00
parent ea0acba93d
commit 84d887337d
13 changed files with 156 additions and 41 deletions

View file

@ -44,6 +44,7 @@ import org.zkoss.ganttz.data.TaskLeaf;
import org.zkoss.ganttz.data.criticalpath.CriticalPathCalculator;
import org.zkoss.ganttz.extensions.IContext;
import org.zkoss.ganttz.timetracker.TimeTracker;
import org.zkoss.ganttz.timetracker.zoom.IDetailItemModificator;
import org.zkoss.ganttz.timetracker.zoom.TimeTrackerState;
import org.zkoss.ganttz.util.Interval;
import org.zkoss.zk.ui.Component;
@ -154,13 +155,16 @@ public class FunctionalityExposedForExtensions<T> implements IContext<T> {
public FunctionalityExposedForExtensions(Planner planner,
IAdapterToTaskFundamentalProperties<T> adapter,
IStructureNavigator<T> navigator, GanttDiagramGraph diagramGraph) {
IStructureNavigator<T> navigator, GanttDiagramGraph diagramGraph,
IDetailItemModificator firstLevelModificator,
IDetailItemModificator secondLevelModificator) {
this.planner = planner;
this.adapter = adapter;
this.navigator = navigator;
this.diagramGraph = diagramGraph;
this.timeTracker = new TimeTracker(new Interval(TimeTrackerState
.year(2009), TimeTrackerState.year(2011)));
.year(2009), TimeTrackerState.year(2011)),
firstLevelModificator, secondLevelModificator);
}
/**

View file

@ -179,7 +179,8 @@ public class Planner extends HtmlMacroComponent {
configuration.isDependenciesConstraintsHavePriority());
FunctionalityExposedForExtensions<T> newContext = new FunctionalityExposedForExtensions<T>(
this, configuration.getAdapter(), configuration.getNavigator(),
diagramGraph);
diagramGraph, configuration.getFirstLevelModificators(),
configuration.getSecondLevelModificators());
this.contextualizedGlobalCommands = contextualize(newContext,
configuration.getGlobalCommands());
this.commandsOnTasksContextualized = contextualize(newContext,

View file

@ -32,6 +32,8 @@ import org.zkoss.ganttz.extensions.ICommand;
import org.zkoss.ganttz.extensions.ICommandOnTask;
import org.zkoss.ganttz.extensions.IContext;
import org.zkoss.ganttz.extensions.IContextWithPlannerTask;
import org.zkoss.ganttz.timetracker.zoom.IDetailItemModificator;
import org.zkoss.ganttz.timetracker.zoom.SeveralModificators;
import org.zkoss.zk.ui.Component;
/**
@ -98,6 +100,12 @@ public class PlannerConfiguration<T> implements IDisabilityConfiguration {
private boolean criticalPathEnabled = true;
private IDetailItemModificator firstLevelModificators = SeveralModificators
.empty();
private IDetailItemModificator secondLevelModificators = SeveralModificators
.empty();
public PlannerConfiguration(IAdapterToTaskFundamentalProperties<T> adapter,
IStructureNavigator<T> navigator, List<? extends T> data) {
this.adapter = adapter;
@ -232,4 +240,24 @@ public class PlannerConfiguration<T> implements IDisabilityConfiguration {
return criticalPathEnabled;
}
public IDetailItemModificator getSecondLevelModificators() {
return secondLevelModificators;
}
public void setSecondLevelModificators(
IDetailItemModificator... secondLevelModificators) {
this.secondLevelModificators = SeveralModificators
.create(secondLevelModificators);
}
public IDetailItemModificator getFirstLevelModificators() {
return firstLevelModificators;
}
public void setFirstLevelModificators(
IDetailItemModificator... firstLevelModificators) {
this.firstLevelModificators = SeveralModificators
.create(firstLevelModificators);
}
}

View file

@ -25,12 +25,15 @@ import java.beans.PropertyChangeListener;
import java.util.Collection;
import java.util.Date;
import org.apache.commons.lang.Validate;
import org.joda.time.LocalDate;
import org.zkoss.ganttz.DatesMapperOnInterval;
import org.zkoss.ganttz.IDatesMapper;
import org.zkoss.ganttz.data.Task;
import org.zkoss.ganttz.timetracker.zoom.DetailItem;
import org.zkoss.ganttz.timetracker.zoom.IDetailItemModificator;
import org.zkoss.ganttz.timetracker.zoom.IZoomLevelChangedListener;
import org.zkoss.ganttz.timetracker.zoom.SeveralModificators;
import org.zkoss.ganttz.timetracker.zoom.TimeTrackerState;
import org.zkoss.ganttz.timetracker.zoom.ZoomLevel;
import org.zkoss.ganttz.util.Interval;
@ -52,9 +55,23 @@ public class TimeTracker {
private Interval interval;
public TimeTracker(Interval interval) {
this.interval = interval;
private final IDetailItemModificator firstLevelModificator;
private final IDetailItemModificator secondLevelModificator;
public TimeTracker(Interval interval) {
this(interval, SeveralModificators.empty(), SeveralModificators.empty());
}
public TimeTracker(Interval interval,
IDetailItemModificator firstLevelModificator,
IDetailItemModificator secondLevelModificator) {
Validate.notNull(interval);
Validate.notNull(firstLevelModificator);
Validate.notNull(secondLevelModificator);
this.interval = interval;
this.firstLevelModificator = firstLevelModificator;
this.secondLevelModificator = secondLevelModificator;
}
public ZoomLevel getDetailLevel() {
@ -91,8 +108,9 @@ public class TimeTracker {
return realIntervalCached;
}
private TimeTrackerState getTimeTrackerState() {
return detailLevel.getTimeTrackerState();
public TimeTrackerState getTimeTrackerState() {
return detailLevel.getTimeTrackerState(firstLevelModificator,
secondLevelModificator);
}
private void fireZoomChanged() {

View file

@ -99,7 +99,7 @@ public abstract class TimeTrackerComponent extends HtmlMacroComponent {
}
private TimeTrackerState getTimeTrackerState() {
return getTimeTracker().getDetailLevel().getTimeTrackerState();
return getTimeTracker().getTimeTrackerState();
}
private Command _onincreasecmd = new ComponentCommand("onIncrease", 0) {

View file

@ -37,20 +37,20 @@ import org.zkoss.ganttz.util.Interval;
*/
public class DetailFiveTimeTrackerState extends TimeTrackerStateUsingJodaTime {
public static final int FIRST_LEVEL_SIZE = 140;
public static final int SECOND_LEVEL_SIZE = 20;
public static final DetailFiveTimeTrackerState INSTANCE = new DetailFiveTimeTrackerState();
DetailFiveTimeTrackerState(IDetailItemModificator firstLevelModificator,
IDetailItemModificator secondLevelModificator) {
super(firstLevelModificator, secondLevelModificator);
}
public final double daysPerPixel() {
return ((double) 1 / SECOND_LEVEL_SIZE);
}
private DetailFiveTimeTrackerState() {
}
@Override
protected IDetailItemCreator getDetailItemCreatorFirstLevel() {
return new IDetailItemCreator() {

View file

@ -33,7 +33,10 @@ import org.joda.time.Weeks;
*/
public class DetailFourTimeTrackerState extends TimeTrackerStateUsingJodaTime {
public static final DetailFourTimeTrackerState INSTANCE = new DetailFourTimeTrackerState();
DetailFourTimeTrackerState(IDetailItemModificator firstLevelModificator,
IDetailItemModificator secondLevelModificator) {
super(firstLevelModificator, secondLevelModificator);
}
private static final int FIRST_LEVEL_SIZE = 200;
private static final int SECOND_LEVEL_SIZE = 50;
@ -42,6 +45,7 @@ public class DetailFourTimeTrackerState extends TimeTrackerStateUsingJodaTime {
return ((double) 7 / SECOND_LEVEL_SIZE);
}
@Override
protected IDetailItemCreator getDetailItemCreatorFirstLevel() {
return new IDetailItemCreator() {

View file

@ -33,7 +33,6 @@ import org.zkoss.ganttz.util.Interval;
*/
public class DetailOneTimeTrackerState extends TimeTrackerState {
public static final DetailOneTimeTrackerState INSTANCE = new DetailOneTimeTrackerState();
private static final int FIRST_LEVEL_ITEM_SIZE = 200;
private static final int SECOND_LEVEL_ITEM_SIZE = 100;
@ -41,8 +40,10 @@ public class DetailOneTimeTrackerState extends TimeTrackerState {
return ((double) 365 / FIRST_LEVEL_ITEM_SIZE);
}
private DetailOneTimeTrackerState() {
};
DetailOneTimeTrackerState(IDetailItemModificator firstLevelModificator,
IDetailItemModificator secondLevelModificator) {
super(firstLevelModificator, secondLevelModificator);
}
private Collection<DetailItem> buildCollectionDetailsFirstLevel(
int initialYear, int endYear) {

View file

@ -33,7 +33,10 @@ import org.zkoss.util.Locales;
*/
public class DetailThreeTimeTrackerState extends TimeTrackerStateUsingJodaTime {
public static final DetailThreeTimeTrackerState INSTANCE = new DetailThreeTimeTrackerState();
DetailThreeTimeTrackerState(IDetailItemModificator firstLevelModificator,
IDetailItemModificator secondLevelModificator) {
super(firstLevelModificator, secondLevelModificator);
}
private static final int FIRST_LEVEL_SIZE = 300;
protected static final int SECOND_LEVEL_SIZE = 50;
@ -42,9 +45,6 @@ public class DetailThreeTimeTrackerState extends TimeTrackerStateUsingJodaTime {
return ((double) 182.5 / FIRST_LEVEL_SIZE);
}
private DetailThreeTimeTrackerState() {
}
@Override
protected ReadablePeriod getPeriodFirstLevel() {
return Months.months(6);

View file

@ -36,10 +36,15 @@ import org.zkoss.ganttz.util.Interval;
*/
public class DetailTwoTimeTrackerState extends TimeTrackerState {
public static final DetailTwoTimeTrackerState INSTANCE = new DetailTwoTimeTrackerState();
private static final int FIRST_LEVEL_ITEM_SIZE = 400;
private static final int SECOND_LEVEL_ITEM_SIZE = 100;
protected DetailTwoTimeTrackerState(
IDetailItemModificator firstLevelModificator,
IDetailItemModificator secondLevelModificator) {
super(firstLevelModificator, secondLevelModificator);
}
public final double daysPerPixel() {
return ((double) 365 / FIRST_LEVEL_ITEM_SIZE);
}

View file

@ -38,8 +38,14 @@ public abstract class TimeTrackerState {
protected static final long MILLSECONDS_IN_DAY = 1000 * 60 * 60 * 24;
protected static final int NUMBER_OF_ITEMS_MINIMUM = 10;
public Collection<DetailItem> getFirstLevelDetails(Interval interval) {
return markEvens(createDetailsForFirstLevel(interval));
private final IDetailItemModificator firstLevelModificator;
private final IDetailItemModificator secondLevelModificator;
protected TimeTrackerState(IDetailItemModificator firstLevelModificator,
IDetailItemModificator secondLevelModificator) {
this.firstLevelModificator = firstLevelModificator;
this.secondLevelModificator = secondLevelModificator;
}
// When applied after setting current day, removes extra data as current day
@ -65,7 +71,23 @@ public abstract class TimeTrackerState {
public Collection<DetailItem> getSecondLevelDetails(Interval interval) {
// Also mark holidays and current date
return markEvens(createDetailsForSecondLevel(interval));
return markEvens(applyConfiguredModifications(secondLevelModificator,
createDetailsForSecondLevel(interval)));
}
public Collection<DetailItem> getFirstLevelDetails(Interval interval) {
return markEvens(applyConfiguredModifications(firstLevelModificator,
createDetailsForFirstLevel(interval)));
}
private static List<DetailItem> applyConfiguredModifications(
IDetailItemModificator modificator,
Collection<? extends DetailItem> detailsItems) {
List<DetailItem> result = new ArrayList<DetailItem>(detailsItems.size());
for (DetailItem each : detailsItems) {
result.add(modificator.applyModificationsTo(each));
}
return result;
}
protected static int[] calculateInitialEndYear(Date initialDate,

View file

@ -35,6 +35,12 @@ import org.zkoss.ganttz.util.Interval;
*/
public abstract class TimeTrackerStateUsingJodaTime extends TimeTrackerState {
TimeTrackerStateUsingJodaTime(
IDetailItemModificator firstLevelModificator,
IDetailItemModificator secondLevelModificator) {
super(firstLevelModificator, secondLevelModificator);
}
protected static LocalDate asLocalDate(Date date) {
return new LocalDate(date);
}

View file

@ -25,20 +25,46 @@ package org.zkoss.ganttz.timetracker.zoom;
*/
public enum ZoomLevel {
DETAIL_ONE(DetailOneTimeTrackerState.INSTANCE), DETAIL_TWO(
DetailTwoTimeTrackerState.INSTANCE), DETAIL_THREE(
DetailThreeTimeTrackerState.INSTANCE), DETAIL_FOUR(
DetailFourTimeTrackerState.INSTANCE), DETAIL_FIVE(
DetailFiveTimeTrackerState.INSTANCE);
private final TimeTrackerState state;
private ZoomLevel(TimeTrackerState state) {
if (state == null) {
throw new IllegalArgumentException("state cannot be null");
DETAIL_ONE {
@Override
public TimeTrackerState getTimeTrackerState(
IDetailItemModificator firstLevel,
IDetailItemModificator secondLevel) {
return new DetailOneTimeTrackerState(firstLevel, secondLevel);
}
this.state = state;
}
},
DETAIL_TWO {
@Override
public TimeTrackerState getTimeTrackerState(
IDetailItemModificator firstLevel,
IDetailItemModificator secondLevel) {
return new DetailTwoTimeTrackerState(firstLevel, secondLevel);
}
},
DETAIL_THREE {
@Override
public TimeTrackerState getTimeTrackerState(
IDetailItemModificator firstLevel,
IDetailItemModificator secondLevel) {
return new DetailThreeTimeTrackerState(firstLevel, secondLevel);
}
},
DETAIL_FOUR {
@Override
public TimeTrackerState getTimeTrackerState(
IDetailItemModificator firstLevel,
IDetailItemModificator secondLevel) {
return new DetailFourTimeTrackerState(firstLevel, secondLevel);
}
},
DETAIL_FIVE {
@Override
public TimeTrackerState getTimeTrackerState(
IDetailItemModificator firstLevel,
IDetailItemModificator secondLevel) {
return new DetailFiveTimeTrackerState(firstLevel, secondLevel);
}
};
/**
* @return if there is no next, returns <code>this</code>. Otherwise returns
@ -63,8 +89,8 @@ public enum ZoomLevel {
return ZoomLevel.values()[ordinal() - 1];
}
public TimeTrackerState getTimeTrackerState() {
return state;
}
public abstract TimeTrackerState getTimeTrackerState(
IDetailItemModificator firstLevel,
IDetailItemModificator secondLevel);
}