You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2008/01/25 21:51:46 UTC

svn commit: r615337 - in /tapestry/tapestry4/trunk/tapestry-framework/src: java/org/apache/tapestry/engine/RequestCycle.java java/org/apache/tapestry/util/IdAllocator.java test/org/apache/tapestry/util/TestIdAllocator.java

Author: jkuhnert
Date: Fri Jan 25 12:51:46 2008
New Revision: 615337

URL: http://svn.apache.org/viewvc?rev=615337&view=rev
Log:
Fixes TAPESTRY-2073.  IdAllocator.addSeed was incorrectly overwriting previous key mappings.

Modified:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycle.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/IdAllocator.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/util/TestIdAllocator.java

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycle.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycle.java?rev=615337&r1=615336&r2=615337&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycle.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycle.java Fri Jan 25 12:51:46 2008
@@ -681,6 +681,5 @@
     public void initializeIdState(String encodedSeed)
     {
         _idAllocator = IdAllocator.fromExternalString( CompressedDataEncoder.decodeString(encodedSeed));
-        preallocateReservedIds();
     }
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/IdAllocator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/IdAllocator.java?rev=615337&r1=615336&r2=615337&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/IdAllocator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/IdAllocator.java Fri Jan 25 12:51:46 2008
@@ -108,6 +108,16 @@
             result = 31 * result + _index;
             return result;
         }
+
+        public String toString()
+        {
+            return "NameGenerator[" +
+                   "_baseId='" + _baseId + '\'' +
+                   '\n' +
+                   ", _index=" + _index +
+                   '\n' +
+                   ']';
+        }
     }
 
     public IdAllocator()
@@ -189,8 +199,8 @@
         // in a peek we don't want to actually increment any id state so we must
         // clone
 
-        if (_generatorMap.containsKey(result.toLowerCase())) {
-
+        if (_generatorMap.containsKey(result.toLowerCase()))
+        {
             try {
                 NameGenerator cg = (NameGenerator)g.clone();
 
@@ -242,11 +252,18 @@
         NameGenerator g = new NameGenerator(baseId, 0);
         _uniqueGenerators.add(g);
         _generatorMap.put(baseId.toLowerCase(), g);
-
+        
         // add generated key to map until we reach top level index value
         while(g._index != index)
         {
-            _generatorMap.put(g.nextId().toLowerCase(), g);
+            String nextId = g.nextId().toLowerCase();
+
+            // only dump value in if not already covered by another allocator
+            
+            if (!_generatorMap.containsKey(nextId))
+            {
+                _generatorMap.put(nextId, g);
+            }
         }
     }
 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/util/TestIdAllocator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/util/TestIdAllocator.java?rev=615337&r1=615336&r2=615337&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/util/TestIdAllocator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/util/TestIdAllocator.java Fri Jan 25 12:51:46 2008
@@ -162,4 +162,12 @@
         assertEquals(0, ida._generatorMap.size());
         assertEquals(0, ida._uniqueGenerators.size());
     }
+
+    public void test_To_External_String_Underscores()
+    {
+        IdAllocator ida = IdAllocator.fromExternalString(",service$0,page$0,component$0,container$0,session$0,sp$0,NestedIfBorder$0,Shell$0," +
+                                                         "Body$0,TopComponent$0,testId$0,If_0$0,BorderComponent$0,If$2,NestedComponent$0,RenderBody$0,Form$0");
+
+        assertEquals("If_0_0", ida.allocateId("If_0"));
+    }
 }