You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2016/01/21 08:45:25 UTC
[1/4] struts git commit: WW-4590 - Allow to use multiple names in
result
Repository: struts
Updated Branches:
refs/heads/master cae57093b -> 11561cb29
WW-4590 - Allow to use multiple names in result
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/087cf610
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/087cf610
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/087cf610
Branch: refs/heads/master
Commit: 087cf610abcd262980a41c30a2f9360aa3f416e1
Parents: d923c7c
Author: Aleksandr Mashchenko <al...@gmail.com>
Authored: Mon Jan 18 21:23:46 2016 +0200
Committer: Aleksandr Mashchenko <al...@gmail.com>
Committed: Mon Jan 18 21:23:46 2016 +0200
----------------------------------------------------------------------
.../providers/XmlConfigurationProvider.java | 20 +++-
.../XmlConfigurationProviderResultsTest.java | 54 ++++++++++
.../providers/xwork-test-result-names.xml | 48 +++++++++
.../convention/DefaultResultMapBuilder.java | 35 +++++--
.../convention/DefaultResultMapBuilderTest.java | 104 +++++++++++++++++++
.../PackageBasedActionConfigBuilderTest.java | 6 +-
.../result/ActionLevelResultsNamesAction.java | 61 +++++++++++
7 files changed, 314 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/087cf610/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
index 5846969..e3b0c19 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
@@ -777,11 +777,21 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
}
params.putAll(resultParams);
- ResultConfig resultConfig = new ResultConfig.Builder(resultName, resultClass)
- .addParams(params)
- .location(DomHelper.getLocationObject(element))
- .build();
- results.put(resultConfig.getName(), resultConfig);
+ Set<String> resultNamesSet;
+ if (",".equals(resultName.trim())) {
+ resultNamesSet = new HashSet<>(1);
+ resultNamesSet.add(resultName);
+ } else {
+ resultNamesSet = TextParseUtil.commaDelimitedStringToSet(resultName);
+ }
+
+ for (String name : resultNamesSet) {
+ ResultConfig resultConfig = new ResultConfig.Builder(name, resultClass)
+ .addParams(params)
+ .location(DomHelper.getLocationObject(element))
+ .build();
+ results.put(resultConfig.getName(), resultConfig);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/struts/blob/087cf610/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java
index caa9da0..468ea1a 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java
@@ -15,6 +15,7 @@
*/
package com.opensymphony.xwork2.config.providers;
+import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionChainResult;
import com.opensymphony.xwork2.SimpleAction;
import com.opensymphony.xwork2.config.ConfigurationException;
@@ -118,4 +119,57 @@ public class XmlConfigurationProviderResultsTest extends ConfigurationTestBase {
assertEquals(chainResult, resultTypes.get("chain"));
assertEquals(mockResult, resultTypes.get("mock"));
}
+
+ public void testResultNames() throws ConfigurationException {
+ final String filename = "com/opensymphony/xwork2/config/providers/xwork-test-result-names.xml";
+ ConfigurationProvider provider = buildConfigurationProvider(filename);
+
+ // execute the configuration
+ provider.init(configuration);
+ provider.loadPackages();
+
+ PackageConfig pkg = configuration.getPackageConfig("default");
+ Map<String, ActionConfig> actionConfigs = pkg.getActionConfigs();
+
+ // assertions
+ assertNotNull(actionConfigs);
+
+ Map<String, ResultConfig> resultConfigs = actionConfigs.get("noname").getResults();
+ assertEquals(1, resultConfigs.size());
+ assertTrue(resultConfigs.containsKey(Action.SUCCESS));
+
+ resultConfigs = actionConfigs.get("success").getResults();
+ assertEquals(1, resultConfigs.size());
+ assertTrue(resultConfigs.containsKey(Action.SUCCESS));
+
+ resultConfigs = actionConfigs.get("empty").getResults();
+ assertEquals(1, resultConfigs.size());
+ assertTrue(resultConfigs.containsKey(Action.SUCCESS));
+
+ resultConfigs = actionConfigs.get("comma").getResults();
+ assertEquals(1, resultConfigs.size());
+ assertTrue(resultConfigs.containsKey(" , "));
+
+ resultConfigs = actionConfigs.get("error-input").getResults();
+ assertEquals(2, resultConfigs.size());
+ assertTrue(resultConfigs.containsKey(Action.ERROR));
+ assertTrue(resultConfigs.containsKey(Action.INPUT));
+
+ resultConfigs = actionConfigs.get("error-input2").getResults();
+ assertEquals(2, resultConfigs.size());
+ assertTrue(resultConfigs.containsKey(Action.ERROR));
+ assertTrue(resultConfigs.containsKey(Action.INPUT));
+
+ resultConfigs = actionConfigs.get("noname-error-input").getResults();
+ assertEquals(3, resultConfigs.size());
+ assertTrue(resultConfigs.containsKey(Action.SUCCESS));
+ assertTrue(resultConfigs.containsKey(Action.ERROR));
+ assertTrue(resultConfigs.containsKey(Action.INPUT));
+
+ resultConfigs = actionConfigs.get("noname-error-input2").getResults();
+ assertEquals(3, resultConfigs.size());
+ assertTrue(resultConfigs.containsKey(Action.SUCCESS));
+ assertTrue(resultConfigs.containsKey(Action.ERROR));
+ assertTrue(resultConfigs.containsKey(Action.INPUT));
+ }
}
http://git-wip-us.apache.org/repos/asf/struts/blob/087cf610/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-result-names.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-result-names.xml b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-result-names.xml
new file mode 100644
index 0000000..e740577
--- /dev/null
+++ b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-result-names.xml
@@ -0,0 +1,48 @@
+<!DOCTYPE xwork PUBLIC
+ "-//Apache Struts//XWork 2.5//EN"
+ "http://struts.apache.org/dtds/xwork-2.5.dtd"
+ >
+
+<xwork>
+ <include file="xwork-test-beans.xml" />
+ <package name="default">
+ <result-types>
+ <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult" default="true"/>
+ </result-types>
+
+ <action name="noname">
+ <result />
+ </action>
+
+ <action name="success">
+ <result name="success" />
+ </action>
+
+ <action name="empty">
+ <result name="" />
+ </action>
+
+ <action name="comma">
+ <result name=" , " />
+ </action>
+
+ <action name="error-input">
+ <result name="error, input" />
+ </action>
+
+ <action name="error-input2">
+ <result name="error, input, " />
+ </action>
+
+ <action name="noname-error-input">
+ <result />
+ <result name="error, input" />
+ </action>
+
+ <action name="noname-error-input2">
+ <result />
+ <result name="error" />
+ <result name="input" />
+ </action>
+ </package>
+</xwork>
http://git-wip-us.apache.org/repos/asf/struts/blob/087cf610/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java b/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
index 87fb970..b7c5b51 100644
--- a/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
+++ b/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
@@ -28,6 +28,7 @@ import com.opensymphony.xwork2.config.entities.ResultConfig;
import com.opensymphony.xwork2.config.entities.ResultTypeConfig;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.util.TextParseUtil;
import com.opensymphony.xwork2.util.finder.ClassLoaderInterface;
import com.opensymphony.xwork2.util.finder.ClassLoaderInterfaceDelegate;
import com.opensymphony.xwork2.util.finder.ResourceFinder;
@@ -409,11 +410,21 @@ public class DefaultResultMapBuilder implements ResultMapBuilder {
Class<?> actionClass, Map<String, ResultTypeConfig> resultsByExtension) {
// Check for multiple results on the class
for (Result result : results) {
- ResultConfig config = createResultConfig(actionClass,
- new ResultInfo(result, packageConfig, resultPath, actionClass, resultsByExtension),
- packageConfig, result);
- if (config != null) {
- resultConfigs.put(config.getName(), config);
+ Set<String> names;
+ if (",".equals(result.name().trim())) {
+ names = new HashSet<>(1);
+ names.add(result.name());
+ } else {
+ names = TextParseUtil.commaDelimitedStringToSet(result.name());
+ }
+
+ for (String name : names) {
+ ResultConfig config = createResultConfig(actionClass, new ResultInfo(
+ name, result, packageConfig, resultPath, actionClass,
+ resultsByExtension), packageConfig, result);
+ if (config != null) {
+ resultConfigs.put(config.getName(), config);
+ }
}
}
}
@@ -478,9 +489,10 @@ public class DefaultResultMapBuilder implements ResultMapBuilder {
this.type = determineType(location, packageConfig, resultsByExtension);
}
- public ResultInfo(Result result, PackageConfig packageConfig, String resultPath,
- Class<?> actionClass, Map<String, ResultTypeConfig> resultsByExtension) {
- this.name = result.name();
+ public ResultInfo(String name, Result result, PackageConfig packageConfig,
+ String resultPath, Class<?> actionClass,
+ Map<String, ResultTypeConfig> resultsByExtension) {
+ this.name = name;
if (StringUtils.isNotBlank(result.type())) {
this.type = result.type();
} else if (StringUtils.isNotBlank(result.location())) {
@@ -503,6 +515,13 @@ public class DefaultResultMapBuilder implements ResultMapBuilder {
}
}
+ public ResultInfo(Result result, PackageConfig packageConfig,
+ String resultPath, Class<?> actionClass,
+ Map<String, ResultTypeConfig> resultsByExtension) {
+ this(result.name(), result, packageConfig, resultPath, actionClass,
+ resultsByExtension);
+ }
+
String determineType(String location, PackageConfig packageConfig,
Map<String, ResultTypeConfig> resultsByExtension) {
int indexOfDot = location.lastIndexOf(".");
http://git-wip-us.apache.org/repos/asf/struts/blob/087cf610/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java b/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
index abda7b3..b73667a 100644
--- a/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
+++ b/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
@@ -487,6 +487,110 @@ public class DefaultResultMapBuilderTest extends TestCase {
EasyMock.verify(context);
}
+ public void testActionLevelMultipleResultNamesAnnotation() throws Exception {
+ ServletContext context = EasyMock.createStrictMock(ServletContext.class);
+
+ // Setup some mock jsps
+ Set<String> resources = new HashSet<>();
+ EasyMock.expect(context.getResourcePaths("/WEB-INF/location/namespace/")).andReturn(resources);
+ EasyMock.replay(context);
+
+ PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
+
+ this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
+ DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
+ Map<String, ResultConfig> results = builder.build(ActionLevelResultsNamesAction.class, getAnnotation(ActionLevelResultsNamesAction.class, "execute", Action.class), "action-level-results", packageConfig);
+ assertEquals(4, results.size());
+ assertEquals("error", results.get("error").getName());
+ assertEquals("input", results.get("input").getName());
+ assertEquals("success", results.get("success").getName());
+ assertEquals("failure", results.get("failure").getName());
+ assertEquals(3, results.get("error").getParams().size());
+ assertEquals("/WEB-INF/location/namespace/error.jsp", results.get("error").getParams().get("location"));
+ assertEquals("org.apache.struts2.result.ServletDispatcherResult", results.get("error").getClassName());
+ assertEquals("value", results.get("success").getParams().get("key"));
+ assertEquals("value1", results.get("success").getParams().get("key1"));
+ assertEquals(3, results.get("input").getParams().size());
+ assertEquals("/WEB-INF/location/namespace/error.jsp", results.get("input").getParams().get("location"));
+ assertEquals("org.apache.struts2.result.ServletDispatcherResult", results.get("input").getClassName());
+ assertEquals(3, results.get("failure").getParams().size());
+ assertEquals("/WEB-INF/location/namespace/action-failure.jsp", results.get("failure").getParams().get("location"));
+ assertEquals("org.apache.struts2.result.ServletDispatcherResult", results.get("failure").getClassName());
+ assertEquals(3, results.get("success").getParams().size());
+ assertEquals("/WEB-INF/location/namespace/action-success.jsp", results.get("success").getParams().get("location"));
+ assertEquals("org.apache.struts2.result.ServletDispatcherResult", results.get("success").getClassName());
+ EasyMock.verify(context);
+ }
+
+ public void testActionLevelMultipleResultNamesAnnotationErrorInput() throws Exception {
+ ServletContext context = EasyMock.createStrictMock(ServletContext.class);
+
+ // Setup some mock jsps
+ Set<String> resources = new HashSet<>();
+ EasyMock.expect(context.getResourcePaths("/WEB-INF/location/namespace/")).andReturn(resources);
+ EasyMock.replay(context);
+
+ PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
+
+ this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
+ DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
+ Map<String, ResultConfig> results = builder.build(ActionLevelResultsNamesAction.class, getAnnotation(ActionLevelResultsNamesAction.class, "errorinput", Action.class), "action-level-results", packageConfig);
+ assertEquals(2, results.size());
+ assertEquals("error", results.get("error").getName());
+ assertEquals("input", results.get("input").getName());
+ assertEquals(3, results.get("error").getParams().size());
+ assertEquals("/WEB-INF/location/namespace/error.jsp", results.get("error").getParams().get("location"));
+ assertEquals("org.apache.struts2.result.ServletDispatcherResult", results.get("error").getClassName());
+ assertEquals(3, results.get("input").getParams().size());
+ assertEquals("/WEB-INF/location/namespace/error.jsp", results.get("input").getParams().get("location"));
+ assertEquals("org.apache.struts2.result.ServletDispatcherResult", results.get("input").getClassName());
+ EasyMock.verify(context);
+ }
+
+ public void testActionLevelMultipleResultNamesAnnotationComma() throws Exception {
+ ServletContext context = EasyMock.createStrictMock(ServletContext.class);
+
+ // Setup some mock jsps
+ Set<String> resources = new HashSet<>();
+ EasyMock.expect(context.getResourcePaths("/WEB-INF/location/namespace/")).andReturn(resources);
+ EasyMock.replay(context);
+
+ PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
+
+ this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
+ DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
+ Map<String, ResultConfig> results = builder.build(ActionLevelResultsNamesAction.class, getAnnotation(ActionLevelResultsNamesAction.class, "comma", Action.class), "action-level-results", packageConfig);
+ assertEquals(1, results.size());
+ assertEquals(" , ", results.get(" , ").getName());
+ assertEquals(3, results.get(" , ").getParams().size());
+ assertEquals("/WEB-INF/location/namespace/error.jsp", results.get(" , ").getParams().get("location"));
+ assertEquals("org.apache.struts2.result.ServletDispatcherResult", results.get(" , ").getClassName());
+ EasyMock.verify(context);
+ }
+
+ public void testActionLevelMultipleResultNamesAnnotationNoName() throws Exception {
+ ServletContext context = EasyMock.createStrictMock(ServletContext.class);
+
+ // Setup some mock jsps
+ Set<String> resources = new HashSet<>();
+ EasyMock.expect(context.getResourcePaths("/WEB-INF/location/namespace/")).andReturn(resources);
+ EasyMock.replay(context);
+
+ PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
+
+ this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
+ DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
+ Map<String, ResultConfig> results = builder.build(ActionLevelResultsNamesAction.class, getAnnotation(ActionLevelResultsNamesAction.class, "noname", Action.class), "action-level-results", packageConfig);
+ assertEquals(1, results.size());
+ assertEquals("success", results.get("success").getName());
+ assertEquals(3, results.get("success").getParams().size());
+ assertEquals("value", results.get("success").getParams().get("key"));
+ assertEquals("value1", results.get("success").getParams().get("key1"));
+ assertEquals("/WEB-INF/location/namespace/action-success.jsp", results.get("success").getParams().get("location"));
+ assertEquals("org.apache.struts2.result.ServletDispatcherResult", results.get("success").getClassName());
+ EasyMock.verify(context);
+ }
+
public void testClassPath() throws Exception {
ServletContext context = EasyMock.createNiceMock(ServletContext.class);
http://git-wip-us.apache.org/repos/asf/struts/blob/087cf610/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java b/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
index 61ed3eb..7e47ff6 100644
--- a/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
+++ b/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
@@ -291,6 +291,10 @@ public class PackageBasedActionConfigBuilderTest extends TestCase {
expect(resultMapBuilder.build(OverrideResultAction.class, getAnnotation(OverrideResultAction.class, "execute", Action.class), "override-result", resultPkg)).andReturn(results);
expect(resultMapBuilder.build(GlobalResultAction.class, null, "global-result", globalResultPkg)).andReturn(results);
expect(resultMapBuilder.build(GlobalResultOverrideAction.class, null, "global-result-override", globalResultPkg)).andReturn(results);
+ expect(resultMapBuilder.build(ActionLevelResultsNamesAction.class, getAnnotation(ActionLevelResultsNamesAction.class, "execute", Action.class), "action-level-results-names", resultPkg)).andReturn(results);
+ expect(resultMapBuilder.build(ActionLevelResultsNamesAction.class, getAnnotation(ActionLevelResultsNamesAction.class, "errorinput", Action.class), "action-level-results-names", resultPkg)).andReturn(results);
+ expect(resultMapBuilder.build(ActionLevelResultsNamesAction.class, getAnnotation(ActionLevelResultsNamesAction.class, "comma", Action.class), "action-level-results-names", resultPkg)).andReturn(results);
+ expect(resultMapBuilder.build(ActionLevelResultsNamesAction.class, getAnnotation(ActionLevelResultsNamesAction.class, "noname", Action.class), "action-level-results-names", resultPkg)).andReturn(results);
/* org.apache.struts2.convention.actions.resultpath */
expect(resultMapBuilder.build(ClassLevelResultPathAction.class, null, "class-level-result-path", resultPathPkg)).andReturn(results);
@@ -565,7 +569,7 @@ public class PackageBasedActionConfigBuilderTest extends TestCase {
/* org.apache.struts2.convention.actions.result */
pkgConfig = configuration.getPackageConfig("org.apache.struts2.convention.actions.result#struts-default#/result");
assertNotNull(pkgConfig);
- assertEquals(6, pkgConfig.getActionConfigs().size());
+ assertEquals(7, pkgConfig.getActionConfigs().size());
verifyActionConfig(pkgConfig, "class-level-result", ClassLevelResultAction.class, "execute", pkgConfig.getName());
verifyActionConfig(pkgConfig, "class-level-results", ClassLevelResultsAction.class, "execute", pkgConfig.getName());
verifyActionConfig(pkgConfig, "action-level-result", ActionLevelResultAction.class, "execute", pkgConfig.getName());
http://git-wip-us.apache.org/repos/asf/struts/blob/087cf610/plugins/convention/src/test/java/org/apache/struts2/convention/actions/result/ActionLevelResultsNamesAction.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/test/java/org/apache/struts2/convention/actions/result/ActionLevelResultsNamesAction.java b/plugins/convention/src/test/java/org/apache/struts2/convention/actions/result/ActionLevelResultsNamesAction.java
new file mode 100644
index 0000000..8ad30f1
--- /dev/null
+++ b/plugins/convention/src/test/java/org/apache/struts2/convention/actions/result/ActionLevelResultsNamesAction.java
@@ -0,0 +1,61 @@
+/*
+ * $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.actions.result;
+
+import org.apache.struts2.convention.annotation.Action;
+import org.apache.struts2.convention.annotation.Result;
+
+/**
+ * <p>
+ * This is a test action with multiple results names.
+ * </p>
+ */
+public class ActionLevelResultsNamesAction {
+ @Action(results = {
+ @Result(name="error, input", location="error.jsp"),
+ @Result(name="success", location="/WEB-INF/location/namespace/action-success.jsp"),
+ @Result(name="failure", location="/WEB-INF/location/namespace/action-failure.jsp")
+ })
+ public String execute() {
+ return null;
+ }
+
+ @Action(results = {
+ @Result(name="error, input, ", location="error.jsp")
+ })
+ public String errorinput() {
+ return null;
+ }
+
+ @Action(results = {
+ @Result(name=" , ", location="error.jsp")
+ })
+ public String comma() {
+ return null;
+ }
+
+ @Action(results = {
+ @Result(location="/WEB-INF/location/namespace/action-success.jsp")
+ })
+ public String noname() {
+ return null;
+ }
+}
[2/4] struts git commit: Cleaner result name parsing
Posted by lu...@apache.org.
Cleaner result name parsing
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/930f6e4c
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/930f6e4c
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/930f6e4c
Branch: refs/heads/master
Commit: 930f6e4cf7df951fee03159ad891e4e606f36aef
Parents: 087cf61
Author: Aleksandr Mashchenko <al...@gmail.com>
Authored: Wed Jan 20 17:52:56 2016 +0200
Committer: Aleksandr Mashchenko <al...@gmail.com>
Committed: Wed Jan 20 17:52:56 2016 +0200
----------------------------------------------------------------------
.../xwork2/config/providers/XmlConfigurationProvider.java | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/930f6e4c/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
index e3b0c19..b04cffb 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
@@ -777,12 +777,9 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
}
params.putAll(resultParams);
- Set<String> resultNamesSet;
- if (",".equals(resultName.trim())) {
- resultNamesSet = new HashSet<>(1);
+ Set<String> resultNamesSet = TextParseUtil.commaDelimitedStringToSet(resultName);
+ if (resultNamesSet.isEmpty()) {
resultNamesSet.add(resultName);
- } else {
- resultNamesSet = TextParseUtil.commaDelimitedStringToSet(resultName);
}
for (String name : resultNamesSet) {
[4/4] struts git commit: Merge branch 'WW-4590'
Posted by lu...@apache.org.
Merge branch 'WW-4590'
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/11561cb2
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/11561cb2
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/11561cb2
Branch: refs/heads/master
Commit: 11561cb29998655c458b3f94cb7cf9431c4090a8
Parents: cae5709 2a46a65
Author: Lukasz Lenart <lu...@apache.org>
Authored: Thu Jan 21 08:45:07 2016 +0100
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Thu Jan 21 08:45:07 2016 +0100
----------------------------------------------------------------------
.../providers/XmlConfigurationProvider.java | 17 ++++--
.../XmlConfigurationProviderResultsTest.java | 54 ++++++++++++++++++
.../providers/xwork-test-result-names.xml | 48 ++++++++++++++++
.../convention/DefaultResultMapBuilder.java | 20 ++++---
.../struts2/convention/annotation/Result.java | 2 +-
.../convention/DefaultResultMapBuilderTest.java | 58 ++++++++++++++++++++
.../PackageBasedActionConfigBuilderTest.java | 4 +-
.../result/ActionLevelResultsNamesAction.java | 47 ++++++++++++++++
8 files changed, 235 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
[3/4] struts git commit: Result annotation name attribute as an array,
removed one of ResultInfo constructors
Posted by lu...@apache.org.
Result annotation name attribute as an array, removed one of ResultInfo constructors
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/2a46a658
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/2a46a658
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/2a46a658
Branch: refs/heads/master
Commit: 2a46a6586ec22e174dedce56f93e5993f757a87b
Parents: 930f6e4
Author: Aleksandr Mashchenko <al...@gmail.com>
Authored: Wed Jan 20 18:03:57 2016 +0200
Committer: Aleksandr Mashchenko <al...@gmail.com>
Committed: Wed Jan 20 18:03:57 2016 +0200
----------------------------------------------------------------------
.../convention/DefaultResultMapBuilder.java | 17 +-------
.../struts2/convention/annotation/Result.java | 2 +-
.../convention/DefaultResultMapBuilderTest.java | 46 --------------------
.../PackageBasedActionConfigBuilderTest.java | 2 -
.../result/ActionLevelResultsNamesAction.java | 16 +------
5 files changed, 3 insertions(+), 80 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/2a46a658/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java b/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
index b7c5b51..40ea279 100644
--- a/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
+++ b/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
@@ -410,15 +410,7 @@ public class DefaultResultMapBuilder implements ResultMapBuilder {
Class<?> actionClass, Map<String, ResultTypeConfig> resultsByExtension) {
// Check for multiple results on the class
for (Result result : results) {
- Set<String> names;
- if (",".equals(result.name().trim())) {
- names = new HashSet<>(1);
- names.add(result.name());
- } else {
- names = TextParseUtil.commaDelimitedStringToSet(result.name());
- }
-
- for (String name : names) {
+ for (String name : result.name()) {
ResultConfig config = createResultConfig(actionClass, new ResultInfo(
name, result, packageConfig, resultPath, actionClass,
resultsByExtension), packageConfig, result);
@@ -515,13 +507,6 @@ public class DefaultResultMapBuilder implements ResultMapBuilder {
}
}
- public ResultInfo(Result result, PackageConfig packageConfig,
- String resultPath, Class<?> actionClass,
- Map<String, ResultTypeConfig> resultsByExtension) {
- this(result.name(), result, packageConfig, resultPath, actionClass,
- resultsByExtension);
- }
-
String determineType(String location, PackageConfig packageConfig,
Map<String, ResultTypeConfig> resultsByExtension) {
int indexOfDot = location.lastIndexOf(".");
http://git-wip-us.apache.org/repos/asf/struts/blob/2a46a658/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/Result.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/Result.java b/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/Result.java
index f8e9ecd..f90e7b5 100644
--- a/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/Result.java
+++ b/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/Result.java
@@ -69,7 +69,7 @@ public @interface Result {
* @return The name of the result mapping. This is the value that is returned from the action
* method and is used to associate a location with a return value.
*/
- String name() default com.opensymphony.xwork2.Action.SUCCESS;
+ String[] name() default com.opensymphony.xwork2.Action.SUCCESS;
/**
* @return The location of the result within the web application or anywhere on disk. This location
http://git-wip-us.apache.org/repos/asf/struts/blob/2a46a658/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java b/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
index b73667a..8a4325b 100644
--- a/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
+++ b/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
@@ -522,52 +522,6 @@ public class DefaultResultMapBuilderTest extends TestCase {
EasyMock.verify(context);
}
- public void testActionLevelMultipleResultNamesAnnotationErrorInput() throws Exception {
- ServletContext context = EasyMock.createStrictMock(ServletContext.class);
-
- // Setup some mock jsps
- Set<String> resources = new HashSet<>();
- EasyMock.expect(context.getResourcePaths("/WEB-INF/location/namespace/")).andReturn(resources);
- EasyMock.replay(context);
-
- PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
-
- this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
- DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
- Map<String, ResultConfig> results = builder.build(ActionLevelResultsNamesAction.class, getAnnotation(ActionLevelResultsNamesAction.class, "errorinput", Action.class), "action-level-results", packageConfig);
- assertEquals(2, results.size());
- assertEquals("error", results.get("error").getName());
- assertEquals("input", results.get("input").getName());
- assertEquals(3, results.get("error").getParams().size());
- assertEquals("/WEB-INF/location/namespace/error.jsp", results.get("error").getParams().get("location"));
- assertEquals("org.apache.struts2.result.ServletDispatcherResult", results.get("error").getClassName());
- assertEquals(3, results.get("input").getParams().size());
- assertEquals("/WEB-INF/location/namespace/error.jsp", results.get("input").getParams().get("location"));
- assertEquals("org.apache.struts2.result.ServletDispatcherResult", results.get("input").getClassName());
- EasyMock.verify(context);
- }
-
- public void testActionLevelMultipleResultNamesAnnotationComma() throws Exception {
- ServletContext context = EasyMock.createStrictMock(ServletContext.class);
-
- // Setup some mock jsps
- Set<String> resources = new HashSet<>();
- EasyMock.expect(context.getResourcePaths("/WEB-INF/location/namespace/")).andReturn(resources);
- EasyMock.replay(context);
-
- PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
-
- this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
- DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
- Map<String, ResultConfig> results = builder.build(ActionLevelResultsNamesAction.class, getAnnotation(ActionLevelResultsNamesAction.class, "comma", Action.class), "action-level-results", packageConfig);
- assertEquals(1, results.size());
- assertEquals(" , ", results.get(" , ").getName());
- assertEquals(3, results.get(" , ").getParams().size());
- assertEquals("/WEB-INF/location/namespace/error.jsp", results.get(" , ").getParams().get("location"));
- assertEquals("org.apache.struts2.result.ServletDispatcherResult", results.get(" , ").getClassName());
- EasyMock.verify(context);
- }
-
public void testActionLevelMultipleResultNamesAnnotationNoName() throws Exception {
ServletContext context = EasyMock.createStrictMock(ServletContext.class);
http://git-wip-us.apache.org/repos/asf/struts/blob/2a46a658/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java b/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
index 7e47ff6..dfa1ad6 100644
--- a/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
+++ b/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
@@ -292,8 +292,6 @@ public class PackageBasedActionConfigBuilderTest extends TestCase {
expect(resultMapBuilder.build(GlobalResultAction.class, null, "global-result", globalResultPkg)).andReturn(results);
expect(resultMapBuilder.build(GlobalResultOverrideAction.class, null, "global-result-override", globalResultPkg)).andReturn(results);
expect(resultMapBuilder.build(ActionLevelResultsNamesAction.class, getAnnotation(ActionLevelResultsNamesAction.class, "execute", Action.class), "action-level-results-names", resultPkg)).andReturn(results);
- expect(resultMapBuilder.build(ActionLevelResultsNamesAction.class, getAnnotation(ActionLevelResultsNamesAction.class, "errorinput", Action.class), "action-level-results-names", resultPkg)).andReturn(results);
- expect(resultMapBuilder.build(ActionLevelResultsNamesAction.class, getAnnotation(ActionLevelResultsNamesAction.class, "comma", Action.class), "action-level-results-names", resultPkg)).andReturn(results);
expect(resultMapBuilder.build(ActionLevelResultsNamesAction.class, getAnnotation(ActionLevelResultsNamesAction.class, "noname", Action.class), "action-level-results-names", resultPkg)).andReturn(results);
/* org.apache.struts2.convention.actions.resultpath */
http://git-wip-us.apache.org/repos/asf/struts/blob/2a46a658/plugins/convention/src/test/java/org/apache/struts2/convention/actions/result/ActionLevelResultsNamesAction.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/test/java/org/apache/struts2/convention/actions/result/ActionLevelResultsNamesAction.java b/plugins/convention/src/test/java/org/apache/struts2/convention/actions/result/ActionLevelResultsNamesAction.java
index 8ad30f1..2ae4bb6 100644
--- a/plugins/convention/src/test/java/org/apache/struts2/convention/actions/result/ActionLevelResultsNamesAction.java
+++ b/plugins/convention/src/test/java/org/apache/struts2/convention/actions/result/ActionLevelResultsNamesAction.java
@@ -30,7 +30,7 @@ import org.apache.struts2.convention.annotation.Result;
*/
public class ActionLevelResultsNamesAction {
@Action(results = {
- @Result(name="error, input", location="error.jsp"),
+ @Result(name={"error", "input"}, location="error.jsp"),
@Result(name="success", location="/WEB-INF/location/namespace/action-success.jsp"),
@Result(name="failure", location="/WEB-INF/location/namespace/action-failure.jsp")
})
@@ -39,20 +39,6 @@ public class ActionLevelResultsNamesAction {
}
@Action(results = {
- @Result(name="error, input, ", location="error.jsp")
- })
- public String errorinput() {
- return null;
- }
-
- @Action(results = {
- @Result(name=" , ", location="error.jsp")
- })
- public String comma() {
- return null;
- }
-
- @Action(results = {
@Result(location="/WEB-INF/location/namespace/action-success.jsp")
})
public String noname() {