Skip to content

Commit e1e519d

Browse files
committed
fixed graph bug
1 parent 8cd83c0 commit e1e519d

File tree

4 files changed

+129
-20
lines changed

4 files changed

+129
-20
lines changed
Lines changed: 87 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,100 @@
11
package com.arangodb.entity;
22

3+
import java.util.ArrayList;
4+
import java.util.Iterator;
35
import java.util.List;
46

7+
import com.arangodb.ArangoException;
8+
59
public class EdgeDefinitionsEntity {
6-
List<EdgeDefinitionEntity> edgeDefinitions;
10+
11+
/**
12+
* The list of edgeDefinitions
13+
*/
14+
private List<EdgeDefinitionEntity> edgeDefinitions;
15+
16+
/**
17+
* A list of edge collections used in the edge definitions
18+
*/
19+
private List<String> edgeCollections;
20+
721

22+
public EdgeDefinitionsEntity(List<EdgeDefinitionEntity> edgeDefinitions) {
23+
this.edgeDefinitions = edgeDefinitions;
24+
this.edgeCollections = new ArrayList<String>();
25+
this.evalEdgeCollections();
26+
}
27+
28+
public EdgeDefinitionsEntity() {
29+
this.edgeDefinitions = new ArrayList<EdgeDefinitionEntity>();
30+
this.edgeCollections = new ArrayList<String>();
31+
}
32+
33+
/**
34+
* returns the number of edge definitions
35+
*
36+
* @return number of edge definitions
37+
*/
38+
public int getSize() {
39+
return this.edgeDefinitions.size();
40+
}
41+
42+
/**
43+
* get all edge definitions
44+
*
45+
* @return
46+
*/
847
public List<EdgeDefinitionEntity> getEdgeDefinitions() {
948
return edgeDefinitions;
1049
}
1150

12-
public void setEdgeDefinitions(List<EdgeDefinitionEntity> edgeDefinitions) {
13-
this.edgeDefinitions = edgeDefinitions;
14-
}
51+
/**
52+
* set the edge definitions (overwrites existing edge definitions)
53+
*
54+
* @param edgeDefinitions the edge definitions to be set
55+
*/
56+
public void setEdgeDefinitions(List<EdgeDefinitionEntity> edgeDefinitions) {
57+
this.edgeDefinitions = edgeDefinitions;
58+
this.evalEdgeCollections();
59+
}
1560

16-
public void addEdgeDefinition(EdgeDefinitionEntity edgeDefinition) {
17-
this.edgeDefinitions.add(edgeDefinition);
61+
/**
62+
* add a single edge definition
63+
*
64+
* @param edgeDefinition the edge definition to be added
65+
* @throws ArangoException
66+
*/
67+
public void addEdgeDefinition(EdgeDefinitionEntity edgeDefinition) {
68+
if(!this.edgeCollections.contains(edgeDefinition.getCollection())) {
69+
this.edgeDefinitions.add(edgeDefinition);
70+
this.edgeCollections.add(edgeDefinition.getCollection());
1871
}
19-
72+
}
73+
74+
/**
75+
* get a single edge definition identified by its edge collection name
76+
*
77+
* @param collectionName the name of the edge collection
78+
* @return the adjacent edgeDefinition or null, if no match
79+
*/
80+
public EdgeDefinitionEntity getEdgeDefinition(String collectionName) {
81+
for (EdgeDefinitionEntity edgeDefintion : this.edgeDefinitions) {
82+
if (edgeDefintion.getCollection() == collectionName) {
83+
return edgeDefintion;
84+
}
85+
}
86+
return null;
87+
}
88+
89+
/**
90+
* fills the list of edgeCollections
91+
*/
92+
private void evalEdgeCollections() {
93+
this.edgeCollections.clear();
94+
for (EdgeDefinitionEntity edgeDefintion : this.edgeDefinitions) {
95+
this.edgeCollections.add(edgeDefintion.getCollection());
96+
}
97+
}
98+
99+
20100
}

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

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.*;
2424
import java.util.Map.Entry;
2525

26+
import com.arangodb.ArangoException;
2627
import com.arangodb.entity.CollectionEntity.Figures;
2728
import com.arangodb.entity.ReplicationApplierState.LastError;
2829
import com.arangodb.entity.ReplicationApplierState.Progress;
@@ -1718,7 +1719,8 @@ public GraphEntity deserialize(JsonElement json, Type typeOfT, JsonDeserializati
17181719

17191720
if (graph.has("edgeDefinitions")) {
17201721
JsonArray edgeDefinitions = graph.getAsJsonArray("edgeDefinitions");
1721-
entity.edgeDefinitions = new ArrayList<EdgeDefinitionEntity>();
1722+
entity.edgeDefinitionsEntity = new EdgeDefinitionsEntity();
1723+
// EdgeDefinitionsEntity edgeDefinitionsEntity = new EdgeDefinitionsEntity();
17221724
if (!edgeDefinitions.equals(null)) {
17231725
for (int i = 0, imax = edgeDefinitions.size(); i < imax; i++) {
17241726
EdgeDefinitionEntity edgeDefinitionEntity = new EdgeDefinitionEntity();
@@ -1727,12 +1729,29 @@ public GraphEntity deserialize(JsonElement json, Type typeOfT, JsonDeserializati
17271729
edgeDefinitionEntity.setCollection(edgeDefinition.get("collection").getAsString());
17281730
}
17291731
if (edgeDefinition.has("from")) {
1730-
edgeDefinitionEntity.setFrom(new ArrayList<String>());
1732+
List<String> from = new ArrayList<String>();
1733+
JsonElement fromElem = edgeDefinition.get("from");
1734+
JsonArray fromArray = fromElem.getAsJsonArray();
1735+
Iterator<JsonElement> iterator = fromArray.iterator();
1736+
while(iterator.hasNext()) {
1737+
JsonElement e = iterator.next();
1738+
from.add(e.getAsString());
1739+
}
1740+
1741+
edgeDefinitionEntity.setFrom(from);
17311742
}
17321743
if (edgeDefinition.has("to")) {
1733-
edgeDefinitionEntity.setTo(new ArrayList<String>());
1744+
List<String> to = new ArrayList<String>();
1745+
JsonElement toElem = edgeDefinition.get("to");
1746+
JsonArray toArray = toElem.getAsJsonArray();
1747+
Iterator<JsonElement> iterator = toArray.iterator();
1748+
while(iterator.hasNext()) {
1749+
JsonElement e = iterator.next();
1750+
to.add(e.getAsString());
1751+
}
1752+
edgeDefinitionEntity.setTo(to);
17341753
}
1735-
entity.edgeDefinitions.add(edgeDefinitionEntity);
1754+
entity.edgeDefinitionsEntity.addEdgeDefinition(edgeDefinitionEntity);
17361755
}
17371756
}
17381757
}

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ public class GraphEntity extends BaseEntity implements DocumentHolder {
5050
List<String> orphanCollections;
5151

5252
/**
53-
* List of edge definitions of the graph.
53+
* The edge definitions of the graph.
5454
*/
55-
List<EdgeDefinitionEntity> edgeDefinitions;
55+
EdgeDefinitionsEntity edgeDefinitionsEntity;
5656

5757
/**
5858
* Name of the graph.
@@ -89,12 +89,20 @@ public void setDocumentKey(String documentKey) {
8989
this.documentKey = documentKey;
9090
}
9191

92+
public EdgeDefinitionsEntity getEdgeDefinitionsEntity() {
93+
return edgeDefinitionsEntity;
94+
}
95+
9296
public List<EdgeDefinitionEntity> getEdgeDefinitions() {
93-
return edgeDefinitions;
97+
return edgeDefinitionsEntity.getEdgeDefinitions();
98+
}
99+
100+
public void setEdgeDefinitionsEntity(EdgeDefinitionsEntity edgeDefinitionsEntity) {
101+
this.edgeDefinitionsEntity = edgeDefinitionsEntity;
94102
}
95103

96104
public void setEdgeDefinitions(List<EdgeDefinitionEntity> edgeDefinitions) {
97-
this.edgeDefinitions = edgeDefinitions;
105+
this.edgeDefinitionsEntity.setEdgeDefinitions(edgeDefinitions);
98106
}
99107

100108
public List<String> getOrphanCollections() {

src/test/java/com/arangodb/ArangoDriverGraphTest.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,12 @@ public void test_createGraph_2() throws ArangoException {
116116
public void test_getGraph() throws ArangoException {
117117
driver.createGraph(this.graphName, this.createEdgeDefinitions(2, 0), this.createOrphanCollections(2), true);
118118
GraphEntity graph = driver.getGraph(this.graphName);
119+
assertThat(graph.getEdgeDefinitionsEntity().getEdgeDefinitions().get(0).getClass().getName(), is(EdgeDefinitionEntity.class.getName()));
120+
assertThat(graph.getEdgeDefinitionsEntity().getEdgeDefinitions().get(0).getFrom().size(), is(3));
119121
assertThat(graph.getOrphanCollections().size(), is(2));
120122
assertThat(graph.getName(), is(this.graphName));
121-
assertThat(graph.getEdgeDefinitions().size(), is(2));
122-
assertThat(graph.getEdgeDefinitions().get(0).getCollection().startsWith("edge"), is(true));
123+
assertThat(graph.getEdgeDefinitionsEntity().getSize(), is(2));
124+
assertThat(graph.getEdgeDefinitionsEntity().getEdgeDefinitions().get(0).getCollection().startsWith("edge"), is(true));
123125

124126
}
125127

@@ -349,7 +351,7 @@ public void test_replace_edge_definition() throws ArangoException {
349351
to2.add(toCollectionName2);
350352
edgeDefinition2.setTo(to2);
351353
GraphEntity graph = driver.graphReplaceEdgeDefinition(this.graphName, edgeCollectionName, edgeDefinition2);
352-
List<EdgeDefinitionEntity> edgeDefinitions = graph.getEdgeDefinitions();
354+
List<EdgeDefinitionEntity> edgeDefinitions = graph.getEdgeDefinitionsEntity().getEdgeDefinitions();
353355
for (EdgeDefinitionEntity edgeDef : edgeDefinitions) {
354356
List<String> f = edgeDef.getFrom();
355357
assertThat(f.contains(from1), is(false));
@@ -399,15 +401,15 @@ public void test_replace_edge_definition_2_graphs() throws ArangoException {
399401
to2.add(toCollectionName2);
400402
edgeDefinition2.setTo(to2);
401403
GraphEntity graph1 = driver.graphReplaceEdgeDefinition(graphName1, edgeCollectionName, edgeDefinition2);
402-
List<EdgeDefinitionEntity> edgeDefinitions1 = graph1.getEdgeDefinitions();
404+
List<EdgeDefinitionEntity> edgeDefinitions1 = graph1.getEdgeDefinitionsEntity().getEdgeDefinitions();
403405
for (EdgeDefinitionEntity edgeDef : edgeDefinitions1) {
404406
List<String> f = edgeDef.getFrom();
405407
assertThat(f.contains(from1), is(false));
406408
List<String> t = edgeDef.getTo();
407409
assertThat(t.contains(to1), is(false));
408410
}
409411
GraphEntity graph2 = driver.graphReplaceEdgeDefinition(graphName1, edgeCollectionName, edgeDefinition2);
410-
List<EdgeDefinitionEntity> edgeDefinitions2 = graph2.getEdgeDefinitions();
412+
List<EdgeDefinitionEntity> edgeDefinitions2 = graph2.getEdgeDefinitionsEntity().getEdgeDefinitions();
411413
for (EdgeDefinitionEntity edgeDef : edgeDefinitions2) {
412414
List<String> f = edgeDef.getFrom();
413415
assertThat(f.contains(from1), is(false));

0 commit comments

Comments
 (0)