diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java b/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java index e68d2e01a..d6595efbc 100755 --- a/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java @@ -2,11 +2,6 @@ package org.zkoss.ganttz; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; import java.util.Map; import java.util.UUID; import java.util.regex.Matcher; @@ -177,8 +172,6 @@ public class TaskComponent extends Div implements AfterCompose { private String _color; - private List> dependencyListeners = new LinkedList>(); - private boolean isTopLevel; private final Task task; @@ -196,31 +189,6 @@ public class TaskComponent extends Div implements AfterCompose { return null; } - public void addDependencyListener(IDependencyAddedListener listener) { - dependencyListeners.add(new WeakReference( - listener)); - } - - private void fireDependenceAdded(DependencyComponent dependencyComponent) { - ArrayList active = new ArrayList(); - synchronized (this) { - ListIterator> iterator = dependencyListeners - .listIterator(); - while (iterator.hasNext()) { - WeakReference next = iterator.next(); - IDependencyAddedListener listener = next.get(); - if (listener == null) { - iterator.remove(); - } else { - active.add(listener); - } - } - } - for (IDependencyAddedListener listener : active) { - listener.dependenceAdded(dependencyComponent); - } - } - public Command getCommand(String cmdId) { Command c = null; @@ -246,11 +214,8 @@ public class TaskComponent extends Div implements AfterCompose { } void doAddDependency(String destinyTaskId) { - DependencyComponent dependencyComponent = new DependencyComponent(this, + getTaskList().addDependency(this, ((TaskComponent) getFellow(destinyTaskId))); - if (getPlanner().canAddDependency(dependencyComponent.getDependency())) { - fireDependenceAdded(dependencyComponent); - } } public String getColor() { diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java b/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java index 8ae65f39a..76439c5d0 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java @@ -32,8 +32,6 @@ public class TaskList extends XulElement implements AfterCompose { private static final int HEIGHT_PER_ROW = 20; /* 30 */ - private List> listeners = new LinkedList>(); - private IZoomLevelChangedListener zoomLevelChangedListener; private Menupopup contextMenu; @@ -88,16 +86,6 @@ public class TaskList extends XulElement implements AfterCompose { addContextMenu(taskComponent); addListenerForTaskComponentEditForm(taskComponent); - ListIterator> iterator = listeners - .listIterator(); - while (iterator.hasNext()) { - IDependencyAddedListener listener = iterator.next().get(); - if (listener != null) { - taskComponent.addDependencyListener(listener); - } else { - iterator.remove(); - } - } taskComponent.afterCompose(); if (relocate) { response(null, new AuInvoke(taskComponent, @@ -232,10 +220,8 @@ public class TaskList extends XulElement implements AfterCompose { } public void addDependencyListener(IDependencyAddedListener listener) { - listeners.add(new WeakReference(listener)); - for (TaskComponent taskComponent : getTaskComponents()) { - taskComponent.addDependencyListener(listener); - } + dependencyListeners.add(new WeakReference( + listener)); } @Override @@ -306,4 +292,34 @@ public class TaskList extends XulElement implements AfterCompose { } } + public void addDependency(TaskComponent source, TaskComponent destination) { + DependencyComponent dependencyComponent = new DependencyComponent( + source, destination); + if (getPlanner().canAddDependency(dependencyComponent.getDependency())) { + fireDependenceAdded(dependencyComponent); + } + } + + private List> dependencyListeners = new LinkedList>(); + + private void fireDependenceAdded(DependencyComponent dependencyComponent) { + ArrayList active = new ArrayList(); + synchronized (this) { + ListIterator> iterator = dependencyListeners + .listIterator(); + while (iterator.hasNext()) { + WeakReference next = iterator.next(); + IDependencyAddedListener listener = next.get(); + if (listener == null) { + iterator.remove(); + } else { + active.add(listener); + } + } + } + for (IDependencyAddedListener listener : active) { + listener.dependenceAdded(dependencyComponent); + } + } + }