Package javax.servlet.jsp.el

Source Code of javax.servlet.jsp.el.ImplicitObjectELResolver

/*
* Copyright (c) 1998-2011 Caucho Technology -- all rights reserved
*
* This file is part of Resin(R) Open Source
*
* Each copy or derived work must preserve the copyright notice and this
* notice unmodified.
*
* Resin Open Source is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Resin Open Source is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
* of NON-INFRINGEMENT.  See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with Resin Open Source; if not, write to the
*
*   Free Software Foundation, Inc.
*   59 Temple Place, Suite 330
*   Boston, MA 02111-1307  USA
*
* @author Scott Ferguson
*/

package javax.servlet.jsp.el;

import javax.el.ELContext;
import javax.el.ELResolver;
import javax.el.PropertyNotWritableException;
import javax.servlet.ServletContext;
import javax.servlet.ServletRequest;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.PageContext;
import java.beans.FeatureDescriptor;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
* Variable resolution for JSP variables
*/
public class ImplicitObjectELResolver extends ELResolver {
  private static final HashMap<Object,Prop> _propMap
    = new HashMap<Object,Prop>();
 
  private static final ArrayList<FeatureDescriptor> _featureDescriptors
    = new ArrayList<FeatureDescriptor>();
 
  @Override
  public Class<String> getCommonPropertyType(ELContext context,
                                             Object base)
  {
    if (base == null)
      return String.class;
    else
      return null;
  }

  @Override
  public Iterator<FeatureDescriptor>
    getFeatureDescriptors(ELContext context, Object base)
  {
    if (base != null)
      return null;
   
    return _featureDescriptors.iterator();
  }

  @Override
    public Class getType(ELContext context,
                         Object base,
                         Object property)
  {
    if (base != null)
      return null;

    Prop prop = _propMap.get(property);
    if (prop == null)
      return null;

    context.setPropertyResolved(true);

    return null;
  }

  @Override
    public Object getValue(ELContext context,
                           Object base,
                           Object property)
  {
    if (base != null)
      return null;

    Prop prop = _propMap.get(property);
    if (prop == null)
      return null;

    context.setPropertyResolved(true);

    PageContext jspContext = (PageContext) context.getContext(JspContext.class);

    switch (prop) {
    case PAGE_CONTEXT:
      return jspContext;
     
    case PAGE_SCOPE:
      {
        HashMap<String,Object> map = new HashMap<String,Object>();

        Enumeration e = jspContext.getAttributeNamesInScope(PageContext.PAGE_SCOPE);
        while (e.hasMoreElements()) {
          String name = (String) e.nextElement();

          map.put(name, jspContext.getAttribute(name));
        }

        return map;
      }
     
    case REQUEST_SCOPE:
      {
        HashMap<String,Object> map = new HashMap<String,Object>();

        ServletRequest request = jspContext.getRequest();

        Enumeration e = request.getAttributeNames();
        while (e.hasMoreElements()) {
          String name = (String) e.nextElement();

          map.put(name, request.getAttribute(name));
        }

        return map;
      }
     
    case SESSION_SCOPE:
      {
        HashMap<String,Object> map = new HashMap<String,Object>();

        HttpSession session = jspContext.getSession();

        if (session == null)
          return null;

        Enumeration e = session.getAttributeNames();
        while (e.hasMoreElements()) {
          String name = (String) e.nextElement();

          map.put(name, session.getAttribute(name));
        }

        return map;
      }
     
    case APPLICATION_SCOPE:
      {
        HashMap<String,Object> map = new HashMap<String,Object>();

        ServletContext app = jspContext.getServletContext();

        Enumeration e = app.getAttributeNames();
        while (e.hasMoreElements()) {
          String name = (String) e.nextElement();

          map.put(name, app.getAttribute(name));
        }

        return map;
      }
     
    case PARAM:
      {
        HashMap<String,Object> map = new HashMap<String,Object>();

        ServletRequest request = jspContext.getRequest();

        Enumeration e = request.getParameterNames();
        while (e.hasMoreElements()) {
          String name = (String) e.nextElement();

          map.put(name, request.getParameter(name));
        }

        return map;
      }
     
    case PARAM_VALUES:
      {
        HashMap<String,Object> map = new HashMap<String,Object>();

        ServletRequest request = jspContext.getRequest();

        Enumeration e = request.getParameterNames();
        while (e.hasMoreElements()) {
          String name = (String) e.nextElement();

          map.put(name, request.getParameterValues(name));
        }

        return map;
      }
     
    case HEADER:
      {
        HashMap<String,Object> map = new HashMap<String,Object>();

        HttpServletRequest request = (HttpServletRequest) jspContext.getRequest();

        Enumeration e = request.getHeaderNames();
        while (e.hasMoreElements()) {
          String name = (String) e.nextElement();

          map.put(name, request.getHeader(name));
        }

        return map;
      }
     
    case HEADER_VALUES:
      {
        HashMap<String,Object> map = new HashMap<String,Object>();

        HttpServletRequest request = (HttpServletRequest) jspContext.getRequest();

        Enumeration e = request.getHeaderNames();
        while (e.hasMoreElements()) {
          String name = (String) e.nextElement();

          map.put(name, request.getHeaders(name));
        }

        return map;
      }
     
    case COOKIE:
      {
        HashMap<String,Object> map = new HashMap<String,Object>();

        HttpServletRequest request
          = (HttpServletRequest) jspContext.getRequest();

        Cookie []cookies = request.getCookies();

        if (cookies == null)
          return map;

        for (int i = cookies.length - 1; i >= 0; i--) {
          map.put(cookies[i].getName(), cookies[i].getValue());
        }

        return map;
      }
   
    case INIT_PARAM:
      {
        HashMap<String,Object> map = new HashMap<String,Object>();

        ServletContext app = jspContext.getServletContext();

        Enumeration e = app.getInitParameterNames();
        while (e.hasMoreElements()) {
          String name = (String) e.nextElement();

          map.put(name, app.getInitParameter(name));
        }

        return map;
      }
    }

    return null;
  }

