Skip to content

Commit 371031f

Browse files
author
Mark
committed
fixed importing BaseDocuments, fixed edges deserializer (issue #50)
1 parent 8176c60 commit 371031f

File tree

6 files changed

+152
-25
lines changed

6 files changed

+152
-25
lines changed

ChangeLog

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ v2.7.5 (2016-11-25)
66
* fixed ArangoDriver.getQueryCacheProperties() (does not use the defaultDatabase)
77
* fixed ArangoDriver.setQueryCacheProperties() (does not use the defaultDatabase)
88
* fixed ArangoDriver.reloadRouting() (does not use the defaultDatabase)
9+
* fixed importing BaseDocuments
10+
* fixed edges deserializer (issue #50)
911

1012
v2.7.4 (2016-04-15)
1113
---------------------------

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

+24-7
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.slf4j.LoggerFactory;
3838

3939
import com.arangodb.entity.CollectionEntity.Figures;
40+
import com.arangodb.entity.EntityDeserializers.DeserializeSingleEntry;
4041
import com.arangodb.entity.ReplicationApplierState.LastError;
4142
import com.arangodb.entity.ReplicationApplierState.Progress;
4243
import com.arangodb.entity.ReplicationInventoryEntity.Collection;
@@ -1977,6 +1978,28 @@ public GraphsEntity deserialize(JsonElement json, Type typeOfT, JsonDeserializat
19771978
}
19781979
}
19791980

1981+
public static class BaseDocumentDeserializer implements JsonDeserializer<BaseDocument> {
1982+
@Override
1983+
public BaseDocument deserialize(
1984+
final JsonElement json,
1985+
final Type typeOfT,
1986+
final JsonDeserializationContext context) {
1987+
1988+
if (json.isJsonNull()) {
1989+
return null;
1990+
}
1991+
1992+
final JsonObject obj = json.getAsJsonObject();
1993+
final BaseDocument entity = deserializeDocumentParameter(obj, new BaseDocument());
1994+
1995+
if (entity instanceof BaseDocument) {
1996+
entity.setProperties(DeserializeSingleEntry.deserializeJsonObject(obj));
1997+
}
1998+
1999+
return entity;
2000+
}
2001+
}
2002+
19802003
public static class DeleteEntityDeserializer implements JsonDeserializer<DeletedEntity> {
19812004
@Override
19822005
public DeletedEntity deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
@@ -2361,13 +2384,7 @@ private static List<EdgeEntity<Object>> getEdges(
23612384
if (edges != null) {
23622385
for (int i = 0, imax = edges.size(); i < imax; i++) {
23632386
JsonObject edge = edges.get(i).getAsJsonObject();
2364-
EdgeEntity<Object> ve = deserializeBaseParameter(edge, new EdgeEntity<Object>());
2365-
deserializeDocumentParameter(edge, ve);
2366-
if (edgeClazz != null) {
2367-
ve.setEntity(context.deserialize(edge, edgeClazz));
2368-
} else {
2369-
ve.setEntity(context.deserialize(edge, Object.class));
2370-
}
2387+
final EdgeEntity<Object> ve = context.deserialize(edge, EdgeEntity.class);
23712388
list.add(ve);
23722389
}
23732390
}

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

+2-18
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ public static GsonBuilder getGsonBuilder() {
111111
new EntityDeserializers.ReplicationLoggerStateEntityDeserializer())
112112
.registerTypeAdapter(ReplicationLoggerStateEntity.Client.class,
113113
new EntityDeserializers.ReplicationLoggerStateEntityClientDeserializer())
114+
.registerTypeAdapter(BaseDocument.class, new EntityDeserializers.BaseDocumentDeserializer())
115+
.registerTypeAdapter(BaseDocument.class, new EntitySerializers.BaseDocumentSerializer())
114116
.registerTypeAdapter(GraphEntity.class, new EntityDeserializers.GraphEntityDeserializer())
115117
.registerTypeAdapter(GraphsEntity.class, new EntityDeserializers.GraphsEntityDeserializer())
116118
.registerTypeAdapter(DeletedEntity.class, new EntityDeserializers.DeleteEntityDeserializer())
@@ -181,24 +183,6 @@ public static String toImportHeaderValues(Collection<? extends Collection<?>> he
181183
}
182184

183185
public static <T> String toJsonString(T obj, boolean includeNullValue) {
184-
if (obj != null && obj.getClass().equals(BaseDocument.class)) {
185-
String tmp = includeNullValue ? gsonNull.toJson(obj) : gson.toJson(obj);
186-
JsonParser jsonParser = new JsonParser();
187-
JsonElement jsonElement = jsonParser.parse(tmp);
188-
JsonObject jsonObject = jsonElement.getAsJsonObject();
189-
JsonObject result = jsonObject.getAsJsonObject("properties");
190-
JsonElement keyObject = jsonObject.get("_key");
191-
if (keyObject != null && keyObject.getClass() != JsonNull.class) {
192-
result.add("_key", jsonObject.get("_key"));
193-
}
194-
JsonElement handleObject = jsonObject.get("_id");
195-
if (handleObject != null && handleObject.getClass() != JsonNull.class) {
196-
result.add("_id", jsonObject.get("_id"));
197-
}
198-
// JsonElement revisionValue = jsonObject.get("documentRevision");
199-
// result.add("_rev", revisionValue);
200-
return result.toString();
201-
}
202186
return includeNullValue ? gsonNull.toJson(obj) : gson.toJson(obj);
203187
}
204188

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
* DISCLAIMER
3+
*
4+
* Copyright 2016 ArangoDB GmbH, Cologne, Germany
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*
18+
* Copyright holder is ArangoDB GmbH, Cologne, Germany
19+
*/
20+
21+
package com.arangodb.entity;
22+
23+
import java.lang.reflect.Type;
24+
25+
import com.google.gson.JsonElement;
26+
import com.google.gson.JsonObject;
27+
import com.google.gson.JsonSerializationContext;
28+
import com.google.gson.JsonSerializer;
29+
30+
/**
31+
* @author Mark - mark at arangodb.com
32+
*
33+
*/
34+
public class EntitySerializers {
35+
36+
public static class BaseDocumentSerializer implements JsonSerializer<BaseDocument> {
37+
38+
@Override
39+
public JsonElement serialize(
40+
final BaseDocument src,
41+
final Type typeOfSrc,
42+
final JsonSerializationContext context) {
43+
final JsonObject result = (JsonObject) context.serialize(src.getProperties());
44+
if (src.getDocumentKey() != null) {
45+
result.add("_key", context.serialize(src.getDocumentKey()));
46+
}
47+
if (src.getDocumentHandle() != null) {
48+
result.add("_id", context.serialize(src.getDocumentHandle()));
49+
}
50+
return result;
51+
}
52+
53+
}
54+
55+
}

src/test/java/com/arangodb/ArangoDriverImportTest.java

+26
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,13 @@
2323
import java.io.IOException;
2424
import java.util.ArrayList;
2525
import java.util.Arrays;
26+
import java.util.Collection;
2627
import java.util.List;
2728

2829
import org.junit.Test;
2930

31+
import com.arangodb.entity.BaseDocument;
32+
import com.arangodb.entity.DocumentEntity;
3033
import com.arangodb.entity.ImportResultEntity;
3134
import com.arangodb.util.TestUtils;
3235

@@ -55,6 +58,29 @@ public void test_import_documents() throws ArangoException, IOException {
5558

5659
}
5760

61+
@Test
62+
public void test_import_base_documents() throws ArangoException {
63+
final Collection<BaseDocument> docs = new ArrayList<BaseDocument>();
64+
for (int i = 0; i < 100; i++) {
65+
final BaseDocument doc = new BaseDocument();
66+
doc.setDocumentKey("Key" + i);
67+
doc.addAttribute("foo", "bar");
68+
docs.add(doc);
69+
}
70+
71+
final ImportResultEntity result = driver.importDocuments("ut-import-test", true, docs);
72+
73+
assertThat(result.getStatusCode(), is(201));
74+
assertThat(result.isError(), is(false));
75+
assertThat(result.getCreated(), is(100));
76+
assertThat(result.getErrors(), is(0));
77+
assertThat(result.getEmpty(), is(0));
78+
79+
final DocumentEntity<BaseDocument> zero = driver.getDocument("ut-import-test", "Key0", BaseDocument.class);
80+
assertThat(zero.isError(), is(false));
81+
assertThat(zero.getEntity().getAttribute("foo").toString(), is("bar"));
82+
}
83+
5884
@Test
5985
public void test_import_documents_404() throws ArangoException, IOException {
6086

src/test/java/com/arangodb/ArangoDriverTraversalTest.java

+43
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@
3131
import org.junit.Before;
3232
import org.junit.Test;
3333

34+
import com.arangodb.entity.BaseDocument;
3435
import com.arangodb.entity.BaseEntity;
3536
import com.arangodb.entity.EdgeDefinitionEntity;
37+
import com.arangodb.entity.EdgeEntity;
3638
import com.arangodb.entity.PathEntity;
3739
import com.arangodb.entity.TraversalEntity;
3840
import com.arangodb.entity.marker.VertexEntity;
@@ -127,6 +129,47 @@ public void test_create_vertex() throws ArangoException {
127129
assertThat(paths.get(3).getVertices().size(), is(3));
128130
}
129131

132+
@Test
133+
public void test_getTraversalWithBaseDocument() throws ArangoException {
134+
final TraversalQueryOptions traversalQueryOptions = new TraversalQueryOptions();
135+
136+
traversalQueryOptions.setGraphName(graphName);
137+
traversalQueryOptions.setStartVertex("person/Alice");
138+
traversalQueryOptions.setDirection(Direction.OUTBOUND);
139+
140+
final TraversalEntity<BaseDocument, BaseDocument> traversal = driver.getTraversal(traversalQueryOptions,
141+
BaseDocument.class, BaseDocument.class);
142+
143+
assertThat(traversal, is(notNullValue()));
144+
145+
final List<VertexEntity<BaseDocument>> vertices = traversal.getVertices();
146+
assertThat(vertices, is(notNullValue()));
147+
assertThat(vertices.size(), is(4));
148+
assertThat(vertices.get(0).getEntity().getProperties().size(), is(1));
149+
assertThat((String) vertices.get(0).getEntity().getAttribute("name"), is("Alice"));
150+
assertThat((String) vertices.get(1).getEntity().getAttribute("name"), is("Bob"));
151+
assertThat((String) vertices.get(2).getEntity().getAttribute("name"), is("Charlie"));
152+
assertThat((String) vertices.get(3).getEntity().getAttribute("name"), is("Dave"));
153+
154+
final List<PathEntity<BaseDocument, BaseDocument>> paths = traversal.getPaths();
155+
assertThat(paths, is(notNullValue()));
156+
assertThat(paths.size(), is(4));
157+
158+
// start vertex!
159+
assertThat(paths.get(0).getEdges().size(), is(0));
160+
assertThat(paths.get(0).getVertices().size(), is(1));
161+
assertThat((String) paths.get(0).getVertices().get(0).getEntity().getAttribute("name"), is("Alice"));
162+
163+
assertThat(paths.get(3).getEdges().size(), is(2));
164+
assertThat(paths.get(3).getVertices().size(), is(3));
165+
166+
assertThat(paths.get(1).getEdges().size(), is(1));
167+
EdgeEntity<BaseDocument> edgeEntity = traversal.getPaths().get(1).getEdges().get(0);
168+
assertThat(edgeEntity.getFromVertexHandle(), is("person/Alice"));
169+
assertThat(edgeEntity.getToVertexHandle(), is("person/Bob"));
170+
171+
}
172+
130173
private VertexEntity<Person> createPerson(String name) throws ArangoException {
131174
return driver.graphCreateVertex(graphName, vertexCollectionName, name, new Person(name), true);
132175
}

0 commit comments

Comments
 (0)