    1   /*
    2    * Copyright 1999-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  package org.apache.commons.jxpath.servlet;
    17
    18  import java.util.Enumeration;
    19  import java.util.HashSet;
    20
    21  import javax.servlet.ServletRequest;
    22
    23  /***
    24   * Implementation of the DynamicPropertyHandler interface that provides
    25   * access to attributes and parameters of a ServletRequest.
    26   *
    27   * @author Dmitri Plotnikov
    28   * @version $Revision: 1.6 $ $Date: 2004/05/08 15:10:49 $
    29   */
    30  public class ServletRequestHandler extends HttpSessionHandler {
    31
    32      protected void collectPropertyNames(HashSet set, Object bean) {
    33          super.collectPropertyNames(set, bean);
    34          ServletRequestAndContext handle = (ServletRequestAndContext) bean;
    35          ServletRequest servletRequest = handle.getServletRequest();
    36          Enumeration e = servletRequest.getAttributeNames();
    37          while (e.hasMoreElements()) {
    38              set.add(e.nextElement());
    39          }
    40          e = servletRequest.getParameterNames();
    41          while (e.hasMoreElements()) {
    42              set.add(e.nextElement());
    43          }
    44      }
    45
    46      public Object getProperty(Object bean, String property) {
    47          ServletRequestAndContext handle = (ServletRequestAndContext) bean;
    48          ServletRequest servletRequest = handle.getServletRequest();
    49          String[] strings = servletRequest.getParameterValues(property);
    50          if (strings != null) {
    51              if (strings.length == 0) {
    52                  return null;
    53              }
    54              if (strings.length == 1) {
    55                  return strings[0];
    56              }
    57              return strings;
    58          }
    59
    60          Object object = servletRequest.getAttribute(property);
    61          if (object != null) {
    62              return object;
    63          }
    64
    65          return super.getProperty(bean, property);
    66      }
    67
    68      public void setProperty(Object request, String property, Object value) {
    69          ((ServletRequest) request).setAttribute(property, value);
    70      }
    71  }