You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2007/04/28 17:56:58 UTC

svn commit: r533371 - in /tapestry/tapestry4/trunk/tapestry-framework/src: java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java test/org/apache/tapestry/resolver/TestComponentSpecificationResolver.java

Author: jkuhnert
Date: Sat Apr 28 08:56:57 2007
New Revision: 533371

URL: http://svn.apache.org/viewvc?view=rev&rev=533371
Log:
Fixes TAPESTRY-1396. Set the default location of fabricated component spec files to be relative to the component class instead of the namespace.

Modified:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/resolver/TestComponentSpecificationResolver.java

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java?view=diff&rev=533371&r1=533370&r2=533371
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java Sat Apr 28 08:56:57 2007
@@ -16,9 +16,11 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.hivemind.ApplicationRuntimeException;
+import org.apache.hivemind.ClassResolver;
 import org.apache.hivemind.Location;
 import org.apache.hivemind.Resource;
 import org.apache.hivemind.impl.LocationImpl;
+import org.apache.hivemind.util.ClasspathResource;
 import org.apache.tapestry.INamespace;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.services.ClassFinder;
@@ -66,7 +68,9 @@
     private String _type;
 
     private ClassFinder _classFinder;
-    
+
+    private ClassResolver _classResolver;
+
     protected void reset()
     {
         _type = null;
@@ -237,16 +241,22 @@
         String className = type.replace('/', '.');
 
         Class componentClass = _classFinder.findClass(packages, className);
-
         if (componentClass == null)
             return null;
 
         IComponentSpecification spec = new ComponentSpecification();
 
         Resource namespaceResource = namespace.getSpecificationLocation();
-
         Resource componentResource = namespaceResource.getRelativeResource(type + ".jwc");
 
+        // try classpath relative if namespace relative doesn't resolve
+
+        if (componentResource.getResourceURL() == null) {
+            
+            Resource classResource = new ClasspathResource(_classResolver, componentClass.getName().replace('.', '/'));
+            componentResource = classResource.getRelativeResource(type + ".jwc");
+        }
+
         Location location = new LocationImpl(componentResource);
 
         spec.setLocation(location);
@@ -293,4 +303,8 @@
         _classFinder = classFinder;
     }
 
+    public void setClassResolver(ClassResolver classResolver)
+    {
+        _classResolver = classResolver;
+    }
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/resolver/TestComponentSpecificationResolver.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/resolver/TestComponentSpecificationResolver.java?view=diff&rev=533371&r1=533370&r2=533371
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/resolver/TestComponentSpecificationResolver.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/resolver/TestComponentSpecificationResolver.java Sat Apr 28 08:56:57 2007
@@ -14,10 +14,6 @@
 
 package org.apache.tapestry.resolver;
 
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.startsWith;
-
 import org.apache.commons.logging.Log;
 import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.hivemind.Location;
@@ -28,8 +24,11 @@
 import org.apache.tapestry.engine.ISpecificationSource;
 import org.apache.tapestry.services.ClassFinder;
 import org.apache.tapestry.spec.IComponentSpecification;
+import static org.easymock.EasyMock.*;
 import org.testng.annotations.Test;
 
+import java.net.URL;
+
 /**
  * Tests for {@link org.apache.tapestry.resolver.ComponentSpecificationResolverImpl}.
  * 
@@ -74,7 +73,7 @@
         return delegate;
     }
     
-    public void testNotFoundInAnyNamespace()
+    public void test_Not_Found_In_Any_Namespace()
     {
         IRequestCycle cycle = newCycle();
         Location l = newLocation();
@@ -102,7 +101,7 @@
         verify();
     }    
 
-    public void testFoundInNamespace()
+    public void test_Found_In_Namespace()
     {
         IRequestCycle cycle = newCycle();
         Location l = newLocation();
@@ -128,7 +127,7 @@
         verify();
     }
 
-    public void testDeprecated()
+    public void test_Deprecated()
     {
         IRequestCycle cycle = newCycle();
         Location l = newLocation();
@@ -145,7 +144,8 @@
         Log log = newMock(Log.class);
         
         log.warn(startsWith("Component 'MyComponent' ("));
-        // at classpath:/org/apache/tapestry/resolver/TestComponentSpecificationResolver, line 1) is deprecated, and will likely be removed in a later release. Consult its documentation to find a replacement component.");
+        // at classpath:/org/apache/tapestry/resolver/TestComponentSpecificationResolver, line 1) is deprecated, and will likely
+        // be removed in a later release. Consult its documentation to find a replacement component.");
         
         replay();
         
@@ -160,7 +160,7 @@
         verify();
     }
 
-    public void testFoundInChildNamespace()
+    public void test_Found_In_Child_Namespace()
     {
         IRequestCycle cycle = newCycle();
         Location l = newLocation();
@@ -189,7 +189,7 @@
         verify();
     }
 
-    public void testSearchFoundRelative()
+    public void test_Search_Found_Relative()
     {
         IRequestCycle cycle = newCycle();
         Location l = newLocation();
@@ -474,7 +474,7 @@
         verify();
     }
 
-    public void testFoundInWebInfFolder()
+    public void test_Found_In_Web_Inf_Folder()
     {
         IRequestCycle cycle = newCycle();
         Location l = newLocation();
@@ -529,7 +529,7 @@
         verify();
     }
 
-    public void testFoundInContextRoot()
+    public void test_Found_In_Context_Root()
     {
         IRequestCycle cycle = newCycle();
         Location l = newLocation();
@@ -592,7 +592,7 @@
         verify();
     }
 
-    public void testFoundComponentClass()
+    public void test_Found_Component_Class()
     {   
         INamespace namespace = newMock(INamespace.class);
 
@@ -604,14 +604,15 @@
         
         trainGetResource(namespace, namespaceResource);
 
+        URL componentUrl = this.getClass().getResource("MyComponent.jwc");
+        expect(componentResource.getResourceURL()).andReturn(componentUrl);
+
         replay();
 
         ComponentSpecificationResolverImpl resolver = new ComponentSpecificationResolverImpl();
         resolver.setClassFinder(finder);
 
-        IComponentSpecification spec = resolver.searchForComponentClass(
-                namespace,
-                "folder/MyComponent");
+        IComponentSpecification spec = resolver.searchForComponentClass(namespace, "folder/MyComponent");
 
         assertEquals(BaseComponent.class.getName(), spec.getComponentClassName());
         assertSame(componentResource, spec.getSpecificationLocation());