You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by rm...@apache.org on 2015/01/28 13:41:44 UTC
incubator-johnzon git commit: JOHNZON-36 nested list support
Repository: incubator-johnzon
Updated Branches:
refs/heads/master 92098f456 -> 435e7f8c6
JOHNZON-36 nested list support
Project: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/commit/435e7f8c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/tree/435e7f8c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/diff/435e7f8c
Branch: refs/heads/master
Commit: 435e7f8c6eabf02da7cd68da76ba2240fb4ce20b
Parents: 92098f4
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Wed Jan 28 13:40:31 2015 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Wed Jan 28 13:40:43 2015 +0100
----------------------------------------------------------------------
.../java/org/apache/johnzon/mapper/Mapper.java | 43 ++++++++++++++------
.../org/apache/johnzon/mapper/MapperTest.java | 21 +++++++++-
2 files changed, 51 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/435e7f8c/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
index bba8ab3..1a16a8e 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
@@ -225,21 +225,27 @@ public class Mapper {
public <T> void writeArray(final Collection<T> object, final Writer stream) {
JsonGenerator generator = generatorFactory.createGenerator(stream);
try {
- if (object == null) {
- generator = generator.writeStartArray().writeEnd();
- } else {
- generator = generator.writeStartArray();
- for (final T t : object) {
- generator = writeItem(generator, t);
- }
- generator = generator.writeEnd();
- }
+ generator = doWriteArray(object, generator);
} finally {
doCloseOrFlush(generator);
}
}
- private void doCloseOrFlush(JsonGenerator generator) {
+ private <T> JsonGenerator doWriteArray(final Collection<T> object, final JsonGenerator inGenerator) {
+ JsonGenerator generator = inGenerator;
+ if (object == null) {
+ generator = generator.writeStartArray().writeEnd();
+ } else {
+ generator = generator.writeStartArray();
+ for (final T t : object) {
+ generator = writeItem(generator, t);
+ }
+ generator = generator.writeEnd();
+ }
+ return generator;
+ }
+
+ private void doCloseOrFlush(final JsonGenerator generator) {
if (close) {
generator.close();
} else {
@@ -428,9 +434,22 @@ public class Mapper {
}
private JsonGenerator writeItem(final JsonGenerator generator, final Object o) {
- final JsonGenerator newGen = writePrimitives(generator, o);
+ JsonGenerator newGen = writePrimitives(generator, o);
if (newGen == null) {
- return doWriteObject(generator, o);
+ if (Collection.class.isInstance(o)) {
+ newGen = doWriteArray(Collection.class.cast(o), generator);
+ } else if (o != null && o.getClass().isArray()) {
+ final int length = Array.getLength(o);
+ if (length > 0 || !skipEmptyArray) {
+ newGen = generator.writeStartArray();
+ for (int i = 0; i < length; i++) {
+ newGen = writeItem(newGen, Array.get(o, i));
+ }
+ newGen = newGen.writeEnd();
+ }
+ } else {
+ newGen = doWriteObject(generator, o);
+ }
}
return newGen;
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/435e7f8c/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
index 7f6e10c..55cc926 100644
--- a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
+++ b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
@@ -29,6 +29,7 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.StringReader;
import java.io.StringWriter;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
@@ -78,7 +79,8 @@ public class MapperTest {
assertEquals(1, object.size());
final Collection<TheObject> object2 = new MapperBuilder().build()
.readJohnzonCollection(new ByteArrayInputStream("[{}]".getBytes()),
- new JohnzonCollectionType<List<TheObject>>() {});
+ new JohnzonCollectionType<List<TheObject>>() {
+ });
assertNotNull(object2);
assertEquals(1, object2.size());
}
@@ -118,6 +120,23 @@ public class MapperTest {
}
@Test
+ public void writeArrayOfArray() {
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ new MapperBuilder().build().writeArray(new String[][]{new String[]{"a", "b"}, new String[]{"c", "d"}}, baos);
+ assertEquals("[[\"a\",\"b\"],[\"c\",\"d\"]]", new String(baos.toByteArray()));
+ }
+
+ @Test
+ public void writeListOfList() {
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ new MapperBuilder().build().writeArray(new ArrayList<List<String>>(){{
+ add(new ArrayList<String>(){{ add("a");add("b"); }});
+ add(new ArrayList<String>(){{ add("c");add("d"); }});
+ }}, baos);
+ assertEquals("[[\"a\",\"b\"],[\"c\",\"d\"]]", new String(baos.toByteArray()));
+ }
+
+ @Test
public void writeObject() {
final TheObject instance = new MapperBuilder().build().readObject(new ByteArrayInputStream(BIG_OBJECT_STR.getBytes()),
TheObject.class); // suppose reader writes but this is tested