You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2006/12/17 23:09:26 UTC

svn commit: r488060 - in /tapestry/tapestry5/tapestry-core/trunk/src: main/java/org/apache/tapestry/internal/services/ main/java/org/apache/tapestry/internal/test/ main/java/org/apache/tapestry/services/ test/java/org/apache/tapestry/internal/bindings/...

Author: hlship
Date: Sun Dec 17 14:09:25 2006
New Revision: 488060

URL: http://svn.apache.org/viewvc?view=rev&rev=488060
Log:
Extend ComponentSource with additional methods for accessing pages (really, page root components)

Added:
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponent.java
      - copied, changed from r488042, tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponentLifecyle.java
Removed:
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponentLifecyle.java
Modified:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentSourceImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RequestPageCache.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RequestPageCacheImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ComponentSource.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/TargetBean.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentSourceImplTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/RequestPageCacheImplTest.java

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentSourceImpl.java?view=diff&rev=488060&r1=488059&r2=488060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentSourceImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentSourceImpl.java Sun Dec 17 14:09:25 2006
@@ -14,6 +14,8 @@
 
 package org.apache.tapestry.internal.services;
 
+import static org.apache.tapestry.ioc.internal.util.Defense.notNull;
+
 import org.apache.tapestry.internal.structure.Page;
 import org.apache.tapestry.runtime.Component;
 import org.apache.tapestry.services.ComponentSource;
@@ -46,4 +48,22 @@
         return page.getComponentElementByNestedId(nestedId).getComponent();
     }
 
+    public <T> T getPage(Class<T> pageClass)
+    {
+        notNull(pageClass, "pageClass");
+
+        Page page = _pageCache.getByClassName(pageClass.getName());
+
+        Component root = page.getRootComponent();
+
+        return pageClass.cast(root);
+    }
+
+    public Component getPage(String pageName)
+    {
+        Page page = _pageCache.get(pageName);
+
+        return page.getRootComponent();
+    }
+    
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RequestPageCache.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RequestPageCache.java?view=diff&rev=488060&r1=488059&r2=488060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RequestPageCache.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RequestPageCache.java Sun Dec 17 14:09:25 2006
@@ -30,7 +30,7 @@
      *            the name of the page to retrieve (this is the logical page name, not the fully
      *            qualified class name)
      * @return a page instance reserved for this request
-     * @throws RuntimeException
+     * @throws IllegalArgumentException
      *             if the name can not be resolved to a page instance
      */
     Page get(String pageName);
@@ -41,7 +41,7 @@
      * @param pageName
      *            fully qualified class name
      * @return a page instance reserved for this request
-     * @throws RuntimeException
+     * @throws IllegalArgumentException
      *             if the name can not be resolved to a page instance
      */
     Page getByClassName(String className);

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RequestPageCacheImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RequestPageCacheImpl.java?view=diff&rev=488060&r1=488059&r2=488060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RequestPageCacheImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RequestPageCacheImpl.java Sun Dec 17 14:09:25 2006
@@ -46,7 +46,7 @@
         String className = _resolver.resolvePageNameToClassName(pageName);
 
         if (className == null)
-            throw new RuntimeException(ServicesMessages.pageDoesNotExist(pageName));
+            throw new IllegalArgumentException(ServicesMessages.pageDoesNotExist(pageName));
 
         return getByClassName(className);
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java?view=diff&rev=488060&r1=488059&r2=488060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java Sun Dec 17 14:09:25 2006
@@ -405,4 +405,9 @@
     {
         return newMock(ResourceStreamer.class);
     }
