Skip to content

Commit f1ac12a

Browse files
committed
serde serialization refactoring
1 parent fa45985 commit f1ac12a

File tree

13 files changed

+93
-15
lines changed

13 files changed

+93
-15
lines changed

src/main/java/com/arangodb/ArangoDB.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
import com.arangodb.model.LogOptions;
3939
import com.arangodb.model.UserCreateOptions;
4040
import com.arangodb.model.UserUpdateOptions;
41+
import com.arangodb.serde.ArangoSerde;
42+
import com.arangodb.serde.DataType;
43+
import com.arangodb.serde.InternalSerde;
4144
import com.arangodb.util.ArangoCursorInitializer;
4245
import com.arangodb.util.ArangoDeserializer;
4346
import com.arangodb.util.ArangoSerialization;
@@ -362,8 +365,10 @@ public synchronized ArangoDB build() {
362365
: new ArangoSerializerImpl(vpacker, vpackerNull, vpackParser);
363366
final ArangoDeserializer deserializerTemp = deserializer != null ? deserializer
364367
: new ArangoDeserializerImpl(vpackerNull, vpackParser);
368+
final InternalSerde internalSerde = protocol == Protocol.HTTP_JSON ? InternalSerde.of(DataType.JSON)
369+
: InternalSerde.of(DataType.VPACK);
365370
final DefaultArangoSerialization internal = new DefaultArangoSerialization(serializerTemp,
366-
deserializerTemp);
371+
deserializerTemp, internalSerde);
367372
final ArangoSerialization custom = customSerializer != null ? customSerializer : internal;
368373
final ArangoSerializationFactory util = new ArangoSerializationFactory(internal, custom);
369374

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
import com.arangodb.model.LogOptions;
4242
import com.arangodb.model.UserCreateOptions;
4343
import com.arangodb.model.UserUpdateOptions;
44+
import com.arangodb.serde.DataType;
45+
import com.arangodb.serde.InternalSerde;
4446
import com.arangodb.util.ArangoDeserializer;
4547
import com.arangodb.util.ArangoSerialization;
4648
import com.arangodb.util.ArangoSerializer;
@@ -523,8 +525,9 @@ public synchronized ArangoDBAsync build() {
523525
: new ArangoSerializerImpl(vpacker, vpackerNull, vpackParser);
524526
final ArangoDeserializer deserializerTemp = deserializer != null ? deserializer
525527
: new ArangoDeserializerImpl(vpackerNull, vpackParser);
528+
final InternalSerde internalSerde = InternalSerde.of(DataType.VPACK);
526529
final DefaultArangoSerialization internal = new DefaultArangoSerialization(serializerTemp,
527-
deserializerTemp);
530+
deserializerTemp, internalSerde);
528531
final ArangoSerialization custom = customSerializer != null ? customSerializer : internal;
529532
final ArangoSerializationFactory util = new ArangoSerializationFactory(internal, custom);
530533

src/main/java/com/arangodb/entity/Permissions.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
package com.arangodb.entity;
2222

23+
import com.fasterxml.jackson.annotation.JsonProperty;
24+
2325
/**
2426
* @author Mark Vollmary
2527
*/
@@ -28,11 +30,16 @@ public enum Permissions {
2830
/**
2931
* read and write access
3032
*/
33+
@JsonProperty("rw")
3134
RW,
35+
3236
/**
3337
* read-only access
3438
*/
39+
@JsonProperty("ro")
3540
RO,
41+
42+
@JsonProperty("none")
3643
NONE
3744

3845
}

