You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by da...@apache.org on 2016/04/14 17:35:29 UTC
svn commit: r1739126 - in /felix/trunk/converter/src:
main/java/org/apache/felix/converter/impl/ConvertingImpl.java
test/java/org/apache/felix/converter/impl/ConverterTest.java
Author: davidb
Date: Thu Apr 14 15:35:29 2016
New Revision: 1739126
URL: http://svn.apache.org/viewvc?rev=1739126&view=rev
Log:
Felix Converter Service - support Enums.
Modified:
felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java
felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java
Modified: felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java?rev=1739126&r1=1739125&r2=1739126&view=diff
==============================================================================
--- felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java (original)
+++ felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java Thu Apr 14 15:35:29 2016
@@ -102,6 +102,8 @@ public class ConvertingImpl implements C
return false;
} else if (cls.equals(Class.class)) {
return null;
+ } else if (Enum.class.isAssignableFrom(cls)) {
+ return null;
} else {
return 0;
}
@@ -154,6 +156,24 @@ public class ConvertingImpl implements C
throw new RuntimeException(e);
}
}
+ } else if (Enum.class.isAssignableFrom(targetCls)) {
+ if (object instanceof Boolean) {
+ try {
+ Method m = targetCls.getMethod("valueOf", String.class);
+ return m.invoke(null, object.toString().toUpperCase());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ } else if (object instanceof Number) {
+ try {
+ Method m = targetCls.getMethod("values");
+ Object[] values = (Object[]) m.invoke(null);
+ return values[((Number) object).intValue()];
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
}
return null;
}
@@ -163,7 +183,7 @@ public class ConvertingImpl implements C
try {
Method m = cls.getDeclaredMethod("valueOf", String.class);
if (m != null) {
- return (T) m.invoke(null, object);
+ return (T) m.invoke(null, object.toString());
}
} catch (Exception e) {
return null;
Modified: felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java?rev=1739126&r1=1739125&r2=1739126&view=diff
==============================================================================
--- felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java (original)
+++ felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java Thu Apr 14 15:35:29 2016
@@ -92,6 +92,17 @@ public class ConverterTest {
assertEquals(Double.valueOf("12.3"), converter.convert("12.3").to(Double.class));
}
+ enum TestEnum { FOO, BAR, BLAH, FALSE, X};
+ @Test
+ public void testEnums() {
+ assertEquals(TestEnum.BLAH, converter.convert("BLAH").to(TestEnum.class));
+ assertEquals(TestEnum.X, converter.convert('X').to(TestEnum.class));
+ assertEquals(TestEnum.FALSE, converter.convert(false).to(TestEnum.class));
+ assertEquals(TestEnum.BAR, converter.convert(1).to(TestEnum.class));
+ assertNull(converter.convert(null).to(TestEnum.class));
+ assertNull(converter.convert(Collections.emptySet()).to(TestEnum.class));
+ }
+
@Test
public void testIdentialTarget() {
Object o = new Object();