You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2011/04/19 02:18:34 UTC

svn commit: r1094827 - /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java

Author: hlship
Date: Tue Apr 19 00:18:34 2011
New Revision: 1094827

URL: http://svn.apache.org/viewvc?rev=1094827&view=rev
Log:
TAP5-1508: Create a mapping of nested component ids to component page elements, inside PageImpl

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java?rev=1094827&r1=1094826&r2=1094827&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java Tue Apr 19 00:18:34 2011
@@ -16,11 +16,12 @@ package org.apache.tapestry5.internal.st
 
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
+import java.util.regex.Pattern;
 
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.internal.services.PersistentFieldManager;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.internal.util.OneShotLock;
 import org.apache.tapestry5.ioc.services.PerThreadValue;
 import org.apache.tapestry5.ioc.services.PerthreadManager;
@@ -47,6 +48,8 @@ public class PageImpl implements Page
 
     private final OneShotLock lock = new OneShotLock();
 
+    private final Map<String, ComponentPageElement> idToComponent = CollectionFactory.newCaseInsensitiveMap();
+
     /**
      * Obtained from the {@link org.apache.tapestry5.internal.services.PersistentFieldManager} when
      * first needed,
@@ -54,6 +57,8 @@ public class PageImpl implements Page
      */
     private final PerThreadValue<PersistentFieldBundle> fieldBundle;
 
+    private static final Pattern SPLIT_ON_DOT = Pattern.compile("\\.");
+
     /**
      * @param name
      *            canonicalized page name
@@ -80,15 +85,25 @@ public class PageImpl implements Page
         return String.format("Page[%s %s]", name, locale);
     }
 
-    public ComponentPageElement getComponentElementByNestedId(String nestedId)
+    public synchronized ComponentPageElement getComponentElementByNestedId(String nestedId)
     {
         assert nestedId != null;
-        ComponentPageElement element = rootElement;
 
-        if (InternalUtils.isNonBlank(nestedId))
+        if (nestedId.equals(""))
+            return rootElement;
+
+        ComponentPageElement element = idToComponent.get(nestedId);
+
+        if (element == null)
         {
-            for (String id : nestedId.split("\\."))
+            element = rootElement;
+
+            for (String id : SPLIT_ON_DOT.split(nestedId))
+            {
                 element = element.getEmbeddedElement(id);
+            }
+
+            idToComponent.put(nestedId, element);
         }
 
         return element;