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; }