Skip to content

Commit 99e6cb8

Browse files
committed
Implemented a JsonParser and JsonDumper and removed gson
1 parent 62855b1 commit 99e6cb8

15 files changed

+375
-260
lines changed

pom.xml

-5
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,6 @@
4141
</scm>
4242

4343
<dependencies>
44-
<dependency>
45-
<groupId>com.google.code.gson</groupId>
46-
<artifactId>gson</artifactId>
47-
<version>2.8.9</version>
48-
</dependency>
4944
<dependency>
5045
<groupId>org.yaml</groupId>
5146
<artifactId>snakeyaml</artifactId>

src/main/java/org/javawebstack/abstractdata/AbstractArray.java

+3-19
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package org.javawebstack.abstractdata;
22

3-
import com.google.gson.JsonArray;
4-
import com.google.gson.JsonElement;
5-
63
import java.util.*;
74
import java.util.stream.Stream;
85

@@ -242,7 +239,7 @@ public int size() {
242239

243240
public boolean contains(Object o) {
244241
for (AbstractElement element : elements) {
245-
if (o instanceof AbstractElement ? ((AbstractElement) o).toAbstractObject().equals(element.toAbstractObject()) : element.toAbstractObject().equals(o))
242+
if (o instanceof AbstractElement ? ((AbstractElement) o).toObject().equals(element.toObject()) : element.toObject().equals(o))
246243
return true;
247244
}
248245
return false;
@@ -257,25 +254,12 @@ public Iterator<AbstractElement> iterator() {
257254
return elements.iterator();
258255
}
259256

260-
public JsonElement toJson() {
261-
JsonArray array = new JsonArray();
262-
elements.forEach(e -> array.add(e.toJson()));
263-
return array;
264-
}
265-
266-
public Object toAbstractObject() {
257+
public Object toObject() {
267258
List<Object> list = new ArrayList<>();
268-
elements.forEach(e -> list.add(e.toAbstractObject()));
259+
elements.forEach(e -> list.add(e.toObject()));
269260
return list;
270261
}
271262

272-
public static AbstractArray fromJson(JsonArray array) {
273-
AbstractArray a = new AbstractArray();
274-
array.forEach(e -> a.add(AbstractElement.fromJson(e)));
275-
return a;
276-
}
277-
278-
279263
public static AbstractArray fromArray(Object[] objects) {
280264
return new AbstractArray(objects);
281265
}

src/main/java/org/javawebstack/abstractdata/AbstractElement.java

+12-23
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package org.javawebstack.abstractdata;
22

3-
import com.google.gson.Gson;
4-
import com.google.gson.GsonBuilder;
5-
import com.google.gson.JsonElement;
3+
import org.javawebstack.abstractdata.json.JsonDumper;
4+
import org.javawebstack.abstractdata.json.JsonParser;
65
import org.javawebstack.abstractdata.util.QueryString;
76
import org.yaml.snakeyaml.DumperOptions;
87
import org.yaml.snakeyaml.Yaml;
98

9+
import java.text.ParseException;
1010
import java.util.HashMap;
1111
import java.util.List;
1212
import java.util.Map;
@@ -73,19 +73,15 @@ default Number number() {
7373
return primitive().number();
7474
}
7575

76-
JsonElement toJson();
77-
7876
default String toJsonString(boolean pretty) {
79-
if (pretty)
80-
return new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create().toJson(toJson());
81-
return new GsonBuilder().disableHtmlEscaping().create().toJson(toJson());
77+
return new JsonDumper().setPretty(pretty).dump(this);
8278
}
8379

8480
default String toJsonString() {
8581
return toJsonString(false);
8682
}
8783

88-
Object toAbstractObject();
84+
Object toObject();
8985

9086
default String toYaml(boolean pretty) {
9187
Yaml yaml;
@@ -97,7 +93,7 @@ default String toYaml(boolean pretty) {
9793
} else {
9894
yaml = new Yaml();
9995
}
100-
return yaml.dump(toAbstractObject());
96+
return yaml.dump(toObject());
10197
}
10298

10399
default String toYaml() {
@@ -162,20 +158,13 @@ default String toFormDataString() {
162158

163159
Map<String[], Object> toTree();
164160

165-
static AbstractElement fromJson(JsonElement element) {
166-
if (element == null)
167-
return null;
168-
if (element.isJsonArray())
169-
return AbstractArray.fromJson(element.getAsJsonArray());
170-
if (element.isJsonObject())
171-
return AbstractObject.fromJson(element.getAsJsonObject());
172-
if (element.isJsonPrimitive())
173-
return AbstractPrimitive.fromJson(element.getAsJsonPrimitive());
174-
return AbstractNull.INSTANCE;
175-
}
176-
177161
static AbstractElement fromJson(String json) {
178-
return fromJson(new GsonBuilder().create().fromJson(json, JsonElement.class));
162+
try {
163+
return new JsonParser().parse(json);
164+
} catch (ParseException e) {
165+
e.printStackTrace();
166+
return null;
167+
}
179168
}
180169

181170
static AbstractElement fromTree(Map<String[], Object> tree) {

src/main/java/org/javawebstack/abstractdata/AbstractMapper.java

+2-49
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,16 @@
11
package org.javawebstack.abstractdata;
22

3-
import com.google.gson.ExclusionStrategy;
4-
import com.google.gson.FieldAttributes;
5-
import com.google.gson.Gson;
6-
import com.google.gson.GsonBuilder;
7-
import com.google.gson.annotations.Expose;
83
import org.javawebstack.abstractdata.mapper.Mapper;
9-
import org.javawebstack.abstractdata.util.GsonAbstractDataAdapter;
104

115
public class AbstractMapper {
126

13-
// This allows
14-
public static boolean enableExperimentalMapper = false;
15-
16-
private Gson gson;
177
private final Mapper mapper = new Mapper();
188
private NamingPolicy namingPolicy = NamingPolicy.NONE;
199
private String dateFormat = "yyyy-MM-dd HH:mm:ss";
2010
private boolean exposeRequired = false;
2111

2212
public AbstractMapper setNamingPolicy(NamingPolicy namingPolicy) {
2313
this.namingPolicy = namingPolicy;
24-
gson = null;
2514
mapper.namingPolicy(namingPolicy.getMapperPolicy());
2615
return this;
2716
}
@@ -32,7 +21,6 @@ public NamingPolicy getNamingPolicy() {
3221

3322
public AbstractMapper setExposeRequired(boolean exposeRequired) {
3423
this.exposeRequired = exposeRequired;
35-
gson = null;
3624
mapper.requireExpose(exposeRequired);
3725
return this;
3826
}
@@ -43,7 +31,6 @@ public boolean isExposeRequired() {
4331

4432
public AbstractMapper setDateFormat(String dateFormat) {
4533
this.dateFormat = dateFormat;
46-
gson = null;
4734
mapper.dateFormat(dateFormat);
4835
return this;
4936
}
@@ -52,48 +39,14 @@ public String getDateFormat() {
5239
return dateFormat;
5340
}
5441

55-
private Gson gson() {
56-
if (gson != null)
57-
return gson;
58-
GsonBuilder builder = new GsonBuilder()
59-
.registerTypeAdapter(AbstractElement.class, new GsonAbstractDataAdapter<>())
60-
.registerTypeAdapter(AbstractObject.class, new GsonAbstractDataAdapter<>())
61-
.registerTypeAdapter(AbstractArray.class, new GsonAbstractDataAdapter<>())
62-
.registerTypeAdapter(AbstractPrimitive.class, new GsonAbstractDataAdapter<>())
63-
.registerTypeAdapter(AbstractNull.class, new GsonAbstractDataAdapter<>())
64-
.setFieldNamingPolicy(namingPolicy.getGsonPolicy())
65-
.disableHtmlEscaping();
66-
if (dateFormat != null)
67-
builder.setDateFormat(dateFormat);
68-
if (exposeRequired) {
69-
builder.excludeFieldsWithoutExposeAnnotation();
70-
} else {
71-
builder.setExclusionStrategies(new ExclusionStrategy() {
72-
public boolean shouldSkipField(FieldAttributes fieldAttributes) {
73-
return fieldAttributes.getAnnotation(Expose.class) != null && !fieldAttributes.getAnnotation(Expose.class).serialize();
74-
}
75-
76-
public boolean shouldSkipClass(Class<?> aClass) {
77-
return false;
78-
}
79-
});
80-
}
81-
gson = builder.create();
82-
return gson;
83-
}
84-
8542
public AbstractElement toAbstract(Object object) {
86-
if(enableExperimentalMapper)
87-
return mapper.map(object);
88-
return AbstractElement.fromJson(gson().toJsonTree(object));
43+
return mapper.map(object);
8944
}
9045

9146
public <T> T fromAbstract(AbstractElement element, Class<T> type) {
9247
if (element == null)
9348
return null;
94-
if(enableExperimentalMapper)
95-
return mapper.map(element, type);
96-
return gson().fromJson(element.toJson(), type);
49+
return mapper.map(element, type);
9750
}
9851

9952

src/main/java/org/javawebstack/abstractdata/AbstractNull.java

+1-8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package org.javawebstack.abstractdata;
22

3-
import com.google.gson.JsonElement;
4-
import com.google.gson.JsonNull;
5-
63
import java.util.HashMap;
74
import java.util.Map;
85

@@ -17,11 +14,7 @@ public boolean isNull() {
1714
return true;
1815
}
1916

20-
public JsonElement toJson() {
21-
return JsonNull.INSTANCE;
22-
}
23-
24-
public Object toAbstractObject() {
17+
public Object toObject() {
2518
return null;
2619
}
2720

src/main/java/org/javawebstack/abstractdata/AbstractObject.java

+3-18
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package org.javawebstack.abstractdata;
22

3-
import com.google.gson.JsonElement;
4-
import com.google.gson.JsonObject;
5-
63
import java.lang.reflect.Field;
74
import java.util.HashMap;
85
import java.util.LinkedHashMap;
@@ -154,24 +151,12 @@ public Number number(String key, Number orElse) {
154151
return query(key, new AbstractPrimitive(orElse)).number();
155152
}
156153

157-
public JsonElement toJson() {
158-
JsonObject object = new JsonObject();
159-
entries.forEach((k, v) -> object.add(k, v.toJson()));
160-
return object;
161-
}
162-
163-
public Object toAbstractObject() {
154+
public Object toObject() {
164155
Map<String, Object> map = new HashMap<>();
165-
forEach((k, v) -> map.put(k, v.toAbstractObject()));
156+
forEach((k, v) -> map.put(k, v.toObject()));
166157
return map;
167158
}
168159

169-
public static AbstractObject fromJson(JsonObject object) {
170-
AbstractObject o = new AbstractObject();
171-
object.entrySet().stream().map(Map.Entry::getKey).forEach(k -> o.set(k, AbstractElement.fromJson(object.get(k))));
172-
return o;
173-
}
174-
175160
public Type getType() {
176161
return Type.OBJECT;
177162
}
@@ -189,7 +174,7 @@ public <T> T fill(Object object) {
189174
field.setAccessible(true);
190175

191176
try {
192-
field.set(object, get(field.getName()).toAbstractObject());
177+
field.set(object, get(field.getName()).toObject());
193178
} catch (IllegalAccessException e) {
194179
e.printStackTrace();
195180
}

src/main/java/org/javawebstack/abstractdata/AbstractPrimitive.java

+1-24
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package org.javawebstack.abstractdata;
22

3-
import com.google.gson.JsonElement;
4-
import com.google.gson.JsonPrimitive;
5-
63
import java.util.HashMap;
74
import java.util.Map;
85

@@ -59,17 +56,7 @@ public Object value() {
5956
return value;
6057
}
6158

62-
public JsonElement toJson() {
63-
if (isString())
64-
return new JsonPrimitive(string());
65-
if (isBoolean())
66-
return new JsonPrimitive(bool());
67-
if (isNumber())
68-
return new JsonPrimitive(number());
69-
return null;
70-
}
71-
72-
public Object toAbstractObject() {
59+
public Object toObject() {
7360
return value;
7461
}
7562

@@ -79,16 +66,6 @@ public Map<String[], Object> toTree() {
7966
return tree;
8067
}
8168

82-
public static AbstractPrimitive fromJson(JsonPrimitive primitive) {
83-
if (primitive == null)
84-
return null;
85-
if (primitive.isNumber())
86-
return new AbstractPrimitive(primitive.getAsNumber());
87-
if (primitive.isBoolean())
88-
return new AbstractPrimitive(primitive.getAsBoolean());
89-
return new AbstractPrimitive(primitive.getAsString());
90-
}
91-
9269
public static AbstractPrimitive from(Object object) {
9370
if (object instanceof Number)
9471
return new AbstractPrimitive((Number) object);
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,21 @@
11
package org.javawebstack.abstractdata;
22

3-
import com.google.gson.FieldNamingPolicy;
4-
53
public enum NamingPolicy {
6-
NONE(FieldNamingPolicy.IDENTITY, org.javawebstack.abstractdata.mapper.naming.NamingPolicy.NONE),
7-
CAMEL_CASE(FieldNamingPolicy.IDENTITY, org.javawebstack.abstractdata.mapper.naming.NamingPolicy.CAMEL_CASE),
8-
PASCAL_CASE(FieldNamingPolicy.UPPER_CAMEL_CASE, org.javawebstack.abstractdata.mapper.naming.NamingPolicy.PASCAL_CASE),
9-
SNAKE_CASE(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES, org.javawebstack.abstractdata.mapper.naming.NamingPolicy.SNAKE_CASE),
10-
KEBAB_CASE(FieldNamingPolicy.LOWER_CASE_WITH_DASHES, org.javawebstack.abstractdata.mapper.naming.NamingPolicy.KEBAB_CASE);
4+
5+
NONE(org.javawebstack.abstractdata.mapper.naming.NamingPolicy.NONE),
6+
CAMEL_CASE(org.javawebstack.abstractdata.mapper.naming.NamingPolicy.CAMEL_CASE),
7+
PASCAL_CASE(org.javawebstack.abstractdata.mapper.naming.NamingPolicy.PASCAL_CASE),
8+
SNAKE_CASE(org.javawebstack.abstractdata.mapper.naming.NamingPolicy.SNAKE_CASE),
9+
KEBAB_CASE(org.javawebstack.abstractdata.mapper.naming.NamingPolicy.KEBAB_CASE);
1110

12-
private final FieldNamingPolicy gsonPolicy;
1311
private final org.javawebstack.abstractdata.mapper.naming.NamingPolicy mapperPolicy;
1412

15-
NamingPolicy(FieldNamingPolicy gsonPolicy, org.javawebstack.abstractdata.mapper.naming.NamingPolicy mapperPolicy) {
16-
this.gsonPolicy = gsonPolicy;
13+
NamingPolicy(org.javawebstack.abstractdata.mapper.naming.NamingPolicy mapperPolicy) {
1714
this.mapperPolicy = mapperPolicy;
1815
}
1916

20-
public FieldNamingPolicy getGsonPolicy() {
21-
return gsonPolicy;
22-
}
23-
2417
public org.javawebstack.abstractdata.mapper.naming.NamingPolicy getMapperPolicy() {
2518
return mapperPolicy;
2619
}
20+
2721
}

0 commit comments

Comments
 (0)