diff --git a/ebean-core-json/pom.xml b/ebean-core-json/pom.xml new file mode 100644 index 0000000000..2a46279977 --- /dev/null +++ b/ebean-core-json/pom.xml @@ -0,0 +1,31 @@ + + 4.0.0 + + io.ebean + ebean-parent + 16.0.0-RC3 + + ebean-core-json + + scm:git:git@github.com:ebean-orm/ebean.git + HEAD + + + + + io.ebean + ebean-api + 16.0.0-RC3 + + + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + true + + + + + diff --git a/ebean-core/src/main/java/io/ebeaninternal/json/DJsonService.java b/ebean-core-json/src/main/java/io/ebeaninternal/json/DJsonService.java similarity index 93% rename from ebean-core/src/main/java/io/ebeaninternal/json/DJsonService.java rename to ebean-core-json/src/main/java/io/ebeaninternal/json/DJsonService.java index aa3443ced1..f286bae4df 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/json/DJsonService.java +++ b/ebean-core-json/src/main/java/io/ebeaninternal/json/DJsonService.java @@ -8,11 +8,7 @@ import java.io.IOException; import java.io.Reader; import java.io.Writer; -import java.util.Collection; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * Utility that converts between JSON content and simple java Maps/Lists. @@ -52,8 +48,8 @@ public void writeCollection(Collection collection, JsonGenerator jsonGen } /** - * Parse the json and return as a Map additionally specifying if the returned map should - * be modify aware meaning that it can detect when it has been modified. + * Parse the json and return as a Map additionally specifying if the returned map should be modify + * aware meaning that it can detect when it has been modified. */ @Override public Map parseObject(String json, boolean modifyAware) throws IOException { @@ -94,9 +90,8 @@ public Map parseObject(JsonParser parser) throws IOException { /** * Parse the json and return as a Map taking a JsonParser and a starting token. - *

- * Used when the first token is checked to see if the value is null prior to calling this. - *

+ * + *

Used when the first token is checked to see if the value is null prior to calling this. */ @Override public Map parseObject(JsonParser parser, JsonToken token) throws IOException { diff --git a/ebean-core/src/main/java/io/ebeaninternal/json/EJsonReader.java b/ebean-core-json/src/main/java/io/ebeaninternal/json/EJsonReader.java similarity index 96% rename from ebean-core/src/main/java/io/ebeaninternal/json/EJsonReader.java rename to ebean-core-json/src/main/java/io/ebeaninternal/json/EJsonReader.java index 938f7f5a99..7c808979f9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/json/EJsonReader.java +++ b/ebean-core-json/src/main/java/io/ebeaninternal/json/EJsonReader.java @@ -8,15 +8,23 @@ import java.io.IOException; import java.io.Reader; import java.io.StringReader; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.NoSuchElementException; +import java.util.*; final class EJsonReader { static final JsonFactory json = new JsonFactory(); + private final JsonParser parser; + private final boolean modifyAware; + private final ModifyAwareFlag modifyAwareOwner; + private int depth; + private Stack stack; + private Context currentContext; + + EJsonReader(JsonParser parser, boolean modifyAware) { + this.parser = parser; + this.modifyAware = modifyAware; + this.modifyAwareOwner = modifyAware ? new ModifyAwareFlag() : null; + } @SuppressWarnings("unchecked") static Map parseObject(String json, boolean modifyAware) throws IOException { @@ -102,24 +110,6 @@ static Object parse(JsonParser parser, JsonToken token, boolean modifyAware) thr return new EJsonReader(parser, modifyAware).parseJson(token); } - private final JsonParser parser; - - private final boolean modifyAware; - - private final ModifyAwareFlag modifyAwareOwner; - - private int depth; - - private Stack stack; - - private Context currentContext; - - EJsonReader(JsonParser parser, boolean modifyAware) { - this.parser = parser; - this.modifyAware = modifyAware; - this.modifyAwareOwner = (modifyAware) ? new ModifyAwareFlag() : null; - } - private void startArray() { depth++; stack.push(currentContext); @@ -197,7 +187,6 @@ private Object parseJson(JsonToken token) throws IOException { */ private void processJsonToken(JsonToken token) throws IOException { switch (token) { - case START_ARRAY: startArray(); break; @@ -273,17 +262,17 @@ private boolean isEmpty() { } } - private static abstract class Context { + private abstract static class Context { Context next; abstract void popContext(Context temp); abstract Object getValue(); - abstract void setKey(String key); - abstract void setValue(Object value); + abstract void setKey(String key); + abstract void setValueNull(); } @@ -312,13 +301,13 @@ Object getValue() { } @Override - void setKey(String key) { - this.key = key; + void setValue(Object value) { + map.put(key, value); } @Override - void setValue(Object value) { - map.put(key, value); + void setKey(String key) { + this.key = key; } @Override @@ -364,5 +353,4 @@ void setKey(String key) { // not expected } } - } diff --git a/ebean-core/src/main/java/io/ebeaninternal/json/EJsonWriter.java b/ebean-core-json/src/main/java/io/ebeaninternal/json/EJsonWriter.java similarity index 99% rename from ebean-core/src/main/java/io/ebeaninternal/json/EJsonWriter.java rename to ebean-core-json/src/main/java/io/ebeaninternal/json/EJsonWriter.java index 2a05f306d8..ff73de8f99 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/json/EJsonWriter.java +++ b/ebean-core-json/src/main/java/io/ebeaninternal/json/EJsonWriter.java @@ -20,6 +20,11 @@ final class EJsonWriter { * Base jsonFactory implementation used when it is not passed in. */ static final JsonFactory jsonFactory = new JsonFactory(); + private final JsonGenerator jsonGenerator; + + private EJsonWriter(JsonGenerator jsonGenerator) { + this.jsonGenerator = jsonGenerator; + } static String write(Object object) throws IOException { StringWriter writer = new StringWriter(200); @@ -42,12 +47,6 @@ static void writeCollection(Collection collection, JsonGenerator jsonGen new EJsonWriter(jsonGenerator).writeCollection(null, collection); } - private final JsonGenerator jsonGenerator; - - private EJsonWriter(JsonGenerator jsonGenerator) { - this.jsonGenerator = jsonGenerator; - } - private void writeJson(Object object) { writeJson(null, object); } @@ -210,5 +209,4 @@ private void writeMap(String name, Map map) throws IOException { } jsonGenerator.writeEndObject(); } - } diff --git a/ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareFlag.java b/ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareFlag.java similarity index 99% rename from ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareFlag.java rename to ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareFlag.java index 08cdb273eb..f744470930 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareFlag.java +++ b/ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareFlag.java @@ -22,5 +22,4 @@ public boolean isMarkedDirty() { public void setMarkedDirty(boolean markedDirty) { this.markedDirty = markedDirty; } - } diff --git a/ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareIterator.java b/ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareIterator.java similarity index 91% rename from ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareIterator.java rename to ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareIterator.java index fb57f34474..25dfb1860a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareIterator.java +++ b/ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareIterator.java @@ -14,9 +14,8 @@ public final class ModifyAwareIterator implements Iterator { /** * Create with an Owner and the underlying Iterator this wraps. - *

- * The owner is notified of the removals. - *

+ * + *

The owner is notified of the removals. */ public ModifyAwareIterator(ModifyAwareType owner, Iterator it) { this.owner = owner; @@ -38,5 +37,4 @@ public void remove() { owner.setMarkedDirty(true); it.remove(); } - } diff --git a/ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareList.java b/ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareList.java similarity index 100% rename from ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareList.java rename to ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareList.java diff --git a/ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareListIterator.java b/ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareListIterator.java similarity index 100% rename from ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareListIterator.java rename to ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareListIterator.java diff --git a/ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareMap.java b/ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareMap.java similarity index 96% rename from ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareMap.java rename to ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareMap.java index 3f96979050..8a81df295b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareMap.java +++ b/ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareMap.java @@ -34,11 +34,11 @@ public String toString() { public boolean equals(Object o) { if (this == o) return true; if (o instanceof ModifyAwareMap) { - ModifyAwareMap that = (ModifyAwareMap) o; + ModifyAwareMap that = (ModifyAwareMap) o; return Objects.equals(map, that.map); } if (!(o instanceof Map)) return false; - Map that = (Map) o; + Map that = (Map) o; return Objects.equals(map, that); } @@ -112,7 +112,6 @@ public void putAll(Map m) { map.putAll(m); } - @Override public void clear() { if (!map.isEmpty()) { @@ -135,5 +134,4 @@ public Collection values() { public Set> entrySet() { return new ModifyAwareSet<>(this, map.entrySet()); } - } diff --git a/ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareSet.java b/ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareSet.java similarity index 100% rename from ebean-core/src/main/java/io/ebeaninternal/json/ModifyAwareSet.java rename to ebean-core-json/src/main/java/io/ebeaninternal/json/ModifyAwareSet.java diff --git a/ebean-core-json/src/main/java/module-info.java b/ebean-core-json/src/main/java/module-info.java new file mode 100644 index 0000000000..b7561ed62c --- /dev/null +++ b/ebean-core-json/src/main/java/module-info.java @@ -0,0 +1,9 @@ +module io.ebean.core.json { + + requires io.ebean.api; + + requires transitive com.fasterxml.jackson.core; + exports io.ebeaninternal.json to io.ebean.test, io.ebean.core; + + provides io.ebean.service.BootstrapService with io.ebeaninternal.json.DJsonService; +} diff --git a/ebean-core-json/src/main/resources/META-INF/services/io.ebean.service.BootstrapService b/ebean-core-json/src/main/resources/META-INF/services/io.ebean.service.BootstrapService new file mode 100644 index 0000000000..c9a07a220f --- /dev/null +++ b/ebean-core-json/src/main/resources/META-INF/services/io.ebean.service.BootstrapService @@ -0,0 +1 @@ +io.ebeaninternal.json.DJsonService \ No newline at end of file diff --git a/ebean-core/src/test/java/io/ebeaninternal/json/ModifyAwareMapTest.java b/ebean-core-json/src/test/java/io/ebeaninternal/json/ModifyAwareMapTest.java similarity index 100% rename from ebean-core/src/test/java/io/ebeaninternal/json/ModifyAwareMapTest.java rename to ebean-core-json/src/test/java/io/ebeaninternal/json/ModifyAwareMapTest.java diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml index 01a7ab26d0..605ec14309 100644 --- a/ebean-core/pom.xml +++ b/ebean-core/pom.xml @@ -25,6 +25,12 @@ 16.0.0-RC3 + + io.ebean + ebean-core-json + 16.0.0-RC3 + + io.ebean ebean-ddl-runner diff --git a/ebean-core/src/main/java/module-info.java b/ebean-core/src/main/java/module-info.java index 06977eec02..47f425cb6d 100644 --- a/ebean-core/src/main/java/module-info.java +++ b/ebean-core/src/main/java/module-info.java @@ -31,6 +31,7 @@ requires io.ebean.types; requires static io.avaje.jsr305x; + requires static io.ebean.core.json; requires static com.fasterxml.jackson.annotation; requires static com.fasterxml.jackson.core; requires static com.fasterxml.jackson.databind; @@ -49,7 +50,6 @@ exports io.ebeaninternal.api to io.ebean.ddl.generator, io.ebean.querybean, io.ebean.autotune, io.ebean.postgis, io.ebean.test, io.ebean.elastic, io.ebean.spring.txn, io.ebean.postgis.types; exports io.ebeaninternal.api.json to io.ebean.test; - exports io.ebeaninternal.json to io.ebean.test; exports io.ebeaninternal.server.autotune to io.ebean.autotune; exports io.ebeaninternal.server.core to io.ebean.test, io.ebean.elastic; exports io.ebeaninternal.server.core.bootup to io.ebean.test; @@ -78,7 +78,6 @@ io.ebeaninternal.server.query.DFetchGroupService, io.ebeaninternal.server.profile.DProfileLocationFactory, io.ebeaninternal.server.rawsql.DRawSqlService, - io.ebeaninternal.server.profile.DMetricFactory, - io.ebeaninternal.json.DJsonService; + io.ebeaninternal.server.profile.DMetricFactory; } diff --git a/ebean-core/src/main/resources/META-INF/services/io.ebean.service.BootstrapService b/ebean-core/src/main/resources/META-INF/services/io.ebean.service.BootstrapService index 6382832f83..5a674c9122 100644 --- a/ebean-core/src/main/resources/META-INF/services/io.ebean.service.BootstrapService +++ b/ebean-core/src/main/resources/META-INF/services/io.ebean.service.BootstrapService @@ -3,4 +3,3 @@ io.ebeaninternal.server.rawsql.DRawSqlService io.ebeaninternal.server.query.DFetchGroupService io.ebeaninternal.server.profile.DProfileLocationFactory io.ebeaninternal.server.profile.DMetricFactory -io.ebeaninternal.json.DJsonService diff --git a/pom.xml b/pom.xml index 09ec67c930..7ba50447e3 100644 --- a/pom.xml +++ b/pom.xml @@ -97,6 +97,7 @@ ebean-jackson-mapper ebean-spring-txn kotlin-querybean-generator + ebean-core-json