You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by ap...@apache.org on 2009/07/12 13:41:00 UTC
svn commit: r793334 [1/2] - in /tiles/framework/trunk: src/site/apt/
src/site/apt/tutorial/advanced/ src/site/xdoc/ tiles-core/
tiles-core/src/main/java/org/apache/tiles/evaluator/
tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/ tiles-core/sr...
Author: apetrelli
Date: Sun Jul 12 11:40:59 2009
New Revision: 793334
URL: http://svn.apache.org/viewvc?rev=793334&view=rev
Log:
TILES-422
Added OGNL support.
Added Selenium tests.
Added documentation.
Added:
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/EvaluationException.java (with props)
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/ApplicationScopeNestedObjectExtractor.java (with props)
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/DelegatePropertyAccessor.java (with props)
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/NestedObjectDelegatePropertyAccessor.java (with props)
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/NestedObjectExtractor.java (with props)
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluator.java (with props)
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/PropertyAccessorDelegateFactory.java (with props)
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/RequestScopeNestedObjectExtractor.java (with props)
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/SessionScopeNestedObjectExtractor.java (with props)
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/TilesApplicationContextNestedObjectExtractor.java (with props)
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/TilesContextPropertyAccessorDelegateFactory.java (with props)
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/package.html (with props)
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/ApplicationScopeNestedObjectExtractorTest.java (with props)
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/DelegatePropertyAccessorTest.java (with props)
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/NestedObjectDelegatePropertyAccessorTest.java (with props)
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluatorTest.java (with props)
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/RequestScopeNestedObjectExtractorTest.java (with props)
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/SessionScopeNestedObjectExtractorTest.java (with props)
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/TilesApplicationContextNestedObjectExtractorTest.java (with props)
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/TilesContextPropertyAccessorDelegateFactoryTest.java (with props)
tiles/framework/trunk/tiles-test/src/main/webapp/freemarker/testinsertdefinition_ognl.ftl (with props)
tiles/framework/trunk/tiles-test/src/main/webapp/testinsertdefinition_ognl.jsp (with props)
tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testinsertdefinition_ognl.vm
tiles/framework/trunk/tiles-test/src/test/selenium/ConfiguredDefinitionOGNLTest.html (with props)
tiles/framework/trunk/tiles-test/src/test/selenium/freemarker/ConfiguredDefinitionOGNLTest.html (with props)
tiles/framework/trunk/tiles-test/src/test/selenium/velocity/ConfiguredDefinitionOGNLTest.html (with props)
Modified:
tiles/framework/trunk/src/site/apt/tutorial/advanced/el-support.apt
tiles/framework/trunk/src/site/apt/whats-new.apt
tiles/framework/trunk/src/site/xdoc/index.xml
tiles/framework/trunk/tiles-core/pom.xml
tiles/framework/trunk/tiles-test/pom.xml
tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/factory/TestTilesContainerFactory.java
tiles/framework/trunk/tiles-test/src/main/webapp/WEB-INF/freemarker/tiles-defs.xml
tiles/framework/trunk/tiles-test/src/main/webapp/WEB-INF/tiles-defs.xml
tiles/framework/trunk/tiles-test/src/main/webapp/WEB-INF/velocity/tiles-defs.xml
tiles/framework/trunk/tiles-test/src/main/webapp/index.jsp
tiles/framework/trunk/tiles-test/src/test/selenium/TestSuite.html
Modified: tiles/framework/trunk/src/site/apt/tutorial/advanced/el-support.apt
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/src/site/apt/tutorial/advanced/el-support.apt?rev=793334&r1=793333&r2=793334&view=diff
==============================================================================
--- tiles/framework/trunk/src/site/apt/tutorial/advanced/el-support.apt (original)
+++ tiles/framework/trunk/src/site/apt/tutorial/advanced/el-support.apt Sun Jul 12 11:40:59 2009
@@ -27,7 +27,7 @@
definition files.
Currently supported languages are EL (as in javax.el), i.e. the language used in JSP code,
- and {{{http://mvel.codehaus.org/}MVEL}}.
+ {{{http://mvel.codehaus.org/}MVEL}} and {{{http://www.opensymphony.com/ognl/}OGNL}}.
* Configuration
@@ -140,7 +140,7 @@
* The body will be taken from the "body" attribute in request scope.
-* MVEL Support
+* {MVEL Support}
To use MVEL support you need to register an instance of
{{{../../apidocs/org/apache/tiles/evaluator/mvel/MVELAttributeEvaluator.html} MVELAttributeEvaluator}}
@@ -176,7 +176,66 @@
preparer="org.apache.tiles.test.preparer.RequestSettingViewPreparer">
<put-attribute name="title" value="This is a configured composite definition."/>
<put-attribute name="header" value="/header.jsp"/>
- <put-attribute name="body" expression="${requestScope.body}"/>
+ <put-attribute name="body" expression="MVEL:requestScope.body"/>
+ </definition>
+------------------------------------
+
+ Before rendering the definition:
+
+ * The template name will be taken from the "layout" attribute, searched in every scope.
+
+ * The body will be taken from the "body" attribute in request scope.
+
+* {OGNL Support}
+
+ To use OGNL support you need to register an instance of
+ {{{../../apidocs/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluator.html} OGNLAttributeEvaluator}}
+ along with other supporting objects.
+
+------------------------------------
+@Override
+protected AttributeEvaluatorFactory createAttributeEvaluatorFactory(
+ TilesApplicationContext applicationContext,
+ TilesRequestContextFactory contextFactory, LocaleResolver resolver) {
+ try {
+ PropertyAccessor objectPropertyAccessor = OgnlRuntime.getPropertyAccessor(Object.class);
+ PropertyAccessor mapPropertyAccessor = OgnlRuntime.getPropertyAccessor(Map.class);
+ PropertyAccessor applicationContextPropertyAccessor = new NestedObjectDelegatePropertyAccessor<TilesRequestContext>(
+ new TilesApplicationContextNestedObjectExtractor(),
+ objectPropertyAccessor);
+ PropertyAccessor requestScopePropertyAccessor = new NestedObjectDelegatePropertyAccessor<TilesRequestContext>(
+ new RequestScopeNestedObjectExtractor(), mapPropertyAccessor);
+ PropertyAccessor sessionScopePropertyAccessor = new NestedObjectDelegatePropertyAccessor<TilesRequestContext>(
+ new SessionScopeNestedObjectExtractor(), mapPropertyAccessor);
+ PropertyAccessor applicationScopePropertyAccessor = new NestedObjectDelegatePropertyAccessor<TilesRequestContext>(
+ new ApplicationScopeNestedObjectExtractor(), mapPropertyAccessor);
+ PropertyAccessorDelegateFactory<TilesRequestContext> factory = new TilesContextPropertyAccessorDelegateFactory(
+ objectPropertyAccessor, applicationContextPropertyAccessor,
+ requestScopePropertyAccessor, sessionScopePropertyAccessor,
+ applicationScopePropertyAccessor);
+ PropertyAccessor tilesRequestAccessor = new DelegatePropertyAccessor<TilesRequestContext>(factory);
+ OgnlRuntime.setPropertyAccessor(TilesRequestContext.class, tilesRequestAccessor);
+ } catch (OgnlException e) {
+ throw new TilesTestRuntimeException("Cannot initialize OGNL evaluator", e);
+ }
+
+ BasicAttributeEvaluatorFactory attributeEvaluatorFactory = new BasicAttributeEvaluatorFactory(
+ new DirectAttributeEvaluator());
+ attributeEvaluatorFactory.registerAttributeEvaluator("MVEL", new OGNLAttributeEvaluator());
+ return attributeEvaluatorFactory;
+}
+------------------------------------
+
+** Usage
+
+ Let's use this example:
+
+------------------------------------
+ <definition name="test.composite.mvel.definition" templateExpression="OGNL:layout"
+ preparer="org.apache.tiles.test.preparer.RequestSettingViewPreparer">
+ <put-attribute name="title" value="This is a configured composite definition."/>
+ <put-attribute name="header" value="/header.jsp"/>
+ <put-attribute name="body" expression="OGNL:requestScope.body"/>
</definition>
------------------------------------
Modified: tiles/framework/trunk/src/site/apt/whats-new.apt
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/src/site/apt/whats-new.apt?rev=793334&r1=793333&r2=793334&view=diff
==============================================================================
--- tiles/framework/trunk/src/site/apt/whats-new.apt (original)
+++ tiles/framework/trunk/src/site/apt/whats-new.apt Sun Jul 12 11:40:59 2009
@@ -38,9 +38,9 @@
* Support for wildcard mathing using
{{{tutorial/advanced/wildcard.html}regular expressions}}.
- * {{{tutorial/advanced/ognl-support.html}OGNL support}}
+ * {{{tutorial/advanced/el-support.html#OGNL_Support}OGNL support}}
and
- {{{tutorial/advanced/mvel-support.html}MVEL support}}
+ {{{tutorial/advanced/el-support.html#MVEL_Support}MVEL support}}
in Tiles definition files, when specifying attributes and templates.
* New features in Tiles 2.1
Modified: tiles/framework/trunk/src/site/xdoc/index.xml
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/src/site/xdoc/index.xml?rev=793334&r1=793333&r2=793334&view=diff
==============================================================================
--- tiles/framework/trunk/src/site/xdoc/index.xml (original)
+++ tiles/framework/trunk/src/site/xdoc/index.xml Sun Jul 12 11:40:59 2009
@@ -41,13 +41,13 @@
elements or embedded within other tiles to develop a series of reusable
templates. These templates streamline the development of a consistent
look and feel across an entire application.</p>
-
+
<p><a href="/download-21.html">Download Tiles</a></p>
<p><a href="security/index.html">Security bulletins</a></p>
-
+
<subsection name="Documentation">
<ul>
- <li><a href="whats-new.html"><strong>What's new in Tiles 2.1</strong></a></li>
+ <li><a href="whats-new.html"><strong>What's new in Tiles 2.2</strong></a></li>
<li><a href="getting_started.html">Getting Started</a></li>
<li><a href="tutorial/index.html">Tutorial</a></li>
<li><a href="migration/index.html">Migration from Struts-Tiles</a></li>
Modified: tiles/framework/trunk/tiles-core/pom.xml
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/pom.xml?rev=793334&r1=793333&r2=793334&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/pom.xml (original)
+++ tiles/framework/trunk/tiles-core/pom.xml Sun Jul 12 11:40:59 2009
@@ -152,6 +152,13 @@
</dependency>
<dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymockclassextension</artifactId>
+ <version>2.4</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.shale</groupId>
<artifactId>shale-test</artifactId>
<version>1.0.5</version>
@@ -170,6 +177,12 @@
<version>2.0.11</version>
<optional>true</optional>
</dependency>
+ <dependency>
+ <groupId>ognl</groupId>
+ <artifactId>ognl</artifactId>
+ <version>2.7.3</version>
+ <optional>true</optional>
+ </dependency>
</dependencies>
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/EvaluationException.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/EvaluationException.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/EvaluationException.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/EvaluationException.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,72 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator;
+
+import org.apache.tiles.TilesException;
+
+/**
+ * Exception raised when an expression language evaluation fails.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class EvaluationException extends TilesException {
+
+ /**
+ * Constructor.
+ *
+ * @since 2.2.0
+ */
+ public EvaluationException() {
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message The message-
+ * @since 2.2.0
+ */
+ public EvaluationException(String message) {
+ super(message);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param e The cause.
+ * @since 2.2.0
+ */
+ public EvaluationException(Exception e) {
+ super(e);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message The message-
+ * @param e The cause.
+ * @since 2.2.0
+ */
+ public EvaluationException(String message, Exception e) {
+ super(message, e);
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/EvaluationException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/EvaluationException.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/ApplicationScopeNestedObjectExtractor.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/ApplicationScopeNestedObjectExtractor.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/ApplicationScopeNestedObjectExtractor.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/ApplicationScopeNestedObjectExtractor.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,41 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import java.util.Map;
+
+import org.apache.tiles.context.TilesRequestContext;
+
+/**
+ * Extracts the application scope from a Tiles request.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class ApplicationScopeNestedObjectExtractor implements
+ NestedObjectExtractor<TilesRequestContext> {
+
+ /** {@inheritDoc} */
+ public Map<String, Object> getNestedObject(TilesRequestContext obj) {
+ return obj.getApplicationContext().getApplicationScope();
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/ApplicationScopeNestedObjectExtractor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/ApplicationScopeNestedObjectExtractor.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/DelegatePropertyAccessor.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/DelegatePropertyAccessor.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/DelegatePropertyAccessor.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/DelegatePropertyAccessor.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,88 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import java.util.Map;
+
+import ognl.OgnlContext;
+import ognl.OgnlException;
+import ognl.PropertyAccessor;
+
+/**
+ * Uses a {@link PropertyAccessorDelegateFactory} to delegate the methods to
+ * another {@link PropertyAccessor}.
+ *
+ * @param <T> The type of the accessed root object.
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class DelegatePropertyAccessor<T> implements PropertyAccessor {
+
+ /**
+ * The property accessor factory.
+ *
+ * @since 2.2.0
+ */
+ private PropertyAccessorDelegateFactory<T> factory;
+
+ /**
+ * Constructor.
+ *
+ * @param factory The property accessor factory.
+ * @since 2.2.0
+ */
+ public DelegatePropertyAccessor(PropertyAccessorDelegateFactory<T> factory) {
+ this.factory = factory;
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ public Object getProperty(Map context, Object target, Object name)
+ throws OgnlException {
+ return factory.getPropertyAccessor((String) name, (T) target).getProperty(
+ context, target, name);
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ public void setProperty(Map context, Object target, Object name,
+ Object value) throws OgnlException {
+ factory.getPropertyAccessor((String) name, (T) target).setProperty(context,
+ target, name, value);
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ public String getSourceAccessor(OgnlContext context, Object target,
+ Object index) {
+ return factory.getPropertyAccessor((String) index, (T) target)
+ .getSourceAccessor(context, target, index);
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ public String getSourceSetter(OgnlContext context, Object target,
+ Object index) {
+ return factory.getPropertyAccessor((String) index, (T) target)
+ .getSourceSetter(context, target, index);
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/DelegatePropertyAccessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/DelegatePropertyAccessor.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/NestedObjectDelegatePropertyAccessor.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/NestedObjectDelegatePropertyAccessor.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/NestedObjectDelegatePropertyAccessor.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/NestedObjectDelegatePropertyAccessor.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,101 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import java.util.Map;
+
+import ognl.OgnlContext;
+import ognl.OgnlException;
+import ognl.PropertyAccessor;
+
+/**
+ * Uses a {@link PropertyAccessor} as a delegate, but passing a nested object as
+ * target.
+ *
+ * @param <T> The root object type from which the target object will be
+ * extracted.
+ * @since 2.2.0
+ * @version $Rev$ $Date$
+ */
+public class NestedObjectDelegatePropertyAccessor<T> implements
+ PropertyAccessor {
+
+ /**
+ * The extractor of the nested object.
+ *
+ * @since 2.2.0
+ */
+ private NestedObjectExtractor<T> nestedObjectExtractor;
+
+ /**
+ * The delegated property accessor.
+ *
+ * @since 2.2.0
+ */
+ private PropertyAccessor propertyAccessor;
+
+ /**
+ * Constructor.
+ *
+ * @param nestedObjectExtractor The extractor of the nested object.
+ * @param propertyAccessor The delegated property accessor.
+ * @since 2.2.0
+ */
+ public NestedObjectDelegatePropertyAccessor(
+ NestedObjectExtractor<T> nestedObjectExtractor,
+ PropertyAccessor propertyAccessor) {
+ this.nestedObjectExtractor = nestedObjectExtractor;
+ this.propertyAccessor = propertyAccessor;
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ public Object getProperty(Map context, Object target, Object name)
+ throws OgnlException {
+ return propertyAccessor.getProperty(context, nestedObjectExtractor
+ .getNestedObject((T) target), name);
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ public void setProperty(Map context, Object target, Object name,
+ Object value) throws OgnlException {
+ propertyAccessor.setProperty(context, nestedObjectExtractor
+ .getNestedObject((T) target), name, value);
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ public String getSourceAccessor(OgnlContext context, Object target,
+ Object index) {
+ return propertyAccessor.getSourceAccessor(context,
+ nestedObjectExtractor.getNestedObject((T) target), index);
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ public String getSourceSetter(OgnlContext context, Object target,
+ Object index) {
+ return propertyAccessor.getSourceSetter(context, nestedObjectExtractor
+ .getNestedObject((T) target), index);
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/NestedObjectDelegatePropertyAccessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/NestedObjectDelegatePropertyAccessor.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/NestedObjectExtractor.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/NestedObjectExtractor.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/NestedObjectExtractor.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/NestedObjectExtractor.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,41 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+/**
+ * Extracts an object using another object as a basis.
+ *
+ * @param <T> The type of the root object.
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public interface NestedObjectExtractor<T> {
+
+ /**
+ * Extracts the nested object.
+ *
+ * @param obj The root object.
+ * @return The extracted nested object.
+ * @since 2.2.0
+ */
+ Object getNestedObject(T obj);
+}
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/NestedObjectExtractor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/NestedObjectExtractor.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluator.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluator.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluator.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluator.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,58 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import java.util.Map;
+
+import ognl.Ognl;
+import ognl.OgnlException;
+
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.evaluator.AbstractAttributeEvaluator;
+import org.apache.tiles.evaluator.EvaluationException;
+
+/**
+ * Evaluates attribute expressions and expressions with OGNL language.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class OGNLAttributeEvaluator extends AbstractAttributeEvaluator {
+
+ /** {@inheritDoc} */
+ public Object evaluate(String expression, TilesRequestContext request) {
+ if (expression == null) {
+ throw new IllegalArgumentException("The expression parameter cannot be null");
+ }
+ try {
+ return Ognl.getValue(expression, request);
+ } catch (OgnlException e) {
+ throw new EvaluationException("Cannot evaluate OGNL expression '"
+ + expression + "'", e);
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void init(Map<String, String> initParameters) {
+ // Nothing to initialize.
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluator.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/PropertyAccessorDelegateFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/PropertyAccessorDelegateFactory.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/PropertyAccessorDelegateFactory.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/PropertyAccessorDelegateFactory.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,46 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import ognl.PropertyAccessor;
+
+/**
+ * Decides a {@link PropertyAccessor} depending on the property name and the
+ * object to evaluate.
+ *
+ * @param <T> The type of the root object to evaluate.
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public interface PropertyAccessorDelegateFactory<T> {
+
+ /**
+ * Returns a prooerty accessor appropriate for the property name and the
+ * object passed.
+ *
+ * @param propertyName The name of the property.
+ * @param obj The root object to evaluate.
+ * @return The appropriate property accessor.
+ * @since 2.2.0
+ */
+ PropertyAccessor getPropertyAccessor(String propertyName, T obj);
+}
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/PropertyAccessorDelegateFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/PropertyAccessorDelegateFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/RequestScopeNestedObjectExtractor.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/RequestScopeNestedObjectExtractor.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/RequestScopeNestedObjectExtractor.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/RequestScopeNestedObjectExtractor.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,41 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import java.util.Map;
+
+import org.apache.tiles.context.TilesRequestContext;
+
+/**
+ * Extracts the request scope from a Tiles request.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class RequestScopeNestedObjectExtractor implements
+ NestedObjectExtractor<TilesRequestContext> {
+
+ /** {@inheritDoc} */
+ public Map<String, Object> getNestedObject(TilesRequestContext obj) {
+ return obj.getRequestScope();
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/RequestScopeNestedObjectExtractor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/RequestScopeNestedObjectExtractor.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/SessionScopeNestedObjectExtractor.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/SessionScopeNestedObjectExtractor.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/SessionScopeNestedObjectExtractor.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/SessionScopeNestedObjectExtractor.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,41 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import java.util.Map;
+
+import org.apache.tiles.context.TilesRequestContext;
+
+/**
+ * Extracts the session scope from a Tiles request.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class SessionScopeNestedObjectExtractor implements
+ NestedObjectExtractor<TilesRequestContext> {
+
+ /** {@inheritDoc} */
+ public Map<String, Object> getNestedObject(TilesRequestContext obj) {
+ return obj.getSessionScope();
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/SessionScopeNestedObjectExtractor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/SessionScopeNestedObjectExtractor.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/TilesApplicationContextNestedObjectExtractor.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/TilesApplicationContextNestedObjectExtractor.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/TilesApplicationContextNestedObjectExtractor.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/TilesApplicationContextNestedObjectExtractor.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,40 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.context.TilesRequestContext;
+
+/**
+ * Extracts the application context from a Tiles request.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class TilesApplicationContextNestedObjectExtractor implements
+ NestedObjectExtractor<TilesRequestContext> {
+
+ /** {@inheritDoc} */
+ public TilesApplicationContext getNestedObject(TilesRequestContext obj) {
+ return obj.getApplicationContext();
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/TilesApplicationContextNestedObjectExtractor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/TilesApplicationContextNestedObjectExtractor.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/TilesContextPropertyAccessorDelegateFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/TilesContextPropertyAccessorDelegateFactory.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/TilesContextPropertyAccessorDelegateFactory.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/TilesContextPropertyAccessorDelegateFactory.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,130 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import java.util.Map;
+
+import ognl.PropertyAccessor;
+
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.evaluator.el.TilesRequestContextBeanInfo;
+
+/**
+ * Decides the appropriate {@link PropertyAccessor} for the given property name
+ * and {@link TilesRequestContext}.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class TilesContextPropertyAccessorDelegateFactory implements
+ PropertyAccessorDelegateFactory<TilesRequestContext> {
+
+ /**
+ * The plain object property accessor, to be used directly for
+ * {@link TilesRequestContext}.
+ */
+ private PropertyAccessor objectPropertyAccessor;
+
+ /**
+ * The application context property accessor.
+ */
+ private PropertyAccessor applicationContextPropertyAccessor;
+
+ /**
+ * The request scope property accessor.
+ */
+ private PropertyAccessor requestScopePropertyAccessor;
+
+ /**
+ * The session scope property accessor.
+ */
+ private PropertyAccessor sessionScopePropertyAccessor;
+
+ /**
+ * The application scope property accessor.
+ */
+ private PropertyAccessor applicationScopePropertyAccessor;
+
+ /**
+ * The bean info of {@link TilesRequestContext} and
+ * {@link org.apache.tiles.TilesApplicationContext}.
+ */
+ private TilesRequestContextBeanInfo beanInfo;
+
+ /**
+ * Constructor.
+ *
+ * @param objectPropertyAccessor The plain object property accessor, to be
+ * used directly for {@link TilesRequestContext}.
+ * @param applicationContextPropertyAccessor The application context
+ * property accessor.
+ * @param requestScopePropertyAccessor The request scope property accessor.
+ * @param sessionScopePropertyAccessor The session scope property accessor.
+ * @param applicationScopePropertyAccessor The application scope property
+ * accessor.
+ * @since 2.2.0
+ */
+ public TilesContextPropertyAccessorDelegateFactory(
+ PropertyAccessor objectPropertyAccessor,
+ PropertyAccessor applicationContextPropertyAccessor,
+ PropertyAccessor requestScopePropertyAccessor,
+ PropertyAccessor sessionScopePropertyAccessor,
+ PropertyAccessor applicationScopePropertyAccessor) {
+ beanInfo = new TilesRequestContextBeanInfo();
+ this.objectPropertyAccessor = objectPropertyAccessor;
+ this.applicationContextPropertyAccessor = applicationContextPropertyAccessor;
+ this.requestScopePropertyAccessor = requestScopePropertyAccessor;
+ this.sessionScopePropertyAccessor = sessionScopePropertyAccessor;
+ this.applicationScopePropertyAccessor = applicationScopePropertyAccessor;
+ }
+
+ /** {@inheritDoc} */
+ public PropertyAccessor getPropertyAccessor(String propertyName,
+ TilesRequestContext request) {
+ PropertyAccessor retValue;
+ if (beanInfo.getRequestDescriptors().containsKey(propertyName)) {
+ retValue = objectPropertyAccessor;
+ } else if (beanInfo.getApplicationDescriptors().containsKey(
+ propertyName)) {
+ retValue = applicationContextPropertyAccessor;
+ } else {
+ Map<String, Object> scopeMap = request.getRequestScope();
+ if (scopeMap.containsKey(propertyName)) {
+ retValue = requestScopePropertyAccessor;
+ } else {
+ scopeMap = request.getSessionScope();
+ if (scopeMap.containsKey(propertyName)) {
+ retValue = sessionScopePropertyAccessor;
+ } else {
+ scopeMap = request.getApplicationContext()
+ .getApplicationScope();
+ if (scopeMap.containsKey(propertyName)) {
+ retValue = applicationScopePropertyAccessor;
+ } else {
+ retValue = requestScopePropertyAccessor;
+ }
+ }
+ }
+ }
+ return retValue;
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/TilesContextPropertyAccessorDelegateFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/TilesContextPropertyAccessorDelegateFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/package.html
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/package.html?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/package.html (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/package.html Sun Jul 12 11:40:59 2009
@@ -0,0 +1,30 @@
+<!--
+/*
+ * $Id$
+ *
+ * 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.
+ */
+-->
+<html>
+<head>
+ <title>Tiles attribute evaluator OGNL implementation</title>
+</head>
+<body>
+Attribute evaluator classes that can perform OGNL evaluation for attributes.
+</body>
+</html>
\ No newline at end of file
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/package.html
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/ognl/package.html
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/ApplicationScopeNestedObjectExtractorTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/ApplicationScopeNestedObjectExtractorTest.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/ApplicationScopeNestedObjectExtractorTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/ApplicationScopeNestedObjectExtractorTest.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,59 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import static org.junit.Assert.*;
+import static org.easymock.EasyMock.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.context.TilesRequestContext;
+import org.junit.Test;
+
+/**
+ * Tests {@link ApplicationScopeNestedObjectExtractor}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class ApplicationScopeNestedObjectExtractorTest {
+
+ /**
+ * Tests {@link ApplicationScopeNestedObjectExtractor#getNestedObject(TilesRequestContext)}.
+ */
+ @Test
+ public void testGetNestedObject() {
+ TilesRequestContext request = createMock(TilesRequestContext.class);
+ TilesApplicationContext applicationContext = createMock(TilesApplicationContext.class);
+ expect(request.getApplicationContext()).andReturn(applicationContext);
+ Map<String, Object> map = new HashMap<String, Object>();
+ map.put("attribute1", "value1");
+ expect(applicationContext.getApplicationScope()).andReturn(map);
+
+ replay(request, applicationContext);
+ NestedObjectExtractor<TilesRequestContext> extractor = new ApplicationScopeNestedObjectExtractor();
+ assertEquals(map, extractor.getNestedObject(request));
+ verify(request, applicationContext);
+ }
+
+}
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/ApplicationScopeNestedObjectExtractorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/ApplicationScopeNestedObjectExtractorTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/DelegatePropertyAccessorTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/DelegatePropertyAccessorTest.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/DelegatePropertyAccessorTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/DelegatePropertyAccessorTest.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,115 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import static org.junit.Assert.*;
+import static org.easymock.classextension.EasyMock.*;
+
+import java.util.Map;
+
+import ognl.OgnlContext;
+import ognl.OgnlException;
+import ognl.PropertyAccessor;
+
+import org.junit.Test;
+
+/**
+ * Tests {@link DelegatePropertyAccessor}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class DelegatePropertyAccessorTest {
+
+ /**
+ * Test method for {@link DelegatePropertyAccessor#getProperty(java.util.Map, Object, Object)}.
+ * @throws OgnlException If something goes wrong.
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testGetProperty() throws OgnlException {
+ PropertyAccessorDelegateFactory<Integer> factory = createMock(PropertyAccessorDelegateFactory.class);
+ PropertyAccessor mockAccessor = createMock(PropertyAccessor.class);
+ Map<String, Object> context = createMock(Map.class);
+ expect(factory.getPropertyAccessor("property", 1)).andReturn(mockAccessor);
+ expect(mockAccessor.getProperty(context, 1, "property")).andReturn("value");
+
+ replay(factory, mockAccessor, context);
+ PropertyAccessor accessor = new DelegatePropertyAccessor<Integer>(factory);
+ assertEquals("value", accessor.getProperty(context, 1, "property"));
+ verify(factory, mockAccessor, context);
+ }
+
+ /**
+ * Test method for {@link DelegatePropertyAccessor#setProperty(java.util.Map, Object, Object, Object)}.
+ * @throws OgnlException If something goes wrong.
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testSetProperty() throws OgnlException {
+ PropertyAccessorDelegateFactory<Integer> factory = createMock(PropertyAccessorDelegateFactory.class);
+ PropertyAccessor mockAccessor = createMock(PropertyAccessor.class);
+ Map<String, Object> context = createMock(Map.class);
+ expect(factory.getPropertyAccessor("property", 1)).andReturn(mockAccessor);
+ mockAccessor.setProperty(context, 1, "property", "value");
+
+ replay(factory, mockAccessor, context);
+ PropertyAccessor accessor = new DelegatePropertyAccessor<Integer>(factory);
+ accessor.setProperty(context, 1, "property", "value");
+ verify(factory, mockAccessor, context);
+ }
+
+ /**
+ * Test method for {@link DelegatePropertyAccessor#getSourceAccessor(ognl.OgnlContext, Object, Object)}.
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testGetSourceAccessor() {
+ PropertyAccessorDelegateFactory<Integer> factory = createMock(PropertyAccessorDelegateFactory.class);
+ PropertyAccessor mockAccessor = createMock(PropertyAccessor.class);
+ OgnlContext context = createMock(OgnlContext.class);
+ expect(factory.getPropertyAccessor("property", 1)).andReturn(mockAccessor);
+ expect(mockAccessor.getSourceAccessor(context, 1, "property")).andReturn("method");
+
+ replay(factory, mockAccessor, context);
+ PropertyAccessor accessor = new DelegatePropertyAccessor<Integer>(factory);
+ assertEquals("method", accessor.getSourceAccessor(context, 1, "property"));
+ verify(factory, mockAccessor, context);
+ }
+
+ /**
+ * Test method for {@link DelegatePropertyAccessor#getSourceSetter(ognl.OgnlContext, Object, Object)}.
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testGetSourceSetter() {
+ PropertyAccessorDelegateFactory<Integer> factory = createMock(PropertyAccessorDelegateFactory.class);
+ PropertyAccessor mockAccessor = createMock(PropertyAccessor.class);
+ OgnlContext context = createMock(OgnlContext.class);
+ expect(factory.getPropertyAccessor("property", 1)).andReturn(mockAccessor);
+ expect(mockAccessor.getSourceSetter(context, 1, "property")).andReturn("method");
+
+ replay(factory, mockAccessor, context);
+ PropertyAccessor accessor = new DelegatePropertyAccessor<Integer>(factory);
+ assertEquals("method", accessor.getSourceSetter(context, 1, "property"));
+ verify(factory, mockAccessor, context);
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/DelegatePropertyAccessorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/DelegatePropertyAccessorTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/NestedObjectDelegatePropertyAccessorTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/NestedObjectDelegatePropertyAccessorTest.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/NestedObjectDelegatePropertyAccessorTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/NestedObjectDelegatePropertyAccessorTest.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,120 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import static org.junit.Assert.*;
+import static org.easymock.classextension.EasyMock.*;
+
+import java.util.Map;
+
+import ognl.OgnlContext;
+import ognl.OgnlException;
+import ognl.PropertyAccessor;
+
+import org.junit.Test;
+
+/**
+ * Tests {@link NestedObjectDelegatePropertyAccessor}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class NestedObjectDelegatePropertyAccessorTest {
+
+ /**
+ * Test method for {@link NestedObjectDelegatePropertyAccessor#getProperty(java.util.Map, Object, Object)}.
+ * @throws OgnlException If something goes wrong.
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testGetProperty() throws OgnlException {
+ NestedObjectExtractor<Integer> nestedObjectExtractor = createMock(NestedObjectExtractor.class);
+ PropertyAccessor propertyAccessor = createMock(PropertyAccessor.class);
+ Map<String, Object> context = createMock(Map.class);
+ expect(propertyAccessor.getProperty(context, "nested", "property")).andReturn("value");
+ expect(nestedObjectExtractor.getNestedObject(1)).andReturn("nested");
+
+ replay(nestedObjectExtractor, propertyAccessor, context);
+ PropertyAccessor accessor = new NestedObjectDelegatePropertyAccessor<Integer>(
+ nestedObjectExtractor, propertyAccessor);
+ assertEquals("value", accessor.getProperty(context, 1, "property"));
+ verify(nestedObjectExtractor, propertyAccessor, context);
+ }
+
+ /**
+ * Test method for {@link NestedObjectDelegatePropertyAccessor#setProperty(java.util.Map, Object, Object, Object)}.
+ * @throws OgnlException If something goes wrong.
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testSetProperty() throws OgnlException {
+ NestedObjectExtractor<Integer> nestedObjectExtractor = createMock(NestedObjectExtractor.class);
+ PropertyAccessor propertyAccessor = createMock(PropertyAccessor.class);
+ Map<String, Object> context = createMock(Map.class);
+ propertyAccessor.setProperty(context, "nested", "property", "value");
+ expect(nestedObjectExtractor.getNestedObject(1)).andReturn("nested");
+
+ replay(nestedObjectExtractor, propertyAccessor, context);
+ PropertyAccessor accessor = new NestedObjectDelegatePropertyAccessor<Integer>(
+ nestedObjectExtractor, propertyAccessor);
+ accessor.setProperty(context, 1, "property", "value");
+ verify(nestedObjectExtractor, propertyAccessor, context);
+ }
+
+ /**
+ * Test method for {@link NestedObjectDelegatePropertyAccessor#getSourceAccessor(ognl.OgnlContext, Object, Object)}.
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testGetSourceAccessor() {
+ NestedObjectExtractor<Integer> nestedObjectExtractor = createMock(NestedObjectExtractor.class);
+ PropertyAccessor propertyAccessor = createMock(PropertyAccessor.class);
+ OgnlContext context = createMock(OgnlContext.class);
+ expect(propertyAccessor.getSourceAccessor(context, "nested", "property")).andReturn("method");
+ expect(nestedObjectExtractor.getNestedObject(1)).andReturn("nested");
+
+ replay(nestedObjectExtractor, propertyAccessor, context);
+ PropertyAccessor accessor = new NestedObjectDelegatePropertyAccessor<Integer>(
+ nestedObjectExtractor, propertyAccessor);
+ assertEquals("method", accessor.getSourceAccessor(context, 1, "property"));
+ verify(nestedObjectExtractor, propertyAccessor, context);
+ }
+
+ /**
+ * Test method for {@link NestedObjectDelegatePropertyAccessor#getSourceSetter(ognl.OgnlContext, Object, Object)}.
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testGetSourceSetter() {
+ NestedObjectExtractor<Integer> nestedObjectExtractor = createMock(NestedObjectExtractor.class);
+ PropertyAccessor propertyAccessor = createMock(PropertyAccessor.class);
+ OgnlContext context = createMock(OgnlContext.class);
+ expect(propertyAccessor.getSourceSetter(context, "nested", "property")).andReturn("method");
+ expect(nestedObjectExtractor.getNestedObject(1)).andReturn("nested");
+
+ replay(nestedObjectExtractor, propertyAccessor, context);
+ PropertyAccessor accessor = new NestedObjectDelegatePropertyAccessor<Integer>(
+ nestedObjectExtractor, propertyAccessor);
+ assertEquals("method", accessor.getSourceSetter(context, 1, "property"));
+ verify(nestedObjectExtractor, propertyAccessor, context);
+ }
+
+}
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/NestedObjectDelegatePropertyAccessorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/NestedObjectDelegatePropertyAccessorTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluatorTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluatorTest.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluatorTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluatorTest.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,187 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import ognl.OgnlRuntime;
+import ognl.PropertyAccessor;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.Expression;
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.context.TilesRequestContext;
+import org.easymock.EasyMock;
+
+/**
+ * Tests {@link OGNLAttributeEvaluator}.
+ *
+ * @version $Rev$ $Date$$
+ */
+public class OGNLAttributeEvaluatorTest extends TestCase {
+
+ /**
+ * The evaluator to test.
+ */
+ private OGNLAttributeEvaluator evaluator;
+
+ /**
+ * The request object to use.
+ */
+ private TilesRequestContext request;
+
+ /** {@inheritDoc} */
+ protected void setUp() throws Exception {
+ super.setUp();
+ PropertyAccessor objectPropertyAccessor = OgnlRuntime.getPropertyAccessor(Object.class);
+ PropertyAccessor mapPropertyAccessor = OgnlRuntime.getPropertyAccessor(Map.class);
+ PropertyAccessor applicationContextPropertyAccessor =
+ new NestedObjectDelegatePropertyAccessor<TilesRequestContext>(
+ new TilesApplicationContextNestedObjectExtractor(),
+ objectPropertyAccessor);
+ PropertyAccessor requestScopePropertyAccessor = new NestedObjectDelegatePropertyAccessor<TilesRequestContext>(
+ new RequestScopeNestedObjectExtractor(), mapPropertyAccessor);
+ PropertyAccessor sessionScopePropertyAccessor = new NestedObjectDelegatePropertyAccessor<TilesRequestContext>(
+ new SessionScopeNestedObjectExtractor(), mapPropertyAccessor);
+ PropertyAccessor applicationScopePropertyAccessor =
+ new NestedObjectDelegatePropertyAccessor<TilesRequestContext>(
+ new ApplicationScopeNestedObjectExtractor(), mapPropertyAccessor);
+ PropertyAccessorDelegateFactory<TilesRequestContext> factory = new TilesContextPropertyAccessorDelegateFactory(
+ objectPropertyAccessor, applicationContextPropertyAccessor,
+ requestScopePropertyAccessor, sessionScopePropertyAccessor,
+ applicationScopePropertyAccessor);
+ PropertyAccessor tilesRequestAccessor = new DelegatePropertyAccessor<TilesRequestContext>(factory);
+ OgnlRuntime.setPropertyAccessor(TilesRequestContext.class, tilesRequestAccessor);
+ evaluator = new OGNLAttributeEvaluator();
+ Map<String, Object> requestScope = new HashMap<String, Object>();
+ Map<String, Object> sessionScope = new HashMap<String, Object>();
+ Map<String, Object> applicationScope = new HashMap<String, Object>();
+ requestScope.put("object1", "value");
+ sessionScope.put("object2", new Integer(1));
+ applicationScope.put("object3", new Float(2.0));
+ requestScope.put("paulaBean", new PaulaBean());
+ request = EasyMock.createMock(TilesRequestContext.class);
+ EasyMock.expect(request.getRequestScope()).andReturn(requestScope)
+ .anyTimes();
+ EasyMock.expect(request.getSessionScope()).andReturn(sessionScope)
+ .anyTimes();
+ TilesApplicationContext applicationContext = EasyMock
+ .createMock(TilesApplicationContext.class);
+ EasyMock.expect(request.getApplicationContext()).andReturn(
+ applicationContext).anyTimes();
+ EasyMock.expect(applicationContext.getApplicationScope()).andReturn(
+ applicationScope).anyTimes();
+ EasyMock.replay(request, applicationContext);
+ }
+
+ /**
+ * Tests
+ * {@link OGNLAttributeEvaluator#evaluate(Attribute, TilesRequestContext)}.
+ */
+ public void testEvaluate() {
+ Attribute attribute = new Attribute();
+ attribute.setExpressionObject(new Expression("requestScope.object1"));
+ assertEquals("The value is not correct", "value", evaluator.evaluate(
+ attribute, request));
+ attribute.setExpressionObject(new Expression("sessionScope.object2"));
+ assertEquals("The value is not correct", new Integer(1), evaluator
+ .evaluate(attribute, request));
+ attribute.setExpressionObject(new Expression("applicationScope.object3"));
+ assertEquals("The value is not correct", new Float(2.0), evaluator
+ .evaluate(attribute, request));
+ attribute.setExpressionObject(new Expression("object1"));
+ assertEquals("The value is not correct", "value", evaluator.evaluate(
+ attribute, request));
+ attribute.setExpressionObject(new Expression("object2"));
+ assertEquals("The value is not correct", new Integer(1), evaluator
+ .evaluate(attribute, request));
+ attribute.setExpressionObject(new Expression("object3"));
+ assertEquals("The value is not correct", new Float(2.0), evaluator
+ .evaluate(attribute, request));
+ attribute.setExpressionObject(new Expression("paulaBean.paula"));
+ assertEquals("The value is not correct", "Brillant", evaluator
+ .evaluate(attribute, request));
+ attribute.setExpressionObject(new Expression("'String literal'"));
+ assertEquals("The value is not correct", "String literal", evaluator
+ .evaluate(attribute, request));
+ attribute.setValue(new Integer(2));
+ assertEquals("The value is not correct", new Integer(2), evaluator
+ .evaluate(attribute, request));
+ attribute.setValue("object1");
+ assertEquals("The value has been evaluated", "object1", evaluator
+ .evaluate(attribute, request));
+ }
+
+ /**
+ * Tests {@link OGNLAttributeEvaluator#evaluate(String, TilesRequestContext)}.
+ */
+ public void testEvaluateString() {
+ String expression = "requestScope.object1";
+ assertEquals("The value is not correct", "value", evaluator.evaluate(
+ expression, request));
+ expression = "sessionScope.object2";
+ assertEquals("The value is not correct", new Integer(1), evaluator
+ .evaluate(expression, request));
+ expression = "applicationScope.object3";
+ assertEquals("The value is not correct", new Float(2.0), evaluator
+ .evaluate(expression, request));
+ expression = "object1";
+ assertEquals("The value is not correct", "value", evaluator.evaluate(
+ expression, request));
+ expression = "object2";
+ assertEquals("The value is not correct", new Integer(1), evaluator
+ .evaluate(expression, request));
+ expression = "object3";
+ assertEquals("The value is not correct", new Float(2.0), evaluator
+ .evaluate(expression, request));
+ expression = "paulaBean.paula";
+ assertEquals("The value is not correct", "Brillant", evaluator
+ .evaluate(expression, request));
+ expression = "'String literal'";
+ assertEquals("The value is not correct", "String literal", evaluator
+ .evaluate(expression, request));
+ }
+
+ /**
+ * This is The Brillant Paula Bean (sic) just like it was posted to:
+ * http://thedailywtf.com/Articles/The_Brillant_Paula_Bean.aspx I hope that
+ * there is no copyright on it.
+ */
+ public static class PaulaBean {
+
+ /**
+ * Paula is brillant, really.
+ */
+ private String paula = "Brillant";
+
+ /**
+ * Returns brillant.
+ *
+ * @return "Brillant".
+ */
+ public String getPaula() {
+ return paula;
+ }
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluatorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/OGNLAttributeEvaluatorTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/RequestScopeNestedObjectExtractorTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/RequestScopeNestedObjectExtractorTest.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/RequestScopeNestedObjectExtractorTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/RequestScopeNestedObjectExtractorTest.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,56 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import static org.junit.Assert.*;
+import static org.easymock.EasyMock.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tiles.context.TilesRequestContext;
+import org.junit.Test;
+
+/**
+ * Tests {@link RequestScopeNestedObjectExtractor}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class RequestScopeNestedObjectExtractorTest {
+
+ /**
+ * Tests {@link SessionScopeNestedObjectExtractor#getNestedObject(TilesRequestContext)}.
+ */
+ @Test
+ public void testGetNestedObject() {
+ TilesRequestContext request = createMock(TilesRequestContext.class);
+ Map<String, Object> map = new HashMap<String, Object>();
+ map.put("attribute1", "value1");
+ expect(request.getSessionScope()).andReturn(map);
+
+ replay(request);
+ NestedObjectExtractor<TilesRequestContext> extractor = new SessionScopeNestedObjectExtractor();
+ assertEquals(map, extractor.getNestedObject(request));
+ verify(request);
+ }
+
+}
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/RequestScopeNestedObjectExtractorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/RequestScopeNestedObjectExtractorTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/SessionScopeNestedObjectExtractorTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/SessionScopeNestedObjectExtractorTest.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/SessionScopeNestedObjectExtractorTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/SessionScopeNestedObjectExtractorTest.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,56 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import static org.junit.Assert.*;
+import static org.easymock.EasyMock.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tiles.context.TilesRequestContext;
+import org.junit.Test;
+
+/**
+ * Tests {@link SessionScopeNestedObjectExtractor}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class SessionScopeNestedObjectExtractorTest {
+
+ /**
+ * Tests {@link RequestScopeNestedObjectExtractor#getNestedObject(TilesRequestContext)}.
+ */
+ @Test
+ public void testGetNestedObject() {
+ TilesRequestContext request = createMock(TilesRequestContext.class);
+ Map<String, Object> map = new HashMap<String, Object>();
+ map.put("attribute1", "value1");
+ expect(request.getRequestScope()).andReturn(map);
+
+ replay(request);
+ NestedObjectExtractor<TilesRequestContext> extractor = new RequestScopeNestedObjectExtractor();
+ assertEquals(map, extractor.getNestedObject(request));
+ verify(request);
+ }
+
+}
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/SessionScopeNestedObjectExtractorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/SessionScopeNestedObjectExtractorTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/TilesApplicationContextNestedObjectExtractorTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/TilesApplicationContextNestedObjectExtractorTest.java?rev=793334&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/TilesApplicationContextNestedObjectExtractorTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/TilesApplicationContextNestedObjectExtractorTest.java Sun Jul 12 11:40:59 2009
@@ -0,0 +1,52 @@
+/*
+ * $Id$
+ *
+ * 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.evaluator.ognl;
+
+import static org.junit.Assert.*;
+import static org.easymock.EasyMock.*;
+
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.context.TilesRequestContext;
+import org.junit.Test;
+
+/**
+ * Tests {@link TilesApplicationContextNestedObjectExtractor}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class TilesApplicationContextNestedObjectExtractorTest {
+
+ /**
+ * Tests {@link TilesApplicationContextNestedObjectExtractor#getNestedObject(TilesRequestContext)}.
+ */
+ @Test
+ public void testGetNestedObject() {
+ TilesRequestContext request = createMock(TilesRequestContext.class);
+ TilesApplicationContext applicationContext = createMock(TilesApplicationContext.class);
+ expect(request.getApplicationContext()).andReturn(applicationContext);
+
+ replay(request, applicationContext);
+ NestedObjectExtractor<TilesRequestContext> extractor = new TilesApplicationContextNestedObjectExtractor();
+ assertEquals(applicationContext, extractor.getNestedObject(request));
+ verify(request, applicationContext);
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/TilesApplicationContextNestedObjectExtractorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/ognl/TilesApplicationContextNestedObjectExtractorTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL