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/08/09 13:33:11 UTC

svn commit: r1804522 - in /felix/trunk/converter/converter: pom.xml src/main/java/org/apache/felix/converter/impl/ConverterImpl.java src/test/java/org/apache/felix/converter/impl/ConverterTest.java

Author: davidb
Date: Wed Aug  9 13:33:11 2017
New Revision: 1804522

URL: http://svn.apache.org/viewvc?rev=1804522&view=rev
Log:
Reflectively add Java 8 conversions, if running under Java 8.

Modified:
    felix/trunk/converter/converter/pom.xml
    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/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/pom.xml?rev=1804522&r1=1804521&r2=1804522&view=diff
==============================================================================
--- felix/trunk/converter/converter/pom.xml (original)
+++ felix/trunk/converter/converter/pom.xml Wed Aug  9 13:33:11 2017
@@ -39,7 +39,7 @@
 
     <properties>
         <felix.java.version>8</felix.java.version>
-        <felix.java.signature.artifactId>java18</felix.java.signature.artifactId> <!-- Can we move this to java17? -->
+        <felix.java.signature.artifactId>java17</felix.java.signature.artifactId> <!-- Can we move this to java17? -->
     </properties>
 
     <build>

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=1804522&r1=1804521&r2=1804522&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 Wed Aug  9 13:33:11 2017
@@ -16,14 +16,17 @@
  */
 package org.apache.felix.converter.impl;
 
+import java.lang.reflect.Method;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.UUID;
 import java.util.regex.Pattern;
 
+import org.osgi.util.converter.ConversionException;
 import org.osgi.util.converter.ConverterBuilder;
 import org.osgi.util.converter.Functioning;
 import org.osgi.util.converter.Rule;
+import org.osgi.util.converter.TypeRule;
 import org.osgi.util.function.Function;
 
 public class ConverterImpl implements InternalConverter {
@@ -156,14 +159,6 @@ public class ConverterImpl implements In
             }
         }) {});
 
-        // TODO
-//        cb.rule(new Rule<String, LocalDateTime>(LocalDateTime::parse) {});
-//        cb.rule(new Rule<String, LocalDate>(LocalDate::parse) {});
-//        cb.rule(new Rule<String, LocalTime>(LocalTime::parse) {});
-//        cb.rule(new Rule<String, OffsetDateTime>(OffsetDateTime::parse) {});
-//        cb.rule(new Rule<String, OffsetTime>(OffsetTime::parse) {});
-//        cb.rule(new Rule<String, ZonedDateTime>(ZonedDateTime::parse) {});
-
 //        cb.rule(new Rule<String, Pattern>(Pattern::compile) {});
         cb.rule(new Rule<String, Pattern>(new Function<String, Pattern>() {
             @Override
@@ -211,6 +206,40 @@ public class ConverterImpl implements In
                 return stringToCharacterArray(s);
             }
         }) {});
+
+        // TODO
+//      cb.rule(new Rule<String, LocalDateTime>(LocalDateTime::parse) {});
+        reflectiveAddRule(cb, "java.time.LocalDateTime", "parse");
+//      cb.rule(new Rule<String, LocalDate>(LocalDate::parse) {});
+        reflectiveAddRule(cb, "java.time.LocalDate", "parse");
+//      cb.rule(new Rule<String, LocalTime>(LocalTime::parse) {});
+        reflectiveAddRule(cb, "java.time.LocalTime", "parse");
+//      cb.rule(new Rule<String, OffsetDateTime>(OffsetDateTime::parse) {});
+        reflectiveAddRule(cb, "java.time.OffsetDateTime", "parse");
+//      cb.rule(new Rule<String, OffsetTime>(OffsetTime::parse) {});
+        reflectiveAddRule(cb, "java.time.OffsetTime", "parse");
+//      cb.rule(new Rule<String, ZonedDateTime>(ZonedDateTime::parse) {});
+        reflectiveAddRule(cb, "java.time.ZonedDateTime", "parse");
+    }
+
+    private void reflectiveAddRule(ConverterBuilder cb, String toClsName, String methodName) {
+        try {
+            final Class<?> toCls = getClass().getClassLoader().loadClass(toClsName);
+            final Method toMethod = toCls.getMethod(methodName, CharSequence.class);
+
+            cb.rule(new TypeRule<String, Object>(String.class, toCls, new Function<String, Object>() {
+                @Override
+                public Object apply(String f) {
+                    try {
+                        return toMethod.invoke(null, f);
+                    } catch (Exception e) {
+                        throw new ConversionException("Problem converting to " + toCls, e);
+                    }
+                }
+            }));
+        } catch (Exception ex) {
+            // Class not available, do not add rule for it
+        }
     }
 
     private String charArrayToString(char[] ca) {

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=1804522&r1=1804521&r2=1804522&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 Wed Aug  9 13:33:11 2017
@@ -449,7 +449,6 @@ public class ConverterTest {
     }
 
     @Test
-    @Ignore("Code needs to be converted to Java 7")
     public void testLocalDateTime() {
         LocalDateTime ldt = LocalDateTime.now();
         String s = converter.convert(ldt).to(String.class);
@@ -459,7 +458,6 @@ public class ConverterTest {
     }
 
     @Test
-    @Ignore("Code needs to be converted to Java 7")
     public void testLocalDate() {
         LocalDate ld = LocalDate.now();
         String s = converter.convert(ld).to(String.class);
@@ -469,7 +467,6 @@ public class ConverterTest {
     }
 
     @Test
-    @Ignore("Code needs to be converted to Java 7")
     public void testLocalTime() {
         LocalTime lt = LocalTime.now();
         String s = converter.convert(lt).to(String.class);
@@ -479,7 +476,6 @@ public class ConverterTest {
     }
 
     @Test
-    @Ignore("Code needs to be converted to Java 7")
     public void testOffsetDateTime() {
         OffsetDateTime ot = OffsetDateTime.now();
         String s = converter.convert(ot).to(String.class);
@@ -489,7 +485,6 @@ public class ConverterTest {
     }
 
     @Test
-    @Ignore("Code needs to be converted to Java 7")
     public void testOffsetTime() {
         OffsetTime ot = OffsetTime.now();
         String s = converter.convert(ot).to(String.class);
@@ -499,7 +494,6 @@ public class ConverterTest {
     }
 
     @Test
-    @Ignore("Code needs to be converted to Java 7")
     public void testZonedDateTime() {
         ZonedDateTime zdt = ZonedDateTime.now();
         String s = converter.convert(zdt).to(String.class);