You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2017/08/25 13:49:21 UTC
svn commit: r1806174 -
/felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/JSONUtil.java
Author: cziegeler
Date: Fri Aug 25 13:49:21 2017
New Revision: 1806174
URL: http://svn.apache.org/viewvc?rev=1806174&view=rev
Log:
Add json conversion of property values
Modified:
felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/JSONUtil.java
Modified: felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/JSONUtil.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/JSONUtil.java?rev=1806174&r1=1806173&r2=1806174&view=diff
==============================================================================
--- felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/JSONUtil.java (original)
+++ felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/JSONUtil.java Fri Aug 25 13:49:21 2017
@@ -39,8 +39,10 @@ import java.util.Set;
import javax.json.Json;
import javax.json.JsonArray;
+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.JsonStructure;
@@ -239,7 +241,14 @@ public class JSONUtil {
try {
Object convertedVal = converter.convert(pid, value, typeInfo);
if ( convertedVal == null ) {
- convertedVal = value.toString();
+ JsonStructure json = build(value);
+ if ( json == null ) {
+ convertedVal = value.toString();
+ } else {
+ final StringWriter writer = new StringWriter();
+ Json.createWriter(writer).write(json);
+ convertedVal = writer.toString();
+ }
}
properties.put(key, convertedVal);
} catch ( final IOException io ) {
@@ -260,6 +269,52 @@ public class JSONUtil {
return configurations;
}
+ private static JsonStructure build(final Object value) {
+ if ( value instanceof List ) {
+ @SuppressWarnings("unchecked")
+ final List<Object> list = (List<Object>)value;
+ final JsonArrayBuilder builder = Json.createArrayBuilder();
+ for(final Object obj : list) {
+ if ( obj instanceof String ) {
+ builder.add(obj.toString());
+ } else if ( obj instanceof Long ) {
+ builder.add((Long)obj);
+ } else if ( obj instanceof Double ) {
+ builder.add((Double)obj);
+ } else if (obj instanceof Boolean ) {
+ builder.add((Boolean)obj);
+ } else if ( obj instanceof Map ) {
+ builder.add(build(obj));
+ } else if ( obj instanceof List ) {
+ builder.add(build(obj));
+ }
+
+ }
+ return builder.build();
+ } else if ( value instanceof Map ) {
+ @SuppressWarnings("unchecked")
+ final Map<String, Object> map = (Map<String, Object>)value;
+ final JsonObjectBuilder builder = Json.createObjectBuilder();
+ for(final Map.Entry<String, Object> entry : map.entrySet()) {
+ if ( entry.getValue() instanceof String ) {
+ builder.add(entry.getKey(), entry.getValue().toString());
+ } else if ( entry.getValue() instanceof Long ) {
+ builder.add(entry.getKey(), (Long)entry.getValue());
+ } else if ( entry.getValue() instanceof Double ) {
+ builder.add(entry.getKey(), (Double)entry.getValue());
+ } else if ( entry.getValue() instanceof Boolean ) {
+ builder.add(entry.getKey(), (Boolean)entry.getValue());
+ } else if ( entry.getValue() instanceof Map ) {
+ builder.add(entry.getKey(), build(entry.getValue()));
+ } else if ( entry.getValue() instanceof List ) {
+ builder.add(entry.getKey(), build(entry.getValue()));
+ }
+ }
+ return builder.build();
+ }
+ return null;
+ }
+
/**
* Parse a JSON content
* @param name The name of the file