Example: populate() function
The following is an example of a populate() method. Note the technique for preloading children in the looper() method, which loads all of the children in a specified search path (for example, Item 1.1/Item 1.1.5/Item 1.1.5.3).
public void populate() throws Exception { // if searching for a specific node from URL param gotoNode, method looper() will take // care of it for us. Otherwise, just populate the tree with the node clicked on. if (!gotoNode.equals("")) { StringTokenizer st = new StringTokenizer(gotoNode, "/"); if (st.hasMoreTokens()) { for (Enumeration e = looper(st, "Item 1").elements(); e.hasMoreElements();) { nodeInfo.addElement(e.nextElement()); } } } else { // create 5 nodes in this sample for (int i = 1; i <= 5; i++) { // construct the children URL parameters, // the following is just an example (every other node has children) String param = ""; if (i % 2 == 1) param = "uid=" + uid + "." + String.valueOf(i) + "¶2=somevalue"; // set sample value of all node to 13 String testValue = new String("13"); // create a new node. "Catalog" is the menu type. DynamicTreeNode node = new DynamicTreeNode(uid + "." + String.valueOf(i), testValue, param, "", "Catalog"); // make every other node different if (i % 2 == 0 ) { node.setIconType(new String[] {"Arrow"}); node.setMenuType("Speed"); } // nodeInfo is a class field of type Vector nodeInfo.addElement(node); } } // create some menu groups String[][] groupMenu = {{"Test","http://www.ibm.com"}, {"",""}, {"Erase","http://www.ibm.com"}, {"Shutdown","http://www.ibm.com"}}; DynamicTreeMenuType mnu = new DynamicTreeMenuType(groupMenu, "Catalog"); menuInfo.addElement(mnu); String[][] groupMenu2 = {{"Fast","http://www.ibm.com"}, {"Slow","http://www.ibm.com"}, {"Stop","http://www.ibm.com"}}; DynamicTreeMenuType mnu2 = new DynamicTreeMenuType(groupMenu2, "Speed"); // menuInfo is a class field of type Vector menuInfo.addElement(mnu2); // create some icon types DynamicTreeIconType iconType = new DynamicTreeIconType("Calendar", "calendar/calendar.gif"); // iconInfo is a class field of type Vector iconInfo.addElement(iconType); DynamicTreeIconType iconType2 = new DynamicTreeIconType("Arrow", "list/arrow.gif"); iconInfo.addElement(iconType2); } // looper method used when trying to locate a specific node // this method rerecursively calls itself until the search path is exhausted public java.util.Vector looper(StringTokenizer st, String sName) { // create a default menu String[][] menu = {{"Open","http://www.ibm.com"}, {"",""}, {"Copy","http://www.ibm.com"}, {"Delete","http://www.ibm.com"}, {"Modify","http://www.ibm.com"}}; Vector newVec = new Vector(); // get the first part of the search path String match = (String)st.nextElement(); // create 5 nodes on each level for (int i = 1; i <= 5; i++) { String param = ""; String testValue = new String("13"); String cMenuParam = new String("myValue=Test&otherValue=3"); String objType = new String("Speed"); String name = sName + "." + String.valueOf(i); DynamicTreeNode node; // every other node will be a leaf by setting the childrenURLParam="" (param) if (i % 2 == 1) { param = "uid=" + name + "¶2=somevalue"; node = new DynamicTreeNode(name, testValue, param, menu); } else { node = new DynamicTreeNode(name, testValue, param, cMenuParam, objType); node.setIconType(new String[] {"Calendar", "Arrow"}); } // if the newly created node/leaf matches the search string and there are still // more parts of the search path, call looper() again setting this nodes children // to contain the next level of the search path if (match.equals(name) && i % 2 == 1) { if (st.hasMoreElements()) { node.setChildren(looper(st, name)); } } // finally add the DynamicTreeNode to the newVec newVec.addElement(node); } return newVec; }Related concepts
Related tasks