1 package com.frovi.ss.Tree; 2 3 import java.util.ArrayList ; 4 import java.util.Collection ; 5 import java.util.Iterator ; 6 import java.util.Vector ; 7 8 15 public class MakeTree 16 { 17 private boolean showTreeLines = true; 18 private ArrayList ret = new ArrayList (); 19 private INodeSupplier nodeSupplier; 20 private boolean showRoot = true; 21 private int startLevel = -1; 22 23 private Vector intTreeLines = new Vector (50,10); 24 25 public MakeTree(INodeSupplier nodeSupplier) 27 { 28 setNodeSupplier(nodeSupplier); 29 } 30 31 public Collection makeNodeList() { 33 return makeNodeList(""); 34 } 35 36 public Collection makeNodeList(String expString) 38 { 39 BaseNode root = nodeSupplier.getRootNode(); 40 root.setIsRoot(true); 41 42 if (showRoot) 43 { 44 addNodeToList(root, startLevel, makeKey(root.getId()), true, true); 45 } 46 47 return makeNodeList(root.getId(), expString); 48 } 49 50 public Collection makeNodeList(Integer parentNode, String expString) 51 { 52 intTreeLines.setSize(50); 53 FillTree(parentNode, startLevel, expString, new String ("")); 54 return ret; 55 } 56 public Collection makeNodeList(BaseNode parentNode, String expString) 57 { 58 intTreeLines.setSize(50); 59 FillTree(parentNode.getId(), startLevel, expString, new String ("")); 60 return ret; 61 } 62 63 public void setNodeSupplier(INodeSupplier nodeSupplier) 64 { 65 this.nodeSupplier = nodeSupplier; 66 } 67 68 private String makeKey(Integer id) 69 { 70 return "/" + String.valueOf(id.intValue()).trim() + "/"; 71 } 72 73 private void FillTree(Integer parent, int level, String expkey, String makekey) 74 { 75 Collection leafs = new ArrayList (); 76 Collection roots = new ArrayList ();; 77 78 level++; 81 82 try 84 { 85 roots = nodeSupplier.getChildContainerNodes(parent); 86 leafs = nodeSupplier.getChildLeafNodes(parent); 87 } 88 catch(Exception e) 89 { 90 e.printStackTrace(); 91 } 92 93 boolean blnHasDocs = leafs.size() > 0; 94 95 String parentKey = makeKey(parent); 97 makekey += parentKey; 98 99 Iterator rIter = roots.iterator(); 101 while (rIter.hasNext()) 102 { 103 BaseNode thisNode = (BaseNode) rIter.next(); 104 String nodeKey = makeKey(thisNode.getId()); 105 106 if (showTreeLines) 108 { 109 intTreeLines.add(level, new Integer (3)); 110 if (!rIter.hasNext()) 111 { 112 if (blnHasDocs == false) 113 { 114 intTreeLines.remove(level); 115 intTreeLines.add(level, new Integer (2)); 116 } 117 } 118 } 119 120 if ( expkey.indexOf(nodeKey) != -1) 123 { 124 addNodeToList(thisNode, level, makekey, true, true); 125 127 if (showTreeLines) 129 { 130 if (!rIter.hasNext()) 131 { 132 if (blnHasDocs == false) 133 { 134 intTreeLines.remove(level); 135 intTreeLines.add(level, new Integer (0)); 136 } 137 } 138 if (((Integer ) intTreeLines.get(level)).intValue() == 3) 139 { 140 intTreeLines.remove(level); 141 intTreeLines.add(level, new Integer (1)); 142 } 143 } 144 145 FillTree(thisNode.getId(), level, expkey, makekey); 147 } 148 else 149 { 150 addNodeToList(thisNode, level, makekey, false, true); 152 } 153 154 } 155 156 if (blnHasDocs) 158 { 159 rIter = leafs.iterator(); 160 while (rIter.hasNext()) 161 { 162 BaseNode thisNode = (BaseNode) rIter.next(); 163 if (showTreeLines) 164 { 165 intTreeLines.remove(level); 166 intTreeLines.add(level, new Integer (3)); 167 if (!rIter.hasNext()) 168 { 169 intTreeLines.remove(level); 170 intTreeLines.add(level, new Integer (2)); 171 } 172 } 173 addNodeToList(thisNode, level, "", false, false); 174 } 175 } 176 177 178 intTreeLines.remove(level); 179 intTreeLines.add(level, new Integer (0)); 180 181 } 182 183 184 191 private void addNodeToList(BaseNode thisNode, int level, String makekey, boolean isOpen, boolean isContainer) 192 { 193 String newKey = makekey; 194 String thisKey = makeKey(thisNode.getId()); 195 int cnt = 0; 196 Vector tree = null; 197 if (level > -1) tree = new Vector (level); 198 Iterator i = intTreeLines.iterator(); 199 while (i.hasNext() && cnt <= level) 200 tree.add(cnt++, i.next()); 201 202 if (!isOpen) 203 newKey += thisKey; 204 205 thisNode.setTreeStuff(tree); 206 thisNode.setOpen(isOpen); 207 thisNode.setThisKey(thisKey); 208 thisNode.setOpenCloseKey(newKey); 209 thisNode.setLevel(level); 210 thisNode.setContainer(isContainer); 211 212 try 213 { 214 if (isContainer && nodeSupplier.hasChildren()) 216 { 217 thisNode.setChildren(nodeSupplier.hasChildren(thisNode.getId())); 218 } 219 } 220 catch(Exception e) 221 { 222 e.printStackTrace(); 223 } 224 225 ret.add(thisNode); 226 } 227 228 232 public boolean getShowRoot() 233 { 234 return showRoot; 235 } 236 237 241 public void setShowRoot(boolean showRoot) 242 { 243 this.showRoot = showRoot; 244 } 245 246 } 247 | Popular Tags |