|
40 | 40 | import com.arangodb.internal.ArangoExecutorSync; |
41 | 41 | import com.arangodb.internal.CollectionCache; |
42 | 42 | import com.arangodb.internal.CollectionCache.DBAccess; |
| 43 | +import com.arangodb.internal.CommunicationProtocol; |
43 | 44 | import com.arangodb.internal.DocumentCache; |
44 | 45 | import com.arangodb.internal.InternalArangoDB; |
| 46 | +import com.arangodb.internal.http.HttpCommunication; |
| 47 | +import com.arangodb.internal.http.HttpProtocol; |
45 | 48 | import com.arangodb.internal.util.ArangoDeserializerImpl; |
46 | 49 | import com.arangodb.internal.util.ArangoSerializerImpl; |
47 | 50 | import com.arangodb.internal.util.ArangoUtilImpl; |
48 | 51 | import com.arangodb.internal.velocypack.VPackDocumentModule; |
49 | 52 | import com.arangodb.internal.velocypack.VPackDriverModule; |
50 | | -import com.arangodb.internal.velocystream.Communication; |
51 | 53 | import com.arangodb.internal.velocystream.CommunicationSync; |
52 | 54 | import com.arangodb.internal.velocystream.ConnectionSync; |
53 | 55 | import com.arangodb.internal.velocystream.DefaultHostHandler; |
54 | 56 | import com.arangodb.internal.velocystream.Host; |
| 57 | +import com.arangodb.internal.velocystream.VelocyStreamProtocol; |
55 | 58 | import com.arangodb.model.LogOptions; |
56 | 59 | import com.arangodb.model.UserCreateOptions; |
57 | 60 | import com.arangodb.model.UserUpdateOptions; |
58 | 61 | import com.arangodb.util.ArangoDeserializer; |
59 | | -import com.arangodb.util.ArangoSerializer; |
60 | 62 | import com.arangodb.util.ArangoSerialization; |
| 63 | +import com.arangodb.util.ArangoSerializer; |
61 | 64 | import com.arangodb.velocypack.VPack; |
62 | 65 | import com.arangodb.velocypack.VPackAnnotationFieldFilter; |
63 | 66 | import com.arangodb.velocypack.VPackAnnotationFieldNaming; |
@@ -95,6 +98,7 @@ public static class Builder { |
95 | 98 | private final VPackParser.Builder vpackParserBuilder; |
96 | 99 | private ArangoSerializer serializer; |
97 | 100 | private ArangoDeserializer deserializer; |
| 101 | + private Protocol protocol; |
98 | 102 |
|
99 | 103 | public Builder() { |
100 | 104 | super(); |
@@ -202,6 +206,11 @@ public Builder maxConnections(final Integer maxConnections) { |
202 | 206 | return this; |
203 | 207 | } |
204 | 208 |
|
| 209 | + public Builder useProtocol(final Protocol protocol) { |
| 210 | + this.protocol = protocol; |
| 211 | + return this; |
| 212 | + } |
| 213 | + |
205 | 214 | public <T> Builder registerSerializer(final Class<T> clazz, final VPackSerializer<T> serializer) { |
206 | 215 | vpackBuilder.registerSerializer(clazz, serializer); |
207 | 216 | return this; |
@@ -340,31 +349,56 @@ public synchronized ArangoDB build() { |
340 | 349 | new CommunicationSync.Builder(new DefaultHostHandler(new ArrayList<Host>(hosts))).timeout(timeout) |
341 | 350 | .user(user).password(password).useSsl(useSsl).sslContext(sslContext).chunksize(chunksize) |
342 | 351 | .maxConnections(maxConnections), |
343 | | - new ArangoUtilImpl(serializerTemp, deserializerTemp), collectionCache); |
| 352 | + new HttpCommunication.Builder(new DefaultHostHandler(new ArrayList<Host>(hosts))).timeout(timeout) |
| 353 | + .user(user).password(password).useSsl(useSsl).sslContext(sslContext), |
| 354 | + new ArangoUtilImpl(serializerTemp, deserializerTemp), collectionCache, protocol); |
344 | 355 | } |
345 | 356 |
|
346 | 357 | } |
347 | 358 |
|
348 | | - public ArangoDB(final CommunicationSync.Builder commBuilder, final ArangoSerialization util, |
349 | | - final CollectionCache collectionCache) { |
350 | | - super(new ArangoExecutorSync(commBuilder.build(util, collectionCache), util, new DocumentCache(), |
351 | | - collectionCache), util); |
352 | | - final Communication<Response, ConnectionSync> cacheCom = commBuilder.build(util, collectionCache); |
| 359 | + public ArangoDB(final CommunicationSync.Builder vstBuilder, final HttpCommunication.Builder httpBuilder, |
| 360 | + final ArangoSerialization util, final CollectionCache collectionCache, final Protocol protocol) { |
| 361 | + super(new ArangoExecutorSync(createProtocol(vstBuilder, httpBuilder, util, collectionCache, protocol), util, |
| 362 | + new DocumentCache()), util); |
| 363 | + final CommunicationProtocol cp = createProtocol(vstBuilder, httpBuilder, util, collectionCache, protocol); |
353 | 364 | collectionCache.init(new DBAccess() { |
354 | 365 | @Override |
355 | 366 | public ArangoDatabase db(final String name) { |
356 | | - return new ArangoDatabase(cacheCom, util, executor.documentCache(), null, name); |
| 367 | + return new ArangoDatabase(cp, util, executor.documentCache(), name); |
357 | 368 | } |
358 | 369 | }); |
359 | 370 | } |
360 | 371 |
|
| 372 | + private static CommunicationProtocol createProtocol( |
| 373 | + final CommunicationSync.Builder vstBuilder, |
| 374 | + final HttpCommunication.Builder httpBuilder, |
| 375 | + final ArangoSerialization util, |
| 376 | + final CollectionCache collectionCache, |
| 377 | + final Protocol protocol) { |
| 378 | + return (protocol == null || Protocol.VST == protocol) ? createVST(vstBuilder, util, collectionCache) |
| 379 | + : createHTTP(httpBuilder, util); |
| 380 | + } |
| 381 | + |
| 382 | + private static CommunicationProtocol createVST( |
| 383 | + final CommunicationSync.Builder builder, |
| 384 | + final ArangoSerialization util, |
| 385 | + final CollectionCache collectionCache) { |
| 386 | + return new VelocyStreamProtocol(builder.build(util, collectionCache)); |
| 387 | + } |
| 388 | + |
| 389 | + private static CommunicationProtocol createHTTP( |
| 390 | + final HttpCommunication.Builder builder, |
| 391 | + final ArangoSerialization util) { |
| 392 | + return new HttpProtocol(builder.build(util)); |
| 393 | + } |
| 394 | + |
361 | 395 | @Override |
362 | 396 | protected ArangoExecutorSync executor() { |
363 | 397 | return executor; |
364 | 398 | } |
365 | 399 |
|
366 | 400 | public void shutdown() { |
367 | | - executor.communication().disconnect(); |
| 401 | + executor.disconnect(); |
368 | 402 | } |
369 | 403 |
|
370 | 404 | /** |
|
0 commit comments