001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.commons.el;
018    
019    import javax.servlet.jsp.PageContext;
020    import javax.servlet.jsp.el.ELException;
021    import javax.servlet.jsp.el.VariableResolver;
022    
023    /**
024     *
025     * <p>This is the JSTL-specific implementation of VariableResolver.
026     * It looks up variable references in the PageContext, and also
027     * recognizes references to implicit objects.
028     * 
029     * @author Nathan Abramson - Art Technology Group
030     * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: mbenson $
031     **/
032    
033    public class VariableResolverImpl
034      implements VariableResolver
035    {
036      //-------------------------------------
037      // Member variables
038      //-------------------------------------
039    
040      private PageContext mCtx;
041    
042      //-------------------------------------
043      /**
044       *
045       * Constructor
046       **/
047      public VariableResolverImpl (PageContext pCtx)
048      {
049        mCtx = pCtx;
050      }
051      
052      //-------------------------------------
053      /**
054       *
055       * Resolves the specified variable within the given context.
056       * Returns null if the variable is not found.
057       **/
058      public Object resolveVariable (String pName)
059        throws ELException
060      {
061        // Check for implicit objects
062        if ("pageContext".equals (pName)) {
063          return mCtx;
064        }
065        else if ("pageScope".equals (pName)) {
066          return ImplicitObjects.
067            getImplicitObjects (mCtx).
068            getPageScopeMap ();
069        }
070        else if ("requestScope".equals (pName)) {
071          return ImplicitObjects.
072            getImplicitObjects (mCtx).
073            getRequestScopeMap ();
074        }
075        else if ("sessionScope".equals (pName)) {
076          return ImplicitObjects.
077            getImplicitObjects (mCtx).
078            getSessionScopeMap ();
079        }
080        else if ("applicationScope".equals (pName)) {
081          return ImplicitObjects.
082            getImplicitObjects (mCtx).
083            getApplicationScopeMap ();
084        }
085        else if ("param".equals (pName)) {
086          return ImplicitObjects.
087            getImplicitObjects (mCtx).
088            getParamMap ();
089        }
090        else if ("paramValues".equals (pName)) {
091          return ImplicitObjects.
092            getImplicitObjects (mCtx).
093            getParamsMap ();
094        }
095        else if ("header".equals (pName)) {
096          return ImplicitObjects.
097            getImplicitObjects (mCtx).
098            getHeaderMap ();
099        }
100        else if ("headerValues".equals (pName)) {
101          return ImplicitObjects.
102            getImplicitObjects (mCtx).
103            getHeadersMap ();
104        }
105        else if ("initParam".equals (pName)) {
106          return ImplicitObjects.
107            getImplicitObjects (mCtx).
108            getInitParamMap ();
109        }
110        else if ("cookie".equals (pName)) {
111          return ImplicitObjects.
112            getImplicitObjects (mCtx).
113            getCookieMap ();
114        }
115    
116        // Otherwise, just look it up in the page context
117        else {
118          return mCtx.findAttribute (pName);
119        }
120      }
121                                            
122      //-------------------------------------
123    }