JOHNZON-110 improve long support impl

Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/ea3bb867
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/ea3bb867
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/ea3bb867

Branch: refs/heads/master
Commit: ea3bb86777c007ed027e7bd07c84cfdbe36bc764
Parents: eb968ec
Author: Mark Struberg <[email protected]>
Authored: Tue Mar 28 22:26:30 2017 +0200
Committer: Mark Struberg <[email protected]>
Committed: Tue Mar 28 22:26:30 2017 +0200

----------------------------------------------------------------------
 .../apache/johnzon/core/JohnzonJsonParser.java  | 134 +++++++++++++++++++
 .../johnzon/core/JsonArrayBuilderImpl.java      |  38 ++++--
 .../apache/johnzon/core/JsonInMemoryParser.java |   8 +-
 .../org/apache/johnzon/core/JsonReaderImpl.java |  11 +-
 .../johnzon/core/JsonStreamParserImpl.java      |   8 +-
 5 files changed, 179 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/johnzon/blob/ea3bb867/johnzon-core/src/main/java/org/apache/johnzon/core/JohnzonJsonParser.java
----------------------------------------------------------------------
diff --git 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JohnzonJsonParser.java 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JohnzonJsonParser.java
new file mode 100644
index 0000000..b13852b
--- /dev/null
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JohnzonJsonParser.java
@@ -0,0 +1,134 @@
+/*
+ * 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.johnzon.core;
+
+import java.math.BigDecimal;
+import java.util.Map;
+import java.util.stream.Stream;
+
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+import javax.json.JsonValue;
+import javax.json.stream.JsonLocation;
+import javax.json.stream.JsonParser;
+
+/**
+ * JsonParser with extended functionality
+ */
+public interface JohnzonJsonParser extends JsonParser {
+
+    boolean isNotTooLong();
+
+
+    public static class JohnzonJsonParserWrapper implements JohnzonJsonParser {
+        private final JsonParser jsonParser;
+
+        public JohnzonJsonParserWrapper(JsonParser jsonParser) {
+            this.jsonParser = jsonParser;
+        }
+
+        @Override
+        public boolean isNotTooLong() {
+            return true;
+        }
+
+        @Override
+        public boolean hasNext() {
+            return jsonParser.hasNext();
+        }
+
+        @Override
+        public Event next() {
+            return jsonParser.next();
+        }
+
+        @Override
+        public String getString() {
+            return jsonParser.getString();
+        }
+
+        @Override
+        public boolean isIntegralNumber() {
+            return jsonParser.isIntegralNumber();
+        }
+
+        @Override
+        public int getInt() {
+            return jsonParser.getInt();
+        }
+
+        @Override
+        public long getLong() {
+            return jsonParser.getLong();
+        }
+
+        @Override
+        public BigDecimal getBigDecimal() {
+            return jsonParser.getBigDecimal();
+        }
+
+        @Override
+        public JsonLocation getLocation() {
+            return jsonParser.getLocation();
+        }
+
+        @Override
+        public void close() {
+            jsonParser.close();
+        }
+
+        @Override
+        public JsonObject getObject() {
+            return jsonParser.getObject();
+        }
+
+        @Override
+        public JsonValue getValue() {
+            return jsonParser.getValue();
+        }
+
+        @Override
+        public JsonArray getArray() {
+            return jsonParser.getArray();
+        }
+
+        @Override
+        public Stream<JsonValue> getArrayStream() {
+            return jsonParser.getArrayStream();
+        }
+
+        @Override
+        public Stream<Map.Entry<String, JsonValue>> getObjectStream() {
+            return jsonParser.getObjectStream();
+        }
+
+        @Override
+        public Stream<JsonValue> getValueStream() {
+            return jsonParser.getValueStream();
+        }
+
+        @Override
+        public void skipArray() {
+            jsonParser.skipArray();
+        }
+
+        @Override
+        public void skipObject() {
+            jsonParser.skipObject();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/johnzon/blob/ea3bb867/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
----------------------------------------------------------------------
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 72caf57..57cceb7 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
@@ -218,78 +218,90 @@ class JsonArrayBuilderImpl implements JsonArrayBuilder, 
Serializable {
 
         @Override
     public JsonArrayBuilder add(final JsonValue value) {
-        addValue(tmpList.size(), value);
+        addValue(value);
         return this;
     }
 
     @Override
     public JsonArrayBuilder add(final String value) {
-        addValue(tmpList.size(), new JsonStringImpl(value));
+        addValue(new JsonStringImpl(value));
         return this;
     }
 
     @Override
     public JsonArrayBuilder add(final BigDecimal value) {
-        addValue(tmpList.size(), new JsonNumberImpl(value));
+        addValue(new JsonNumberImpl(value));
         return this;
     }
 
     @Override
     public JsonArrayBuilder add(final BigInteger value) {
-        addValue(tmpList.size(), new JsonNumberImpl(new BigDecimal(value)));
+        addValue(new JsonNumberImpl(new BigDecimal(value)));
         return this;
     }
 
     @Override
     public JsonArrayBuilder add(final int value) {
-        addValue(tmpList.size(), new JsonLongImpl(value));
+        addValue(new JsonLongImpl(value));
         return this;
     }
 
     @Override
     public JsonArrayBuilder add(final long value) {
-        addValue(tmpList.size(), new JsonLongImpl(value));
+        addValue(new JsonLongImpl(value));
         return this;
     }
 
     @Override
     public JsonArrayBuilder add(final double value) {
-        addValue(tmpList.size(), new JsonDoubleImpl(value));
+        addValue(new JsonDoubleImpl(value));
         return this;
     }
 
     @Override
     public JsonArrayBuilder add(final boolean value) {
-        addValue(tmpList.size(), value ? JsonValue.TRUE : JsonValue.FALSE);
+        addValue(value ? JsonValue.TRUE : JsonValue.FALSE);
         return this;
     }
 
     @Override
     public JsonArrayBuilder addNull() {
-        addValue(tmpList.size(), JsonValue.NULL);
+        addValue(JsonValue.NULL);
         return this;
     }
 
     @Override
     public JsonArrayBuilder add(final JsonObjectBuilder builder) {
-        addValue(tmpList.size(), builder.build());
+        addValue(builder.build());
         return this;
     }
 
     @Override
     public JsonArrayBuilder add(final JsonArrayBuilder builder) {
-        addValue(tmpList.size(), builder.build());
+        addValue(builder.build());
         return this;
     }
     
-    private void setValue(int idx, JsonValue value){
+    private void setValue(int idx, JsonValue value) {
         if (value == null || tmpList == null) {
             throw npe();
         }
         tmpList.set(idx, value);
     }
 
-    private void addValue(int idx, JsonValue value){
+    private void addValue(JsonValue value) {
+        if (value == null) {
+            throw npe();
+        }
+
+        if(tmpList==null){
+            tmpList=new ArrayList<>();
+        }
+
+        tmpList.add(value);
+    }
+
+    private void addValue(int idx, JsonValue value) {
         if (value == null) {
             throw npe();
         }

http://git-wip-us.apache.org/repos/asf/johnzon/blob/ea3bb867/johnzon-core/src/main/java/org/apache/johnzon/core/JsonInMemoryParser.java
----------------------------------------------------------------------
diff --git 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonInMemoryParser.java 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonInMemoryParser.java
index 9137139..481ea23 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonInMemoryParser.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonInMemoryParser.java
@@ -30,9 +30,8 @@ import javax.json.JsonString;
 import javax.json.JsonValue;
 import javax.json.JsonValue.ValueType;
 import javax.json.stream.JsonLocation;
-import javax.json.stream.JsonParser;
 
-class JsonInMemoryParser implements JsonParser {
+class JsonInMemoryParser implements JohnzonJsonParser {
 
     private final SimpleStack<Iterator<Event>> stack = new 
SimpleStack<Iterator<Event>>();
 
@@ -233,6 +232,11 @@ class JsonInMemoryParser implements JsonParser {
     }
 
     @Override
+    public boolean isNotTooLong() {
+        return true;
+    }
+
+    @Override
     public int getInt() {
         if (currentEvent != Event.VALUE_NUMBER) {
             throw new IllegalStateException("getInt is for numbers");

http://git-wip-us.apache.org/repos/asf/johnzon/blob/ea3bb867/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
----------------------------------------------------------------------
diff --git 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
index c7a3189..e3af4af 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.johnzon.core;
 
+
 import javax.json.JsonArray;
 import javax.json.JsonArrayBuilder;
 import javax.json.JsonNumber;
@@ -30,11 +31,15 @@ import javax.json.stream.JsonParser;
 import javax.json.stream.JsonParsingException;
 
 public class JsonReaderImpl implements JsonReader {
-    private final JsonStreamParserImpl parser;
+    private final JohnzonJsonParser parser;
     private boolean closed = false;
 
-    public JsonReaderImpl(final JsonStreamParserImpl parser) {
-        this.parser = parser;
+    public JsonReaderImpl(final JsonParser parser) {
+        if (parser instanceof JohnzonJsonParser) {
+            this.parser = (JohnzonJsonParser) parser;
+        } else {
+            this.parser = new 
JohnzonJsonParser.JohnzonJsonParserWrapper(parser);
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/johnzon/blob/ea3bb867/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
----------------------------------------------------------------------
diff --git 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
index 876ec78..44ba2fd 100644
--- 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
+++ 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
@@ -20,7 +20,6 @@ package org.apache.johnzon.core;
 
 import javax.json.JsonException;
 import javax.json.stream.JsonLocation;
-import javax.json.stream.JsonParser;
 import javax.json.stream.JsonParsingException;
 import java.io.IOException;
 import java.io.InputStream;
@@ -31,7 +30,7 @@ import java.nio.charset.Charset;
 import java.util.NoSuchElementException;
 
 //This class represents either the Json tokenizer and the Json parser.
-public class JsonStreamParserImpl implements JsonChars, JsonParser{
+public class JsonStreamParserImpl implements JsonChars, JohnzonJsonParser {
 
     //the main buffer where the stream will be buffered
     private final char[] buffer;
@@ -839,6 +838,11 @@ public class JsonStreamParserImpl implements JsonChars, 
JsonParser{
     }
 
     @Override
+    public boolean isNotTooLong() {
+        return (endOfValueInBuffer - startOfValueInBuffer) < 19;
+    }
+
+    @Override
     public int getInt() {
         if (previousEvent != VALUE_NUMBER) {
             throw new IllegalStateException(EVT_MAP[previousEvent] + " doesn't 
support getInt()");

Reply via email to