X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fjackson%2FSimpleMapper.java;h=5c95bec1283a852d96b2494585ccaac70d227896;hb=952e653411a6ac4ddfda5b9b8c837ad50103d75e;hp=33133f6cb9f63c17442535063f2a2bb5fa160794;hpb=bce221a3de2e3d3cdb28d3c56bad8f6760ae4900;p=maven-thymeleaf-skin diff --git a/src/main/java/de/juplo/jackson/SimpleMapper.java b/src/main/java/de/juplo/jackson/SimpleMapper.java index 33133f6..5c95bec 100644 --- a/src/main/java/de/juplo/jackson/SimpleMapper.java +++ b/src/main/java/de/juplo/jackson/SimpleMapper.java @@ -5,14 +5,17 @@ import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonLocation; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; +import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.util.Collections; +import java.io.Reader; +import java.net.URL; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.NoSuchElementException; import java.util.Spliterator; import static java.util.Spliterator.IMMUTABLE; @@ -35,16 +38,395 @@ public class SimpleMapper LoggerFactory.getLogger(SimpleMapper.class); - private JsonFactory factory = new JsonFactory(); + private final JsonFactory factory; - public static Stream getArrayStream(final JsonParser parser) + public SimpleMapper(JsonFactory factory) + { + this.factory = factory; + } + + + public Spliterator getArraySpliterator(File file) throws IOException { - return StreamSupport.stream(getArraySpliterator(parser), false); + return getArraySpliterator(factory.createParser(file)); + } + + public Spliterator getArraySpliterator(InputStream is) + throws + IOException + { + return getArraySpliterator(factory.createParser(is)); + } + + public Spliterator getArraySpliterator(Reader r) + throws + IOException + { + return getArraySpliterator(factory.createParser(r)); + } + + public Spliterator getArraySpliterator(String content) + throws + IOException + { + return getArraySpliterator(factory.createParser(content)); + } + + public Spliterator getArraySpliterator(URL url) + throws + IOException + { + return getArraySpliterator(factory.createParser(url)); + } + + public Spliterator getArraySpliterator(byte[] data) + throws + IOException + { + return getArraySpliterator(factory.createParser(data)); + } + + public Spliterator getArraySpliterator(char[] content) + throws + IOException + { + return getArraySpliterator(factory.createParser(content)); + } + + public Spliterator getArraySpliterator(byte[] data, int offset, int len) + throws + IOException + { + return getArraySpliterator(factory.createParser(data, offset, len)); + } + + public Spliterator getArraySpliterator(char[] data, int offset, int len) + throws + IOException + { + return getArraySpliterator(factory.createParser(data, offset, len)); + } + + public Stream getArrayStream(File file) + throws + IOException + { + return getArrayStream(factory.createParser(file)); + } + + public Stream getArrayStream(InputStream is) + throws + IOException + { + return getArrayStream(factory.createParser(is)); + } + + public Stream getArrayStream(Reader r) + throws + IOException + { + return getArrayStream(factory.createParser(r)); + } + + public Stream getArrayStream(String content) + throws + IOException + { + return getArrayStream(factory.createParser(content)); + } + + public Stream getArrayStream(URL url) + throws + IOException + { + return getArrayStream(factory.createParser(url)); + } + + public Stream getArrayStream(byte[] data) + throws + IOException + { + return getArrayStream(factory.createParser(data)); + } + + public Stream getArrayStream(char[] content) + throws + IOException + { + return getArrayStream(factory.createParser(content)); + } + + public Stream getArrayStream(byte[] data, int offset, int len) + throws + IOException + { + return getArrayStream(factory.createParser(data, offset, len)); + } + + public Stream getArrayStream(char[] data, int offset, int len) + throws + IOException + { + return getArrayStream(factory.createParser(data, offset, len)); + } + + public Iterator getArrayIterator(File file) + throws + IOException + { + return getArrayIterator(factory.createParser(file)); + } + + public Iterator getArrayIterator(InputStream is) + throws + IOException + { + return getArrayIterator(factory.createParser(is)); + } + + public Iterator getArrayIterator(Reader r) + throws + IOException + { + return getArrayIterator(factory.createParser(r)); + } + + public Iterator getArrayIterator(String content) + throws + IOException + { + return getArrayIterator(factory.createParser(content)); + } + + public Iterator getArrayIterator(URL url) + throws + IOException + { + return getArrayIterator(factory.createParser(url)); + } + + public Iterator getArrayIterator(byte[] data) + throws + IOException + { + return getArrayIterator(factory.createParser(data)); + } + + public Iterator getArrayIterator(char[] content) + throws + IOException + { + return getArrayIterator(factory.createParser(content)); + } + + public Iterator getArrayIterator(byte[] data, int offset, int len) + throws + IOException + { + return getArrayIterator(factory.createParser(data, offset, len)); + } + + public Iterator getArrayIterator(char[] data, int offset, int len) + throws + IOException + { + return getArrayIterator(factory.createParser(data, offset, len)); + } + + + public Spliterator> getObjectSpliterator(File file) + throws + IOException + { + return getObjectSpliterator(factory.createParser(file)); + } + + public Spliterator> getObjectSpliterator(InputStream is) + throws + IOException + { + return getObjectSpliterator(factory.createParser(is)); + } + + public Spliterator> getObjectSpliterator(Reader r) + throws + IOException + { + return getObjectSpliterator(factory.createParser(r)); + } + + public Spliterator> getObjectSpliterator(String content) + throws + IOException + { + return getObjectSpliterator(factory.createParser(content)); + } + + public Spliterator> getObjectSpliterator(URL url) + throws + IOException + { + return getObjectSpliterator(factory.createParser(url)); + } + + public Spliterator> getObjectSpliterator(byte[] data) + throws + IOException + { + return getObjectSpliterator(factory.createParser(data)); + } + + public Spliterator> getObjectSpliterator(char[] content) + throws + IOException + { + return getObjectSpliterator(factory.createParser(content)); + } + + public Spliterator> getObjectSpliterator(byte[] data, int offset, int len) + throws + IOException + { + return getObjectSpliterator(factory.createParser(data, offset, len)); + } + + public Spliterator> getObjectSpliterator(char[] data, int offset, int len) + throws + IOException + { + return getObjectSpliterator(factory.createParser(data, offset, len)); + } + + public Stream> getObjectStream(File file) + throws + IOException + { + return getObjectStream(factory.createParser(file)); + } + + public Stream> getObjectStream(InputStream is) + throws + IOException + { + return getObjectStream(factory.createParser(is)); + } + + public Stream> getObjectStream(Reader r) + throws + IOException + { + return getObjectStream(factory.createParser(r)); + } + + public Stream> getObjectStream(String content) + throws + IOException + { + return getObjectStream(factory.createParser(content)); + } + + public Stream> getObjectStream(URL url) + throws + IOException + { + return getObjectStream(factory.createParser(url)); + } + + public Stream> getObjectStream(byte[] data) + throws + IOException + { + return getObjectStream(factory.createParser(data)); + } + + public Stream> getObjectStream(char[] content) + throws + IOException + { + return getObjectStream(factory.createParser(content)); + } + + public Stream> getObjectStream(byte[] data, int offset, int len) + throws + IOException + { + return getObjectStream(factory.createParser(data, offset, len)); + } + + public Stream> getObjectStream(char[] data, int offset, int len) + throws + IOException + { + return getObjectStream(factory.createParser(data, offset, len)); + } + + public Iterator> getObjectIterator(File file) + throws + IOException + { + return getObjectIterator(factory.createParser(file)); + } + + public Iterator> getObjectIterator(InputStream is) + throws + IOException + { + return getObjectIterator(factory.createParser(is)); + } + + public Iterator> getObjectIterator(Reader r) + throws + IOException + { + return getObjectIterator(factory.createParser(r)); + } + + public Iterator> getObjectIterator(String content) + throws + IOException + { + return getObjectIterator(factory.createParser(content)); + } + + public Iterator> getObjectIterator(URL url) + throws + IOException + { + return getObjectIterator(factory.createParser(url)); + } + + public Iterator> getObjectIterator(byte[] data) + throws + IOException + { + return getObjectIterator(factory.createParser(data)); + } + + public Iterator> getObjectIterator(char[] content) + throws + IOException + { + return getObjectIterator(factory.createParser(content)); } + public Iterator> getObjectIterator(byte[] data, int offset, int len) + throws + IOException + { + return getObjectIterator(factory.createParser(data, offset, len)); + } + + public Iterator> getObjectIterator(char[] data, int offset, int len) + throws + IOException + { + return getObjectIterator(factory.createParser(data, offset, len)); + } + + public static Spliterator getArraySpliterator(final JsonParser parser) throws IOException @@ -101,6 +483,13 @@ public class SimpleMapper }; } + public static Stream getArrayStream(final JsonParser parser) + throws + IOException + { + return StreamSupport.stream(getArraySpliterator(parser), false); + } + public static Iterator getArrayIterator(final JsonParser parser) throws IOException @@ -109,7 +498,8 @@ public class SimpleMapper return new Iterator() { private Object next = null; - + + @Override public boolean hasNext() { @@ -139,7 +529,135 @@ public class SimpleMapper } - static Object convert(JsonParser parser) throws IOException + public static Spliterator> getObjectSpliterator(final JsonParser parser) + throws + IOException + { + JsonToken token = parser.nextToken(); + + if (token == null) + { + LOG.warn("empty input"); + return Spliterators.emptySpliterator(); + } + + if (!JsonToken.START_OBJECT.equals(token)) + fail(parser, "The root-element must be an array!"); + + return new Spliterator>() + { + @Override + public boolean tryAdvance(Consumer> action) + { + try + { + JsonToken token = parser.nextToken(); + if (token == null) + fail(parser, "Unexpected end of data!"); + if (JsonToken.END_OBJECT.equals(token)) + return false; + if (!JsonToken.FIELD_NAME.equals(token)) + fail(parser, "expected a field-name"); + final String key = parser.getText(); + parser.nextToken(); + final Object value = convert(parser); + action.accept(new Entry() + { + @Override + public String getKey() + { + return key; + } + + @Override + public Object getValue() + { + return value; + } + + @Override + public Object setValue(Object value) + { + throw new UnsupportedOperationException("Not supported."); + } + }); + return true; + } + catch (IOException e) + { + throw new IllegalArgumentException(e); + } + } + + @Override + public Spliterator> trySplit() + { + return null; + } + + @Override + public long estimateSize() + { + return Long.MAX_VALUE; + } + + @Override + public int characteristics() + { + return IMMUTABLE; + } + }; + } + + public static Stream> getObjectStream(final JsonParser parser) + throws + IOException + { + return StreamSupport.stream(getObjectSpliterator(parser), false); + } + + public static Iterator> getObjectIterator( + final JsonParser parser + ) + throws + IOException + { + Spliterator> spliterator = getObjectSpliterator(parser); + return new Iterator>() + { + private Entry next = null; + + + @Override + public boolean hasNext() + { + if (next != null) + return true; + + return spliterator.tryAdvance(new Consumer>() + { + @Override + public void accept(Entry e) + { + next = e; + } + }); + } + + @Override + public Entry next() + { + if (next == null && !hasNext()) + throw new NoSuchElementException(); + Entry e = next; + next = null; + return e; + } + }; + } + + + public static Object convert(JsonParser parser) throws IOException { JsonToken token = parser.getCurrentToken(); if (token == null) @@ -161,6 +679,7 @@ public class SimpleMapper return null; // << Will never be reached, because fail always throws an exception } + static Map convertObject(JsonParser parser) throws IOException { JsonToken token = parser.nextToken(); @@ -207,6 +726,7 @@ public class SimpleMapper return list; } + static void fail(JsonParser parser, String message) { JsonLocation location = parser.getCurrentLocation();