From f82b20bbd17db1548f46a86717f683ce19978aeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Sun, 15 May 2011 21:05:59 +0200 Subject: [PATCH] Remove tasks that are not really initial from the initial and end tasks FEA: ItEr74S04BugFixing --- .../zkoss/ganttz/data/GanttDiagramGraph.java | 17 +++++++++++ .../criticalpath/CriticalPathCalculator.java | 30 +++++++++++++++++-- .../criticalpath/ICriticalPathCalculable.java | 4 +++ 3 files changed, 48 insertions(+), 3 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 87d2c9760..c4351b7f4 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java @@ -1930,6 +1930,23 @@ public class GanttDiagramGraph> implements return result; } + public boolean hasVisibleIncomingDependencies(V task) { + return isSomeVisible(graph.incomingEdgesOf(task)); + } + + public boolean hasVisibleOutcomingDependencies(V task) { + return isSomeVisible(graph.outgoingEdgesOf(task)); + } + + private boolean isSomeVisible(Set dependencies) { + for (D each : dependencies) { + if (adapter.isVisible(each)) { + return true; + } + } + return false; + } + public List getLatestTasks() { List tasks = new ArrayList(); 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 fb3d9e292..039df8897 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 @@ -121,13 +121,37 @@ public class CriticalPathCalculator> { } private InitialNode createBeginningOfProjectNode() { - return new InitialNode(new HashSet(removeContainers(graph + return new InitialNode( + removeWithVisibleIncomingDependencies(removeContainers(graph .getInitialTasks()))); } + + private Set removeWithVisibleIncomingDependencies(Collection tasks) { + Set result = new HashSet(); + for (T each : tasks) { + if (!graph.hasVisibleIncomingDependencies(each)) { + result.add(each); + } + } + return result; + } + private LastNode createEndOfProjectNode() { - return new LastNode(new HashSet(removeContainers(graph - .getLatestTasks()))); + return new LastNode( + removeWithVisibleOutcomingDependencies(removeContainers(graph + .getLatestTasks()))); + } + + private Set removeWithVisibleOutcomingDependencies( + Collection removeContainers) { + Set result = new HashSet(); + for (T each : removeContainers) { + if (!graph.hasVisibleOutcomingDependencies(each)) { + result.add(each); + } + } + return result; } 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 6d979ed35..b2899977c 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 @@ -42,6 +42,10 @@ public interface ICriticalPathCalculable { List getLatestTasks(); + boolean hasVisibleIncomingDependencies(T task); + + boolean hasVisibleOutcomingDependencies(T task); + Set getIncomingTasksFor(T task); Set getOutgoingTasksFor(T task);