Author: davsclaus
Date: Sat Mar 14 15:53:11 2009
New Revision: 754465

URL: http://svn.apache.org/viewvc?rev=754465&view=rev
Log:
CAMEL-1458: Refinement to FactoryFinder to be able to easy config from spring 
XML.

Added:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinderResolver.java
   (with props)
Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultClassResolver.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ClassResolver.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinderResolver.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StringSourceTest.java
    
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=754465&r1=754464&r2=754465&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
 Sat Mar 14 15:53:11 2009
@@ -102,8 +102,8 @@
     private ErrorHandlerBuilder errorHandlerBuilder;
     private Map<String, DataFormatDefinition> dataFormats = new 
HashMap<String, DataFormatDefinition>();
     private Map<String, String> properties = new HashMap<String, String>();
-    private FactoryFinderResolver factoryFinderResolver = new 
DefaultFactoryFinder();
-    private FactoryFinder factoryFinder;
+    private FactoryFinderResolver factoryFinderResolver = new 
DefaultFactoryFinderResolver();
+    private FactoryFinder defaultFactoryFinder;
     private final Map<String, FactoryFinder> factories = new HashMap<String, 
FactoryFinder>();
     private final Map<String, RouteService> routeServices = new 
HashMap<String, RouteService>();
     private ClassResolver classResolver;
