KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > mlw > vlh > web > ValueListRequestUtil


1 /**
2  * Copyright (c) 2003 held jointly by the individual authors.
3  *
4  * This library is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU Lesser General Public License as published
6  * by the Free Software Foundation; either version 2.1 of the License, or
7  * (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; with out even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public License
15  * along with this library; if not, write to the Free Software Foundation,
16  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
17  *
18  * > http://www.gnu.org/copyleft/lesser.html
19  * > http://www.opensource.org/licenses/lgpl-license.php
20  */

21 package net.mlw.vlh.web;
22
23 import java.util.Enumeration JavaDoc;
24 import java.util.HashMap JavaDoc;
25 import java.util.Iterator JavaDoc;
26 import java.util.Map JavaDoc;
27 import java.util.StringTokenizer JavaDoc;
28
29 import javax.servlet.http.HttpServletRequest JavaDoc;
30 import javax.servlet.jsp.PageContext JavaDoc;
31
32 import net.mlw.vlh.ValueListInfo;
33 import net.mlw.vlh.web.tag.ActionTag;
34
35 /**
36  * This is a utility to assist usig the ValueList in a web enviroment.
37  *
38  * net.mlw.vlh.web.ValueListRequestUtil
39  *
40  * @author Matthew L. Wilson, Andrej Zachar
41  * @version $Revision: 1.16 $ $Date: 2006/03/28 17:06:49 $
42  */

