Skip to content

Commit 77f73b7

Browse files
author
Achim Brandt
committed
added traversal API
1 parent 1c6d2fd commit 77f73b7

9 files changed

+372
-235
lines changed

src/main/java/com/arangodb/ArangoDriver.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -5037,7 +5037,7 @@ public <V, E> TraversalEntity<V, E> getTraversal(
50375037
String edgeCollection,
50385038
String startVertex,
50395039
Class<V> vertexClazz,
5040-
Class<E> edgeClass,
5040+
Class<E> edgeClazz,
50415041
String filter,
50425042
Long minDepth,
50435043
Long maxDepth,
@@ -5054,7 +5054,7 @@ public <V, E> TraversalEntity<V, E> getTraversal(
50545054
Long maxIterations) throws ArangoException {
50555055

50565056
return this.traversalDriver.getTraversal(getDefaultDatabase(), graphName, edgeCollection, startVertex,
5057-
vertexClazz, edgeClass, filter, minDepth, maxDepth, visitor, direction, init, expander, sort, strategy,
5057+
vertexClazz, edgeClazz, filter, minDepth, maxDepth, visitor, direction, init, expander, sort, strategy,
50585058
order, itemOrder, verticesUniqueness, edgesUniqueness, maxIterations);
50595059
}
50605060
}

src/main/java/com/arangodb/InternalTraversalDriver.java

