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();
+ }
}