JOHNZON-96 add test + logic for ArrayBuilder ft of JSONP-1.1
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 b8ff582..0936e22 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
@@ -20,12 +20,14 @@
import javax.json.JsonArray;
import javax.json.JsonArrayBuilder;
+import javax.json.JsonException;
import javax.json.JsonObjectBuilder;
import javax.json.JsonValue;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -39,7 +41,38 @@
tmpList = new ArrayList<>(initialData);
}
- @Override
+ public JsonArrayBuilderImpl(Collection<Object> initialData) {
+ tmpList = new ArrayList<>();
+ for (Object initialValue : initialData) {
+ add(initialValue);
+ }
+ }
+
+ public JsonArrayBuilder add(final Object value) {
+ if (value instanceof JsonValue) {
+ add((JsonValue) value);
+ } else if (value instanceof BigDecimal) {
+ add((BigDecimal) value);
+ } else if (value instanceof BigInteger) {
+ add((BigInteger) value);
+ } else if (value instanceof Boolean) {
+ add((boolean) value);
+ } else if (value instanceof Double) {
+ add((double) value);
+ } else if (value instanceof Integer) {
+ add((int) value);
+ } else if (value instanceof Long) {
+ add((long) value);
+ } else if (value instanceof String) {
+ add((String) value);
+ } else {
+ throw new JsonException("Illegal JSON type! type=" + value.getClass());
+ }
+
+ return this;
+ }
+
+ @Override
public JsonArrayBuilder add(final JsonValue value) {
addValue(value);
return this;
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java
index 6f1f9ba..c6062a7 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java
@@ -19,6 +19,7 @@
package org.apache.johnzon.core;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -73,6 +74,10 @@
return new JsonArrayBuilderImpl(initialData);
}
+ public JsonArrayBuilder createArrayBuilder(Collection<Object> initialData) {
+ return new JsonArrayBuilderImpl(initialData);
+ }
+
@Override
public Map<String, ?> getConfigInUse() {
return Collections.unmodifiableMap(internalConfig);
@@ -81,4 +86,5 @@
public JsonObjectBuilder createObjectBuilder(Map<String, Object> initialValues) {
return new JsonObjectBuilderImpl(initialValues);
}
+
}
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
index de18839..5fd5074 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
@@ -302,6 +302,15 @@
}
@Override
+ public JsonArrayBuilder createArrayBuilder(JsonArray initialData) {
+ return builderFactory.createArrayBuilder(initialData);
+ }
+
+ public JsonArrayBuilder createArrayBuilder(Collection<Object> initialData) {
+ return builderFactory.createArrayBuilder(initialData);
+ }
+
+ @Override
public JsonBuilderFactory createBuilderFactory(final Map<String, ?> config) {
return (config == null || config.isEmpty()) ? builderFactory : new JsonBuilderFactoryImpl(config);
}
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonArrayBuilderImplTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonArrayBuilderImplTest.java
index df7a1af..85d14eb 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonArrayBuilderImplTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonArrayBuilderImplTest.java
@@ -22,12 +22,16 @@
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Collection;
import javax.json.Json;
+import javax.json.JsonArray;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObjectBuilder;
import javax.json.JsonValue;
+import org.junit.Assert;
import org.junit.Test;
public class JsonArrayBuilderImplTest {
@@ -167,4 +171,35 @@
final JsonArrayBuilder builder = Json.createArrayBuilder();
builder.add((double) Double.NEGATIVE_INFINITY);
}
+
+
+ @Test
+ public void testCreateArrayBuilderWithJsonArrayInitialData() {
+ final JsonArrayBuilder builder = Json.createArrayBuilder();
+ builder.add("a");
+ builder.add("b");
+ builder.add("c");
+ JsonArray jsonArray = builder.build();
+
+ JsonArrayBuilder otherBuilder = Json.createArrayBuilder(jsonArray);
+ otherBuilder.add("d");
+
+ JsonArray jsonArray2 = otherBuilder.build();
+ Assert.assertEquals("[\"a\",\"b\",\"c\",\"d\"]", jsonArray2.toString());
+ }
+
+ @Test
+ public void testCreateArrayBuilderWithCollectionInitialData() {
+ //X TODO should be Collection<String>, but the current Json API is not nice enough...
+ Collection<Object> initialData = new ArrayList<>();
+ initialData.add("a");
+ initialData.add("b");
+ initialData.add("c");
+
+ JsonArrayBuilder otherBuilder = Json.createArrayBuilder(initialData);
+ otherBuilder.add("d");
+
+ JsonArray jsonArray2 = otherBuilder.build();
+ Assert.assertEquals("[\"a\",\"b\",\"c\",\"d\"]", jsonArray2.toString());
+ }
}