Skip to content

Commit 6ce38a8

Browse files
author
a-brandt
committed
2 parents 6c0231d + f2db9ae commit 6ce38a8

21 files changed

+353
-62
lines changed

ChangeLog

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1-
v3.0.0 (2016-XX-XX)
1+
v3.0.0 (2016-06-17)
22
---------------------------
33
* removed ArangoDriver.EdgeEntity() (/_api/edge withdrawn in Server)
44
* removed CAP-Index (Cap-constraints are withdrawn in Server)
5+
* removed Param database in User-Methods (in 3.0 users are managed in _users Collection in _system Database only)
6+
* added User-Method grantDatabaseAccess(username, database)
7+
* replaced Graph-Functions (graph_edge, graph_vertices, graph_shortes_path) with AQL
8+
* removed deprecated Methods
9+
* added Transaction attribute allowImplicit
10+
* refactored QueryCachePropertiesEntity, TransactionResultEntity
511

612
v2.7.4 (2016-04-15)
713
---------------------------

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

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4560,6 +4560,64 @@ public TransactionResultEntity executeTransaction(final TransactionEntity transa
45604560
return this.transactionDriver.executeTransaction(getDefaultDatabase(), transactionEntity);
45614561
}
45624562

4563+
/**
4564+
* Create an edge in an edge collection.
4565+
*
4566+
* @param collectionName
4567+
* name of the edge collection
4568+
* @param value
4569+
* the edge object
4570+
* @param fromHandle
4571+
* id of document 'from'
4572+
* @param toHandle
4573+
* id of document 'to'
4574+
* @param waitForSync
4575+
* wait for sync
4576+
* @return the new created EdgeEntity object
4577+
* @throws ArangoException
4578+
*/
4579+
public <T> EdgeEntity<T> createEdge(
4580+
final String collectionName,
4581+
final T value,
4582+
final String fromHandle,
4583+
final String toHandle,
4584+
final Boolean waitForSync) throws ArangoException {
4585+
4586+
return createEdge(collectionName, null, value, fromHandle, toHandle, waitForSync);
4587+
}
4588+
4589+
/**
4590+
* Create an edge in an edge collection. This method allows to define to
4591+
* documents key. Note that the collection's property
4592+
* CollectionKeyOption.allowUserKeys has to be set accordingly.
4593+
*
4594+
* @param collectionName
4595+
* name of the edge collection
4596+
* @param documentKey
4597+
* the desired document key
4598+
* @param value
4599+
* the edge object
4600+
* @param fromHandle
4601+
* id of document 'from'
4602+
* @param toHandle
4603+
* id of document 'to'
4604+
* @param waitForSync
4605+
* wait for sync
4606+
* @return the new created EdgeEntity object
4607+
* @throws ArangoException
4608+
*/
4609+
public <T> EdgeEntity<T> createEdge(
4610+
final String collectionName,
4611+
final String documentKey,
4612+
final T value,
4613+
final String fromHandle,
4614+
final String toHandle,
4615+
final Boolean waitForSync) throws ArangoException {
4616+
4617+
return documentDriver.createEdge(getDefaultDatabase(), collectionName, documentKey, value, fromHandle, toHandle,
4618+
waitForSync);
4619+
}
4620+
45634621
/**
45644622
* Do a graph traversal.
45654623
*

src/main/java/com/arangodb/InternalDocumentDriver.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.List;
44

55
import com.arangodb.entity.DocumentEntity;
6+
import com.arangodb.entity.EdgeEntity;
67
import com.arangodb.impl.BaseDriverInterface;
78

89
/**
@@ -67,4 +68,14 @@ String getDocumentRaw(String database, String documentHandle, Long ifNoneMatchRe
6768
throws ArangoException;
6869

6970
DocumentEntity<?> deleteDocument(String database, String documentHandle, Long rev) throws ArangoException;
71+
72+
<T> EdgeEntity<T> createEdge(
73+
String database,
74+
String collectionName,
75+
String documentKey,
76+
T value,
77+
String fromHandle,
78+
String toHandle,
79+
Boolean waitForSync) throws ArangoException;
80+
7081
}

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

Lines changed: 8 additions & 3 deletions
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.QueryCachePropertiesEntity.CacheMode;
4041
import com.arangodb.entity.ReplicationApplierState.LastError;
4142
import com.arangodb.entity.ReplicationApplierState.Progress;
4243
import com.arangodb.entity.ReplicationInventoryEntity.Collection;
@@ -1958,6 +1959,9 @@ public ReplicationLoggerStateEntity.Client deserialize(
19581959
}
19591960

19601961
public static class GraphEntityDeserializer implements JsonDeserializer<GraphEntity> {
1962+
1963+
private static final String COLLECTION = "collection";
1964+
19611965
@Override
19621966
public GraphEntity deserialize(
19631967
final JsonElement json,
@@ -2007,8 +2011,8 @@ private void addEdgeDefinitions(final GraphEntity entity, final JsonArray edgeDe
20072011
for (int i = 0, imax = edgeDefinitions.size(); i < imax; i++) {
20082012
final EdgeDefinitionEntity edgeDefinitionEntity = new EdgeDefinitionEntity();
20092013
final JsonObject edgeDefinition = edgeDefinitions.get(i).getAsJsonObject();
2010-
if (edgeDefinition.has("collection")) {
2011-
edgeDefinitionEntity.setCollection(edgeDefinition.get("collection").getAsString());
2014+
if (edgeDefinition.has(COLLECTION)) {
2015+
edgeDefinitionEntity.setCollection(edgeDefinition.get(COLLECTION).getAsString());
20122016
}
20132017
if (edgeDefinition.has("from")) {
20142018
final List<String> from = new ArrayList<String>();
@@ -2302,7 +2306,8 @@ public QueryCachePropertiesEntity deserialize(
23022306
final QueryCachePropertiesEntity entity = deserializeBaseParameter(obj, new QueryCachePropertiesEntity());
23032307

23042308
if (obj.has("mode")) {
2305-
entity.setMode(obj.getAsJsonPrimitive("mode").getAsString());
2309+
final String modeAsString = obj.getAsJsonPrimitive("mode").getAsString();
2310+
entity.setMode(CacheMode.valueOf(modeAsString));
23062311
}
23072312

23082313
if (obj.has("maxResults")) {

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,15 @@
2121
*/
2222
public class QueryCachePropertiesEntity extends BaseEntity {
2323

24+
public enum CacheMode {
25+
off, on, demand;
26+
}
27+
2428
/**
2529
* The mode the AQL query cache operates in. The mode is one of the
2630
* following values: "off", "on" or "demand".
2731
*/
28-
private String mode;
32+
private CacheMode mode;
2933

3034
/**
3135
* The maximum number of query results that will be stored per
@@ -41,7 +45,7 @@ public QueryCachePropertiesEntity() {
4145
*
4246
* @return The mode is one of the following values: "off", "on" or "demand".
4347
*/
44-
public String getMode() {
48+
public CacheMode getMode() {
4549
return mode;
4650
}
4751

@@ -52,7 +56,7 @@ public String getMode() {
5256
* The mode is one of the following values: "off", "on" or
5357
* "demand".
5458
*/
55-
public void setMode(String mode) {
59+
public void setMode(CacheMode mode) {
5660
this.mode = mode;
5761
}
5862

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

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,19 @@ public class TransactionEntity extends BaseEntity {
2727

2828
public static class ReadWriteCollections {
2929

30-
List<String> read = new ArrayList<String>();
30+
private List<String> read = new ArrayList<String>();
3131

32-
List<String> write = new ArrayList<String>();
32+
private List<String> write = new ArrayList<String>();
33+
34+
private boolean allowImplicit = true;
35+
36+
public boolean isAllowImplicit() {
37+
return allowImplicit;
38+
}
39+
40+
public void setAllowImplicit(boolean allowImplicit) {
41+
this.allowImplicit = allowImplicit;
42+
}
3343
}
3444

3545
ReadWriteCollections collections = new ReadWriteCollections();
@@ -62,6 +72,15 @@ public void addWriteCollection(String collection) {
6272
this.collections.write.add(collection);
6373
}
6474

75+
/**
76+
* @param allowImplicit
77+
* allows(true)/ disallows(false) read access to other
78+
* collections than specified. Default is true.
79+
*/
80+
public void setAllowImplicit(final boolean allowImplicit) {
81+
collections.setAllowImplicit(allowImplicit);
82+
}
83+
6584
public String getAction() {
6685
return action;
6786
}

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

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package com.arangodb.entity;
1818

19+
import com.google.gson.JsonObject;
20+
1921
/**
2022
* @author tamtam180 - kirscheless at gmail.com
2123
* @author gschwab
@@ -28,9 +30,8 @@ public class TransactionResultEntity extends BaseEntity {
2830
*/
2931
private Object result;
3032

31-
@SuppressWarnings("unchecked")
32-
public <T> T getResult() {
33-
return (T) this.result;
33+
public JsonObject getResultAsJsonObject() {
34+
return (JsonObject) result;
3435
}
3536

3637
public long getResultAsLong() {
@@ -58,6 +59,14 @@ public int getResultAsInt() {
5859
return number.intValue();
5960
}
6061

62+
public boolean getResultAsBoolean() {
63+
return (Boolean) result;
64+
}
65+
66+
public String getResultAsString() {
67+
return (String) result;
68+
}
69+
6170
public void setResult(Object result) {
6271
this.result = result;
6372
}

src/main/java/com/arangodb/impl/BaseArangoDriverImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
*/
2727
class BaseArangoDriverImpl extends BaseArangoDriver implements BaseDriverInterface {
2828

29+
protected static final String COLLECTION = "collection";
2930
protected ArangoConfigure configure;
3031
protected HttpManager httpManager;
3132
protected AnnotationHandler annotationHandler;

src/main/java/com/arangodb/impl/InternalDocumentDriverImpl.java

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,14 @@
2525
import com.arangodb.entity.CursorEntity;
2626
import com.arangodb.entity.DefaultEntity;
2727
import com.arangodb.entity.DocumentEntity;
28+
import com.arangodb.entity.EdgeEntity;
2829
import com.arangodb.entity.EntityFactory;
2930
import com.arangodb.http.HttpManager;
3031
import com.arangodb.http.HttpResponseEntity;
32+
import com.arangodb.util.EdgeUtils;
3133
import com.arangodb.util.MapBuilder;
3234
import com.google.gson.JsonElement;
35+
import com.google.gson.JsonObject;
3336

3437
/**
3538
* @author tamtam180 - kirscheless at gmail.com
@@ -67,7 +70,7 @@ private <T> DocumentEntity<T> internalCreateDocument(
6770
}
6871

6972
final HttpResponseEntity res = httpManager.doPost(createDocumentEndpointUrl(database),
70-
new MapBuilder().put("collection", collectionName).put(WAIT_FOR_SYNC, waitForSync).get(), body);
73+
new MapBuilder().put(COLLECTION, collectionName).put(WAIT_FOR_SYNC, waitForSync).get(), body);
7174

7275
@SuppressWarnings("unchecked")
7376
final DocumentEntity<T> result = createEntity(res, DocumentEntity.class);
@@ -183,7 +186,7 @@ public DocumentEntity<String> updateDocumentRaw(
183186
@Override
184187
public List<String> getDocuments(final String database, final String collectionName) throws ArangoException {
185188
final HttpResponseEntity res = httpManager.doPut(createEndpointUrl(database, "/_api/simple/all-keys"), null,
186-
EntityFactory.toJsonString(new MapBuilder().put("collection", collectionName).put("type", "id").get()));
189+
EntityFactory.toJsonString(new MapBuilder().put(COLLECTION, collectionName).put("type", "id").get()));
187190

188191
@SuppressWarnings("unchecked")
189192
final CursorEntity<String> tmp = createEntity(res, CursorEntity.class, String.class);
@@ -264,4 +267,36 @@ private Map<String, Object> createRevisionCheckHeader(final Long rev) {
264267
}
265268
return header;
266269
}
270+
271+
@Override
272+
public <T> EdgeEntity<T> createEdge(
273+
String database,
274+
String collectionName,
275+
String documentKey,
276+
T value,
277+
String fromHandle,
278+
String toHandle,
279+
Boolean waitForSync) throws ArangoException {
280+
281+
validateCollectionName(collectionName);
282+
283+
JsonObject obj = EdgeUtils.valueToEdgeJsonObject(documentKey, fromHandle, toHandle, value);
284+
285+
final HttpResponseEntity res = httpManager.doPost(createDocumentEndpointUrl(database),
286+
new MapBuilder().put(COLLECTION, collectionName).put(WAIT_FOR_SYNC, waitForSync).get(),
287+
EntityFactory.toJsonString(obj));
288+
289+
@SuppressWarnings("unchecked")
290+
final EdgeEntity<T> entity = createEntity(res, EdgeEntity.class);
291+
292+
if (value != null) {
293+
entity.setEntity(value);
294+
annotationHandler.updateDocumentAttributes(value, entity.getDocumentRevision(), entity.getDocumentHandle(),
295+
entity.getDocumentKey());
296+
}
297+
298+
entity.setFromVertexHandle(fromHandle);
299+
entity.setToVertexHandle(toHandle);
300+
return entity;
301+
}
267302
}

0 commit comments

Comments
 (0)