TASKPM/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/Planner.java

103 lines
3.2 KiB
Java
Raw Normal View History

2009-04-14 17:51:03 +02:00
package org.zkoss.ganttz;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.zkoss.ganttz.util.DependencyRegistry;
import org.zkoss.ganttz.util.TaskBean;
2009-04-14 17:51:03 +02:00
import org.zkoss.zk.ui.ext.AfterCompose;
import org.zkoss.zul.impl.XulElement;
public class Planner extends XulElement implements AfterCompose {
private DependencyAddedListener dependencyAddedListener;
private Map<String, TaskBean> tasksById = new HashMap<String, TaskBean>();
private DependencyRegistry dependencyRegistry = new DependencyRegistry();
2009-04-14 17:51:03 +02:00
public Planner() {
}
private TaskList getTaskList() {
List<Object> children = findOneComponentOfType(GanttPanel.class)
.getChildren();
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);
}
void publish(String taskId, TaskBean task) {
if (taskId == null)
throw new IllegalArgumentException("taskId cannot be null");
if (task == null)
throw new IllegalArgumentException("task cannot be null");
if (tasksById.containsKey(taskId))
throw new IllegalArgumentException("task with id " + taskId
+ " is already in " + tasksById);
tasksById.put(taskId, task);
dependencyRegistry.add(task);
2009-04-14 17:51:03 +02:00
}
TaskBean retrieve(String taskId) {
return tasksById.get(taskId);
}
public static <T> List<T> findComponentsOfType(Class<T> type,
List<? extends Object> children) {
ArrayList<T> result = new ArrayList<T>();
for (Object child : children) {
if (type.isInstance(child)) {
result.add(type.cast(child));
}
}
return result;
}
private GanttPanel getGanntPanel() {
return findOneComponentOfType(GanttPanel.class);
}
private DependencyList getDependencyList() {
List<Object> children = getGanntPanel().getChildren();
return findComponentsOfType(DependencyList.class, children).get(0);
}
@Override
public void afterCompose() {
TaskList taskList = getTaskList();
dependencyAddedListener = new DependencyAddedListener() {
@Override
public void dependenceAdded(Dependency dependency) {
getDependencyList().addDependency(dependency);
}
};
taskList.addDependencyListener(dependencyAddedListener);
taskList.addTaskRemovedListener(new TaskRemovedListener() {
@Override
public void taskRemoved(Task taskRemoved) {
dependencyRegistry.remove(taskRemoved.getTaskBean());
}
});
2009-04-14 17:51:03 +02:00
}
public void addTask(Task task) {
2009-04-14 17:51:03 +02:00
getTaskList().addTask(task);
}
public void publishDependency(Dependency dependency) {
dependencyRegistry.add(dependency);
2009-04-14 17:51:03 +02:00
}
}