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 2007/06/16 02:36:42 UTC

svn commit: r547839 [1/2] - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry/ main/java/org/apache/tapestry/internal/services/ main/java/org/apache/tapestry/internal/structure/ main/java/org/apache/tapestry/internal/test/ m...

Author: hlship
Date: Fri Jun 15 17:36:40 2007
New Revision: 547839

URL: http://svn.apache.org/viewvc?view=rev&rev=547839
Log:
TAPESTRY-1491: No way to get the logical page name for a page instance

Removed:
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/NoOpPage.java
Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentClassResolverImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentInstanceResultProcessor.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentSourceImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InjectPageWorker.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InternalModule.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/MetaDataLocatorImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoader.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoaderImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoaderProcessor.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PagePool.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PagePoolImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RequestPageCache.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RequestPageCacheImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/Page.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/ComponentClassResolver.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/ComponentSource.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PersistentFieldManager.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/test/TapestryTestCase.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentClassResolverImplTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentInstanceResultProcessorTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentSourceImplTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/LinkFactoryImplTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MetaDataLocatorImplTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PageLoaderImplTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PagePoolImplTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestPageCacheImplTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/structure/PageImplTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry/integration/app1/components/Border.html

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java Fri Jun 15 17:36:40 2007
@@ -151,4 +151,11 @@
      */
     Block findBlock(String blockId);
 
+    /**
+     * Returns the <em>logical</em> name of the page containing this component. This is the short
+     * name (it often appears in URLs)
+     * 
+     * @return the logical name of the page which contains this component
+     */
+    String getPageName();
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentClassResolverImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentClassResolverImpl.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentClassResolverImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentClassResolverImpl.java Fri Jun 15 17:36:40 2007
@@ -26,6 +26,8 @@
 import org.apache.tapestry.internal.events.InvalidationListener;
 import org.apache.tapestry.ioc.annotations.Inject;
 import org.apache.tapestry.ioc.annotations.Symbol;
+import org.apache.tapestry.ioc.internal.util.ConcurrentBarrier;
+import org.apache.tapestry.ioc.internal.util.Invokable;
 import org.apache.tapestry.services.ComponentClassResolver;
 import org.apache.tapestry.services.LibraryMapping;
 
@@ -66,6 +68,10 @@
     /** This one is case sensitive, since class names do always have a particular case. */
     private final Map<String, String> _pageClassNameToLogicalName = newMap();
 
+    private final Map<String, String> _pageNameToCanonicalPageName = newCaseInsensitiveMap();
+
+    private final ConcurrentBarrier _barrier = new ConcurrentBarrier();
+
     public ComponentClassResolverImpl(ComponentInstantiatorSource componentInstantiatorSource,
             ClassNameLocator classNameLocator,
 
@@ -120,32 +126,45 @@
     /** When the class loader is invalidated, clear any cached page names or component types. */
     public synchronized void objectWasInvalidated()
     {
-        _needsRebuild = true;
+        _barrier.withWrite(new Runnable()
+        {
+            public void run()
+            {
+                _needsRebuild = true;
 
-        _pageToClassName.clear();
-        _componentToClassName.clear();
-        _mixinToClassName.clear();
-        _pageClassNameToLogicalName.clear();
+                _pageToClassName.clear();
+                _componentToClassName.clear();
+                _mixinToClassName.clear();
+                _pageClassNameToLogicalName.clear();
+                _pageNameToCanonicalPageName.clear();
+            }
+        });
 
     }
 
-    private synchronized void rebuild()
+    private void rebuild()
     {
         if (!_needsRebuild) return;
 
-        rebuild("", _appRootPackage);
-
-        for (String prefix : _mappings.keySet())
+        _barrier.withWrite(new Runnable()
         {
-            List<String> packages = _mappings.get(prefix);
+            public void run()
+            {
+                rebuild("", _appRootPackage);
 
-            String folder = prefix + "/";
+                for (String prefix : _mappings.keySet())
+                {
+                    List<String> packages = _mappings.get(prefix);
 
-            for (String packageName : packages)
-                rebuild(folder, packageName);
-        }
+                    String folder = prefix + "/";
 
-        _needsRebuild = false;
+                    for (String packageName : packages)
+                        rebuild(folder, packageName);
+                }
+
+                _needsRebuild = false;
+            }
+        });
     }
 
     private void rebuild(String pathPrefix, String rootPackage)
@@ -173,7 +192,11 @@
         {
             String logicalName = toLogicalName(name, pathPrefix, startPos);
 
-            if (isPage) _pageClassNameToLogicalName.put(name, logicalName);
+            if (isPage)
+            {
+                _pageClassNameToLogicalName.put(name, logicalName);
+                _pageNameToCanonicalPageName.put(logicalName, logicalName);
+            }
 
             logicalNameToClassName.put(logicalName, name);
         }
@@ -249,45 +272,70 @@
                 .length());
     }
 
-    public String resolvePageNameToClassName(String pageName)
+    public String resolvePageNameToClassName(final String pageName)
     {
-        String result = locate(pageName, _pageToClassName);
+        return _barrier.withRead(new Invokable<String>()
+        {
+            public String invoke()
+            {
+                String result = locate(pageName, _pageToClassName);
 
-        if (result == null)
-            throw new IllegalArgumentException(ServicesMessages.couldNotResolvePageName(
-                    pageName,
-                    _pageToClassName.keySet()));
+                if (result == null)
+                    throw new IllegalArgumentException(ServicesMessages.couldNotResolvePageName(
+                            pageName,
+                            _pageToClassName.keySet()));
+
+                return result;
+            }
+        });
 
-        return result;
     }
 
-    public boolean isPageName(String pageName)
+    public boolean isPageName(final String pageName)
     {
-        return locate(pageName, _pageToClassName) != null;
+        return _barrier.withRead(new Invokable<Boolean>()
+        {
+            public Boolean invoke()
+            {
+                return locate(pageName, _pageToClassName) != null;
+            }
+        });
     }
 
-    public String resolveComponentTypeToClassName(String componentType)
+    public String resolveComponentTypeToClassName(final String componentType)
     {
-        String result = locate(componentType, _componentToClassName);
+        return _barrier.withRead(new Invokable<String>()
+        {
+            public String invoke()
+            {
+                String result = locate(componentType, _componentToClassName);
 
-        if (result == null)
-            throw new IllegalArgumentException(ServicesMessages.couldNotResolveComponentType(
-                    componentType,
-                    _componentToClassName.keySet()));
+                if (result == null)
+                    throw new IllegalArgumentException(ServicesMessages
+                            .couldNotResolveComponentType(componentType, _componentToClassName
+                                    .keySet()));
 
-        return result;
+                return result;
+            }
+        });
     }
 