@@ -932,10 +932,10 @@
     }
 
     public FactoryFinder getDefaultFactoryFinder() {
-        if (factoryFinder == null) {
-            factoryFinder = 
factoryFinderResolver.resolveDefaultFactoryFinder();
+        if (defaultFactoryFinder == null) {
+            defaultFactoryFinder = 
factoryFinderResolver.resolveDefaultFactoryFinder(getClassResolver());
         }
-        return factoryFinder;
+        return defaultFactoryFinder;
     }
 
     public void setFactoryFinderResolver(FactoryFinderResolver resolver) {
@@ -946,7 +946,7 @@
         synchronized (factories) {
             FactoryFinder answer = factories.get(path);
             if (answer == null) {
-                answer = new DefaultFactoryFinder(path);
+                answer = 
factoryFinderResolver.resolveFactoryFinder(getClassResolver(), path);
                 factories.put(path, answer);
             }
             return answer;

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultClassResolver.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultClassResolver.java?rev=754465&r1=754464&r2=754465&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultClassResolver.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultClassResolver.java
 Sat Mar 14 15:53:11 2009
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.impl;
 
+import java.io.InputStream;
+
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.util.ObjectHelper;
 
@@ -76,6 +78,11 @@
         return answer;
     }
 
+    public InputStream loadResourceAsStream(String uri) {
+        ObjectHelper.notEmpty(uri, "uri");
+        return ObjectHelper.loadResourceAsStream(uri);
+    }
+
     protected Class loadClass(String name, ClassLoader loader) {
         ObjectHelper.notEmpty(name, "name");
         return ObjectHelper.loadClass(name, loader);

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java?rev=754465&r1=754464&r2=754465&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java
 Sat Mar 14 15:53:11 2009
@@ -26,37 +26,25 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.camel.NoFactoryAvailableException;
+import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.FactoryFinder;
-import org.apache.camel.spi.FactoryFinderResolver;
 import org.apache.camel.spi.Injector;
 import org.apache.camel.util.ObjectHelper;
 
 /**
  * Default factory finder.
  */
-public class DefaultFactoryFinder implements FactoryFinder, 
FactoryFinderResolver {
-
-    public static final transient String DEFAULT_RESOURCE_PATH = 
"META-INF/services/org/apache/camel/";
+public class DefaultFactoryFinder implements FactoryFinder {
 
     protected final ConcurrentHashMap<String, Class> classMap = new 
ConcurrentHashMap<String, Class>();
+    private ClassResolver classResolver;
     private String path;
 
-    public DefaultFactoryFinder() {
-        this(DEFAULT_RESOURCE_PATH);
-    }
-
-    public DefaultFactoryFinder(String resourcePath) {
+    public DefaultFactoryFinder(ClassResolver classResolver, String 
resourcePath) {
+        this.classResolver = classResolver;
         this.path = resourcePath;
     }
 
-    public FactoryFinder resolveDefaultFactoryFinder() {
-        return new DefaultFactoryFinder();
-    }
-
-    public FactoryFinder resolveFactoryFinder(String path) {
-        return new DefaultFactoryFinder(path);
-    }
-
     public String getResourcePath() {
         return path;
     }
@@ -133,7 +121,7 @@
             throw new IOException("Expected property is missing: " + 
propertyPrefix + "class");
         }
 
-        Class clazz = ObjectHelper.loadClass(className);
+        Class clazz = classResolver.resolveClass(className);
         if (clazz == null) {
             throw new ClassNotFoundException(className);
         }
@@ -143,7 +131,7 @@
     private Properties doFindFactoryProperties(String key) throws IOException {
         String uri = path + key;
 
-        InputStream in = ObjectHelper.loadResourceAsStream(uri);
+        InputStream in = classResolver.loadResourceAsStream(uri);
         if (in == null) {
             throw new NoFactoryAvailableException(uri);
         }

Added: 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinderResolver.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinderResolver.java?rev=754465&view=auto
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinderResolver.java
 (added)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinderResolver.java
 Sat Mar 14 15:53:11 2009
@@ -0,0 +1,40 @@
+/**
+ * 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.camel.impl;
+
+import org.apache.camel.spi.ClassResolver;
+import org.apache.camel.spi.FactoryFinder;
+import org.apache.camel.spi.FactoryFinderResolver;
+
+/**
+ * Default factory finder.
+ *
+ * @version $Revision$
+ */
+public class DefaultFactoryFinderResolver implements FactoryFinderResolver {
+
+    public static final transient String DEFAULT_RESOURCE_PATH = 
"META-INF/services/org/apache/camel/";
+
+    public FactoryFinder resolveDefaultFactoryFinder(ClassResolver 
classResolver) {
+        return new DefaultFactoryFinder(classResolver, DEFAULT_RESOURCE_PATH);
+    }
+
+    public FactoryFinder resolveFactoryFinder(ClassResolver classResolver, 
String resourcePath) {
+        return new DefaultFactoryFinder(classResolver, resourcePath);
+    }
+
+}

Propchange: 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinderResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinderResolver.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ClassResolver.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ClassResolver.java?rev=754465&r1=754464&r2=754465&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ClassResolver.java 
(original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ClassResolver.java 
Sat Mar 14 15:53:11 2009
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.spi;
 
+import java.io.InputStream;
+
 /**
  * A class resolver for loading classes in a loosly coupled manner to cater 
for different platforms such
  * as standalone, web container, j2ee container and OSGi platforms.
@@ -98,4 +100,11 @@
      */
     <T> Class<T> resolveMandatoryClass(String name, Class<T> type, ClassLoader 
loader) throws ClassNotFoundException;
 
+    /**
+     * Loads the given resource as a stream
+     * @param uri the uri of the resource
+     * @return as a stream
+     */
+    InputStream loadResourceAsStream(String uri);
+
 }

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinderResolver.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinderResolver.java?rev=754465&r1=754464&r2=754465&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinderResolver.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinderResolver.java
 Sat Mar 14 15:53:11 2009
@@ -24,18 +24,20 @@
 public interface FactoryFinderResolver {
 
     /**
-     * Creates a new defaut factory finder.
+     * Creates a new defaut factory finder using a default resource path.
      *
+     * @param classResolver the class resolcer to use
      * @return a factory finder.
      */
-    FactoryFinder resolveDefaultFactoryFinder();
+    FactoryFinder resolveDefaultFactoryFinder(ClassResolver classResolver);
 
     /**
      * Creates a new factory finder.
      *
-     * @param path the resource path
+     * @param classResolver the class resolcer to use
+     * @param resourcePath the resource path as base to lookup files within
      * @return a factory finder.
      */
-    FactoryFinder resolveFactoryFinder(String path);
+    FactoryFinder resolveFactoryFinder(ClassResolver classResolver, String 
resourcePath);
 
 }

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java?rev=754465&r1=754464&r2=754465&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
 Sat Mar 14 15:53:11 2009
@@ -31,8 +31,9 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.DefaultClassResolver;
 import org.apache.camel.impl.DefaultExchange;
-import org.apache.camel.impl.DefaultFactoryFinder;
+import org.apache.camel.impl.DefaultFactoryFinderResolver;
 import org.apache.camel.impl.DefaultPackageScanClassResolver;
 import org.apache.camel.impl.converter.DefaultTypeConverter;
 import org.apache.camel.util.IntrospectionSupport;
@@ -47,7 +48,7 @@
     private static final transient Log LOG = 
LogFactory.getLog(ConverterTest.class);
 
     protected TypeConverter converter = new DefaultTypeConverter(new 
DefaultPackageScanClassResolver(),
-            new ReflectionInjector(), new DefaultFactoryFinder());
+            new ReflectionInjector(), new 
DefaultFactoryFinderResolver().resolveDefaultFactoryFinder(new 
DefaultClassResolver()));
 
     public static class IntegerPropertyEditor extends PropertyEditorSupport {
         public void setAsText(String text) throws IllegalArgumentException {

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java?rev=754465&r1=754464&r2=754465&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java 
(original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java 
Sat Mar 14 15:53:11 2009
@@ -18,7 +18,6 @@
 
 import java.io.InputStream;
 import java.io.StringReader;
-
 import javax.xml.transform.Source;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamSource;
@@ -28,7 +27,8 @@
 
 import junit.framework.TestCase;
 import org.apache.camel.TypeConverter;
-import org.apache.camel.impl.DefaultFactoryFinder;
+import org.apache.camel.impl.DefaultClassResolver;
+import org.apache.camel.impl.DefaultFactoryFinderResolver;
 import org.apache.camel.impl.DefaultPackageScanClassResolver;
 import org.apache.camel.impl.converter.DefaultTypeConverter;
 import org.apache.camel.util.ReflectionInjector;
@@ -42,7 +42,7 @@
 public class JaxpTest extends TestCase {
     private static final transient Log LOG = LogFactory.getLog(JaxpTest.class);
     protected TypeConverter converter = new DefaultTypeConverter(new 
DefaultPackageScanClassResolver(),
-            new ReflectionInjector(), new DefaultFactoryFinder());
+            new ReflectionInjector(), new 
DefaultFactoryFinderResolver().resolveDefaultFactoryFinder(new 
DefaultClassResolver()));
 
     public void testConvertToDocument() throws Exception {
         Document document = converter

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StringSourceTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StringSourceTest.java?rev=754465&r1=754464&r2=754465&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StringSourceTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StringSourceTest.java
 Sat Mar 14 15:53:11 2009
@@ -24,7 +24,8 @@
 import junit.framework.TestCase;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.converter.jaxp.StringSource;
-import org.apache.camel.impl.DefaultFactoryFinder;
+import org.apache.camel.impl.DefaultClassResolver;
+import org.apache.camel.impl.DefaultFactoryFinderResolver;
 import org.apache.camel.impl.DefaultPackageScanClassResolver;
 import org.apache.camel.impl.converter.DefaultTypeConverter;
 import org.apache.camel.util.ReflectionInjector;
@@ -34,7 +35,7 @@
  */
 public class StringSourceTest extends TestCase {
     protected TypeConverter converter = new DefaultTypeConverter(new 
DefaultPackageScanClassResolver(),
-            new ReflectionInjector(), new DefaultFactoryFinder());
+            new ReflectionInjector(), new 
DefaultFactoryFinderResolver().resolveDefaultFactoryFinder(new 
DefaultClassResolver()));
     protected String expectedBody = "<hello>world!</hello>";
 
     public void testSerialization() throws Exception {

Modified: 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java?rev=754465&r1=754464&r2=754465&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
 (original)
+++ 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
 Sat Mar 14 15:53:11 2009
@@ -49,6 +49,7 @@
 import org.apache.camel.processor.interceptor.TraceFormatter;
 import org.apache.camel.processor.interceptor.Tracer;
 import org.apache.camel.spi.ClassResolver;
+import org.apache.camel.spi.FactoryFinderResolver;
 import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.Registry;
@@ -166,6 +167,10 @@
         if (classResolver != null) {
             getContext().setClassResolver(classResolver);
         }
+        FactoryFinderResolver factoryFinderResolver = 
getBeanForType(FactoryFinderResolver.class);
+        if (factoryFinderResolver != null) {
+            getContext().setFactoryFinderResolver(factoryFinderResolver);
+        }
 
         Debugger debugger = getBeanForType(Debugger.class);
         if (debugger != null) {


Reply via email to