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 2014/06/27 19:30:23 UTC
git commit: JsonGenerator shouldn't force to use a fluent API. Thanks
Hendrik again for this issue
Repository: incubator-fleece
Updated Branches:
refs/heads/master 8a1d4c5e2 -> a3a83cb3b
JsonGenerator shouldn't force to use a fluent API. Thanks Hendrik again for this issue
Project: http://git-wip-us.apache.org/repos/asf/incubator-fleece/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-fleece/commit/a3a83cb3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-fleece/tree/a3a83cb3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-fleece/diff/a3a83cb3
Branch: refs/heads/master
Commit: a3a83cb3bbaca5331bfddbfab708448076e1d806
Parents: 8a1d4c5
Author: Romain Manni-Bucau <rm...@gmail.com>
Authored: Fri Jun 27 19:30:15 2014 +0200
Committer: Romain Manni-Bucau <rm...@gmail.com>
Committed: Fri Jun 27 19:30:15 2014 +0200
----------------------------------------------------------------------
.../apache/fleece/core/JsonGeneratorFacade.java | 185 +++++++++++++++++++
.../fleece/core/JsonGeneratorFactoryImpl.java | 4 +
.../apache/fleece/core/JsonProviderImpl.java | 2 +-
.../fleece/core/JsonGeneratorImplTest.java | 12 ++
4 files changed, 202 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-fleece/blob/a3a83cb3/fleece-core/src/main/java/org/apache/fleece/core/JsonGeneratorFacade.java
----------------------------------------------------------------------
diff --git a/fleece-core/src/main/java/org/apache/fleece/core/JsonGeneratorFacade.java b/fleece-core/src/main/java/org/apache/fleece/core/JsonGeneratorFacade.java
new file mode 100644
index 0000000..e9e9df0
--- /dev/null
+++ b/fleece-core/src/main/java/org/apache/fleece/core/JsonGeneratorFacade.java
@@ -0,0 +1,185 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fleece.core;
+
+import javax.json.JsonValue;
+import javax.json.stream.JsonGenerator;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+// basically a proxy but java.lang.reflect.Proxy would be too slow for JSon
+//
+// just a facade allowing to reuse the same pointer (instance)
+// without using a fluent API
+public class JsonGeneratorFacade implements JsonGenerator {
+ private JsonGenerator delegate;
+
+ public JsonGeneratorFacade(final JsonGenerator delegate) {
+ this.delegate = delegate;
+ }
+
+ @Override
+ public JsonGenerator writeStartObject() {
+ delegate = delegate.writeStartObject();
+ return this;
+ }
+
+ @Override
+ public JsonGenerator writeStartObject(final String name) {
+ delegate = delegate.writeStartObject(name);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator writeStartArray() {
+ delegate = delegate.writeStartArray();
+ return this;
+ }
+
+ @Override
+ public JsonGenerator writeStartArray(final String name) {
+ delegate = delegate.writeStartArray(name);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final String name, final JsonValue value) {
+ delegate = delegate.write(name, value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final String name, final String value) {
+ delegate = delegate.write(name, value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final String name, final BigInteger value) {
+ delegate = delegate.write(name, value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final String name, final BigDecimal value) {
+ delegate = delegate.write(name, value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final String name, final int value) {
+ delegate = delegate.write(name, value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final String name, final long value) {
+ delegate = delegate.write(name, value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final String name, final double value) {
+ delegate = delegate.write(name, value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final String name, final boolean value) {
+ delegate = delegate.write(name, value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator writeNull(final String name) {
+ delegate = delegate.writeNull(name);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator writeEnd() {
+ delegate = delegate.writeEnd();
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final JsonValue value) {
+ delegate = delegate.write(value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final String value) {
+ delegate = delegate.write(value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final BigDecimal value) {
+ delegate = delegate.write(value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final BigInteger value) {
+ delegate = delegate.write(value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final int value) {
+ delegate = delegate.write(value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final long value) {
+ delegate = delegate.write(value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final double value) {
+ delegate = delegate.write(value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator write(final boolean value) {
+ delegate = delegate.write(value);
+ return this;
+ }
+
+ @Override
+ public JsonGenerator writeNull() {
+ delegate = delegate.writeNull();
+ return this;
+ }
+
+ @Override
+ public void close() {
+ delegate.close();
+
+ }
+
+ @Override
+ public void flush() {
+ delegate.flush();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-fleece/blob/a3a83cb3/fleece-core/src/main/java/org/apache/fleece/core/JsonGeneratorFactoryImpl.java
----------------------------------------------------------------------
diff --git a/fleece-core/src/main/java/org/apache/fleece/core/JsonGeneratorFactoryImpl.java b/fleece-core/src/main/java/org/apache/fleece/core/JsonGeneratorFactoryImpl.java
index b855943..f88e80f 100644
--- a/fleece-core/src/main/java/org/apache/fleece/core/JsonGeneratorFactoryImpl.java
+++ b/fleece-core/src/main/java/org/apache/fleece/core/JsonGeneratorFactoryImpl.java
@@ -40,6 +40,10 @@ public class JsonGeneratorFactoryImpl implements JsonGeneratorFactory {
@Override
public JsonGenerator createGenerator(final Writer writer) {
+ return new JsonGeneratorFacade(newJsonGeneratorImpl(writer));
+ }
+
+ private JsonGenerator newJsonGeneratorImpl(final Writer writer) {
if (pretty) {
return new JsonPrettyGeneratorImpl(writer, cache);
}
http://git-wip-us.apache.org/repos/asf/incubator-fleece/blob/a3a83cb3/fleece-core/src/main/java/org/apache/fleece/core/JsonProviderImpl.java
----------------------------------------------------------------------
diff --git a/fleece-core/src/main/java/org/apache/fleece/core/JsonProviderImpl.java b/fleece-core/src/main/java/org/apache/fleece/core/JsonProviderImpl.java
index efd33ce..3869cbf 100644
--- a/fleece-core/src/main/java/org/apache/fleece/core/JsonProviderImpl.java
+++ b/fleece-core/src/main/java/org/apache/fleece/core/JsonProviderImpl.java
@@ -72,7 +72,7 @@ public class JsonProviderImpl extends JsonProvider {
@Override
public JsonGenerator createGenerator(final Writer writer) {
- return new JsonGeneratorImpl(writer, new ConcurrentHashMap<String, String>());
+ return new JsonGeneratorFacade(new JsonGeneratorImpl(writer, new ConcurrentHashMap<String, String>()));
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-fleece/blob/a3a83cb3/fleece-core/src/test/java/org/apache/fleece/core/JsonGeneratorImplTest.java
----------------------------------------------------------------------
diff --git a/fleece-core/src/test/java/org/apache/fleece/core/JsonGeneratorImplTest.java b/fleece-core/src/test/java/org/apache/fleece/core/JsonGeneratorImplTest.java
index 6d9c4e5..e66e62d 100644
--- a/fleece-core/src/test/java/org/apache/fleece/core/JsonGeneratorImplTest.java
+++ b/fleece-core/src/test/java/org/apache/fleece/core/JsonGeneratorImplTest.java
@@ -29,6 +29,18 @@ import static org.junit.Assert.assertEquals;
public class JsonGeneratorImplTest {
@Test
+ public void notFluentGeneratorUsage() {
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ final JsonGenerator generator = Json.createGenerator(baos);
+ generator.writeStartArray();
+ generator.writeStartObject();
+ generator.writeEnd();
+ generator.writeEnd();
+ generator.close();
+ assertEquals("[{}]", new String(baos.toByteArray()));
+ }
+
+ @Test
public void emptyArray() {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final JsonGenerator generator = Json.createGenerator(baos);