-    public String resolveMixinTypeToClassName(String mixinType)
+    public String resolveMixinTypeToClassName(final String mixinType)
     {
-        String result = locate(mixinType, _mixinToClassName);
+        return _barrier.withRead(new Invokable<String>()
+        {
+            public String invoke()
+            {
+                String result = locate(mixinType, _mixinToClassName);
 
-        if (result == null)
-            throw new IllegalArgumentException(ServicesMessages.couldNotResolveMixinType(
-                    mixinType,
-                    _mixinToClassName.keySet()));
+                if (result == null)
+                    throw new IllegalArgumentException(ServicesMessages.couldNotResolveMixinType(
+                            mixinType,
+                            _mixinToClassName.keySet()));
 
-        return result;
+                return result;
+            }
+        });
     }
 
     /**
@@ -314,15 +362,41 @@
         return result;
     }
 
-    public String resolvePageClassNameToPageName(String pageClassName)
+    public String resolvePageClassNameToPageName(final String pageClassName)
     {
-        rebuild();
+        return _barrier.withRead(new Invokable<String>()
+        {
+            public String invoke()
+            {
+                rebuild();
 
-        String result = _pageClassNameToLogicalName.get(pageClassName);
+                String result = _pageClassNameToLogicalName.get(pageClassName);
 
-        if (result == null)
-            throw new IllegalArgumentException(ServicesMessages.pageNameUnresolved(pageClassName));
+                if (result == null)
+                    throw new IllegalArgumentException(ServicesMessages
+                            .pageNameUnresolved(pageClassName));
 
-        return result;
+                return result;
+            }
+        });
+    }
+
+    public String canonicalizePageName(final String pageName)
+    {
+        return _barrier.withRead(new Invokable<String>()
+        {
+            public String invoke()
+            {
+                String result = locate(pageName, _pageNameToCanonicalPageName);
+
+                if (result == null)
+                    throw new IllegalArgumentException(ServicesMessages
+                            .couldNotCanonicalizePageName(pageName, _pageNameToCanonicalPageName
+                                    .keySet()));
+
+                return result;
+            }
+        });
     }
+
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentInstanceResultProcessor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentInstanceResultProcessor.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentInstanceResultProcessor.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentInstanceResultProcessor.java Fri Jun 15 17:36:40 2007
@@ -44,21 +44,15 @@
         ComponentResources resources = value.getComponentResources();
 
         if (resources.getContainer() != null)
-        {
             _log.warn(ServicesMessages.componentInstanceIsNotAPage(
                     methodDescription,
                     component,
                     value));
 
-            resources = resources.getPage().getComponentResources();
-        }
-
         // We have all these layers and layers between us and the page instance, but its easy to
         // extract the page class name and quickly re-resolve that to the page instance.
 
-        String pageClassName = resources.getCompleteId();
-
-        Page page = _requestPageCache.getByClassName(pageClassName);
+        Page page = _requestPageCache.get(resources.getPageName());
 
         Link link = _linkFactory.createPageLink(page);
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentSourceImpl.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentSourceImpl.java Fri Jun 15 17:36:40 2007
@@ -14,8 +14,6 @@
 
 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;
@@ -35,28 +33,17 @@
 
         if (colonx < 0)
         {
-            Page page = _pageCache.getByClassName(componentId);
+            Page page = _pageCache.get(componentId);
 
             return page.getRootComponent();
         }
 
         String pageName = componentId.substring(0, colonx);
 
-        Page page = _pageCache.getByClassName(pageName);
+        Page page = _pageCache.get(pageName);
         String nestedId = componentId.substring(colonx + 1);
 
         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)

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InjectPageWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InjectPageWorker.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InjectPageWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InjectPageWorker.java Fri Jun 15 17:36:40 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -23,6 +23,7 @@
 import org.apache.tapestry.ioc.util.BodyBuilder;
 import org.apache.tapestry.model.MutableComponentModel;
 import org.apache.tapestry.services.ClassTransformation;
+import org.apache.tapestry.services.ComponentClassResolver;
 import org.apache.tapestry.services.ComponentClassTransformWorker;
 import org.apache.tapestry.services.MethodSignature;
 
@@ -35,17 +36,19 @@
 {
     private final RequestPageCache _requestPageCache;
 
-    public InjectPageWorker(final RequestPageCache requestPageCache)
+    private final ComponentClassResolver _resolver;
+
+    public InjectPageWorker(RequestPageCache requestPageCache, ComponentClassResolver resolver)
     {
         _requestPageCache = requestPageCache;
+        _resolver = resolver;
     }
 
     public void transform(ClassTransformation transformation, MutableComponentModel model)
     {
         List<String> names = transformation.findFieldsWithAnnotation(InjectPage.class);
 
-        if (names.isEmpty())
-            return;
+        if (names.isEmpty()) return;
 
         String cacheFieldName = transformation.addInjectedField(
                 RequestPageCache.class,
@@ -67,20 +70,20 @@
         String fieldType = transformation.getFieldType(fieldName);
         String methodName = transformation.newMemberName("read_inject_page", fieldName);
 
+        String injectedPageName = InternalUtils.isBlank(pageName) ? _resolver
+                .resolvePageClassNameToPageName(fieldType) : pageName;
+
         MethodSignature sig = new MethodSignature(Modifier.PRIVATE, fieldType, methodName, null,
                 null);
 
         BodyBuilder builder = new BodyBuilder();
         builder.begin();
 
-        builder.add("%s page = %s.", Page.class.getName(), cacheFieldName);
-
-        if (InternalUtils.isBlank(pageName))
-            builder.add("getByClassName(\"%s\")", fieldType);
-        else
-            builder.add("get(\"%s\")", pageName);
-
-        builder.addln(";");
+        builder.add(
+                "%s page = %s.get(\"%s\");",
+                Page.class.getName(),
+                cacheFieldName,
+                injectedPageName);
 
         builder.addln("return (%s) page.getRootElement().getComponent();", fieldType);
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InternalModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InternalModule.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InternalModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InternalModule.java Fri Jun 15 17:36:40 2007
@@ -202,9 +202,9 @@
     }
 
     public PagePool build(Log log, PageLoader pageLoader,
-            ComponentMessagesSource componentMessagesSource)
+            ComponentMessagesSource componentMessagesSource, ComponentClassResolver resolver)
     {
-        PagePoolImpl service = new PagePoolImpl(log, pageLoader, _threadLocale);
+        PagePoolImpl service = new PagePoolImpl(log, pageLoader, _threadLocale, resolver);
 
         // This covers invalidations due to changes to classes
 
@@ -236,7 +236,7 @@
     @Scope(PERTHREAD_SCOPE)
     public RequestPageCache build(PagePool pagePool)
     {
-        RequestPageCacheImpl service = new RequestPageCacheImpl(_componentClassResolver, pagePool);
+        RequestPageCacheImpl service = new RequestPageCacheImpl(pagePool);
 
         _threadCleanupHub.addThreadCleanupListener(service);
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java Fri Jun 15 17:36:40 2007
@@ -118,9 +118,8 @@
         notBlank(action, "action");
 
         Page containingPage = component.getContainingPage();
-        String pageName = containingPage.getName();
 
-        String logicalPageName = _componentClassResolver.resolvePageClassNameToPageName(pageName);
+        String logicalPageName = containingPage.getLogicalName();
 
         ActionLinkTarget target = new ActionLinkTarget(action, logicalPageName, component
                 .getNestedId());
@@ -169,8 +168,7 @@
     {
         notNull(page, "page");
 
-        String pageName = page.getName();
-        String logicalPageName = _componentClassResolver.resolvePageClassNameToPageName(pageName);
+        String logicalPageName = page.getLogicalName();
 
         String[] context = activationContext.length != 0 ? toContextStrings(activationContext)
                 : collectActivationContextForPage(page);

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/MetaDataLocatorImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/MetaDataLocatorImpl.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/MetaDataLocatorImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/MetaDataLocatorImpl.java Fri Jun 15 17:36:40 2007
@@ -15,28 +15,23 @@
 package org.apache.tapestry.internal.services;
 
 import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newConcurrentMap;
 
 import java.util.Map;
 
 import org.apache.tapestry.ComponentResources;
 import org.apache.tapestry.internal.events.InvalidationListener;
 import org.apache.tapestry.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry.services.ComponentClassResolver;
 import org.apache.tapestry.services.MetaDataLocator;
 
 public class MetaDataLocatorImpl implements MetaDataLocator, InvalidationListener
 {
     private final Map<String, Map<String, String>> _defaultsByFolder = newCaseInsensitiveMap();
 
-    private final Map<String, String> _cache = CollectionFactory.newConcurrentMap();
+    private final Map<String, String> _cache = newConcurrentMap();
 
-    private final ComponentClassResolver _componentClassResolver;
-
-    public MetaDataLocatorImpl(ComponentClassResolver componentClassResolver,
-            Map<String, String> configuration)
+    public MetaDataLocatorImpl(Map<String, String> configuration)
     {
-        _componentClassResolver = componentClassResolver;
-
         loadDefaults(configuration);
     }
 
@@ -73,11 +68,10 @@
     {
         // The component's complete id should be sufficient as locale-specific
         // values don't enter into this.
-        
+
         String cacheKey = resources.getCompleteId() + "/" + key;
 
-        if (_cache.containsKey(cacheKey))
-            return _cache.get(cacheKey);
+        if (_cache.containsKey(cacheKey)) return _cache.get(cacheKey);
 
         String result = locate(key, resources);
 
@@ -94,13 +88,11 @@
         {
             String value = cursor.getComponentModel().getMeta(key);
 
-            if (value != null)
-                return value;
+            if (value != null) return value;
 
             ComponentResources next = cursor.getContainerResources();
 
-            if (next == null)
-                return locateInDefaults(key, cursor);
+            if (next == null) return locateInDefaults(key, cursor);
 
             cursor = next;
         }
@@ -108,9 +100,7 @@
 
     private String locateInDefaults(String key, ComponentResources pageResources)
     {
-        String pageClassName = pageResources.getCompleteId();
-
-        String logicalName = _componentClassResolver.resolvePageClassNameToPageName(pageClassName);
+        String logicalName = pageResources.getPageName();
 
         // We're going to peel this apart, slash by slash. Thus for
         // "mylib/myfolder/mysubfolder/MyPage" we'll be checking: "mylib/myfolder/mysubfolder",
@@ -126,11 +116,9 @@
 
             Map<String, String> forFolder = _defaultsByFolder.get(folderKey);
 
-            if (forFolder != null && forFolder.containsKey(key))
-                return forFolder.get(key);
+            if (forFolder != null && forFolder.containsKey(key)) return forFolder.get(key);
 
-            if (lastSlashx < 0)
-                break;
+            if (lastSlashx < 0) break;
 
             path = path.substring(0, lastSlashx);
         }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoader.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoader.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoader.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoader.java Fri Jun 15 17:36:40 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -12,34 +12,39 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
-
-import java.util.Locale;
-
-import org.apache.tapestry.internal.event.InvalidationEventHub;
-import org.apache.tapestry.internal.structure.Page;
-
-/**
- * Instantiates a fully loaded, configured instance of a Tapestry page. This is a recursive process,
- * since part of loading a page is to load the page elements for the page, many of which are
- * components. Further, in some cases, the full component tree is not identified until after each
- * component's template is loaded. Because this is an expensive process, loaded pages will be used
- * for many requests (on behalf of many different users) and will be pooled between requests.
- * 
- * 
- * @see PagePool
- * @see RequestPageCache
- */
-public interface PageLoader extends InvalidationEventHub
-{
-    /**
-     * Loads the page in the given locale.
-     * 
-     * @param pageClassName
-     *            fully qualified class name of the root component of the page
-     * @param locale
-     *            the locale to load the page and its components in
-     * @see Page#getLocale()
-     */
-    Page loadPage(String pageClassName, Locale locale);
-}
+package org.apache.tapestry.internal.services;
+
+import java.util.Locale;
+
+import org.apache.tapestry.ComponentResourcesCommon;
+import org.apache.tapestry.internal.event.InvalidationEventHub;
+import org.apache.tapestry.internal.structure.Page;
+
+/**
+ * Instantiates a fully loaded, configured instance of a Tapestry page. This is a recursive process,
+ * since part of loading a page is to load the page elements for the page, many of which are
+ * components. Further, in some cases, the full component tree is not identified until after each
+ * component's template is loaded. Because this is an expensive process, loaded pages will be used
+ * for many requests (on behalf of many different users) and will be pooled between requests.
+ * 
+ * @see PagePool
+ * @see RequestPageCache
+ */
+public interface PageLoader extends InvalidationEventHub
+{
+    /**
+     * Loads the page in the given locale.
+     * 
+     * @param logicalPageName
+     *            the <em>canonicalized</em> logical name of the page, which will be made
+     *            available via {@link Page#getLogicalName()} and
+     *            {@link ComponentResourcesCommon#getPageName()} (for any component within the
+     *            page).
+     * @param locale
+     *            the locale to load the page and its components , which will be made available via
+     *            {@link Page#getLocale()} and {@link ComponentResourcesCommon#getLocale()} (for any
+     *            component within the page)
+     * @see Page#getLocale()
+     */
+    Page loadPage(String logicalPageName, Locale locale);
+}

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoaderImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoaderImpl.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoaderImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoaderImpl.java Fri Jun 15 17:36:40 2007
@@ -19,6 +19,7 @@
 import org.apache.tapestry.internal.event.InvalidationEventHubImpl;
 import org.apache.tapestry.internal.events.InvalidationListener;
 import org.apache.tapestry.internal.structure.Page;
