1 4 package org.oddjob.webapp.struts.forms; 5 6 import java.util.LinkedHashMap ; 7 import java.util.Map ; 8 9 import org.oddjob.webapp.model.JobInfoLookup; 10 import org.oddjob.webapp.model.NodeInfo; 11 12 17 public class TreeNodeBeanBuilder { 18 19 private final JobInfoLookup lookup; 20 21 26 public TreeNodeBeanBuilder(JobInfoLookup lookup) { 27 if (lookup == null) { 28 throw new NullPointerException ("Lookup can't be null!"); 29 } 30 this.lookup = lookup; 31 } 32 33 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 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 childMap = bean.getChildMap(); 50 bean.setHasChildren(nodeInfo.getHasChildren()); 51 if (childMap == null) { 52 return; 53 } 54 Map newMap = new LinkedHashMap (); 55 String [] 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 77 public Map buildChildren(TreeNodeBean parent) { 78 String refId = parent.getRefId(); 79 NodeInfo nodeInfo = lookup.nodeInfoFor(refId); 80 81 Map children = new LinkedHashMap (); 82 String [] 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 98 void buildBean(TreeNodeBean bean, int level) { 99 String 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 |