struts git commit: WW-4667 Applies params to all instances of interceptor defined in stack
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
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
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
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()); +