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