ItEr18S08CUCreacionProxectoPlanificacionItEr17S10: Adding remove task as command.

This commit is contained in:
Óscar González Fernández 2009-07-22 18:43:32 +02:00 committed by Javier Moran Rua
parent 454578cd12
commit 004ce99e6f
13 changed files with 142 additions and 110 deletions

View file

@ -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() {

View file

@ -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<DependencyRemovedListener> 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<DependencyComponent> getDependencyComponentsConnectedTo(TaskComponent taskComponent) {
ArrayList<DependencyComponent> result = new ArrayList<DependencyComponent>();
for (DependencyComponent dependencyComponent : getDependencyComponents()) {
List<DependencyComponent> 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);
}
}
}
}

View file

@ -27,6 +27,8 @@ public class FunctionalityExposedForExtensions<T> implements IContext<T> {
private Map<Task, T> fromTaskToDomain = new HashMap<Task, T>();
private Map<Task, TaskContainer> fromTaskToParent = new HashMap<Task, TaskContainer>();
@Override
public Task findAssociatedBean(T domainObject)
throws IllegalArgumentException {
@ -37,9 +39,23 @@ public class FunctionalityExposedForExtensions<T> implements IContext<T> {
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<T> implements IContext<T> {
this.diagramGraph = diagramGraph;
}
private Task extractTask(
List<DomainDependency<T>> accumulatedDependencies, T data) {
private Task extractTask(List<DomainDependency<T>> accumulatedDependencies,
T data, TaskContainer parent) {
ITaskFundamentalProperties adapted = adapter.adapt(data);
accumulatedDependencies
.addAll(adapter.getDependenciesOriginating(data));
@ -80,23 +96,24 @@ public class FunctionalityExposedForExtensions<T> implements IContext<T> {
} 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<? extends T> domainObjects) {
List<DomainDependency<T>> totalDependencies = new ArrayList<DomainDependency<T>>();
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<T> implements IContext<T> {
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);
}
}

View file

@ -209,8 +209,6 @@ public class LeftTasksTree extends HtmlMacroComponent {
private static Log LOG = LogFactory.getLog(LeftTasksTree.class);
private TaskRemovedListener taskRemovedListener;
private final List<Task> tasks;
private MutableTreeModel<Task> tasksTreeModel;

View file

@ -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> T findOneComponentOfType(Class<T> type) {
List<T> 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 <T> List<T> findComponentsOfType(Class<T> type,
List<? extends Object> children) {
ArrayList<T> result = new ArrayList<T>();
@ -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());
}
}

View file

@ -331,10 +331,6 @@ public class TaskComponent extends Div implements AfterCompose {
return getParent() != null;
}
public void remove() {
getTaskList().removeTaskComponent(this);
}
void publishTaskComponents(Map<Task, TaskComponent> resultAccumulated) {
resultAccumulated.put(getTask(), this);
publishDescendants(resultAccumulated);
@ -343,4 +339,9 @@ public class TaskComponent extends Div implements AfterCompose {
protected void publishDescendants(Map<Task, TaskComponent> resultAccumulated) {
}
protected void remove() {
getDependencyList().taskRemoved(this.getTask());
this.detach();
}
}

View file

@ -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<TaskComponent> subtaskComponents = new ArrayList<TaskComponent>();
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<Task, TaskComponent> 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<TaskComponent> getCurrentComponents() {
ListIterator<TaskComponent> 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();

View file

@ -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<TaskRemovedListener> taskRemovedListeners = WeakReferencedListeners
.create();
private Menupopup contextMenu;
private List<Task> 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<TaskRemovedListener>() {
@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<DependencyAddedListener>(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<TaskComponent>() {
@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;
}
}
}
}

View file

@ -1,7 +0,0 @@
package org.zkoss.ganttz;
public interface TaskRemovedListener {
public void taskComponentRemoved(TaskComponent taskComponentRemoved);
}

View file

@ -135,4 +135,8 @@ public abstract class Task implements ITaskFundamentalProperties {
setLengthMilliseconds(value.getTime() - getBeginDate().getTime());
}
public void removed() {
setVisible(false);
}
}

View file

@ -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);
}
}

View file

@ -13,4 +13,6 @@ public interface IContext<T> {
void reload(PlannerConfiguration<?> configuration);
void remove(T domainObject);
}

View file

@ -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<ITaskFundamentalProperties>() {
@Override
public void doAction(
IContext<ITaskFundamentalProperties> context,
ITaskFundamentalProperties task) {
context.remove(task);
}
@Override
public String getName() {
return "Remove";
}
});
return configuration;
}