Repository: tapestry-5
Updated Branches:
  refs/heads/master 7277127b1 -> 919d4fc71


TAP5-2506: Detect and report conflicting BeanBlockOverrideSource configuration


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/919d4fc7
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/919d4fc7
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/919d4fc7

Branch: refs/heads/master
Commit: 919d4fc710d9a27ecc423ddfb84047473baecf76
Parents: 7277127
Author: Jochen Kemnade <[email protected]>
Authored: Thu Sep 17 12:10:32 2015 +0200
Committer: Jochen Kemnade <[email protected]>
Committed: Thu Sep 17 12:10:32 2015 +0200

----------------------------------------------------------------------
 .../services/BeanBlockOverrideSourceImpl.java   | 10 ++++++++--
 .../services/BeanBlockSourceImplTest.java       | 21 ++++++++++++++++++++
 2 files changed, 29 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/919d4fc7/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BeanBlockOverrideSourceImpl.java
----------------------------------------------------------------------
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BeanBlockOverrideSourceImpl.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BeanBlockOverrideSourceImpl.java
index 0f79237..343597a 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BeanBlockOverrideSourceImpl.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BeanBlockOverrideSourceImpl.java
@@ -39,8 +39,14 @@ public class BeanBlockOverrideSourceImpl implements 
BeanBlockOverrideSource
         for (BeanBlockContribution contribution : configuration)
         {
             Map<String, BeanBlockContribution> map = contribution.isEdit() ? 
edit : display;
-
-            map.put(contribution.getDataType(), contribution);
+            String dataType = contribution.getDataType();
+
+            BeanBlockContribution previousValue = map.put(dataType, 
contribution);
+            if (previousValue != null)
+            {
+                throw new IllegalArgumentException("The 
BeanBlockOverrideSource configuration contains multiple "
+                    + (contribution.isEdit() ? "edit" : "display") + " block 
overrides for data type '" + dataType+ "'.");
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/919d4fc7/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanBlockSourceImplTest.java
----------------------------------------------------------------------
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanBlockSourceImplTest.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanBlockSourceImplTest.java
index 3da8ea2..a70eab0 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanBlockSourceImplTest.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanBlockSourceImplTest.java
@@ -18,6 +18,7 @@ import org.apache.tapestry5.Block;
 import org.apache.tapestry5.internal.structure.ComponentPageElement;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
+import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.services.*;
 import org.testng.annotations.Test;
 
@@ -184,6 +185,26 @@ public class BeanBlockSourceImplTest extends 
InternalBaseTestCase
 
         verify();
     }
+    
+    @Test
+    // TAP5-2506
+    public void conflicting_bean_block_overrides()
+    {
+        RequestPageCache cache = mockRequestPageCache();
+        Collection<BeanBlockContribution> configuration = 
CollectionFactory.newList();
+        configuration.add(new DisplayBlockContribution("foo", "page1", "bar"));
+        configuration.add(new DisplayBlockContribution("foo", "page2", "baz"));
+        try {
+            new BeanBlockOverrideSourceImpl(cache, configuration);
+            unreachable();
+        } catch(IllegalArgumentException ex)
+        {
+            assertEquals(
+              ex.getMessage(),
+              "The BeanBlockOverrideSource configuration contains multiple 
display block overrides for data type 'foo'.");
+
+        }
+    }
 
     protected final void train_getBlock(Page page, String blockId, Block block)
     {

Reply via email to