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 0b932c098..17e0420c9 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 @@ -264,7 +264,7 @@ public class CriticalPathCalculator> { Node node = nodes.get(task); DependencyType dependencyType = getDependencyTypeEndStartByDefault( currentTask, task); - Constraint constraint = getDateStartConstraint(task); + Constraint constraint = getDateConstraints(task); switch (dependencyType) { case START_START: @@ -303,30 +303,26 @@ public class CriticalPathCalculator> { node.setEarliestStart(earliestStart); } - private Constraint getDateStartConstraint(T task) { + private Constraint getDateConstraints(T task) { if (task == null) { return null; } - List> constraints = graph + List> startConstraints = graph .getStartConstraintsFor(task); - if (constraints == null) { - return null; - } - return Constraint.coalesce(constraints); - } - - private Constraint getDateEndConstraint(T task) { - if (task == null) { - return null; - } - - List> constraints = graph + List> endConstraints = graph .getEndConstraintsFor(task); - if (constraints == null) { + if ((startConstraints == null) && (endConstraints == null)) { return null; } - return Constraint.coalesce(constraints); + if (startConstraints == null) { + return Constraint.coalesce(endConstraints); + } + if (endConstraints == null) { + return Constraint.coalesce(startConstraints); + } + startConstraints.addAll(endConstraints); + return Constraint.coalesce(startConstraints); } private void backward(Node currentNode, T nextTask) { @@ -352,7 +348,7 @@ public class CriticalPathCalculator> { Node node = nodes.get(task); DependencyType dependencyType = getDependencyTypeEndStartByDefault( task, currentTask); - Constraint constraint = getDateEndConstraint(task); + Constraint constraint = getDateConstraints(task); switch (dependencyType) { case START_START: