4141import com .arangodb .internal .CollectionCache .DBAccess ;
4242import com .arangodb .internal .DocumentCache ;
4343import 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 ;
4447import com .arangodb .internal .velocypack .VPackDriverModule ;
4548import com .arangodb .internal .velocystream .Communication ;
4649import com .arangodb .internal .velocystream .CommunicationAsync ;
5356import com .arangodb .model .LogOptions ;
5457import com .arangodb .model .UserCreateOptions ;
5558import com .arangodb .model .UserUpdateOptions ;
59+ import com .arangodb .util .ArangoDeserializer ;
60+ import com .arangodb .util .ArangoSerializer ;
61+ import com .arangodb .util .ArangoUtil ;
5662import com .arangodb .velocypack .VPack ;
5763import com .arangodb .velocypack .VPackAnnotationFieldFilter ;
5864import 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 }
0 commit comments