+13-6
Original file line numberDiff line numberDiff line change
@@ -26,23 +26,30 @@
2626
public interface InternalTraversalDriver extends BaseDriverInterface {
2727

2828
public enum Direction {
29-
OUTBOUND, INBOUND, ANY
29+
OUTBOUND,
30+
INBOUND,
31+
ANY
3032
}
3133

3234
public enum Strategy {
33-
DEPTHFIRST, BREADTHFIRST
35+
DEPTHFIRST,
36+
BREADTHFIRST
3437
}
3538

3639
public enum Order {
37-
PREORDER, POSTORDER
40+
PREORDER,
41+
POSTORDER
3842
}
3943

4044
public enum ItemOrder {
41-
FORWARD, BACKWARD
45+
FORWARD,
46+
BACKWARD
4247
}
4348

4449
public enum Uniqueness {
45-
NONE, GLOBAL, PATH
50+
NONE,
51+
GLOBAL,
52+
PATH
4653
}
4754

4855
<V, E> TraversalEntity<V, E> getTraversal(
@@ -51,7 +58,7 @@ <V, E> TraversalEntity<V, E> getTraversal(
5158
String edgeCollection,
5259
String startVertex,
5360
Class<V> vertexClazz,
54-
Class<E> edgeClass,
61+
Class<E> edgeClazz,
5562
String filter,
5663
Long minDepth,
5764
Long maxDepth,

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

+123-7
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,13 @@ private static Class<?> getParameterized() {
127127
return holder.get();
128128
}
129129

130-
// private static boolean hasNextParameterized() {
131-
// ClassHolder holder = parameterizedBridger.get();
132-
// if (holder == null) {
133-
// return false;
134-
// }
135-
// return holder.hasNext();
136-
// }
130+
private static boolean hasNextParameterized() {
131+
ClassHolder holder = parameterizedBridger.get();
132+
if (holder == null) {
133+
return false;
134+
}
135+
return holder.hasNext();
136+
}
137137

138138
private static Class<?> nextParameterized() {
139139
ClassHolder holder = parameterizedBridger.get();
@@ -1907,4 +1907,120 @@ public EdgeEntity<?> deserialize(JsonElement json, Type typeOfT, JsonDeserializa
19071907

19081908
}
19091909

1910+
public static class TraversalEntityDeserializer implements JsonDeserializer<TraversalEntity<?, ?>> {
1911+
@Override
1912+
public TraversalEntity<?, ?> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
1913+
throws JsonParseException {
1914+
1915+
if (json.isJsonNull()) {
1916+
return null;
1917+
}
1918+
1919+
JsonObject obj = json.getAsJsonObject();
1920+
TraversalEntity<Object, Object> entity = deserializeBaseParameter(obj,
1921+
new TraversalEntity<Object, Object>());
1922+
deserializeDocumentParameter(obj, entity);
1923+
1924+
if (obj.has("result")) {
1925+
JsonObject result = obj.getAsJsonObject("result");
1926+
if (result.has("visited")) {
1927+
JsonObject visited = result.getAsJsonObject("visited");
1928+
VisitedEntity<Object, Object> v = (VisitedEntity<Object, Object>) context.deserialize(visited,
1929+
VisitedEntity.class);
1930+
entity.setEntity(v);
1931+
}
1932+
}
1933+
1934+
return entity;
1935+
}
1936+
1937+
}
1938+
1939+
public static class VisitedEntityDeserializer implements JsonDeserializer<VisitedEntity<?, ?>> {
1940+
@Override
1941+
public VisitedEntity<?, ?> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
1942+
throws JsonParseException {
1943+
1944+
if (json.isJsonNull()) {
1945+
return null;
1946+
}
1947+
1948+
JsonObject visited = json.getAsJsonObject();
1949+
VisitedEntity<Object, Object> entity = new VisitedEntity<Object, Object>();
1950+
1951+
Class<?> vertexClazz = getParameterized();
1952+
Class<?> edgeClazz = null;
1953+
if (hasNextParameterized()) {
1954+
edgeClazz = nextParameterized();
1955+
}
1956+
1957+
if (visited.has("vertices")) {
1958+
entity.setVertices(getVertices(vertexClazz, context, visited.getAsJsonArray("vertices")));
1959+
}
1960+
if (visited.has("paths")) {
1961+
List<PathEntity<Object, Object>> pathEntities = new ArrayList<PathEntity<Object, Object>>();
1962+
JsonArray paths = visited.getAsJsonArray("paths");
1963+
if (!paths.equals(null)) {
1964+
for (int i = 0, imax = paths.size(); i < imax; i++) {
1965+
JsonObject path = paths.get(i).getAsJsonObject();
1966+
PathEntity<Object, Object> pathEntity = new PathEntity<Object, Object>();
1967+
1968+
if (path.has("edges")) {
1969+
pathEntity.setEdges(getEdges(edgeClazz, context, path.getAsJsonArray("edges")));
1970+
}
1971+
if (path.has("vertices")) {
1972+
pathEntity.setVertices(getVertices(vertexClazz, context, path.getAsJsonArray("vertices")));
1973+
}
1974+
1975+
pathEntities.add(pathEntity);
1976+
}
1977+
}
1978+
entity.setPaths(pathEntities);
1979+
}
1980+
1981+
return entity;
1982+
}
1983+
}
1984+
1985+
private static List<VertexEntity<Object>> getVertices(
1986+
Class<?> vertexClazz,
1987+
JsonDeserializationContext context,
1988+
JsonArray vertices) {
1989+
List<VertexEntity<Object>> list = new ArrayList<VertexEntity<Object>>();
1990+
if (!vertices.equals(null)) {
1991+
for (int i = 0, imax = vertices.size(); i < imax; i++) {
1992+
JsonObject vertex = vertices.get(i).getAsJsonObject();
1993+
VertexEntity<Object> ve = deserializeBaseParameter(vertex, new VertexEntity<Object>());
1994+
deserializeDocumentParameter(vertex, ve);
1995+
if (vertexClazz != null) {
1996+
ve.setEntity(context.deserialize(vertex, vertexClazz));
1997+
} else {
1998+
ve.setEntity(context.deserialize(vertex, Object.class));
1999+
}
2000+
list.add(ve);
2001+
}
2002+
}
2003+
return list;
2004+
}
2005+
2006+
private static List<EdgeEntity<Object>> getEdges(
2007+
Class<?> edgeClazz,
2008+
JsonDeserializationContext context,
2009+
JsonArray edges) {
2010+
List<EdgeEntity<Object>> list = new ArrayList<EdgeEntity<Object>>();
2011+
if (!edges.equals(null)) {
2012+
for (int i = 0, imax = edges.size(); i < imax; i++) {
2013+
JsonObject edge = edges.get(i).getAsJsonObject();
2014+
EdgeEntity<Object> ve = deserializeBaseParameter(edge, new EdgeEntity<Object>());
2015+
deserializeDocumentParameter(edge, ve);
2016+
if (edgeClazz != null) {
2017+
ve.setEntity(context.deserialize(edge, edgeClazz));
2018+
} else {
2019+
ve.setEntity(context.deserialize(edge, Object.class));
2020+
}
2021+
list.add(ve);
2022+
}
2023+
}
2024+
return list;
2025+
}
19102026
}

0 commit comments

Comments
 (0)