You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2017/06/01 09:15:27 UTC

svn commit: r1797168 - in /sling/whiteboard/cziegeler/feature/src: main/java/org/apache/sling/feature/json/FeatureJSONWriter.java test/java/org/apache/sling/feature/json/FeatureJSONReaderTest.java

Author: cziegeler
Date: Thu Jun  1 09:15:27 2017
New Revision: 1797168

URL: http://svn.apache.org/viewvc?rev=1797168&view=rev
Log:
Add more type conversion

Modified:
    sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java
    sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/json/FeatureJSONReaderTest.java

Modified: sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java?rev=1797168&r1=1797167&r2=1797168&view=diff
==============================================================================
--- sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java (original)
+++ sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java Thu Jun  1 09:15:27 2017
@@ -258,21 +258,62 @@ public class FeatureJSONWriter {
                     }
 
                     final Object val = cfg.getProperties().get(name);
-                    if ( val instanceof String ) {
-                        w.write(name, (String)val);
-                    } else if ( val instanceof Boolean ) {
-                        w.write(name, (Boolean)val);
-                    } else if ( val.getClass().isArray() ) {
+
+                    String typePostFix = null;
+                    final Object typeCheck;
+                    if ( val.getClass().isArray() ) {
+                        if ( Array.getLength(val) > 0 ) {
+                            typeCheck = Array.get(val, 0);
+                        } else {
+                            typeCheck = null;
+                        }
+                    } else {
+                        typeCheck = val;
+                    }
+
+                    if ( typeCheck instanceof Integer ) {
+                        typePostFix = ":Integer";
+                    } else if ( typeCheck instanceof Byte ) {
+                        typePostFix = ":Byte";
+                    } else if ( typeCheck instanceof Character ) {
+                        typePostFix = ":Character";
+                    } else if ( typeCheck instanceof Float ) {
+                        typePostFix = ":Float";
+                    }
+
+                    if ( val.getClass().isArray() ) {
                         w.writeStartArray(name);
                         for(int i=0; i<Array.getLength(val);i++ ) {
                             final Object obj = Array.get(val, i);
-                            //  TODO - full type conversion, we have to reverse all types supported by the configurator
-                            w.write(obj.toString());
+                            if ( typePostFix == null ) {
+                                if ( obj instanceof String ) {
+                                    w.write((String)obj);
+                                } else if ( obj instanceof Boolean ) {
+                                    w.write((Boolean)obj);
+                                } else if ( obj instanceof Long ) {
+                                    w.write((Long)obj);
+                                } else if ( obj instanceof Double ) {
+                                    w.write((Double)obj);
+                                }
+                            } else {
+                                w.write(obj.toString());
+                            }
                         }
                         w.writeEnd();
                     } else {
-                        //  TODO - full type conversion, we have to reverse all types supported by the configurator
-                        w.write(name, val.toString());
+                        if ( typePostFix == null ) {
+                            if ( val instanceof String ) {
+                                w.write(name, (String)val);
+                            } else if ( val instanceof Boolean ) {
+                                w.write(name, (Boolean)val);
+                            } else if ( val instanceof Long ) {
+                                w.write(name, (Long)val);
+                            } else if ( val instanceof Double ) {
+                                w.write(name, (Double)val);
+                            }
+                        } else {
+                            w.write(name + typePostFix, val.toString());
+                        }
                     }
                 }
 

Modified: sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/json/FeatureJSONReaderTest.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/json/FeatureJSONReaderTest.java?rev=1797168&r1=1797167&r2=1797168&view=diff
==============================================================================
--- sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/json/FeatureJSONReaderTest.java (original)
+++ sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/json/FeatureJSONReaderTest.java Thu Jun  1 09:15:27 2017
@@ -19,7 +19,11 @@ package org.apache.sling.feature.json;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
 
+import java.util.List;
+
+import org.apache.sling.feature.Configuration;
 import org.apache.sling.feature.Feature;
 import org.junit.Test;
 
@@ -34,6 +38,31 @@ public class FeatureJSONReaderTest {
         assertEquals("1.1", feature.getId().getVersion());
         assertEquals("jar", feature.getId().getType());
         assertNull(feature.getId().getClassifier());
+
+        assertEquals(2, feature.getConfigurations().size());
+        final Configuration cfg1 = findConfiguration(feature.getConfigurations(), "my.pid");
+        assertEquals(7, cfg1.getProperties().get("number"));
+        final Configuration cfg2 = findFactoryConfiguration(feature.getConfigurations(), "my.factory.pid", "name");
+        assertEquals("yeah", cfg2.getProperties().get("a.value"));
     }
 
+    private Configuration findConfiguration(final List<Configuration> cfgs, final String pid) {
+        for(final Configuration c : cfgs) {
+            if ( !c.isFactoryConfiguration() && pid.equals(c.getPid()) ) {
+                return c;
+            }
+        }
+        fail("Configuration not found " + pid);
+        return null;
+    }
+
+    private Configuration findFactoryConfiguration(final List<Configuration> cfgs, final String factoryid, final String name) {
+        for(final Configuration c : cfgs) {
+            if ( c.isFactoryConfiguration() && factoryid.equals(c.getFactoryPid()) && name.equals(c.getName())) {
+                return c;
+            }
+        }
+        fail("Factory Configuration not found " + factoryid + "~" + name);
+        return null;
+    }
 }