KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > ofbiz > widget > html > HtmlTreeRenderer


1 /*
2  * $Id: HtmlTreeRenderer.java 6519 2006-01-17 08:17:22Z jonesde $
3  *
4  * Copyright (c) 2004 The Open For Business Project - www.ofbiz.org
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included
14  * in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
21  * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
22  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */

24 package org.ofbiz.widget.html;
25
26 import java.io.IOException JavaDoc;
27 import java.io.Writer JavaDoc;
28 import java.util.List JavaDoc;
29 import java.util.Map JavaDoc;
30
31 import javax.servlet.ServletContext JavaDoc;
32 import javax.servlet.http.HttpServletRequest JavaDoc;
33 import javax.servlet.http.HttpServletResponse JavaDoc;
34
35 import org.ofbiz.base.util.StringUtil;
36 import org.ofbiz.base.util.UtilFormatOut;
37 import org.ofbiz.base.util.UtilValidate;
38 import org.ofbiz.webapp.control.RequestHandler;
39 import org.ofbiz.webapp.taglib.ContentUrlTag;
40 import org.ofbiz.widget.screen.ScreenRenderer;
41 import org.ofbiz.widget.screen.ScreenStringRenderer;
42 import org.ofbiz.widget.tree.ModelTree;
43 import org.ofbiz.widget.tree.TreeStringRenderer;
44
45
46 /**
47  * Widget Library - HTML Form Renderer implementation
48  *
49  * @author <a HREF="mailto:byersa@automationgroups.com">Al Byers</a>
50  * @version $Rev: 6519 $
51  * @since 3.1
52  */

