From 454578cd122e93639ec0698b658b83c7ee1bcaf6 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:31 +0200 Subject: [PATCH] ItEr18S08CUCreacionProxectoPlanificacionItEr17S10: Adding contextualized commands support. --- .../ganttz/CommandOnTaskContextualized.java | 53 +++++++++++++++++++ .../java/org/zkoss/ganttz/GanttPanel.java | 6 ++- .../main/java/org/zkoss/ganttz/Planner.java | 48 +++++++++++------ .../main/java/org/zkoss/ganttz/TaskList.java | 18 +++++-- .../ganttz/adapters/PlannerConfiguration.java | 11 +++- .../ganttz/extensions/ICommandOnTask.java | 9 ++++ 6 files changed, 121 insertions(+), 24 deletions(-) create mode 100644 navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/CommandOnTaskContextualized.java create mode 100644 navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/extensions/ICommandOnTask.java diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/CommandOnTaskContextualized.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/CommandOnTaskContextualized.java new file mode 100644 index 000000000..1df326ce9 --- /dev/null +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/CommandOnTaskContextualized.java @@ -0,0 +1,53 @@ +package org.zkoss.ganttz; + +import org.zkoss.ganttz.adapters.IDomainAndBeansMapper; +import org.zkoss.ganttz.data.Task; +import org.zkoss.ganttz.extensions.ICommandOnTask; +import org.zkoss.ganttz.extensions.IContext; +import org.zkoss.ganttz.util.MenuBuilder.ItemAction; +import org.zkoss.zk.ui.event.Event; + +public class CommandOnTaskContextualized { + + public static CommandOnTaskContextualized create( + ICommandOnTask commandOnTask, IDomainAndBeansMapper mapper, + IContext context) { + return new CommandOnTaskContextualized(commandOnTask, mapper, + context); + } + + private final ICommandOnTask commandOnTask; + + private final IContext context; + + private final IDomainAndBeansMapper mapper; + + private CommandOnTaskContextualized(ICommandOnTask commandOnTask, + IDomainAndBeansMapper mapper, IContext context) { + this.commandOnTask = commandOnTask; + this.mapper = mapper; + this.context = context; + } + + public void doAction(Task task) { + doAction(mapper.findAssociatedDomainObject(task)); + } + + public void doAction(T task) { + commandOnTask.doAction(context, task); + } + + public String getName() { + return commandOnTask.getName(); + } + + ItemAction toItemAction() { + return new ItemAction() { + @Override + public void onEvent(TaskComponent choosen, Event event) { + doAction(choosen.getTask()); + } + }; + } + +} diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/GanttPanel.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/GanttPanel.java index 9b147f5b4..f94c9c273 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/GanttPanel.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/GanttPanel.java @@ -1,5 +1,7 @@ package org.zkoss.ganttz; +import java.util.List; + import org.zkoss.ganttz.data.GanttDiagramGraph; import org.zkoss.zk.au.AuRequest; import org.zkoss.zk.au.Command; @@ -18,12 +20,12 @@ public class GanttPanel extends XulElement implements AfterCompose { private final GanttDiagramGraph diagramGraph; public GanttPanel(GanttDiagramGraph ganttDiagramGraph, - TaskEditFormComposer taskEditFormComposer) { + List> commandsOnTasksContextualized, TaskEditFormComposer taskEditFormComposer) { this.diagramGraph = ganttDiagramGraph; timeTracker = new TimeTracker(this); appendChild(timeTracker); tasksLists = TaskList.createFor(taskEditFormComposer, - ganttDiagramGraph.getTopLevelTasks()); + ganttDiagramGraph.getTopLevelTasks(), commandsOnTasksContextualized); dependencyList = new DependencyList(); appendChild(tasksLists); appendChild(dependencyList); 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 bfcbf9a3d..b53af5bce 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 @@ -14,6 +14,7 @@ import org.zkoss.ganttz.data.Dependency; import org.zkoss.ganttz.data.GanttDiagramGraph; 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; @@ -35,18 +36,19 @@ public class Planner extends XulElement { private DependencyAdderAdapter dependencyAdder; - private List> contextualizedCommands; + private List> contextualizedGlobalCommands; private CommandContextualized goingDownInLastArrowCommand; + private List> commandsOnTasksContextualized; + public Planner() { } TaskList getTaskList() { if (ganttPanel == null) return null; - List children = ganttPanel - .getChildren(); + List children = ganttPanel.getChildren(); return Planner.findComponentsOfType(TaskList.class, children).get(0); } @@ -100,7 +102,8 @@ public class Planner extends XulElement { public void dependenceAdded(DependencyComponent dependencyComponent) { getDependencyList().addDependencyComponent(dependencyComponent); diagramGraph.add(dependencyComponent.getDependency()); - dependencyAdder.addDependency(dependencyComponent.getDependency()); + dependencyAdder.addDependency(dependencyComponent + .getDependency()); } }; taskList.addDependencyListener(dependencyAddedListener); @@ -120,9 +123,11 @@ public class Planner extends XulElement { dependencyRemovedListener = new DependencyRemovedListener() { @Override - public void dependenceRemoved(DependencyComponent dependencyComponent) { + public void dependenceRemoved( + DependencyComponent dependencyComponent) { diagramGraph.remove(dependencyComponent); - dependencyAdder.removeDependency(dependencyComponent.getDependency()); + dependencyAdder.removeDependency(dependencyComponent + .getDependency()); } }; getDependencyList().addDependencyRemovedListener( @@ -153,7 +158,7 @@ public class Planner extends XulElement { adapter.addDependency(toDomainDependency(bean)); } - public void removeDependency(Dependency bean){ + public void removeDependency(Dependency bean) { adapter.removeDependency(toDomainDependency(bean)); } @@ -181,9 +186,10 @@ public class Planner extends XulElement { diagramGraph); dependencyAdder = new DependencyAdderAdapter(configuration .getAdapter(), context.getMapper()); - this.contextualizedCommands = contextualize(context, - configuration - .getGlobalCommands()); + this.contextualizedGlobalCommands = contextualize(context, + configuration.getGlobalCommands()); + this.commandsOnTasksContextualized = contextualize(context, + configuration.getCommandsOnTasks()); goingDownInLastArrowCommand = contextualize(context, configuration .getGoingDownInLastArrowCommand()); clear(); @@ -198,14 +204,24 @@ public class Planner extends XulElement { getChildren().clear(); } - private CommandContextualized contextualize( - IContext context, ICommand command) { + private List> contextualize( + FunctionalityExposedForExtensions context, + List> commands) { + List> result = new ArrayList>(); + for (ICommandOnTask c : commands) { + result.add(CommandOnTaskContextualized.create(c, context + .getMapper(), context)); + } + return result; + } + + private CommandContextualized contextualize(IContext context, + ICommand command) { return CommandContextualized.create(command, context); } private List> contextualize( - IContext context, - Collection> commands) { + IContext context, Collection> commands) { ArrayList> result = new ArrayList>(); for (ICommand command : commands) { result.add(contextualize(context, command)); @@ -218,13 +234,13 @@ public class Planner extends XulElement { } private void recreate() { - this.leftPane = new LeftPane(contextualizedCommands, this.diagramGraph + 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, + this.ganttPanel = new GanttPanel(this.diagramGraph, commandsOnTasksContextualized, taskEditFormComposer); ganttPanel.setParent(this); ganttPanel.afterCompose(); 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 47a7ba541..6191d9bc7 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 @@ -50,14 +50,17 @@ public class TaskList extends XulElement implements AfterCompose { private final TaskEditFormComposer taskEditFormComposer; - public TaskList(TaskEditFormComposer formComposer, List tasks) { + private final List> commandsOnTasksContextualized; + + public TaskList(TaskEditFormComposer formComposer, List tasks, List> commandsOnTasksContextualized) { this.taskEditFormComposer = formComposer; this.originalTasks = tasks; + this.commandsOnTasksContextualized = commandsOnTasksContextualized; } public static TaskList createFor(TaskEditFormComposer formComposer, - List tasks) { - TaskList result = new TaskList(formComposer, tasks); + List tasks, List> commandsOnTasksContextualized) { + TaskList result = new TaskList(formComposer, tasks, commandsOnTasksContextualized); return result; } @@ -216,7 +219,8 @@ public class TaskList extends XulElement implements AfterCompose { private Menupopup getContextMenuForTasks() { if (contextMenu == null) { - contextMenu = MenuBuilder.on(getPage(), getTaskComponents()).item( + MenuBuilder menuBuilder = MenuBuilder.on(getPage(), getTaskComponents()); + menuBuilder.item( "Add Dependency", new ItemAction() { @Override @@ -228,7 +232,11 @@ public class TaskList extends XulElement implements AfterCompose { public void onEvent(TaskComponent choosen, Event event) { choosen.remove(); } - }).createWithoutSettingContext(); + }); + for (CommandOnTaskContextualized command : commandsOnTasksContextualized) { + menuBuilder.item(command.getName(), command.toItemAction()); + } + contextMenu = menuBuilder.createWithoutSettingContext(); } return contextMenu; } diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/adapters/PlannerConfiguration.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/adapters/PlannerConfiguration.java index 1c5713ac7..af8041f34 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/adapters/PlannerConfiguration.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/adapters/PlannerConfiguration.java @@ -6,6 +6,7 @@ import java.util.List; import org.zkoss.ganttz.extensions.ICommand; import org.zkoss.ganttz.extensions.IContext; +import org.zkoss.ganttz.extensions.ICommandOnTask; /** * A object that defines several extension points for gantt planner @@ -35,6 +36,8 @@ public class PlannerConfiguration { private List> globalCommands = new ArrayList>(); + private List> commandsOnTasks = new ArrayList>(); + private ICommand goingDownInLastArrowCommand = new NullCommand(); @@ -57,11 +60,17 @@ public class PlannerConfiguration { return data; } + public void addCommandOnTask(ICommandOnTask commandOnTask){ + this.commandsOnTasks.add(commandOnTask); + } + public void addGlobalCommand(ICommand command) { this.globalCommands.add(command); } - + public List> getCommandsOnTasks(){ + return Collections.unmodifiableList(commandsOnTasks); + } public List> getGlobalCommands() { return Collections.unmodifiableList(globalCommands); } diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/extensions/ICommandOnTask.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/extensions/ICommandOnTask.java new file mode 100644 index 000000000..857141b64 --- /dev/null +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/extensions/ICommandOnTask.java @@ -0,0 +1,9 @@ +package org.zkoss.ganttz.extensions; + +public interface ICommandOnTask { + + public String getName(); + + public void doAction(IContext context, T task); + +}