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

davidb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git


The following commit(s) were added to refs/heads/master by this push:
     new 9287b26  [Features] Don't rely on internal cm.json classes.
     new ebdd855  Merge pull request #91 from bosschaert/cmreader
9287b26 is described below

commit 9287b26fe5b7a2133bdb10c83be3c035d8c5f9bc
Author: David Bosschaert <dav...@apache.org>
AuthorDate: Thu Aug 26 07:13:58 2021 +0100

    [Features] Don't rely on internal cm.json classes.
---
 .../felix/feature/impl/FeatureServiceImpl.java     | 60 ++++++++++++----------
 1 file changed, 32 insertions(+), 28 deletions(-)

diff --git 
a/features/src/main/java/org/apache/felix/feature/impl/FeatureServiceImpl.java 
b/features/src/main/java/org/apache/felix/feature/impl/FeatureServiceImpl.java
index 41d05b7..69d61c0 100644
--- 
a/features/src/main/java/org/apache/felix/feature/impl/FeatureServiceImpl.java
+++ 
b/features/src/main/java/org/apache/felix/feature/impl/FeatureServiceImpl.java
@@ -19,13 +19,16 @@ package org.apache.felix.feature.impl;
 import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
+import java.io.StringWriter;
 import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Dictionary;
 import java.util.HashMap;
+import java.util.Hashtable;
 import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;  
+import java.util.Map;
 
 import javax.json.Json;
 import javax.json.JsonArray;
@@ -33,13 +36,15 @@ import javax.json.JsonArrayBuilder;
 import javax.json.JsonNumber;
 import javax.json.JsonObject;
 import javax.json.JsonObjectBuilder;
+import javax.json.JsonReader;
 import javax.json.JsonString;
 import javax.json.JsonValue;
 import javax.json.stream.JsonGenerator;
 import javax.json.stream.JsonGeneratorFactory;
 
-import org.apache.felix.cm.json.impl.JsonSupport;
-import org.apache.felix.cm.json.impl.TypeConverter;
+import org.apache.felix.cm.json.ConfigurationReader;
+import org.apache.felix.cm.json.ConfigurationWriter;
+import org.apache.felix.cm.json.Configurations;
 import org.osgi.service.feature.BuilderFactory;
 import org.osgi.service.feature.Feature;
 import org.osgi.service.feature.FeatureArtifact;
@@ -83,7 +88,7 @@ public class FeatureServiceImpl implements FeatureService {
 
        public Feature readFeature(Reader jsonReader) throws IOException {
         JsonObject json = Json.createReader(
-                       
JsonSupport.createCommentRemovingReader(jsonReader)).readObject();
+                       
Configurations.jsonCommentAwareReader(jsonReader)).readObject();
 
         String id = json.getString("id");
         FeatureBuilder builder = 
builderFactory.newFeatureBuilder(getIDfromMavenCoordinates(id));
@@ -189,7 +194,7 @@ public class FeatureServiceImpl implements FeatureService {
         return cats.toArray(new String[] {});
     }
 
-    private FeatureConfiguration[] getConfigurations(JsonObject json) {
+    private FeatureConfiguration[] getConfigurations(JsonObject json) throws 
IOException {
         JsonObject jo = json.getJsonObject("configurations");
         if (jo == null)
             return new FeatureConfiguration[] {};
@@ -214,20 +219,14 @@ public class FeatureServiceImpl implements FeatureService 
{
             }
 
             JsonObject values = entry.getValue().asJsonObject();
-            for (Map.Entry<String, JsonValue> value : values.entrySet()) {
-               String key = value.getKey();
-               String typeInfo = null;
-               int cidx = key.indexOf(':');
-               if (cidx > 0) {
-                       typeInfo = key.substring(cidx + 1);
-                       key = key.substring(0, cidx);
-               }
-               
-                JsonValue val = value.getValue();
-                // TODO ensure that binary support works as well
-                Object v = TypeConverter.convertObjectToType(val, typeInfo);   
             
-                builder.addValue(key, v);
+            
+            ConfigurationReader cr = 
Configurations.buildReader().build(values);
+            Hashtable<String, Object> cmap = cr.readConfiguration();
+
+            for (Map.Entry<String, Object> cme : cmap.entrySet()) {
+                builder.addValue(cme.getKey(), cme.getValue());
             }
+
             configs.add(builder.build());
         }
 
@@ -389,23 +388,28 @@ public class FeatureServiceImpl implements FeatureService 
{
                return ab.build();
        }
 
-       private JsonObject getConfigurations(Feature feature) {
+       private JsonObject getConfigurations(Feature feature) throws 
IOException {
                Map<String, FeatureConfiguration> configs = 
feature.getConfigurations();
                if (configs == null || configs.size() == 0)
                        return null;
                
                JsonObjectBuilder ob = Json.createObjectBuilder();
-               
+
                for (Map.Entry<String,FeatureConfiguration> cfg : 
configs.entrySet()) {
-                       JsonObjectBuilder cb = Json.createObjectBuilder();
+                       StringWriter sw = new StringWriter();
+                       ConfigurationWriter cw = 
Configurations.buildWriter().build(sw);
+
+                       Dictionary<String, Object> dict = 
Configurations.newConfiguration();
+                       cfg.getValue().getValues().entrySet()
+                               .forEach(e -> dict.put(e.getKey(), 
e.getValue()));
                        
-                       for (Map.Entry<String,Object> prop : 
cfg.getValue().getValues().entrySet()) {
-                               Map.Entry<String, JsonValue> je = 
TypeConverter.convertObjectToTypedJsonValue(prop.getValue());
-                               String tk = je.getKey();
-                               cb.add(TypeConverter.NO_TYPE_INFO.equals(tk) ? 
prop.getKey() : prop.getKey() + ":" + tk, je.getValue());
-                       }
-                       ob.add(cfg.getKey(), cb.build());
-               }
+                       cw.writeConfiguration(dict);
+                       sw.close();
+                       
+                       JsonReader jr = Json.createReader(new 
StringReader(sw.toString()));
+                       JsonObject jo = jr.readObject();
+                       ob.add(cfg.getKey(), jo);
+               }               
                return ob.build();
        }
 

Reply via email to