Author: hlship
Date: Wed Feb  7 10:56:37 2007
New Revision: 504647

URL: http://svn.apache.org/viewvc?view=rev&rev=504647
Log:
Correctly access the root component of a page when the nested id is the empty 
string; avoids an error for URLs that consist of the page name and an event 
type as the extension.

Modified:
    
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java
    
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java
    
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
    
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/PageImplTest.java

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java?view=diff&rev=504647&r1=504646&r2=504647
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java
 Wed Feb  7 10:56:37 2007
@@ -57,12 +57,14 @@
         // TODO: Not too happy about needing this cast; can the method be 
moved up to
         // InvocationTarget or ComponentInvocation?
         ActionLinkTarget actionLinkTarget = Defense.cast(target, 
ActionLinkTarget.class, "target");
+
         Page page = _cache.get(actionLinkTarget.getPageName());
 
         // This is the active page, until we know better.
 
-        ComponentPageElement element = 
page.getComponentElementByNestedId(actionLinkTarget
-                .getComponentNestedId());
+        String nestedId = actionLinkTarget.getComponentNestedId();
+
+        ComponentPageElement element = 
page.getComponentElementByNestedId(nestedId);
 
         final Holder<ActionResponseGenerator> holder = new 
Holder<ActionResponseGenerator>();
 

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java?view=diff&rev=504647&r1=504646&r2=504647
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java
 Wed Feb  7 10:56:37 2007
@@ -106,6 +106,7 @@
 
     /**
      * Retrieves a component element by its nested id (a sequence of simple 
ids, separated by dots).
+     * A nested id of '' (the empty string) returns the root element of the 
page.
      * 
      * @throws IllegalArgumentException
      *             if the nestedId does not correspond to a component

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java?view=diff&rev=504647&r1=504646&r2=504647
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
 Wed Feb  7 10:56:37 2007
@@ -15,6 +15,7 @@
 package org.apache.tapestry.internal.structure;
 
 import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newList;
+import static org.apache.tapestry.ioc.internal.util.Defense.notNull;
 
 import java.util.List;
 import java.util.Locale;
@@ -23,6 +24,7 @@
 import org.apache.tapestry.ComponentResources;
 import org.apache.tapestry.Link;
 import org.apache.tapestry.internal.services.LinkFactory;
+import org.apache.tapestry.ioc.internal.util.InternalUtils;
 import org.apache.tapestry.runtime.Component;
 import org.apache.tapestry.runtime.PageLifecycleListener;
 import org.apache.tapestry.services.PersistentFieldBundle;
@@ -67,14 +69,19 @@
 
     public ComponentPageElement getComponentElementByNestedId(String nestedId)
     {
+        notNull(nestedId, "nestedId");
+
         // TODO: Especially with the addition of all the caseless logic, and 
with respect to how
         // forms are implemented, it may be worthwhile to cache the key to 
element mapping. I think
         // we're going to do it a lot!
 
         ComponentPageElement element = _rootElement;
 
-        for (String id : nestedId.split("\\."))
-            element = element.getEmbeddedElement(id);
+        if (InternalUtils.isNonBlank(nestedId))
+        {
+            for (String id : nestedId.split("\\."))
+                element = element.getEmbeddedElement(id);
+        }
 
         return element;
     }

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/PageImplTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/PageImplTest.java?view=diff&rev=504647&r1=504646&r2=504647
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/PageImplTest.java
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/PageImplTest.java
 Wed Feb  7 10:56:37 2007
@@ -33,7 +33,7 @@
     @Test
     public void accessor_methods()
     {
-        ComponentPageElement root = newMock(ComponentPageElement.class);
+        ComponentPageElement root = newComponentPageElement();
 
         replay();
 
@@ -176,6 +176,22 @@
         page.addLifecycleListener(listener2);
 
         page.loaded();
+
+        verify();
+    }
+
+    @Test
+    public void get_by_nested_id_for_blank_value_returns_root_component()
+    {
+        ComponentPageElement root = newComponentPageElement();
+
+        replay();
+
+        Page page = new PageImpl(PAGE_NAME, _locale, null, null);
+
+        page.setRootElement(root);
+
+        assertSame(page.getComponentElementByNestedId(""), root);
 
         verify();
     }


Reply via email to