src/main/java/com/arangodb/internal/http/HttpConnection.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.arangodb.internal.net.HostDescription;
2828
import com.arangodb.internal.util.IOUtils;
2929
import com.arangodb.internal.util.ResponseUtils;
30+
import com.arangodb.serde.DataType;
3031
import com.arangodb.util.ArangoSerialization;
3132
import com.arangodb.util.ArangoSerializer.Options;
3233
import com.arangodb.velocypack.VPackSlice;
@@ -173,6 +174,7 @@ public HttpConnection build() {
173174
private final ArangoSerialization util;
174175
private final Boolean useSsl;
175176
private final Protocol contentType;
177+
private final DataType dataType;
176178
private final HostDescription host;
177179

178180
private HttpConnection(final HostDescription host, final Integer timeout, final String user, final String password,
@@ -185,6 +187,7 @@ private HttpConnection(final HostDescription host, final Integer timeout, final
185187
this.useSsl = useSsl;
186188
this.util = util;
187189
this.contentType = contentType;
190+
dataType = contentType == Protocol.HTTP_JSON ? DataType.JSON : DataType.VPACK;
188191
final RegistryBuilder<ConnectionSocketFactory> registryBuilder = RegistryBuilder
189192
.create();
190193
if (Boolean.TRUE == useSsl) {
@@ -355,7 +358,7 @@ private static void addHeader(final Request request, final HttpRequestBase httpR
355358

356359
public Response buildResponse(final CloseableHttpResponse httpResponse)
357360
throws UnsupportedOperationException, IOException {
358-
final Response response = new Response();
361+
final Response response = new Response(dataType);
359362
response.setResponseCode(httpResponse.getStatusLine().getStatusCode());
360363
final HttpEntity entity = httpResponse.getEntity();
361364
if (entity != null && entity.getContent() != null) {

src/main/java/com/arangodb/internal/util/DefaultArangoSerialization.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,12 @@
2121
package com.arangodb.internal.util;
2222

2323
import com.arangodb.ArangoDBException;
24+
import com.arangodb.serde.DataType;
25+
import com.arangodb.serde.InternalSerde;
2426
import com.arangodb.util.ArangoDeserializer;
2527
import com.arangodb.util.ArangoSerialization;
2628
import com.arangodb.util.ArangoSerializer;
29+
import com.arangodb.velocypack.VPackParser;
2730
import com.arangodb.velocypack.VPackSlice;
2831

2932
import java.lang.reflect.Type;
@@ -35,16 +38,29 @@ public class DefaultArangoSerialization implements ArangoSerialization {
3538

3639
private final ArangoSerializer serializer;
3740
private final ArangoDeserializer deserializer;
41+
private final InternalSerde serde;
3842

39-
public DefaultArangoSerialization(final ArangoSerializer serializer, final ArangoDeserializer deserializer) {
43+
public DefaultArangoSerialization(final ArangoSerializer serializer, final ArangoDeserializer deserializer, final InternalSerde serde) {
4044
super();
4145
this.serializer = serializer;
4246
this.deserializer = deserializer;
47+
this.serde = serde;
4348
}
4449

4550
@Override
4651
public VPackSlice serialize(final Object entity) throws ArangoDBException {
47-
return serializer.serialize(entity);
52+
// return serializer.serialize(entity);
53+
DataType dataType = serde.getDataType();
54+
switch (dataType) {
55+
case JSON:
56+
String json = new String(serde.serialize(entity));
57+
VPackParser parser = new VPackParser.Builder().build();
58+
return parser.fromJson(json);
59+
case VPACK:
60+
return new VPackSlice(serde.serialize(entity));
61+
default:
62+
throw new IllegalStateException("Unexpected value: " + dataType);
63+
}
4864
}
4965

5066
@Override

src/main/java/com/arangodb/internal/velocypack/VPackDeserializers.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import com.arangodb.entity.arangosearch.analyzer.*;
4646
import com.arangodb.model.CollectionSchema;
4747
import com.arangodb.model.ZKDIndexOptions;
48+
import com.arangodb.serde.DataType;
4849
import com.arangodb.velocypack.VPackDeserializer;
4950
import com.arangodb.velocypack.VPackParser;
5051
import com.arangodb.velocypack.VPackSlice;
@@ -66,7 +67,7 @@ public class VPackDeserializers {
6667
private static final String DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
6768

6869
public static final VPackDeserializer<Response> RESPONSE = (parent, vpack, context) -> {
69-
final Response response = new Response();
70+
final Response response = new Response(DataType.VPACK);
7071
response.setVersion(vpack.get(0).getAsInt());
7172
response.setType(vpack.get(1).getAsInt());
7273
response.setResponseCode(vpack.get(2).getAsInt());

src/main/java/com/arangodb/model/AqlQueryOptions.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ public class AqlQueryOptions implements Serializable {
4242
private Integer ttl;
4343
private Integer batchSize;
4444
private Boolean cache;
45-
private Boolean fillBlockCache;
4645
private Long memoryLimit;
4746
private VPackSlice bindVars;
4847
private String query;
@@ -165,7 +164,7 @@ protected AqlQueryOptions bindVars(final VPackSlice bindVars) {
165164
return this;
166165
}
167166

168-
protected String getQuery() {
167+
public String getQuery() {
169168
return query;
170169
}
171170

@@ -430,14 +429,14 @@ public static class Options implements Serializable {
430429
private Double maxRuntime;
431430
private Boolean fillBlockCache;
432431

433-
protected Optimizer getOptimizer() {
432+
public Optimizer getOptimizer() {
434433
if (optimizer == null) {
435434
optimizer = new Optimizer();
436435
}
437436
return optimizer;
438437
}
439438

440-
protected Collection<String> getShardIds() {
439+
public Collection<String> getShardIds() {
441440
if (shardIds == null) {
442441
shardIds = new ArrayList<>();
443442
}

src/main/java/com/arangodb/model/CollectionCreateOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public CollectionCreateOptions() {
5353
replicationFactor = new ReplicationFactor();
5454
}
5555

56-
protected String getName() {
56+
public String getName() {
5757
return name;
5858
}
5959

src/main/java/com/arangodb/model/UserAccessOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public UserAccessOptions() {
3333
super();
3434
}
3535

36-
protected Permissions getGrant() {
36+
public Permissions getGrant() {
3737
return grant;
3838
}
3939

src/main/java/com/arangodb/model/UserCreateOptions.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public UserCreateOptions() {
3737
super();
3838
}
3939

40-
protected String getUser() {
40+
public String getUser() {
4141
return user;
4242
}
4343

@@ -50,7 +50,7 @@ protected UserCreateOptions user(final String user) {
5050
return this;
5151
}
5252

53-
protected String getPasswd() {
53+
public String getPasswd() {
5454
return passwd;
5555
}
5656

0 commit comments

Comments
 (0)