Updated Branches:
  refs/heads/master d078f9fe4 -> cef2600b0

CAMEL-6594: Added api to TypeConverterRegistry to remove a type converter combo


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

Branch: refs/heads/master
Commit: cef2600b0107401c11e6db30f024240b25bd613f
Parents: d078f9f
Author: Claus Ibsen <davscl...@apache.org>
Authored: Wed Jul 31 17:20:20 2013 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Wed Jul 31 17:20:20 2013 +0200

----------------------------------------------------------------------
 .../impl/converter/BaseTypeConverterRegistry.java | 12 ++++++++++++
 .../apache/camel/spi/TypeConverterRegistry.java   |  9 +++++++++
 .../camel/impl/TypeConverterRegistryTest.java     | 18 ++++++++++++++++++
 .../apache/camel/core/osgi/OsgiTypeConverter.java |  4 ++++
 .../core/osgi/test/MockTypeConverterRegistry.java |  5 +++++
 5 files changed, 48 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/cef2600b/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
 
b/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
index a00f62c..bb50962 100644
--- 
a/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
+++ 
b/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
@@ -366,6 +366,18 @@ public abstract class BaseTypeConverterRegistry extends 
ServiceSupport implement
     }
 
     @Override
+    public boolean removeTypeConverter(Class<?> toType, Class<?> fromType) {
+        log.trace("Removing type converter from: {} to: {}", fromType, toType);
+        TypeMapping key = new TypeMapping(toType, fromType);
+        TypeConverter converter = typeMappings.remove(key);
+        if (converter != null) {
+            typeMappings.remove(key);
+            misses.remove(key);
+        }
+        return converter != null;
+    }
+
+    @Override
     public void addFallbackTypeConverter(TypeConverter typeConverter, boolean 
canPromote) {
         log.trace("Adding fallback type converter: {} which can promote: {}", 
typeConverter, canPromote);
 

http://git-wip-us.apache.org/repos/asf/camel/blob/cef2600b/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java 
b/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
index 39c7dcd..9dcbb29 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
@@ -82,6 +82,15 @@ public interface TypeConverterRegistry extends StaticService 
{
     void addTypeConverter(Class<?> toType, Class<?> fromType, TypeConverter 
typeConverter);
 
     /**
+     * Removes the type converter
+     *
+     * @param toType        the type to convert to
+     * @param fromType      the type to convert from
+     * @return <tt>true</tt> if removed, <tt>false</tt> if the type converter 
didn't exist
+     */
+    boolean removeTypeConverter(Class<?> toType, Class<?> fromType);
+
+    /**
      * Registers a new fallback type converter
      *
      * @param typeConverter the type converter to use

http://git-wip-us.apache.org/repos/asf/camel/blob/cef2600b/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java 
b/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java
index 4a894bc..b5082c4 100644
--- 
a/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java
+++ 
b/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java
@@ -54,6 +54,24 @@ public class TypeConverterRegistryTest extends TestCase {
         assertEquals(123, order.getId());
     }
 
+    public void testRemoveTypeConverter() {
+        DefaultCamelContext context = new DefaultCamelContext();
+
+        // add our own type converter manually that converts from String -> 
MyOrder using MyOrderTypeConverter
+        context.getTypeConverterRegistry().addTypeConverter(MyOrder.class, 
String.class, new MyOrderTypeConverter());
+
+        MyOrder order = context.getTypeConverter().convertTo(MyOrder.class, 
"123");
+        assertNotNull(order);
+        assertEquals(123, order.getId());
+
+        // now remove it
+        boolean removed = 
context.getTypeConverterRegistry().removeTypeConverter(MyOrder.class, 
String.class);
+        assertTrue("Type converter should be removed", removed);
+
+        order = context.getTypeConverter().convertTo(MyOrder.class, "123");
+        assertNull("Type converter should be removed", order);
+    }
+
     private static class MyOrder {
         private int id;
 

http://git-wip-us.apache.org/repos/asf/camel/blob/cef2600b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java
----------------------------------------------------------------------
diff --git 
a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java
 
b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java
index 48d06af..aaea468 100644
--- 
a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java
+++ 
b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java
@@ -123,6 +123,10 @@ public class OsgiTypeConverter extends ServiceSupport 
implements TypeConverter,
         getDelegate().addTypeConverter(toType, fromType, typeConverter);
     }
 
+    public boolean removeTypeConverter(Class<?> toType, Class<?> fromType) {
+        return getDelegate().removeTypeConverter(toType, fromType);
+    }
+
     public void addFallbackTypeConverter(TypeConverter typeConverter, boolean 
canPromote) {
         getDelegate().addFallbackTypeConverter(typeConverter, canPromote);
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/cef2600b/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/test/MockTypeConverterRegistry.java
----------------------------------------------------------------------
diff --git 
a/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/test/MockTypeConverterRegistry.java
 
b/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/test/MockTypeConverterRegistry.java
index 810e4f2..ff51566 100644
--- 
a/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/test/MockTypeConverterRegistry.java
+++ 
b/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/test/MockTypeConverterRegistry.java
@@ -39,6 +39,11 @@ public class MockTypeConverterRegistry implements 
TypeConverterRegistry {
         typeConverters.add(typeConverter);
     }
 
+    public boolean removeTypeConverter(Class<?> toType, Class<?> fromType) {
+        // noop
+        return true;
+    }
+
     public void addFallbackTypeConverter(TypeConverter typeConverter, boolean 
canPromote) {
         fallbackTypeConverters.add(typeConverter);
     }

Reply via email to