KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > beehive > netui > tags > internal > ReturnActionViewRenderer


1 /*
2  * Copyright 2004 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.internal;
19
20 import org.apache.beehive.netui.pageflow.internal.InternalConstants;
21 import org.apache.beehive.netui.pageflow.internal.InternalExpressionUtils;
22 import org.apache.beehive.netui.pageflow.internal.ViewRenderer;
23 import org.apache.beehive.netui.tags.javascript.ScriptRequestState;
24 import org.apache.beehive.netui.tags.rendering.ResponseRenderAppender;
25 import org.apache.beehive.netui.tags.rendering.ScriptTag;
26 import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
27 import org.apache.beehive.netui.util.logging.Logger;
28
29 import javax.servlet.ServletContext JavaDoc;
30 import javax.servlet.ServletRequest JavaDoc;
31 import javax.servlet.ServletResponse JavaDoc;
32 import javax.servlet.http.HttpServletRequest JavaDoc;
33 import javax.servlet.jsp.el.ELException JavaDoc;
34 import java.io.IOException JavaDoc;
35 import java.io.Serializable JavaDoc;
36 import java.util.HashMap JavaDoc;
37 import java.util.Iterator JavaDoc;
38 import java.util.Map JavaDoc;
39
40 /**
41  * Renderer for the "automatic" script-only page that is produced to send a map of values from a popup window
42  * back to the opener, and to close the popup window.
43  */

44 public class ReturnActionViewRenderer
45         implements ViewRenderer, Serializable JavaDoc
46 {
47     private static final Logger _log = Logger.getInstance(ReturnActionViewRenderer.class);
48
49     private static char DELIM = ':';
50     private static String JavaDoc ITEM_PARAM = InternalConstants.ATTR_PREFIX + "retrieveItem";
51     private static String JavaDoc CALLBACK_PARAM = InternalConstants.ATTR_PREFIX + "returnActionCallback";
52
53     private HashMap JavaDoc _retrieveMap;
54     private String JavaDoc _callbackFunc;
55
56     public static char getDelim()
57     {
58         return DELIM;
59     }
60
61     public static String JavaDoc getMapItemParamName()
62     {
63         return ITEM_PARAM;
64     }
65
66     public static String JavaDoc getCallbackParamName()
67     {
68         return CALLBACK_PARAM;
69     }
70
71     /**
72      * Initialize, based on request parameters we're looking for.
73      */

74     public void init(ServletRequest JavaDoc request)
75     {
76         String JavaDoc[] vals = request.getParameterValues(ITEM_PARAM);
77
78         if (vals != null) {
79             _retrieveMap = new HashMap JavaDoc();
80
81             for (int i = 0; i < vals.length; i++) {
82                 String JavaDoc val = vals[i];
83                 int delimPos = val.indexOf(DELIM);
84                 if (delimPos != -1) {
85                     String JavaDoc expressionToRetrieve = val.substring(0, delimPos);
86                     String JavaDoc fieldID = val.substring(delimPos + 1);
87                     _retrieveMap.put(fieldID, expressionToRetrieve);
88                 }
89             }
90         }
91
92         _callbackFunc = request.getParameter(CALLBACK_PARAM);
93     }
94
95     // @todo: JavaScript?
96
public void renderView(ServletRequest JavaDoc request, ServletResponse JavaDoc response, ServletContext JavaDoc servletContext)
97             throws IOException JavaDoc
98     {
99         ResponseRenderAppender appender = new ResponseRenderAppender(response);
100         ScriptTag.State state = new ScriptTag.State();
101         ScriptTag br = (ScriptTag) TagRenderingBase.Factory.getRendering(TagRenderingBase.SCRIPT_TAG, request);
102         state.suppressComments = false;
103         br.doStartTag(appender, state);
104
105         appender.append(ScriptRequestState.getString("popupReturn_begin", null));
106         assert request instanceof HttpServletRequest JavaDoc : request.getClass().getName();
107         HttpServletRequest JavaDoc httpRequest = (HttpServletRequest JavaDoc) request;
108
109         if (_retrieveMap != null) {
110             for (Iterator JavaDoc/*<Map.Entry>*/ i = _retrieveMap.entrySet().iterator(); i.hasNext();) {
111                 Map.Entry JavaDoc entry = (Map.Entry JavaDoc) i.next();
112                 String JavaDoc fieldID = (String JavaDoc) entry.getKey();
113                 String JavaDoc expressionToRetrieve = "${" + (String JavaDoc) entry.getValue() + '}';
114                 try {
115                     String JavaDoc value =
116                             InternalExpressionUtils.evaluateMessage(expressionToRetrieve, null, httpRequest, servletContext);
117                     String JavaDoc item =
118                             ScriptRequestState.getString("popupReturn_item", new Object JavaDoc[]{fieldID, value});
119                     appender.append(item);
120                 }
121                 catch (ELException JavaDoc e) {
122                     _log.error("Error evaluating expression " + expressionToRetrieve, e);
123                 }
124             }
125         }
126
127         appender.append(ScriptRequestState.getString("popupReturn_end", new Object JavaDoc[]{_callbackFunc}));
128         br.doEndTag(appender, false);
129     }
130 }
131
Popular Tags