You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mu...@apache.org on 2009/02/11 16:53:17 UTC
svn commit: r743366 - in /struts/struts2/trunk/plugins/convention/src:
main/java/org/apache/struts2/convention/ main/resources/
test/java/org/apache/struts2/convention/
Author: musachy
Date: Wed Feb 11 15:53:17 2009
New Revision: 743366
URL: http://svn.apache.org/viewvc?rev=743366&view=rev
Log:
WW-2994 Add extension points for Convention plugin classes
Added:
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionConstants.java
Modified:
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathConfigurationProvider.java
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathPackageProvider.java
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
struts/struts2/trunk/plugins/convention/src/main/resources/struts-plugin.xml
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
Modified: struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathConfigurationProvider.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathConfigurationProvider.java?rev=743366&r1=743365&r2=743366&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathConfigurationProvider.java (original)
+++ struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathConfigurationProvider.java Wed Feb 11 15:53:17 2009
@@ -25,6 +25,7 @@
import com.opensymphony.xwork2.config.ConfigurationProvider;
import com.opensymphony.xwork2.inject.ContainerBuilder;
import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.util.location.LocatableProperties;
import org.apache.struts2.dispatcher.DispatcherListener;
import org.apache.struts2.dispatcher.Dispatcher;
@@ -42,8 +43,8 @@
private boolean listeningToDispatcher;
@Inject
- public ClasspathConfigurationProvider(ActionConfigBuilder actionConfigBuilder) {
- this.actionConfigBuilder = actionConfigBuilder;
+ public ClasspathConfigurationProvider(Container container) {
+ this.actionConfigBuilder = container.getInstance(ActionConfigBuilder.class, container.getInstance(String.class, ConventionConstants.CONVENTION_ACTION_CONFIG_BUILDER));
}
@Inject(StrutsConstants.STRUTS_DEVMODE)
Modified: struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathPackageProvider.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathPackageProvider.java?rev=743366&r1=743365&r2=743366&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathPackageProvider.java (original)
+++ struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathPackageProvider.java Wed Feb 11 15:53:17 2009
@@ -23,6 +23,7 @@
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationException;
import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.inject.Container;
/**
* <p>
@@ -37,8 +38,8 @@
private ActionConfigBuilder actionConfigBuilder;
@Inject
- public ClasspathPackageProvider(ActionConfigBuilder actionConfigBuilder) {
- this.actionConfigBuilder = actionConfigBuilder;
+ public ClasspathPackageProvider(Container container) {
+ this.actionConfigBuilder = container.getInstance(ActionConfigBuilder.class, container.getInstance(String.class, ConventionConstants.CONVENTION_ACTION_CONFIG_BUILDER));
}
public void init(Configuration configuration) throws ConfigurationException {
Added: struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionConstants.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionConstants.java?rev=743366&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionConstants.java (added)
+++ struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionConstants.java Wed Feb 11 15:53:17 2009
@@ -0,0 +1,32 @@
+/*
+ * $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.struts2.convention;
+
+/**
+ * Constants used to extend the COnvention plugin
+ */
+public class ConventionConstants {
+ public static final String CONVENTION_ACTION_CONFIG_BUILDER = "struts.convention.actionConfigBuilder";
+ public static final String CONVENTION_ACTION_NAME_BUILDER = "struts.convention.actionNameBuilder";
+ public static final String CONVENTION_RESULT_MAP_BUILDER = "struts.convention.resultMapBuilder";
+ public static final String CONVENTION_INTERCEPTOR_MAP_BUILDER = "struts.convention.interceptorMapBuilder";
+ public static final String CONVENTION_CONVENTIONS_SERVICE = "struts.convention.conventionsService";
+}
Modified: struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java?rev=743366&r1=743365&r2=743366&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java (original)
+++ struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java Wed Feb 11 15:53:17 2009
@@ -43,6 +43,7 @@
import com.opensymphony.xwork2.config.entities.ResultConfig;
import com.opensymphony.xwork2.config.entities.ResultTypeConfig;
import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
@@ -81,9 +82,7 @@
* @param configuration The XWork configuration.
* @param objectFactory The XWork object factory used to create result instances.
* @param servletContext The servlet context used to help build the action configurations.
- * @param resultMapBuilder The result map builder that is used to create results.
- * @param conventionsService The conventions service used to get all the conventions and
- * configurations.
+ * @param container The Xwork container
* @param defaultParentPackageName The default XWork package that the unknown handler will use as
* the parent package for new actions and results.
* @param redirectToSlash A boolean parameter that controls whether or not this will handle
@@ -94,16 +93,15 @@
*/
@Inject
public ConventionUnknownHandler(Configuration configuration, ObjectFactory objectFactory,
- ServletContext servletContext, ResultMapBuilder resultMapBuilder,
- ConventionsService conventionsService,
+ ServletContext servletContext, Container container,
@Inject("struts.convention.default.parent.package") String defaultParentPackageName,
@Inject("struts.convention.redirect.to.slash") String redirectToSlash,
@Inject("struts.convention.action.name.separator") String nameSeparator) {
this.configuration = configuration;
this.objectFactory = objectFactory;
this.servletContext = servletContext;
- this.resultMapBuilder = resultMapBuilder;
- this.conventionsService = conventionsService;
+ this.resultMapBuilder = container.getInstance(ResultMapBuilder.class, container.getInstance(String.class, ConventionConstants.CONVENTION_RESULT_MAP_BUILDER));
+ this.conventionsService = container.getInstance(ConventionsService.class, container.getInstance(String.class, ConventionConstants.CONVENTION_CONVENTIONS_SERVICE));
this.defaultParentPackageName = defaultParentPackageName;
this.nameSeparator = nameSeparator;
Modified: struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java?rev=743366&r1=743365&r2=743366&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java (original)
+++ struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java Wed Feb 11 15:53:17 2009
@@ -39,6 +39,7 @@
import com.opensymphony.xwork2.config.entities.ResultConfig;
import com.opensymphony.xwork2.config.entities.ResultTypeConfig;
import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.util.finder.ResourceFinder;
import com.opensymphony.xwork2.util.finder.Test;
import com.opensymphony.xwork2.util.logging.Logger;
@@ -122,16 +123,16 @@
* Constructs the SimpleResultMapBuilder using the given result location.
*
* @param servletContext The ServletContext for finding the resources of the web application.
- * @param conventionsService The service used to assist in finding configuration and conventions.
+ * @param container The Xwork container
* @param relativeResultTypes The list of result types that can have locations that are relative
* and the result location (which is the resultPath plus the namespace) prepended to them.
*/
@Inject
- public DefaultResultMapBuilder(ServletContext servletContext, ConventionsService conventionsService,
+ public DefaultResultMapBuilder(ServletContext servletContext, Container container,
@Inject("struts.convention.relative.result.types") String relativeResultTypes) {
this.servletContext = servletContext;
this.relativeResultTypes = new HashSet<String>(Arrays.asList(relativeResultTypes.split("\\s*[,]\\s*")));
- this.conventionsService = conventionsService;
+ this.conventionsService = container.getInstance(ConventionsService.class, container.getInstance(String.class, ConventionConstants.CONVENTION_CONVENTIONS_SERVICE));
}
/**
Modified: struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java?rev=743366&r1=743365&r2=743366&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java (original)
+++ struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java Wed Feb 11 15:53:17 2009
@@ -55,6 +55,7 @@
import com.opensymphony.xwork2.config.entities.PackageConfig;
import com.opensymphony.xwork2.config.entities.ResultConfig;
import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.util.finder.ClassFinder;
import com.opensymphony.xwork2.util.finder.Test;
import com.opensymphony.xwork2.util.finder.UrlSet;
@@ -97,12 +98,7 @@
*
* @param configuration The XWork configuration that the new package configs and action configs
* are added to.
- * @param actionNameBuilder The action name builder used to convert action class names to action
- * names.
- * @param resultMapBuilder The result map builder used to create ResultConfig mappings for each
- * action.
- * @param interceptorMapBuilder The interceptor map builder used to create InterceptorConfig mappings for each
- * action.
+ * @param container Xwork Container
* @param objectFactory The ObjectFactory used to create the actions and such.
* @param redirectToSlash A boolean parameter that controls whether or not this will create an
* action for indexes. If this is set to true, index actions are not created because
@@ -111,16 +107,15 @@
* @param defaultParentPackage The default parent package for all the configuration.
*/
@Inject
- public PackageBasedActionConfigBuilder(Configuration configuration, ActionNameBuilder actionNameBuilder,
- ResultMapBuilder resultMapBuilder, InterceptorMapBuilder interceptorMapBuilder, ObjectFactory objectFactory,
+ public PackageBasedActionConfigBuilder(Configuration configuration, Container container, ObjectFactory objectFactory,
@Inject("struts.convention.redirect.to.slash") String redirectToSlash,
@Inject("struts.convention.default.parent.package") String defaultParentPackage) {
// Validate that the parameters are okay
this.configuration = configuration;
- this.actionNameBuilder = actionNameBuilder;
- this.resultMapBuilder = resultMapBuilder;
- this.interceptorMapBuilder = interceptorMapBuilder;
+ this.actionNameBuilder = container.getInstance(ActionNameBuilder.class, container.getInstance(String.class, ConventionConstants.CONVENTION_ACTION_NAME_BUILDER));
+ this.resultMapBuilder = container.getInstance(ResultMapBuilder.class, container.getInstance(String.class, ConventionConstants.CONVENTION_RESULT_MAP_BUILDER));
+ this.interceptorMapBuilder = container.getInstance(InterceptorMapBuilder.class, container.getInstance(String.class, ConventionConstants.CONVENTION_INTERCEPTOR_MAP_BUILDER));;
this.objectFactory = objectFactory;
this.redirectToSlash = Boolean.parseBoolean(redirectToSlash);
Modified: struts/struts2/trunk/plugins/convention/src/main/resources/struts-plugin.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/resources/struts-plugin.xml?rev=743366&r1=743365&r2=743366&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/main/resources/struts-plugin.xml (original)
+++ struts/struts2/trunk/plugins/convention/src/main/resources/struts-plugin.xml Wed Feb 11 15:53:17 2009
@@ -29,15 +29,21 @@
<struts>
<bean type="com.opensymphony.xwork2.UnknownHandler" name="convention" class="org.apache.struts2.convention.ConventionUnknownHandler"/>
- <bean type="org.apache.struts2.convention.ActionConfigBuilder" class="org.apache.struts2.convention.PackageBasedActionConfigBuilder"/>
- <bean type="org.apache.struts2.convention.ActionNameBuilder" class="org.apache.struts2.convention.SEOActionNameBuilder"/>
- <bean type="org.apache.struts2.convention.ResultMapBuilder" class="org.apache.struts2.convention.DefaultResultMapBuilder"/>
- <bean type="org.apache.struts2.convention.InterceptorMapBuilder" class="org.apache.struts2.convention.DefaultInterceptorMapBuilder"/>
- <bean type="org.apache.struts2.convention.ConventionsService" class="org.apache.struts2.convention.ConventionsServiceImpl"/>
+ <bean type="org.apache.struts2.convention.ActionConfigBuilder" name="convention" class="org.apache.struts2.convention.PackageBasedActionConfigBuilder"/>
+ <bean type="org.apache.struts2.convention.ActionNameBuilder" name="convention" class="org.apache.struts2.convention.SEOActionNameBuilder"/>
+ <bean type="org.apache.struts2.convention.ResultMapBuilder" name="convention" class="org.apache.struts2.convention.DefaultResultMapBuilder"/>
+ <bean type="org.apache.struts2.convention.InterceptorMapBuilder" name="convention" class="org.apache.struts2.convention.DefaultInterceptorMapBuilder"/>
+ <bean type="org.apache.struts2.convention.ConventionsService" name="convention" class="org.apache.struts2.convention.ConventionsServiceImpl"/>
<bean type="com.opensymphony.xwork2.config.PackageProvider" name="convention.packageProvider" class="org.apache.struts2.convention.ClasspathPackageProvider"/>
<bean type="com.opensymphony.xwork2.config.PackageProvider" name="convention.containerProvider" class="org.apache.struts2.convention.ClasspathConfigurationProvider"/>
+ <constant name="struts.convention.actionConfigBuilder" value="convention"/>
+ <constant name="struts.convention.actionNameBuilder" value="convention"/>
+ <constant name="struts.convention.resultMapBuilder" value="convention"/>
+ <constant name="struts.convention.interceptorMapBuilder" value="convention"/>
+ <constant name="struts.convention.conventionsService" value="convention"/>
+
<constant name="struts.convention.result.path" value="/WEB-INF/content/"/>
<constant name="struts.convention.result.flatLayout" value="true"/>
<constant name="struts.convention.action.suffix" value="Action"/>
Modified: struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java?rev=743366&r1=743365&r2=743366&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java (original)
+++ struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java Wed Feb 11 15:53:17 2009
@@ -36,10 +36,12 @@
import org.apache.struts2.convention.actions.resultpath.ClassLevelResultPathAction;
import org.apache.struts2.convention.annotation.Action;
import org.easymock.EasyMock;
+import org.easymock.IAnswer;
import com.opensymphony.xwork2.config.entities.PackageConfig;
import com.opensymphony.xwork2.config.entities.ResultConfig;
import com.opensymphony.xwork2.config.entities.ResultTypeConfig;
+import com.opensymphony.xwork2.inject.Container;
/**
* <p>
@@ -47,19 +49,24 @@
* </p>
*/
public class DefaultResultMapBuilderTest extends TestCase {
+ private Container container;
+ private ConventionsService conventionsService;
+
public void testBuild() throws Exception {
ServletContext context = mockServletContext("/WEB-INF/location");
// Test with a slash
PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
- DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, new ConventionsServiceImpl("/WEB-INF/location"), "dispatcher,velocity,freemarker");
+ this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
+ DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
Map<String, ResultConfig> results = builder.build(NoAnnotationAction.class, null, "action", packageConfig);
verify(context, "/WEB-INF/location", results, false);
// Test without a slash
context = mockServletContext("/WEB-INF/location");
packageConfig = createPackageConfigBuilder("namespace");
- builder = new DefaultResultMapBuilder(context, new ConventionsServiceImpl("/WEB-INF/location"), "dispatcher,velocity,freemarker");
+ this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
+ builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
results = builder.build(NoAnnotationAction.class, null, "action", packageConfig);
verify(context, "/WEB-INF/location", results, false);
}
@@ -71,7 +78,8 @@
// Test with a slash
PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
- DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, new ConventionsServiceImpl("/WEB-INF/location"), "dispatcher,velocity,freemarker");
+ this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
+ DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
Map<String, ResultConfig> results = builder.build(NoAnnotationAction.class, null, "action", packageConfig);
assertEquals(0, results.size());
EasyMock.verify(context);
@@ -82,7 +90,8 @@
// Test with a result path
PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
- DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, new ConventionsServiceImpl("/not-used"), "dispatcher,velocity,freemarker");
+ this.conventionsService = new ConventionsServiceImpl("/not-used");
+ DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
Map<String, ResultConfig> results = builder.build(ClassLevelResultPathAction.class, null, "action", packageConfig);
verify(context, "/class-level", results, false);
}
@@ -100,7 +109,8 @@
PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
- DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, new ConventionsServiceImpl("/WEB-INF/location"), "dispatcher,velocity,freemarker");
+ this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
+ DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
Map<String, ResultConfig> results = builder.build(NoAnnotationAction.class, null, "no-annotation", packageConfig);
assertEquals(4, results.size());
assertEquals("success", results.get("success").getName());
@@ -130,7 +140,8 @@
PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
- DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, new ConventionsServiceImpl("/WEB-INF/location"), "dispatcher,velocity,freemarker");
+ this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
+ DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
Map<String, ResultConfig> results = builder.build(ClassLevelResultAction.class, null, "class-level-result", packageConfig);
assertEquals(1, results.size());
assertEquals("error", results.get("error").getName());
@@ -152,7 +163,8 @@
PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
- DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, new ConventionsServiceImpl("/WEB-INF/location"), "dispatcher,velocity,freemarker");
+ this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
+ DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
Map<String, ResultConfig> results = builder.build(ClassLevelResultsAction.class, null, "class-level-results", packageConfig);
assertEquals(4, results.size());
assertEquals("error", results.get("error").getName());
@@ -190,7 +202,8 @@
PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
- DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, new ConventionsServiceImpl("/WEB-INF/location"), "dispatcher,velocity,freemarker");
+ this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
+ DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
Map<String, ResultConfig> results = builder.build(ActionLevelResultAction.class, getAnnotation(ActionLevelResultAction.class, "execute", Action.class), "action-level-result", packageConfig);
assertEquals(1, results.size());
assertEquals("success", results.get("success").getName());
@@ -212,7 +225,8 @@
PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
- DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, new ConventionsServiceImpl("/WEB-INF/location"), "dispatcher,velocity,freemarker");
+ this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
+ DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
Map<String, ResultConfig> results = builder.build(ActionLevelResultsAction.class, getAnnotation(ActionLevelResultsAction.class, "execute", Action.class), "action-level-results", packageConfig);
assertEquals(4, results.size());
assertEquals("error", results.get("error").getName());
@@ -244,7 +258,8 @@
PackageConfig packageConfig = new PackageConfig.Builder("package").
defaultResultType("dispatcher").addResultTypeConfig(resultType).build();
- DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, new ConventionsServiceImpl("/WEB-INF/component"), "dispatcher,velocity,freemarker");
+ this.conventionsService = new ConventionsServiceImpl("/WEB-INF/component");
+ DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
Map<String, ResultConfig> results = builder.build(NoAnnotationAction.class, null, "no-annotation", packageConfig);
assertEquals(4, results.size());
assertEquals("input", results.get("input").getName());
@@ -324,4 +339,17 @@
assertEquals("value1", results.get("error").getParams().get("key1"));
EasyMock.verify(context);
}
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ this.container = EasyMock.createNiceMock(Container.class);
+ EasyMock.expect(container.getInstance(String.class, ConventionConstants.CONVENTION_CONVENTIONS_SERVICE)).andReturn("convention").anyTimes();
+ EasyMock.expect(container.getInstance(ConventionsService.class, "convention")).andAnswer(new IAnswer<ConventionsService>() {
+ public ConventionsService answer() throws Throwable {
+ return DefaultResultMapBuilderTest.this.conventionsService;
+ }
+ }).anyTimes();
+ EasyMock.replay(this.container);
+ }
}
\ No newline at end of file
Modified: struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java?rev=743366&r1=743365&r2=743366&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java (original)
+++ struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java Wed Feb 11 15:53:17 2009
@@ -260,11 +260,13 @@
EasyMock.replay(resultMapBuilder);
+ final DummyContainer mockContainer = new DummyContainer();
+
Configuration configuration = new DefaultConfiguration() {
@Override
public Container getContainer() {
- return new DummyContainer();
+ return mockContainer;
}
};
@@ -277,8 +279,14 @@
ObjectFactory of = new ObjectFactory();
DefaultInterceptorMapBuilder interceptorBuilder = new DefaultInterceptorMapBuilder();
interceptorBuilder.setConfiguration(configuration);
- PackageBasedActionConfigBuilder builder = new PackageBasedActionConfigBuilder(configuration,
- actionNameBuilder, resultMapBuilder, interceptorBuilder ,of, "false", "struts-default");
+
+ //set beans on mock container
+ mockContainer.setActionNameBuilder(actionNameBuilder);
+ mockContainer.setInterceptorMapBuilder(interceptorBuilder);
+ mockContainer.setResultMapBuilder(resultMapBuilder);
+ mockContainer.setConventionsService(new ConventionsServiceImpl(""));
+
+ PackageBasedActionConfigBuilder builder = new PackageBasedActionConfigBuilder(configuration, mockContainer ,of, "false", "struts-default");
if (actionPackages != null) {
builder.setActionPackages(actionPackages);
}
@@ -489,7 +497,7 @@
EasyMock.replay(context);
ObjectFactory workingFactory = configuration.getContainer().getInstance(ObjectFactory.class);
- ConventionUnknownHandler uh = new ConventionUnknownHandler(configuration, workingFactory, context, resultMapBuilder, new ConventionsServiceImpl(""), "struts-default", null, "-");
+ ConventionUnknownHandler uh = new ConventionUnknownHandler(configuration, workingFactory, context, mockContainer, "struts-default", null, "-");
ActionContext actionContext = new ActionContext(Collections.EMPTY_MAP);
Result result = uh.handleUnknownResult(actionContext, "foo", pkgConfig.getActionConfigs().get("foo"), "bar");
@@ -580,6 +588,26 @@
}
public class DummyContainer implements Container {
+ private ActionNameBuilder actionNameBuilder;
+ private ResultMapBuilder resultMapBuilder;
+ private InterceptorMapBuilder interceptorMapBuilder;
+ private ConventionsService conventionsService;
+
+ public void setActionNameBuilder(ActionNameBuilder actionNameBuilder) {
+ this.actionNameBuilder = actionNameBuilder;
+ }
+
+ public void setInterceptorMapBuilder(InterceptorMapBuilder interceptorMapBuilder) {
+ this.interceptorMapBuilder = interceptorMapBuilder;
+ }
+
+ public void setResultMapBuilder(ResultMapBuilder resultMapBuilder) {
+ this.resultMapBuilder = resultMapBuilder;
+ }
+
+ public void setConventionsService(ConventionsService conventionsService) {
+ this.conventionsService = conventionsService;
+ }
public <T> T getInstance(Class<T> type) {
try {
@@ -612,6 +640,14 @@
}
public <T> T getInstance(Class<T> type, String name) {
+ if (type == ResultMapBuilder.class)
+ return (T) resultMapBuilder;
+ else if (type == InterceptorMapBuilder.class)
+ return (T) interceptorMapBuilder;
+ else if (type == ActionNameBuilder.class)
+ return (T) actionNameBuilder;
+ else if (type == ConventionsService.class)
+ return (T) conventionsService;
return null;
}