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 2011/05/28 20:42:44 UTC
svn commit: r1128739 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry5/internal/pageload/
main/java/org/apache/tapestry5/internal/services/
main/java/org/apache/tapestry5/services/pageload/
test/java/org/apache/tapestry5/...
Author: hlship
Date: Sat May 28 18:42:43 2011
New Revision: 1128739
URL: http://svn.apache.org/viewvc?rev=1128739&view=rev
Log:
Move the determination of request locale from the RequestPageCache service and into the PageSource service
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/DefaultComponentRequestSelectorAnalyzer.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/NonPoolingRequestPageCacheImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSource.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/ComponentRequestSelectorAnalyzer.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/ComponentResourceSelector.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/DefaultComponentRequestSelectorAnalyzer.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/DefaultComponentRequestSelectorAnalyzer.java?rev=1128739&r1=1128738&r2=1128739&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/DefaultComponentRequestSelectorAnalyzer.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/DefaultComponentRequestSelectorAnalyzer.java Sat May 28 18:42:43 2011
@@ -14,15 +14,21 @@
package org.apache.tapestry5.internal.pageload;
-import java.util.Locale;
-
+import org.apache.tapestry5.ioc.services.ThreadLocale;
import org.apache.tapestry5.services.pageload.ComponentRequestSelectorAnalyzer;
import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
public class DefaultComponentRequestSelectorAnalyzer implements ComponentRequestSelectorAnalyzer
{
- public ComponentResourceSelector buildSelector(Locale locale)
+ private final ThreadLocale threadLocale;
+
+ public DefaultComponentRequestSelectorAnalyzer(ThreadLocale threadLocale)
+ {
+ this.threadLocale = threadLocale;
+ }
+
+ public ComponentResourceSelector buildSelectorForRequest()
{
- return new ComponentResourceSelector(locale);
+ return new ComponentResourceSelector(threadLocale.getLocale());
}
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/NonPoolingRequestPageCacheImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/NonPoolingRequestPageCacheImpl.java?rev=1128739&r1=1128738&r2=1128739&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/NonPoolingRequestPageCacheImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/NonPoolingRequestPageCacheImpl.java Sat May 28 18:42:43 2011
@@ -14,7 +14,6 @@
package org.apache.tapestry5.internal.services;
-import java.util.Locale;
import java.util.Map;
import org.apache.tapestry5.internal.structure.Page;
@@ -25,7 +24,6 @@ import org.apache.tapestry5.ioc.internal
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
import org.apache.tapestry5.ioc.services.PerthreadManager;
import org.apache.tapestry5.ioc.services.ThreadCleanupListener;
-import org.apache.tapestry5.ioc.services.ThreadLocale;
import org.apache.tapestry5.services.ComponentClassResolver;
import org.slf4j.Logger;
@@ -44,17 +42,13 @@ public class NonPoolingRequestPageCacheI
private final PageSource pageSource;
- private final ThreadLocale threadLocale;
-
private final Map<String, Page> cache = CollectionFactory.newMap();
- public NonPoolingRequestPageCacheImpl(Logger logger, ComponentClassResolver resolver, PageSource pageSource,
- ThreadLocale threadLocale)
+ public NonPoolingRequestPageCacheImpl(Logger logger, ComponentClassResolver resolver, PageSource pageSource)
{
this.logger = logger;
this.resolver = resolver;
this.pageSource = pageSource;
- this.threadLocale = threadLocale;
}
@PostInjection
@@ -86,9 +80,7 @@ public class NonPoolingRequestPageCacheI
if (page == null)
{
- Locale locale = threadLocale.getLocale();
-
- page = pageSource.getPage(canonical, locale);
+ page = pageSource.getPage(canonical);
try
{
@@ -96,7 +88,7 @@ public class NonPoolingRequestPageCacheI
}
catch (Throwable t)
{
- throw new RuntimeException(String.format("Unable to attach page %s (%s): %s", canonical, locale,
+ throw new RuntimeException(String.format("Unable to attach page %s: %s", canonical,
InternalUtils.toMessage(t)), t);
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSource.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSource.java?rev=1128739&r1=1128738&r2=1128739&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSource.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSource.java Sat May 28 18:42:43 2011
@@ -19,6 +19,8 @@ import java.util.Locale;
import org.apache.tapestry5.internal.structure.Page;
import org.apache.tapestry5.ioc.Resource;
import org.apache.tapestry5.services.dynamic.DynamicTemplate;
+import org.apache.tapestry5.services.pageload.ComponentRequestSelectorAnalyzer;
+import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
/**
* Access to localized page instances (which are now shared singletons, starting in release 5.2).
@@ -37,5 +39,12 @@ public interface PageSource
*/
void clearCache();
- Page getPage(String canonicalPageName, Locale locale);
+ /**
+ * Returns a loaded instance of the indicated page, using the Locale and other information
+ * from the {@link ComponentResourceSelector} obtained from the {@link ComponentRequestSelectorAnalyzer}.
+ *
+ * @param canonicalPageName
+ * @return existing, or newly created, page instance
+ */
+ Page getPage(String canonicalPageName);
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java?rev=1128739&r1=1128738&r2=1128739&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java Sat May 28 18:42:43 2011
@@ -14,32 +14,35 @@
package org.apache.tapestry5.internal.services;
-import java.util.Locale;
import java.util.Map;
import org.apache.tapestry5.internal.structure.Page;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.services.InvalidationListener;
+import org.apache.tapestry5.services.pageload.ComponentRequestSelectorAnalyzer;
+import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
public class PageSourceImpl implements PageSource, InvalidationListener
{
+ private final ComponentRequestSelectorAnalyzer selectorAnalyzer;
+
private final PageLoader pageLoader;
private static final class CachedPageKey
{
final String pageName;
- final Locale locale;
+ final ComponentResourceSelector selector;
- public CachedPageKey(String pageName, Locale locale)
+ public CachedPageKey(String pageName, ComponentResourceSelector selector)
{
this.pageName = pageName;
- this.locale = locale;
+ this.selector = selector;
}
public int hashCode()
{
- return 37 * pageName.hashCode() + locale.hashCode();
+ return 37 * pageName.hashCode() + selector.hashCode();
}
public boolean equals(Object obj)
@@ -52,15 +55,16 @@ public class PageSourceImpl implements P
CachedPageKey other = (CachedPageKey) obj;
- return pageName.equals(other.pageName) && locale.equals(other.locale);
+ return pageName.equals(other.pageName) && selector.equals(other.selector);
}
}
private final Map<CachedPageKey, Page> pageCache = CollectionFactory.newConcurrentMap();
- public PageSourceImpl(PageLoader pageLoader)
+ public PageSourceImpl(PageLoader pageLoader, ComponentRequestSelectorAnalyzer selectorAnalyzer)
{
this.pageLoader = pageLoader;
+ this.selectorAnalyzer = selectorAnalyzer;
}
public synchronized void objectWasInvalidated()
@@ -68,9 +72,11 @@ public class PageSourceImpl implements P
pageCache.clear();
}
- public Page getPage(String canonicalPageName, Locale locale)
+ public Page getPage(String canonicalPageName)
{
- CachedPageKey key = new CachedPageKey(canonicalPageName, locale);
+ ComponentResourceSelector selector = selectorAnalyzer.buildSelectorForRequest();
+
+ CachedPageKey key = new CachedPageKey(canonicalPageName, selector);
if (!pageCache.containsKey(key))
{
@@ -78,7 +84,7 @@ public class PageSourceImpl implements P
// different threads. The last built one will "evict" the others from the page cache,
// and the earlier ones will be GCed.
- Page page = pageLoader.loadPage(canonicalPageName, locale);
+ Page page = pageLoader.loadPage(canonicalPageName, selector.locale);
pageCache.put(key, page);
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/ComponentRequestSelectorAnalyzer.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/ComponentRequestSelectorAnalyzer.java?rev=1128739&r1=1128738&r2=1128739&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/ComponentRequestSelectorAnalyzer.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/ComponentRequestSelectorAnalyzer.java Sat May 28 18:42:43 2011
@@ -1,11 +1,11 @@
package org.apache.tapestry5.services.pageload;
-import java.util.Locale;
+import org.apache.tapestry5.ioc.services.ThreadLocale;
/**
* Determines the {@link ComponentResourceSelector} for the current request. This is often based on cookies, query
* parameters, or other details available in the {@link Request}. The default implementation simply wraps the
- * provided Locale as a ComponentResourceSelector. A custom implementation may
+ * {@linkplain ThreadLocale current locale} as a ComponentResourceSelector. A custom implementation may
* {@linkplain ComponentResourceSelector#withAxis(Class, Object) add additional axes} to the selector.
*
* @since 5.3.0
@@ -13,10 +13,7 @@ import java.util.Locale;
public interface ComponentRequestSelectorAnalyzer
{
/**
- * Constructors a selector given the locale.
- *
- * @param locale
- * @return
+ * Constructs a selector for locating or loading pages in the current request.
*/
- ComponentResourceSelector buildSelector(Locale locale);
+ ComponentResourceSelector buildSelectorForRequest();
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/ComponentResourceSelector.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/ComponentResourceSelector.java?rev=1128739&r1=1128738&r2=1128739&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/ComponentResourceSelector.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/ComponentResourceSelector.java Sat May 28 18:42:43 2011
@@ -21,16 +21,17 @@ import java.util.Map;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
/**
- * Encapsulates the information that is used when selecting a template or message catalog associated with a component.
- * The selector is created using information from the incoming request (principally, the {@link Locale}, which can be
- * considered the primary axis), but with additional, application-specific axes, which provides a way to skin an
- * application (when used in concert with a custom {@link ComponentResourceLocator} implementation.
+ * Encapsulates the information that is used when locating a template or message catalog associated with a component.
+ * The selector is combined with the component class name to locate the other resources. The selector defines one or
+ * more <em>axes</em> that are combined with a {@link ComponentResourceLocator} implementation to enforce a naming
+ * convention for locating resources. The primary axis is {@link Locale} (Tapestry 5.2 and earlier used a Locale
+ * instance as the selector), but Tapestry 5.3 adds support for additional axes.
*
* @since 5.3.0
*/
-public class ComponentResourceSelector
+public final class ComponentResourceSelector
{
- private final Locale locale;
+ public final Locale locale;
private final Map<Class, Object> axis;
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java?rev=1128739&r1=1128738&r2=1128739&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java Sat May 28 18:42:43 2011
@@ -174,11 +174,6 @@ public class InternalBaseTestCase extend
return newMock(PageLoader.class);
}
- protected final void train_loadPage(PageLoader loader, String pageName, Locale locale, Page page)
- {
- expect(loader.loadPage(pageName, locale)).andReturn(page);
- }
-
protected RenderQueue mockRenderQueue()
{
return newMock(RenderQueue.class);