/* * 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 SoftwareFoundation, Inc. * 59 Temple Place, Suite 330 * Boston, MA 02111-1307 USA * * @author Scott Ferguson */ package com.caucho.jsf.el; import com.caucho.el.Expr; import com.caucho.vfs.WriteStream; import javax.el.ELContext; import javax.el.ELException; import javax.faces.context.*; import javax.faces.component.UIComponent; import java.io.IOException; import java.util.*; import java.util.logging.Level; public class ImplicitObjectExpr extends Expr { private static final HashMap<String,ImplicitObjectExpr> _exprMap = new HashMap<String,ImplicitObjectExpr>(); private String _id; private ImplicitEnum _code; private ImplicitObjectExpr(String id, ImplicitEnum code) { _id = id; _code = code; } static ImplicitObjectExpr create(String name) { return _exprMap.get(name); } /** * Evaluate the expr as an object. * * @param env the page context */ @Override public Object getValue(ELContext env) throws ELException { FacesContext context = (FacesContext) env.getContext(FacesContext.class); if (context == null) return null; switch (_code) { case APPLICATION: return context.getExternalContext().getContext(); case APPLICATION_SCOPE: return context.getExternalContext().getApplicationMap(); // case COMPONENT: { // try { // return context.getAttributes().get("component"); // } // catch (UnsupportedOperationException e) { // if (log.isLoggable(Level.FINEST)) // log.log(Level.FINEST, e.getMessage(), e); // } // // return null; // } case COOKIE: return context.getExternalContext().getRequestCookieMap(); case FACES_CONTEXT: return context; case HEADER: return context.getExternalContext().getRequestHeaderMap(); case HEADER_VALUES: return context.getExternalContext().getRequestHeaderValuesMap(); case INIT_PARAM: return context.getExternalContext().getInitParameterMap(); case PARAM: return context.getExternalContext().getRequestParameterMap(); case PARAM_VALUES: return context.getExternalContext().getRequestParameterValuesMap(); case REQUEST: return context.getExternalContext().getRequest(); case REQUEST_SCOPE: return context.getExternalContext().getRequestMap(); case SESSION: return context.getExternalContext().getSession(true); case SESSION_SCOPE: return context.getExternalContext().getSessionMap(); case VIEW: return context.getViewRoot(); } throw new UnsupportedOperationException(); } public String toString() { return _id; } /** * Prints the code to create an IdExpr. */ public void printCreate(WriteStream os) throws IOException { os.print("com.caucho.jsf.el.ImplicitObjectExpr.create(\""); printEscapedString(os, _id); os.print("\")"); } enum ImplicitEnum { APPLICATION, APPLICATION_SCOPE, // COMPONENT, COOKIE, FACES_CONTEXT, HEADER, HEADER_VALUES, INIT_PARAM, PARAM, PARAM_VALUES, RESOURCE, REQUEST, REQUEST_SCOPE, SESSION, SESSION_SCOPE, VIEW, }; static { _exprMap.put("application", new ImplicitObjectExpr("application", ImplicitEnum.APPLICATION)); _exprMap.put("applicationScope", new ImplicitObjectExpr("applicationScope", ImplicitEnum.APPLICATION_SCOPE)); // _exprMap.put("component", // new ImplicitObjectExpr("component", // ImplicitEnum.COMPONENT)); _exprMap.put("cookie", new ImplicitObjectExpr("cookie", ImplicitEnum.COOKIE)); _exprMap.put("facesContext", new ImplicitObjectExpr("facesContext", ImplicitEnum.FACES_CONTEXT)); _exprMap.put("header", new ImplicitObjectExpr("header", ImplicitEnum.HEADER)); _exprMap.put("headerValues", new ImplicitObjectExpr("headerValues", ImplicitEnum.HEADER_VALUES)); _exprMap.put("initParam", new ImplicitObjectExpr("initParam", ImplicitEnum.INIT_PARAM)); _exprMap.put("param", new ImplicitObjectExpr("param", ImplicitEnum.PARAM)); _exprMap.put("paramValues", new ImplicitObjectExpr("paramValues", ImplicitEnum.PARAM_VALUES)); _exprMap.put("request", new ImplicitObjectExpr("request", ImplicitEnum.REQUEST)); _exprMap.put("requestScope", new ImplicitObjectExpr("requestScope", ImplicitEnum.REQUEST_SCOPE)); _exprMap.put("resource", new ImplicitObjectExpr("resource", ImplicitEnum.RESOURCE)); _exprMap.put("session", new ImplicitObjectExpr("session", ImplicitEnum.SESSION)); _exprMap.put("sessionScope", new ImplicitObjectExpr("sessionScope", ImplicitEnum.SESSION_SCOPE)); _exprMap.put("view", new ImplicitObjectExpr("view", ImplicitEnum.VIEW)); } }