KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > frovi > ss > Tree > MakeTree


1 package com.frovi.ss.Tree;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.Collection JavaDoc;
5 import java.util.Iterator JavaDoc;
6 import java.util.Vector JavaDoc;
7
8 /**
9  * PureHtmlTree.java
10  * Created on 2002-sep-27
11  * @author Stefan Sik, ss@frovi.com
12  * ss
13  *
14  */

15 public class MakeTree
16 {
17     private boolean showTreeLines = true;
18     private ArrayList JavaDoc ret = new ArrayList JavaDoc();
19     private INodeSupplier nodeSupplier;
20     private boolean showRoot = true;
21     private int startLevel = -1;
22     
23     private Vector JavaDoc intTreeLines = new Vector JavaDoc(50,10);
24
25     // Constructor, we need a nodeSupplier.
26
public MakeTree(INodeSupplier nodeSupplier)
27     {
28         setNodeSupplier(nodeSupplier);
29     }
30
31     // Creates a nodelist with the default parent node, and no expansion string
32
public Collection JavaDoc makeNodeList() {
33         return makeNodeList("");
34     }
35
36     // Creates a nodelist with the default parent node
37
public Collection JavaDoc makeNodeList(String JavaDoc 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 JavaDoc makeNodeList(Integer JavaDoc parentNode, String JavaDoc expString)
51     {
52         intTreeLines.setSize(50);
53         FillTree(parentNode, startLevel, expString, new String JavaDoc(""));
54         return ret;
55     }
56     public Collection JavaDoc makeNodeList(BaseNode parentNode, String JavaDoc expString)
57     {
58         intTreeLines.setSize(50);
59         FillTree(parentNode.getId(), startLevel, expString, new String JavaDoc(""));
60         return ret;
61     }
62
63     public void setNodeSupplier(INodeSupplier nodeSupplier)
64     {
65         this.nodeSupplier = nodeSupplier;
66     }
67
68     private String JavaDoc makeKey(Integer JavaDoc id)
69     {
70         return "/" + String.valueOf(id.intValue()).trim() + "/";
71     }
72
73     private void FillTree(Integer JavaDoc parent, int level, String JavaDoc expkey, String JavaDoc makekey)
74     {
75         Collection JavaDoc leafs = new ArrayList JavaDoc();
76         Collection JavaDoc roots = new ArrayList JavaDoc();;
77
78         // Every time this method is called, we are one step
79
// deeper in the tree.
80
level++;
81
82         // Get all the children to this node
83
try
84         {
85             roots = nodeSupplier.getChildContainerNodes(parent);
86             leafs = nodeSupplier.getChildLeafNodes(parent);
87         }
88         catch(Exception JavaDoc e)
89         {
90             e.printStackTrace();
91         }
92         
93         boolean blnHasDocs = leafs.size() > 0;
94
95         // Create expansion key to this node
96
String JavaDoc parentKey = makeKey(parent);
97         makekey += parentKey;
98
99         // loop through all container nodes.
100
Iterator JavaDoc rIter = roots.iterator();
101         while (rIter.hasNext())
102         {
103             BaseNode thisNode = (BaseNode) rIter.next();
104             String JavaDoc nodeKey = makeKey(thisNode.getId());
105
106             // TreeLines check
107
if (showTreeLines)
108             {
109                 intTreeLines.add(level, new Integer JavaDoc(3));
110                 if (!rIter.hasNext())
111                 {
112                     if (blnHasDocs == false)
113                     {
114                         intTreeLines.remove(level);
115                         intTreeLines.add(level, new Integer JavaDoc(2));
116                     }
117                 }
118             }
119
120             // Kolla om denna folder finns med i expansionsnyckeln. I så
121
// fall låter vi rekursionen göra sitt.
122
if ( expkey.indexOf(nodeKey) != -1)
123             {
124                 addNodeToList(thisNode, level, makekey, true, true);
125                 // Open folder
126

127                 // TreeLines check
128
if (showTreeLines)
129                 {
130                     if (!rIter.hasNext())
131                     {
132                         if (blnHasDocs == false)
133                         {
134                             intTreeLines.remove(level);
135                             intTreeLines.add(level, new Integer JavaDoc(0));
136                         }
137                     }
138                     if (((Integer JavaDoc) intTreeLines.get(level)).intValue() == 3)
139                     {
140                         intTreeLines.remove(level);
141                         intTreeLines.add(level, new Integer JavaDoc(1));
142                     }
143                 }
144
145                 // older is open, recursion
146
FillTree(thisNode.getId(), level, expkey, makekey);
147             }
148             else
149             {
150                 // Folder är stängd
151
addNodeToList(thisNode, level, makekey, false, true);
152             }
153
154         }
155
156         // Documents
157
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 JavaDoc(3));
167                     if (!rIter.hasNext())
168                     {
169                         intTreeLines.remove(level);
170                         intTreeLines.add(level, new Integer JavaDoc(2));
171                     }
172                 }
173                 addNodeToList(thisNode, level, "", false, false);
174             }
175         }
176
177
178         intTreeLines.remove(level);
179         intTreeLines.add(level, new Integer JavaDoc(0));
180
181     }
182
183
184     /**
185      * Method addNodeToList
186      * @param thisNode
187      * @param level
188      * @param makekey
189      * @param b
190      */

191     private void addNodeToList(BaseNode thisNode, int level, String JavaDoc makekey, boolean isOpen, boolean isContainer)
192     {
193             String JavaDoc newKey = makekey;
194             String JavaDoc thisKey = makeKey(thisNode.getId());
195             int cnt = 0;
196             Vector JavaDoc tree = null;
197             if (level > -1) tree = new Vector JavaDoc(level);
198             Iterator JavaDoc 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                 // has children check (may belong here??)
215
if (isContainer && nodeSupplier.hasChildren())
216                 {
217                     thisNode.setChildren(nodeSupplier.hasChildren(thisNode.getId()));
218                 }
219             }
220             catch(Exception JavaDoc e)
221             {
222                 e.printStackTrace();
223             }
224                 
225             ret.add(thisNode);
226     }
227
228     /**
229      * Returns the showRoot.
230      * @return boolean
231      */

232     public boolean getShowRoot()
233     {
234         return showRoot;
235     }
236
237     /**
238      * Sets the showRoot.
239      * @param showRoot The showRoot to set
240      */

241     public void setShowRoot(boolean showRoot)
242     {
243         this.showRoot = showRoot;
244     }
245
246 }
247
Popular Tags