+import org.apache.tapestry.services.ComponentClassResolver;
 import org.apache.tapestry.services.PersistentFieldManager;
 
 public class PageLoaderImpl extends InvalidationEventHubImpl implements PageLoader,
@@ -32,23 +33,20 @@
 
     private final PersistentFieldManager _persistentFieldManager;
 
+    private final ComponentClassResolver _resolver;
+
     public PageLoaderImpl(ComponentTemplateSource templateSource,
             PageElementFactory pageElementFactory, LinkFactory linkFactory,
-            PersistentFieldManager persistentFieldManager)
+            PersistentFieldManager persistentFieldManager, ComponentClassResolver resolver)
     {
         _templateSource = templateSource;
         _pageElementFactory = pageElementFactory;
-
         _linkFactory = linkFactory;
         _persistentFieldManager = persistentFieldManager;
+        _resolver = resolver;
     }
 
-    /**
-     * For the moment, this service is a singleton. However, only a single page can be built at one
-     * time. The coming rework will shift the loc al variables to a secondary process object and
-     * allow the loader to work in parallel.
-     */
-    public Page loadPage(String pageClassName, Locale locale)
+    public Page loadPage(String logicalPageName, Locale locale)
     {
         // For the moment, the processors are used once and discarded. Perhaps it is worth the
         // effort to pool them for reuse, but not too likely.
@@ -56,7 +54,9 @@
         PageLoaderProcessor processor = new PageLoaderProcessor(_templateSource,
                 _pageElementFactory, _linkFactory, _persistentFieldManager);
 
-        return processor.loadPage(pageClassName, locale);
+        String pageClassName = _resolver.resolvePageNameToClassName(logicalPageName);
+
+        return processor.loadPage(logicalPageName, pageClassName, locale);
     }
 
     /**

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoaderProcessor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoaderProcessor.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoaderProcessor.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageLoaderProcessor.java Fri Jun 15 17:36:40 2007
@@ -375,10 +375,10 @@
     }
 
     /**
-     * As currently implemented, this should be invoked just once and then the instance should be
-     * discarded.
+     * As currently implemented, this should be invoked just once and then the PageLoaderProcessor
+     * instance should be discarded.
      */
