struts git commit: WW-4667 Applies params to all instances of interceptor defined in stack

2016-09-06 Thread lukaszlenart
Repository: struts
Updated Branches:
  refs/heads/support-2-3 cc0d52f21 -> 6f5ddca47


WW-4667 Applies params to all instances of interceptor defined in stack


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/6f5ddca4
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/6f5ddca4
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/6f5ddca4

Branch: refs/heads/support-2-3
Commit: 6f5ddca47153886611c7fbeac1bf60fb35f0b8ba
Parents: cc0d52f
Author: Lukasz Lenart 
Authored: Tue Sep 6 09:07:02 2016 +0200
Committer: Lukasz Lenart 
Committed: Tue Sep 6 09:07:02 2016 +0200

--
 .../config/providers/InterceptorBuilder.java| 14 +++---
 .../providers/InterceptorBuilderTest.java   | 46 
 2 files changed, 54 insertions(+), 6 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/struts/blob/6f5ddca4/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/InterceptorBuilder.java
--
diff --git 
a/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/InterceptorBuilder.java
 
b/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/InterceptorBuilder.java
index 5e0b004..12264ef 100644
--- 
a/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/InterceptorBuilder.java
+++ 
b/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/InterceptorBuilder.java
@@ -184,12 +184,14 @@ public class InterceptorBuilder {
 Interceptor interceptor = objectFactory.buildInterceptor(cfg, 
map);
 
 InterceptorMapping mapping = new InterceptorMapping(key, 
interceptor);
-if (result != null && result.contains(mapping)) {
-// if an existing interceptor mapping exists,
-// we remove from the result Set, just to make sure
-// there's always one unique mapping.
-int index = result.indexOf(mapping);
-result.set(index, mapping);
+if (result.contains(mapping)) {
+for (int index = 0; index < result.size(); index++) {
+InterceptorMapping interceptorMapping = 
result.get(index);
+if (interceptorMapping.getName().equals(key)) {
+LOG.debug("Overriding interceptor config [#0] with 
new mapping #1 using new params #2", key, interceptorMapping, map);
+result.set(index, mapping);
+}
+}
 } else {
 result.add(mapping);
 }

http://git-wip-us.apache.org/repos/asf/struts/blob/6f5ddca4/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/InterceptorBuilderTest.java
--
diff --git 
a/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/InterceptorBuilderTest.java
 
b/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/InterceptorBuilderTest.java
index 914d963..870691a 100644
--- 
a/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/InterceptorBuilderTest.java
+++ 
b/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/InterceptorBuilderTest.java
@@ -9,6 +9,7 @@ import 
com.opensymphony.xwork2.config.entities.InterceptorStackConfig;
 import com.opensymphony.xwork2.config.entities.PackageConfig;
 import com.opensymphony.xwork2.interceptor.Interceptor;
 
+import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 
@@ -78,6 +79,51 @@ public class InterceptorBuilderTest extends XWorkTestCase {
 assertEquals(((MockInterceptor2) ((InterceptorMapping) 
interceptorMappings.get(1)).getInterceptor()).getParam2(), 
"interceptor2_value2");
 }
 
+public void testMultipleSameInterceptors() throws Exception {
+InterceptorConfig interceptorConfig1 = new 
InterceptorConfig.Builder("interceptor1", 
"com.opensymphony.xwork2.config.providers.InterceptorBuilderTest$MockInterceptor1").build();
+InterceptorConfig interceptorConfig2 = new 
InterceptorConfig.Builder("interceptor2", 
"com.opensymphony.xwork2.config.providers.InterceptorBuilderTest$MockInterceptor2").build();
+
+InterceptorStackConfig interceptorStackConfig1 = new 
InterceptorStackConfig.Builder("multiStack")
+.addInterceptor(new 
InterceptorMapping(interceptorConfig1.getName(), 
objectFactory.buildInterceptor(interceptorConfig1, Collections.emptyMap(
+.addInterceptor(new 
InterceptorMapping(interceptorConfig2.getName(), 
objectFactory.buildInterceptor(interceptorConfig2, Collections.emptyMap(
+.addInterceptor(new 
InterceptorMapping

[2/2] struts git commit: WW-4667 Applies params to all instances of interceptor defined in stack

2016-09-06 Thread lukaszlenart
WW-4667 Applies params to all instances of interceptor defined in stack


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/f6876ce6
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/f6876ce6
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/f6876ce6

Branch: refs/heads/master
Commit: f6876ce6ce38f037a7480c6ae9bc26991feeaefe
Parents: ab0cb82
Author: Lukasz Lenart 
Authored: Tue Sep 6 09:16:54 2016 +0200
Committer: Lukasz Lenart 
Committed: Tue Sep 6 09:16:54 2016 +0200

--
 .../xwork2/config/providers/InterceptorBuilder.java   | 14 --
 1 file changed, 8 insertions(+), 6 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/struts/blob/f6876ce6/core/src/main/java/com/opensymphony/xwork2/config/providers/InterceptorBuilder.java
--
diff --git 
a/core/src/main/java/com/opensymphony/xwork2/config/providers/InterceptorBuilder.java
 
b/core/src/main/java/com/opensymphony/xwork2/config/providers/InterceptorBuilder.java
index 04439fb..fcf2484 100644
--- 
a/core/src/main/java/com/opensymphony/xwork2/config/providers/InterceptorBuilder.java
+++ 
b/core/src/main/java/com/opensymphony/xwork2/config/providers/InterceptorBuilder.java
@@ -181,12 +181,14 @@ public class InterceptorBuilder {
 Interceptor interceptor = objectFactory.buildInterceptor(cfg, 
map);
 
 InterceptorMapping mapping = new InterceptorMapping(key, 
interceptor);
-if (result != null && result.contains(mapping)) {
-// if an existing interceptor mapping exists,
-// we remove from the result Set, just to make sure
-// there's always one unique mapping.
-int index = result.indexOf(mapping);
-result.set(index, mapping);
+if (result.contains(mapping)) {
+for (int index = 0; index < result.size(); index++) {
+InterceptorMapping interceptorMapping = 
result.get(index);
+if (interceptorMapping.getName().equals(key)) {
+LOG.debug("Overriding interceptor config [{}] with 
new mapping {} using new params {}", key, interceptorMapping, map);
+result.set(index, mapping);
+}
+}
 } else {
 result.add(mapping);
 }



[1/2] struts git commit: WW-4667 Applies params to all instances of interceptor defined in stack

2016-09-06 Thread lukaszlenart
Repository: struts
Updated Branches:
  refs/heads/master 175c852ee -> f6876ce6c


WW-4667 Applies params to all instances of interceptor defined in stack

# Conflicts:
#   
xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/InterceptorBuilder.java


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/ab0cb82d
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/ab0cb82d
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/ab0cb82d

Branch: refs/heads/master
Commit: ab0cb82d31cbad47664dee423ddbf0894b004d27
Parents: 175c852
Author: Lukasz Lenart 
Authored: Tue Sep 6 09:07:02 2016 +0200
Committer: Lukasz Lenart 
Committed: Tue Sep 6 09:16:48 2016 +0200

--
 .../providers/InterceptorBuilderTest.java   | 46 
 1 file changed, 46 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/struts/blob/ab0cb82d/core/src/test/java/com/opensymphony/xwork2/config/providers/InterceptorBuilderTest.java
--
diff --git 
a/core/src/test/java/com/opensymphony/xwork2/config/providers/InterceptorBuilderTest.java
 
b/core/src/test/java/com/opensymphony/xwork2/config/providers/InterceptorBuilderTest.java
index 914d963..870691a 100644
--- 
a/core/src/test/java/com/opensymphony/xwork2/config/providers/InterceptorBuilderTest.java
+++ 
b/core/src/test/java/com/opensymphony/xwork2/config/providers/InterceptorBuilderTest.java
@@ -9,6 +9,7 @@ import 
com.opensymphony.xwork2.config.entities.InterceptorStackConfig;
 import com.opensymphony.xwork2.config.entities.PackageConfig;
 import com.opensymphony.xwork2.interceptor.Interceptor;
 
+import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 
@@ -78,6 +79,51 @@ public class InterceptorBuilderTest extends XWorkTestCase {
 assertEquals(((MockInterceptor2) ((InterceptorMapping) 
interceptorMappings.get(1)).getInterceptor()).getParam2(), 
"interceptor2_value2");
 }
 
+public void testMultipleSameInterceptors() throws Exception {
+InterceptorConfig interceptorConfig1 = new 
InterceptorConfig.Builder("interceptor1", 
"com.opensymphony.xwork2.config.providers.InterceptorBuilderTest$MockInterceptor1").build();
+InterceptorConfig interceptorConfig2 = new 
InterceptorConfig.Builder("interceptor2", 
"com.opensymphony.xwork2.config.providers.InterceptorBuilderTest$MockInterceptor2").build();
+
+InterceptorStackConfig interceptorStackConfig1 = new 
InterceptorStackConfig.Builder("multiStack")
+.addInterceptor(new 
InterceptorMapping(interceptorConfig1.getName(), 
objectFactory.buildInterceptor(interceptorConfig1, Collections.emptyMap(
+.addInterceptor(new 
InterceptorMapping(interceptorConfig2.getName(), 
objectFactory.buildInterceptor(interceptorConfig2, Collections.emptyMap(
+.addInterceptor(new 
InterceptorMapping(interceptorConfig1.getName(), 
objectFactory.buildInterceptor(interceptorConfig1, Collections.emptyMap(
+.build();
+
+PackageConfig packageConfig = new PackageConfig.Builder("package1")
+.namespace("/namespace")
+.addInterceptorConfig(interceptorConfig1)
+.addInterceptorConfig(interceptorConfig2)
+.addInterceptorConfig(interceptorConfig1)
+.addInterceptorStackConfig(interceptorStackConfig1)
+.build();
+
+List interceptorMappings =  
InterceptorBuilder.constructInterceptorReference(packageConfig, "multiStack",
+new LinkedHashMap() {
+{
+put("interceptor1.param1", 
"interceptor1_value1");
+put("interceptor1.param2", 
"interceptor1_value2");
+}
+}, null,  objectFactory);
+
+assertEquals(interceptorMappings.size(), 3);
+
+assertEquals(((InterceptorMapping) 
interceptorMappings.get(0)).getName(), "interceptor1");
+assertNotNull(((InterceptorMapping) 
interceptorMappings.get(0)).getInterceptor());
+assertEquals(((InterceptorMapping) 
interceptorMappings.get(0)).getInterceptor().getClass(), 
MockInterceptor1.class);
+assertEquals(((MockInterceptor1) ((InterceptorMapping) 
interceptorMappings.get(0)).getInterceptor()).getParam1(), 
"interceptor1_value1");
+assertEquals(((MockInterceptor1) ((InterceptorMapping) 
interceptorMappings.get(0)).getInterceptor()).getParam2(), 
"interceptor1_value2");
+
+assertEquals(((InterceptorMapping) 
interceptorMappings.get(1)).getName(), "interceptor2");
+assertNotNull(((InterceptorMapping) 
interceptorMappings.get(1)).getInterceptor());
+assertEquals(((Inte

struts git commit: WW-4685 Supports evaluating expressions from tiles definitions as a Struts values

2016-09-06 Thread lukaszlenart
Repository: struts
Updated Branches:
  refs/heads/master f6876ce6c -> 1bed00d3d


WW-4685 Supports evaluating expressions from tiles definitions as a Struts 
values


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/1bed00d3
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/1bed00d3
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/1bed00d3

Branch: refs/heads/master
Commit: 1bed00d3d7269bbe11cd3ec1711400e050ef57b4
Parents: f6876ce
Author: Lukasz Lenart 
Authored: Tue Sep 6 21:33:31 2016 +0200
Committer: Lukasz Lenart 
Committed: Tue Sep 6 21:33:31 2016 +0200

--
 .../struts2/tiles/StrutsAttributeEvaluator.java | 89 
 .../tiles/StrutsTilesContainerFactory.java  | 10 ++-
 2 files changed, 97 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/struts/blob/1bed00d3/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsAttributeEvaluator.java
--
diff --git 
a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsAttributeEvaluator.java
 
b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsAttributeEvaluator.java
new file mode 100644
index 000..287b2a0
--- /dev/null
+++ 
b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsAttributeEvaluator.java
@@ -0,0 +1,89 @@
+/*
+ * 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.tiles;
+
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.LocaleProvider;
+import com.opensymphony.xwork2.TextProvider;
+import com.opensymphony.xwork2.TextProviderFactory;
+import com.opensymphony.xwork2.config.ConfigurationException;
+import com.opensymphony.xwork2.ognl.OgnlUtil;
+import ognl.OgnlException;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts2.ServletActionContext;
+import org.apache.tiles.evaluator.AbstractAttributeEvaluator;
+import org.apache.tiles.evaluator.EvaluationException;
+import org.apache.tiles.request.Request;
+import org.apache.tiles.request.servlet.ServletUtil;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class StrutsAttributeEvaluator extends AbstractAttributeEvaluator {
+
+private static final Logger LOG = 
LogManager.getLogger(StrutsAttributeEvaluator.class);
+
+@Override
+public Object evaluate(String expression, Request request) {
+try {
+Object result = null;
+
+HttpServletRequest httpRequest = 
ServletUtil.getServletRequest(request).getRequest();
+ActionContext ctx = 
ServletActionContext.getActionContext(httpRequest);
+
+if (ctx == null) {
+LOG.error("Cannot obtain HttpServletRequest from [{}]", 
request.getClass().getName());
+throw new ConfigurationException("There is no ActionContext 
for current request!");
+}
+
+TextProviderFactory tpf = new TextProviderFactory();
+ctx.getContainer().inject(tpf);
+LocaleProvider localeProvider = 
ctx.getContainer().getInstance(LocaleProvider.class);
+
+TextProvider textProvider = 
tpf.createInstance(ctx.getActionInvocation().getAction().getClass(), 
localeProvider);
+
+if (textProvider != null) {
+LOG.debug("Trying find text [{}] using TextProvider {}", 
expression, textProvider);
+result = textProvider.getText(expression);
+if (expression.equals(result)) {
+LOG.debug("Could not evaluate expression [{}] as a I18N 
key", expression);
+result = null;
+}
+}
+
+if (result == null) {
+OgnlUtil ognlUtil = 
ctx.getContainer().getInstance(OgnlUtil.class);
+LOG.debug("Trying evaluate expression [{}] using OgnlUtil's 
getValue", expression);
+result = ognlUtil.getValue(expression, ctx.getContextMap(), 
ctx.getValueStack().getRoot());
+