Skip to content

Commit e72d160

Browse files
author
Mark
committed
replace graph_shortes_path function with aql (fixes, tests added)
1 parent a97e1ad commit e72d160

File tree

4 files changed

+230
-23
lines changed

4 files changed

+230
-23
lines changed

src/main/java/com/arangodb/util/GraphQueryUtil.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ public static String createShortestPathQuery(
300300
if (weight != null) {
301301
sb.append(" OPTIONS {weightAttribute: @attribute, defaultWeight: @default} ");
302302
sb.append(
303-
" RETURN { v: v, e: e, d: IS_NULL(e) ? 0 : (IS_NUMBER(e[@attribute]) ? e[@attribute] : @default))}) ");
303+
" RETURN { v: v, e: e, d: IS_NULL(e) ? 0 : (IS_NUMBER(e[@attribute]) ? e[@attribute] : @default)}) ");
304304
bindVars.put("attribute", weight);
305305
final Long defaultWeight = shortestPathOptions.getDefaultWeight();
306306
bindVars.put("default", defaultWeight != null ? defaultWeight : 1);
@@ -317,7 +317,6 @@ public static String createShortestPathQuery(
317317
}
318318

319319
final String query = sb.toString();
320-
System.out.println(query);
321320
return query;
322321
}
323322
}

