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);