diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java b/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java index 2588fce4a..59f95b05e 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java @@ -262,6 +262,10 @@ public class Planner extends HtmlMacroComponent { configuration.isDependenciesConstraintsHavePriority()); FunctionalityExposedForExtensions newContext = new FunctionalityExposedForExtensions( this, configuration, diagramGraph); + diagramGraph.addPreChangeListeners(configuration + .getPreChangeListeners()); + diagramGraph.addPostChangeListeners(configuration + .getPostChangeListeners()); this.contextualizedGlobalCommands = contextualize(newContext, configuration.getGlobalCommands()); this.commandsOnTasksContextualized = contextualize(newContext, diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/adapters/PlannerConfiguration.java b/ganttzk/src/main/java/org/zkoss/ganttz/adapters/PlannerConfiguration.java index 7de0c65a9..4eb8e684d 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/adapters/PlannerConfiguration.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/adapters/PlannerConfiguration.java @@ -29,6 +29,7 @@ import java.util.Map; import org.apache.commons.lang.Validate; import org.zkoss.ganttz.Planner; +import org.zkoss.ganttz.data.GanttDiagramGraph.IGraphChangeListener; import org.zkoss.ganttz.data.constraint.Constraint; import org.zkoss.ganttz.data.constraint.DateConstraint; import org.zkoss.ganttz.extensions.ICommand; @@ -150,6 +151,10 @@ public class PlannerConfiguration implements IDisabilityConfiguration { private boolean expandPlanningViewCharts; + private final List preGraphChangeListeners = new ArrayList(); + + private final List postGraphChangeListeners = new ArrayList(); + public PlannerConfiguration(IAdapterToTaskFundamentalProperties adapter, IStructureNavigator navigator, List data) { this.adapter = adapter; @@ -380,4 +385,24 @@ public class PlannerConfiguration implements IDisabilityConfiguration { return expandPlanningViewCharts; } + public void addPreGraphChangeListener( + IGraphChangeListener preGraphChangeListener) { + Validate.notNull(preGraphChangeListener); + preGraphChangeListeners.add(preGraphChangeListener); + } + + public void addPostGraphChangeListener( + IGraphChangeListener postGraphChangeListener) { + Validate.notNull(postGraphChangeListener); + postGraphChangeListeners.add(postGraphChangeListener); + } + + public List getPreChangeListeners() { + return Collections.unmodifiableList(preGraphChangeListeners); + } + + public List getPostChangeListeners() { + return Collections.unmodifiableList(postGraphChangeListeners); + } + } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java index 2705d10ae..427f0b0ae 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java @@ -123,6 +123,20 @@ public class GanttDiagramGraph implements ICriticalPathCalculable { postGraphChangeListeners.remove(postGraphChangeListener); } + public void addPreChangeListeners( + Collection preChangeListeners) { + for (IGraphChangeListener each : preChangeListeners) { + addPreGraphChangeListener(each); + } + } + + public void addPostChangeListeners( + Collection postChangeListeners) { + for (IGraphChangeListener each : postChangeListeners) { + addPostGraphChangeListener(each); + } + } + public GanttDiagramGraph(List> globalStartConstraints, List> globalEndConstraints, boolean dependenciesConstraintsHavePriority) { @@ -1158,7 +1172,6 @@ public class GanttDiagramGraph implements ICriticalPathCalculable { } return result; } - } interface IReentranceCases {