Package org.apache.tiles.ognl

Source Code of org.apache.tiles.ognl.TilesContextPropertyAccessorDelegateFactory

/*
* $Id: TilesContextPropertyAccessorDelegateFactory.java 1049696 2010-12-15 20:30:10Z apetrelli $
*
* 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.tiles.ognl;

import ognl.PropertyAccessor;

import org.apache.tiles.request.ApplicationContext;
import org.apache.tiles.request.Request;
import org.apache.tiles.util.CombinedBeanInfo;

/**
* Decides the appropriate {@link PropertyAccessor} for the given property name
* and {@link Request}.
*
* @version $Rev: 1049696 $ $Date: 2010-12-15 21:30:10 +0100 (Wed, 15 Dec 2010) $
* @since 2.2.0
*/
public class TilesContextPropertyAccessorDelegateFactory implements
        PropertyAccessorDelegateFactory<Request> {

    /**
     * The plain object property accessor, to be used directly for
     * {@link Request}.
     */
    private PropertyAccessor objectPropertyAccessor;

    /**
     * The application context property accessor.
     */
    private PropertyAccessor applicationContextPropertyAccessor;

    /**
     * The request scope property accessor.
     */
    private PropertyAccessor anyScopePropertyAccessor;

    /**
     * The session scope property accessor.
     */
    private PropertyAccessor scopePropertyAccessor;

    /**
     * The bean info of {@link Request} and
     * {@link org.apache.tiles.request.ApplicationContext}.
     */
    private CombinedBeanInfo beanInfo;

    /**
     * Constructor.
     *
     * @param objectPropertyAccessor The plain object property accessor, to be
     * used directly for {@link Request}.
     * @param applicationContextPropertyAccessor The application context
     * property accessor.
     * @param anyScopePropertyAccessor The request scope property accessor.
     * @param scopePropertyAccessor The session scope property accessor.
     * @since 2.2.0
     */
    public TilesContextPropertyAccessorDelegateFactory(
            PropertyAccessor objectPropertyAccessor,
            PropertyAccessor applicationContextPropertyAccessor,
            PropertyAccessor anyScopePropertyAccessor,
            PropertyAccessor scopePropertyAccessor) {
        beanInfo = new CombinedBeanInfo(Request.class, ApplicationContext.class);
        this.objectPropertyAccessor = objectPropertyAccessor;
        this.applicationContextPropertyAccessor = applicationContextPropertyAccessor;
        this.anyScopePropertyAccessor = anyScopePropertyAccessor;
        this.scopePropertyAccessor = scopePropertyAccessor;
    }

    /** {@inheritDoc} */
    public PropertyAccessor getPropertyAccessor(String propertyName,
            Request request) {
        PropertyAccessor retValue;
        if (propertyName.endsWith("Scope")) {
            String scopeName = propertyName.substring(0, propertyName.length()
                    - ScopePropertyAccessor.SCOPE_SUFFIX_LENGTH);
            if (request.getContext(scopeName) != null) {
                return scopePropertyAccessor;
            }
        }
        if (beanInfo.getMappedDescriptors(Request.class)
                .containsKey(propertyName)) {
            retValue = objectPropertyAccessor;
        } else if (beanInfo.getMappedDescriptors(ApplicationContext.class)
                .containsKey(propertyName)) {
            retValue = applicationContextPropertyAccessor;
        } else {
            return anyScopePropertyAccessor;
        }
        return retValue;
    }
}
TOP

Related Classes of org.apache.tiles.ognl.TilesContextPropertyAccessorDelegateFactory

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.