Updated Branches:
  refs/heads/master d11440c31 -> b24f380c1

Polsihed camel-dozer to support better loading mapping files using file paths


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b24f380c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b24f380c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b24f380c

Branch: refs/heads/master
Commit: b24f380c1089e1c4b07a33fbbc130f065025b226
Parents: d11440c
Author: Claus Ibsen <[email protected]>
Authored: Thu Aug 1 13:40:25 2013 +0200
Committer: Claus Ibsen <[email protected]>
Committed: Thu Aug 1 13:40:25 2013 +0200

----------------------------------------------------------------------
 .../converter/dozer/DozerTypeConverter.java     |  6 +-
 .../dozer/DozerTypeConverterLoader.java         | 76 +++++++++++++-------
 2 files changed, 57 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/b24f380c/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverter.java
----------------------------------------------------------------------
diff --git 
a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverter.java
 
b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverter.java
index 035e8ff..e5b584c 100644
--- 
a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverter.java
+++ 
b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverter.java
@@ -36,12 +36,16 @@ import org.dozer.Mapper;
  */
 public class DozerTypeConverter implements TypeConverter {
 
-    private DozerBeanMapper mapper;
+    private final DozerBeanMapper mapper;
 
     public DozerTypeConverter(DozerBeanMapper mapper) {
         this.mapper = mapper;
     }
 
+    public DozerBeanMapper getMapper() {
+        return mapper;
+    }
+
     public <T> T convertTo(Class<T> type, Object value) {
         return mapper.map(value, type);
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/b24f380c/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
----------------------------------------------------------------------
diff --git 
a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
 
b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
index f44d5e9..e5a8385 100644
--- 
a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
+++ 
b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
@@ -102,7 +102,9 @@ public class DozerTypeConverterLoader implements 
CamelContextAware {
      */
     public void init(CamelContext camelContext, DozerBeanMapper mapper) {
         this.camelContext = camelContext;
-        this.mapper = mapper;
+        if (mapper != null) {
+            this.mapper = mapper;
+        }
 
         CamelToDozerClassResolverAdapter adapter = new 
CamelToDozerClassResolverAdapter(camelContext);
         BeanContainer.getInstance().setClassLoader(adapter);
@@ -133,17 +135,21 @@ public class DozerTypeConverterLoader implements 
CamelContextAware {
         return new HashMap<String, 
DozerBeanMapper>(camelContext.getRegistry().findByTypeWithName(DozerBeanMapper.class));
     }
 
-    private void registerClassMaps(TypeConverterRegistry registry, 
DozerBeanMapper dozer, List<ClassMap> all) {
+    protected void registerClassMaps(TypeConverterRegistry registry, 
DozerBeanMapper dozer, List<ClassMap> all) {
         DozerTypeConverter converter = new DozerTypeConverter(dozer);
         for (ClassMap map : all) {
-            if (log.isInfoEnabled()) {
-                log.info("Added {} -> {} as type converter to: {}", new 
Object[]{map.getSrcClassName(), map.getDestClassName(), registry});
-            }
-            registry.addTypeConverter(map.getSrcClassToMap(), 
map.getDestClassToMap(), converter);
-            registry.addTypeConverter(map.getDestClassToMap(), 
map.getSrcClassToMap(), converter);
+            addDozerTypeConverter(registry, converter, map.getMapId(), 
map.getSrcClassToMap(), map.getDestClassToMap());
         }
     }
 
+    protected void addDozerTypeConverter(TypeConverterRegistry registry, 
DozerTypeConverter converter, String mapId, Class<?> to, Class<?> from) {
+        if (log.isInfoEnabled()) {
+            log.info("Added Dozer map id {} as Camel type converter {} <-> 
{}", new Object[]{mapId, from, to});
+        }
+        registry.addTypeConverter(from, to, converter);
+        registry.addTypeConverter(to, from, converter);
+    }
+
     private List<ClassMap> loadMappings(CamelContext camelContext, 
DozerBeanMapper mapper) {
         List<ClassMap> answer = new ArrayList<ClassMap>();
 
@@ -155,9 +161,11 @@ public class DozerTypeConverterLoader implements 
CamelContextAware {
         }
 
         for (String name : mappingFiles) {
-            URL url = camelContext.getClassResolver().loadResourceAsURL(name);
-            MappingFileData data = reader.read(url);
-            answer.addAll(data.getClassMaps());
+            URL url = loadMappingFile(camelContext.getClassResolver(), name);
+            if (url != null) {
+                MappingFileData data = reader.read(url);
+                answer.addAll(data.getClassMaps());
+            }
         }
 
         return answer;
@@ -189,10 +197,40 @@ public class DozerTypeConverterLoader implements 
CamelContextAware {
         return camelContext;
     }
 
+    /**
+     * Sets the {@link CamelContext} <b>and also</b> initializes this loader.
+     * <p/>
+     * The reason why {@link #init(org.apache.camel.CamelContext, 
org.dozer.DozerBeanMapper)} is also called
+     * is because making using Dozer in Spring XML files easier, as no need to 
use the init-method attribute.
+     *
+     * @param camelContext the CamelContext
+     */
     public void setCamelContext(CamelContext camelContext) {
         init(camelContext, null);
     }
 
+    public DozerBeanMapper getMapper() {
+        return mapper;
+    }
+
+    public void setMapper(DozerBeanMapper mapper) {
+        this.mapper = mapper;
+    }
+
+    protected static URL loadMappingFile(ClassResolver classResolver, String 
mappingFile) {
+        URL url = null;
+        try {
+            url = ResourceHelper.resolveResourceAsUrl(classResolver, 
mappingFile);
+        } catch (MalformedURLException e) {
+            // ignore
+        }
+        if (url == null) {
+            // using the classloader of DozerClassLoader as a fallback
+            url = 
DozerClassLoader.class.getClassLoader().getResource(mappingFile);
+        }
+        return url;
+    }
+
     private static final class CamelToDozerClassResolverAdapter implements 
DozerClassLoader {
 
         private final ClassResolver classResolver;
@@ -201,22 +239,12 @@ public class DozerTypeConverterLoader implements 
CamelContextAware {
             classResolver = camelContext.getClassResolver();
         }
 
-        public Class<?> loadClass(String s) {
-            return classResolver.resolveClass(s);
+        public Class<?> loadClass(String name) {
+            return classResolver.resolveClass(name);
         }
 
-        public URL loadResource(String s) {
-            URL url = null;
-            try {
-                url = ResourceHelper.resolveResourceAsUrl(classResolver, s);
-            } catch (MalformedURLException e) {
-                // ignore
-            }
-            if (url == null) {
-                // using the classloader of DozerClassLoader as a fallback
-                url = DozerClassLoader.class.getClassLoader().getResource(s);
-            } 
-            return url;
+        public URL loadResource(String name) {
+            return loadMappingFile(classResolver, name);
         }
     }
 

Reply via email to