+
+    protected final void train_get(RequestPageCache cache, String pageName, Page page)
+    {
+        expect(cache.get(pageName)).andReturn(page).atLeastOnce();
+    }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ComponentSource.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ComponentSource.java?view=diff&rev=488060&r1=488059&r2=488060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ComponentSource.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ComponentSource.java Sun Dec 17 14:09:25 2006
@@ -12,27 +12,53 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.services;
-
-import org.apache.tapestry.ComponentResourcesCommon;
-import org.apache.tapestry.runtime.Component;
-
-/**
- * Used by classes that need to retrieve a component by its complete id. The complete id is the FQCN
- * of the containing page, a colon, and the nested component id. It may also just be the page name
- * (for the root component of a page).
- */
-public interface ComponentSource
-{
-    /**
-     * Gets a component by its id.
-     * 
-     * @param componentId
-     *            complete component id
-     * @return the component
-     * @throws IllegalArgumentException
-     *             if the component can not be found
-     * @see ComponentResourcesCommon#getCompleteId()
-     */
-    Component getComponent(String componentId);
-}
+package org.apache.tapestry.services;
+
+import org.apache.tapestry.ComponentResourcesCommon;
+import org.apache.tapestry.runtime.Component;
+
+/**
+ * Used by classes that need to retrieve a component by its complete id, or a page by its logical
+ * page name or root component class. The complete id is the FQCN of the containing page, a colon,
+ * and the nested component id. It may also just be the page name (for the root component of a
+ * page).
+ */
+public interface ComponentSource
+{
+    /**
+     * Gets a component by its id.
+     * 
+     * @param componentId
+     *            complete component id
+     * @return the component
+     * @throws IllegalArgumentException
+     *             if the component can not be found
+     * @see ComponentResourcesCommon#getCompleteId()
+     */
+    Component getComponent(String componentId);
+
+    /**
+     * Gets a page given its class.
+     * 
+     * @param <T>
+     *            the type of the page
+     * @param pageClass
+     *            the class of the page's root component
+     * @return the root component of the page
+     * @throws IllegalArgumentException
+     *             if the page can not be found
+     */
+    <T> T getPage(Class<T> pageClass);
+
+    /**
+     * Returns the page identified by its logical page name. A logical page name is the short form
+     * of a page name often emebedded into URLs.
+     * 
+     * @param pageName
+     *            the logical page name
+     * @return the corresponding page's root component
+     * @throws IllegalArgumentException
+     *             if the page can not be found
+     */
+    Component getPage(String pageName);
+}

