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 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.");
}