ItEr18S08CUCreacionProxectoPlanificacionItEr17S10: Adding remove task as command.
This commit is contained in:
parent
454578cd12
commit
004ce99e6f
13 changed files with 142 additions and 110 deletions
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
package org.zkoss.ganttz;
|
||||
|
||||
public interface TaskRemovedListener {
|
||||
|
||||
public void taskComponentRemoved(TaskComponent taskComponentRemoved);
|
||||
|
||||
}
|
||||
|
|
@ -135,4 +135,8 @@ public abstract class Task implements ITaskFundamentalProperties {
|
|||
setLengthMilliseconds(value.getTime() - getBeginDate().getTime());
|
||||
}
|
||||
|
||||
public void removed() {
|
||||
setVisible(false);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -13,4 +13,6 @@ public interface IContext<T> {
|
|||
|
||||
void reload(PlannerConfiguration<?> configuration);
|
||||
|
||||
void remove(T domainObject);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue