diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/FunctionalityExposedForExtensions.java b/ganttzk/src/main/java/org/zkoss/ganttz/FunctionalityExposedForExtensions.java index 144ea7ccc..b773b5582 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/FunctionalityExposedForExtensions.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/FunctionalityExposedForExtensions.java @@ -53,8 +53,7 @@ public class FunctionalityExposedForExtensions implements IContext { * @param parent */ void register(Integer insertionPositionForTop, Task task, - T domainObject, - TaskContainer parent) { + T domainObject, TaskContainer parent) { fromDomainToTask.put(domainObject, task); fromTaskToDomain.put(task, domainObject); if (parent != null) { @@ -231,4 +230,39 @@ public class FunctionalityExposedForExtensions implements IContext { add(position, newDomainObject); } + public GanttDiagramGraph getDiagramGraph() { + return diagramGraph; + } + + private DomainDependency toDomainDependency(Dependency bean) { + T source = mapper.findAssociatedDomainObject(bean.getSource()); + T destination = mapper + .findAssociatedDomainObject(bean.getDestination()); + DomainDependency dep = DomainDependency.createDependency(source, + destination, bean.getType()); + return dep; + } + + public void addDependency(DependencyComponent dependencyComponent) { + Dependency dependency = dependencyComponent.getDependency(); + if (!canAddDependency(dependency)) + return; + getDependencyList().addDependencyComponent(dependencyComponent); + diagramGraph.add(dependency); + adapter.addDependency(toDomainDependency(dependency)); + } + + private boolean canAddDependency(Dependency dependency) { + return adapter.canAddDependency(toDomainDependency(dependency)); + } + + private DependencyList getDependencyList() { + return planner.getDependencyList(); + } + + public void removeDependency(Dependency dependency) { + adapter.removeDependency(toDomainDependency(dependency)); + diagramGraph.remove(dependency); + } + } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/GanttPanel.java b/ganttzk/src/main/java/org/zkoss/ganttz/GanttPanel.java index c8172f1bd..6c5d55f10 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/GanttPanel.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/GanttPanel.java @@ -19,14 +19,15 @@ public class GanttPanel extends XulElement implements AfterCompose { private final GanttDiagramGraph diagramGraph; - public GanttPanel(GanttDiagramGraph ganttDiagramGraph, + public GanttPanel( + FunctionalityExposedForExtensions context, List> commandsOnTasksContextualized, CommandOnTaskContextualized editTaskCommand) { - this.diagramGraph = ganttDiagramGraph; + this.diagramGraph = context.getDiagramGraph(); timeTracker = new TimeTracker(this); appendChild(timeTracker); - tasksLists = TaskList.createFor(editTaskCommand, - ganttDiagramGraph.getTopLevelTasks(), commandsOnTasksContextualized); + tasksLists = TaskList.createFor(context, editTaskCommand, + commandsOnTasksContextualized); dependencyList = new DependencyList(); appendChild(tasksLists); appendChild(dependencyList); diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/IDependencyAddedListener.java b/ganttzk/src/main/java/org/zkoss/ganttz/IDependencyAddedListener.java deleted file mode 100644 index 362d935dd..000000000 --- a/ganttzk/src/main/java/org/zkoss/ganttz/IDependencyAddedListener.java +++ /dev/null @@ -1,9 +0,0 @@ -/** - * - */ -package org.zkoss.ganttz; - -public interface IDependencyAddedListener { - - public void dependenceAdded(DependencyComponent dependencyComponent); -} \ No newline at end of file diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java b/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java index 804540177..b1544808b 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java @@ -5,11 +5,6 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.zkoss.ganttz.adapters.DomainDependency; -import org.zkoss.ganttz.adapters.IAdapterToTaskFundamentalProperties; -import org.zkoss.ganttz.adapters.IDomainAndBeansMapper; import org.zkoss.ganttz.adapters.PlannerConfiguration; import org.zkoss.ganttz.data.Dependency; import org.zkoss.ganttz.data.GanttDiagramGraph; @@ -23,17 +18,12 @@ import org.zkoss.zul.impl.XulElement; public class Planner extends XulElement { - private static final Log LOG = LogFactory.getLog(Planner.class); - - private IDependencyAddedListener dependencyAddedListener; private GanttDiagramGraph diagramGraph = new GanttDiagramGraph(); private IDependencyRemovedListener dependencyRemovedListener; private LeftPane leftPane; private GanttPanel ganttPanel; - private DependencyAdderAdapter dependencyAdder; - private List> contextualizedGlobalCommands; private CommandContextualized goingDownInLastArrowCommand; @@ -42,6 +32,8 @@ public class Planner extends XulElement { private CommandOnTaskContextualized editTaskCommand; + private FunctionalityExposedForExtensions context; + public Planner() { } @@ -78,29 +70,14 @@ public class Planner extends XulElement { return found.get(0); } - public boolean canAddDependency(Dependency dependency) { - return dependencyAdder.canAddDependency(dependency); - } - public void registerListeners() { TaskList taskList = getTaskList(); - dependencyAddedListener = new IDependencyAddedListener() { - - @Override - public void dependenceAdded(DependencyComponent dependencyComponent) { - getDependencyList().addDependencyComponent(dependencyComponent); - diagramGraph.add(dependencyComponent.getDependency()); - dependencyAdder.addDependency(dependencyComponent - .getDependency()); - } - }; - taskList.addDependencyListener(dependencyAddedListener); dependencyRemovedListener = new IDependencyRemovedListener() { @Override public void dependenceRemoved( DependencyComponent dependencyComponent) { - dependencyRemoved(dependencyComponent); + context.removeDependency(dependencyComponent.getDependency()); } }; getDependencyList().addDependencyRemovedListener( @@ -130,41 +107,6 @@ public class Planner extends XulElement { } } - private static class DependencyAdderAdapter { - - private final IAdapterToTaskFundamentalProperties adapter; - private final IDomainAndBeansMapper mapper; - - public DependencyAdderAdapter( - IAdapterToTaskFundamentalProperties adapter, - IDomainAndBeansMapper mapper) { - this.adapter = adapter; - this.mapper = mapper; - } - - public void addDependency(Dependency bean) { - adapter.addDependency(toDomainDependency(bean)); - } - - public void removeDependency(Dependency bean) { - adapter.removeDependency(toDomainDependency(bean)); - } - - private DomainDependency toDomainDependency(Dependency bean) { - T source = mapper.findAssociatedDomainObject(bean.getSource()); - T destination = mapper.findAssociatedDomainObject(bean - .getDestination()); - DomainDependency dep = DomainDependency.createDependency(source, - destination, bean.getType()); - return dep; - } - - public boolean canAddDependency(Dependency bean) { - return adapter.canAddDependency(toDomainDependency(bean)); - } - - } - public void setConfiguration(PlannerConfiguration configuration) { if (configuration == null) return; @@ -172,8 +114,6 @@ public class Planner extends XulElement { FunctionalityExposedForExtensions context = new FunctionalityExposedForExtensions( this, configuration.getAdapter(), configuration.getNavigator(), diagramGraph); - dependencyAdder = new DependencyAdderAdapter(configuration - .getAdapter(), context.getMapper()); this.contextualizedGlobalCommands = contextualize(context, configuration.getGlobalCommands()); this.commandsOnTasksContextualized = contextualize(context, @@ -182,6 +122,7 @@ public class Planner extends XulElement { .getGoingDownInLastArrowCommand()); editTaskCommand = contextualize(context, configuration .getEditTaskCommand()); + this.context = context; clear(); context.add(configuration.getData()); recreate(); @@ -238,7 +179,7 @@ public class Planner extends XulElement { this.leftPane.afterCompose(); this.leftPane .setGoingDownInLastArrowCommand(goingDownInLastArrowCommand); - this.ganttPanel = new GanttPanel(this.diagramGraph, + this.ganttPanel = new GanttPanel(this.context, commandsOnTasksContextualized, editTaskCommand); ganttPanel.setParent(this); ganttPanel.afterCompose(); @@ -252,9 +193,4 @@ public class Planner extends XulElement { taskList.adjustZoomColumnsHeight(); getDependencyList().redrawDependencies(); } - - void dependencyRemoved(DependencyComponent dependencyComponent) { - diagramGraph.remove(dependencyComponent); - dependencyAdder.removeDependency(dependencyComponent.getDependency()); - } } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java b/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java index 76439c5d0..a5f57899b 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java @@ -1,12 +1,9 @@ package org.zkoss.ganttz; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.LinkedList; import java.util.List; -import java.util.ListIterator; import java.util.Map; import org.zkoss.ganttz.data.Dependency; @@ -42,20 +39,25 @@ public class TaskList extends XulElement implements AfterCompose { private final List> commandsOnTasksContextualized; + private final FunctionalityExposedForExtensions context; + public TaskList( + FunctionalityExposedForExtensions context, CommandOnTaskContextualized editTaskCommand, List tasks, List> commandsOnTasksContextualized) { + this.context = context; this.editTaskCommand = editTaskCommand; this.originalTasks = tasks; this.commandsOnTasksContextualized = commandsOnTasksContextualized; } public static TaskList createFor( + FunctionalityExposedForExtensions context, CommandOnTaskContextualized editTaskCommand, - List tasks, List> commandsOnTasksContextualized) { - TaskList result = new TaskList(editTaskCommand, tasks, + TaskList result = new TaskList(context, editTaskCommand, context + .getDiagramGraph().getTopLevelTasks(), commandsOnTasksContextualized); return result; } @@ -71,7 +73,7 @@ public class TaskList extends XulElement implements AfterCompose { } List result = new ArrayList(); for (Dependency dependency : dependencies) { - result.add(new DependencyComponent(taskComponentByTask + result.add(new DependencyComponent(context, taskComponentByTask .get(dependency.getSource()), taskComponentByTask .get(dependency.getDestination()))); } @@ -219,11 +221,6 @@ public class TaskList extends XulElement implements AfterCompose { return getTaskComponents().size(); } - public void addDependencyListener(IDependencyAddedListener listener) { - dependencyListeners.add(new WeakReference( - listener)); - } - @Override public void afterCompose() { for (Task task : originalTasks) { @@ -295,31 +292,6 @@ 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); - } + context.addDependency(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); - } - } - } 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 4f52021ec..8541fa039 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java @@ -14,7 +14,6 @@ import java.util.WeakHashMap; import org.jgrapht.DirectedGraph; import org.jgrapht.graph.SimpleDirectedGraph; -import org.zkoss.ganttz.DependencyComponent; /** * This class contains a graph with the {@link Task tasks} as vertexes and the @@ -179,9 +178,9 @@ public class GanttDiagramGraph { } } - public void remove(DependencyComponent dependencyComponent) { - graph.removeEdge(dependencyComponent.getDependency()); - Task destination = dependencyComponent.getDependency().getDestination(); + public void remove(Dependency dependency) { + graph.removeEdge(dependency); + Task destination = dependency.getDestination(); rulesEnforcersByTask.get(destination).enforce(); }