Skip to content

Commit 62855b1

Browse files
committed
Implemented a new mapper as a replacement for gson.
1 parent 3cdd672 commit 62855b1

19 files changed

+909
-10
lines changed

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,24 @@
55
import com.google.gson.Gson;
66
import com.google.gson.GsonBuilder;
77
import com.google.gson.annotations.Expose;
8+
import org.javawebstack.abstractdata.mapper.Mapper;
89
import org.javawebstack.abstractdata.util.GsonAbstractDataAdapter;
910

1011
public class AbstractMapper {
1112

13+
// This allows
14+
public static boolean enableExperimentalMapper = false;
15+
1216
private Gson gson;
17+
private final Mapper mapper = new Mapper();
1318
private NamingPolicy namingPolicy = NamingPolicy.NONE;
1419
private String dateFormat = "yyyy-MM-dd HH:mm:ss";
1520
private boolean exposeRequired = false;
1621

1722
public AbstractMapper setNamingPolicy(NamingPolicy namingPolicy) {
1823
this.namingPolicy = namingPolicy;
1924
gson = null;
25+
mapper.namingPolicy(namingPolicy.getMapperPolicy());
2026
return this;
2127
}
2228

@@ -27,6 +33,7 @@ public NamingPolicy getNamingPolicy() {
2733
public AbstractMapper setExposeRequired(boolean exposeRequired) {
2834
this.exposeRequired = exposeRequired;
2935
gson = null;
36+
mapper.requireExpose(exposeRequired);
3037
return this;
3138
}
3239

@@ -37,6 +44,7 @@ public boolean isExposeRequired() {
3744
public AbstractMapper setDateFormat(String dateFormat) {
3845
this.dateFormat = dateFormat;
3946
gson = null;
47+
mapper.dateFormat(dateFormat);
4048
return this;
4149
}
4250

@@ -75,12 +83,16 @@ public boolean shouldSkipClass(Class<?> aClass) {
7583
}
7684

7785
public AbstractElement toAbstract(Object object) {
86+
if(enableExperimentalMapper)
87+
return mapper.map(object);
7888
return AbstractElement.fromJson(gson().toJsonTree(object));
7989
}
8090

8191
public <T> T fromAbstract(AbstractElement element, Class<T> type) {
8292
if (element == null)
8393
return null;
94+
if(enableExperimentalMapper)
95+
return mapper.map(element, type);
8496
return gson().fromJson(element.toJson(), type);
8597
}
8698

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55

66
import java.lang.reflect.Field;
77
import java.util.HashMap;
8+
import java.util.LinkedHashMap;
89
import java.util.Map;
910
import java.util.Set;
1011
import java.util.function.BiConsumer;
1112

1213
public class AbstractObject implements AbstractElement {
1314

14-
private final Map<String, AbstractElement> entries = new HashMap<>();
15+
private final Map<String, AbstractElement> entries = new LinkedHashMap<>();
1516

1617
public AbstractObject setNull(String key) {
1718
set(key, AbstractNull.INSTANCE);

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

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,25 @@
33
import com.google.gson.FieldNamingPolicy;
44

55
public enum NamingPolicy {
6-
NONE(FieldNamingPolicy.IDENTITY),
7-
CAMEL_CASE(FieldNamingPolicy.IDENTITY),
8-
PASCAL_CASE(FieldNamingPolicy.UPPER_CAMEL_CASE),
9-
SNAKE_CASE(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES),
10-
KEBAB_CASE(FieldNamingPolicy.LOWER_CASE_WITH_DASHES);
11-
private final FieldNamingPolicy policy;
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);
1211

13-
NamingPolicy(FieldNamingPolicy policy) {
14-
this.policy = policy;
12+
private final FieldNamingPolicy gsonPolicy;
13+
private final org.javawebstack.abstractdata.mapper.naming.NamingPolicy mapperPolicy;
14+
15+
NamingPolicy(FieldNamingPolicy gsonPolicy, org.javawebstack.abstractdata.mapper.naming.NamingPolicy mapperPolicy) {
16+
this.gsonPolicy = gsonPolicy;
17+
this.mapperPolicy = mapperPolicy;
1518
}
1619

1720
public FieldNamingPolicy getGsonPolicy() {
18-
return policy;
21+
return gsonPolicy;
22+
}
23+
24+
public org.javawebstack.abstractdata.mapper.naming.NamingPolicy getMapperPolicy() {
25+
return mapperPolicy;
1926
}
2027
}

0 commit comments

Comments
 (0)