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 3152dc669..0b9751306 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java @@ -292,7 +292,6 @@ public class GanttDiagramGraph implements ICriticalPathCalculable { return result; } - @Override public List getTopLevelTasks() { return Collections.unmodifiableList(topLevelTasks); } @@ -304,6 +303,22 @@ public class GanttDiagramGraph implements ICriticalPathCalculable { parentShrinkingEnforcer.enforce(); } + @Override + public List getInitialTasks() { + List tasks = new ArrayList(); + + for (Task task : graph.vertexSet()) { + int dependencies = graph.inDegreeOf(task); + if ((dependencies == 0) + || (dependencies == getNumberOfDependenciesByType(task, + DependencyType.END_END))) { + tasks.add(task); + } + } + + return tasks; + } + @Override public Dependency getDependencyFrom(Task from, Task to) { return graph.getEdge(from, to); @@ -332,7 +347,7 @@ public class GanttDiagramGraph implements ICriticalPathCalculable { } @Override - public List getBottomLevelTasks() { + public List getLatestTasks() { List tasks = new ArrayList(); for (Task task : graph.vertexSet()) { 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 3fa12a90f..75eef7e96 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 @@ -61,11 +61,11 @@ public class CriticalPathCalculator { } private InitialNode createBeginningOfProjectNode() { - return new InitialNode(new HashSet(graph.getTopLevelTasks())); + return new InitialNode(new HashSet(graph.getInitialTasks())); } private LastNode createEndOfProjectNode() { - return new LastNode(new HashSet(graph.getBottomLevelTasks())); + return new LastNode(new HashSet(graph.getLatestTasks())); } private Map> createGraphNodes() { 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 60f1b0187..991c74207 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 @@ -36,9 +36,9 @@ import org.zkoss.ganttz.data.Task; */ public interface ICriticalPathCalculable { - List getTopLevelTasks(); + List getInitialTasks(); - List getBottomLevelTasks(); + List getLatestTasks(); Set getIncomingTasksFor(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 40eaae29f..1761af56e 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 @@ -95,9 +95,9 @@ public class CriticalPathCalculatorTest { expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getTopLevelTasks()).andReturn(listOfTasks) + expect(diagramGraphExample.getInitialTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getBottomLevelTasks()) + expect(diagramGraphExample.getLatestTasks()) .andReturn(listOfTasks).anyTimes(); expect( diagramGraphExample.getDependencyFrom( @@ -133,9 +133,9 @@ public class CriticalPathCalculatorTest { expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getTopLevelTasks()).andReturn(listOfTasks) + expect(diagramGraphExample.getInitialTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getBottomLevelTasks()) + expect(diagramGraphExample.getLatestTasks()) .andReturn(listOfTasks).anyTimes(); expect( diagramGraphExample.getDependencyFrom( @@ -173,9 +173,9 @@ public class CriticalPathCalculatorTest { expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getTopLevelTasks()).andReturn( + expect(diagramGraphExample.getInitialTasks()).andReturn( Arrays.asList(task1)).anyTimes(); - expect(diagramGraphExample.getBottomLevelTasks()).andReturn( + expect(diagramGraphExample.getLatestTasks()).andReturn( Arrays.asList(subtask1)).anyTimes(); expect( diagramGraphExample.getDependencyFrom( @@ -220,9 +220,9 @@ public class CriticalPathCalculatorTest { expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getTopLevelTasks()).andReturn( + expect(diagramGraphExample.getInitialTasks()).andReturn( Arrays.asList(task1, task2)).anyTimes(); - expect(diagramGraphExample.getBottomLevelTasks()).andReturn( + expect(diagramGraphExample.getLatestTasks()).andReturn( Arrays.asList(subtask1, subtask2)).anyTimes(); expect( diagramGraphExample.getDependencyFrom( @@ -277,9 +277,9 @@ public class CriticalPathCalculatorTest { expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getTopLevelTasks()).andReturn( + expect(diagramGraphExample.getInitialTasks()).andReturn( Arrays.asList(task1, independentTask)).anyTimes(); - expect(diagramGraphExample.getBottomLevelTasks()).andReturn( + expect(diagramGraphExample.getLatestTasks()).andReturn( Arrays.asList(task2, independentTask)).anyTimes(); expect( diagramGraphExample.getDependencyFrom( @@ -326,9 +326,9 @@ public class CriticalPathCalculatorTest { expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getTopLevelTasks()).andReturn( + expect(diagramGraphExample.getInitialTasks()).andReturn( Arrays.asList(task)).anyTimes(); - expect(diagramGraphExample.getBottomLevelTasks()).andReturn( + expect(diagramGraphExample.getLatestTasks()).andReturn( Arrays.asList(subtask1, subtask2)).anyTimes(); expect( diagramGraphExample.getDependencyFrom( @@ -376,9 +376,9 @@ public class CriticalPathCalculatorTest { expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getTopLevelTasks()).andReturn( + expect(diagramGraphExample.getInitialTasks()).andReturn( Arrays.asList(task1, task2)).anyTimes(); - expect(diagramGraphExample.getBottomLevelTasks()).andReturn( + expect(diagramGraphExample.getLatestTasks()).andReturn( Arrays.asList(subtask1)).anyTimes(); expect( diagramGraphExample.getDependencyFrom( @@ -430,9 +430,9 @@ public class CriticalPathCalculatorTest { expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getTopLevelTasks()).andReturn( + expect(diagramGraphExample.getInitialTasks()).andReturn( Arrays.asList(task)).anyTimes(); - expect(diagramGraphExample.getBottomLevelTasks()).andReturn( + expect(diagramGraphExample.getLatestTasks()).andReturn( Arrays.asList(finalTask)).anyTimes(); expect( diagramGraphExample.getDependencyFrom( @@ -492,9 +492,9 @@ public class CriticalPathCalculatorTest { expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getTopLevelTasks()).andReturn( + expect(diagramGraphExample.getInitialTasks()).andReturn( Arrays.asList(task1, task2)).anyTimes(); - expect(diagramGraphExample.getBottomLevelTasks()).andReturn( + expect(diagramGraphExample.getLatestTasks()).andReturn( Arrays.asList(finalTask1, finalTask2)).anyTimes(); expect( diagramGraphExample.getDependencyFrom( @@ -567,9 +567,9 @@ public class CriticalPathCalculatorTest { expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getTopLevelTasks()).andReturn( + expect(diagramGraphExample.getInitialTasks()).andReturn( Arrays.asList(task4, task6)).anyTimes(); - expect(diagramGraphExample.getBottomLevelTasks()).andReturn( + expect(diagramGraphExample.getLatestTasks()).andReturn( Arrays.asList(task10, modifiableTask)).anyTimes(); expect( diagramGraphExample.getDependencyFrom( @@ -644,9 +644,9 @@ public class CriticalPathCalculatorTest { expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getTopLevelTasks()).andReturn( + expect(diagramGraphExample.getInitialTasks()).andReturn( Arrays.asList(task1)).anyTimes(); - expect(diagramGraphExample.getBottomLevelTasks()).andReturn( + expect(diagramGraphExample.getLatestTasks()).andReturn( Arrays.asList(task1, task2)).anyTimes(); IDependency dependency = createDependency( @@ -689,9 +689,9 @@ public class CriticalPathCalculatorTest { expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getTopLevelTasks()).andReturn( + expect(diagramGraphExample.getInitialTasks()).andReturn( Arrays.asList(task1)).anyTimes(); - expect(diagramGraphExample.getBottomLevelTasks()).andReturn( + expect(diagramGraphExample.getLatestTasks()).andReturn( Arrays.asList(subtask1, task2)).anyTimes(); IDependency dependency = createDependency( @@ -741,9 +741,9 @@ public class CriticalPathCalculatorTest { expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getTopLevelTasks()).andReturn( + expect(diagramGraphExample.getInitialTasks()).andReturn( Arrays.asList(task1, task2)).anyTimes(); - expect(diagramGraphExample.getBottomLevelTasks()).andReturn( + expect(diagramGraphExample.getLatestTasks()).andReturn( Arrays.asList(subtask1, subtask2)).anyTimes(); IDependency dependency = createDependency( @@ -804,9 +804,9 @@ public class CriticalPathCalculatorTest { expect(diagramGraphExample.getTasks()).andReturn(listOfTasks) .anyTimes(); - expect(diagramGraphExample.getTopLevelTasks()).andReturn( + expect(diagramGraphExample.getInitialTasks()).andReturn( Arrays.asList(task1)).anyTimes(); - expect(diagramGraphExample.getBottomLevelTasks()).andReturn( + expect(diagramGraphExample.getLatestTasks()).andReturn( Arrays.asList(subtask1, subtask2, subtask3)).anyTimes(); IDependency dependency = createDependency(