You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2019/12/19 10:17:45 UTC

[sling-org-apache-sling-feature-io] 01/01: SLING-8419 refactor method to serialize OSGi configs as JSON

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch feature/SLING-8419
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-io.git

commit b292183cd2e9f3987acccc83eec5b4504c2cdc3e
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Thu Dec 19 11:17:30 2019 +0100

    SLING-8419 refactor method to serialize OSGi configs as JSON
    
    This allows reuse in the OSGi installer
---
 .../feature/io/json/ConfigurationJSONWriter.java   | 87 ++++++++++++++++++++--
 .../sling/feature/io/json/JSONWriterBase.java      | 72 +-----------------
 2 files changed, 83 insertions(+), 76 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/io/json/ConfigurationJSONWriter.java b/src/main/java/org/apache/sling/feature/io/json/ConfigurationJSONWriter.java
index 3732a5e..5b1ab1b 100644
--- a/src/main/java/org/apache/sling/feature/io/json/ConfigurationJSONWriter.java
+++ b/src/main/java/org/apache/sling/feature/io/json/ConfigurationJSONWriter.java
@@ -18,9 +18,13 @@ package org.apache.sling.feature.io.json;
 
 import java.io.IOException;
 import java.io.Writer;
+import java.lang.reflect.Array;
+import java.util.Dictionary;
+import java.util.Enumeration;
 
 import javax.json.stream.JsonGenerator;
 
+import org.apache.sling.feature.Configuration;
 import org.apache.sling.feature.Configurations;
 
 
@@ -45,12 +49,85 @@ public class ConfigurationJSONWriter extends JSONWriterBase {
     private void writeConfigurations(final Writer writer, final Configurations configs)
     throws IOException {
         JsonGenerator generator = newGenerator(writer);
-
-        // TODO is this correct?
-        generator.writeStartObject(JSONConstants.FEATURE_CONFIGURATIONS);
         writeConfigurations(generator, configs);
-        generator.writeEnd();
-
         generator.close();
     }
+
+    /**
+     * Write the OSGi configuration in to a JSON structure as defined in 
+     * @param generator The json generator
+     * @param props The configuration properties to write
+     */
+    public static void writeConfiguration(final JsonGenerator generator, final Dictionary<String, Object> props) {
+
+        final Enumeration<String> e = props.keys();
+        while ( e.hasMoreElements() ) {
+            final String name = e.nextElement();
+            if ( Configuration.PROP_ARTIFACT_ID.equals(name) ) {
+                continue;
+            }
+            final Object val = props.get(name);
+            writeConfigurationProperty(generator, name, val);
+        }
+    }
+
+    public static void writeConfigurationProperty(JsonGenerator generator, String name, Object val) {
+        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() ) {
+            generator.writeStartArray(name);
+            for(int i=0; i<Array.getLength(val);i++ ) {
+                final Object obj = Array.get(val, i);
+                if ( typePostFix == null ) {
+                    if ( obj instanceof String ) {
+                        generator.write((String)obj);
+                    } else if ( obj instanceof Boolean ) {
+                        generator.write((Boolean)obj);
+                    } else if ( obj instanceof Long ) {
+                        generator.write((Long)obj);
+                    } else if ( obj instanceof Double ) {
+                        generator.write((Double)obj);
+                    }
+                } else {
+                    generator.write(obj.toString());
+                }
+            }
+
+            generator.writeEnd();
+        } else {
+            if ( typePostFix == null ) {
+                if ( val instanceof String ) {
+                    generator.write(name, (String)val);
+                } else if ( val instanceof Boolean ) {
+                    generator.write(name, (Boolean)val);
+                } else if ( val instanceof Long ) {
+                    generator.write(name, (Long)val);
+                } else if ( val instanceof Double ) {
+                    generator.write(name, (Double)val);
+                }
+            } else {
+                generator.write(name + typePostFix, val.toString());
+            }
+        }
+    }
 }
diff --git a/src/main/java/org/apache/sling/feature/io/json/JSONWriterBase.java b/src/main/java/org/apache/sling/feature/io/json/JSONWriterBase.java
index 66b6ed2..cd8deb8 100644
--- a/src/main/java/org/apache/sling/feature/io/json/JSONWriterBase.java
+++ b/src/main/java/org/apache/sling/feature/io/json/JSONWriterBase.java
@@ -17,10 +17,8 @@
 package org.apache.sling.feature.io.json;
 
 import java.io.Writer;
-import java.lang.reflect.Array;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Enumeration;
 import java.util.List;
 import java.util.Map;
 
@@ -104,75 +102,7 @@ abstract class JSONWriterBase {
 
         for(final Configuration cfg : cfgs) {
             generator.writeStartObject(cfg.getPid());
-
-            final Enumeration<String> e = cfg.getProperties().keys();
-            while ( e.hasMoreElements() ) {
-                final String name = e.nextElement();
-                if ( Configuration.PROP_ARTIFACT_ID.equals(name) ) {
-                    continue;
-                }
-
-                final Object val = cfg.getProperties().get(name);
-
-                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() ) {
-                    generator.writeStartArray(name);
-                    for(int i=0; i<Array.getLength(val);i++ ) {
-                        final Object obj = Array.get(val, i);
-                        if ( typePostFix == null ) {
-                            if ( obj instanceof String ) {
-                                generator.write((String)obj);
-                            } else if ( obj instanceof Boolean ) {
-                                generator.write((Boolean)obj);
-                            } else if ( obj instanceof Long ) {
-                                generator.write((Long)obj);
-                            } else if ( obj instanceof Double ) {
-                                generator.write((Double)obj);
-                            }
-                        } else {
-                            generator.write(obj.toString());
-                        }
-                    }
-
-                    generator.writeEnd();
-                } else {
-                    if ( typePostFix == null ) {
-                        if ( val instanceof String ) {
-                            generator.write(name, (String)val);
-                        } else if ( val instanceof Boolean ) {
-                            generator.write(name, (Boolean)val);
-                        } else if ( val instanceof Long ) {
-                            generator.write(name, (Long)val);
-                        } else if ( val instanceof Double ) {
-                            generator.write(name, (Double)val);
-                        }
-                    } else {
-                        generator.write(name + typePostFix, val.toString());
-                    }
-                }
-            }
-
+            ConfigurationJSONWriter.writeConfiguration(generator, cfg.getConfigurationProperties());
             generator.writeEnd();
         }