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 2008/02/12 02:04:21 UTC

svn commit: r620682 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry/internal/services/ComponentClassResolverImpl.java test/java/org/apache/tapestry/internal/services/ComponentClassResolverImplTest.java

Author: hlship
Date: Mon Feb 11 17:04:20 2008
New Revision: 620682

URL: http://svn.apache.org/viewvc?rev=620682&view=rev
Log:
TAPESTRY-2149: Tapestry should allow the pages and components to be referenced by their "unstripped" names as well

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ComponentClassResolverImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentClassResolverImplTest.java

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?rev=620682&r1=620681&r2=620682&view=diff
==============================================================================
--- 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 Mon Feb 11 17:04:20 2008
@@ -89,6 +89,7 @@
     private static final Pattern SPLIT_PACKAGE_PATTERN = Pattern.compile("\\.");
 
     private static final Pattern SPLIT_FOLDER_PATTERN = Pattern.compile("/");
+    private static final int LOGICAL_NAME_BUFFER_SIZE = 40;
 
     public ComponentClassResolverImpl(Logger logger,
 
@@ -285,15 +286,18 @@
 
         for (String name : classNames)
         {
-            String logicalName = toLogicalName(name, pathPrefix, startPos);
+            String logicalName = toLogicalName(name, pathPrefix, startPos, true);
+            String unstrippedName = toLogicalName(name, pathPrefix, startPos, false);
 
             if (isPage)
             {
                 _pageClassNameToLogicalName.put(name, logicalName);
                 _pageNameToCanonicalPageName.put(logicalName, logicalName);
+                _pageNameToCanonicalPageName.put(unstrippedName, logicalName);
             }
 
             logicalNameToClassName.put(logicalName, name);
+            logicalNameToClassName.put(unstrippedName, name);
         }
     }
 
@@ -306,9 +310,10 @@
      *                   lives)
      * @param startPos   start position within the class name to extract the logical name (i.e., after the final '.' in
      *                   "rootpackage.pages.").
+     * @param stripTerms
      * @return a short logical name in folder format ('.' replaced with '/')
      */
-    private String toLogicalName(String className, String pathPrefix, int startPos)
+    private String toLogicalName(String className, String pathPrefix, int startPos, boolean stripTerms)
     {
         List<String> terms = CollectionFactory.newList();
 
@@ -316,7 +321,7 @@
 
         addAll(terms, SPLIT_PACKAGE_PATTERN, className.substring(startPos));
 
-        StringBuilder builder = new StringBuilder();
+        StringBuilder builder = new StringBuilder(LOGICAL_NAME_BUFFER_SIZE);
         String sep = "";
 
         String logicalName = terms.remove(terms.size() - 1);
@@ -330,7 +335,7 @@
 
             sep = "/";
 
-            logicalName = stripTerm(term, logicalName);
+            if (stripTerms) logicalName = stripTerm(term, logicalName);
         }
 
         if (logicalName.equals("")) logicalName = unstripped;

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?rev=620682&r1=620681&r2=620682&view=diff
==============================================================================
--- 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 Mon Feb 11 17:04:20 2008
@@ -169,6 +169,7 @@
         ComponentClassResolver resolver = create(logger, source, locator);
 
         assertEquals(resolver.resolvePageNameToClassName("admin/edit/User"), className);
+        assertEquals(resolver.resolvePageNameToClassName("admin/edit/AdminUserEdit"), className);
 
         verify();
     }
@@ -547,6 +548,7 @@
                                                  new LibraryMapping(CORE_PREFIX, CORE_ROOT_PACKAGE));
 
         assertEquals(resolver.resolvePageNameToClassName("lib/deep/Page"), className);
+        assertEquals(resolver.resolvePageNameToClassName("lib/deep/LibDeepPage"), className);
 
         verify();
     }