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 2017/07/11 12:49:27 UTC
svn commit: r1801611 - in /felix/trunk/converter/converter/src:
main/java/org/apache/felix/converter/impl/ConverterImpl.java
test/java/org/apache/felix/converter/impl/ConverterTest.java
Author: davidb
Date: Tue Jul 11 12:49:27 2017
New Revision: 1801611
URL: http://svn.apache.org/viewvc?rev=1801611&view=rev
Log:
Felix converter - support special conversions between character arrays and Strings.
Modified:
felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConverterImpl.java
felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java
Modified: felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConverterImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConverterImpl.java?rev=1801611&r1=1801610&r2=1801611&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConverterImpl.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConverterImpl.java Tue Jul 11 12:49:27 2017
@@ -25,12 +25,15 @@ import java.time.OffsetTime;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
+import java.util.List;
import java.util.UUID;
import java.util.regex.Pattern;
import org.osgi.util.converter.ConverterBuilder;
+import org.osgi.util.converter.Converters;
import org.osgi.util.converter.Functioning;
import org.osgi.util.converter.Rule;
+import org.osgi.util.converter.TypeReference;
public class ConverterImpl implements InternalConverter {
@Override
@@ -72,6 +75,47 @@ public class ConverterImpl implements In
cb.rule(new Rule<String, Pattern>(Pattern::compile) {});
cb.rule(new Rule<String, UUID>(UUID::fromString) {});
cb.rule(new Rule<String, ZonedDateTime>(ZonedDateTime::parse) {});
+
+ // Special conversions between character arrays / list and String
+ cb.rule(new Rule<char[], String>(ConverterImpl::charArrayToString) {});
+ cb.rule(new Rule<Character[], String>(ConverterImpl::characterArrayToString) {});
+// cb.rule(new Rule<List<Character>, String>(ConverterImpl::characterListToString) {});
+ cb.rule(new Rule<String, char[]>(ConverterImpl::stringToCharArray) {});
+ cb.rule(new Rule<String, Character[]>(ConverterImpl::stringToCharacterArray) {});
+// cb.rule(new Rule<String, List<Character>>(ConverterImpl::stringToCharacterList) {});
+ }
+
+ private static String charArrayToString(char[] ca) {
+ StringBuilder sb = new StringBuilder(ca.length);
+ for (char c : ca) {
+ sb.append(c);
+ }
+ return sb.toString();
+ }
+
+ private static String characterArrayToString(Character[] ca) {
+ return charArrayToString(Converters.standardConverter().convert(ca).to(char[].class));
+ }
+
+ private static String characterListToString(List<Character> cl) {
+ return charArrayToString(Converters.standardConverter().convert(cl).to(char[].class));
+ }
+
+ private static char[] stringToCharArray(String s) {
+ char[] ca = new char[s.length()];
+
+ for (int i=0; i<s.length(); i++) {
+ ca[i] = s.charAt(i);
+ }
+ return ca;
+ }
+
+ private static Character[] stringToCharacterArray(String s) {
+ return Converters.standardConverter().convert(stringToCharArray(s)).to(Character[].class);
+ }
+
+ private static List<Character> stringToCharacterList(String s) {
+ return Converters.standardConverter().convert(stringToCharArray(s)).to(new TypeReference<List<Character>>() {});
}
private Class<?> loadClassUnchecked(String className) {
Modified: felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java?rev=1801611&r1=1801610&r2=1801611&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java (original)
+++ felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java Tue Jul 11 12:49:27 2017
@@ -139,6 +139,23 @@ public class ConverterTest {
assertEquals(Double.valueOf("12.3"), converter.convert("12.3").to(Double.class));
}
+ @Test
+ public void testCharAggregateToString() {
+ char[] ca = new char[] {'h', 'e', 'l', 'l', 'o'};
+ assertEquals("hello", converter.convert(ca).to(String.class));
+
+ Character[] ca2 = converter.convert(ca).to(Character[].class);
+ assertEquals("hello", converter.convert(ca2).to(String.class));
+
+// List<Character> cl = converter.convert(ca).to(new TypeReference<List<Character>>() {});
+// assertEquals("hello", converter.convert(cl).to(String.class));
+
+ // And back
+ assertArrayEquals(ca, converter.convert("hello").to(char[].class));
+ assertArrayEquals(ca2, converter.convert("hello").to(Character[].class));
+// assertEquals(cl, converter.convert("hello").to(new TypeReference<List<Character>>() {}));
+ }
+
enum TestEnum { FOO, BAR, BLAH, FALSE, X};
enum TestEnum2 { BLAH };
@Test