KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > beehive > netui > tags > tree > TreeCRI


1 /*
2  * Copyright 2005 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  * $Header:$
17  */

18 package org.apache.beehive.netui.tags.tree;
19
20 import org.apache.beehive.netui.util.internal.InternalStringBuilder;
21
22 import org.apache.beehive.netui.pageflow.interceptor.InterceptorChain;
23 import org.apache.beehive.netui.pageflow.interceptor.InterceptorException;
24 import org.apache.beehive.netui.pageflow.interceptor.request.RequestInterceptor;
25 import org.apache.beehive.netui.pageflow.interceptor.request.RequestInterceptorContext;
26 import org.apache.beehive.netui.pageflow.requeststate.INameable;
27 import org.apache.beehive.netui.pageflow.requeststate.NameService;
28 import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
29 import org.apache.beehive.netui.tags.rendering.StringBuilderRenderAppender;
30 import org.apache.beehive.netui.util.logging.Logger;
31
32 import javax.servlet.ServletContext JavaDoc;
33 import javax.servlet.ServletResponse JavaDoc;
34 import javax.servlet.http.HttpServletRequest JavaDoc;
35 import javax.servlet.http.HttpServletResponse JavaDoc;
36 import javax.servlet.jsp.JspException JavaDoc;
37 import java.io.IOException JavaDoc;
38 import java.io.Writer JavaDoc;
39
40 public class TreeCRI extends RequestInterceptor
41 {
42     private static final String JavaDoc TREE_COLLAPSE = "treeCollapse";
43     private static final String JavaDoc TREE_EXPAND = "treeExpand";
44
45     private static final Logger logger = Logger.getInstance(TreeCRI.class);
46
47     // The elements we will create in the document
48
private static final String JavaDoc TREE_EXPAND_ELEM = "treeExpand";
49
50     public void preRequest(RequestInterceptorContext ctxt, InterceptorChain chain) throws InterceptorException
51     {
52         HttpServletRequest JavaDoc request = ctxt.getRequest();
53
54         // Create the command by striping off the context path and the extension
55
String JavaDoc cmd = request.getRequestURI();
56
57         // catch any runtime errors here and return.
58
try {
59             int dot = cmd.lastIndexOf('.');
60             int slash = cmd.lastIndexOf('/');
61             if (slash != -1 && slash != -1) {
62                 cmd = cmd.substring(slash + 1, dot);
63             }
64         }
65         catch (RuntimeException JavaDoc e) {
66             System.err.println("Runtime Error creating XmlRequestServlet Command:" + e.getClass().getName());
67         }
68
69         // check to see if we handle this command
70
if (TREE_COLLAPSE.equals(cmd)) {
71             handleExpandCollapse(false, request, ctxt.getResponse(), ctxt.getServletContext());
72         }
73         else if (TREE_EXPAND.equals(cmd)) {
74             handleExpandCollapse(true, request, ctxt.getResponse(), ctxt.getServletContext());
75         }
76
77         chain.continueChain();
78     }
79
80     public void postRequest(RequestInterceptorContext context, InterceptorChain chain) throws InterceptorException
81     {
82         chain.continueChain();
83     }
84
85     private void handleExpandCollapse(boolean expand, HttpServletRequest JavaDoc req, ServletResponse JavaDoc response,
86                                       ServletContext JavaDoc ctxt)
87     {
88         String JavaDoc tree = req.getParameter("tree");
89         String JavaDoc node = req.getParameter("node");
90         String JavaDoc expandSvr = req.getParameter("expandOnServer");
91         //System.err.println("TreeCommand:" + ((expand) ? "expand" : "collapse") +
92
// " Tree:" + tree + " Node:" + node + " expandSvr:" + expandSvr);
93

94         NameService ns = NameService.instance(req.getSession());
95         assert(ns != null);
96
97         // get the tree from the name service
98
INameable n = ns.get(tree);
99         if (n == null) {
100             logger.error("Tree '" + tree + "' was not found in the NameService");
101             return;
102         }
103         if (!(n instanceof ITreeRootElement)) {
104             logger.error("Named Tree was not an instance of a ITreeRootElement");
105             return;
106         }
107
108         ITreeRootElement root = (ITreeRootElement) n;
109         TreeElement elem = ((TreeElement) root).findNode(node);
110         if (elem == null) {
111             System.err.println("Element '" + node + "' not found in the tree");
112             return;
113         }
114         elem.onExpand(req, response);
115         elem.setExpanded(expand);
116
117         if (expandSvr != null) {
118             InternalStringBuilder sb = new InternalStringBuilder(1024);
119             StringBuilderRenderAppender writer = new StringBuilderRenderAppender(sb);
120             // Start the document
121
writeStartElement(writer, TREE_EXPAND_ELEM);
122
123             // add a tree identifier
124
writeElement(writer, "node", node);
125             writeElement(writer, "treeId", tree);
126
127             try {
128                 TreeElement children[] = elem.getChildren();
129                 AttributeRenderer extraAttrs = new AttributeRenderer();
130                 int newLevel = elem.getLevel() + 1;
131                 InternalStringBuilder treeRendering = new InternalStringBuilder();
132                 TreeElement tmp = elem;
133                 InheritableState iState = null;
134                 while (iState == null && tmp != null) {
135                     iState = tmp.getInheritableState();
136                     tmp = tmp.getParent();
137                 }
138                 if (iState == null) {
139                     System.err.println("Unable to find InheritableState");
140                     iState = root.getInheritableState();
141                 }
142
143                 ServletTreeRenderer str = new ServletTreeRenderer(root.getTreeRenderState(), req,
144                         (HttpServletResponse JavaDoc) response, ctxt, writer, treeRendering);
145                 for (int i = 0; i < children.length; i++) {
146                     treeRendering.setLength(0);
147                     str.render(treeRendering, children[i], newLevel, extraAttrs, iState);
148                 }
149             }
150             catch (JspException JavaDoc se) {
151                 se.printStackTrace();
152                 logger.error("Received a JSP excpetion Rendering the Tree", se);
153                 return;
154             }
155             catch (RuntimeException JavaDoc re) {
156                 //re.printStackTrace();
157
logger.error("Received a JSP excpetion Rendering the Tree", re);
158                 return;
159             }
160
161             // add the tree text
162
writeEndElement(writer, TREE_EXPAND_ELEM);
163             write(response, sb.toString());
164         }
165     }
166
167     public static void writeStartElement(AbstractRenderAppender writer, String JavaDoc elementName)
168     {
169         writer.append("<");
170         writer.append(elementName);
171         writer.append(">");
172
173     }
174
175     public static void writeEndElement(AbstractRenderAppender writer, String JavaDoc elementName)
176     {
177         writer.append("</");
178         writer.append(elementName);
179         writer.append(">");
180     }
181
182     public static void writeElement(AbstractRenderAppender writer, String JavaDoc elementName, String JavaDoc value)
183     {
184         writeStartElement(writer, elementName);
185         writer.append(value);
186         writeEndElement(writer, elementName);
187
188     }
189
190     private void write(ServletResponse JavaDoc response, String JavaDoc string)
191     {
192         try {
193             Writer JavaDoc writer = response.getWriter();
194             writer.write(string);
195         }
196         catch (IOException JavaDoc e) {
197         }
198     }
199 }
200
Popular Tags