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

rmannibucau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/johnzon.git


The following commit(s) were added to refs/heads/master by this push:
     new 27c2bc0  JOHNZON-225 support of Map, Collection and arrays in initial 
data of object and array builders
27c2bc0 is described below

commit 27c2bc076b3ecf9f44ada29f3d5e4303944bf754
Author: Romain Manni-Bucau <[email protected]>
AuthorDate: Sat Jul 27 09:58:31 2019 +0200

    JOHNZON-225 support of Map, Collection and arrays in initial data of object 
and array builders
---
 .../java/org/apache/johnzon/core/JsonArrayBuilderImpl.java | 13 +++++++++++++
 .../org/apache/johnzon/core/JsonObjectBuilderImpl.java     | 14 ++++++++++++++
 .../org/apache/johnzon/core/JsonObjectBuilderImplTest.java | 13 +++++++++++++
 3 files changed, 40 insertions(+)

diff --git 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
index 1819309..f105eaf 100644
--- 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
+++ 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
@@ -24,12 +24,14 @@ import javax.json.JsonException;
 import javax.json.JsonObjectBuilder;
 import javax.json.JsonValue;
 import java.io.Serializable;
+import java.lang.reflect.Array;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 class JsonArrayBuilderImpl implements JsonArrayBuilder, Serializable {
     private List<JsonValue> tmpList;
@@ -216,6 +218,17 @@ class JsonArrayBuilderImpl implements JsonArrayBuilder, 
Serializable {
             add((long) value);
         } else if (value instanceof String) {
             add((String) value);
+        } else if (value instanceof Map) {
+            add(new JsonObjectBuilderImpl(Map.class.cast(value), 
bufferProvider).build());
+        } else if (value instanceof Collection) {
+            add(new JsonArrayBuilderImpl(Collection.class.cast(value), 
bufferProvider).build());
+        } else if (value.getClass().isArray()) {
+            final int length = Array.getLength(value);
+            final Collection<Object> collection = new ArrayList<>(length);
+            for (int i = 0; i < length; i++) {
+                collection.add(Array.get(value, i));
+            }
+            add(new JsonArrayBuilderImpl(collection, bufferProvider).build());
         } else {
             throw new JsonException("Illegal JSON type! type=" + 
value.getClass());
         }
diff --git 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java
index 003cb77..b0e80ea 100644
--- 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java
+++ 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java
@@ -24,8 +24,11 @@ import javax.json.JsonObject;
 import javax.json.JsonObjectBuilder;
 import javax.json.JsonValue;
 import java.io.Serializable;
+import java.lang.reflect.Array;
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -77,6 +80,17 @@ class JsonObjectBuilderImpl implements JsonObjectBuilder, 
Serializable {
             add(name, (String) value);
         } else if (value == null) {
             addNull(name);
+        } else if (value instanceof Map) {
+            add(name, new JsonObjectBuilderImpl(Map.class.cast(value), 
bufferProvider).build());
+        } else if (value instanceof Collection) {
+            add(name, new JsonArrayBuilderImpl(Collection.class.cast(value), 
bufferProvider).build());
+        } else if (value.getClass().isArray()) {
+            final int length = Array.getLength(value);
+            final Collection<Object> collection = new ArrayList<>(length);
+            for (int i = 0; i < length; i++) {
+                collection.add(Array.get(value, i));
+            }
+            add(name, new JsonArrayBuilderImpl(collection, 
bufferProvider).build());
         } else {
             throw new JsonException("Illegal JSON type! name=" + name + " 
type=" + value.getClass());
         }
diff --git 
a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonObjectBuilderImplTest.java
 
b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonObjectBuilderImplTest.java
index 4954614..3cfd22b 100644
--- 
a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonObjectBuilderImplTest.java
+++ 
b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonObjectBuilderImplTest.java
@@ -23,6 +23,8 @@ import java.math.BigInteger;
 import java.util.HashMap;
 import java.util.Map;
 
+import static java.util.Collections.singleton;
+import static java.util.Collections.singletonMap;
 import static org.junit.Assert.assertEquals;
 
 import javax.json.Json;
@@ -35,6 +37,17 @@ import org.junit.Test;
 
 public class JsonObjectBuilderImplTest {
     @Test
+    public void createObjectBuilderMapSupport() {
+        final Map<String, Object> initial = new HashMap<>();
+        initial.put("a", "b");
+        initial.put("c", singletonMap("d", "e"));
+        initial.put("f", singleton("g"));
+
+        final JsonObject build = Json.createObjectBuilder(initial).build();
+        assertEquals("{\"a\":\"b\",\"c\":{\"d\":\"e\"},\"f\":[\"g\"]}", 
build.toString());
+    }
+
+    @Test
     public void testBuild() {
         final JsonObjectBuilder builder = Json.createObjectBuilder();
         builder.add("a", "b");

Reply via email to