KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > oddjob > webapp > struts > forms > TreeNodeBeanBuilder


1 /*
2  * (c) Rob Gordon 2005
3  */

4 package org.oddjob.webapp.struts.forms;
5
6 import java.util.LinkedHashMap JavaDoc;
7 import java.util.Map JavaDoc;
8
9 import org.oddjob.webapp.model.JobInfoLookup;
10 import org.oddjob.webapp.model.NodeInfo;
11
12 /**
13  * Build a TreeNodeBean hierarchy.
14  *
15  * @author Rob Gordon
16  */

17 public class TreeNodeBeanBuilder {
18
19     private final JobInfoLookup lookup;
20
21     /**
22      * Constructor.
23      *
24      * @param lookup Lookup to use for building.
25      */

26     public TreeNodeBeanBuilder(JobInfoLookup lookup) {
27         if (lookup == null) {
28             throw new NullPointerException JavaDoc("Lookup can't be null!");
29         }
30         this.lookup = lookup;
31     }
32     
33     /**
34      * Build the root bean.
35      */

36     public TreeNodeBean buildRoot() {
37         TreeNodeBean root = new TreeNodeBean();
38         root.setRefId(lookup.getRootRefId());
39         buildBean(root, 0);
40         return root;
41     }
42
43     public void refresh(TreeNodeBean bean) {
44         String JavaDoc refId = bean.getRefId();
45         NodeInfo nodeInfo = lookup.nodeInfoFor(refId);
46         bean.setTreeNodeBeanBuilder(this);
47         bean.setNodeName(nodeInfo.getNodeName());
48         bean.setIconId(nodeInfo.getIconId());
49         Map JavaDoc childMap = bean.getChildMap();
50         bean.setHasChildren(nodeInfo.getHasChildren());
51         if (childMap == null) {
52             return;
53         }
54         Map JavaDoc newMap = new LinkedHashMap JavaDoc();
55         String JavaDoc[] childRefIds = nodeInfo.getChildRefIds();
56         for (int i = 0; i < childRefIds.length; ++i) {
57             TreeNodeBean child = (TreeNodeBean) childMap.get(childRefIds[i]);
58             if (child == null) {
59                 child = new TreeNodeBean();
60                 child.setRefId(childRefIds[i]);
61                 buildBean(child, bean.getDepth() + 1);
62             }
63             else {
64                 refresh(child);
65             }
66             newMap.put(child.getRefId(), child);
67         }
68         bean.setChildMap(newMap);
69     }
70     
71     /**
72      * Build the children.
73      *
74      * @param parent
75      * @return
76      */

77     public Map JavaDoc buildChildren(TreeNodeBean parent) {
78         String JavaDoc refId = parent.getRefId();
79         NodeInfo nodeInfo = lookup.nodeInfoFor(refId);
80         
81         Map JavaDoc children = new LinkedHashMap JavaDoc();
82         String JavaDoc [] childRefIds = nodeInfo.getChildRefIds();
83         for (int i = 0; i < childRefIds.length; ++i) {
84             TreeNodeBean child = new TreeNodeBean();
85             child.setRefId(childRefIds[i]);
86             buildBean(child, parent.getDepth() + 1);
87             children.put(child.getRefId(), child);
88         }
89         return children;
90     }
91     
92     /**
93      * Helper function to build the bean.
94      *
95      * @param bean The bean we're building.
96      * @param level The depth the bean is at.
97      */

98     void buildBean(TreeNodeBean bean, int level) {
99         String JavaDoc refId = bean.getRefId();
100         NodeInfo nodeInfo = lookup.nodeInfoFor(refId);
101         bean.setTreeNodeBeanBuilder(this);
102         bean.setDepth(level);
103         bean.setNodeName(nodeInfo.getNodeName());
104         bean.setIconId(nodeInfo.getIconId());
105         bean.setHasChildren(nodeInfo.getHasChildren());
106     }
107
108     
109 }
110
Popular Tags