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/06/24 16:08:34 UTC
svn commit: r788032 [2/3] - in /tiles/framework/trunk:
src/site/apt/tutorial/advanced/ tiles-api/src/main/java/org/apache/tiles/
tiles-api/src/main/java/org/apache/tiles/reflect/
tiles-api/src/test/java/org/apache/tiles/ tiles-api/src/test/java/org/apa...
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactory.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactory.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactory.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,174 @@
+/*
+ * $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.mvel;
+
+import java.util.HashMap;
+
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.context.TilesRequestContextHolder;
+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 TilesContextBeanVariableResolverFactory extends
+ BaseVariableResolverFactory {
+
+ /**
+ * The Tiles request holder.
+ */
+ private TilesRequestContextHolder requestHolder;
+
+ /**
+ * Constructor.
+ *
+ * @param requestHolder The Tiles request holder.
+ * @since 2.2.0
+ */
+ public TilesContextBeanVariableResolverFactory(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} */
+ 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 TilesContextBeanVariableResolver(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) {
+ TilesRequestContext request = requestHolder.getTilesRequestContext();
+ return request.getRequestScope().containsKey(name)
+ || request.getSessionScope().containsKey(name)
+ || request.getApplicationContext().getApplicationScope()
+ .containsKey(name);
+ }
+
+ /**
+ * Resolves a single attribute stored in request, session or application scope.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+ private class TilesContextBeanVariableResolver implements VariableResolver {
+
+ /**
+ * The name of the attribute.
+ */
+ private String name;
+
+ /**
+ * Constructor.
+ *
+ * @param name The name of the attribute.
+ * @since 2.2.0
+ */
+ public TilesContextBeanVariableResolver(String name) {
+ this.name = name;
+ }
+
+ /** {@inheritDoc} */
+ public int getFlags() {
+ return 0;
+ }
+
+ /** {@inheritDoc} */
+ public String getName() {
+ return name;
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ public Class getType() {
+ Object value = getValue();
+ if (value != null) {
+ return value.getClass();
+ }
+ return Object.class;
+ }
+
+ /** {@inheritDoc} */
+ public Object getValue() {
+ TilesRequestContext request = requestHolder.getTilesRequestContext();
+ Object value = request.getRequestScope().get(name);
+ if (value == null) {
+ value = request.getSessionScope().get(name);
+ if (value == null) {
+ value = request.getApplicationContext()
+ .getApplicationScope().get(name);
+ }
+ }
+ return value;
+ }
+
+ /** {@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/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextVariableResolverFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextVariableResolverFactory.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextVariableResolverFactory.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextVariableResolverFactory.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,266 @@
+/*
+ * $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.mvel;
+
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+
+import org.apache.tiles.context.TilesRequestContextHolder;
+import org.apache.tiles.evaluator.el.TilesRequestContextBeanInfo;
+import org.apache.tiles.reflect.CannotAccessMethodException;
+import org.mvel2.integration.VariableResolver;
+import org.mvel2.integration.impl.BaseVariableResolverFactory;
+
+/**
+ * Resolves {@link org.apache.tiles.context.TilesRequestContext} and
+ * {@link org.apache.tiles.TilesApplicationContext} properties as variables.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class TilesContextVariableResolverFactory extends
+ BaseVariableResolverFactory {
+
+ /**
+ * The Tiles request holder.
+ */
+ private TilesRequestContextHolder requestHolder;
+
+ /**
+ * Beaninfo about {@link org.apache.tiles.context.TilesRequestContext} and
+ * {@link org.apache.tiles.TilesApplicationContext}.
+ */
+ private TilesRequestContextBeanInfo requestBeanInfo = new TilesRequestContextBeanInfo();
+
+ /**
+ * Constructor.
+ *
+ * @param requestHolder The Tiles request holder.
+ * @since 2.2.0
+ */
+ public TilesContextVariableResolverFactory(TilesRequestContextHolder requestHolder) {
+ this.requestHolder = requestHolder;
+ variableResolvers = new HashMap<String, VariableResolver>();
+ for (PropertyDescriptor descriptor : requestBeanInfo.getRequestDescriptors().values()) {
+ String descriptorName = descriptor.getName();
+ variableResolvers.put(descriptorName, new RequestVariableResolver(descriptorName));
+ }
+ for (PropertyDescriptor descriptor : requestBeanInfo.getApplicationDescriptors().values()) {
+ String descriptorName = descriptor.getName();
+ variableResolvers.put(descriptorName, new ApplicationVariableResolver(descriptorName));
+ }
+ }
+
+ /** {@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) {
+ 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) {
+ if (variableResolvers.containsKey(name)) {
+ return true;
+ }
+ return isNextResolveable(name);
+ }
+
+ /** {@inheritDoc} */
+ public boolean isTarget(String name) {
+ return variableResolvers.containsKey(name);
+ }
+
+ /**
+ * Resolves a {@link org.apache.tiles.context.TilesRequestContext} property as a variable.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+ private class RequestVariableResolver implements VariableResolver {
+
+ /**
+ * The name of the property.
+ */
+ private String name;
+
+ /**
+ * The property descriptor.
+ */
+ private PropertyDescriptor descriptor;
+
+ /**
+ * Constructor.
+ *
+ * @param name The name of the property.
+ * @since 2.2.0
+ */
+ public RequestVariableResolver(String name) {
+ this.name = name;
+ descriptor = requestBeanInfo.getRequestDescriptors().get(name);
+ }
+
+ /** {@inheritDoc} */
+ public int getFlags() {
+ return 0;
+ }
+
+ /** {@inheritDoc} */
+ public String getName() {
+ return name;
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ public Class getType() {
+ return descriptor.getPropertyType();
+ }
+
+ /** {@inheritDoc} */
+ public Object getValue() {
+ Method method = descriptor.getReadMethod();
+ try {
+ return method.invoke(requestHolder.getTilesRequestContext());
+ } catch (IllegalArgumentException e) {
+ throw new CannotAccessMethodException(
+ "Arguments are wrong for property '"
+ + descriptor.getName() + "'", e);
+ } catch (IllegalAccessException e) {
+ throw new CannotAccessMethodException(
+ "Cannot access getter method for property '"
+ + descriptor.getName() + "'", e);
+ } catch (InvocationTargetException e) {
+ throw new CannotAccessMethodException(
+ "The getter method for property '"
+ + descriptor.getName() + "' threw an exception",
+ e);
+ }
+ }
+
+ /** {@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");
+ }
+ }
+
+ /**
+ * Resolves a {@link org.apache.tiles.TilesApplicationContext} property as a
+ * variable.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+ private class ApplicationVariableResolver implements VariableResolver {
+
+ /**
+ * The name of the property.
+ *
+ * @since 2.2.0
+ */
+ private String name;
+
+ /**
+ * The property descriptor.
+ *
+ * @since 2.2.0
+ */
+ private PropertyDescriptor descriptor;
+
+ /**
+ * Constructor.
+ *
+ * @param name The name of the property.
+ * @since 2.2.0
+ */
+ public ApplicationVariableResolver(String name) {
+ this.name = name;
+ descriptor = requestBeanInfo.getApplicationDescriptors().get(name);
+ }
+
+ /** {@inheritDoc} */
+ public int getFlags() {
+ return 0;
+ }
+
+ /** {@inheritDoc} */
+ public String getName() {
+ return name;
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ public Class getType() {
+ return descriptor.getPropertyType();
+ }
+
+ /** {@inheritDoc} */
+ public Object getValue() {
+ Method method = descriptor.getReadMethod();
+ try {
+ return method.invoke(requestHolder.getTilesRequestContext()
+ .getApplicationContext());
+ } catch (IllegalArgumentException e) {
+ throw new CannotAccessMethodException(
+ "Arguments are wrong for property '"
+ + descriptor.getName() + "'", e);
+ } catch (IllegalAccessException e) {
+ throw new CannotAccessMethodException(
+ "Cannot access getter method for property '"
+ + descriptor.getName() + "'", e);
+ } catch (InvocationTargetException e) {
+ throw new CannotAccessMethodException(
+ "The getter method for property '"
+ + descriptor.getName() + "' threw an exception",
+ e);
+ }
+ }
+
+ /** {@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/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextVariableResolverFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextVariableResolverFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/package.html
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/package.html?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/package.html (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/package.html Wed Jun 24 14:08:32 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 MVEL implementation</title>
+</head>
+<body>
+Attribute evaluator classes that can perform MVEL evaluation for attributes.
+</body>
+</html>
\ No newline at end of file
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/package.html
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/package.html
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java Wed Jun 24 14:08:32 2009
@@ -45,7 +45,8 @@
import org.apache.tiles.definition.pattern.PatternDefinitionResolver;
import org.apache.tiles.definition.pattern.PatternDefinitionResolverAware;
import org.apache.tiles.definition.pattern.WildcardPatternDefinitionResolver;
-import org.apache.tiles.evaluator.AttributeEvaluator;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
+import org.apache.tiles.evaluator.BasicAttributeEvaluatorFactory;
import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator;
import org.apache.tiles.impl.BasicTilesContainer;
import org.apache.tiles.locale.LocaleResolver;
@@ -91,13 +92,13 @@
requestContextFactory);
container.setDefinitionsFactory(createDefinitionsFactory(applicationContext,
requestContextFactory, resolver));
- AttributeEvaluator evaluator = createEvaluator(applicationContext,
- requestContextFactory, resolver);
- container.setEvaluator(evaluator);
+ AttributeEvaluatorFactory attributeEvaluatorFactory = createAttributeEvaluatorFactory(
+ applicationContext, requestContextFactory, resolver);
+ container.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
container.setPreparerFactory(createPreparerFactory(applicationContext,
requestContextFactory));
container.setRendererFactory(createRendererFactory(applicationContext,
- requestContextFactory, container, evaluator));
+ requestContextFactory, container, attributeEvaluatorFactory));
return container;
}
@@ -324,17 +325,21 @@
}
/**
- * Creates the attribute evaluator to use. By default it returns a {@link DirectAttributeEvaluator}.
+ * Creates the attribute evaluator factory to use. By default it returns a
+ * {@link BasicAttributeEvaluatorFactory} containing the
+ * {@link DirectAttributeEvaluator} as the default evaluator.
+ *
* @param applicationContext The Tiles application context.
* @param contextFactory The Tiles context factory.
* @param resolver The locale resolver.
*
- * @return The evaluator.
+ * @return The evaluator factory.
+ * @since 2.2.0
*/
- protected AttributeEvaluator createEvaluator(TilesApplicationContext applicationContext,
- TilesRequestContextFactory contextFactory,
- LocaleResolver resolver) {
- return new DirectAttributeEvaluator();
+ protected AttributeEvaluatorFactory createAttributeEvaluatorFactory(
+ TilesApplicationContext applicationContext,
+ TilesRequestContextFactory contextFactory, LocaleResolver resolver) {
+ return new BasicAttributeEvaluatorFactory(new DirectAttributeEvaluator());
}
/**
@@ -360,23 +365,23 @@
* @param applicationContext The Tiles application context.
* @param contextFactory The Tiles context factory.
* @param container The container.
- * @param evaluator The evaluator.
+ * @param attributeEvaluatorFactory The attribute evaluator factory.
*
* @return The renderer factory.
- * @since 2.1.1
+ * @since 2.2.0
*/
protected RendererFactory createRendererFactory(TilesApplicationContext applicationContext,
TilesRequestContextFactory contextFactory,
- TilesContainer container, AttributeEvaluator evaluator) {
+ TilesContainer container, AttributeEvaluatorFactory attributeEvaluatorFactory) {
BasicRendererFactory retValue = new BasicRendererFactory();
retValue.setApplicationContext(applicationContext);
retValue.setRequestContextFactory(contextFactory);
retValue.setContainer(container);
- retValue.setEvaluator(evaluator);
+ retValue.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
retValue.setDefaultRenderer(createDefaultAttributeRenderer(applicationContext,
- contextFactory, container, evaluator));
+ contextFactory, container, attributeEvaluatorFactory));
registerAttributeRenderers(retValue, applicationContext, contextFactory,
- container, evaluator);
+ container, attributeEvaluatorFactory);
return retValue;
}
@@ -386,25 +391,26 @@
* @param applicationContext The Tiles application context.
* @param contextFactory The Tiles context factory.
* @param container The container.
- * @param evaluator The evaluator.
+ * @param attributeEvaluatorFactory The attribute evaluator factory.
*
* @return The default attribute renderer.
- * @since 2.1.1
+ * @since 2.2.0
*/
protected AttributeRenderer createDefaultAttributeRenderer(TilesApplicationContext applicationContext,
TilesRequestContextFactory contextFactory,
TilesContainer container,
- AttributeEvaluator evaluator) {
+ AttributeEvaluatorFactory attributeEvaluatorFactory) {
UntypedAttributeRenderer retValue = new UntypedAttributeRenderer();
retValue.setApplicationContext(applicationContext);
retValue.setContainer(container);
retValue.setRequestContextFactory(contextFactory);
- retValue.setEvaluator(evaluator);
+ retValue.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
return retValue;
}
/**
- * Creates a new pattern definition resolver. By default, it instantiate a {@link WildcardPatternDefinitionResolver}.
+ * Creates a new pattern definition resolver. By default, it instantiate a
+ * {@link WildcardPatternDefinitionResolver}.
*
* @param <T> The type of the customization key.
* @param customizationKeyClass The customization key class.
@@ -426,30 +432,32 @@
* @param applicationContext The Tiles application context.
* @param contextFactory The Tiles context factory.
* @param container The container.
- * @param evaluator The evaluator.
- * @since 2.1.1
+ * @param attributeEvaluatorFactory The attribute evaluator factory.
+ * @since 2.2.0
*/
protected void registerAttributeRenderers(
- BasicRendererFactory rendererFactory, TilesApplicationContext applicationContext,
+ BasicRendererFactory rendererFactory,
+ TilesApplicationContext applicationContext,
TilesRequestContextFactory contextFactory,
- TilesContainer container, AttributeEvaluator evaluator) {
+ TilesContainer container,
+ AttributeEvaluatorFactory attributeEvaluatorFactory) {
StringAttributeRenderer stringRenderer = new StringAttributeRenderer();
stringRenderer.setApplicationContext(applicationContext);
stringRenderer.setRequestContextFactory(contextFactory);
- stringRenderer.setEvaluator(evaluator);
+ stringRenderer.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
rendererFactory.registerRenderer("string", stringRenderer);
TemplateAttributeRenderer templateRenderer = new TemplateAttributeRenderer();
templateRenderer.setApplicationContext(applicationContext);
templateRenderer.setRequestContextFactory(contextFactory);
- templateRenderer.setEvaluator(evaluator);
+ templateRenderer.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
rendererFactory.registerRenderer("template", templateRenderer);
DefinitionAttributeRenderer definitionRenderer = new DefinitionAttributeRenderer();
definitionRenderer.setApplicationContext(applicationContext);
definitionRenderer.setContainer(container);
definitionRenderer.setRequestContextFactory(contextFactory);
- definitionRenderer.setEvaluator(evaluator);
+ definitionRenderer.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
rendererFactory.registerRenderer("definition", definitionRenderer);
}
}
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java Wed Jun 24 14:08:32 2009
@@ -20,6 +20,11 @@
*/
package org.apache.tiles.factory;
+import java.lang.reflect.Method;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tiles.Initializable;
@@ -35,7 +40,9 @@
import org.apache.tiles.definition.DefinitionsFactory;
import org.apache.tiles.definition.UrlDefinitionsFactory;
import org.apache.tiles.evaluator.AttributeEvaluator;
-import org.apache.tiles.evaluator.AttributeEvaluatorAware;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactoryAware;
+import org.apache.tiles.evaluator.BasicAttributeEvaluatorFactory;
import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator;
import org.apache.tiles.impl.BasicTilesContainer;
import org.apache.tiles.impl.mgmt.CachingTilesContainer;
@@ -46,11 +53,6 @@
import org.apache.tiles.renderer.RendererFactory;
import org.apache.tiles.renderer.impl.BasicRendererFactory;
-import java.lang.reflect.Method;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-
/**
* Factory provided for convenience.
* This factory creates a default implementation of
@@ -431,6 +433,8 @@
AttributeEvaluator evaluator = (AttributeEvaluator) createFactory(
configuration, ATTRIBUTE_EVALUATOR_INIT_PARAM);
+ AttributeEvaluatorFactory attributeEvaluatorFactory = new BasicAttributeEvaluatorFactory(
+ evaluator);
if (evaluator instanceof TilesApplicationContextAware) {
((TilesApplicationContextAware) evaluator)
@@ -457,8 +461,9 @@
((TilesContainerAware) rendererFactory).setContainer(container);
}
- if (rendererFactory instanceof AttributeEvaluatorAware) {
- ((AttributeEvaluatorAware) rendererFactory).setEvaluator(evaluator);
+ if (rendererFactory instanceof AttributeEvaluatorFactoryAware) {
+ ((AttributeEvaluatorFactoryAware) rendererFactory)
+ .setAttributeEvaluatorFactory(attributeEvaluatorFactory);
}
rendererFactory.init(initParameters);
@@ -473,7 +478,7 @@
container.setPreparerFactory(prepFactory);
container.setApplicationContext(context);
container.setRendererFactory(rendererFactory);
- container.setEvaluator(evaluator);
+ container.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
}
/**
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java Wed Jun 24 14:08:32 2009
@@ -34,6 +34,8 @@
import org.apache.tiles.definition.DefinitionsFactoryException;
import org.apache.tiles.definition.NoSuchDefinitionException;
import org.apache.tiles.evaluator.AttributeEvaluator;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactoryAware;
import org.apache.tiles.preparer.NoSuchPreparerException;
import org.apache.tiles.preparer.PreparerFactory;
import org.apache.tiles.preparer.ViewPreparer;
@@ -57,7 +59,8 @@
* @since 2.0
* @version $Rev$ $Date$
*/
-public class BasicTilesContainer implements TilesContainer {
+public class BasicTilesContainer implements TilesContainer,
+ AttributeEvaluatorFactoryAware {
/**
* Constant representing the configuration parameter used to define the
@@ -111,7 +114,7 @@
/**
* The attribute evaluator.
*/
- private AttributeEvaluator evaluator;
+ private AttributeEvaluatorFactory attributeEvaluatorFactory;
/**
* The Tiles request context factory.
@@ -145,8 +148,8 @@
if (definitionsFactory == null) {
throw new IllegalStateException("DefinitionsFactory not specified");
}
- if (evaluator == null) {
- throw new IllegalStateException("AttributeEvaluator not specified");
+ if (attributeEvaluatorFactory == null) {
+ throw new IllegalStateException("AttributeEvaluatorFactory not specified");
}
if (contextFactory == null) {
throw new IllegalStateException("TilesContextFactory not specified");
@@ -294,14 +297,10 @@
this.rendererFactory = rendererFactory;
}
- /**
- * Sets the evaluator to use.
- *
- * @param evaluator The evaluator to use.
- * @since 2.1.0
- */
- public void setEvaluator(AttributeEvaluator evaluator) {
- this.evaluator = evaluator;
+ /** {@inheritDoc} */
+ public void setAttributeEvaluatorFactory(
+ AttributeEvaluatorFactory attributeEvaluatorFactory) {
+ this.attributeEvaluatorFactory = attributeEvaluatorFactory;
}
/** {@inheritDoc} */
@@ -341,6 +340,8 @@
public Object evaluate(Attribute attribute, Object... requestItems) {
TilesRequestContext request = getRequestContextFactory()
.createRequestContext(context, requestItems);
+ AttributeEvaluator evaluator = attributeEvaluatorFactory
+ .getAttributeEvaluator(attribute);
return evaluator.evaluate(attribute, request);
}
@@ -627,7 +628,7 @@
}
/**
- * Renders the specified definition
+ * Renders the specified definition.
* @param request The request context.
* @param definition The definition to render.
* @since 2.1.3
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java Wed Jun 24 14:08:32 2009
@@ -33,7 +33,8 @@
import org.apache.tiles.context.TilesRequestContext;
import org.apache.tiles.context.TilesRequestContextFactory;
import org.apache.tiles.evaluator.AttributeEvaluator;
-import org.apache.tiles.evaluator.AttributeEvaluatorAware;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactoryAware;
import org.apache.tiles.renderer.AttributeRenderer;
/**
@@ -44,7 +45,7 @@
*/
public abstract class AbstractBaseAttributeRenderer implements
AttributeRenderer, TilesRequestContextFactoryAware,
- TilesApplicationContextAware, AttributeEvaluatorAware {
+ TilesApplicationContextAware, AttributeEvaluatorFactoryAware {
/**
* The logging object.
@@ -67,11 +68,11 @@
protected TilesApplicationContext applicationContext;
/**
- * The attribute evaluator.
+ * The attribute evaluator factory.
*
- * @since 2.1.0
+ * @since 2.2.0
*/
- protected AttributeEvaluator evaluator;
+ protected AttributeEvaluatorFactory attributeEvaluatorFactory;
/** {@inheritDoc} */
public void setRequestContextFactory(TilesRequestContextFactory contextFactory) {
@@ -84,8 +85,8 @@
}
/** {@inheritDoc} */
- public void setEvaluator(AttributeEvaluator evaluator) {
- this.evaluator = evaluator;
+ public void setAttributeEvaluatorFactory(AttributeEvaluatorFactory attributeEvaluatorFactory) {
+ this.attributeEvaluatorFactory = attributeEvaluatorFactory;
}
/** {@inheritDoc} */
@@ -98,6 +99,8 @@
return;
}
+ AttributeEvaluator evaluator = attributeEvaluatorFactory
+ .getAttributeEvaluator(attribute);
Object value = evaluator.evaluate(attribute, request);
write(value, attribute, request);
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java Wed Jun 24 14:08:32 2009
@@ -30,8 +30,8 @@
import org.apache.tiles.awareness.TilesContainerAware;
import org.apache.tiles.awareness.TilesRequestContextFactoryAware;
import org.apache.tiles.context.TilesRequestContextFactory;
-import org.apache.tiles.evaluator.AttributeEvaluator;
-import org.apache.tiles.evaluator.AttributeEvaluatorAware;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactoryAware;
import org.apache.tiles.reflect.ClassUtil;
import org.apache.tiles.renderer.AttributeRenderer;
import org.apache.tiles.renderer.RendererException;
@@ -45,7 +45,7 @@
*/
public class BasicRendererFactory implements RendererFactory,
TilesContainerAware, TilesRequestContextFactoryAware,
- TilesApplicationContextAware, AttributeEvaluatorAware {
+ TilesApplicationContextAware, AttributeEvaluatorFactoryAware {
/**
* The type renderers init parameter name.
@@ -102,9 +102,9 @@
/**
* The attribute evaluator.
*
- * @since 2.1.0
+ * @since 2.2.0
*/
- protected AttributeEvaluator evaluator;
+ protected AttributeEvaluatorFactory attributeEvaluatorFactory;
/**
* The renderer name/renderer map.
@@ -221,8 +221,8 @@
}
/** {@inheritDoc} */
- public void setEvaluator(AttributeEvaluator evaluator) {
- this.evaluator = evaluator;
+ public void setAttributeEvaluatorFactory(AttributeEvaluatorFactory attributeEvaluatorFactory) {
+ this.attributeEvaluatorFactory = attributeEvaluatorFactory;
}
/** {@inheritDoc} */
@@ -254,8 +254,9 @@
if (renderer instanceof TilesContainerAware) {
((TilesContainerAware) renderer).setContainer(container);
}
- if (renderer instanceof AttributeEvaluatorAware) {
- ((AttributeEvaluatorAware) renderer).setEvaluator(evaluator);
+ if (renderer instanceof AttributeEvaluatorFactoryAware) {
+ ((AttributeEvaluatorFactoryAware) renderer)
+ .setAttributeEvaluatorFactory(attributeEvaluatorFactory);
}
if (renderer instanceof Initializable && initParameters != null) {
((Initializable) renderer).init(initParameters);
Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/TilesRequestContextHolderTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/TilesRequestContextHolderTest.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/TilesRequestContextHolderTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/TilesRequestContextHolderTest.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,50 @@
+/*
+ * $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.context;
+
+import static org.junit.Assert.*;
+import static org.easymock.EasyMock.*;
+
+import org.junit.Test;
+
+/**
+ * Tests {@link TilesRequestContextHolderTest}.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class TilesRequestContextHolderTest {
+
+ /**
+ * Test method for {@link TilesRequestContextHolder#setTilesRequestContext(TilesRequestContext)}.
+ */
+ @Test
+ public void testSetTilesRequestContext() {
+ TilesRequestContext request = createMock(TilesRequestContext.class);
+
+ replay(request);
+ TilesRequestContextHolder holder = new TilesRequestContextHolder();
+ holder.setTilesRequestContext(request);
+ assertSame(request, holder.getTilesRequestContext());
+ verify(request);
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/TilesRequestContextHolderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/TilesRequestContextHolderTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestReloadableDefinitionsFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestReloadableDefinitionsFactory.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestReloadableDefinitionsFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestReloadableDefinitionsFactory.java Wed Jun 24 14:08:32 2009
@@ -54,7 +54,7 @@
* The time (in milliseconds) to wait to be sure that the system updates the
* modify date of a file.
*/
- private static final int SLEEP_MILLIS = 30000;
+ private static final int SLEEP_MILLIS = 2000;
/**
* Creates a new instance of TestReloadableDefinitionsFactory.
Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAOTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAOTest.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAOTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAOTest.java Wed Jun 24 14:08:32 2009
@@ -61,7 +61,7 @@
* The time (in milliseconds) to wait to be sure that the system updates the
* modify date of a file.
*/
- private static final int SLEEP_MILLIS = 30000;
+ private static final int SLEEP_MILLIS = 2000;
/**
* The object to test.
Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java Wed Jun 24 14:08:32 2009
@@ -64,7 +64,7 @@
* The time (in milliseconds) to wait to be sure that the system updates the
* modify date of a file.
*/
- private static final int SLEEP_MILLIS = 30000;
+ private static final int SLEEP_MILLIS = 2000;
/**
* The object to test.
Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/digester/TestDigesterDefinitionsReader.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/digester/TestDigesterDefinitionsReader.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/digester/TestDigesterDefinitionsReader.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/digester/TestDigesterDefinitionsReader.java Wed Jun 24 14:08:32 2009
@@ -213,11 +213,13 @@
def = definitions.get(defName);
assertNotNull("Couldn't find " + defName + " tile.", def);
Attribute templateAttribute = def.getTemplateAttribute();
- assertEquals(templateAttribute.getExpression(), "${my.expression}");
+ assertEquals(templateAttribute.getExpressionObject().getExpression(),
+ "${my.expression}");
assertEquals("mytype", templateAttribute.getRenderer());
attribute = def.getAttribute("body");
assertNotNull("Couldn't Find body attribute.", attribute);
- assertEquals("${my.attribute.expression}", attribute.getExpression());
+ assertEquals("${my.attribute.expression}", attribute
+ .getExpressionObject().getExpression());
}
/**
Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,62 @@
+/*
+ * $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.definition.pattern;
+
+import static org.junit.Assert.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.Definition;
+import org.junit.Test;
+
+/**
+ * Tests {@link PatternUtil}.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class PatternUtilTest {
+
+ /**
+ * Test method for
+ * {@link PatternUtil#replacePlaceholders(Definition, String, Object[])}.
+ */
+ @Test
+ public void testReplacePlaceholders() {
+ Map<String, Attribute> attributes = new HashMap<String, Attribute>();
+ attributes.put("attrib1", new Attribute("value{2}"));
+ attributes.put("attrib2", new Attribute("value{2}{3}"));
+ Definition definition = new Definition("definitionName", new Attribute(
+ "template{1}"), attributes);
+ Definition nudef = PatternUtil.replacePlaceholders(definition, "nudef",
+ "value0", "value1", "value2", "value3");
+ assertEquals("nudef", nudef.getName());
+ Attribute attribute = nudef.getTemplateAttribute();
+ assertEquals("templatevalue1", attribute.getValue());
+ attribute = nudef.getAttribute("attrib1");
+ assertEquals("valuevalue2", attribute.getValue());
+ attribute = nudef.getAttribute("attrib2");
+ assertEquals("valuevalue2value3", attribute.getValue());
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,74 @@
+/*
+ * $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.definition.pattern;
+
+import static org.junit.Assert.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.Definition;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests {@link WildcardPatternDefinitionResolver}.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class WildcardPatternDefinitionResolverTest {
+
+ /**
+ * The resolver to test.
+ */
+ private WildcardPatternDefinitionResolver<Integer> resolver;
+
+ /**
+ * Sets up the resolver.
+ */
+ @Before
+ public void setUp() {
+ resolver = new WildcardPatternDefinitionResolver<Integer>();
+ }
+
+ /**
+ * Test method for {@link WildcardPatternDefinitionResolver#resolveDefinition(String, Object)}.
+ */
+ @Test
+ public void testResolveDefinition() {
+ Integer key = 1;
+ Map<String, Definition> defsMap = new HashMap<String, Definition>();
+ Definition def = new Definition();
+ def.setName("testDef*.message*");
+ def.setTemplateAttribute(Attribute.createTemplateAttribute("/test{1}.jsp"));
+ def.putAttribute("body", new Attribute("message{2}"));
+ defsMap.put("testDef*.message*", def);
+ resolver.storeDefinitionPatterns(defsMap, key);
+ Definition result = resolver.resolveDefinition("testDefOne.messageTwo", key);
+ assertNotNull(result);
+ assertEquals("testDefOne.messageTwo", result.getName());
+ assertEquals("/testOne.jsp", result.getTemplateAttribute().getValue());
+ assertEquals("messageTwo", result.getAttribute("body").getValue());
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/BasicAttributeEvaluatorFactoryTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/BasicAttributeEvaluatorFactoryTest.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/BasicAttributeEvaluatorFactoryTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/BasicAttributeEvaluatorFactoryTest.java Wed Jun 24 14:08:32 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;
+
+import static org.junit.Assert.*;
+import static org.easymock.EasyMock.*;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.Expression;
+import org.junit.Test;
+
+/**
+ * Tests {@link BasicAttributeEvaluatorFactory}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class BasicAttributeEvaluatorFactoryTest {
+
+ /**
+ * Test method for {@link BasicAttributeEvaluatorFactory#getAttributeEvaluator(String)}.
+ */
+ @Test
+ public void testGetAttributeEvaluatorString() {
+ AttributeEvaluator defaultEvaluator = createMock(AttributeEvaluator.class);
+ AttributeEvaluator evaluator1 = createMock(AttributeEvaluator.class);
+ AttributeEvaluator evaluator2 = createMock(AttributeEvaluator.class);
+ replay(defaultEvaluator, evaluator1, evaluator2);
+ BasicAttributeEvaluatorFactory factory = new BasicAttributeEvaluatorFactory(defaultEvaluator);
+ factory.registerAttributeEvaluator("LANG1", evaluator1);
+ factory.registerAttributeEvaluator("LANG2", evaluator2);
+ assertSame(evaluator1, factory.getAttributeEvaluator("LANG1"));
+ assertSame(evaluator2, factory.getAttributeEvaluator("LANG2"));
+ assertSame(defaultEvaluator, factory.getAttributeEvaluator("LANG3"));
+ verify(defaultEvaluator, evaluator1, evaluator2);
+ }
+
+ /**
+ * Test method for {@link BasicAttributeEvaluatorFactory#getAttributeEvaluator(Attribute)}.
+ */
+ @Test
+ public void testGetAttributeEvaluatorAttribute() {
+ AttributeEvaluator defaultEvaluator = createMock(AttributeEvaluator.class);
+ AttributeEvaluator evaluator1 = createMock(AttributeEvaluator.class);
+ AttributeEvaluator evaluator2 = createMock(AttributeEvaluator.class);
+ replay(defaultEvaluator, evaluator1, evaluator2);
+ BasicAttributeEvaluatorFactory factory = new BasicAttributeEvaluatorFactory(defaultEvaluator);
+ factory.registerAttributeEvaluator("LANG1", evaluator1);
+ factory.registerAttributeEvaluator("LANG2", evaluator2);
+ assertSame(evaluator1, factory
+ .getAttributeEvaluator(createExpressionAttribute("LANG1")));
+ assertSame(evaluator2, factory
+ .getAttributeEvaluator(createExpressionAttribute("LANG2")));
+ assertSame(defaultEvaluator, factory
+ .getAttributeEvaluator(createExpressionAttribute("LANG3")));
+ verify(defaultEvaluator, evaluator1, evaluator2);
+ }
+
+ /**
+ * Creates a sample attribute with an expression.
+ *
+ * @param language The expression language.
+ * @return The attribute.
+ */
+ private Attribute createExpressionAttribute(String language) {
+ return new Attribute(null, Expression.createExpression(
+ "myExpression", language), null, "string");
+ }
+
+}
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/BasicAttributeEvaluatorFactoryTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/BasicAttributeEvaluatorFactoryTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/ELAttributeEvaluatorTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/ELAttributeEvaluatorTest.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/ELAttributeEvaluatorTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/ELAttributeEvaluatorTest.java Wed Jun 24 14:08:32 2009
@@ -23,13 +23,14 @@
import java.util.HashMap;
import java.util.Map;
+import junit.framework.TestCase;
+
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;
-import junit.framework.TestCase;
-
/**
* Tests {@link ELAttributeEvaluator}.
*
@@ -82,28 +83,28 @@
*/
public void testEvaluate() {
Attribute attribute = new Attribute();
- attribute.setExpression("${requestScope.object1}");
+ attribute.setExpressionObject(new Expression("${requestScope.object1}"));
assertEquals("The value is not correct", "value", evaluator.evaluate(
attribute, request));
- attribute.setExpression("${sessionScope.object2}");
+ attribute.setExpressionObject(new Expression("${sessionScope.object2}"));
assertEquals("The value is not correct", new Integer(1), evaluator
.evaluate(attribute, request));
- attribute.setExpression("${applicationScope.object3}");
+ attribute.setExpressionObject(new Expression("${applicationScope.object3}"));
assertEquals("The value is not correct", new Float(2.0), evaluator
.evaluate(attribute, request));
- attribute.setExpression("${object1}");
+ attribute.setExpressionObject(new Expression("${object1}"));
assertEquals("The value is not correct", "value", evaluator.evaluate(
attribute, request));
- attribute.setExpression("${object2}");
+ attribute.setExpressionObject(new Expression("${object2}"));
assertEquals("The value is not correct", new Integer(1), evaluator
.evaluate(attribute, request));
- attribute.setExpression("${object3}");
+ attribute.setExpressionObject(new Expression("${object3}"));
assertEquals("The value is not correct", new Float(2.0), evaluator
.evaluate(attribute, request));
- attribute.setExpression("${paulaBean.paula}");
+ attribute.setExpressionObject(new Expression("${paulaBean.paula}"));
assertEquals("The value is not correct", "Brillant", evaluator
.evaluate(attribute, request));
- attribute.setExpression("String literal");
+ attribute.setExpressionObject(new Expression("String literal"));
assertEquals("The value is not correct", "String literal", evaluator
.evaluate(attribute, request));
attribute.setValue(new Integer(2));
Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/TilesContextELResolverTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/TilesContextELResolverTest.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/TilesContextELResolverTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/TilesContextELResolverTest.java Wed Jun 24 14:08:32 2009
@@ -21,13 +21,11 @@
package org.apache.tiles.evaluator.el;
import java.beans.FeatureDescriptor;
-import java.util.ArrayList;
+import java.beans.PropertyDescriptor;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
-import java.util.List;
+import java.util.LinkedHashMap;
import java.util.Map;
-import java.util.Set;
import javax.el.ELContext;
@@ -35,6 +33,7 @@
import org.apache.tiles.TilesApplicationContext;
import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.reflect.ClassUtil;
import org.easymock.EasyMock;
/**
@@ -71,15 +70,12 @@
* {@link TilesContextELResolver#getFeatureDescriptors(javax.el.ELContext, java.lang.Object)}.
*/
public void testGetFeatureDescriptorsELContextObject() {
- List<FeatureDescriptor> expected = new ArrayList<FeatureDescriptor>();
- Set<String> properties = new HashSet<String>();
- resolver.collectBeanInfo(TilesRequestContext.class, expected,
- properties);
- resolver.collectBeanInfo(TilesApplicationContext.class, expected,
- properties);
+ Map<String, PropertyDescriptor> expected = new LinkedHashMap<String, PropertyDescriptor>();
+ ClassUtil.collectBeanInfo(TilesRequestContext.class, expected);
+ ClassUtil.collectBeanInfo(TilesApplicationContext.class, expected);
Iterator<FeatureDescriptor> featureIt = resolver.getFeatureDescriptors(
null, null);
- Iterator<FeatureDescriptor> expectedIt = expected.iterator();
+ Iterator<? extends FeatureDescriptor> expectedIt = expected.values().iterator();
while (featureIt.hasNext() && expectedIt.hasNext()) {
assertEquals("The feature is not the same", expectedIt.next(),
featureIt.next());
Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java Wed Jun 24 14:08:32 2009
@@ -20,10 +20,11 @@
*/
package org.apache.tiles.evaluator.impl;
-import org.apache.tiles.Attribute;
-
import junit.framework.TestCase;
+import org.apache.tiles.Attribute;
+import org.apache.tiles.Expression;
+
/**
* Tests {@link DirectAttributeEvaluator}.
*
@@ -47,13 +48,13 @@
*/
public void testEvaluate() {
String expression = "This is an expression";
- Attribute attribute = new Attribute(null, expression, null,
- (String) null);
+ Attribute attribute = new Attribute(null, Expression.createExpression(
+ expression, null), null, (String) null);
Object result = evaluator.evaluate(attribute, null);
assertEquals("The expression has not been evaluated correctly", result,
expression);
expression = "${attributeName}";
- attribute.setExpression(expression);
+ attribute.setExpressionObject(new Expression(expression));
result = evaluator.evaluate(attribute, null);
assertEquals("The expression has not been evaluated correctly", result,
expression);
Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/MVELAttributeEvaluatorTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/MVELAttributeEvaluatorTest.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/MVELAttributeEvaluatorTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/MVELAttributeEvaluatorTest.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,174 @@
+/*
+ * $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.mvel;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.Expression;
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.context.TilesRequestContextHolder;
+import org.easymock.EasyMock;
+import org.mvel2.integration.VariableResolverFactory;
+
+/**
+ * Tests {@link MVELAttributeEvaluator}.
+ *
+ * @version $Rev$ $Date$$
+ */
+public class MVELAttributeEvaluatorTest extends TestCase {
+
+ /**
+ * The evaluator to test.
+ */
+ private MVELAttributeEvaluator evaluator;
+
+ /**
+ * The request object to use.
+ */
+ private TilesRequestContext request;
+
+ /** {@inheritDoc} */
+ protected void setUp() throws Exception {
+ super.setUp();
+ TilesRequestContextHolder requestHolder = new TilesRequestContextHolder();
+ VariableResolverFactory variableResolverFactory = new TilesContextVariableResolverFactory(
+ requestHolder);
+ variableResolverFactory
+ .setNextFactory(new TilesContextBeanVariableResolverFactory(
+ requestHolder));
+ evaluator = new MVELAttributeEvaluator(requestHolder,
+ variableResolverFactory);
+ 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 MVELAttributeEvaluator#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 MVELAttributeEvaluator#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/mvel/MVELAttributeEvaluatorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/MVELAttributeEvaluatorTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactoryTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactoryTest.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactoryTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactoryTest.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,208 @@
+/*
+ * $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.mvel;
+
+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.apache.tiles.context.TilesRequestContextHolder;
+import org.junit.Before;
+import org.junit.Test;
+import org.mvel2.UnresolveablePropertyException;
+import org.mvel2.integration.VariableResolver;
+
+/**
+ * Tests {@link TilesContextBeanVariableResolverFactory}.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class TilesContextBeanVariableResolverFactoryTest {
+
+ /**
+ * The expected session scope calls.
+ */
+ private static final int EXPECTED_SESSION_CALLS = 3;
+
+ /**
+ * The expected request scope calls.
+ */
+ private static final int EXPECTED_REQUEST_CALLS = 4;
+
+ /**
+ * The Tiles request.
+ */
+ private TilesRequestContext request;
+
+ /**
+ * The Tiles application context.
+ */
+ private TilesApplicationContext applicationContext;
+
+ /**
+ * The object to test.
+ */
+ private TilesContextBeanVariableResolverFactory factory;
+
+ /**
+ * Sets up the object.
+ */
+ @Before
+ public void setUp() {
+ request = createMock(TilesRequestContext.class);
+ TilesRequestContextHolder holder = new TilesRequestContextHolder();
+ holder.setTilesRequestContext(request);
+ applicationContext = createMock(TilesApplicationContext.class);
+ factory = new TilesContextBeanVariableResolverFactory(holder);
+ }
+
+ /**
+ * Test method for {@link TilesContextBeanVariableResolverFactory#createVariable(String, Object)}.
+ */
+ @Test(expected = UnsupportedOperationException.class)
+ public void testCreateVariableStringObject() {
+ replay(request, applicationContext);
+ factory.createVariable("myName", "myValue");
+ verify(request, applicationContext);
+ }
+
+ /**
+ * Test method for {@link TilesContextBeanVariableResolverFactory#createVariable(String, Object, Class)}.
+ */
+ @Test(expected = UnsupportedOperationException.class)
+ public void testCreateVariableStringObjectClassOfQ() {
+ replay(request, applicationContext);
+ factory.createVariable("myName", "myValue", String.class);
+ verify(request, applicationContext);
+ }
+
+ /**
+ * Test method for {@link TilesContextBeanVariableResolverFactory#isResolveable(String)}.
+ */
+ @Test
+ public void testIsResolveable() {
+ Map<String, Object> requestScope = new HashMap<String, Object>();
+ requestScope.put("one", 1);
+ expect(request.getRequestScope()).andReturn(requestScope).times(
+ EXPECTED_REQUEST_CALLS);
+ Map<String, Object> applicationScope = new HashMap<String, Object>();
+ applicationScope.put("two", 2);
+ expect(request.getApplicationContext()).andReturn(applicationContext)
+ .times(2);
+ expect(applicationContext.getApplicationScope()).andReturn(
+ applicationScope).times(2);
+ Map<String, Object> sessionScope = new HashMap<String, Object>();
+ sessionScope.put("three", "three");
+ expect(request.getSessionScope()).andReturn(sessionScope).times(
+ EXPECTED_SESSION_CALLS);
+ replay(request, applicationContext);
+
+ assertTrue(factory.isResolveable("one"));
+ assertTrue(factory.isResolveable("two"));
+ assertTrue(factory.isResolveable("three"));
+ assertFalse(factory.isResolveable("four"));
+ verify(request, applicationContext);
+ }
+
+ /**
+ * Test method for {@link TilesContextBeanVariableResolverFactory#getVariableResolver(String)}.
+ */
+ @Test
+ public void testGetVariableResolverString() {
+ Map<String, Object> requestScope = new HashMap<String, Object>();
+ requestScope.put("one", 1);
+ expect(request.getRequestScope()).andReturn(requestScope).anyTimes();
+ Map<String, Object> applicationScope = new HashMap<String, Object>();
+ applicationScope.put("two", 2);
+ expect(request.getApplicationContext()).andReturn(applicationContext)
+ .anyTimes();
+ expect(applicationContext.getApplicationScope()).andReturn(
+ applicationScope).anyTimes();
+ Map<String, Object> sessionScope = new HashMap<String, Object>();
+ sessionScope.put("three", "three");
+ expect(request.getSessionScope()).andReturn(sessionScope).anyTimes();
+ replay(request, applicationContext);
+
+ VariableResolver resolver = factory.getVariableResolver("one");
+ assertEquals(1, resolver.getValue());
+ resolver = factory.getVariableResolver("two");
+ assertEquals(2, resolver.getValue());
+ resolver = factory.getVariableResolver("three");
+ assertEquals("three", resolver.getValue());
+ verify(request, applicationContext);
+ }
+
+ /**
+ * Test method for {@link TilesContextBeanVariableResolverFactory#getVariableResolver(String)}.
+ */
+ @Test(expected = UnresolveablePropertyException.class)
+ public void testGetVariableResolverStringException() {
+ Map<String, Object> requestScope = new HashMap<String, Object>();
+ requestScope.put("one", 1);
+ expect(request.getRequestScope()).andReturn(requestScope).anyTimes();
+ Map<String, Object> applicationScope = new HashMap<String, Object>();
+ applicationScope.put("two", 2);
+ expect(request.getApplicationContext()).andReturn(applicationContext)
+ .anyTimes();
+ expect(applicationContext.getApplicationScope()).andReturn(
+ applicationScope).anyTimes();
+ Map<String, Object> sessionScope = new HashMap<String, Object>();
+ sessionScope.put("three", "three");
+ expect(request.getSessionScope()).andReturn(sessionScope).anyTimes();
+ replay(request, applicationContext);
+
+ factory.getVariableResolver("four");
+ }
+
+ /**
+ * Test method for {@link TilesContextBeanVariableResolverFactory#isTarget(String)}.
+ */
+ @Test
+ public void testIsTarget() {
+ Map<String, Object> requestScope = new HashMap<String, Object>();
+ requestScope.put("one", 1);
+ expect(request.getRequestScope()).andReturn(requestScope).times(
+ EXPECTED_REQUEST_CALLS);
+ Map<String, Object> applicationScope = new HashMap<String, Object>();
+ applicationScope.put("two", 2);
+ expect(request.getApplicationContext()).andReturn(applicationContext)
+ .times(2);
+ expect(applicationContext.getApplicationScope()).andReturn(
+ applicationScope).times(2);
+ Map<String, Object> sessionScope = new HashMap<String, Object>();
+ sessionScope.put("three", "three");
+ expect(request.getSessionScope()).andReturn(sessionScope).times(
+ EXPECTED_SESSION_CALLS);
+ replay(request, applicationContext);
+
+ assertTrue(factory.isTarget("one"));
+ assertTrue(factory.isTarget("two"));
+ assertTrue(factory.isTarget("three"));
+ assertFalse(factory.isTarget("four"));
+ verify(request, applicationContext);
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactoryTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactoryTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL