Source code: com/arranger/jarl/shell/views/JarlObjectViewTree.java
1 package com.arranger.jarl.shell.views;
2
3 import com.arranger.jarl.Jarl;
4 import com.arranger.jarl.widget.IWidget;
5 import com.arranger.jarl.base.IJarlObject;
6 import com.arranger.jarl.base.IJarlObjectCollection;
7 import com.arranger.jarl.base.IJarlObjectInfo;
8 import com.arranger.jarl.util.JarlInfoUtil;
9 import com.arranger.jarl.util.StringTools;
10 import com.arranger.jarl.util.IWidgetConfigSegmentFactory;
11 import com.arranger.jarl.util.WidgetConfigSegment;
12
13 import javax.swing.tree.TreeNode;
14 import java.util.*;
15
16 import org.w3c.dom.Element;
17
18 /**
19 * JarlObjectViewTree created on Apr 17, 2003
20 */
21 public class JarlObjectViewTree {
22
23 public static final String STROKE_DEFS = "Stroke Defintions";
24 public static final String TRAIT_DEFS = "Trait Defintions";
25 public static final String WIDGET_DEFS = "Widget Defintions";
26 public static final String FILTER_DEFS = "Filter Defintions";
27 public static final String WIDGET_INSTANCES = "Widget Instances";
28 public static final String FILTER_INSTANCES = "Filter Instances";
29
30 public static TreeNode createTree(Jarl jarl) {
31 JarlStumpTreeNode jarlStumpTreeNode = new JarlStumpTreeNode(null);
32 //definitions
33 jarlStumpTreeNode.add(new JarlRootTreeNode(jarlStumpTreeNode, STROKE_DEFS, jarl.getStrokeDefs()));
34 jarlStumpTreeNode.add(new JarlRootTreeNode(jarlStumpTreeNode, TRAIT_DEFS, jarl.getTraitDefs()));
35 jarlStumpTreeNode.add(new JarlRootTreeNode(jarlStumpTreeNode, WIDGET_DEFS, jarl.getWidgetDefs()));
36 jarlStumpTreeNode.add(new JarlRootTreeNode(jarlStumpTreeNode, FILTER_DEFS, jarl.getFilterDefs()));
37 //instances
38 jarlStumpTreeNode.add(new JarlRootTreeNode(jarlStumpTreeNode, WIDGET_INSTANCES, jarl.getRenderManager().getRegisteredWidgets()));
39 jarlStumpTreeNode.add(new JarlRootTreeNode(jarlStumpTreeNode, FILTER_INSTANCES, jarl.getRenderManager().getRegisteredFilters()));
40 return jarlStumpTreeNode;
41 }
42
43 public static abstract class JarlTreeNode implements TreeNode {
44 protected Vector m_childVector = new Vector();
45 protected TreeNode m_parent;
46
47 public JarlTreeNode(TreeNode parent) {
48 m_parent = parent;
49 }
50
51 public int getIndex(TreeNode node) {
52 if (node instanceof JarlTreeNode) {
53 return ((JarlTreeNode) node).m_childVector.indexOf(this);
54 } else {
55 return -1;
56 }
57 }
58
59 /**
60 * Returns the parent <code>TreeNode</code> of the receiver.
61 */
62 public TreeNode getParent() {
63 return m_parent;
64 }
65
66 /**
67 * Returns the child <code>TreeNode</code> at index
68 * <code>childIndex</code>.
69 */
70 public TreeNode getChildAt(int childIndex) {
71 return (TreeNode) m_childVector.get(childIndex);
72 }
73
74 /**
75 * Returns true if the receiver allows children.
76 */
77 public boolean getAllowsChildren() {
78 return true;
79 }
80
81 /**
82 * Returns true if the receiver is a leaf.
83 */
84 public boolean isLeaf() {
85 return false;
86 }
87
88 /**
89 * Returns the number of children <code>TreeNode</code>s the receiver
90 * contains.
91 */
92 public int getChildCount() {
93 return m_childVector.size();
94 }
95
96 /**
97 * Returns the children of the receiver as an <code>Enumeration</code>.
98 */
99 public Enumeration children() {
100 return m_childVector.elements();
101 }
102 }
103
104 public static class JarlStumpTreeNode extends JarlTreeNode {
105
106 public JarlStumpTreeNode(TreeNode parent) {
107 super(parent);
108 }
109
110 public void add(TreeNode treeNode) {
111 m_childVector.add(treeNode);
112 }
113
114 public String toString() {
115 return "Jarl Objects";
116 }
117 }
118
119 public static class JarlRootTreeNode extends JarlTreeNode {
120
121 protected String m_title;
122
123 /**
124 * This constructor is for a map of 'definitions' like widgetDef or traitDef
125 * @param parent
126 * @param title
127 * @param jarlObjectMap
128 */
129 public JarlRootTreeNode(TreeNode parent, String title, Map jarlObjectMap) {
130 super(parent);
131 m_title = title;
132 for (Iterator it = jarlObjectMap.keySet().iterator(); it.hasNext();) {
133 String jarlObjectName = (String) it.next();
134 JarlObjectInfoTreeNode jarlTreeNode = new JarlObjectInfoTreeNode(this,
135 (IJarlObject) jarlObjectMap.get(jarlObjectName), jarlObjectName);
136 m_childVector.add(jarlTreeNode);
137 }
138 }
139
140 /**
141 * This constructor is for a list of instances: widget or filter
142 * @param parent
143 * @param title
144 * @param jarlObjectList
145 */
146 public JarlRootTreeNode(TreeNode parent, String title, List jarlObjectList) {
147 super(parent);
148 m_title = title;
149 for (Iterator it = jarlObjectList.iterator(); it.hasNext();) {
150 IJarlObject jarlObject = (IJarlObject) it.next();
151
152 //get the widget Defs or filterDef if available
153 String objName = JarlInfoUtil.getName(jarlObject);
154 m_childVector.add(new JarlObjectInfoTreeNode(this, jarlObject, objName));
155 }
156 }
157
158 public String toString() {
159 return m_title;
160 }
161 }
162
163 public static class JarlObjectInfoTreeNode extends JarlTreeNode {
164
165 protected String m_jarlObjectName;
166 protected IJarlObject m_jarlObject;
167 protected IJarlObjectInfo m_jarlObjectInfo;
168 protected boolean m_expandedChildren = false;
169
170 /**
171 * This will contain more children
172 */
173 public JarlObjectInfoTreeNode(TreeNode parent, IJarlObject jarlObject, String jarlObjectName) {
174 super(parent);
175 m_jarlObject = jarlObject;
176 m_jarlObjectName = jarlObjectName;
177 m_jarlObjectInfo = JarlInfoUtil.getJarlObjectInfo(m_jarlObject);
178 if (m_jarlObjectInfo == null) {
179 m_jarlObjectInfo = m_jarlObject.getJarlObjectInfo();
180 JarlInfoUtil.setJarlObjectInfo(m_jarlObject, m_jarlObjectInfo);
181 }
182
183 if (m_jarlObject instanceof IJarlObjectCollection) {
184 Collection collection = ((IJarlObjectCollection) m_jarlObject).getChildren();
185 addCollection(collection);
186 }
187
188 if (m_jarlObject instanceof IWidget) {
189 IWidget widget = (IWidget) m_jarlObject;
190 addCollection(widget.getTraits());
191 addCollection(widget.getStrokes());
192 addCollection(widget.getFilters());
193 }
194
195 if (m_jarlObject instanceof IWidgetConfigSegmentFactory) {
196 addCollection(((IWidgetConfigSegmentFactory) m_jarlObject).getConfigSegments());
197 }
198
199 for (Iterator it = m_jarlObjectInfo.getChildren().iterator(); it.hasNext();) {
200 m_childVector.add(new JarlObjectInfoTreeNode(this, m_jarlObject, (IJarlObjectInfo) it.next()));
201 }
202 }
203
204 /**
205 * This is for leafs (leaves)
206 */
207 public JarlObjectInfoTreeNode(TreeNode parent, IJarlObject jarlObject, IJarlObjectInfo jarlObjectInfo) {
208 super(parent);
209 m_jarlObject = jarlObject;
210 m_jarlObjectInfo = jarlObjectInfo;
211 }
212
213 public IJarlObject getJarlObject() {
214 return m_jarlObject;
215 }
216
217 /**
218 * Returns true if the receiver allows children.
219 */
220 public boolean getAllowsChildren() {
221 return !m_childVector.isEmpty();
222 }
223
224 /**
225 * Returns true if the receiver is a leaf.
226 */
227 public boolean isLeaf() {
228 return m_childVector.isEmpty();
229 }
230
231 public String toString() {
232 if (m_jarlObjectName != null) {
233 return m_jarlObjectName;
234 }
235
236 StringBuffer buffer = new StringBuffer();
237 buffer.append(m_jarlObjectInfo.getDisplayName());
238 buffer.append(" : ");
239 try {
240 buffer.append(m_jarlObjectInfo.getDisplay().getDisplayValue(m_jarlObjectInfo.getField().get(m_jarlObject)));
241 } catch (Exception e) {
242 e.printStackTrace();
243 }
244 return buffer.toString();
245 }
246
247 protected void addCollection(Collection collection) {
248 if (collection == null) {
249 return;
250 }
251 for (Iterator it = collection.iterator(); it.hasNext();) {
252 Object obj = it.next();
253 if (obj instanceof IJarlObject) {
254 IJarlObject childJarlObject = (IJarlObject) obj;
255 String name = JarlInfoUtil.getName(childJarlObject);
256 m_childVector.add(new JarlObjectInfoTreeNode(this, childJarlObject, name));
257 } else if (obj instanceof WidgetConfigSegment) {
258 m_childVector.add(new WidgetConfigSegmentTreeNode(this, (WidgetConfigSegment) obj));
259 }
260 }
261 }
262 }
263
264 public static class WidgetConfigSegmentTreeNode extends JarlTreeNode {
265 protected WidgetConfigSegment m_widgetConfigSegment;
266 protected IJarlObjectInfo m_jarlObjectInfo;
267 protected String m_name;
268
269 public WidgetConfigSegmentTreeNode(TreeNode parent, WidgetConfigSegment widgetConfigSegment) {
270 super(parent);
271 m_widgetConfigSegment = widgetConfigSegment;
272 m_jarlObjectInfo = widgetConfigSegment.getJarlObjectInfo();
273 m_name = "Config Segment: " +
274 JarlInfoUtil.PCT_DISPLAY.getDisplayValue(new Double(m_widgetConfigSegment.getStartTimePct())) + " -> " +
275 JarlInfoUtil.PCT_DISPLAY.getDisplayValue(new Double(m_widgetConfigSegment.getEndTimePct()));
276
277 for (Iterator it = m_jarlObjectInfo.getChildren().iterator(); it.hasNext();) {
278 m_childVector.add(new WidgetConfigSegmentTreeNode(this, m_widgetConfigSegment, (IJarlObjectInfo) it.next()));
279 }
280 }
281
282 /**
283 * For leaves (leafs)
284 */
285 public WidgetConfigSegmentTreeNode(TreeNode parent, WidgetConfigSegment widgetConfigSegment, IJarlObjectInfo jarlObjectInfo) {
286 super(parent);
287 m_widgetConfigSegment = widgetConfigSegment;
288 m_jarlObjectInfo = jarlObjectInfo;
289 }
290
291 /**
292 * Returns true if the receiver allows children.
293 */
294 public boolean getAllowsChildren() {
295 return !m_childVector.isEmpty();
296 }
297
298 /**
299 * Returns true if the receiver is a leaf.
300 */
301 public boolean isLeaf() {
302 return m_childVector.isEmpty();
303 }
304
305 public String toString() {
306 if (m_name != null) {
307 return m_name;
308 }
309
310 StringBuffer buffer = new StringBuffer();
311 buffer.append(m_jarlObjectInfo.getDisplayName());
312 buffer.append(" : ");
313 try {
314 buffer.append(m_jarlObjectInfo.getDisplay().getDisplayValue(m_jarlObjectInfo.getField().get(m_widgetConfigSegment)));
315 } catch (Exception e) {
316 e.printStackTrace();
317 }
318 return buffer.toString();
319 }
320 }
321 }