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 <lukaszlen...@apache.org>
Authored: Tue Sep 6 09:07:02 2016 +0200
Committer: Lukasz Lenart <lukaszlen...@apache.org>
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.<String, 
String>emptyMap())))
+                .addInterceptor(new 
InterceptorMapping(interceptorConfig2.getName(), 
objectFactory.buildInterceptor(interceptorConfig2, Collections.<String, 
String>emptyMap())))
+                .addInterceptor(new 
InterceptorMapping(interceptorConfig1.getName(), 
objectFactory.buildInterceptor(interceptorConfig1, Collections.<String, 
String>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<String, String>() {
+                            {
+                                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(((InterceptorMapping) 
interceptorMappings.get(1)).getInterceptor().getClass(), 
MockInterceptor2.class);
+
+        assertEquals(((InterceptorMapping) 
interceptorMappings.get(2)).getName(), "interceptor1");
+        assertNotNull(((InterceptorMapping) 
interceptorMappings.get(2)).getInterceptor());
+        assertEquals(((InterceptorMapping) 
interceptorMappings.get(2)).getInterceptor().getClass(), 
MockInterceptor1.class);
+        assertEquals(((MockInterceptor1) ((InterceptorMapping) 
interceptorMappings.get(2)).getInterceptor()).getParam1(), 
"interceptor1_value1");
+        assertEquals(((MockInterceptor1) ((InterceptorMapping) 
interceptorMappings.get(2)).getInterceptor()).getParam2(), 
"interceptor1_value2");
+    }
+
     /**
      * Try to test this
      * <interceptor-ref name="interceptorStack1">

Reply via email to