From 004ce99e6f5fd61b7fec5646e72143e03ecb4e42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Wed, 22 Jul 2009 18:43:32 +0200 Subject: [PATCH] ItEr18S08CUCreacionProxectoPlanificacionItEr17S10: Adding remove task as command. --- .../org/zkoss/ganttz/DependencyComponent.java | 7 ++- .../java/org/zkoss/ganttz/DependencyList.java | 30 ++++------- .../FunctionalityExposedForExtensions.java | 42 ++++++++++++--- .../java/org/zkoss/ganttz/LeftTasksTree.java | 2 - .../main/java/org/zkoss/ganttz/Planner.java | 52 +++++++------------ .../java/org/zkoss/ganttz/TaskComponent.java | 9 ++-- .../zkoss/ganttz/TaskContainerComponent.java | 34 ++++++++++-- .../main/java/org/zkoss/ganttz/TaskList.java | 39 ++++---------- .../org/zkoss/ganttz/TaskRemovedListener.java | 7 --- .../main/java/org/zkoss/ganttz/data/Task.java | 4 ++ .../org/zkoss/ganttz/data/TaskContainer.java | 8 +++ .../org/zkoss/ganttz/extensions/IContext.java | 2 + .../web/planner/DataForPlanner.java | 16 ++++++ 13 files changed, 142 insertions(+), 110 deletions(-) delete mode 100644 navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskRemovedListener.java diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/DependencyComponent.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/DependencyComponent.java index 1e4213f85..f29facf2c 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/DependencyComponent.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/DependencyComponent.java @@ -10,6 +10,7 @@ import java.beans.PropertyChangeListener; import org.zkoss.ganttz.data.Dependency; import org.zkoss.ganttz.data.DependencyType; +import org.zkoss.ganttz.data.Task; import org.zkoss.zk.au.out.AuInvoke; import org.zkoss.zk.ui.ext.AfterCompose; import org.zkoss.zul.impl.XulElement; @@ -88,8 +89,10 @@ public class DependencyComponent extends XulElement implements AfterCompose { response("zoomChanged", new AuInvoke(this, "draw")); } - public boolean contains(TaskComponent taskComponent) { - return getSource().equals(taskComponent) || getDestination().equals(taskComponent); + public boolean contains(Task task) { + Task sourceTask = getSource().getTask(); + Task destinationTask = getDestination().getTask(); + return task.equals(sourceTask) || task.equals(destinationTask); } public TaskComponent getSource() { diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/DependencyList.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/DependencyList.java index 8c615475a..0a3cd9ca0 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/DependencyList.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/DependencyList.java @@ -71,8 +71,6 @@ public class DependencyList extends XulElement implements AfterCompose { private static final Log LOG = LogFactory.getLog(DependencyList.class); - private TaskRemovedListener taskRemovedListener; - private ZoomLevelChangedListener listener; private final WeakReferencedListeners dependencyRemovedListeners = WeakReferencedListeners @@ -130,23 +128,6 @@ public class DependencyList extends XulElement implements AfterCompose { }; getTimeTracker().addZoomListener(listener); } - if (taskRemovedListener == null) { - taskRemovedListener = new TaskRemovedListener() { - - @Override - public void taskComponentRemoved(TaskComponent taskComponentRemoved) { - for (DependencyComponent dependencyComponent : DependencyList.this - .getDependencyComponents()) { - if (dependencyComponent.contains(taskComponentRemoved)) { - dependencyComponent.detach(); - } - } - } - - }; - getGanttPanel().getTaskList().addTaskRemovedListener( - taskRemovedListener); - } addContextMenu(); } @@ -197,7 +178,8 @@ public class DependencyList extends XulElement implements AfterCompose { private List getDependencyComponentsConnectedTo(TaskComponent taskComponent) { ArrayList result = new ArrayList(); - for (DependencyComponent dependencyComponent : getDependencyComponents()) { + List dependencies = getDependencyComponents(); + for (DependencyComponent dependencyComponent : dependencies) { if (dependencyComponent.getSource().equals(taskComponent) || dependencyComponent.getDestination().equals(taskComponent)) { result.add(dependencyComponent); @@ -216,4 +198,12 @@ public class DependencyList extends XulElement implements AfterCompose { } } + public void taskRemoved(Task task) { + for (DependencyComponent dependencyComponent : DependencyList.this + .getDependencyComponents()) { + if (dependencyComponent.contains(task)) { + this.removeChild(dependencyComponent); + } + } + } } diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/FunctionalityExposedForExtensions.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/FunctionalityExposedForExtensions.java index 5d949b1b0..38bd85213 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/FunctionalityExposedForExtensions.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/FunctionalityExposedForExtensions.java @@ -27,6 +27,8 @@ public class FunctionalityExposedForExtensions implements IContext { private Map fromTaskToDomain = new HashMap(); + private Map fromTaskToParent = new HashMap(); + @Override public Task findAssociatedBean(T domainObject) throws IllegalArgumentException { @@ -37,9 +39,23 @@ public class FunctionalityExposedForExtensions implements IContext { return fromDomainToTask.get(domainObject); } - void register(Task task, T domainObject) { + void register(Task task, T domainObject, TaskContainer parent) { fromDomainToTask.put(domainObject, task); fromTaskToDomain.put(task, domainObject); + if (parent != null) { + fromTaskToParent.put(task, parent); + } + } + + void remove(T domainObject) { + Task toBeRemoved = findAssociatedBean(domainObject); + fromDomainToTask.remove(domainObject); + fromTaskToDomain.remove(toBeRemoved); + TaskContainer parent = fromTaskToParent.get(toBeRemoved); + if (parent != null) { + parent.remove(toBeRemoved); + } + fromTaskToParent.remove(toBeRemoved); } @Override @@ -69,8 +85,8 @@ public class FunctionalityExposedForExtensions implements IContext { this.diagramGraph = diagramGraph; } - private Task extractTask( - List> accumulatedDependencies, T data) { + private Task extractTask(List> accumulatedDependencies, + T data, TaskContainer parent) { ITaskFundamentalProperties adapted = adapter.adapt(data); accumulatedDependencies .addAll(adapter.getDependenciesOriginating(data)); @@ -80,23 +96,24 @@ public class FunctionalityExposedForExtensions implements IContext { } else { TaskContainer container = new TaskContainer(adapted); for (T child : navigator.getChildren(data)) { - container.add(extractTask(accumulatedDependencies, child)); + container.add(extractTask(accumulatedDependencies, child, + container)); } result = container; } - mapper.register(result, data); + mapper.register(result, data, parent); return result; } public void add(Collection domainObjects) { List> totalDependencies = new ArrayList>(); for (T object : domainObjects) { - Task task = extractTask(totalDependencies, object); + Task task = extractTask(totalDependencies, object, null); diagramGraph.addTopLevel(task); this.planner.addTask(task); } - for (Dependency dependency : DomainDependency - .toDependencies(mapper, totalDependencies)) { + for (Dependency dependency : DomainDependency.toDependencies(mapper, + totalDependencies)) { this.diagramGraph.add(dependency); } this.diagramGraph.applyAllRestrictions(); @@ -118,4 +135,13 @@ public class FunctionalityExposedForExtensions implements IContext { planner.setConfiguration(configuration); } + @Override + public void remove(T domainObject) { + Task task = mapper.findAssociatedBean(domainObject); + diagramGraph.remove(task); + task.removed(); + planner.removeTask(task); + mapper.remove(domainObject); + } + } diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/LeftTasksTree.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/LeftTasksTree.java index 3d74ee981..5f72344d4 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/LeftTasksTree.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/LeftTasksTree.java @@ -209,8 +209,6 @@ public class LeftTasksTree extends HtmlMacroComponent { private static Log LOG = LogFactory.getLog(LeftTasksTree.class); - private TaskRemovedListener taskRemovedListener; - private final List tasks; private MutableTreeModel tasksTreeModel; diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/Planner.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/Planner.java index b53af5bce..074e80017 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/Planner.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/Planner.java @@ -16,7 +16,6 @@ import org.zkoss.ganttz.data.Task; import org.zkoss.ganttz.extensions.ICommand; import org.zkoss.ganttz.extensions.ICommandOnTask; import org.zkoss.ganttz.extensions.IContext; -import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Executions; import org.zkoss.zul.impl.XulElement; @@ -27,7 +26,6 @@ public class Planner extends XulElement { private DependencyAddedListener dependencyAddedListener; private GanttDiagramGraph diagramGraph = new GanttDiagramGraph(); private DependencyRemovedListener dependencyRemovedListener; - private TaskRemovedListener taskRemovedListener; private LeftPane leftPane; private GanttPanel ganttPanel; @@ -52,16 +50,6 @@ public class Planner extends XulElement { return Planner.findComponentsOfType(TaskList.class, children).get(0); } - private T findOneComponentOfType(Class type) { - List result = findComponentsOfType(type, getChildren()); - if (result.isEmpty()) { - throw new RuntimeException("it should have found a " - + type.getSimpleName() + " in " - + Planner.class.getSimpleName()); - } - return result.get(0); - } - public static List findComponentsOfType(Class type, List children) { ArrayList result = new ArrayList(); @@ -107,27 +95,12 @@ public class Planner extends XulElement { } }; taskList.addDependencyListener(dependencyAddedListener); - taskRemovedListener = new TaskRemovedListener() { - - @Override - public void taskComponentRemoved(TaskComponent taskComponentRemoved) { - diagramGraph.remove(taskComponentRemoved.getTask()); - leftPane.taskRemoved(taskComponentRemoved.getTask()); - TaskList taskList = getTaskList(); - setHeight(getHeight());// forcing smart update - taskList.adjustZoomColumnsHeight(); - getDependencyList().redrawDependencies(); - } - }; - taskList.addTaskRemovedListener(taskRemovedListener); dependencyRemovedListener = new DependencyRemovedListener() { @Override public void dependenceRemoved( DependencyComponent dependencyComponent) { - diagramGraph.remove(dependencyComponent); - dependencyAdder.removeDependency(dependencyComponent - .getDependency()); + dependencyRemoved(dependencyComponent); } }; getDependencyList().addDependencyRemovedListener( @@ -234,15 +207,30 @@ public class Planner extends XulElement { } private void recreate() { - this.leftPane = new LeftPane(contextualizedGlobalCommands, this.diagramGraph - .getTopLevelTasks()); + this.leftPane = new LeftPane(contextualizedGlobalCommands, + this.diagramGraph.getTopLevelTasks()); this.leftPane.setParent(this); this.leftPane.afterCompose(); this.leftPane .setGoingDownInLastArrowCommand(goingDownInLastArrowCommand); - this.ganttPanel = new GanttPanel(this.diagramGraph, commandsOnTasksContextualized, - taskEditFormComposer); + this.ganttPanel = new GanttPanel(this.diagramGraph, + commandsOnTasksContextualized, taskEditFormComposer); ganttPanel.setParent(this); ganttPanel.afterCompose(); } + + void removeTask(Task task) { + TaskList taskList = getTaskList(); + taskList.remove(task); + leftPane.taskRemoved(task); + setHeight(getHeight());// forcing smart update + taskList.adjustZoomColumnsHeight(); + getDependencyList().redrawDependencies(); + } + + void dependencyRemoved(DependencyComponent dependencyComponent) { + diagramGraph.remove(dependencyComponent); + dependencyAdder.removeDependency(dependencyComponent + .getDependency()); + } } diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskComponent.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskComponent.java index 7af90a54a..cf8f28231 100755 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskComponent.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskComponent.java @@ -331,10 +331,6 @@ public class TaskComponent extends Div implements AfterCompose { return getParent() != null; } - public void remove() { - getTaskList().removeTaskComponent(this); - } - void publishTaskComponents(Map resultAccumulated) { resultAccumulated.put(getTask(), this); publishDescendants(resultAccumulated); @@ -343,4 +339,9 @@ public class TaskComponent extends Div implements AfterCompose { protected void publishDescendants(Map resultAccumulated) { } + + protected void remove() { + getDependencyList().taskRemoved(this.getTask()); + this.detach(); + } } diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskContainerComponent.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskContainerComponent.java index 83bd66990..bb8a53df9 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskContainerComponent.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskContainerComponent.java @@ -2,6 +2,7 @@ package org.zkoss.ganttz; import java.util.ArrayList; import java.util.List; +import java.util.ListIterator; import java.util.Map; import org.zkoss.ganttz.data.Task; @@ -25,7 +26,7 @@ public class TaskContainerComponent extends TaskComponent implements AfterCompos } private List subtaskComponents = new ArrayList(); - final TaskList taskList; + private final TaskList taskList; private IExpandListener expandListener; @@ -48,25 +49,48 @@ public class TaskContainerComponent extends TaskComponent implements AfterCompos taskContainer.addExpandListener(expandListener); this.taskList = taskList; for (Task task : taskContainer.getTasks()) { - subtaskComponents.add(TaskComponent.asTaskComponent(task, taskList)); + getCurrentComponents().add(TaskComponent.asTaskComponent(task, taskList)); } } @Override protected void publishDescendants(Map resultAccumulated) { - for (TaskComponent taskComponent : subtaskComponents) { + for (TaskComponent taskComponent : getCurrentComponents()) { taskComponent.publishTaskComponents(resultAccumulated); } } + @Override + protected void remove() { + if (isExpanded()) { + for (TaskComponent subtaskComponent : getCurrentComponents()) { + subtaskComponent.remove(); + } + } + super.remove(); + } + public void open() { Component previous = this; - for (TaskComponent subtaskComponent : subtaskComponents) { + for (TaskComponent subtaskComponent : getCurrentComponents()) { taskList.addTaskComponent(previous, subtaskComponent, true); previous = subtaskComponent; } } + private List getCurrentComponents() { + ListIterator listIterator = subtaskComponents + .listIterator(); + // one of the subtask components created previously could have been + // removed, so we only return the valid ones + while (listIterator.hasNext()) { + if (!getTaskContainer().contains(listIterator.next().getTask())) { + listIterator.remove(); + } + } + return subtaskComponents; + } + public boolean isExpanded() { return getTaskContainer().isExpanded(); } @@ -84,7 +108,7 @@ public class TaskContainerComponent extends TaskComponent implements AfterCompos private void close() { - for (TaskComponent subtaskComponent : subtaskComponents) { + for (TaskComponent subtaskComponent : getCurrentComponents()) { if (subtaskComponent instanceof TaskContainerComponent) { TaskContainerComponent container = (TaskContainerComponent) subtaskComponent; container.close(); diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskList.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskList.java index 6191d9bc7..e03625ddc 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskList.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskList.java @@ -16,9 +16,7 @@ import java.util.Map; import org.zkoss.ganttz.data.Dependency; import org.zkoss.ganttz.data.Task; import org.zkoss.ganttz.util.MenuBuilder; -import org.zkoss.ganttz.util.WeakReferencedListeners; import org.zkoss.ganttz.util.MenuBuilder.ItemAction; -import org.zkoss.ganttz.util.WeakReferencedListeners.ListenerNotification; import org.zkoss.ganttz.util.zoom.ZoomLevel; import org.zkoss.ganttz.util.zoom.ZoomLevelChangedListener; import org.zkoss.zk.au.out.AuInvoke; @@ -41,9 +39,6 @@ public class TaskList extends XulElement implements AfterCompose { private ZoomLevelChangedListener zoomLevelChangedListener; - private final WeakReferencedListeners taskRemovedListeners = WeakReferencedListeners - .create(); - private Menupopup contextMenu; private List originalTasks; @@ -144,22 +139,6 @@ public class TaskList extends XulElement implements AfterCompose { }); } - public void addRemoveListener(TaskRemovedListener listener) { - taskRemovedListeners.addListener(listener); - } - - public void removeTaskComponent(final TaskComponent taskComponent) { - removeChild(taskComponent); - taskComponent.detach(); - taskRemovedListeners - .fireEvent(new ListenerNotification() { - @Override - public void doNotify(TaskRemovedListener listener) { - listener.taskComponentRemoved(taskComponent); - } - }); - } - @Override public String getHeight() { return getTasksNumber() * HEIGHT_PER_ROW + "px"; @@ -187,10 +166,6 @@ public class TaskList extends XulElement implements AfterCompose { return getTaskComponents().size(); } - public void addTaskRemovedListener(TaskRemovedListener taskRemovedListener) { - taskRemovedListeners.addListener(taskRemovedListener); - } - public void addDependencyListener(DependencyAddedListener listener) { listeners.add(new WeakReference(listener)); for (TaskComponent taskComponent : getTaskComponents()) { @@ -227,11 +202,6 @@ public class TaskList extends XulElement implements AfterCompose { public void onEvent(TaskComponent choosen, Event event) { choosen.addDependency(); } - }).item("Erase", new ItemAction() { - @Override - public void onEvent(TaskComponent choosen, Event event) { - choosen.remove(); - } }); for (CommandOnTaskContextualized command : commandsOnTasksContextualized) { menuBuilder.item(command.getName(), command.toItemAction()); @@ -266,4 +236,13 @@ public class TaskList extends XulElement implements AfterCompose { getGanttPanel().getDependencyList().redrawDependencies(); } + public void remove(Task task) { + for (TaskComponent taskComponent : getTaskComponents()) { + if (taskComponent.getTask().equals(task)) { + taskComponent.remove(); + return; + } + } + } + } \ No newline at end of file diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskRemovedListener.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskRemovedListener.java deleted file mode 100644 index e10a4a489..000000000 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskRemovedListener.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.zkoss.ganttz; - -public interface TaskRemovedListener { - - public void taskComponentRemoved(TaskComponent taskComponentRemoved); - -} diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/data/Task.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/data/Task.java index f60ad9535..ff0276b5f 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/data/Task.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/data/Task.java @@ -135,4 +135,8 @@ public abstract class Task implements ITaskFundamentalProperties { setLengthMilliseconds(value.getTime() - getBeginDate().getTime()); } + public void removed() { + setVisible(false); + } + } \ No newline at end of file diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/data/TaskContainer.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/data/TaskContainer.java index f6813139b..bfa2efd8a 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/data/TaskContainer.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/data/TaskContainer.java @@ -163,4 +163,12 @@ public class TaskContainer extends Task { return false; } + public void remove(Task toBeRemoved) { + tasks.remove(toBeRemoved); + } + + public boolean contains(Task task) { + return tasks.contains(task); + } + } \ No newline at end of file diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/extensions/IContext.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/extensions/IContext.java index fe7cc955b..17ab14b9d 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/extensions/IContext.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/extensions/IContext.java @@ -13,4 +13,6 @@ public interface IContext { void reload(PlannerConfiguration configuration); + void remove(T domainObject); + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/DataForPlanner.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/DataForPlanner.java index 36188629e..7269fb430 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/DataForPlanner.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/DataForPlanner.java @@ -17,6 +17,7 @@ import org.zkoss.ganttz.data.Task; import org.zkoss.ganttz.data.TaskContainer; import org.zkoss.ganttz.data.TaskLeaf; import org.zkoss.ganttz.extensions.ICommand; +import org.zkoss.ganttz.extensions.ICommandOnTask; import org.zkoss.ganttz.extensions.IContext; /** @@ -62,6 +63,21 @@ public class DataForPlanner { return ""; } }); + configuration + .addCommandOnTask(new ICommandOnTask() { + + @Override + public void doAction( + IContext context, + ITaskFundamentalProperties task) { + context.remove(task); + } + + @Override + public String getName() { + return "Remove"; + } + }); return configuration; }