-    public Page loadPage(String pageClassName, Locale locale)
+    public Page loadPage(String logicalPageName, String pageClassName, Locale locale)
     {
         // Ensure that loadPage() may only be invoked once.
 
@@ -386,7 +386,7 @@
 
         _locale = locale;
 
-        _page = new PageImpl(pageClassName, _locale, _linkFactory, _persistentFieldManager);
+        _page = new PageImpl(logicalPageName, _locale, _linkFactory, _persistentFieldManager);
 
         loadRootComponent(pageClassName);
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PagePool.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PagePool.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PagePool.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PagePool.java Fri Jun 15 17:36:40 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -12,30 +12,28 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.services;
-
-import org.apache.tapestry.internal.structure.Page;
-
-/**
- * Provides access to pages, creating them as necessary, and pooling them between requests.
- * 
- * 
- */
-public interface PagePool
-{
-    /**
-     * Obtains a page instance from the pool via a page name. A page instance is created if no such
-     * page is currently available.
-     * 
-     * @param pageName
-     *            identifies the page name, as a fully qualified class name
-     * @return a page instance
-     */
-    Page checkout(String pageName);
-
-    /**
-     * @param page
-     *            a previously checked-out page
-     */
-    void release(Page page);
-}
+package org.apache.tapestry.internal.services;
+
+import org.apache.tapestry.internal.structure.Page;
+
+/**
+ * Provides access to pages, creating them as necessary, and pooling them between requests.
+ */
+public interface PagePool
+{
+    /**
+     * Obtains a page instance from the pool via a logical page name. A page instance is created if
+     * no such page is currently available.
+     * 
+     * @param logicalPageName
+     *            logical name used to identify the page
+     * @return a page instance
+     */
+    Page checkout(String logicalPageName);
+
+    /**
+     * @param page
+     *            a previously checked-out page
+     */
+    void release(Page page);
+}

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PagePoolImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PagePoolImpl.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PagePoolImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PagePoolImpl.java Fri Jun 15 17:36:40 2007
@@ -25,6 +25,7 @@
 import org.apache.tapestry.internal.structure.Page;
 import org.apache.tapestry.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry.ioc.services.ThreadLocale;
+import org.apache.tapestry.services.ComponentClassResolver;
 
 /**
  * A very naive implementation just to get us past the start line.
@@ -40,27 +41,33 @@
 
     private final ThreadLocale _threadLocale;
 
+    private final ComponentClassResolver _resolver;
+
     private final Map<PageLocator, List<Page>> _pool = newMap();
 
-    public PagePoolImpl(Log log, PageLoader pageLoader, ThreadLocale threadLocale)
+    public PagePoolImpl(Log log, PageLoader pageLoader, ThreadLocale threadLocale,
+            ComponentClassResolver resolver)
     {
         _log = log;
         _pageLoader = pageLoader;
         _threadLocale = threadLocale;
+        _resolver = resolver;
     }
 
-    public synchronized Page checkout(String pageName)
+    public synchronized Page checkout(String logicalPageName)
     {
+        String canonicalPageName = _resolver.canonicalizePageName(logicalPageName);
+
         Locale locale = _threadLocale.getLocale();
-        List<Page> pages = _pool.get(new PageLocator(pageName, locale));
+        List<Page> pages = _pool.get(new PageLocator(canonicalPageName, locale));
 
         // When we load a page, we load it in the active locale, whatever that is.
         // Even if the locale later changes, we keep the version we originally got.
         // This is not as bad in T5 as in T4, since a seperate request will
         // render the response (and will have a chance to get the page in a different locale).
 
-        if (pages == null || pages.isEmpty())
-            return _pageLoader.loadPage(pageName, locale);
+        if (pages == null || pages.isEmpty()) 
+            return _pageLoader.loadPage(canonicalPageName, locale);
 
         // Remove and return the last page in the pool.
 
@@ -77,7 +84,7 @@
             return;
         }
 
-        PageLocator locator = new PageLocator(page.getName(), page.getLocale());
+        PageLocator locator = new PageLocator(page.getLogicalName(), page.getLocale());
         List<Page> pages = _pool.get(locator);
 
         if (pages == null)

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RequestPageCache.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RequestPageCache.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RequestPageCache.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RequestPageCache.java Fri Jun 15 17:36:40 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -26,23 +26,12 @@
      * Gets the page via its page name, in the current locale. The page name is resolved to a class
      * name, which is used to obtain the page (from the page pool).
      * 
-     * @param pageName
+     * @param logicalPageName
      *            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 IllegalArgumentException
      *             if the name can not be resolved to a page instance
      */
-    Page get(String pageName);
-
-    /**
-     * Gets the page via its fully qualified class name, in the current locale.
-     * 
-     * @param pageName
-     *            fully qualified class name
-     * @return a page instance reserved for this request
-     * @throws IllegalArgumentException
-     *             if the name can not be resolved to a page instance
-     */
-    Page getByClassName(String className);
+    Page get(String logicalPageName);
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RequestPageCacheImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RequestPageCacheImpl.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RequestPageCacheImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RequestPageCacheImpl.java Fri Jun 15 17:36:40 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -14,57 +14,47 @@
 
 package org.apache.tapestry.internal.services;
 
-import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
 
 import java.util.Map;
 
 import org.apache.tapestry.internal.structure.Page;
 import org.apache.tapestry.ioc.services.ThreadCleanupListener;
-import org.apache.tapestry.services.ComponentClassResolver;
 
 public class RequestPageCacheImpl implements RequestPageCache, ThreadCleanupListener
 {
-    private final ComponentClassResolver _resolver;
-
     private final PagePool _pagePool;
 
     /**
-     * Keyed on fully qualified page class name.
+     * Keyed on logical page name (case insensitive).
      */
-    private final Map<String, Page> _cache = newMap();
+    private final Map<String, Page> _cache = newCaseInsensitiveMap();
 
-    public RequestPageCacheImpl(ComponentClassResolver resolver, PagePool pagePool)
+    public RequestPageCacheImpl(PagePool pagePool)
     {
-        _resolver = resolver;
         _pagePool = pagePool;
     }
 
-    public Page get(String pageName)
-    {
-        String className = _resolver.resolvePageNameToClassName(pageName);
-
-        if (className == null)
-            throw new IllegalArgumentException(ServicesMessages.pageDoesNotExist(pageName));
-
-        return getByClassName(className);
-    }
-
-    public Page getByClassName(String className)
+    public Page get(String logicalPageName)
     {
-        Page page = _cache.get(className);
+        Page page = _cache.get(logicalPageName);
 
         if (page == null)
         {
-            page = _pagePool.checkout(className);
+            page = _pagePool.checkout(logicalPageName);
 
             page.attached();
 
-            _cache.put(className, page);
+            _cache.put(logicalPageName, page);
         }
 
         return page;
     }
 
+    /**
+     * At the end of the request, when the thread cleanup event occurs, release any pages attached
+     * to the request back to the page pool.
+     */
     public void threadDidCleanup()
     {
         for (Page p : _cache.values())

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java Fri Jun 15 17:36:40 2007
@@ -165,11 +165,6 @@
         return MESSAGES.format("context-index-out-of-range", methodDescription);
     }
 
-    static String pageDoesNotExist(String pageName)
-    {
-        return MESSAGES.format("page-does-not-exist", pageName);
-    }
-
     static String pageNameUnresolved(String pageClassName)
     {
         return MESSAGES.format("page-name-unresolved", pageClassName);
@@ -198,6 +193,12 @@
         return MESSAGES.format("could-not-resolve-page-name", pageName, InternalUtils
                 .joinSorted(pageNames));
     }
+    
+    static String couldNotCanonicalizePageName(String pageName, Collection<String> pageNames)
+    {
+        return MESSAGES.format("could-not-canonicalize-page-name", pageName, InternalUtils
+                .joinSorted(pageNames));
+    }
 
     static String couldNotResolveComponentType(String componentType,
             Collection<String> componentTypes)
@@ -398,7 +399,7 @@
     {
         return MESSAGES.format("no-display-for-data-type", datatype);
     }
-    
+
     static String noEditForDataType(String datatype)
     {
         return MESSAGES.format("no-edit-for-data-type", datatype);

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java Fri Jun 15 17:36:40 2007
@@ -550,7 +550,7 @@
 
         _coreComponent = _coreResources.getComponent();
 
-        String pageName = _page.getName();
+        String pageName = _page.getLogicalName();
 
         // A page (really, the root component of a page) does not have a container.
 
@@ -571,7 +571,7 @@
             if (parentNestedId == null)
             {
                 _nestedId = caselessId;
-                _completeId = _page.getName() + ":" + caselessId;
+                _completeId = pageName + ":" + caselessId;
             }
             else
             {
@@ -1113,4 +1113,10 @@
 
         return null;
     }
+
+    public String getPageName()
+    {
+        return _page.getLogicalName();
+    }
+
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java Fri Jun 15 17:36:40 2007
@@ -360,4 +360,9 @@
         return _componentModel.getBaseResource();
     }
 
+    public String getPageName()
+    {
+        return _element.getPageName();
+    }
+
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/Page.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/Page.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/Page.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/Page.java Fri Jun 15 17:36:40 2007
@@ -37,11 +37,9 @@
 public interface Page
 {
     /**
-     * Returns the name of the page, which is the fully qualifed class name of the page's
-     * <em>root component</em>. The name is unique within the application, though it is combined
-     * with the locale to select and pool page instances.
+     * Returns the short, logical name for the page.
      */
-    String getName();
+    String getLogicalName();
 
     /**
      * The locale for which the page is localized. This is set when the page is created and does not

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java Fri Jun 15 17:36:40 2007
@@ -32,7 +32,7 @@
 
 public class PageImpl implements Page
 {
-    private final String _name;
+    private final String _logicalPageName;
 
     private final Locale _locale;
 
@@ -52,10 +52,10 @@
      */
     private PersistentFieldBundle _fieldBundle;
 
-    public PageImpl(String name, Locale locale, LinkFactory linkFactory,
+    public PageImpl(String logicalPageName, Locale locale, LinkFactory linkFactory,
             PersistentFieldManager persistentFieldManager)
     {
-        _name = name;
+        _logicalPageName = logicalPageName;
         _locale = locale;
         _linkFactory = linkFactory;
         _persistentFieldManager = persistentFieldManager;
@@ -64,7 +64,7 @@
     @Override
     public String toString()
     {
-        return String.format("Page[%s %s]", _name, _locale);
+        return String.format("Page[%s %s]", _logicalPageName, _locale);
     }
 
     public ComponentPageElement getComponentElementByNestedId(String nestedId)
@@ -86,11 +86,6 @@
         return element;
     }
 
-    public String getName()
-    {
-        return _name;
-    }
-
     public Locale getLocale()
     {
         return _locale;
@@ -146,8 +141,7 @@
 
     public void attached()
     {
-        if (_dirtyCount != 0)
-            throw new IllegalStateException(StructureMessages.pageIsDirty(this));
+        if (_dirtyCount != 0) throw new IllegalStateException(StructureMessages.pageIsDirty(this));
 
         for (PageLifecycleListener listener : _listeners)
             listener.containingPageDidAttach();
@@ -171,13 +165,13 @@
 
     public void persistFieldChange(ComponentResources resources, String fieldName, Object newValue)
     {
-        _persistentFieldManager.postChange(_name, resources, fieldName, newValue);
+        _persistentFieldManager.postChange(_logicalPageName, resources, fieldName, newValue);
     }
 
     public Object getFieldChange(ComponentPageElement element, String fieldName)
     {
         if (_fieldBundle == null)
-            _fieldBundle = _persistentFieldManager.gatherChanges(_name);
+            _fieldBundle = _persistentFieldManager.gatherChanges(_logicalPageName);
 
         return _fieldBundle.getValue(element.getNestedId(), fieldName);
     }
@@ -191,5 +185,9 @@
     {
         _dirtyCount++;
     }
- 
+
+    public String getLogicalName()
+    {
+        return _logicalPageName;
+    }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java Fri Jun 15 17:36:40 2007
@@ -198,11 +198,6 @@
         expect(loader.loadPage(pageName, locale)).andReturn(page);
     }
 
-    protected final void train_getName(Page page, String name)
-    {
-        expect(page.getName()).andReturn(name).atLeastOnce();
-    }
-
     protected final PagePool mockPagePool()
     {
         return newMock(PagePool.class);
@@ -382,12 +377,6 @@
         return ins;
     }
 
-    protected final void train_getByClassName(RequestPageCache cache, String pageClassName,
-            Page page)
-    {
-        expect(cache.getByClassName(pageClassName)).andReturn(page).atLeastOnce();
-    }
-
     protected final RequestPageCache mockRequestPageCache()
     {
         return newMock(RequestPageCache.class);
@@ -554,5 +543,33 @@
     protected final DocumentScriptBuilder mockDocumentScriptBuilder()
     {
         return newMock(DocumentScriptBuilder.class);
+    }
+
+    protected final void train_canonicalizePageName(ComponentClassResolver resolver,
+            String pageName, String canonicalized)
+    {
+        expect(resolver.canonicalizePageName(pageName)).andReturn(canonicalized);
+    }
+
+    protected final void train_getLogicalName(Page page, String logicalName)
+    {
+        expect(page.getLogicalName()).andReturn(logicalName).atLeastOnce();
+    }
+
+    protected final void train_resolvePageNameToClassName(ComponentClassResolver resolver,
+            String pageName, String pageClassName)
+    {
+        expect(resolver.resolvePageNameToClassName(pageName)).andReturn(pageClassName)
+                .atLeastOnce();
+    }
+
+    protected final void train_getLocale(Page page, Locale locale)
+    {
+        expect(page.getLocale()).andReturn(locale).atLeastOnce();
+    }
+
+    protected final void train_detached(Page page, boolean dirty)
+    {
+        expect(page.detached()).andReturn(dirty);
     }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/ComponentClassResolver.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/ComponentClassResolver.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/ComponentClassResolver.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/ComponentClassResolver.java Fri Jun 15 17:36:40 2007
@@ -40,13 +40,13 @@
      * Converts a logical page name (such as might be encoded into a URL) into a fully qualified
      * class name. The case of the page name is irrelevant.
      * 
-     * @param pageName
+     * @param logicalPageName
      *            logical page name
      * @return fully qualified class name for the page
      * @throws IllegalArgumentException
      *             if the name does not match a known page class
      */
-    String resolvePageNameToClassName(String pageName);
+    String resolvePageNameToClassName(String logicalPageName);
 
     /**
      * For a particular path, determines if the path is a logical page name. The check is case
@@ -70,6 +70,15 @@
      *             if the name can not be resolved
      */
     String resolvePageClassNameToPageName(String pageClassName);
+
+    /**
+     * Returns the canonical form of a logical page name. The canonical form uses character case
+     * matching the underlying class name.
+     * 
+     * @throws IllegalArgumentException
+     *             if the page name does not match a logical page name
+     */
+    String canonicalizePageName(String pageName);
 
     /**
      * Converts a component type (a logical component name such as might be used inside a template

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/ComponentSource.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/ComponentSource.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/ComponentSource.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/ComponentSource.java Fri Jun 15 17:36:40 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -36,19 +36,6 @@
      * @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

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PersistentFieldManager.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PersistentFieldManager.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PersistentFieldManager.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/PersistentFieldManager.java Fri Jun 15 17:36:40 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -26,7 +26,7 @@
      * Posts a change of a persistent property.
      * 
      * @param pageName
-     *            the name of the page containing the component
+     *            the logical name of the page containing the component
      * @param resources
      *            the resources for the component or mixin (used to determine the persistence
      *            strategy)
@@ -42,7 +42,7 @@
      * session and request) and gathers them together into a bundle.
      * 
      * @param pageName
-     *            the name of the page to gather changes for
+     *            the logical name of the page to gather changes for
      * @return a bundle identifying all such changes
      */
     PersistentFieldBundle gatherChanges(String pageName);

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java Fri Jun 15 17:36:40 2007
@@ -433,7 +433,7 @@
         configuration.add("Mixin", new MixinWorker(resolver));
         configuration.add("OnEvent", new OnEventWorker());
         configuration.add("SupportsInformalParameters", new SupportsInformalParametersWorker());
-        configuration.add("InjectPage", new InjectPageWorker(requestPageCache));
+        configuration.add("InjectPage", new InjectPageWorker(requestPageCache, resolver));
         configuration.add("InjectComponent", new InjectComponentWorker());
         configuration.add("RenderCommand", new RenderCommandWorker());
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/test/TapestryTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/test/TapestryTestCase.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/test/TapestryTestCase.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/test/TapestryTestCase.java Fri Jun 15 17:36:40 2007
@@ -975,4 +975,9 @@
         expect(request.getParameter(elementName)).andReturn(value).atLeastOnce();
     }
 
+    protected final void train_getPageName(ComponentResourcesCommon resources, String pageName)
+    {
+        expect(resources.getPageName()).andReturn(pageName).atLeastOnce();
+    }
+
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties Fri Jun 15 17:36:40 2007
@@ -41,13 +41,13 @@
   or define the component inside class %s using the @Component annotation on a private instance variable.
 embedded-components-not-in-template=Embedded component(s) %s are defined within component class %s, but are not present in the component template.
 binding-source-failure=Could not convert '%s' into a component parameter binding: %s
-page-does-not-exist=Page '%s' is not defined by this application.
 page-name-unresolved=Unable to resolve class name %s to a logical page name.
 context-index-out-of-range=Method %s has more parameters than there are context values for this component event.
 exception-in-method-parameter=Exception in method %s, parameter #%d: %s
 component-event-is-aborted=Can not store result from invoking method %s, because an event result value has already been obtained from some other event handler method.
 unknown-persistent-field-strategy='%s' is not a defined persistent strategy.  Defined stategies: %s.
-could-not-resolve-page-name=Unable to resolve page '%s' to a component class name.  Available page names: %s.
+could-not-resolve-page-name=Unable to resolve page '%s' to a component class name.  Available page names: %s.
+could-not-canonicalize-page-name=Unable to resolve page '%s' to a known page name. Available page names: %s.
 could-not-resolve-component-type=Unable to resolve component type '%s' to a component class name.  Available component types: %s.
 could-not-resolve-mixin-type=Unable to resolve mixin type '%s' to a component class name.  Available mixin types: %s.
 parameter-name-must-be-unique=Parameter names are required to be unique.  Parameter '%s' already has the value '%s'.

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java Fri Jun 15 17:36:40 2007
@@ -106,7 +106,7 @@
         open(BASE_URL);
         clickAndWait("link=ParameterDefault");
 
-        assertTextPresent("Echo component default: [org.apache.tapestry.integration.app1.pages.ParameterDefault:echo]");
+        assertTextPresent("Echo component default: [ParameterDefault:echo]");
     }
 
     @Test
@@ -174,7 +174,7 @@
 
         // And exception message:
 
-        assertTextPresent("Component org.apache.tapestry.integration.app1.pages.InjectComponentMismatch is not assignable to field org.apache.tapestry.corelib.mixins.RenderDisabled._field (of type org.apache.tapestry.Field).");
+        assertTextPresent("Component InjectComponentMismatch is not assignable to field org.apache.tapestry.corelib.mixins.RenderDisabled._field (of type org.apache.tapestry.Field).");
     }
 
     @Test
@@ -188,7 +188,7 @@
         assertTextPresent("<Proxy for Request(org.apache.tapestry.services.Request)>");
 
         // This is a test for an annonymous @Inject and ComponentResourcesInjectionProvider
-        assertTextPresent("ComponentResources[org.apache.tapestry.integration.app1.pages.InjectDemo]");
+        assertTextPresent("ComponentResources[InjectDemo]");
 
         // Another test, DefaultInjectionProvider
         assertTextPresent("<Proxy for BindingSource(org.apache.tapestry.services.BindingSource)>");
@@ -655,7 +655,9 @@
 
         clickAndWait("link=Rating");
 
-        assertText("//img[@id='rating:sort']/@src", "/assets/tapestry/corelib/components/sort-asc.png");
+        assertText(
+                "//img[@id='rating:sort']/@src",
+                "/assets/tapestry/corelib/components/sort-asc.png");
         assertText("//img[@id='rating:sort']/@alt", "[Asc]");
 
         assertTextSeries(
@@ -672,14 +674,18 @@
 
         clickAndWait("link=Rating");
 
-        assertText("//img[@id='rating:sort']/@src", "/assets/tapestry/corelib/components/sort-desc.png");
+        assertText(
+                "//img[@id='rating:sort']/@src",
+                "/assets/tapestry/corelib/components/sort-desc.png");
         assertText("//img[@id='rating:sort']/@alt", "[Desc]");
 
         assertTextSeries("//tr[1]/td[%d]", 1, "Hey Blondie", "Out from Out Where");
 
         clickAndWait("link=Title");
 
-        assertText("//img[@id='title:sort']/@src", "/assets/tapestry/corelib/components/sort-asc.png");
+        assertText(
+                "//img[@id='title:sort']/@src",
+                "/assets/tapestry/corelib/components/sort-asc.png");
         assertText("//img[@id='title:sort']/@alt", "[Asc]");
 
         clickAndWait("link=1");
@@ -935,14 +941,14 @@
         addSelection("languages:avail", "label=Ruby");
 
         click("languages:select");
-        
+
         clickAndWait("//input[@type='submit']");
-        
+
         assertTextPresent("[ERLANG, HASKELL, JAVA, LISP, ML, PERL, PYTHON, RUBY]");
-  
+
         check("reorder");
         clickAndWait("//input[@type='submit']");
-        
+
         addSelection("languages", "label=Ruby");
 
         for (int i = 0; i < 6; i++)
@@ -952,14 +958,15 @@
         addSelection("languages", "label=Perl");
 
         click("languages:down");
-        
+
         clickAndWait("//input[@type='submit']");
 
         assertTextPresent("[ERLANG, RUBY, HASKELL, JAVA, LISP, ML, PYTHON, PERL]");
     }
 
     @Test
-    public void event_handler_return_types() {
+    public void event_handler_return_types()
+    {
 
         open(BASE_URL);
         assertTextPresent("Tapestry 5 Integration Application 1");
@@ -1000,6 +1007,18 @@
                 "An unexpected application exception has occurred.",
                 "An event handler for component org.apache.tapestry.integration.app1.pages.Start returned the value 20 (from method org.apache.tapestry.integration.app1.pages.Start.onActionFromBadReturnType() (at Start.java:34)). Return type java.lang.Integer can not be handled.");
 
+    }
+
+    @Test
+    public void access_to_page_name()
+    {
+        open(BASE_URL);
+
+        assertTextPresent("Currently on page: Start");
+
+        clickAndWait("link=Grid Demo");
+
+        assertTextPresent("Currently on page: GridDemo");
     }
 
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentClassResolverImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentClassResolverImplTest.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentClassResolverImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentClassResolverImplTest.java Fri Jun 15 17:36:40 2007
@@ -68,6 +68,28 @@
     }
 
     @Test
+    public void canonicalize_existing_page_name()
+    {
+        ComponentInstantiatorSource source = mockComponentInstantiatorSource();
+        ClassNameLocator locator = newClassNameLocator();
+
+        train_for_app_packages(source);
+
+        String className = APP_ROOT_PACKAGE + ".pages.SimplePage";
+
+        train_locateComponentClassNames(locator, APP_ROOT_PACKAGE + ".pages", className);
+
+        replay();
+
+        ComponentClassResolver resolver = create(source, locator);
+
+        assertEquals(resolver.canonicalizePageName("simplepage"), "SimplePage");
+
+        verify();
+
+    }
+
+    @Test
     public void page_name_in_subfolder()
     {
         ComponentInstantiatorSource source = mockComponentInstantiatorSource();
@@ -420,6 +442,39 @@
     }
 
     @Test
+    public void page_name_to_canonicalize_does_not_exist()
+    {
+
+        ComponentInstantiatorSource source = mockComponentInstantiatorSource();
+        ClassNameLocator locator = newClassNameLocator();
+
+        train_for_packages(source, CORE_ROOT_PACKAGE);
+        train_for_app_packages(source);
+
+        train_locateComponentClassNames(locator, APP_ROOT_PACKAGE + ".pages", APP_ROOT_PACKAGE
+                + ".pages.Start");
+
+        replay();
+
+        ComponentClassResolver resolver = create(source, locator, new LibraryMapping(CORE_PREFIX,
+                CORE_ROOT_PACKAGE));
+
+        try
+        {
+            resolver.canonicalizePageName("MissingPage");
+            unreachable();
+        }
+        catch (IllegalArgumentException ex)
+        {
+            assertEquals(
+                    ex.getMessage(),
+                    "Unable to resolve page \'MissingPage\' to a known page name. Available page names: Start.");
+        }
+
+        verify();
+    }
+
+    @Test
     public void class_name_not_in_a_pages_package()
     {
         ComponentInstantiatorSource source = mockComponentInstantiatorSource();
@@ -629,7 +684,6 @@
         }
 
         verify();
-
     }
 
     private void train_for_app_packages(ComponentInstantiatorSource source)

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentInstanceResultProcessorTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentInstanceResultProcessorTest.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentInstanceResultProcessorTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentInstanceResultProcessorTest.java Fri Jun 15 17:36:40 2007
@@ -26,7 +26,7 @@
 
 public class ComponentInstanceResultProcessorTest extends InternalBaseTestCase
 {
-    private static final String PAGE_NAME = "foo.bar.Zoop";
+    private static final String PAGE_NAME = "Zoop";
 
     private static final String METHOD_DESCRIPTION = "foo.bar.Baz.biff()";
 
@@ -48,8 +48,8 @@
         train_getComponentResources(result, resources);
         train_getContainer(resources, null);
 
-        train_getCompleteId(resources, PAGE_NAME);
-        train_getByClassName(cache, PAGE_NAME, page);
+        train_getPageName(resources, PAGE_NAME);
+        train_get(cache, PAGE_NAME, page);
 
         train_createPageLink(factory, page, link);
         train_toRedirectURI(link, LINK_URI);
@@ -70,12 +70,12 @@
     @Test
     public void warning_for_component_is_not_root_component() throws Exception
     {
-        Component child = mockComponent();
+        Component value = mockComponent();
         Component source = mockComponent();
         Component root = mockComponent();
-        Component container = mockComponent();
+        Component containerResources = mockComponent();
         ComponentResources rootResources = mockComponentResources();
-        ComponentResources childResources = mockComponentResources();
+        ComponentResources valueResources = mockComponentResources();
         ComponentResources sourceResources = mockComponentResources();
         Log log = mockLog();
         RequestPageCache cache = mockRequestPageCache();
@@ -84,23 +84,19 @@
         Response response = mockResponse();
         Link link = mockLink();
 
-        train_getComponentResources(child, childResources);
-
-        train_getContainer(childResources, container);
+        train_getComponentResources(value, valueResources);
 
+        train_getContainer(valueResources, containerResources);
         train_getComponentResources(source, sourceResources);
 
         train_getCompleteId(sourceResources, PAGE_NAME + ":source");
-        train_getCompleteId(childResources, PAGE_NAME + ":child");
-
-        train_getPage(childResources, root);
-        train_getComponentResources(root, rootResources);
-
-        train_getCompleteId(rootResources, PAGE_NAME);
-        train_getByClassName(cache, PAGE_NAME, page);
+        train_getCompleteId(valueResources, PAGE_NAME + ":child");
 
         log
-                .warn("Method foo.bar.Baz.biff() (for component foo.bar.Zoop:source) returned component foo.bar.Zoop:child, which is not a page component. The page containing the component will render the client response.");
+                .warn("Method foo.bar.Baz.biff() (for component Zoop:source) returned component Zoop:child, which is not a page component. The page containing the component will render the client response.");
+
+        train_getPageName(valueResources, PAGE_NAME);
+        train_get(cache, PAGE_NAME, page);
 
         train_createPageLink(factory, page, link);
         train_toRedirectURI(link, LINK_URI);
@@ -112,7 +108,7 @@
         ComponentEventResultProcessor<Component> processor = new ComponentInstanceResultProcessor(
                 cache, factory, log);
 
-        processor.processComponentEvent(child, source, METHOD_DESCRIPTION).sendClientResponse(
+        processor.processComponentEvent(value, source, METHOD_DESCRIPTION).sendClientResponse(
                 response);
 
         verify();

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentSourceImplTest.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentSourceImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentSourceImplTest.java Fri Jun 15 17:36:40 2007
@@ -14,7 +14,6 @@
 
 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;
@@ -24,7 +23,7 @@
 
 public class ComponentSourceImplTest extends InternalBaseTestCase
 {
-    private static final String PAGE_NAME = "foo.pages.Bar";
+    private static final String PAGE_NAME = "Bar";
 
     private static final String NESTED_ELEMENT_ID = "zip.zoom";
 
@@ -35,7 +34,7 @@
         Page page = mockPage();
         Component component = mockComponent();
 
-        train_getByClassName(cache, PAGE_NAME, page);
+        train_get(cache, PAGE_NAME, page);
 
         train_getRootComponent(page, component);
 
@@ -56,7 +55,7 @@
         ComponentPageElement element = mockComponentPageElement();
         Component component = mockComponent();
 
-        train_getByClassName(cache, PAGE_NAME, page);
+        train_get(cache, PAGE_NAME, page);
 
         train_getComponentElementByNestedId(page, NESTED_ELEMENT_ID, element);
 
@@ -92,21 +91,6 @@
 
     @Test
     public void get_page_by_class()
-    {
-        RequestPageCache cache = mockRequestPageCache();
-        Page page = mockPage();
-        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/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/LinkFactoryImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/LinkFactoryImplTest.java?view=diff&rev=547839&r1=547838&r2=547839
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/LinkFactoryImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/LinkFactoryImplTest.java Fri Jun 15 17:36:40 2007
@@ -42,8 +42,6 @@
 
     private static final String PAGE_LOGICAL_NAME = "sub/MyPage";
 
-    private static final String PAGE_CLASS_NAME = "foo.pages.sub.MyPage";
-
     private TypeCoercer _typeCoercer;
 
     @BeforeClass
@@ -62,7 +60,6 @@
     public void action_link_root_context_no_ids()
     {
         testActionLink(
-                PAGE_CLASS_NAME,
                 "",
                 PAGE_LOGICAL_NAME,
                 "foo.bar",
@@ -75,7 +72,6 @@
     public void action_link_root_context_with_ids()
     {
         testActionLink(
-                PAGE_CLASS_NAME,
                 "",
                 PAGE_LOGICAL_NAME,
                 "foo.bar",
@@ -89,7 +85,6 @@
     public void action_link_with_default_action()
     {
         testActionLink(
-                PAGE_CLASS_NAME,
                 "",
                 PAGE_LOGICAL_NAME,
                 "foo.bar",
@@ -103,7 +98,6 @@
     public void page_level_event_always_includes_action()
     {
         testActionLink(
-                PAGE_CLASS_NAME,
                 "",
                 PAGE_LOGICAL_NAME,
                 "",
@@ -117,7 +111,6 @@
     public void action_link_named_context_no_ids()
     {
         testActionLink(
-                PAGE_CLASS_NAME,
                 "/fred",
                 PAGE_LOGICAL_NAME,
                 "foo.bar",
@@ -137,8 +130,7 @@
         LinkFactoryListener listener = mockLinkFactoryListener();
         ComponentInvocationMap map = mockComponentInvocationMap();
 
-        train_getName(page, PAGE_CLASS_NAME);
-        train_resolvePageClassNameToPageName(resolver, PAGE_CLASS_NAME, PAGE_LOGICAL_NAME);
+        train_getLogicalName(page, PAGE_LOGICAL_NAME);
         train_getContextPath(request, "/barney");
 
         train_getRootElement(page, rootElement);
@@ -184,8 +176,7 @@
         LinkFactoryListener listener = mockLinkFactoryListener();
         ComponentInvocationMap map = mockComponentInvocationMap();
 
-        train_getName(page, PAGE_CLASS_NAME);
-        train_resolvePageClassNameToPageName(resolver, PAGE_CLASS_NAME, PAGE_LOGICAL_NAME);
+        train_getLogicalName(page, PAGE_LOGICAL_NAME);
         train_getContextPath(request, "/barney");
 
         Holder<Link> holder = new Holder<Link>();
@@ -233,8 +224,7 @@
 
         train_get(cache, PAGE_LOGICAL_NAME, page);
 
-        train_getName(page, PAGE_CLASS_NAME);
-        train_resolvePageClassNameToPageName(resolver, PAGE_CLASS_NAME, PAGE_LOGICAL_NAME);
+        train_getLogicalName(page, PAGE_LOGICAL_NAME);
         train_getContextPath(request, "/barney");
 
         train_getRootElement(page, rootElement);
@@ -346,8 +336,8 @@
     }
 
     @SuppressWarnings("unchecked")
-    private void testActionLink(String pageClassName, String contextPath, String logicalPageName,
-            String nestedId, String eventName, String expectedURI, Object... context)
+    private void testActionLink(String contextPath, String logicalPageName, String nestedId,
+            String eventName, String expectedURI, Object... context)
     {
         Request request = mockRequest();
         Response response = mockResponse();
@@ -362,8 +352,7 @@
         final Holder<Link> holder = new Holder<Link>();
 
         train_getContainingPage(element, page);
-        train_getName(page, pageClassName);
-        train_resolvePageClassNameToPageName(resolver, pageClassName, logicalPageName);
+        train_getLogicalName(page, logicalPageName);
         train_getContextPath(request, contextPath);
         train_getNestedId(element, nestedId);