Copied: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponent.java (from r488042, tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponentLifecyle.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponent.java?view=diff&rev=488060&p1=tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponentLifecyle.java&r1=488042&p2=tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponent.java&r2=488060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponentLifecyle.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponent.java Sun Dec 17 14:09:25 2006
@@ -12,93 +12,92 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.bindings;
-
-import org.apache.tapestry.ComponentResources;
-import org.apache.tapestry.MarkupWriter;
-import org.apache.tapestry.runtime.ComponentEvent;
-import org.apache.tapestry.runtime.Component;
-import org.apache.tapestry.runtime.LifecycleEvent;
-
-/**
- * For use in places where we don't want to have to transform a class just for testing purposes.
- */
-public class DefaultComponentLifecyle implements Component
-{
-
-    public void postRenderCleanup()
-    {
-    }
-
-    public void setupRender(MarkupWriter writer, LifecycleEvent<Boolean> event)
-    {
-    }
-
-    public void beginRender(MarkupWriter writer, LifecycleEvent<Boolean> event)
-    {
-    }
-
-    public void beforeRenderBody(MarkupWriter writer, LifecycleEvent<Boolean> event)
-    {
-    }
-
-    public void afterRender(MarkupWriter writer, LifecycleEvent<Boolean> event)
-    {
-    }
-
-    public void cleanupRender(MarkupWriter writer, LifecycleEvent<Boolean> event)
-    {
-    }
-
-    public ComponentResources getComponentResources()
-    {
-        return null;
-    }
-
-    public void containingPageDidLoad()
-    {
-    }
-
-    public void containingPageDidDetach()
-    {
-    }
-
-    public void containingPageDidAttach()
-    {
-    }
-
-    public boolean handleComponentEvent(ComponentEvent event)
-    {
-        return false;
-    }
-
-    public void afterRenderBody(MarkupWriter writer, LifecycleEvent<Boolean> event)
-    {
-        // TODO Auto-generated method stub
-
-    }
-
-    public void afterRenderTemplate(MarkupWriter writer, LifecycleEvent<Boolean> event)
-    {
-        // TODO Auto-generated method stub
-
-    }
-
-    public void beforeRenderTemplate(MarkupWriter writer, LifecycleEvent<Boolean> event)
-    {
-        // TODO Auto-generated method stub
-    }
-
-    public void postBeginRender(MarkupWriter writer, LifecycleEvent<Boolean> event)
-    {
-        // TODO Auto-generated method stub
-        
-    }
-
-    public void preBeginRender(MarkupWriter writer, LifecycleEvent<Boolean> event)
-    {
-        // TODO Auto-generated method stub       
-    }
-    
-    
-}
+package org.apache.tapestry.internal.bindings;
+
+import org.apache.tapestry.ComponentResources;
+import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.runtime.ComponentEvent;
+import org.apache.tapestry.runtime.Component;
+import org.apache.tapestry.runtime.LifecycleEvent;
+
+/**
+ * For use in places where we don't want to have to transform a class just for testing purposes.
+ */
+public class DefaultComponent implements Component
+{
+
+    public void postRenderCleanup()
+    {
+    }
+
+    public void setupRender(MarkupWriter writer, LifecycleEvent<Boolean> event)
+    {
+    }
+
+    public void beginRender(MarkupWriter writer, LifecycleEvent<Boolean> event)
+    {
+    }
+
+    public void beforeRenderBody(MarkupWriter writer, LifecycleEvent<Boolean> event)
+    {
+    }
+
+    public void afterRender(MarkupWriter writer, LifecycleEvent<Boolean> event)
+    {
+    }
+
+    public void cleanupRender(MarkupWriter writer, LifecycleEvent<Boolean> event)
+    {
+    }
+
+    public ComponentResources getComponentResources()
+    {
+        return null;
+    }
+
+    public void containingPageDidLoad()
+    {
+    }
+
+    public void containingPageDidDetach()
+    {
+    }
+
+    public void containingPageDidAttach()
+    {
+    }
+
+    public boolean handleComponentEvent(ComponentEvent event)
+    {
+        return false;
+    }
+
+    public void afterRenderBody(MarkupWriter writer, LifecycleEvent<Boolean> event)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void afterRenderTemplate(MarkupWriter writer, LifecycleEvent<Boolean> event)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void beforeRenderTemplate(MarkupWriter writer, LifecycleEvent<Boolean> event)
+    {
+        // TODO Auto-generated method stub
+    }
+
+    public void postBeginRender(MarkupWriter writer, LifecycleEvent<Boolean> event)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void preBeginRender(MarkupWriter writer, LifecycleEvent<Boolean> event)
+    {
+        // TODO Auto-generated method stub
+    }
+
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/TargetBean.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/TargetBean.java?view=diff&rev=488060&r1=488059&r2=488060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/TargetBean.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/TargetBean.java Sun Dec 17 14:09:25 2006
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry.internal.bindings;
 
-public class TargetBean extends DefaultComponentLifecyle
+public class TargetBean extends DefaultComponent
 {
     private String _objectValue;
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentSourceImplTest.java?view=diff&rev=488060&r1=488059&r2=488060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentSourceImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentSourceImplTest.java Sun Dec 17 14:09:25 2006
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry.internal.services;
 
+import org.apache.tapestry.internal.bindings.DefaultComponent;
 import org.apache.tapestry.internal.structure.ComponentPageElement;
 import org.apache.tapestry.internal.structure.Page;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
@@ -66,6 +67,44 @@
         ComponentSource source = new ComponentSourceImpl(cache);
 
         assertSame(source.getComponent(PAGE_NAME + ":" + NESTED_ELEMENT_ID), component);
+
+        verify();
+    }
+
+    @Test
+    public void get_page_by_logical_name()
+    {
+        RequestPageCache cache = newRequestPageCache();
+        Page page = newPage();
+        Component component = newComponent();
+
+        train_get(cache, PAGE_NAME, page);
+        train_getRootComponent(page, component);
+
+        replay();
+
+        ComponentSource source = new ComponentSourceImpl(cache);
+
+        assertSame(source.getPage(PAGE_NAME), component);
+
+        verify();
+    }
+
+    @Test
+    public void get_page_by_class()
+    {
+        RequestPageCache cache = newRequestPageCache();
+        Page page = newPage();
+        Component component = new DefaultComponent();
+
+        train_getByClassName(cache, DefaultComponent.class.getName(), page);
+        train_getRootComponent(page, component);
+
+        replay();
+
+        ComponentSource source = new ComponentSourceImpl(cache);
+
+        assertSame(source.getPage(DefaultComponent.class), component);
 
         verify();
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java?view=diff&rev=488060&r1=488059&r2=488060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java Sun Dec 17 14:09:25 2006
@@ -116,11 +116,6 @@
                         .same(handler))).andReturn(handled);
     }
 
-    protected final void train_get(RequestPageCache cache, String pageName, Page page)
-    {
-        expect(cache.get(pageName)).andReturn(page).atLeastOnce();
-    }
-
     protected final PageResponseRenderer newPageResponseRenderer()
     {
         return newMock(PageResponseRenderer.class);

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/RequestPageCacheImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/RequestPageCacheImplTest.java?view=diff&rev=488060&r1=488059&r2=488060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/RequestPageCacheImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/RequestPageCacheImplTest.java Sun Dec 17 14:09:25 2006
@@ -90,7 +90,7 @@
 
             unreachable();
         }
-        catch (RuntimeException ex)
+        catch (IllegalArgumentException ex)
         {
             assertEquals(ex.getMessage(), "Page 'MyPage' is not defined by this application.");
         }