diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/ListDetails.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/ListDetails.java index d6f9b6208..7c3759d81 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/ListDetails.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/ListDetails.java @@ -1,50 +1,96 @@ package org.zkoss.ganttz; +import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.zkoss.ganttz.util.TaskBean; import org.zkoss.ganttz.util.TaskContainerBean; -import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.HtmlMacroComponent; +import org.zkoss.zul.SimpleTreeModel; +import org.zkoss.zul.SimpleTreeNode; +import org.zkoss.zul.Tree; +import org.zkoss.zul.Treecell; +import org.zkoss.zul.Treeitem; +import org.zkoss.zul.TreeitemRenderer; +import org.zkoss.zul.Treerow; public class ListDetails extends HtmlMacroComponent { + /** + * @author Óscar González Fernández + */ + private final class TaskBeanRenderer implements TreeitemRenderer { + @Override + public void render(Treeitem item, Object data) throws Exception { + SimpleTreeNode node = (SimpleTreeNode) data; + TaskBean taskBean = (TaskBean) node.getData(); + Treerow treerow = new Treerow(); + treerow.setParent(item); + Treecell treecell = new Treecell(); + treecell.setParent(treerow); + TaskDetail taskDetail = TaskDetail.create(taskBean); + taskDetail.setParent(treecell); + taskDetail.afterCompose(); + } + } + private static Log LOG = LogFactory.getLog(ListDetails.class); private TaskRemovedListener taskRemovedListener; private final List taskBeans; + private SimpleTreeNode rootNode; + + private SimpleTreeModel tasksTreeModel; + + private Tree tasksTree; + public ListDetails(List taskBeans) { this.taskBeans = taskBeans; } + private static List asSimpleTreeNodes( + List taskBeans2) { + return asSimpleTreeNodes(taskBeans2, new HashSet()); + } + + private static List asSimpleTreeNodes( + List taskBeans2, Set alreadyIncluded) { + ArrayList result = new ArrayList(); + for (TaskBean taskBean : taskBeans2) { + if (alreadyIncluded.contains(taskBean)) + continue; + SimpleTreeNode node = asSimpleTreeNode(taskBean); + if (taskBean instanceof TaskContainerBean) { + TaskContainerBean container = (TaskContainerBean) taskBean; + node.getChildren() + .addAll( + asSimpleTreeNodes(container.getTasks(), + alreadyIncluded)); + } + result.add(node); + alreadyIncluded.add(taskBean); + } + return result; + } + + private static SimpleTreeNode asSimpleTreeNode(TaskBean taskBean) { + return new SimpleTreeNode(taskBean, new ArrayList()); + } + Planner getPlanner() { return (Planner) getParent(); } - private List getTaskDetails() { - List children = getInsertionPoint().getChildren(); - return Planner.findComponentsOfType(TaskDetail.class, children); - } - public void taskRemoved(TaskBean taskRemoved) { - List taskDetails = getTaskDetails(); - for (TaskDetail taskDetail : taskDetails) { - if (taskDetail.getTaskBean().equals(taskRemoved)) { - removeDetail(taskDetail); - return; - } - } - throw new RuntimeException("not found taskDetail for " + taskRemoved); - } - - private void removeDetail(TaskDetail taskDetail) { - getInsertionPoint().getChildren().remove(taskDetail); + // TODO pending } public void addTask() { @@ -52,8 +98,7 @@ public class ListDetails extends HtmlMacroComponent { newTask.setName("Nova Tarefa"); newTask.setBeginDate(new Date()); newTask.setEndDate(threeMonthsLater(newTask.getBeginDate())); - TaskDetail newDetail = addTask(newTask); - newDetail.receiveFocus(); + addTask(newTask); getPlanner().addTask(newTask); } @@ -62,9 +107,8 @@ public class ListDetails extends HtmlMacroComponent { newTask.setName("Novo Contedor de Tarefas"); newTask.setBeginDate(new Date()); newTask.setEndDate(threeMonthsLater(newTask.getBeginDate())); - TaskDetail newDetail = addTask(newTask); - newDetail.receiveFocus(); - getPlanner().addTaskContainer(newTask); + addTask(newTask); + getPlanner().addTask(newTask); } private static Date threeMonthsLater(Date now) { @@ -78,20 +122,17 @@ public class ListDetails extends HtmlMacroComponent { public void afterCompose() { setClass("listdetails"); super.afterCompose(); - for (TaskBean taskBean : taskBeans) { - addTask(taskBean); - } + tasksTree = (Tree) getFellow("tasksTree"); + rootNode = new SimpleTreeNode(null, asSimpleTreeNodes(taskBeans)); + tasksTreeModel = new SimpleTreeModel(rootNode); + tasksTree.setModel(tasksTreeModel); + tasksTree.setTreeitemRenderer(new TaskBeanRenderer()); } - private TaskDetail addTask(TaskBean taskBean) { - TaskDetail taskDetail = TaskDetail.create(taskBean); - getInsertionPoint().appendChild(taskDetail); - taskDetail.afterCompose(); - return taskDetail; - } - - private Component getInsertionPoint() { - return getFellow("insertionPoint"); + private void addTask(TaskBean taskBean) { + rootNode.getChildren().add( + new SimpleTreeNode(taskBean, new ArrayList())); + tasksTree.setModel(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 a2b647eba..e7682868b 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 @@ -127,11 +127,6 @@ public class Planner extends XulElement implements AfterCompose { dependencyRegistry.add(newTask); } - public void addTaskContainer(TaskContainerBean newTaskContainer) { - getTaskList().addTask(newTaskContainer); - dependencyRegistry.add(newTaskContainer); - } - private void publishDependency(Dependency dependency) { dependencyRegistry.add(dependency.getDependencyBean()); } diff --git a/navalplanner-gantt-zk/src/main/resources/web/ganttz/zul/listdetails.zul b/navalplanner-gantt-zk/src/main/resources/web/ganttz/zul/listdetails.zul index 628480816..0a5572cea 100644 --- a/navalplanner-gantt-zk/src/main/resources/web/ganttz/zul/listdetails.zul +++ b/navalplanner-gantt-zk/src/main/resources/web/ganttz/zul/listdetails.zul @@ -1,13 +1,11 @@