From e2347a01e8b32f9f276c76d64ed4d03e410302b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Fri, 10 Jul 2009 20:40:19 +0200 Subject: [PATCH] ItEr16S09RFComportamentoGraficoPlanificadorItEr15S12: Using now MutableTreeModel on ListDetails to avoid invalidation when adding tasks. --- .../java/org/zkoss/ganttz/ListDetails.java | 85 ++++++++----------- 1 file changed, 35 insertions(+), 50 deletions(-) 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 71d5dd7f6..42cd55675 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,6 +1,5 @@ package org.zkoss.ganttz; -import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; @@ -10,6 +9,7 @@ import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.zkoss.ganttz.TaskDetail.ITaskDetailNavigator; +import org.zkoss.ganttz.util.MutableTreeModel; import org.zkoss.ganttz.util.TaskBean; import org.zkoss.ganttz.util.TaskContainerBean; import org.zkoss.zk.ui.Component; @@ -18,7 +18,6 @@ import org.zkoss.zk.ui.HtmlMacroComponent; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.OpenEvent; -import org.zkoss.zul.SimpleTreeModel; import org.zkoss.zul.SimpleTreeNode; import org.zkoss.zul.Tree; import org.zkoss.zul.TreeModel; @@ -30,12 +29,11 @@ public class ListDetails extends HtmlMacroComponent { private final class TaskBeanRenderer implements TreeitemRenderer { public void render(Treeitem item, Object data) throws Exception { - SimpleTreeNode node = (SimpleTreeNode) data; - TaskBean taskBean = (TaskBean) node.getData(); + TaskBean taskBean = (TaskBean) data; item.setOpen(isOpened(taskBean)); final int[] path = tasksTreeModel.getPath(tasksTreeModel.getRoot(), - node); - String cssClass = "depth_"+path.length; + taskBean); + String cssClass = "depth_" + path.length; TaskDetail taskDetail = TaskDetail.create(taskBean, new TreeNavigator(tasksTreeModel, path)); if (taskBean instanceof TaskContainerBean) { @@ -44,9 +42,10 @@ public class ListDetails extends HtmlMacroComponent { Component row = Executions.getCurrent().createComponents( "~./ganttz/zul/taskdetail.zul", item, null); taskDetail.doAfterCompose(row); - List rowChildren = row.getChildren(); - List treeCells = Planner.findComponentsOfType(Treecell.class, rowChildren); - for(Treecell cell : treeCells){ + List rowChildren = row.getChildren(); + List treeCells = Planner.findComponentsOfType( + Treecell.class, rowChildren); + for (Treecell cell : treeCells) { cell.setSclass(cssClass); } detailsForBeans.put(taskBean, taskDetail); @@ -78,38 +77,31 @@ public class ListDetails extends HtmlMacroComponent { private final class TreeNavigator implements ITaskDetailNavigator { private final int[] pathToNode; - private final TreeModel treemodel; - - private SimpleTreeNode parentCached; - private TreeNavigator(TreeModel treemodel, int[] pathToNode) { - this.treemodel = treemodel; this.pathToNode = pathToNode; } @Override public TaskDetail getAboveDetail() { - SimpleTreeNode parent = getParent(pathToNode); + TaskBean parent = getParent(pathToNode); int lastPosition = pathToNode[pathToNode.length - 1]; if (lastPosition != 0) { return getChild(parent, lastPosition - 1); - } else if (treemodel.getRoot() != parent) { - return detailsForBeans.get(getTaskBean(parent)); + } else if (tasksTreeModel.getRoot() != parent) { + return detailsForBeans.get(parent); } return null; } - private TaskDetail getChild(SimpleTreeNode parent, int position) { - SimpleTreeNode node = (SimpleTreeNode) parent.getChildren().get( - position); - TaskBean bean = getTaskBean(node); - return detailsForBeans.get(bean); + private TaskDetail getChild(TaskBean parent, int position) { + TaskBean child = tasksTreeModel.getChild(parent, position); + return detailsForBeans.get(child); } @Override public TaskDetail getBelowDetail() { - SimpleTreeNode parent = getParent(pathToNode); - int childCount = parent.getChildCount(); + TaskBean parent = getParent(pathToNode); + int childCount = tasksTreeModel.getChildCount(parent); int lastPosition = pathToNode[pathToNode.length - 1]; int belowPosition = lastPosition + 1; if (belowPosition < childCount) { @@ -118,14 +110,12 @@ public class ListDetails extends HtmlMacroComponent { return null; } - private SimpleTreeNode getParent(int[] path) { - if (parentCached != null) - return parentCached; - SimpleTreeNode current = (SimpleTreeNode) treemodel.getRoot(); + private TaskBean getParent(int[] path) { + TaskBean current = tasksTreeModel.getRoot(); for (int i = 0; i < path.length - 1; i++) { - current = (SimpleTreeNode) current.getChildren().get(path[i]); + current = tasksTreeModel.getChild(current, path[i]); } - return parentCached = current; + return current; } } @@ -136,9 +126,7 @@ public class ListDetails extends HtmlMacroComponent { private final List taskBeans; - private SimpleTreeNode rootNode; - - private SimpleTreeModel tasksTreeModel; + private MutableTreeModel tasksTreeModel; private Tree tasksTree; @@ -150,23 +138,22 @@ public class ListDetails extends HtmlMacroComponent { return (TaskBean) node.getData(); } - private static List asSimpleTreeNodes( + private static void fillModel(MutableTreeModel treeModel, List taskBeans) { - ArrayList result = new ArrayList(); for (TaskBean taskBean : taskBeans) { - SimpleTreeNode node = asSimpleTreeNode(taskBean); - if (taskBean instanceof TaskContainerBean) { - TaskContainerBean container = (TaskContainerBean) taskBean; - node.getChildren().addAll( - asSimpleTreeNodes(container.getTasks())); - } - result.add(node); + fillModel(treeModel, treeModel.getRoot(), taskBean); } - return result; } - private static SimpleTreeNode asSimpleTreeNode(TaskBean taskBean) { - return new SimpleTreeNode(taskBean, new ArrayList()); + private static void fillModel(MutableTreeModel treeModel, + TaskBean parent, TaskBean node) { + treeModel.add(parent, node); + if (node instanceof TaskContainerBean) { + TaskContainerBean container = (TaskContainerBean) node; + for (TaskBean child : container.getTasks()) { + fillModel(treeModel, container, child); + } + } } Planner getPlanner() { @@ -207,16 +194,14 @@ public class ListDetails extends HtmlMacroComponent { setClass("listdetails"); super.afterCompose(); tasksTree = (Tree) getFellow("tasksTree"); - rootNode = new SimpleTreeNode(null, asSimpleTreeNodes(taskBeans)); - tasksTreeModel = new SimpleTreeModel(rootNode); + tasksTreeModel = MutableTreeModel.create(TaskBean.class); + fillModel(tasksTreeModel, taskBeans); tasksTree.setModel(tasksTreeModel); tasksTree.setTreeitemRenderer(new TaskBeanRenderer()); } private void addTask(TaskBean taskBean) { - rootNode.getChildren().add( - new SimpleTreeNode(taskBean, new ArrayList())); - tasksTree.setModel(tasksTreeModel); + tasksTreeModel.add(tasksTreeModel.getRoot(), taskBean); } }