Skip to content

Commit 77f66c3

Browse files
author
mpv1989
committed
added support for replacing build-in VelocyPack serializer/deserializer
1 parent 91af9e3 commit 77f66c3

File tree

5 files changed

+56
-37
lines changed

5 files changed

+56
-37
lines changed

ChangeLog

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ v4.1.11 (2017-03-xx)
66
* added connection pooling (issue #103)
77
* extracted VelocyPack implementation to https://github.com/arangodb/java-velocypack
88
* added dependency java-velocypack-module-jdk8
9+
* added support for replacing build-in VelocyPack serializer/deserializer
910

1011
v4.1.10 (2017-02-22)
1112
---------------------------

src/main/java/com/arangodb/ArangoDBAsync.java

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@
4141
import com.arangodb.internal.CollectionCache.DBAccess;
4242
import com.arangodb.internal.DocumentCache;
4343
import com.arangodb.internal.InternalArangoDB;
44+
import com.arangodb.internal.util.ArangoDeserializerImpl;
45+
import com.arangodb.internal.util.ArangoSerializerImpl;
46+
import com.arangodb.internal.util.ArangoUtilImpl;
4447
import com.arangodb.internal.velocypack.VPackDriverModule;
4548
import com.arangodb.internal.velocystream.Communication;
4649
import com.arangodb.internal.velocystream.CommunicationAsync;
@@ -53,6 +56,9 @@
5356
import com.arangodb.model.LogOptions;
5457
import com.arangodb.model.UserCreateOptions;
5558
import com.arangodb.model.UserUpdateOptions;
59+
import com.arangodb.util.ArangoDeserializer;
60+
import com.arangodb.util.ArangoSerializer;
61+
import com.arangodb.util.ArangoUtil;
5662
import com.arangodb.velocypack.VPack;
5763
import com.arangodb.velocypack.VPackAnnotationFieldFilter;
5864
import com.arangodb.velocypack.VPackAnnotationFieldNaming;
@@ -87,15 +93,17 @@ public static class Builder {
8793
private Integer maxConnections;
8894
private final VPack.Builder vpackBuilder;
8995
private final CollectionCache collectionCache;
90-
private final VPackParser.Builder vpackParser;
96+
private final VPackParser.Builder vpackParserBuilder;
97+
private ArangoSerializer serializer;
98+
private ArangoDeserializer deserializer;
9199

92100
public Builder() {
93101
super();
94102
vpackBuilder = new VPack.Builder();
95103
collectionCache = new CollectionCache();
96-
vpackParser = new VPackParser.Builder();
104+
vpackParserBuilder = new VPackParser.Builder();
97105
vpackBuilder.registerModule(new VPackDriverModule(collectionCache));
98-
vpackParser.registerModule(new VPackDriverModule(collectionCache));
106+
vpackParserBuilder.registerModule(new VPackDriverModule(collectionCache));
99107
vpackBuilder.registerModule(new VPackJdk8Module());
100108
host = new Host(ArangoDBConstants.DEFAULT_HOST, ArangoDBConstants.DEFAULT_PORT);
101109
hosts = new ArrayList<>();
@@ -227,28 +235,28 @@ public <T> Builder registerInstanceCreator(final Class<T> clazz, final VPackInst
227235
}
228236

229237
public Builder registerJsonDeserializer(final ValueType type, final VPackJsonDeserializer deserializer) {
230-
vpackParser.registerDeserializer(type, deserializer);
238+
vpackParserBuilder.registerDeserializer(type, deserializer);
231239
return this;
232240
}
233241

234242
public Builder registerJsonDeserializer(
235243
final String attribute,
236244
final ValueType type,
237245
final VPackJsonDeserializer deserializer) {
238-
vpackParser.registerDeserializer(attribute, type, deserializer);
246+
vpackParserBuilder.registerDeserializer(attribute, type, deserializer);
239247
return this;
240248
}
241249

242250
public <T> Builder registerJsonSerializer(final Class<T> clazz, final VPackJsonSerializer<T> serializer) {
243-
vpackParser.registerSerializer(clazz, serializer);
251+
vpackParserBuilder.registerSerializer(clazz, serializer);
244252
return this;
245253
}
246254

247255
public <T> Builder registerJsonSerializer(
248256
final String attribute,
249257
final Class<T> clazz,
250258
final VPackJsonSerializer<T> serializer) {
251-
vpackParser.registerSerializer(attribute, clazz, serializer);
259+
vpackParserBuilder.registerSerializer(attribute, clazz, serializer);
252260
return this;
253261
}
254262

@@ -276,14 +284,32 @@ public Builder registerModules(final VPackModule... modules) {
276284
return this;
277285
}
278286

287+
public Builder setSerializer(final ArangoSerializer serializer) {
288+
this.serializer = serializer;
289+
return this;
290+
}
291+
292+
public Builder setDeserializer(final ArangoDeserializer deserializer) {
293+
this.deserializer = deserializer;
294+
return this;
295+
}
296+
279297
public ArangoDBAsync build() {
280298
if (hosts.isEmpty()) {
281299
hosts.add(host);
282300
}
301+
final VPack vpacker = vpackBuilder.build();
302+
final VPack vpackerNull = vpackBuilder.serializeNullValues(true).build();
303+
final VPackParser vpackParser = vpackParserBuilder.build();
304+
if (serializer == null) {
305+
serializer = new ArangoSerializerImpl(vpacker, vpackerNull, vpackParser);
306+
}
307+
if (deserializer == null) {
308+
deserializer = new ArangoDeserializerImpl(vpackerNull, vpackParser);
309+
}
283310
final HostHandler hostHandler = new DefaultHostHandler(hosts);
284-
return new ArangoDBAsync(asyncBuilder(hostHandler), vpackBuilder.build(),
285-
vpackBuilder.serializeNullValues(true).build(), vpackParser.build(), collectionCache,
286-
syncBuilder(hostHandler));
311+
return new ArangoDBAsync(asyncBuilder(hostHandler), new ArangoUtilImpl(serializer, deserializer),
312+
collectionCache, syncBuilder(hostHandler));
287313
}
288314

289315
private CommunicationAsync.Builder asyncBuilder(final HostHandler hostHandler) {
@@ -298,17 +324,15 @@ private CommunicationSync.Builder syncBuilder(final HostHandler hostHandler) {
298324

299325
}
300326

301-
public ArangoDBAsync(final CommunicationAsync.Builder commBuilder, final VPack vpack, final VPack vpackNull,
302-
final VPackParser vpackParser, final CollectionCache collectionCache,
303-
final CommunicationSync.Builder syncbuilder) {
304-
super(new ArangoExecutorAsync(commBuilder.build(vpack, collectionCache), vpack, vpackNull, vpackParser,
305-
new DocumentCache(), collectionCache));
306-
final Communication<Response, ConnectionSync> cacheCom = syncbuilder.build(vpack, collectionCache);
327+
public ArangoDBAsync(final CommunicationAsync.Builder commBuilder, final ArangoUtil util,
328+
final CollectionCache collectionCache, final CommunicationSync.Builder syncbuilder) {
329+
super(new ArangoExecutorAsync(commBuilder.build(util, collectionCache), util, new DocumentCache(),
330+
collectionCache));
331+
final Communication<Response, ConnectionSync> cacheCom = syncbuilder.build(util, collectionCache);
307332
collectionCache.init(new DBAccess() {
308333
@Override
309334
public ArangoDatabase db(final String name) {
310-
return new ArangoDatabase(cacheCom, vpackNull, vpack, vpackParser, executor.documentCache(), null,
311-
name);
335+
return new ArangoDatabase(cacheCom, util, executor.documentCache(), null, name);
312336
}
313337
});
314338
}

src/main/java/com/arangodb/ArangoDatabaseAsync.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,8 @@
5656
import com.arangodb.model.GraphCreateOptions;
5757
import com.arangodb.model.TransactionOptions;
5858
import com.arangodb.model.TraversalOptions;
59+
import com.arangodb.util.ArangoUtil;
5960
import com.arangodb.velocypack.Type;
60-
import com.arangodb.velocypack.VPack;
61-
import com.arangodb.velocypack.VPackParser;
6261
import com.arangodb.velocystream.Request;
6362
import com.arangodb.velocystream.Response;
6463

@@ -73,11 +72,9 @@ protected ArangoDatabaseAsync(final ArangoDBAsync arangoDB, final String name) {
7372
super(arangoDB, arangoDB.executor(), name);
7473
}
7574

76-
protected ArangoDatabaseAsync(final CommunicationAsync communication, final VPack vpacker, final VPack vpackerNull,
77-
final VPackParser vpackParser, final DocumentCache documentCache, final CollectionCache collectionCache,
78-
final String name) {
79-
super(null, new ArangoExecutorAsync(communication, vpacker, vpackerNull, vpackParser, documentCache,
80-
collectionCache), name);
75+
protected ArangoDatabaseAsync(final CommunicationAsync communication, final ArangoUtil util,
76+
final DocumentCache documentCache, final CollectionCache collectionCache, final String name) {
77+
super(null, new ArangoExecutorAsync(communication, util, documentCache, collectionCache), name);
8178
}
8279

8380
/**

src/main/java/com/arangodb/internal/ArangoExecutorAsync.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@
2626
import com.arangodb.ArangoDBException;
2727
import com.arangodb.internal.velocystream.Communication;
2828
import com.arangodb.internal.velocystream.ConnectionAsync;
29-
import com.arangodb.velocypack.VPack;
30-
import com.arangodb.velocypack.VPackParser;
29+
import com.arangodb.util.ArangoUtil;
3130
import com.arangodb.velocypack.exception.VPackException;
3231
import com.arangodb.velocystream.Request;
3332
import com.arangodb.velocystream.Response;
@@ -39,9 +38,8 @@
3938
public class ArangoExecutorAsync extends ArangoExecutor<CompletableFuture<Response>, ConnectionAsync> {
4039

4140
public ArangoExecutorAsync(final Communication<CompletableFuture<Response>, ConnectionAsync> communication,
42-
final VPack vpacker, final VPack vpackerNull, final VPackParser vpackParser, final DocumentCache documentCache,
43-
final CollectionCache collectionCache) {
44-
super(communication, vpacker, vpackerNull, vpackParser, documentCache, collectionCache);
41+
final ArangoUtil util, final DocumentCache documentCache, final CollectionCache collectionCache) {
42+
super(communication, util, documentCache, collectionCache);
4543
}
4644

4745
public <T> CompletableFuture<T> execute(final Request request, final Type type) {

src/main/java/com/arangodb/internal/velocystream/CommunicationAsync.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import com.arangodb.entity.ErrorEntity;
3434
import com.arangodb.internal.ArangoDBConstants;
3535
import com.arangodb.internal.CollectionCache;
36-
import com.arangodb.velocypack.VPack;
36+
import com.arangodb.util.ArangoUtil;
3737
import com.arangodb.velocypack.exception.VPackException;
3838
import com.arangodb.velocypack.exception.VPackParserException;
3939
import com.arangodb.velocystream.Request;
@@ -99,17 +99,17 @@ public Builder maxConnections(final Integer maxConnections) {
9999
}
100100

101101
public Communication<CompletableFuture<Response>, ConnectionAsync> build(
102-
final VPack vpack,
102+
final ArangoUtil util,
103103
final CollectionCache collectionCache) {
104-
return new CommunicationAsync(hostHandler, timeout, user, password, useSsl, sslContext, vpack,
104+
return new CommunicationAsync(hostHandler, timeout, user, password, useSsl, sslContext, util,
105105
collectionCache, chunksize, maxConnections);
106106
}
107107
}
108108

109109
private CommunicationAsync(final HostHandler hostHandler, final Integer timeout, final String user,
110-
final String password, final Boolean useSsl, final SSLContext sslContext, final VPack vpack,
110+
final String password, final Boolean useSsl, final SSLContext sslContext, final ArangoUtil util,
111111
final CollectionCache collectionCache, final Integer chunksize, final Integer maxConnections) {
112-
super(timeout, user, password, useSsl, sslContext, vpack, collectionCache, chunksize,
112+
super(timeout, user, password, useSsl, sslContext, util, collectionCache, chunksize,
113113
new ConnectionPool<ConnectionAsync>(maxConnections) {
114114
private final ConnectionAsync.Builder builder = new ConnectionAsync.Builder(hostHandler,
115115
new MessageStore()).timeout(timeout).useSsl(useSsl).sslContext(sslContext);
@@ -134,8 +134,7 @@ public CompletableFuture<Response> execute(final Request request, final Connecti
134134
final Response response = createResponse(m);
135135
if (response.getResponseCode() >= 300) {
136136
if (response.getBody() != null) {
137-
final ErrorEntity errorEntity = vpack.deserialize(response.getBody(),
138-
ErrorEntity.class);
137+
final ErrorEntity errorEntity = util.deserialize(response.getBody(), ErrorEntity.class);
139138
final String errorMessage = String.format("Response: %s, Error: %s - %s",
140139
errorEntity.getCode(), errorEntity.getErrorNum(), errorEntity.getErrorMessage());
141140
rfuture.completeExceptionally(new ArangoDBException(errorMessage));

0 commit comments

Comments
 (0)