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/11/27 12:23:09 UTC
svn commit: r884837 - in /tiles/sandbox/trunk:
tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/
tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/
tiles-request/tiles-request-api/src/main/java/org/apach...
Author: apetrelli
Date: Fri Nov 27 11:23:06 2009
New Revision: 884837
URL: http://svn.apache.org/viewvc?rev=884837&view=rev
Log:
TILESSB-16
Added "ScopeOrder" annotation and modified user code accordingly.
Fixed tiles-mvel and tiles-el but not tiles-ognl (to do).
Added:
tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ScopeOrder.java (with props)
tiles/sandbox/trunk/tiles3/tiles-el/src/main/java/org/apache/tiles/el/ScopeELResolver.java (with props)
tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/ScopeVariableResolverFactory.java (with props)
Modified:
tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/AbstractRequest.java
tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/Request.java
tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ContextResolver.java
tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ReflectionContextResolver.java
tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/TilesRequestContextWrapper.java
tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerTilesRequestContext.java
tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java
tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java
tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletTilesRequestContext.java
tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/test/java/org/apache/tiles/request/servlet/ServletTilesRequestContextTest.java
tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityTilesRequestContext.java
tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/definition/MockOnlyLocaleTilesContext.java
tiles/sandbox/trunk/tiles3/tiles-el/src/main/java/org/apache/tiles/el/TilesContextBeanELResolver.java
tiles/sandbox/trunk/tiles3/tiles-el/src/test/java/org/apache/tiles/el/ELAttributeEvaluatorTest.java
tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java
tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/TilesContextBeanVariableResolverFactory.java
tiles/sandbox/trunk/tiles3/tiles-mvel/src/test/java/org/apache/tiles/mvel/MVELAttributeEvaluatorTest.java
Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/AbstractRequest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/AbstractRequest.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/AbstractRequest.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/AbstractRequest.java Fri Nov 27 11:23:06 2009
@@ -23,4 +23,14 @@
ContextResolver resolver = ApplicationAccess.getContextResolver(applicationContext);
return resolver.getContext(this, scope);
}
+
+ @Override
+ public String[] getAvailableScopes() {
+ ContextResolver resolver = ApplicationAccess.getContextResolver(applicationContext);
+ return resolver.getAvailableScopes(this);
+ }
+
+ public Map<String, Object> getApplicationScope() {
+ return applicationContext.getApplicationScope();
+ }
}
Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/Request.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/Request.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/Request.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/Request.java Fri Nov 27 11:23:06 2009
@@ -55,6 +55,8 @@
Map<String, Object> getContext(String scope);
+ String[] getAvailableScopes();
+
/**
* Returns the associated application context.
*
Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ContextResolver.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ContextResolver.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ContextResolver.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ContextResolver.java Fri Nov 27 11:23:06 2009
@@ -7,4 +7,6 @@
public interface ContextResolver {
public Map<String, Object> getContext(Request request, String scope);
+
+ public String[] getAvailableScopes(Request request);
}
Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ReflectionContextResolver.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ReflectionContextResolver.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ReflectionContextResolver.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ReflectionContextResolver.java Fri Nov 27 11:23:06 2009
@@ -2,13 +2,19 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.Map;
+import java.util.Set;
import org.apache.tiles.request.Request;
import org.apache.tiles.request.util.TilesRequestContextWrapper;
public class ReflectionContextResolver implements ContextResolver {
+ private Map<Class<? extends Request>, Set<String>> class2scopes = new HashMap<Class<? extends Request>, Set<String>>();
+
@SuppressWarnings("unchecked")
@Override
public Map<String, Object> getContext(Request request, String scope) {
@@ -36,4 +42,36 @@
+ scope + "' scope.", e);
}
}
+
+ @Override
+ public String[] getAvailableScopes(Request request) {
+ Set<String> scopes = new HashSet<String>();
+ boolean finished = false;
+ do {
+ scopes.addAll(getSpecificScopeSet(request));
+ if (request instanceof TilesRequestContextWrapper) {
+ request = ((TilesRequestContextWrapper) request)
+ .getWrappedRequest();
+ } else {
+ finished = true;
+ }
+ } while(!finished);
+ String[] retValue = new String[scopes.size()];
+ return scopes.toArray(retValue);
+ }
+
+ private Set<String> getSpecificScopeSet(Request request) {
+ Set<String> scopes = class2scopes.get(request.getClass());
+ if (scopes == null) {
+ ScopeOrder order = request.getClass().getAnnotation(ScopeOrder.class);
+ scopes = new LinkedHashSet<String>();
+ if (order != null) {
+ for (String scopeName: order.value()) {
+ scopes.add(scopeName);
+ }
+ }
+ class2scopes.put(request.getClass(), scopes);
+ }
+ return scopes;
+ }
}
Added: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ScopeOrder.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ScopeOrder.java?rev=884837&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ScopeOrder.java (added)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ScopeOrder.java Fri Nov 27 11:23:06 2009
@@ -0,0 +1,13 @@
+package org.apache.tiles.request.scope;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface ScopeOrder {
+
+ String[] value();
+}
Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ScopeOrder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ScopeOrder.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/TilesRequestContextWrapper.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/TilesRequestContextWrapper.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/TilesRequestContextWrapper.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/TilesRequestContextWrapper.java Fri Nov 27 11:23:06 2009
@@ -78,6 +78,11 @@
return context.getContext(scope);
}
+ @Override
+ public String[] getAvailableScopes() {
+ return context.getAvailableScopes();
+ }
+
/** {@inheritDoc} */
public ApplicationContext getApplicationContext() {
return context.getApplicationContext();
Modified: tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerTilesRequestContext.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerTilesRequestContext.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerTilesRequestContext.java Fri Nov 27 11:23:06 2009
@@ -32,6 +32,7 @@
import org.apache.tiles.request.ApplicationContext;
import org.apache.tiles.request.Request;
+import org.apache.tiles.request.scope.ScopeOrder;
import org.apache.tiles.request.servlet.ServletTilesRequestContext;
import org.apache.tiles.request.util.TilesRequestContextWrapper;
@@ -44,6 +45,7 @@
* @version $Rev$ $Date$
* @since 2.2.0
*/
+@ScopeOrder({"page"})
public class FreeMarkerTilesRequestContext extends TilesRequestContextWrapper
implements Request {
Modified: tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java Fri Nov 27 11:23:06 2009
@@ -32,6 +32,7 @@
import org.apache.tiles.request.ApplicationContext;
import org.apache.tiles.request.Request;
+import org.apache.tiles.request.scope.ScopeOrder;
import org.apache.tiles.request.servlet.ServletTilesRequestContext;
import org.apache.tiles.request.servlet.ServletUtil;
import org.apache.tiles.request.util.TilesRequestContextWrapper;
@@ -42,6 +43,7 @@
*
* @version $Rev$ $Date$
*/
+@ScopeOrder({"page", "request", "session", "application"})
public class JspTilesRequestContext extends TilesRequestContextWrapper
implements Request {
Modified: tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java Fri Nov 27 11:23:06 2009
@@ -39,12 +39,14 @@
import org.apache.tiles.request.AbstractRequest;
import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.scope.ScopeOrder;
/**
* Portlet-based TilesApplicationContext implementation.
*
* @version $Rev$ $Date$
*/
+@ScopeOrder({"request", "portletSession", "session", "application"})
public class PortletTilesRequestContext extends AbstractRequest {
/**
Modified: tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletTilesRequestContext.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletTilesRequestContext.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletTilesRequestContext.java Fri Nov 27 11:23:06 2009
@@ -34,12 +34,14 @@
import org.apache.tiles.request.AbstractRequest;
import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.scope.ScopeOrder;
/**
* Servlet-based implementation of the TilesApplicationContext interface.
*
* @version $Rev$ $Date$
*/
+@ScopeOrder({"request", "session", "application"})
public class ServletTilesRequestContext extends AbstractRequest {
/**
Modified: tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/test/java/org/apache/tiles/request/servlet/ServletTilesRequestContextTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/test/java/org/apache/tiles/request/servlet/ServletTilesRequestContextTest.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/test/java/org/apache/tiles/request/servlet/ServletTilesRequestContextTest.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/test/java/org/apache/tiles/request/servlet/ServletTilesRequestContextTest.java Fri Nov 27 11:23:06 2009
@@ -182,8 +182,7 @@
* Tests getting application scope attributes.
*/
public void testGetApplicationScope() {
- Map<String, Object> map = ((ApplicationContext) context)
- .getApplicationScope();
+ Map<String, Object> map = context.getApplicationScope();
assertTrue("The application scope does not contain a set value",
"applicationValue1".equals(map.get("applicationAttribute1")));
assertTrue("The application scope does not contain a set value",
@@ -195,8 +194,7 @@
* Tests getting init parameters.
*/
public void testGetInitParams() {
- Map<String, String> map = ((ApplicationContext) context)
- .getInitParams();
+ Map<String, String> map = context.getApplicationContext().getInitParams();
assertTrue("The init parameters do not contain a set value",
"initParameterValue1".equals(map.get("initParameter1")));
doTestReadMap(map, String.class, String.class,
Modified: tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityTilesRequestContext.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityTilesRequestContext.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityTilesRequestContext.java Fri Nov 27 11:23:06 2009
@@ -33,9 +33,10 @@
import org.apache.tiles.request.ApplicationContext;
import org.apache.tiles.request.Request;
+import org.apache.tiles.request.scope.ScopeOrder;
+import org.apache.tiles.request.servlet.ExternalWriterHttpServletResponse;
import org.apache.tiles.request.servlet.ServletTilesRequestContext;
import org.apache.tiles.request.servlet.ServletUtil;
-import org.apache.tiles.request.servlet.ExternalWriterHttpServletResponse;
import org.apache.tiles.request.util.TilesRequestContextWrapper;
import org.apache.velocity.context.Context;
@@ -45,6 +46,7 @@
* @version $Rev$ $Date$
* @since 2.2.0
*/
+@ScopeOrder({"page"})
public class VelocityTilesRequestContext extends TilesRequestContextWrapper {
/**
Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/definition/MockOnlyLocaleTilesContext.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/definition/MockOnlyLocaleTilesContext.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/definition/MockOnlyLocaleTilesContext.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/definition/MockOnlyLocaleTilesContext.java Fri Nov 27 11:23:06 2009
@@ -146,4 +146,9 @@
public Object[] getRequestObjects() {
return null;
}
+
+ @Override
+ public String[] getAvailableScopes() {
+ return null;
+ }
}
Added: tiles/sandbox/trunk/tiles3/tiles-el/src/main/java/org/apache/tiles/el/ScopeELResolver.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-el/src/main/java/org/apache/tiles/el/ScopeELResolver.java?rev=884837&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-el/src/main/java/org/apache/tiles/el/ScopeELResolver.java (added)
+++ tiles/sandbox/trunk/tiles3/tiles-el/src/main/java/org/apache/tiles/el/ScopeELResolver.java Fri Nov 27 11:23:06 2009
@@ -0,0 +1,127 @@
+/*
+ * $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.el;
+
+import java.beans.FeatureDescriptor;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.el.ELContext;
+import javax.el.ELResolver;
+
+import org.apache.tiles.request.Request;
+
+/**
+ * Resolves beans in request, session and application scope.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.1
+ */
+public class ScopeELResolver extends ELResolver {
+
+ /** {@inheritDoc} */
+ @Override
+ public Class<?> getCommonPropertyType(ELContext context, Object base) {
+ // only resolve at the root of the context
+ if (base != null) {
+ return null;
+ }
+
+ return Map.class;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context,
+ Object base) {
+ List<FeatureDescriptor> list = new ArrayList<FeatureDescriptor>();
+
+ Request request = (Request) context
+ .getContext(Request.class);
+ for (String scope: request.getAvailableScopes()) {
+ FeatureDescriptor descriptor = new FeatureDescriptor();
+ descriptor.setDisplayName(scope + "Scope");
+ descriptor.setExpert(false);
+ descriptor.setHidden(false);
+ descriptor.setName(scope + "Scope");
+ descriptor.setPreferred(true);
+ descriptor.setShortDescription("");
+ descriptor.setValue("type", Map.class);
+ descriptor.setValue("resolvableAtDesignTime", Boolean.FALSE);
+ list.add(descriptor);
+ }
+
+ return list.iterator();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public Class<?> getType(ELContext context, Object base, Object property) {
+ if (base != null || property == null || !(property instanceof String)
+ || !((String) property).endsWith("Scope")) {
+ return null;
+ }
+
+ return Map.class;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public Object getValue(ELContext context, Object base, Object property) {
+ if (base != null) {
+ return null;
+ }
+
+ Object retValue = null;
+ String propertyString = (String) property;
+ if (property instanceof String && propertyString.endsWith("Scope")) {
+ Request request = (Request) context
+ .getContext(Request.class);
+ retValue = request.getContext(propertyString.substring(0,
+ propertyString.length() - 5));
+ }
+
+ if (retValue != null) {
+ context.setPropertyResolved(true);
+ }
+
+ return retValue;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean isReadOnly(ELContext context, Object base, Object property) {
+ if (context == null) {
+ throw new NullPointerException();
+ }
+
+ return true;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void setValue(ELContext context, Object base, Object property,
+ Object value) {
+ // Does nothing for the moment.
+ }
+}
Propchange: tiles/sandbox/trunk/tiles3/tiles-el/src/main/java/org/apache/tiles/el/ScopeELResolver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/sandbox/trunk/tiles3/tiles-el/src/main/java/org/apache/tiles/el/ScopeELResolver.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: tiles/sandbox/trunk/tiles3/tiles-el/src/main/java/org/apache/tiles/el/TilesContextBeanELResolver.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-el/src/main/java/org/apache/tiles/el/TilesContextBeanELResolver.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-el/src/main/java/org/apache/tiles/el/TilesContextBeanELResolver.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-el/src/main/java/org/apache/tiles/el/TilesContextBeanELResolver.java Fri Nov 27 11:23:06 2009
@@ -29,7 +29,6 @@
import javax.el.ELContext;
import javax.el.ELResolver;
-import org.apache.tiles.request.ApplicationContext;
import org.apache.tiles.request.Request;
/**
@@ -59,12 +58,9 @@
Request request = (Request) context
.getContext(Request.class);
- collectBeanInfo(request.getContext("request"), list);
- collectBeanInfo(request.getContext("session"), list);
-
- ApplicationContext applicationContext = (ApplicationContext) context
- .getContext(ApplicationContext.class);
- collectBeanInfo(applicationContext.getApplicationScope(), list);
+ for (String scope: request.getAvailableScopes()) {
+ collectBeanInfo(request.getContext(scope), list);
+ }
return list.iterator();
}
@@ -159,16 +155,12 @@
String prop = property.toString();
- retValue = getObject(request.getContext("request"), prop);
- if (retValue == null) {
- retValue = getObject(request.getContext("session"), prop);
- if (retValue == null) {
- ApplicationContext applicationContext = (ApplicationContext) context
- .getContext(ApplicationContext.class);
- retValue = getObject(applicationContext.getApplicationScope(),
- prop);
- }
- }
+ String[] scopes = request.getAvailableScopes();
+ int i = 0;
+ do {
+ retValue = getObject(request.getContext(scopes[i]), prop);
+ i++;
+ } while (retValue == null && i < scopes.length);
return retValue;
}
Modified: tiles/sandbox/trunk/tiles3/tiles-el/src/test/java/org/apache/tiles/el/ELAttributeEvaluatorTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-el/src/test/java/org/apache/tiles/el/ELAttributeEvaluatorTest.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-el/src/test/java/org/apache/tiles/el/ELAttributeEvaluatorTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-el/src/test/java/org/apache/tiles/el/ELAttributeEvaluatorTest.java Fri Nov 27 11:23:06 2009
@@ -74,16 +74,19 @@
.anyTimes();
EasyMock.expect(request.getContext("session")).andReturn(sessionScope)
.anyTimes();
+ EasyMock.expect(request.getContext("application")).andReturn(
+ applicationScope).anyTimes();
+ EasyMock.expect(request.getAvailableScopes()).andReturn(
+ new String[] { "request", "session", "application" }).anyTimes();
ApplicationContext applicationContext = EasyMock
.createMock(ApplicationContext.class);
- EasyMock.expect(applicationContext.getApplicationScope()).andReturn(
- applicationScope).anyTimes();
EasyMock.replay(request, applicationContext);
evaluator.setApplicationContext(applicationContext);
evaluator.setExpressionFactory(new ExpressionFactoryImpl());
ELResolver elResolver = new CompositeELResolver() {
{
+ add(new ScopeELResolver());
add(new TilesContextELResolver());
add(new TilesContextBeanELResolver());
add(new ArrayELResolver(false));
Modified: tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java Fri Nov 27 11:23:06 2009
@@ -53,6 +53,7 @@
import org.apache.tiles.definition.pattern.wildcard.WildcardDefinitionPatternMatcherFactory;
import org.apache.tiles.el.ELAttributeEvaluator;
import org.apache.tiles.el.JspExpressionFactoryFactory;
+import org.apache.tiles.el.ScopeELResolver;
import org.apache.tiles.el.TilesContextBeanELResolver;
import org.apache.tiles.el.TilesContextELResolver;
import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
@@ -268,6 +269,7 @@
evaluator.setExpressionFactory(efFactory.getExpressionFactory());
ELResolver elResolver = new CompositeELResolver() {
{
+ add(new ScopeELResolver());
add(new TilesContextELResolver());
add(new TilesContextBeanELResolver());
add(new ArrayELResolver(false));
Added: tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/ScopeVariableResolverFactory.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/ScopeVariableResolverFactory.java?rev=884837&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/ScopeVariableResolverFactory.java (added)
+++ tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/ScopeVariableResolverFactory.java Fri Nov 27 11:23:06 2009
@@ -0,0 +1,169 @@
+/*
+ * $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.mvel;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tiles.context.TilesRequestContextHolder;
+import org.apache.tiles.request.Request;
+import org.mvel2.UnresolveablePropertyException;
+import org.mvel2.integration.VariableResolver;
+import org.mvel2.integration.impl.BaseVariableResolverFactory;
+
+/**
+ * Resolves beans stored in request, session and application scopes.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class ScopeVariableResolverFactory extends
+ BaseVariableResolverFactory {
+
+ /**
+ * The Tiles request holder.
+ */
+ private TilesRequestContextHolder requestHolder;
+
+ /**
+ * Constructor.
+ *
+ * @param requestHolder The Tiles request holder.
+ * @since 2.2.0
+ */
+ public ScopeVariableResolverFactory(TilesRequestContextHolder requestHolder) {
+ this.requestHolder = requestHolder;
+ variableResolvers = new HashMap<String, VariableResolver>();
+ }
+
+ /** {@inheritDoc} */
+ public VariableResolver createVariable(String name, Object value) {
+ if (nextFactory != null) {
+ return nextFactory.createVariable(name, value);
+ }
+ throw new UnsupportedOperationException("This variable resolver factory is read only");
+ }
+
+ /** {@inheritDoc} */
+ public VariableResolver createVariable(String name, Object value,
+ Class<?> type) {
+ variableResolvers = new HashMap<String, VariableResolver>();
+ if (nextFactory != null) {
+ return nextFactory.createVariable(name, value, type);
+ }
+ throw new UnsupportedOperationException("This variable resolver factory is read only");
+ }
+
+ /** {@inheritDoc} */
+ public boolean isResolveable(String name) {
+ return isTarget(name) || isNextResolveable(name);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public VariableResolver getVariableResolver(String name) {
+ if (isResolveable(name)) {
+ if (variableResolvers != null && variableResolvers.containsKey(name)) {
+ return variableResolvers.get(name);
+ } else if (isTarget(name)) {
+ VariableResolver variableResolver = new ScopeVariableResolver(name);
+ variableResolvers.put(name, variableResolver);
+ return variableResolver;
+ } else if (nextFactory != null) {
+ return nextFactory.getVariableResolver(name);
+ }
+ }
+
+ throw new UnresolveablePropertyException("unable to resolve variable '" + name + "'");
+ }
+
+ /** {@inheritDoc} */
+ public boolean isTarget(String name) {
+ Request request = requestHolder.getTilesRequestContext();
+ if (name.endsWith("Scope")) {
+ String scopeName = name.substring(0, name.length() - 5);
+ for (String availableScope : request.getAvailableScopes()) {
+ if (scopeName.equals(availableScope)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Resolves a single attribute stored in request, session or application scope.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+ private class ScopeVariableResolver implements VariableResolver {
+
+ /**
+ * The name of the attribute.
+ */
+ private String name;
+
+ /**
+ * Constructor.
+ *
+ * @param name The name of the attribute.
+ * @since 2.2.0
+ */
+ public ScopeVariableResolver(String name) {
+ this.name = name;
+ }
+
+ /** {@inheritDoc} */
+ public int getFlags() {
+ return 0;
+ }
+
+ /** {@inheritDoc} */
+ public String getName() {
+ return name;
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ public Class getType() {
+ return Map.class;
+ }
+
+ /** {@inheritDoc} */
+ public Object getValue() {
+ Request request = requestHolder.getTilesRequestContext();
+ return request.getContext(name.substring(0, name.length() - 5));
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ public void setStaticType(Class type) {
+ // Does nothing for the moment.
+ }
+
+ /** {@inheritDoc} */
+ public void setValue(Object value) {
+ throw new UnsupportedOperationException("This resolver is read-only");
+ }
+ }
+}
Propchange: tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/ScopeVariableResolverFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/ScopeVariableResolverFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/TilesContextBeanVariableResolverFactory.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/TilesContextBeanVariableResolverFactory.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/TilesContextBeanVariableResolverFactory.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/TilesContextBeanVariableResolverFactory.java Fri Nov 27 11:23:06 2009
@@ -98,10 +98,12 @@
/** {@inheritDoc} */
public boolean isTarget(String name) {
Request request = requestHolder.getTilesRequestContext();
- return request.getContext("request").containsKey(name)
- || request.getContext("session").containsKey(name)
- || request.getApplicationContext().getApplicationScope()
- .containsKey(name);
+ for (String scope : request.getAvailableScopes()) {
+ if (request.getContext(scope).containsKey(name)) {
+ return true;
+ }
+ }
+ return false;
}
/**
@@ -150,15 +152,13 @@
/** {@inheritDoc} */
public Object getValue() {
Request request = requestHolder.getTilesRequestContext();
- Object value = request.getContext("request").get(name);
- if (value == null) {
- value = request.getContext("session").get(name);
- if (value == null) {
- value = request.getApplicationContext()
- .getApplicationScope().get(name);
+ for (String scope : request.getAvailableScopes()) {
+ Object value = request.getContext(scope).get(name);
+ if (value != null) {
+ return value;
}
}
- return value;
+ return null;
}
/** {@inheritDoc} */
Modified: tiles/sandbox/trunk/tiles3/tiles-mvel/src/test/java/org/apache/tiles/mvel/MVELAttributeEvaluatorTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-mvel/src/test/java/org/apache/tiles/mvel/MVELAttributeEvaluatorTest.java?rev=884837&r1=884836&r2=884837&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-mvel/src/test/java/org/apache/tiles/mvel/MVELAttributeEvaluatorTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-mvel/src/test/java/org/apache/tiles/mvel/MVELAttributeEvaluatorTest.java Fri Nov 27 11:23:06 2009
@@ -58,9 +58,12 @@
protected void setUp() throws Exception {
super.setUp();
TilesRequestContextHolder requestHolder = new TilesRequestContextHolder();
- VariableResolverFactory variableResolverFactory = new TilesContextVariableResolverFactory(
+ VariableResolverFactory variableResolverFactory = new ScopeVariableResolverFactory(
requestHolder);
variableResolverFactory
+ .setNextFactory(new TilesContextVariableResolverFactory(
+ requestHolder));
+ variableResolverFactory
.setNextFactory(new TilesContextBeanVariableResolverFactory(
requestHolder));
evaluator = new MVELAttributeEvaluator(requestHolder,
@@ -77,12 +80,14 @@
.anyTimes();
EasyMock.expect(request.getContext("session")).andReturn(sessionScope)
.anyTimes();
+ EasyMock.expect(request.getContext("application")).andReturn(applicationScope)
+ .anyTimes();
+ EasyMock.expect(request.getAvailableScopes()).andReturn(
+ new String[] { "request", "session", "application" }).anyTimes();
ApplicationContext applicationContext = EasyMock
.createMock(ApplicationContext.class);
EasyMock.expect(request.getApplicationContext()).andReturn(
applicationContext).anyTimes();
- EasyMock.expect(applicationContext.getApplicationScope()).andReturn(
- applicationScope).anyTimes();
EasyMock.replay(request, applicationContext);
}