Author: aadamchik
Date: Wed Nov 25 11:23:31 2009
New Revision: 884055

URL: http://svn.apache.org/viewvc?rev=884055&view=rev
Log:
setup Cayenne stack based on DI

- defining resource service - the basis of the new configuration

Added:
    
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/
    
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/ClassLoaderResourceLocator.java
    
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/Resource.java
      - copied, changed from r883008, 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java
    
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/ResourceLocator.java
      - copied, changed from r883008, 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java
    
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/URLResource.java
      - copied, changed from r883008, 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java
    
cayenne/sandbox/cayenne-di/src/test/java/org/apache/cayenne/runtime/resource/
    
cayenne/sandbox/cayenne-di/src/test/java/org/apache/cayenne/runtime/resource/ClassLoaderResourceLocatorTest.java
      - copied, changed from r883008, 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java
    
cayenne/sandbox/cayenne-di/src/test/java/org/apache/cayenne/runtime/resource/URLResourceTest.java
      - copied, changed from r883008, 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java
Modified:
    
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java
    
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/CayenneModule.java

Modified: 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java
URL: 
http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java?rev=884055&r1=884054&r2=884055&view=diff
==============================================================================
--- 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java 
(original)
+++ 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java 
Wed Nov 25 11:23:31 2009
@@ -26,18 +26,19 @@
 public class DIException extends CayenneRuntimeException {
 
     public DIException() {
+        super();
+    }
 
+    public DIException(String messageFormat, Object... messageArgs) {
+        super(messageFormat, messageArgs);
     }
 
-    public DIException(String messageFormat, Object... args) {
-        super(String.format(messageFormat, args));
+    public DIException(String messageFormat, Throwable cause, Object... 
messageArgs) {
+        super(messageFormat, cause, messageArgs);
     }
 
     public DIException(Throwable cause) {
         super(cause);
     }
 
-    public DIException(String messageFormat, Throwable cause, Object... args) {
-        super(String.format(messageFormat, args), cause);
-    }
 }

Modified: 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/CayenneModule.java
URL: 
http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/CayenneModule.java?rev=884055&r1=884054&r2=884055&view=diff
==============================================================================
--- 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/CayenneModule.java
 (original)
+++ 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/CayenneModule.java
 Wed Nov 25 11:23:31 2009
@@ -22,6 +22,8 @@
 import org.apache.cayenne.di.Binder;
 import org.apache.cayenne.di.Module;
 import org.apache.cayenne.di.Scopes;
+import org.apache.cayenne.runtime.resource.ClassLoaderResourceLocator;
+import org.apache.cayenne.runtime.resource.ResourceLocator;
 import org.apache.cayenne.runtime.spi.DataChannelProvider;
 
 /**
@@ -32,6 +34,10 @@
 public class CayenneModule implements Module {
 
     public void configure(Binder binder) {
+
+        
binder.bind(ResourceLocator.class).to(ClassLoaderResourceLocator.class);
+
+        // TODO: bogus impl
         
binder.bind(DataChannel.class).toProvider(DataChannelProvider.class).in(
                 Scopes.SINGLETON);
     }

Added: 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/ClassLoaderResourceLocator.java
URL: 
http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/ClassLoaderResourceLocator.java?rev=884055&view=auto
==============================================================================
--- 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/ClassLoaderResourceLocator.java
 (added)
+++ 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/ClassLoaderResourceLocator.java
 Wed Nov 25 11:23:31 2009
@@ -0,0 +1,60 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.cayenne.runtime.resource;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
+
+import org.apache.cayenne.ConfigurationException;
+
+/**
+ * A {...@link ResourceLocator} that looks up resources is the application 
classpath based on
+ * the current thread ClassLoader.
+ * 
+ * @since 3.1
+ */
+public class ClassLoaderResourceLocator implements ResourceLocator {
+
+    public Collection<Resource> findResources(String name) {
+
+        Collection<Resource> resources = new ArrayList<Resource>(3);
+
+        Enumeration<URL> urls;
+        try {
+            urls = getClassLoader().getResources(name);
+
+        }
+        catch (IOException e) {
+            throw new ConfigurationException("Error getting resources for ");
+        }
+
+        while (urls.hasMoreElements()) {
+            resources.add(new URLResource(urls.nextElement()));
+        }
+
+        return resources;
+    }
+
+    protected ClassLoader getClassLoader() {
+        return Thread.currentThread().getContextClassLoader();
+    }
+}

Copied: 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/Resource.java
 (from r883008, 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java)
URL: 
http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/Resource.java?p2=cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/Resource.java&p1=cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java&r1=883008&r2=884055&rev=884055&view=diff
==============================================================================
--- 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java 
(original)
+++ 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/Resource.java
 Wed Nov 25 11:23:31 2009
@@ -16,28 +16,25 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-package org.apache.cayenne.di;
+package org.apache.cayenne.runtime.resource;
 
-import org.apache.cayenne.CayenneRuntimeException;
+import java.net.URL;
 
 /**
+ * An abstraction of a resource whose data can be accessed via a URL.
+ * 
  * @since 3.1
  */
-public class DIException extends CayenneRuntimeException {
+public interface Resource {
 
-    public DIException() {
-
-    }
-
-    public DIException(String messageFormat, Object... args) {
-        super(String.format(messageFormat, args));
-    }
-
-    public DIException(Throwable cause) {
-        super(cause);
-    }
-
-    public DIException(String messageFormat, Throwable cause, Object... args) {
-        super(String.format(messageFormat, args), cause);
-    }
+    /**
+     * Returns a resource URL to read (and possibly write) the resource data.
+     */
+    URL getURL();
+
+    /**
+     * Returns a resource resolved relatively to the current resource. E.g. 
DataMap files
+     * can be resolved relatively to cayenne.xml.
+     */
+    Resource getRelativeResource(String relativePath);
 }

Copied: 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/ResourceLocator.java
 (from r883008, 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java)
URL: 
http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/ResourceLocator.java?p2=cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/ResourceLocator.java&p1=cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java&r1=883008&r2=884055&rev=884055&view=diff
==============================================================================
--- 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java 
(original)
+++ 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/ResourceLocator.java
 Wed Nov 25 11:23:31 2009
@@ -16,28 +16,19 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-package org.apache.cayenne.di;
+package org.apache.cayenne.runtime.resource;
 
-import org.apache.cayenne.CayenneRuntimeException;
+import java.util.Collection;
 
 /**
  * @since 3.1
  */
-public class DIException extends CayenneRuntimeException {
+public interface ResourceLocator {
 
-    public DIException() {
+    /**
+     * Finds a collection of matching resources for a given name. The name 
components must
+     * be separated by forward slashes.
+     */
+    Collection<Resource> findResources(String name);
 
-    }
-
-    public DIException(String messageFormat, Object... args) {
-        super(String.format(messageFormat, args));
-    }
-
-    public DIException(Throwable cause) {
-        super(cause);
-    }
-
-    public DIException(String messageFormat, Throwable cause, Object... args) {
-        super(String.format(messageFormat, args), cause);
-    }
 }

Copied: 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/URLResource.java
 (from r883008, 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java)
URL: 
http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/URLResource.java?p2=cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/URLResource.java&p1=cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java&r1=883008&r2=884055&rev=884055&view=diff
==============================================================================
--- 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java 
(original)
+++ 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/runtime/resource/URLResource.java
 Wed Nov 25 11:23:31 2009
@@ -16,28 +16,39 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-package org.apache.cayenne.di;
+package org.apache.cayenne.runtime.resource;
+
+import java.net.MalformedURLException;
+import java.net.URL;
 
 import org.apache.cayenne.CayenneRuntimeException;
 
 /**
  * @since 3.1
  */
-public class DIException extends CayenneRuntimeException {
+class URLResource implements Resource {
 
-    public DIException() {
+    private URL url;
 
+    URLResource(URL url) {
+        this.url = url;
     }
 
-    public DIException(String messageFormat, Object... args) {
-        super(String.format(messageFormat, args));
+    public Resource getRelativeResource(String relativePath) {
+        try {
+            return new URLResource(new URL(url, relativePath));
+        }
+        catch (MalformedURLException e) {
+            throw new CayenneRuntimeException(
+                    "Error creating relative resource '%s' : '%s'",
+                    e,
+                    url,
+                    relativePath);
+        }
     }
 
-    public DIException(Throwable cause) {
-        super(cause);
+    public URL getURL() {
+        return url;
     }
 
-    public DIException(String messageFormat, Throwable cause, Object... args) {
-        super(String.format(messageFormat, args), cause);
-    }
 }

Copied: 
cayenne/sandbox/cayenne-di/src/test/java/org/apache/cayenne/runtime/resource/ClassLoaderResourceLocatorTest.java
 (from r883008, 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java)
URL: 
http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-di/src/test/java/org/apache/cayenne/runtime/resource/ClassLoaderResourceLocatorTest.java?p2=cayenne/sandbox/cayenne-di/src/test/java/org/apache/cayenne/runtime/resource/ClassLoaderResourceLocatorTest.java&p1=cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java&r1=883008&r2=884055&rev=884055&view=diff
==============================================================================
--- 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java 
(original)
+++ 
cayenne/sandbox/cayenne-di/src/test/java/org/apache/cayenne/runtime/resource/ClassLoaderResourceLocatorTest.java
 Wed Nov 25 11:23:31 2009
@@ -16,28 +16,31 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-package org.apache.cayenne.di;
+package org.apache.cayenne.runtime.resource;
 
-import org.apache.cayenne.CayenneRuntimeException;
+import java.util.Collection;
 
-/**
- * @since 3.1
- */
-public class DIException extends CayenneRuntimeException {
+import junit.framework.TestCase;
 
-    public DIException() {
+public class ClassLoaderResourceLocatorTest extends TestCase {
 
-    }
+    public void testFindResources() {
+        ClassLoaderResourceLocator locator = new ClassLoaderResourceLocator();
 
-    public DIException(String messageFormat, Object... args) {
-        super(String.format(messageFormat, args));
-    }
+        Collection<Resource> resources = locator
+                
.findResources("org/apache/cayenne/runtime/resource/ClassLoaderResourceLocatorTest.class");
 
-    public DIException(Throwable cause) {
-        super(cause);
-    }
+        assertNotNull(resources);
+        assertEquals(1, resources.size());
+
+        Resource resource = resources.iterator().next();
+        assertNotNull(resource);
 
-    public DIException(String messageFormat, Throwable cause, Object... args) {
-        super(String.format(messageFormat, args), cause);
+        assertNotNull(resource.getURL());
+        assertTrue(resource
+                .getURL()
+                .toExternalForm()
+                .endsWith(
+                        
"org/apache/cayenne/runtime/resource/ClassLoaderResourceLocatorTest.class"));
     }
 }

Copied: 
cayenne/sandbox/cayenne-di/src/test/java/org/apache/cayenne/runtime/resource/URLResourceTest.java
 (from r883008, 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java)
URL: 
http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-di/src/test/java/org/apache/cayenne/runtime/resource/URLResourceTest.java?p2=cayenne/sandbox/cayenne-di/src/test/java/org/apache/cayenne/runtime/resource/URLResourceTest.java&p1=cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java&r1=883008&r2=884055&rev=884055&view=diff
==============================================================================
--- 
cayenne/sandbox/cayenne-di/src/main/java/org/apache/cayenne/di/DIException.java 
(original)
+++ 
cayenne/sandbox/cayenne-di/src/test/java/org/apache/cayenne/runtime/resource/URLResourceTest.java
 Wed Nov 25 11:23:31 2009
@@ -16,28 +16,28 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-package org.apache.cayenne.di;
+package org.apache.cayenne.runtime.resource;
 
-import org.apache.cayenne.CayenneRuntimeException;
+import java.net.URL;
 
-/**
- * @since 3.1
- */
-public class DIException extends CayenneRuntimeException {
+import junit.framework.TestCase;
 
-    public DIException() {
+public class URLResourceTest extends TestCase {
 
+    public void testURL() throws Exception {
+        URL url = new URL("http://cayenne.apache.org";);
+        URLResource resource = new URLResource(url);
+        assertSame(url, resource.getURL());
     }
 
-    public DIException(String messageFormat, Object... args) {
-        super(String.format(messageFormat, args));
-    }
-
-    public DIException(Throwable cause) {
-        super(cause);
-    }
-
-    public DIException(String messageFormat, Throwable cause, Object... args) {
-        super(String.format(messageFormat, args), cause);
+    public void testGetRelativeResource() throws Exception {
+        URL url = new URL("http://cayenne.apache.org";);
+        URLResource resource = new URLResource(url);
+        Resource relativeResource = resource.getRelativeResource("/docs");
+
+        assertNotNull(relativeResource);
+        assertEquals("http://cayenne.apache.org/docs";, relativeResource
+                .getURL()
+                .toExternalForm());
     }
 }


Reply via email to