Skip to content

Commit 2d5ac52

Browse files
committed
Improvements
1 parent 304d84a commit 2d5ac52

6 files changed

Lines changed: 61 additions & 21 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package me.zort.sqllib.api;
2+
3+
import me.zort.sqllib.api.data.Row;
4+
import org.jetbrains.annotations.NotNull;
5+
6+
import java.lang.reflect.AnnotatedElement;
7+
import java.lang.reflect.Type;
8+
9+
public interface ObjectMapper {
10+
11+
void registerBackupValueResolver(@NotNull FieldValueResolver resolver);
12+
<T> T assignValues(Row row, Class<T> typeClass);
13+
14+
interface FieldValueResolver {
15+
Object obtainValue(SQLConnection connection,
16+
AnnotatedElement element,
17+
Row row,
18+
String fieldName,
19+
String convertedName,
20+
Type type);
21+
}
22+
}

core/src/main/java/me/zort/sqllib/SQLDatabaseConnectionImpl.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.google.gson.Gson;
44
import lombok.*;
5+
import me.zort.sqllib.api.ObjectMapper;
56
import me.zort.sqllib.api.Query;
67
import me.zort.sqllib.api.StatementFactory;
78
import me.zort.sqllib.api.data.QueryResult;
@@ -14,6 +15,7 @@
1415
import me.zort.sqllib.internal.fieldResolver.ConstructorParameterResolver;
1516
import me.zort.sqllib.internal.fieldResolver.LinkedOneFieldResolver;
1617
import me.zort.sqllib.internal.impl.DefaultNamingStrategy;
18+
import me.zort.sqllib.internal.impl.DefaultObjectMapper;
1719
import me.zort.sqllib.internal.impl.QueryResultImpl;
1820
import me.zort.sqllib.internal.query.*;
1921
import me.zort.sqllib.internal.query.part.SetStatement;
@@ -35,15 +37,19 @@
3537
*/
3638
public class SQLDatabaseConnectionImpl extends SQLDatabaseConnection {
3739

40+
// --***-- Default Constants --***--
41+
3842
public static boolean DEFAULT_AUTO_RECONNECT = true;
3943
public static boolean DEFAULT_DEBUG = false;
4044
public static boolean DEFAULT_LOG_SQL_ERRORS = true;
4145
public static NamingStrategy DEFAULT_NAMING_STRATEGY = new DefaultNamingStrategy();
4246
public static Gson DEFAULT_GSON = Defaults.DEFAULT_GSON;
4347

48+
// --***-- Options & Utilities --***--
49+
4450
@Getter
4551
private final SQLDatabaseOptions options;
46-
private final ObjectMapper objectMapper;
52+
private transient ObjectMapper objectMapper;
4753

4854
/**
4955
* Constructs new instance of this implementation with default
@@ -74,7 +80,7 @@ public SQLDatabaseConnectionImpl(SQLConnectionFactory connectionFactory, @Nullab
7480
);
7581

7682
this.options = options;
77-
this.objectMapper = new ObjectMapper(this);
83+
this.objectMapper = new DefaultObjectMapper(this);
7884

7985
// Default backup value resolvers.
8086
registerBackupValueResolver(new LinkedOneFieldResolver());
@@ -84,7 +90,11 @@ public SQLDatabaseConnectionImpl(SQLConnectionFactory connectionFactory, @Nullab
8490
public void registerBackupValueResolver(@NotNull ObjectMapper.FieldValueResolver resolver) {
8591
Objects.requireNonNull(resolver, "Resolver cannot be null!");
8692

87-
objectMapper.getBackupValueResolvers().add(resolver);
93+
objectMapper.registerBackupValueResolver(resolver);
94+
}
95+
96+
public void setObjectMapper(@NotNull ObjectMapper objectMapper) {
97+
this.objectMapper = Objects.requireNonNull(objectMapper, "Object mapper cannot be null!");
8898
}
8999

90100
/**

core/src/main/java/me/zort/sqllib/SQLDatabaseOptions.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class SQLDatabaseOptions {
1616
private boolean autoReconnect = true;
1717
private boolean debug = false;
1818
private boolean logSqlErrors = true;
19-
private NamingStrategy namingStrategy = new DefaultNamingStrategy();
20-
private Gson gson = Defaults.DEFAULT_GSON;
19+
private transient NamingStrategy namingStrategy = new DefaultNamingStrategy();
20+
private transient Gson gson = Defaults.DEFAULT_GSON;
2121

2222
}

core/src/main/java/me/zort/sqllib/internal/fieldResolver/ConstructorParameterResolver.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package me.zort.sqllib.internal.fieldResolver;
22

3-
import me.zort.sqllib.ObjectMapper;
43
import me.zort.sqllib.SQLDatabaseConnectionImpl;
4+
import me.zort.sqllib.api.ObjectMapper;
5+
import me.zort.sqllib.api.SQLConnection;
56
import me.zort.sqllib.api.data.Row;
67
import me.zort.sqllib.util.Validator;
78
import org.jetbrains.annotations.ApiStatus;
@@ -16,7 +17,7 @@ public class ConstructorParameterResolver implements ObjectMapper.FieldValueReso
1617
private static final Pattern argumentPattern = Pattern.compile("(arg)(\\d+)");
1718

1819
@Override
19-
public Object obtainValue(SQLDatabaseConnectionImpl connection,
20+
public Object obtainValue(SQLConnection connection,
2021
AnnotatedElement element,
2122
Row row,
2223
String fieldName,

core/src/main/java/me/zort/sqllib/internal/fieldResolver/LinkedOneFieldResolver.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package me.zort.sqllib.internal.fieldResolver;
22

3-
import me.zort.sqllib.ObjectMapper;
43
import me.zort.sqllib.SQLDatabaseConnectionImpl;
4+
import me.zort.sqllib.api.ObjectMapper;
5+
import me.zort.sqllib.api.SQLConnection;
56
import me.zort.sqllib.api.data.Row;
67
import me.zort.sqllib.api.provider.Select;
78
import me.zort.sqllib.internal.annotation.LinkedOne;
@@ -20,12 +21,18 @@
2021
public class LinkedOneFieldResolver implements ObjectMapper.FieldValueResolver {
2122

2223
@Override
23-
public Object obtainValue(SQLDatabaseConnectionImpl connection,
24+
public Object obtainValue(SQLConnection _connection,
2425
AnnotatedElement element,
2526
Row row,
2627
String fieldName,
2728
String convertedName,
2829
Type type) {
30+
31+
if(!(_connection instanceof SQLDatabaseConnectionImpl))
32+
return null;
33+
34+
SQLDatabaseConnectionImpl connection = (SQLDatabaseConnectionImpl) _connection;
35+
2936
if(!element.isAnnotationPresent(LinkedOne.class)) {
3037
// This makes mapping function hop to the next resolver.
3138
return null;

core/src/main/java/me/zort/sqllib/ObjectMapper.java renamed to core/src/main/java/me/zort/sqllib/internal/impl/DefaultObjectMapper.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,37 @@
1-
package me.zort.sqllib;
1+
package me.zort.sqllib.internal.impl;
22

33
import com.google.gson.Gson;
44
import lombok.AccessLevel;
55
import lombok.Getter;
6+
import me.zort.sqllib.SQLDatabaseConnectionImpl;
7+
import me.zort.sqllib.api.ObjectMapper;
68
import me.zort.sqllib.api.data.Row;
79
import me.zort.sqllib.internal.annotation.JsonField;
10+
import org.jetbrains.annotations.NotNull;
811
import org.jetbrains.annotations.Nullable;
912

1013
import java.lang.reflect.*;
1114
import java.util.List;
1215
import java.util.concurrent.CopyOnWriteArrayList;
1316

14-
public class ObjectMapper {
17+
public class DefaultObjectMapper implements ObjectMapper {
1518

1619
@Getter(AccessLevel.PROTECTED)
17-
private final List<FieldValueResolver> backupValueResolvers;
20+
private final List<ObjectMapper.FieldValueResolver> backupValueResolvers;
1821
// Resolvers used after no value is found for the field
1922
// in mapped object as backup.
2023
private final SQLDatabaseConnectionImpl connectionWrapper;
2124

22-
public ObjectMapper(SQLDatabaseConnectionImpl connectionWrapper) {
25+
public DefaultObjectMapper(SQLDatabaseConnectionImpl connectionWrapper) {
2326
this.backupValueResolvers = new CopyOnWriteArrayList<>();
2427
this.connectionWrapper = connectionWrapper;
2528
}
2629

30+
@Override
31+
public void registerBackupValueResolver(@NotNull FieldValueResolver resolver) {
32+
this.backupValueResolvers.add(resolver);
33+
}
34+
2735
@Nullable
2836
public <T> T assignValues(Row row, Class<T> typeClass) {
2937
T instance = null;
@@ -118,12 +126,4 @@ private void debug(String message) {
118126
connectionWrapper.debug(message);
119127
}
120128

121-
public interface FieldValueResolver {
122-
Object obtainValue(SQLDatabaseConnectionImpl connection,
123-
AnnotatedElement element,
124-
Row row,
125-
String fieldName,
126-
String convertedName,
127-
Type type);
128-
}
129129
}

0 commit comments

Comments
 (0)