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());
}
}