Author: hlship
Date: Mon Sep  8 15:17:48 2008
New Revision: 693299

URL: http://svn.apache.org/viewvc?rev=693299&view=rev
Log:
TAPESTRY-2363: Overload method ComponentSource.getPage to accept a page class 
as parameter

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentSourceImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentSource.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentSourceImplTest.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentSourceImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentSourceImpl.java?rev=693299&r1=693298&r2=693299&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentSourceImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentSourceImpl.java
 Mon Sep  8 15:17:48 2008
@@ -17,20 +17,27 @@
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.internal.structure.ComponentPageElement;
 import org.apache.tapestry5.internal.structure.Page;
+import org.apache.tapestry5.ioc.internal.util.Defense;
 import org.apache.tapestry5.runtime.Component;
+import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.ComponentSource;
 
 public class ComponentSourceImpl implements ComponentSource
 {
     private final RequestPageCache pageCache;
 
-    public ComponentSourceImpl(RequestPageCache pageCache)
+    private final ComponentClassResolver resolver;
+
+    public ComponentSourceImpl(RequestPageCache pageCache, 
ComponentClassResolver resolver)
     {
         this.pageCache = pageCache;
+        this.resolver = resolver;
     }
 
     public Component getComponent(String completeId)
     {
+        Defense.notBlank(completeId, "completeId");
+
         int colonx = completeId.indexOf(':');
 
         if (colonx < 0)
@@ -67,9 +74,19 @@
 
     public Component getPage(String pageName)
     {
+        Defense.notBlank(pageName, "pageName");
+
         Page page = pageCache.get(pageName);
 
         return page.getRootComponent();
     }
 
+    public Component getPage(Class pageClass)
+    {
+        Defense.notNull(pageClass, "pageClass");
+
+        String pageName = 
resolver.resolvePageClassNameToPageName(pageClass.getName());
+
+        return getPage(pageName);
+    }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentSource.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentSource.java?rev=693299&r1=693298&r2=693299&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentSource.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentSource.java
 Mon Sep  8 15:17:48 2008
@@ -24,9 +24,9 @@
 public interface ComponentSource
 {
     /**
-     * Gets a component by its [EMAIL PROTECTED] 
org.apache.tapestry5.ComponentResourcesCommon#getCompleteId() complete id}. If
-     * the component id is for a mixin, then the mixin attached to the 
component will be returned. A mixin's complete id
-     * is its container's complete id, suffixed with "$" and the mixin's id 
(its simple class name).
+     * Gets a component by its [EMAIL PROTECTED] 
org.apache.tapestry5.ComponentResourcesCommon#getCompleteId() complete id}.
+     * If the component id is for a mixin, then the mixin attached to the 
component will be returned. A mixin's complete
+     * id is its container's complete id, suffixed with "$" and the mixin's id 
(its simple class name).
      *
      * @param completeId complete component id (case insensitive)
      * @return the component
@@ -44,4 +44,13 @@
      * @throws IllegalArgumentException if the page can not be found
      */
     Component getPage(String pageName);
+
+    /**
+     * A convienience for obtaining a page instance via a class instance.  
This is provided so as to be refactoring
+     * safe.  The pageClass is simply converted to a class name and this is 
used to locate a page instance.
+     *
+     * @param pageClass used to locate the page instance
+     * @return the page instance
+     */
+    Component getPage(Class pageClass);
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentSourceImplTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentSourceImplTest.java?rev=693299&r1=693298&r2=693299&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentSourceImplTest.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentSourceImplTest.java
 Mon Sep  8 15:17:48 2008
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007 The Apache Software Foundation
+// Copyright 2006, 2007, 2008 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.runtime.Component;
+import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.ComponentSource;
 import org.testng.annotations.Test;
 
@@ -33,6 +34,7 @@
         RequestPageCache cache = mockRequestPageCache();
         Page page = mockPage();
         Component component = mockComponent();
+        ComponentClassResolver resolver = mockComponentClassResolver();
 
         train_get(cache, PAGE_NAME, page);
 
@@ -40,7 +42,7 @@
 
         replay();
 
-        ComponentSource source = new ComponentSourceImpl(cache);
+        ComponentSource source = new ComponentSourceImpl(cache, resolver);
 
         assertSame(source.getComponent(PAGE_NAME), component);
 
@@ -54,6 +56,7 @@
         Page page = mockPage();
         ComponentPageElement element = mockComponentPageElement();
         Component component = mockComponent();
+        ComponentClassResolver resolver = mockComponentClassResolver();
 
         train_get(cache, PAGE_NAME, page);
 
@@ -63,7 +66,7 @@
 
         replay();
 
-        ComponentSource source = new ComponentSourceImpl(cache);
+        ComponentSource source = new ComponentSourceImpl(cache, resolver);
 
         assertSame(source.getComponent(PAGE_NAME + ":" + NESTED_ELEMENT_ID), 
component);
 
@@ -76,13 +79,14 @@
         RequestPageCache cache = mockRequestPageCache();
         Page page = mockPage();
         Component component = mockComponent();
+        ComponentClassResolver resolver = mockComponentClassResolver();
 
         train_get(cache, PAGE_NAME, page);
         train_getRootComponent(page, component);
 
         replay();
 
-        ComponentSource source = new ComponentSourceImpl(cache);
+        ComponentSource source = new ComponentSourceImpl(cache, resolver);
 
         assertSame(source.getPage(PAGE_NAME), component);
 
@@ -92,6 +96,22 @@
     @Test
     public void get_page_by_class()
     {
-    }
+        RequestPageCache cache = mockRequestPageCache();
+        Page page = mockPage();
+        Component component = mockComponent();
+        ComponentClassResolver resolver = mockComponentClassResolver();
+
+        train_resolvePageClassNameToPageName(resolver, 
ComponentSourceImplTest.class.getName(), PAGE_NAME);
+
+        train_get(cache, PAGE_NAME, page);
+        train_getRootComponent(page, component);
+
+        replay();
+
+        ComponentSource source = new ComponentSourceImpl(cache, resolver);
 
+        assertSame(source.getPage(ComponentSourceImplTest.class), component);
+
+        verify();
+    }
 }


Reply via email to