Package org.apache.jasper.runtime

Source Code of org.apache.jasper.runtime.JspApplicationContextImpl

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jasper.runtime;

import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.el.ArrayELResolver;
import javax.el.BeanELResolver;
import javax.el.CompositeELResolver;
import javax.el.ELContextEvent;
import javax.el.ELContextListener;
import javax.el.ELResolver;
import javax.el.ExpressionFactory;
import javax.el.ListELResolver;
import javax.el.MapELResolver;
import javax.el.ResourceBundleELResolver;
import javax.servlet.ServletContext;
import javax.servlet.jsp.JspApplicationContext;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.el.ImplicitObjectELResolver;
import javax.servlet.jsp.el.ScopedAttributeELResolver;

import org.apache.jasper.Constants;
import org.apache.jasper.el.ELContextImpl;

/**
* Implementation of JspApplicationContext
*
* @author Jacob Hookom
*/
public class JspApplicationContextImpl implements JspApplicationContext {

  private final static String KEY = JspApplicationContextImpl.class.getName();

    private final static ExpressionFactory expressionFactory =
        ExpressionFactory.newInstance();

  private final List<ELContextListener> contextListeners = new ArrayList<ELContextListener>();

  private final List<ELResolver> resolvers = new ArrayList<ELResolver>();

  private boolean instantiated = false;

  private ELResolver resolver;

  public JspApplicationContextImpl() {

  }

  public void addELContextListener(ELContextListener listener) {
    if (listener == null) {
      throw new IllegalArgumentException("ELConextListener was null");
    }
    this.contextListeners.add(listener);
  }

  public static JspApplicationContextImpl getInstance(ServletContext context) {
    if (context == null) {
      throw new IllegalArgumentException("ServletContext was null");
    }
    JspApplicationContextImpl impl = (JspApplicationContextImpl) context
        .getAttribute(KEY);
    if (impl == null) {
      impl = new JspApplicationContextImpl();
      context.setAttribute(KEY, impl);
    }
    return impl;
  }

  public ELContextImpl createELContext(JspContext context) {
    if (context == null) {
      throw new IllegalArgumentException("JspContext was null");
    }

    // create ELContext for JspContext
        final ELResolver r = this.createELResolver();
        ELContextImpl ctx;
        if (Constants.IS_SECURITY_ENABLED) {
            ctx = AccessController.doPrivileged(
                    new PrivilegedAction<ELContextImpl>() {
                        public ELContextImpl run() {
                            return new ELContextImpl(r);
                        }
                    });
        } else {
            ctx = new ELContextImpl(r);
        }
    ctx.putContext(JspContext.class, context);

    // alert all ELContextListeners
    ELContextEvent event = new ELContextEvent(ctx);
    for (int i = 0; i < this.contextListeners.size(); i++) {
      this.contextListeners.get(i).contextCreated(event);
    }

    return ctx;
  }

  private ELResolver createELResolver() {
    this.instantiated = true;
    if (this.resolver == null) {
      CompositeELResolver r = new CompositeELResolver();
      r.add(new ImplicitObjectELResolver());
      for (Iterator itr = this.resolvers.iterator(); itr.hasNext();) {
        r.add((ELResolver) itr.next());
      }
      r.add(new MapELResolver());
      r.add(new ResourceBundleELResolver());
      r.add(new ListELResolver());
      r.add(new ArrayELResolver())
      r.add(new BeanELResolver());
      r.add(new ScopedAttributeELResolver());
      this.resolver = r;
    }
    return this.resolver;
  }

  public void addELResolver(ELResolver resolver) throws IllegalStateException {
    if (resolver == null) {
      throw new IllegalArgumentException("ELResolver was null");
    }
    if (this.instantiated) {
      throw new IllegalStateException(
          "cannot call addELResolver after the first request has been made");
    }
    this.resolvers.add(resolver);
  }

  public ExpressionFactory getExpressionFactory() {
    return expressionFactory;
  }

}
TOP

Related Classes of org.apache.jasper.runtime.JspApplicationContextImpl

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.