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 2010/04/19 15:50:39 UTC

svn commit: r935569 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/services/ main/java/org/apache/tapestry5/services/ test/java/org/apache/tapestry5/internal/services/ test/java/org/apache/tapestry5/services/

Author: hlship
Date: Mon Apr 19 13:50:39 2010
New Revision: 935569

URL: http://svn.apache.org/viewvc?rev=935569&view=rev
Log:
Forbid slashes from library mapping virtual folders or classpath asset alias folders (now, approximately, the same thing)

Added:
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/services/LibraryMappingTest.java   (with props)
Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/LibraryMapping.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImpl.java?rev=935569&r1=935568&r2=935569&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImpl.java Mon Apr 19 13:50:39 2010
@@ -46,9 +46,6 @@ public class ClasspathAssetAliasManagerI
     /**
      * Configuration is a map of aliases (short names) to complete names. Keys and values should end with a slash, but
      * one will be provided as necessary, so don't both.
-     * 
-     * @param assetPathConstructor
-     *            TODO
      */
     public ClasspathAssetAliasManagerImpl(AssetPathConstructor assetPathConstructor,
 
@@ -59,6 +56,12 @@ public class ClasspathAssetAliasManagerI
         for (Map.Entry<String, String> e : configuration.entrySet())
         {
             String alias = withOutSlash(e.getKey());
+
+            if (alias.contains("/"))
+                throw new RuntimeException(String.format(
+                        "Virtual folder names (for component libraries) may no longer contain slashes as of Tapestry 5.2. "
+                                + "You must change the ComponentClassAsssetAliasManager contribution for '%s'.", alias));
+
             String path = withOutSlash(e.getValue());
 
             aliasToPathPrefix.put(alias, path);

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/LibraryMapping.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/LibraryMapping.java?rev=935569&r1=935568&r2=935569&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/LibraryMapping.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/LibraryMapping.java Mon Apr 19 13:50:39 2010
@@ -14,11 +14,12 @@
 
 package org.apache.tapestry5.services;
 
+import org.apache.tapestry5.ioc.internal.util.Defense;
+
 /**
  * Used to configure the {@link ComponentClassResolver}, to allow it to map prefixes to library root packages (the
- * application namespace is a special case of this). In each case, a prefix on the path is mapped to a package. Prefixes
- * should start and end with characters, such as "corelib". It is allowed for a prefix to contain a slash, though it is not
- * recommended.
+ * application namespace is a special case of this). In each case, a prefix on the path is mapped to a package. Starting
+ * with Tapestry 5.2, the path prefix may not contain a slash character.
  * <p/>
  * The root package name should have a number of sub-packages:
  * <dl>
@@ -40,6 +41,13 @@ public final class LibraryMapping
 
     public LibraryMapping(String pathPrefix, String rootPackage)
     {
+        Defense.notBlank(pathPrefix, "pathPrefix");
+        Defense.notBlank(rootPackage, "rootPackage");
+
+        if (pathPrefix.contains("/"))
+            throw new RuntimeException(
+                    "LibraryMapping path prefixes may no longer contain slashes (as of Tapestry 5.2).");
+
         this.pathPrefix = pathPrefix;
         this.rootPackage = rootPackage;
     }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java?rev=935569&r1=935568&r2=935569&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java Mon Apr 19 13:50:39 2010
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2009 The Apache Software Foundation
+// Copyright 2006, 2007, 2009, 2010 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.
@@ -34,14 +34,32 @@ public class ClasspathAssetAliasManagerI
     {
         Map<String, String> configuration = CollectionFactory.newMap();
 
-        configuration.put("tapestry/4.0", "org/apache/tapestry5/");
-        configuration.put("tapestry-internal/3.0", "org/apache/tapestry5/internal/");
-        configuration.put("mylib/2.0/", "com/example/mylib/");
+        configuration.put("tapestry", "org/apache/tapestry5/");
+        configuration.put("tapestry-internal", "org/apache/tapestry5/internal/");
+        configuration.put("mylib/", "com/example/mylib/");
 
         return configuration;
     }
 
     @Test
+    public void slash_not_allowed_as_alias()
+    {
+        Map<String, String> configuration = CollectionFactory.newMap();
+
+        configuration.put("old/style", "com/myco/old/style/library");
+
+        try
+        {
+            new ClasspathAssetAliasManagerImpl(null, configuration);
+            unreachable();
+        }
+        catch (RuntimeException ex)
+        {
+            assertMessageContains(ex, "change the ComponentClassAsssetAliasManager contribution for 'old/style'.");
+        }
+    }
+
+    @Test
     public void get_mappings()
     {
         // Notice how all the trailing slashes (which are tolerated but not wanted)
@@ -49,9 +67,9 @@ public class ClasspathAssetAliasManagerI
 
         Map<String, String> expected = CollectionFactory.newCaseInsensitiveMap();
 
-        expected.put("tapestry/4.0", "org/apache/tapestry5");
-        expected.put("tapestry-internal/3.0", "org/apache/tapestry5/internal");
-        expected.put("mylib/2.0", "com/example/mylib");
+        expected.put("tapestry", "org/apache/tapestry5");
+        expected.put("tapestry-internal", "org/apache/tapestry5/internal");
+        expected.put("mylib", "com/example/mylib");
 
         ClasspathAssetAliasManager manager = new ClasspathAssetAliasManagerImpl(null, configuration());
 
@@ -100,10 +118,10 @@ public class ClasspathAssetAliasManagerI
     {
         return new Object[][]
         {
-        { "com/example/mylib/Foo.bar", "mylib/2.0/Foo.bar" },
-        { "com/example/mylib/nested/Foo.bar", "mylib/2.0/nested/Foo.bar" },
-        { "org/apache/tapestry5/internal/Foo.bar", "tapestry-internal/3.0/Foo.bar" },
-        { "org/apache/tapestry5/Foo.bar", "tapestry/4.0/Foo.bar" }, };
+        { "com/example/mylib/Foo.bar", "mylib/Foo.bar" },
+        { "com/example/mylib/nested/Foo.bar", "mylib/nested/Foo.bar" },
+        { "org/apache/tapestry5/internal/Foo.bar", "tapestry-internal/Foo.bar" },
+        { "org/apache/tapestry5/Foo.bar", "tapestry/Foo.bar" }, };
     }
 
     @Test(dataProvider = "to_resource_path_data")

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/services/LibraryMappingTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/services/LibraryMappingTest.java?rev=935569&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/services/LibraryMappingTest.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/services/LibraryMappingTest.java Mon Apr 19 13:50:39 2010
@@ -0,0 +1,46 @@
+// Copyright 2010 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.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.services;
+
+import org.apache.tapestry5.ioc.test.TestBase;
+import org.testng.annotations.Test;
+
+public class LibraryMappingTest extends TestBase
+{
+    @Test
+    public void valid_mapping()
+    {
+        LibraryMapping lm = new LibraryMapping("folder", "root.package");
+
+        assertEquals(lm.getPathPrefix(), "folder");
+        assertEquals(lm.getRootPackage(), "root.package");
+
+        assertEquals(lm.toString(), "LibraryMapping[folder, root.package]");
+    }
+
+    @Test
+    public void invalid_mapping()
+    {
+        try
+        {
+            new LibraryMapping("lib/1.0", "root.package");
+            unreachable();
+        }
+        catch (RuntimeException ex)
+        {
+            assertMessageContains(ex, "may no longer contain slashes");
+        }
+    }
+}

Propchange: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/services/LibraryMappingTest.java
------------------------------------------------------------------------------
    svn:eol-style = native