View Javadoc

1   /*
2    * $Id: RequestToVariableFilter.java 471754 2006-11-06 14:55:09Z husted $
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  package org.apache.struts.scripting;
22  
23  // util imports:
24  import java.util.Enumeration;
25  import java.util.Properties;
26  
27  // logging imports:
28  import org.apache.commons.logging.Log;
29  import org.apache.commons.logging.LogFactory;
30  
31  // misc imports:
32  import javax.servlet.http.HttpServletRequest;
33  import org.apache.bsf.BSFException;
34  import org.apache.bsf.BSFManager;
35  
36  
37  /**
38   *  Takes request parameters and declares variables with them. If a variable is
39   *  already exists with that name, a "_" is prepended to the name. Both Strings
40   *  and arrays are recognized.
41   */
42  public class RequestToVariableFilter implements BSFManagerFilter {
43  
44      /**  The logging instance. */
45      private static final Log LOG = LogFactory.getLog(TestFilter.class);
46  
47  
48      /**
49       *  Initializes the filter.
50       *
51       *@param  name   The name of the filter
52       *@param  props  The properties
53       */
54      public void init(String name, Properties props) { }
55  
56  
57      /**
58       *  Applies the filter.
59       *
60       *@param  mgr  The bsf manager
61       *@return      The bsf manager
62       */
63      public BSFManager apply(BSFManager mgr) {
64          HttpServletRequest request =
65                  (HttpServletRequest) mgr.lookupBean("request");
66          String[] values = null;
67          String name = null;
68          String newName = null;
69          Object o = null;
70          for (Enumeration e = request.getParameterNames();
71                  e.hasMoreElements();) {
72              name = (String) e.nextElement();
73              o = mgr.lookupBean(name);
74              if (o == null) {
75                  newName = name;
76              } else {
77                  newName = "_" + name;
78              }
79  
80              values = request.getParameterValues(name);
81              try {
82                  if (values.length > 1) {
83                      mgr.declareBean(newName, values, values.getClass());
84                      if (LOG.isDebugEnabled()) {
85                          LOG.debug("creating array var " + newName);
86                      }
87                  } else {
88                      mgr.declareBean(newName, values[0], String.class);
89                      if (LOG.isDebugEnabled()) {
90                          LOG.debug("creating string var " + newName);
91                      }
92                  }
93              } catch (BSFException ex) {
94                  LOG.warn("Unable to set variable " + newName, ex);
95              }
96  
97          }
98          if (LOG.isDebugEnabled()) {
99              LOG.debug("Done filtering");
100         }
101         return mgr;
102     }
103 }