43 public final class ValueListRequestUtil
44 {
45
46    /** Protect singleton */
47    private ValueListRequestUtil()
48    {
49    }
50
51    public static Map JavaDoc getRequestParameterMap(HttpServletRequest JavaDoc request)
52    {
53       return getRequestParameterMap(request, "");
54    }
55
56    public static Map JavaDoc getRequestParameterMap(Map JavaDoc requestParameterMap, String JavaDoc id)
57    {
58
59       if (requestParameterMap == null)
60       {
61          return new HashMap JavaDoc();
62       }
63       int lenghtOfId = (id == null) ? 0 : id.length();
64
65       Map JavaDoc parameters = new HashMap JavaDoc(requestParameterMap.size());
66       for (Iterator JavaDoc keys = requestParameterMap.keySet().iterator(); keys.hasNext();)
67       {
68          String JavaDoc key = (String JavaDoc) keys.next();
69
70          String JavaDoc[] values;
71          Object JavaDoc valuesObj = requestParameterMap.get(key);
72          if (valuesObj instanceof String JavaDoc)
73          {
74             values = new String JavaDoc[] {(String JavaDoc) valuesObj};
75          }
76          else
77          {
78             values = (String JavaDoc[]) valuesObj;
79          }
80
81          Object JavaDoc value = ((values == null) ? null : (values.length == 1 ? (Object JavaDoc) values[0] : (Object JavaDoc) values));
82
83          if (lenghtOfId > 0)
84          {
85             if (key.endsWith(id))
86             {
87                parameters.put(key.substring(0, key.length() - lenghtOfId), value);
88             }
89          }
90          else
91          {
92             parameters.put(key, value);
93          }
94
95       }
96       return parameters;
97    }
98
99    /**
100     *
101     * @param request
102     * @param id
103     * @return A Map of string or String arrays.
104     */

105    public static Map JavaDoc getRequestParameterMap(HttpServletRequest JavaDoc request, String JavaDoc id)
106    {
107       int lenghtOfId = (id == null) ? 0 : id.length();
108
109       Map JavaDoc parameters = new HashMap JavaDoc(request.getParameterMap().size());
110       for (Enumeration JavaDoc keys = request.getParameterNames(); keys.hasMoreElements();)
111       {
112          String JavaDoc key = (String JavaDoc) keys.nextElement();
113          String JavaDoc[] values = request.getParameterValues(key);
114          Object JavaDoc value = ((values == null) ? null : (values.length == 1 ? (Object JavaDoc) values[0] : (Object JavaDoc) values));
115
116          if (lenghtOfId > 0)
117          {
118             if (key.endsWith(id))
119             {
120                parameters.put(key.substring(0, key.length() - lenghtOfId), value);
121             }
122          }
123          else
124          {
125             parameters.put(key, value);
126          }
127
128       }
129       return parameters;
130    }
131
132    /**
133     * Build the ValueListInfo from the request and parameters.
134     *
135     * @param request
136     * The HttpServletRequest
137     *
138     * @return a new ValueListInfo.
139     */

140    public static ValueListInfo buildValueListInfo(HttpServletRequest JavaDoc request)
141    {
142       return buildValueListInfo(request, "");
143    }
144
145    /**
146     * Build the ValueListInfo from the request for certain Table id.
147     * @param request The HttpServletRequest
148     * @param id The tableId String.
149     * @return a new ValueListInfo.
150     */

151    public static ValueListInfo buildValueListInfo(HttpServletRequest JavaDoc request, String JavaDoc id)
152    {
153       Map JavaDoc parameters = getRequestParameterMap(request, id);
154       return builtValueListInfo(parameters);
155    }
156
157    /**
158     * Make from parameters ValueListInfo
159     * @param parameters
160     * @return ValueListInfo
161     */

162    private static ValueListInfo builtValueListInfo(Map JavaDoc parameters)
163    {
164       return new ValueListInfo(parameters);
165    }
166
167    // Note setIncludeParameters was refactor to getAllForwardParameters
168
/**
169     * Setter for the parameters, that are forwarded in every url link in table.
170     * <ul><li><b># </b>- forward only control (like sortColumn, pagingPage, etc.) parameters of others tables in jsp
171     * <p>Automatically exclude params with the prefix of the
172     * ACTION_TEMP_PARAM_PREFIX. </p>
173     * </li>
174     * <li><b>$ </b>- forward only parameters of others tables in jsp that stats with prefix ACTION_TEMP_PARAM_PREFIX.
175     * </li>
176     * <li><b>partOfKey*</b> - forward parameteres that starts with prefix <b>partOfKey</b>.<p>
177     * Automatically are excluded keys start with <ul>ACTION_TEMP_PARAM_PREFIX and with</ul> <ul>DO_FOCUS+id of this table.</ul>
178     * </p>
179     * </li>
180     * <li><b>myForwardParameterOne|myForwardParameterTwo </b>-
181     * forward parameter from request if the name is as the same as
182     * <b>myForwardParameterOne</b> or <b>myForwardParameterTwo</b></li>
183     * </ul>
184     * <p>
185     * Note: ValueListInfo.DO_FOCUS param you cannot forward. It is forbidden for all posibilities.
186     * </p>
187     * @param userForwardParameters The userForwardParameters properties.
188     * @param id TableId of the currrent value list table.
189     * @see net.mlw.vlh.web.tag.ActionTag#ACTION_TEMP_PARAM_PREFIX
190     * @see net.mlw.vlh.ValueListInfo#DO_FOCUS
191     */

192    public static Map JavaDoc getAllForwardParameters(PageContext JavaDoc pageContext, String JavaDoc userForwardParameters, String JavaDoc id)
193    {
194
195       Map JavaDoc forwardedParams = new HashMap JavaDoc();
196
197       for (StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(userForwardParameters, "|"); st.hasMoreTokens();)
198       {
199          String JavaDoc key = st.nextToken();
200
201          if (key.equals("#"))
202          {
203             forwardedParams.putAll(getForwardParamsOfOtherTables(pageContext, id));
204          }
205          else
206          {
207             if (key.endsWith("*"))
208             {
209                key = key.substring(0, key.length() - 1);
210                forwardedParams.putAll(getForwardParamsOfKey(pageContext, id, key));
211             }
212             else
213             {
214
215                if (key.equals("$"))
216                {
217                   forwardedParams.putAll(getForwardActionTempParamsOfOtherTables(pageContext, id));
218                }
219                else
220                {
221
222                   String JavaDoc[] values = pageContext.getRequest().getParameterValues(key);
223                   if (values != null && values.length > 0)
224                   {
225                      forwardedParams.put(key, values);
226                   }
227                }
228             }
229          }
230       }
231
232       return forwardedParams;
233    }
234
235    /**
236     * @param pageContext
237     * @param id TableId
238     * @param prefix
239     * @return Map Map of forwarded parameters starts with prefix. Automatically
240     * are excluded DO_FOCUS for this TableId and params with the prefix
241     * of the ACTION_TEMP_PARAM_PREFIX.
242     */

243    private static Map JavaDoc getForwardParamsOfKey(PageContext JavaDoc pageContext, String JavaDoc id, String JavaDoc prefix)
244    {
245       Map JavaDoc paramsOfKey = new HashMap JavaDoc();
246       for (Enumeration JavaDoc enumer = pageContext.getRequest().getParameterNames(); enumer.hasMoreElements();)
247       {
248          String JavaDoc requestParamName = (String JavaDoc) enumer.nextElement();
249          if (requestParamName.startsWith(prefix) && (!requestParamName.startsWith(ValueListInfo.DO_FOCUS + id))
250                && (!requestParamName.startsWith(ActionTag.ACTION_TEMP_PARAM_PREFIX)))
251          {
252             String JavaDoc[] values = pageContext.getRequest().getParameterValues(requestParamName);
253             if (values != null)
254             {
255                paramsOfKey.put(requestParamName, values);
256             }
257          }
258       }
259       return paramsOfKey;
260    }
261
262    /**
263     * @param pageContext
264     * @param id TableId
265     * @return Map Map of action's temp parameters of others tables in jsp page.
266     */

267    private static Map JavaDoc getForwardActionTempParamsOfOtherTables(PageContext JavaDoc pageContext, String JavaDoc id)
268    {
269
270       Map JavaDoc actionTempParamsOfOthers = new HashMap JavaDoc();
271       for (Enumeration JavaDoc enumer = pageContext.getRequest().getParameterNames(); enumer.hasMoreElements();)
272       {
273          String JavaDoc requestParamName = (String JavaDoc) enumer.nextElement();
274
275          if (requestParamName.startsWith(ActionTag.ACTION_TEMP_PARAM_PREFIX) && !requestParamName.endsWith(id))
276          {
277             String JavaDoc[] values = pageContext.getRequest().getParameterValues(requestParamName);
278             if (values != null)
279             {
280                actionTempParamsOfOthers.put(requestParamName, values);
281             }
282          }
283
284       }
285       return actionTempParamsOfOthers;
286    }
287
288    /**
289     * @param pageContext
290     * @param id TableId
291     * @return Map of table's control's parameters of other's tables in jsp
292     * page,automatically exclude params with the prefix of the
293     * ACTION_TEMP_PARAM_PREFIX.
294     */

295    private static Map JavaDoc getForwardParamsOfOtherTables(PageContext JavaDoc pageContext, String JavaDoc id)
296    {
297       Map JavaDoc otherTablesParams = new HashMap JavaDoc();
298       for (Enumeration JavaDoc enumer = pageContext.getRequest().getParameterNames(); enumer.hasMoreElements();)
299       {
300          String JavaDoc requestParamName = (String JavaDoc) enumer.nextElement();
301
302          if ((!requestParamName.endsWith(id) && !requestParamName.startsWith(ActionTag.ACTION_TEMP_PARAM_PREFIX))
303                && (requestParamName.startsWith(ValueListInfo.FOCUS_PARAM_PREFIX)
304                      || requestParamName.startsWith(ValueListInfo.PAGING_PARAM_PREFIX) || requestParamName
305                      .startsWith(ValueListInfo.SORT_PARAM_PREFIX)))
306          {
307             String JavaDoc[] values = pageContext.getRequest().getParameterValues(requestParamName);
308             if (values != null)
309             {
310                otherTablesParams.put(requestParamName, values);
311             }
312          }
313
314       }
315       return otherTablesParams;
316    }
317
318    /**
319     * Return the name of parameter with ActionTag.ACTION_TEMP_PARAM_PREFIX
320     * Example: param "id" return "ACTid"
321     * @param userParamName
322     * @return ActionTag.ACTION_TEMP_PARAM_PREFIX + userParamName
323     */

324    public static String JavaDoc getActionTempParamName(String JavaDoc userParamName)
325    {
326       return ActionTag.ACTION_TEMP_PARAM_PREFIX + userParamName;
327    }
328
329 }
Popular Tags