1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts2.components;
22
23 import java.io.Writer;
24
25 import javax.servlet.http.HttpServletRequest;
26 import javax.servlet.http.HttpServletResponse;
27
28 import org.apache.struts2.views.annotations.StrutsTag;
29 import org.apache.struts2.views.annotations.StrutsTagAttribute;
30
31 import com.opensymphony.xwork2.util.ValueStack;
32
33 /***
34 * <!-- START SNIPPET: javadoc -->
35 *
36 * Renders a tree widget with AJAX support.<p/>
37 *
38 * The id attribute is normally specified, such that it could be looked up using
39 * javascript if necessary.<p/>
40 *
41 * <!-- END SNIPPET: javadoc -->
42 *
43 * <p/> <b>Examples</b>
44 *
45 * <pre>
46 * <!-- START SNIPPET: example -->
47 *
48 * <-- statically -->
49 * <s:tree id="..." label="...">
50 * <s:treenode id="..." label="..." />
51 * <s:treenode id="..." label="...">
52 * <s:treenode id="..." label="..." />
53 * <s:treenode id="..." label="..." />
54 * &;lt;/s:treenode>
55 * <s:treenode id="..." label="..." />
56 * </s:tree>
57 *
58 * <-- dynamically -->
59 * <s:tree
60 * id="..."
61 * rootNode="..."
62 * nodeIdProperty="..."
63 * nodeTitleProperty="..."
64 * childCollectionProperty="..." />
65 *
66 * <!-- END SNIPPET: example -->
67 * </pre>
68 *
69 */
70 @StrutsTag(name="tree", tldTagClass="org.apache.struts2.views.jsp.ui.TreeTag", description="Render a tree widget.")
71 public class Tree extends ClosingUIBean {
72
73 private static final String TEMPLATE = "tree-close";
74 private static final String OPEN_TEMPLATE = "tree";
75
76 private String toggle = "fade";
77 private String treeSelectedTopic;
78 private String treeExpandedTopic;
79 private String treeCollapsedTopic;
80 protected String rootNodeAttr;
81 protected String childCollectionProperty;
82 protected String nodeTitleProperty;
83 protected String nodeIdProperty;
84 private String showRootGrid;
85
86 private String showGrid;
87 private String blankIconSrc;
88 private String gridIconSrcL;
89 private String gridIconSrcV;
90 private String gridIconSrcP;
91 private String gridIconSrcC;
92 private String gridIconSrcX;
93 private String gridIconSrcY;
94 private String expandIconSrcPlus;
95 private String expandIconSrcMinus;
96 private String iconWidth;
97 private String iconHeight;
98 private String toggleDuration;
99 private String templateCssPath;
100
101 public Tree(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
102 super(stack, request, response);
103 }
104
105 public boolean start(Writer writer) {
106 boolean result = super.start(writer);
107
108 if (this.label == null) {
109 if ((rootNodeAttr == null)
110 || (childCollectionProperty == null)
111 || (nodeTitleProperty == null)
112 || (nodeIdProperty == null)) {
113 fieldError("label","The TreeTag requires either a value for 'label' or ALL of 'rootNode', " +
114 "'childCollectionProperty', 'nodeTitleProperty', and 'nodeIdProperty'", null);
115 }
116 }
117 return result;
118 }
119
120 protected void evaluateExtraParams() {
121 super.evaluateExtraParams();
122
123 if (toggle != null) {
124 addParameter("toggle", findString(toggle));
125 }
126
127 if (treeSelectedTopic != null) {
128 addParameter("treeSelectedTopic", findString(treeSelectedTopic));
129 }
130
131 if (treeExpandedTopic != null) {
132 addParameter("treeExpandedTopic", findString(treeExpandedTopic));
133 }
134
135 if (treeCollapsedTopic != null) {
136 addParameter("treeCollapsedTopic", findString(treeCollapsedTopic));
137 }
138
139 if (rootNodeAttr != null) {
140 addParameter("rootNode", findValue(rootNodeAttr));
141 }
142
143 if (childCollectionProperty != null) {
144 addParameter("childCollectionProperty", findString(childCollectionProperty));
145 }
146
147 if (nodeTitleProperty != null) {
148 addParameter("nodeTitleProperty", findString(nodeTitleProperty));
149 }
150
151 if (nodeIdProperty != null) {
152 addParameter("nodeIdProperty", findString(nodeIdProperty));
153 }
154
155 if (showRootGrid != null) {
156 addParameter("showRootGrid", findValue(showRootGrid, Boolean.class));
157 }
158
159
160 if (showGrid != null) {
161 addParameter("showGrid", findValue(showGrid, Boolean.class));
162 }
163
164 if (blankIconSrc != null) {
165 addParameter("blankIconSrc", findString(blankIconSrc));
166 }
167
168 if (gridIconSrcL != null) {
169 addParameter("gridIconSrcL", findString(gridIconSrcL));
170 }
171
172 if (gridIconSrcV != null) {
173 addParameter("gridIconSrcV", findString(gridIconSrcV));
174 }
175
176 if (gridIconSrcP != null) {
177 addParameter("gridIconSrcP", findString(gridIconSrcP));
178 }
179
180 if (gridIconSrcC != null) {
181 addParameter("gridIconSrcC", findString(gridIconSrcC));
182 }
183
184 if (gridIconSrcX != null) {
185 addParameter("gridIconSrcX", findString(gridIconSrcX));
186 }
187
188 if (gridIconSrcY != null) {
189 addParameter("gridIconSrcY", findString(gridIconSrcY));
190 }
191
192 if (expandIconSrcPlus != null) {
193 addParameter("expandIconSrcPlus", findString(expandIconSrcPlus));
194 }
195
196 if (expandIconSrcMinus != null) {
197 addParameter("expandIconSrcMinus", findString(expandIconSrcMinus));
198 }
199
200 if (iconWidth != null) {
201 addParameter("iconWidth", findValue(iconWidth, Integer.class));
202 }
203 if (iconHeight != null) {
204 addParameter("iconHeight", findValue(iconHeight, Integer.class));
205 }
206 if (toggleDuration != null) {
207 addParameter("toggleDuration", findValue(toggleDuration, Integer.class));
208 }
209 if (templateCssPath != null) {
210 addParameter("templateCssPath", findString(templateCssPath));
211 }
212 }
213
214 public String getDefaultOpenTemplate() {
215 return OPEN_TEMPLATE;
216 }
217
218 protected String getDefaultTemplate() {
219 return TEMPLATE;
220 }
221
222 public String getToggle() {
223 return toggle;
224 }
225
226 @StrutsTagAttribute(description="The toggle property (either 'explode' or 'fade')", defaultValue="fade")
227 public void setToggle(String toggle) {
228 this.toggle = toggle;
229 }
230
231 public String getTreeSelectedTopic() {
232 return treeSelectedTopic;
233 }
234
235 @StrutsTagAttribute(description="The treeSelectedTopic property")
236 public void setTreeSelectedTopic(String treeSelectedTopic) {
237 this.treeSelectedTopic = treeSelectedTopic;
238 }
239
240 public String getTreeExpandedTopic() {
241 return treeExpandedTopic;
242 }
243
244 @StrutsTagAttribute(description="The treeExpandedTopic property.")
245 public void setTreeExpandedTopic(String treeExpandedTopic) {
246 this.treeExpandedTopic = treeExpandedTopic;
247 }
248
249 public String getTreeCollapsedTopic() {
250 return treeCollapsedTopic;
251 }
252
253 @StrutsTagAttribute(description="The treeCollapsedTopic property.")
254 public void setTreeCollapsedTopic(String treeCollapsedTopic) {
255 this.treeCollapsedTopic = treeCollapsedTopic;
256 }
257
258 public String getRootNode() {
259 return rootNodeAttr;
260 }
261
262 @StrutsTagAttribute(description="The rootNode property.")
263 public void setRootNode(String rootNode) {
264 this.rootNodeAttr = rootNode;
265 }
266
267 public String getChildCollectionProperty() {
268 return childCollectionProperty;
269 }
270
271 @StrutsTagAttribute(description="The childCollectionProperty property.")
272 public void setChildCollectionProperty(String childCollectionProperty) {
273 this.childCollectionProperty = childCollectionProperty;
274 }
275
276 public String getNodeTitleProperty() {
277 return nodeTitleProperty;
278 }
279
280 @StrutsTagAttribute(description="The nodeTitleProperty property.")
281 public void setNodeTitleProperty(String nodeTitleProperty) {
282 this.nodeTitleProperty = nodeTitleProperty;
283 }
284
285 public String getNodeIdProperty() {
286 return nodeIdProperty;
287 }
288
289 @StrutsTagAttribute(description="The nodeIdProperty property.")
290 public void setNodeIdProperty(String nodeIdProperty) {
291 this.nodeIdProperty = nodeIdProperty;
292 }
293
294 @StrutsTagAttribute(description="The showRootGrid property (default true).")
295 public void setShowRootGrid(String showRootGrid) {
296 this.showRootGrid = showRootGrid;
297 }
298
299 public String getShowRootGrid() {
300 return showRootGrid;
301 }
302
303 public String getBlankIconSrc() {
304 return blankIconSrc;
305 }
306
307 @StrutsTagAttribute(description="Blank icon image source.")
308 public void setBlankIconSrc(String blankIconSrc) {
309 this.blankIconSrc = blankIconSrc;
310 }
311
312 public String getExpandIconSrcMinus() {
313 return expandIconSrcMinus;
314 }
315
316 @StrutsTagAttribute(description="Expand icon (-) image source.")
317 public void setExpandIconSrcMinus(String expandIconSrcMinus) {
318 this.expandIconSrcMinus = expandIconSrcMinus;
319 }
320
321 public String getExpandIconSrcPlus() {
322 return expandIconSrcPlus;
323 }
324
325 @StrutsTagAttribute(description="Expand Icon (+) image source.")
326 public void setExpandIconSrcPlus(String expandIconSrcPlus) {
327 this.expandIconSrcPlus = expandIconSrcPlus;
328 }
329
330 public String getGridIconSrcC() {
331 return gridIconSrcC;
332 }
333
334 @StrutsTagAttribute(description="Image source for under child item child icons.")
335 public void setGridIconSrcC(String gridIconSrcC) {
336 this.gridIconSrcC = gridIconSrcC;
337 }
338
339 public String getGridIconSrcL() {
340 return gridIconSrcL;
341 }
342
343
344 @StrutsTagAttribute(description=" Image source for last child grid.")
345 public void setGridIconSrcL(String gridIconSrcL) {
346 this.gridIconSrcL = gridIconSrcL;
347 }
348
349 public String getGridIconSrcP() {
350 return gridIconSrcP;
351 }
352
353 @StrutsTagAttribute(description="Image source for under parent item child icons.")
354 public void setGridIconSrcP(String gridIconSrcP) {
355 this.gridIconSrcP = gridIconSrcP;
356 }
357
358 public String getGridIconSrcV() {
359 return gridIconSrcV;
360 }
361
362 @StrutsTagAttribute(description="Image source for vertical line.")
363 public void setGridIconSrcV(String gridIconSrcV) {
364 this.gridIconSrcV = gridIconSrcV;
365 }
366
367 public String getGridIconSrcX() {
368 return gridIconSrcX;
369 }
370
371 @StrutsTagAttribute(description="Image source for grid for sole root item.")
372 public void setGridIconSrcX(String gridIconSrcX) {
373 this.gridIconSrcX = gridIconSrcX;
374 }
375
376 public String getGridIconSrcY() {
377 return gridIconSrcY;
378 }
379
380 @StrutsTagAttribute(description="Image source for grid for last root item.")
381 public void setGridIconSrcY(String gridIconSrcY) {
382 this.gridIconSrcY = gridIconSrcY;
383 }
384
385 public String getIconHeight() {
386 return iconHeight;
387 }
388
389
390 @StrutsTagAttribute(description="Icon height", defaultValue="18px")
391 public void setIconHeight(String iconHeight) {
392 this.iconHeight = iconHeight;
393 }
394
395 public String getIconWidth() {
396 return iconWidth;
397 }
398
399 @StrutsTagAttribute(description="Icon width", defaultValue="19px")
400 public void setIconWidth(String iconWidth) {
401 this.iconWidth = iconWidth;
402 }
403
404
405
406 public String getTemplateCssPath() {
407 return templateCssPath;
408 }
409
410 @StrutsTagAttribute(description="Template css path", defaultValue="{contextPath}/struts/tree.css.")
411 public void setTemplateCssPath(String templateCssPath) {
412 this.templateCssPath = templateCssPath;
413 }
414
415 public String getToggleDuration() {
416 return toggleDuration;
417 }
418
419 @StrutsTagAttribute(description="Toggle duration in milliseconds", defaultValue="150")
420 public void setToggleDuration(String toggleDuration) {
421 this.toggleDuration = toggleDuration;
422 }
423
424 public String getShowGrid() {
425 return showGrid;
426 }
427
428 @StrutsTagAttribute(description="Show grid", type="Boolean", defaultValue="true")
429 public void setShowGrid(String showGrid) {
430 this.showGrid = showGrid;
431 }
432 }
433