53 public class HtmlTreeRenderer implements TreeStringRenderer {
54
55     ScreenStringRenderer screenStringRenderer = null;
56     public static final String JavaDoc module = HtmlTreeRenderer.class.getName();
57
58     public HtmlTreeRenderer() {}
59     
60     public static String JavaDoc buildPathString(ModelTree modelTree, int depth) {
61         StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
62         for (int i=1; i <= depth; i++) {
63             int idx = modelTree.getNodeIndexAtDepth(i);
64             buf.append(".");
65             buf.append(Integer.toString(idx + 1));
66         }
67         return buf.toString();
68     }
69
70     public void renderNodeBegin(Writer JavaDoc writer, Map JavaDoc context, ModelTree.ModelNode node, int depth, boolean isLast) throws IOException JavaDoc {
71
72         String JavaDoc pathString = buildPathString(node.getModelTree(), depth);
73         String JavaDoc currentNodeTrailPiped = null;
74         List JavaDoc currentNodeTrail = node.getModelTree().getCurrentNodeTrail();
75         String JavaDoc staticNodeTrailPiped = StringUtil.join(currentNodeTrail, "|");
76         context.put("staticNodeTrailPiped", staticNodeTrailPiped);
77         context.put("nodePathString", pathString);
78         context.put("depth", Integer.toString(depth));
79         String JavaDoc style = node.getWrapStyle(context);
80         if (UtilValidate.isNotEmpty(style)) {
81             writer.write("<div");
82             writer.write(" class=\"");
83             writer.write(style);
84             writer.write("\"");
85             writer.write(">");
86         }
87
88         String JavaDoc pkName = node.getPkName();
89         String JavaDoc entityId = null;
90         String JavaDoc entryName = node.getEntryName();
91         if (UtilValidate.isNotEmpty(entryName)) {
92             Map JavaDoc map = (Map JavaDoc)context.get(entryName);
93             entityId = (String JavaDoc)map.get(pkName);
94         } else {
95             entityId = (String JavaDoc) context.get(pkName);
96         }
97         boolean hasChildren = node.hasChildren(context);
98             //Debug.logInfo("HtmlTreeExpandCollapseRenderer, hasChildren(1):" + hasChildren, module);
99

100         // check to see if this node needs to be expanded.
101
if (hasChildren && node.isExpandCollapse()) {
102             String JavaDoc targetEntityId = null;
103             List JavaDoc targetNodeTrail = node.getModelTree().getTrailList();
104             if (depth < targetNodeTrail.size()) {
105                 targetEntityId = (String JavaDoc)targetNodeTrail.get(depth);
106             }
107             //Debug.logInfo("HtmlTreeExpandCollapseRenderer, targetEntityId(1):" + targetEntityId, module);
108
//Debug.logInfo("HtmlTreeExpandCollapseRenderer, depth(1):" + depth, module);
109

110             ModelTree.ModelNode.Image expandCollapseImage = new ModelTree.ModelNode.Image();
111             expandCollapseImage.setBorder("0");
112             ModelTree.ModelNode.Link expandCollapseLink = new ModelTree.ModelNode.Link();
113             String JavaDoc expandCollapseStyle = UtilFormatOut.checkEmpty(node.getExpandCollapseStyle(), "expandcollapse");
114             expandCollapseLink.setStyle(expandCollapseStyle);
115             expandCollapseLink.setImage(expandCollapseImage);
116             //String currentNodeTrailCsv = (String)context.get("currentNodeTrailCsv");
117

118             int openDepth = node.getModelTree().getOpenDepth();
119             if (depth >= openDepth && (targetEntityId == null || !targetEntityId.equals(entityId))) {
120                 // Not on the trail
121
if( node.showPeers(depth)) {
122                     context.put("processChildren", new Boolean JavaDoc(false));
123                     //expandCollapseLink.setText("&nbsp;+&nbsp;");
124
currentNodeTrailPiped = StringUtil.join(currentNodeTrail, "|");
125                     context.put("currentNodeTrailPiped", currentNodeTrailPiped);
126                     //context.put("currentNodeTrailCsv", currentNodeTrailCsv);
127
expandCollapseImage.setSrc("/images/expand.gif");
128                     String JavaDoc target = node.getModelTree().getExpandCollapseRequest(context);
129                     String JavaDoc trailName = node.getModelTree().getTrailName(context);
130                     if (target.indexOf("?") < 0) target += "?";
131                     else target += "&";
132                     target += trailName + "=" + currentNodeTrailPiped;
133                     target += "#" + staticNodeTrailPiped;
134                     //expandCollapseLink.setTarget("/ViewOutline?docRootContentId=${docRootContentId}&targetNodeTrailCsv=${currentNodeTrailCsv}");
135
expandCollapseLink.setTarget(target);
136                 }
137             } else {
138                 context.put("processChildren", new Boolean JavaDoc(true));
139                 //expandCollapseLink.setText("&nbsp;-&nbsp;");
140
String JavaDoc lastContentId = (String JavaDoc)currentNodeTrail.remove(currentNodeTrail.size() - 1);
141                 currentNodeTrailPiped = StringUtil.join(currentNodeTrail, "|");
142                 if (currentNodeTrailPiped == null)
143                     currentNodeTrailPiped = "";
144                 context.put("currentNodeTrailPiped", currentNodeTrailPiped);
145                 //context.put("currentNodeTrailCsv", currentNodeTrailCsv);
146
expandCollapseImage.setSrc("/images/collapse.gif");
147                 String JavaDoc target = node.getModelTree().getExpandCollapseRequest(context);
148                 String JavaDoc trailName = node.getModelTree().getTrailName(context);
149                 if (target.indexOf("?") < 0) target += "?";
150                 else target += "&";
151                 target += trailName + "=" + currentNodeTrailPiped;
152                 target += "#" + staticNodeTrailPiped;
153                 expandCollapseLink.setTarget(target);
154                 // add it so it can be remove in renderNodeEnd
155
currentNodeTrail.add(lastContentId);
156                 currentNodeTrailPiped = StringUtil.join(currentNodeTrail, "|");
157                 if (currentNodeTrailPiped == null)
158                     currentNodeTrailPiped = "";
159                 context.put("currentNodeTrailPiped", currentNodeTrailPiped);
160             }
161             renderLink( writer, context, expandCollapseLink);
162         } else if (!hasChildren){
163                 writer.write(" ");
164                 context.put("processChildren", new Boolean JavaDoc(false));
165                 //currentNodeTrail.add(contentId);
166
}
167         return;
168     }
169
170     public void renderNodeEnd(Writer JavaDoc writer, Map JavaDoc context, ModelTree.ModelNode node) throws IOException JavaDoc {
171         String JavaDoc style = node.getWrapStyle(context);
172         if (UtilValidate.isNotEmpty(style)) {
173         writer.write("</div>");
174         }
175         return;
176     }
177
178     public void renderLabel(Writer JavaDoc writer, Map JavaDoc context, ModelTree.ModelNode.Label label) throws IOException JavaDoc {
179         // open tag
180
writer.write("<span");
181         String JavaDoc id = label.getId(context);
182         if (UtilValidate.isNotEmpty(id)) {
183             writer.write(" id=\"");
184             writer.write(id);
185             writer.write("\"");
186         }
187         String JavaDoc style = label.getStyle(context);
188         if (UtilValidate.isNotEmpty(style)) {
189             writer.write(" class=\"");
190             writer.write(style);
191             writer.write("\"");
192         }
193         writer.write(">");
194         
195         // the text
196
writer.write(label.getText(context));
197         
198         // close tag
199
writer.write("</span>");
200         
201         appendWhitespace(writer);
202     }
203
204
205     public void renderLink(Writer JavaDoc writer, Map JavaDoc context, ModelTree.ModelNode.Link link) throws IOException JavaDoc {
206         // open tag
207
writer.write("<a");
208         String JavaDoc id = link.getId(context);
209         if (UtilValidate.isNotEmpty(id)) {
210             writer.write(" id=\"");
211             writer.write(id);
212             writer.write("\"");
213         }
214         String JavaDoc style = link.getStyle(context);
215         if (UtilValidate.isNotEmpty(style)) {
216             writer.write(" class=\"");
217             writer.write(style);
218             writer.write("\"");
219         }
220         String JavaDoc name = link.getName(context);
221         if (UtilValidate.isNotEmpty(name)) {
222             writer.write(" name=\"");
223             writer.write(name);
224             writer.write("\"");
225         }
226         String JavaDoc title = link.getTitle(context);
227         if (UtilValidate.isNotEmpty(title)) {
228             writer.write(" title=\"");
229             writer.write(title);
230             writer.write("\"");
231         }
232         String JavaDoc targetWindow = link.getTargetWindow(context);
233         if (UtilValidate.isNotEmpty(targetWindow)) {
234             writer.write(" target=\"");
235             writer.write(targetWindow);
236             writer.write("\"");
237         }
238         String JavaDoc target = link.getTarget(context);
239         if (UtilValidate.isNotEmpty(target)) {
240             writer.write(" HREF=\"");
241             String JavaDoc urlMode = link.getUrlMode();
242             String JavaDoc prefix = link.getPrefix(context);
243             boolean fullPath = link.getFullPath();
244             boolean secure = link.getSecure();
245             boolean encode = link.getEncode();
246             HttpServletResponse JavaDoc res = (HttpServletResponse JavaDoc) context.get("response");
247             HttpServletRequest JavaDoc req = (HttpServletRequest JavaDoc) context.get("request");
248             if (urlMode != null && urlMode.equalsIgnoreCase("intra-app")) {
249                 if (req != null && res != null) {
250                     ServletContext JavaDoc ctx = (ServletContext JavaDoc) req.getAttribute("servletContext");
251                     RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_");
252                     String JavaDoc urlString = rh.makeLink(req, res, target, fullPath, secure, encode);
253                     writer.write(urlString);
254                 } else if (prefix != null) {
255                     writer.write(prefix + target);
256                 } else {
257                     writer.write(target);
258                 }
259             } else if (urlMode != null && urlMode.equalsIgnoreCase("content")) {
260                 StringBuffer JavaDoc newURL = new StringBuffer JavaDoc();
261                 ContentUrlTag.appendContentPrefix(req, newURL);
262                 newURL.append(target);
263                 writer.write(newURL.toString());
264             } else {
265                 writer.write(target);
266             }
267
268             writer.write("\"");
269         }
270         writer.write(">");
271         
272         // the text
273
ModelTree.ModelNode.Image img = link.getImage();
274         if (img == null)
275             writer.write(link.getText(context));
276         else
277             renderImage(writer, context, img);
278         
279         // close tag
280
writer.write("</a>");
281         
282         appendWhitespace(writer);
283     }
284
285     public void renderImage(Writer JavaDoc writer, Map JavaDoc context, ModelTree.ModelNode.Image image) throws IOException JavaDoc {
286         // open tag
287
writer.write("<img ");
288         String JavaDoc id = image.getId(context);
289         if (UtilValidate.isNotEmpty(id)) {
290             writer.write(" id=\"");
291             writer.write(id);
292             writer.write("\"");
293         }
294         String JavaDoc style = image.getStyle(context);
295         if (UtilValidate.isNotEmpty(style)) {
296             writer.write(" class=\"");
297             writer.write(style);
298             writer.write("\"");
299         }
300         String JavaDoc wid = image.getWidth(context);
301         if (UtilValidate.isNotEmpty(wid)) {
302             writer.write(" width=\"");
303             writer.write(wid);
304             writer.write("\"");
305         }
306         String JavaDoc hgt = image.getHeight(context);
307         if (UtilValidate.isNotEmpty(hgt)) {
308             writer.write(" height=\"");
309             writer.write(hgt);
310             writer.write("\"");
311         }
312         String JavaDoc border = image.getBorder(context);
313         if (UtilValidate.isNotEmpty(border)) {
314             writer.write(" border=\"");
315             writer.write(border);
316             writer.write("\"");
317         }
318         String JavaDoc src = image.getSrc(context);
319         if (UtilValidate.isNotEmpty(src)) {
320             writer.write(" SRC=\"");
321             String JavaDoc urlMode = image.getUrlMode();
322             boolean fullPath = false;
323             boolean secure = false;
324             boolean encode = false;
325             HttpServletResponse JavaDoc response = (HttpServletResponse JavaDoc) context.get("response");
326             HttpServletRequest JavaDoc request = (HttpServletRequest JavaDoc) context.get("request");
327             if (urlMode != null && urlMode.equalsIgnoreCase("intra-app")) {
328                 if (request != null && response != null) {
329                     ServletContext JavaDoc ctx = (ServletContext JavaDoc) request.getAttribute("servletContext");
330                     RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_");
331                     String JavaDoc urlString = rh.makeLink(request, response, src, fullPath, secure, encode);
332                     writer.write(urlString);
333                 } else {
334                     writer.write(src);
335                 }
336             } else if (urlMode != null && urlMode.equalsIgnoreCase("content")) {
337                 if (request != null && response != null) {
338                     StringBuffer JavaDoc newURL = new StringBuffer JavaDoc();
339                     ContentUrlTag.appendContentPrefix(request, newURL);
340                     newURL.append(src);
341                     writer.write(newURL.toString());
342                 }
343             } else {
344                 writer.write(src);
345             }
346
347             writer.write("\"");
348         }
349         writer.write("/>");
350         
351     }
352
353     public void appendWhitespace(Writer JavaDoc writer) throws IOException JavaDoc {
354         // appending line ends for now, but this could be replaced with a simple space or something
355
writer.write("\r\n");
356         //writer.write(' ');
357
}
358
359     public ScreenStringRenderer getScreenStringRenderer(Map JavaDoc context) {
360
361         ScreenRenderer screenRenderer = (ScreenRenderer)context.get("screens");
362         if (screenRenderer != null) {
363             screenStringRenderer = screenRenderer.getScreenStringRenderer();
364         } else {
365             if (screenStringRenderer == null) {
366                 screenStringRenderer = new HtmlScreenRenderer();
367             }
368         }
369         return screenStringRenderer;
370     }
371 }
372
Popular Tags