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);