From 4648aa8754c3ed8cb1604f6c325276dc12d400ca Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Mon, 3 Jan 2011 16:10:57 +0100 Subject: [PATCH] Fixed critical path to take into account backwards planning. FEA: ItEr67OTS05AdaptacionCaminhoCriticoPlanificacionBackwards --- .../zkoss/ganttz/data/GanttDiagramGraph.java | 5 +++++ .../criticalpath/CriticalPathCalculator.java | 19 ++++++++++++++++--- .../criticalpath/ICriticalPathCalculable.java | 2 ++ .../CriticalPathCalculatorTest.java | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) 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 44fbf343d..f519a8cfb 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java @@ -2013,6 +2013,11 @@ public class GanttDiagramGraph> implements return adapter.getStartConstraintsFor(task); } + @Override + public List> getEndConstraintsFor(V task) { + return adapter.getEndConstraintsFor(task); + } + @Override public GanttDate getStartDate(V task) { return adapter.getStartDate(task); diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/criticalpath/CriticalPathCalculator.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/criticalpath/CriticalPathCalculator.java index e3d3e4414..119be6f08 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/criticalpath/CriticalPathCalculator.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/criticalpath/CriticalPathCalculator.java @@ -263,7 +263,7 @@ public class CriticalPathCalculator> { Node node = nodes.get(task); DependencyType dependencyType = getDependencyTypeEndStartByDefault( currentTask, task); - Constraint constraint = getDateConstraint(task); + Constraint constraint = getDateStartConstraint(task); switch (dependencyType) { case START_START: @@ -302,7 +302,7 @@ public class CriticalPathCalculator> { node.setEarliestStart(earliestStart); } - private Constraint getDateConstraint(T task) { + private Constraint getDateStartConstraint(T task) { if (task == null) { return null; } @@ -315,6 +315,19 @@ public class CriticalPathCalculator> { return Constraint.coalesce(constraints); } + private Constraint getDateEndConstraint(T task) { + if (task == null) { + return null; + } + + List> constraints = graph + .getEndConstraintsFor(task); + if (constraints == null) { + return null; + } + return Constraint.coalesce(constraints); + } + private void backward(Node currentNode, T nextTask) { T currentTask = currentNode.getTask(); int latestStart = currentNode.getLatestStart(); @@ -338,7 +351,7 @@ public class CriticalPathCalculator> { Node node = nodes.get(task); DependencyType dependencyType = getDependencyTypeEndStartByDefault( task, currentTask); - Constraint constraint = getDateConstraint(task); + Constraint constraint = getDateEndConstraint(task); switch (dependencyType) { case START_START: diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/criticalpath/ICriticalPathCalculable.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/criticalpath/ICriticalPathCalculable.java index f465841ad..c0681a0f4 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/criticalpath/ICriticalPathCalculable.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/criticalpath/ICriticalPathCalculable.java @@ -59,6 +59,8 @@ public interface ICriticalPathCalculable { List> getStartConstraintsFor(T task); + List> getEndConstraintsFor(T task); + List getChildren(T task); } diff --git a/ganttzk/src/test/java/org/zkoss/ganttz/data/criticalpath/CriticalPathCalculatorTest.java b/ganttzk/src/test/java/org/zkoss/ganttz/data/criticalpath/CriticalPathCalculatorTest.java index 829ba2ef8..8c3904e33 100644 --- a/ganttzk/src/test/java/org/zkoss/ganttz/data/criticalpath/CriticalPathCalculatorTest.java +++ b/ganttzk/src/test/java/org/zkoss/ganttz/data/criticalpath/CriticalPathCalculatorTest.java @@ -2786,7 +2786,7 @@ public class CriticalPathCalculatorTest { @Test public void oneTaskWithTwoDependantTasksLastOneWithEqualConstraint2() { givenOneTaskWithTwoDependantTasksLastOneWithEqualConstraint(2, 5, 3, - START.plusDays(3)); + START.plusDays(4)); List criticalPath = buildCalculator() .calculateCriticalPath(diagramGraphExample);