001/*
002 * (C) Copyright 2013 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 *
016 * Contributors:
017 *     Anahide Tchertchian
018 */
019package org.nuxeo.ecm.platform.actions.seam;
020
021import javax.el.ArrayELResolver;
022import javax.el.BeanELResolver;
023import javax.el.CompositeELResolver;
024import javax.el.ELContext;
025import javax.el.ELResolver;
026import javax.el.ExpressionFactory;
027import javax.el.ListELResolver;
028import javax.el.MapELResolver;
029import javax.el.ResourceBundleELResolver;
030
031import org.jboss.el.ExpressionFactoryImpl;
032import org.jboss.el.lang.FunctionMapperImpl;
033import org.jboss.seam.el.EL;
034import org.jboss.seam.el.SeamELResolver;
035import org.nuxeo.ecm.platform.actions.ELActionContext;
036import org.nuxeo.ecm.platform.el.DocumentModelResolver;
037
038/**
039 * Sample Seam action context, resolving components in Seam context (but not relying on faces context to do so)
040 * <p>
041 * Adds the {@link DocumentModelResolver} at the top of the list of default Seam resolvers.
042 *
043 * @since 5.7.3
044 */
045public class SeamActionContext extends ELActionContext {
046
047    private static final long serialVersionUID = 1L;
048
049    public static final ELResolver EL_RESOLVER = createELResolver();
050
051    public static ELResolver createELResolver() {
052        CompositeELResolver resolver = new CompositeELResolver();
053        resolver.add(new DocumentModelResolver());
054        resolver.add(new SeamELResolver());
055        resolver.add(new MapELResolver());
056        resolver.add(new ListELResolver());
057        resolver.add(new ArrayELResolver());
058        resolver.add(new ResourceBundleELResolver());
059        resolver.add(new BeanELResolver());
060        return resolver;
061    }
062
063    public static final ExpressionFactory EXPRESSION_FACTORY = new ExpressionFactoryImpl();
064
065    public SeamActionContext() {
066        super(EL.createELContext(EL_RESOLVER, new FunctionMapperImpl()), EXPRESSION_FACTORY);
067    }
068
069    public SeamActionContext(ELContext originalContext, ExpressionFactory expressionFactory) {
070        super(originalContext, expressionFactory);
071    }
072
073}