src/main/java/com/arangodb/util/ShortestPathOptions.java

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ public class ShortestPathOptions {
1010
private List<String> edgeCollectionRestriction;
1111
private List<String> startVertexCollectionRestriction;
1212
private List<String> endVertexCollectionRestriction;
13-
private Object edgeExamples;
1413
private String weight;
1514
private Long defaultWeight;
1615
private Boolean includeData = Boolean.TRUE;
@@ -103,26 +102,6 @@ public ShortestPathOptions setEndVertexCollectionRestriction(List<String> endVer
103102
return this;
104103
}
105104

106-
/**
107-
* A filter example for the edges
108-
*
109-
* @return A filter example for the edges
110-
*/
111-
public Object getEdgeExamples() {
112-
return edgeExamples;
113-
}
114-
115-
/**
116-
* A filter example for the edges
117-
*
118-
* @param edgeExamples
119-
* @return this
120-
*/
121-
public ShortestPathOptions setEdgeExamples(Object edgeExamples) {
122-
this.edgeExamples = edgeExamples;
123-
return this;
124-
}
125-
126105
/**
127106
* The name of the attribute of the edges containing the length as a string.
128107
*
Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
package com.arangodb;
2+
3+
import org.junit.After;
4+
import org.junit.Assert;
5+
import org.junit.Before;
6+
import org.junit.Test;
7+
8+
import com.arangodb.entity.EdgeEntity;
9+
import com.arangodb.entity.ShortestPathEntity;
10+
import com.arangodb.entity.marker.VertexEntity;
11+
import com.arangodb.util.ShortestPathOptions;
12+
13+
/**
14+
* @author Mark - mark@arangodb.com
15+
*
16+
*/
17+
public class ArangoDriverGraphShortestPathTest extends BaseGraphTest {
18+
19+
private static final String GRAPH_NAME = "UnitTestGraph";
20+
21+
@Before
22+
public void setup() {
23+
try {
24+
driver.deleteGraph(GRAPH_NAME);
25+
} catch (ArangoException e1) {
26+
}
27+
try {
28+
driver.createGraph(GRAPH_NAME, this.createEdgeDefinitions(1, 0), this.createOrphanCollections(0), true);
29+
} catch (final ArangoException e) {
30+
}
31+
}
32+
33+
@After
34+
public void cleanup() {
35+
try {
36+
driver.deleteGraph(GRAPH_NAME);
37+
} catch (ArangoException e1) {
38+
}
39+
}
40+
41+
@Test
42+
public void shortestPath() throws ArangoException {
43+
final TestComplexEntity01 v1 = new TestComplexEntity01("Homer", "A Simpson", 38);
44+
final TestComplexEntity01 v2 = new TestComplexEntity01("Marge", "A Simpson", 36);
45+
final TestComplexEntity01 v3 = new TestComplexEntity01("Bart", "A Simpson", 10);
46+
final TestComplexEntity01 v4 = new TestComplexEntity01("Remoh", "Homer's twin", 38);
47+
48+
final VertexEntity<TestComplexEntity01> vertex1 = driver.graphCreateVertex(GRAPH_NAME, "from1-1", v1, true);
49+
final VertexEntity<TestComplexEntity01> vertex2 = driver.graphCreateVertex(GRAPH_NAME, "to1-1", v2, true);
50+
final VertexEntity<TestComplexEntity01> vertex3 = driver.graphCreateVertex(GRAPH_NAME, "to1-1", v3, true);
51+
final VertexEntity<TestComplexEntity01> vertex4 = driver.graphCreateVertex(GRAPH_NAME, "from1-1", v4, true);
52+
53+
final TestComplexEntity02 e1 = new TestComplexEntity02(1, 2, 3);
54+
driver.graphCreateEdge(GRAPH_NAME, "edge-1", null, vertex1.getDocumentHandle(), vertex2.getDocumentHandle(), e1,
55+
null);
56+
57+
final TestComplexEntity02 e2 = new TestComplexEntity02(4, 5, 6);
58+
driver.graphCreateEdge(GRAPH_NAME, "edge-1", null, vertex1.getDocumentHandle(), vertex3.getDocumentHandle(), e2,
59+
null);
60+
61+
final TestComplexEntity02 e3 = new TestComplexEntity02(7, 8, 9);
62+
driver.graphCreateEdge(GRAPH_NAME, "edge-1", null, vertex4.getDocumentHandle(), vertex2.getDocumentHandle(), e3,
63+
null);
64+
65+
final TestComplexEntity02 e4 = new TestComplexEntity02(10, 11, 12);
66+
driver.graphCreateEdge(GRAPH_NAME, "edge-1", null, vertex4.getDocumentHandle(), vertex3.getDocumentHandle(), e4,
67+
null);
68+
69+
final ShortestPathOptions shortestPathOptions = new ShortestPathOptions();
70+
{
71+
final ShortestPathEntity<TestComplexEntity01, TestComplexEntity02> entity = driver.graphGetShortestPath(
72+
GRAPH_NAME, v1, v2, shortestPathOptions, TestComplexEntity01.class, TestComplexEntity02.class);
73+
Assert.assertEquals(201, entity.getCode());
74+
Assert.assertEquals(1, entity.getEdges().size());
75+
Assert.assertEquals(2, entity.getVertices().size());
76+
Assert.assertEquals(1L, entity.getDistance().longValue());
77+
}
78+
{
79+
final ShortestPathEntity<TestComplexEntity01, TestComplexEntity02> entity = driver.graphGetShortestPath(
80+
GRAPH_NAME, v1, v4, shortestPathOptions, TestComplexEntity01.class, TestComplexEntity02.class);
81+
Assert.assertEquals(201, entity.getCode());
82+
Assert.assertEquals(2, entity.getEdges().size());
83+
Assert.assertEquals(3, entity.getVertices().size());
84+
Assert.assertEquals(2L, entity.getDistance().longValue());
85+
}
86+
}
87+
88+
@Test
89+
public void shortestPathDirectionOut() throws ArangoException {
90+
final TestComplexEntity01 v1 = new TestComplexEntity01("Homer", "A Simpson", 38);
91+
final TestComplexEntity01 v2 = new TestComplexEntity01("Marge", "A Simpson", 36);
92+
final TestComplexEntity01 v3 = new TestComplexEntity01("Bart", "A Simpson", 10);
93+
final TestComplexEntity01 v4 = new TestComplexEntity01("Remoh", "Homer's twin", 38);
94+
95+
final VertexEntity<TestComplexEntity01> vertex1 = driver.graphCreateVertex(GRAPH_NAME, "from1-1", v1, true);
96+
final VertexEntity<TestComplexEntity01> vertex2 = driver.graphCreateVertex(GRAPH_NAME, "to1-1", v2, true);
97+
final VertexEntity<TestComplexEntity01> vertex3 = driver.graphCreateVertex(GRAPH_NAME, "to1-1", v3, true);
98+
final VertexEntity<TestComplexEntity01> vertex4 = driver.graphCreateVertex(GRAPH_NAME, "from1-1", v4, true);
99+
100+
final TestComplexEntity02 e1 = new TestComplexEntity02(1, 2, 3);
101+
driver.graphCreateEdge(GRAPH_NAME, "edge-1", null, vertex1.getDocumentHandle(), vertex2.getDocumentHandle(), e1,
102+
null);
103+
104+
final TestComplexEntity02 e2 = new TestComplexEntity02(4, 5, 6);
105+
driver.graphCreateEdge(GRAPH_NAME, "edge-1", null, vertex1.getDocumentHandle(), vertex3.getDocumentHandle(), e2,
106+
null);
107+
108+
final TestComplexEntity02 e3 = new TestComplexEntity02(7, 8, 9);
109+
driver.graphCreateEdge(GRAPH_NAME, "edge-1", null, vertex4.getDocumentHandle(), vertex2.getDocumentHandle(), e3,
110+
null);
111+
112+
final TestComplexEntity02 e4 = new TestComplexEntity02(10, 11, 12);
113+
driver.graphCreateEdge(GRAPH_NAME, "edge-1", null, vertex4.getDocumentHandle(), vertex3.getDocumentHandle(), e4,
114+
null);
115+
116+
final ShortestPathOptions shortestPathOptions = new ShortestPathOptions();
117+
shortestPathOptions.setDirection(Direction.OUTBOUND);
118+
{
119+
final ShortestPathEntity<TestComplexEntity01, TestComplexEntity02> entity = driver.graphGetShortestPath(
120+
GRAPH_NAME, v1, v2, shortestPathOptions, TestComplexEntity01.class, TestComplexEntity02.class);
121+
Assert.assertEquals(201, entity.getCode());
122+
Assert.assertEquals(1, entity.getEdges().size());
123+
Assert.assertEquals(2, entity.getVertices().size());
124+
}
125+
{
126+
final ShortestPathEntity<TestComplexEntity01, TestComplexEntity02> entity = driver.graphGetShortestPath(
127+
GRAPH_NAME, v1, v4, shortestPathOptions, TestComplexEntity01.class, TestComplexEntity02.class);
128+
Assert.assertEquals(201, entity.getCode());
129+
Assert.assertNull(entity.getEdges());
130+
Assert.assertNull(entity.getVertices());
131+
}
132+
}
133+
134+
@Test
135+
public void shortestPathDirectionIn() throws ArangoException {
136+
final TestComplexEntity01 v1 = new TestComplexEntity01("Homer", "A Simpson", 38);
137+
final TestComplexEntity01 v2 = new TestComplexEntity01("Marge", "A Simpson", 36);
138+
final TestComplexEntity01 v3 = new TestComplexEntity01("Bart", "A Simpson", 10);
139+
final TestComplexEntity01 v4 = new TestComplexEntity01("Remoh", "Homer's twin", 38);
140+
141+
final VertexEntity<TestComplexEntity01> vertex1 = driver.graphCreateVertex(GRAPH_NAME, "from1-1", v1, true);
142+
final VertexEntity<TestComplexEntity01> vertex2 = driver.graphCreateVertex(GRAPH_NAME, "to1-1", v2, true);
143+
final VertexEntity<TestComplexEntity01> vertex3 = driver.graphCreateVertex(GRAPH_NAME, "to1-1", v3, true);
144+
final VertexEntity<TestComplexEntity01> vertex4 = driver.graphCreateVertex(GRAPH_NAME, "from1-1", v4, true);
145+
146+
final TestComplexEntity02 e1 = new TestComplexEntity02(1, 2, 3);
147+
driver.graphCreateEdge(GRAPH_NAME, "edge-1", null, vertex1.getDocumentHandle(), vertex2.getDocumentHandle(), e1,
148+
null);
149+
150+
final TestComplexEntity02 e2 = new TestComplexEntity02(4, 5, 6);
151+
driver.graphCreateEdge(GRAPH_NAME, "edge-1", null, vertex1.getDocumentHandle(), vertex3.getDocumentHandle(), e2,
152+
null);
153+
154+
final TestComplexEntity02 e3 = new TestComplexEntity02(7, 8, 9);
155+
driver.graphCreateEdge(GRAPH_NAME, "edge-1", null, vertex4.getDocumentHandle(), vertex2.getDocumentHandle(), e3,
156+
null);
157+
158+
final TestComplexEntity02 e4 = new TestComplexEntity02(10, 11, 12);
159+
driver.graphCreateEdge(GRAPH_NAME, "edge-1", null, vertex4.getDocumentHandle(), vertex3.getDocumentHandle(), e4,
160+
null);
161+
162+
final ShortestPathOptions shortestPathOptions = new ShortestPathOptions();
163+
shortestPathOptions.setDirection(Direction.INBOUND);
164+
{
165+
final ShortestPathEntity<TestComplexEntity01, TestComplexEntity02> entity = driver.graphGetShortestPath(
166+
GRAPH_NAME, v1, v2, shortestPathOptions, TestComplexEntity01.class, TestComplexEntity02.class);
167+
Assert.assertEquals(201, entity.getCode());
168+
Assert.assertNull(entity.getEdges());
169+
Assert.assertNull(entity.getVertices());
170+
}
171+
{
172+
final ShortestPathEntity<TestComplexEntity01, TestComplexEntity02> entity = driver.graphGetShortestPath(
173+
GRAPH_NAME, v1, v4, shortestPathOptions, TestComplexEntity01.class, TestComplexEntity02.class);
174+
Assert.assertEquals(201, entity.getCode());
175+
Assert.assertNull(entity.getEdges());
176+
Assert.assertNull(entity.getVertices());
177+
}
178+
}
179+
180+
@Test
181+
public void shortestPathWeigth() throws ArangoException {
182+
final TestComplexEntity01 v1 = new TestComplexEntity01("Homer", "A Simpson", 38);
183+
final TestComplexEntity01 v2 = new TestComplexEntity01("Marge", "A Simpson", 36);
184+
final TestComplexEntity01 v3 = new TestComplexEntity01("Bart", "A Simpson", 10);
185+
final TestComplexEntity01 v4 = new TestComplexEntity01("Remoh", "Homer's twin", 38);
186+
187+
final VertexEntity<TestComplexEntity01> vertex1 = driver.graphCreateVertex(GRAPH_NAME, "from1-1", v1, true);
188+
final VertexEntity<TestComplexEntity01> vertex2 = driver.graphCreateVertex(GRAPH_NAME, "to1-1", v2, true);
189+
final VertexEntity<TestComplexEntity01> vertex3 = driver.graphCreateVertex(GRAPH_NAME, "to1-1", v3, true);
190+
final VertexEntity<TestComplexEntity01> vertex4 = driver.graphCreateVertex(GRAPH_NAME, "from1-1", v4, true);
191+
192+
int x1 = 1;
193+
final TestComplexEntity02 e1 = new TestComplexEntity02(x1, 2, 3);
194+
EdgeEntity<TestComplexEntity02> edge1 = driver.graphCreateEdge(GRAPH_NAME, "edge-1", null,
195+
vertex1.getDocumentHandle(), vertex2.getDocumentHandle(), e1, null);
196+
197+
final TestComplexEntity02 e2 = new TestComplexEntity02(4, 5, 6);
198+
driver.graphCreateEdge(GRAPH_NAME, "edge-1", null, vertex1.getDocumentHandle(), vertex3.getDocumentHandle(), e2,
199+
null);
200+
201+
int x3 = 7;
202+
final TestComplexEntity02 e3 = new TestComplexEntity02(x3, 8, 9);
203+
EdgeEntity<TestComplexEntity02> edge3 = driver.graphCreateEdge(GRAPH_NAME, "edge-1", null,
204+
vertex4.getDocumentHandle(), vertex2.getDocumentHandle(), e3, null);
205+
206+
final TestComplexEntity02 e4 = new TestComplexEntity02(10, 11, 12);
207+
driver.graphCreateEdge(GRAPH_NAME, "edge-1", null, vertex4.getDocumentHandle(), vertex3.getDocumentHandle(), e4,
208+
null);
209+
210+
final ShortestPathOptions shortestPathOptions = new ShortestPathOptions();
211+
shortestPathOptions.setWeight("x");
212+
{
213+
final ShortestPathEntity<TestComplexEntity01, TestComplexEntity02> entity = driver.graphGetShortestPath(
214+
GRAPH_NAME, v1, v4, shortestPathOptions, TestComplexEntity01.class, TestComplexEntity02.class);
215+
Assert.assertEquals(201, entity.getCode());
216+
Assert.assertEquals(2, entity.getEdges().size());
217+
Assert.assertEquals(3, entity.getVertices().size());
218+
Assert.assertEquals(x1 + x3, entity.getDistance().longValue());
219+
for (EdgeEntity<TestComplexEntity02> edge : entity.getEdges()) {
220+
Assert.assertTrue(edge.getDocumentHandle().equals(edge1.getDocumentHandle())
221+
|| edge.getDocumentHandle().equals(edge3.getDocumentHandle()));
222+
}
223+
}
224+
}
225+
}

src/test/java/com/arangodb/ArangoTestSuite.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@
101101

102102
ArangoDriverGraphEdgeReplaceTest.class,
103103

104+
ArangoDriverGraphEdgeUpdateTest.class,
105+
106+
ArangoDriverGraphShortestPathTest.class,
107+
104108
ArangoDriverTransactionTest.class,
105109

106110
ArangoDriverThreadSafeTest.class,

0 commit comments

Comments
 (0)