  @Override
    public boolean isReadOnly(ELContext context,
                         Object base,
                         Object property)
  {
    if (base != null)
      return true;

    Prop prop = _propMap.get(property);
    if (prop == null)
      return true;

    context.setPropertyResolved(true);
    return true;
  }

  @Override
    public void setValue(ELContext context,
                         Object base,
                         Object property,
                         Object value)
  {
    if (base != null)
      return;

    Prop prop = _propMap.get(property);
    if (prop == null)
      return;

    context.setPropertyResolved(true);
   
    throw new PropertyNotWritableException(String.valueOf(value));
  }
 
  private enum Prop {
    PAGE_CONTEXT,
    PAGE_SCOPE,
    REQUEST_SCOPE,
    SESSION_SCOPE,
    APPLICATION_SCOPE,
    PARAM,
    PARAM_VALUES,
    HEADER,
    HEADER_VALUES,
    COOKIE,
    INIT_PARAM
  };

  static {
    _propMap.put("pageContext", Prop.PAGE_CONTEXT);
    _propMap.put("pageScope", Prop.PAGE_SCOPE);
    _propMap.put("requestScope", Prop.REQUEST_SCOPE);
    _propMap.put("sessionScope", Prop.SESSION_SCOPE);
    _propMap.put("applicationScope", Prop.APPLICATION_SCOPE);
    _propMap.put("param", Prop.PARAM);
    _propMap.put("paramValues", Prop.PARAM_VALUES);
    _propMap.put("header", Prop.HEADER);
    _propMap.put("headerValues", Prop.HEADER_VALUES);
    _propMap.put("cookie", Prop.COOKIE);
    _propMap.put("initParam", Prop.INIT_PARAM);

    for (Object key : _propMap.keySet()) {
      String name = String.valueOf(key);
     
      FeatureDescriptor desc = new FeatureDescriptor();
      desc.setName(name);
      desc.setDisplayName(name);
      desc.setShortDescription("");
      desc.setExpert(false);
      desc.setHidden(false);
      desc.setPreferred(true);

      desc.setValue(ELResolver.TYPE, Map.class);

      desc.setValue(ELResolver.RESOLVABLE_AT_DESIGN_TIME, Boolean.TRUE);

      _featureDescriptors.add(desc);
    }
  }
}
TOP

Related Classes of javax.servlet.jsp.el.ImplicitObjectELResolver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.