Skip to content

Commit cf1da0e

Browse files
committed
typed ArangoCollection#insertDocuments
1 parent f2a7741 commit cf1da0e

8 files changed

+94
-52
lines changed

src/main/java/com/arangodb/ArangoCollection.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public interface ArangoCollection extends ArangoSerdeAccessor {
103103
* @see <a href="https://www.arangodb.com/docs/stable/http/document-working-with-documents.html#create-document">API
104104
* Documentation</a>
105105
*/
106-
<T> MultiDocumentEntity<DocumentCreateEntity<T>> insertDocuments(Collection<T> values) throws ArangoDBException;
106+
MultiDocumentEntity<DocumentCreateEntity<Void>> insertDocuments(Collection<?> values) throws ArangoDBException;
107107

108108
/**
109109
* Creates new documents from the given documents, unless there is already a document with the _key given. If no
@@ -122,6 +122,24 @@ public interface ArangoCollection extends ArangoSerdeAccessor {
122122
<T> MultiDocumentEntity<DocumentCreateEntity<T>> insertDocuments(
123123
Collection<T> values, DocumentCreateOptions options) throws ArangoDBException;
124124

125+
/**
126+
* Creates new documents from the given documents, unless there is already a document with the _key given. If no
127+
* _key is given, a new unique _key is generated automatically.
128+
* <p>
129+
* Limitations:
130+
* - the fields having {@code null} value are always removed during serialization
131+
*
132+
* @param values A List of documents (POJO, {@link com.arangodb.util.RawJson} or {@link com.arangodb.util.RawBytes})
133+
* @param options Additional options, can be null
134+
* @param type Deserialization target type for the returned documents.
135+
* @return information about the documents
136+
* @throws ArangoDBException
137+
* @see <a href="https://www.arangodb.com/docs/stable/http/document-working-with-documents.html#create-document">API
138+
* Documentation</a>
139+
*/
140+
<T> MultiDocumentEntity<DocumentCreateEntity<T>> insertDocuments(
141+
Collection<T> values, DocumentCreateOptions options, Class<T> type) throws ArangoDBException;
142+
125143
/**
126144
* Bulk imports the given values into the collection.
127145
* <p>

src/main/java/com/arangodb/async/ArangoCollectionAsync.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public interface ArangoCollectionAsync extends ArangoSerdeAccessor {
9797
* @see <a href="https://www.arangodb.com/docs/stable/http/document-working-with-documents.html#create-document">API
9898
* Documentation</a>
9999
*/
100-
<T> CompletableFuture<MultiDocumentEntity<DocumentCreateEntity<T>>> insertDocuments(final Collection<T> values);
100+
CompletableFuture<MultiDocumentEntity<DocumentCreateEntity<Void>>> insertDocuments(final Collection<?> values);
101101

102102
/**
103103
* Creates new documents from the given documents, unless there is already a document with the _key given. If no
@@ -113,6 +113,22 @@ <T> CompletableFuture<MultiDocumentEntity<DocumentCreateEntity<T>>> insertDocume
113113
final Collection<T> values,
114114
final DocumentCreateOptions options);
115115

116+
/**
117+
* Creates new documents from the given documents, unless there is already a document with the _key given. If no
118+
* _key is given, a new unique _key is generated automatically.
119+
*
120+
* @param values A List of documents (POJO, {@link com.arangodb.util.RawJson} or {@link com.arangodb.util.RawBytes})
121+
* @param options Additional options, can be null
122+
* @param type Deserialization target type for the returned documents.
123+
* @return information about the documents
124+
* @see <a href="https://www.arangodb.com/docs/stable/http/document-working-with-documents.html#create-document">API
125+
* Documentation</a>
126+
*/
127+
<T> CompletableFuture<MultiDocumentEntity<DocumentCreateEntity<T>>> insertDocuments(
128+
final Collection<T> values,
129+
final DocumentCreateOptions options,
130+
final Class<T> type);
131+
116132
/**
117133
* Imports documents
118134
*

src/main/java/com/arangodb/async/internal/ArangoCollectionAsyncImpl.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,20 +66,24 @@ public <T> CompletableFuture<DocumentCreateEntity<T>> insertDocument(T value, Do
6666
}
6767

6868
@Override
69-
public <T> CompletableFuture<MultiDocumentEntity<DocumentCreateEntity<T>>> insertDocuments(
70-
final Collection<T> values) {
71-
final DocumentCreateOptions params = new DocumentCreateOptions();
72-
return executor.execute(insertDocumentsRequest(values, params),
73-
insertDocumentsResponseDeserializer(values, params));
69+
public CompletableFuture<MultiDocumentEntity<DocumentCreateEntity<Void>>> insertDocuments(
70+
final Collection<?> values) {
71+
return executor
72+
.execute(insertDocumentsRequest(values, new DocumentCreateOptions()), insertDocumentsResponseDeserializer(Void.class));
7473
}
7574

7675
@Override
76+
@SuppressWarnings("unchecked")
7777
public <T> CompletableFuture<MultiDocumentEntity<DocumentCreateEntity<T>>> insertDocuments(
7878
final Collection<T> values,
7979
final DocumentCreateOptions options) {
80-
final DocumentCreateOptions params = (options != null ? options : new DocumentCreateOptions());
81-
return executor.execute(insertDocumentsRequest(values, params),
82-
insertDocumentsResponseDeserializer(values, params));
80+
return insertDocuments(values, options, (Class<T>) getCollectionContentClass(values));
81+
}
82+
83+
@Override
84+
public <T> CompletableFuture<MultiDocumentEntity<DocumentCreateEntity<T>>> insertDocuments(Collection<T> values, DocumentCreateOptions options, Class<T> type) {
85+
return executor
86+
.execute(insertDocumentsRequest(values, options), insertDocumentsResponseDeserializer(type));
8387
}
8488

8589
@Override

src/main/java/com/arangodb/internal/ArangoCollectionImpl.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,23 @@ public <T> DocumentCreateEntity<T> insertDocument(final T value, final DocumentC
6565
}
6666

6767
@Override
68-
public <T> MultiDocumentEntity<DocumentCreateEntity<T>> insertDocuments(final Collection<T> values)
68+
public MultiDocumentEntity<DocumentCreateEntity<Void>> insertDocuments(final Collection<?> values)
6969
throws ArangoDBException {
70-
return insertDocuments(values, new DocumentCreateOptions());
70+
return executor
71+
.execute(insertDocumentsRequest(values, new DocumentCreateOptions()), insertDocumentsResponseDeserializer(Void.class));
7172
}
7273

7374
@Override
75+
@SuppressWarnings("unchecked")
7476
public <T> MultiDocumentEntity<DocumentCreateEntity<T>> insertDocuments(
7577
final Collection<T> values, final DocumentCreateOptions options) throws ArangoDBException {
76-
final DocumentCreateOptions params = (options != null ? options : new DocumentCreateOptions());
78+
return insertDocuments(values, options, (Class<T>) getCollectionContentClass(values));
79+
}
80+
81+
@Override
82+
public <T> MultiDocumentEntity<DocumentCreateEntity<T>> insertDocuments(Collection<T> values, DocumentCreateOptions options, Class<T> type) throws ArangoDBException {
7783
return executor
78-
.execute(insertDocumentsRequest(values, params), insertDocumentsResponseDeserializer(values, params));
84+
.execute(insertDocumentsRequest(values, options), insertDocumentsResponseDeserializer(type));
7985
}
8086

8187
@Override

src/main/java/com/arangodb/internal/InternalArangoCollection.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,8 @@ protected <T> Request insertDocumentsRequest(final Collection<T> values, final D
109109
return request;
110110
}
111111

112-
protected <T> ResponseDeserializer<MultiDocumentEntity<DocumentCreateEntity<T>>> insertDocumentsResponseDeserializer(
113-
final Collection<T> values, final DocumentCreateOptions params) {
112+
protected <T> ResponseDeserializer<MultiDocumentEntity<DocumentCreateEntity<T>>> insertDocumentsResponseDeserializer(Class<T> userDataClass) {
114113
return response -> {
115-
Class<?> userDataClass = getCollectionContentClass(values);
116114
final MultiDocumentEntity<DocumentCreateEntity<T>> multiDocument = new MultiDocumentEntity<>();
117115
final Collection<DocumentCreateEntity<T>> docs = new ArrayList<>();
118116
final Collection<ErrorEntity> errors = new ArrayList<>();

src/test/java/com/arangodb/ArangoCollectionTest.java

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,7 @@ void getDocumentsWithCustomShardingKey(ArangoCollection c) {
558558

559559
List<BaseDocument> values = IntStream.range(0, 10).mapToObj(String::valueOf).map(key -> new BaseDocument()).peek(it -> it.addAttribute("customField", rnd())).collect(Collectors.toList());
560560

561-
MultiDocumentEntity<DocumentCreateEntity<BaseDocument>> inserted = collection.insertDocuments(values);
561+
MultiDocumentEntity<DocumentCreateEntity<Void>> inserted = collection.insertDocuments(values);
562562
List<String> insertedKeys = inserted.getDocuments().stream().map(DocumentEntity::getKey).collect(Collectors.toList());
563563

564564
final Collection<BaseDocument> documents = collection.getDocuments(insertedKeys, BaseDocument.class).getDocuments();
@@ -1834,7 +1834,7 @@ void documentExistsIfNoneMatchFail(ArangoCollection collection) {
18341834
void insertDocuments(ArangoCollection collection) {
18351835
final Collection<BaseDocument> values = Arrays.asList(new BaseDocument(), new BaseDocument(), new BaseDocument());
18361836

1837-
final MultiDocumentEntity<DocumentCreateEntity<BaseDocument>> docs = collection.insertDocuments(values, null);
1837+
final MultiDocumentEntity<?> docs = collection.insertDocuments(values);
18381838
assertThat(docs).isNotNull();
18391839
assertThat(docs.getDocuments()).isNotNull();
18401840
assertThat(docs.getDocuments()).hasSize(3);
@@ -1877,7 +1877,7 @@ void insertDocumentsJson(ArangoCollection collection) {
18771877
values.add(RawJson.of("{}"));
18781878
values.add(RawJson.of("{}"));
18791879
values.add(RawJson.of("{}"));
1880-
final MultiDocumentEntity<DocumentCreateEntity<RawJson>> docs = collection.insertDocuments(values);
1880+
final MultiDocumentEntity<?> docs = collection.insertDocuments(values);
18811881
assertThat(docs).isNotNull();
18821882
assertThat(docs.getDocuments()).isNotNull();
18831883
assertThat(docs.getDocuments()).hasSize(3);
@@ -1890,7 +1890,7 @@ void insertDocumentsJson(ArangoCollection collection) {
18901890
void insertDocumentsOne(ArangoCollection collection) {
18911891
final Collection<BaseDocument> values = new ArrayList<>();
18921892
values.add(new BaseDocument());
1893-
final MultiDocumentEntity<DocumentCreateEntity<BaseDocument>> docs = collection.insertDocuments(values, null);
1893+
final MultiDocumentEntity<?> docs = collection.insertDocuments(values);
18941894
assertThat(docs).isNotNull();
18951895
assertThat(docs.getDocuments()).isNotNull();
18961896
assertThat(docs.getDocuments()).hasSize(1);
@@ -1902,7 +1902,7 @@ void insertDocumentsOne(ArangoCollection collection) {
19021902
@MethodSource("cols")
19031903
void insertDocumentsEmpty(ArangoCollection collection) {
19041904
final Collection<BaseDocument> values = new ArrayList<>();
1905-
final MultiDocumentEntity<DocumentCreateEntity<BaseDocument>> docs = collection.insertDocuments(values, null);
1905+
final MultiDocumentEntity<?> docs = collection.insertDocuments(values);
19061906
assertThat(docs).isNotNull();
19071907
assertThat(docs.getDocuments()).isNotNull();
19081908
assertThat(docs.getDocuments()).isEmpty();
@@ -1939,7 +1939,7 @@ void insertDocumentsFail(ArangoCollection collection) {
19391939
String k2 = rnd();
19401940
final Collection<BaseDocument> values = Arrays.asList(new BaseDocument(k1), new BaseDocument(k2), new BaseDocument(k2));
19411941

1942-
final MultiDocumentEntity<DocumentCreateEntity<BaseDocument>> docs = collection.insertDocuments(values);
1942+
final MultiDocumentEntity<?> docs = collection.insertDocuments(values);
19431943
assertThat(docs).isNotNull();
19441944
assertThat(docs.getDocuments()).isNotNull();
19451945
assertThat(docs.getDocuments()).hasSize(2);
@@ -2340,7 +2340,7 @@ void deleteDocumentsByKey(ArangoCollection collection) {
23402340
e.setKey("2");
23412341
values.add(e);
23422342
}
2343-
collection.insertDocuments(values, null);
2343+
collection.insertDocuments(values);
23442344
final Collection<String> keys = new ArrayList<>();
23452345
keys.add("1");
23462346
keys.add("2");
@@ -2367,7 +2367,7 @@ void deleteDocumentsByDocuments(ArangoCollection collection) {
23672367
e.setKey("2");
23682368
values.add(e);
23692369
}
2370-
collection.insertDocuments(values, null);
2370+
collection.insertDocuments(values);
23712371
final MultiDocumentEntity<DocumentDeleteEntity<Object>> deleteResult = collection.deleteDocuments(values, null, null);
23722372
assertThat(deleteResult).isNotNull();
23732373
assertThat(deleteResult.getDocuments()).hasSize(2);
@@ -2386,7 +2386,7 @@ void deleteDocumentsByKeyOne(ArangoCollection collection) {
23862386
e.setKey("1");
23872387
values.add(e);
23882388
}
2389-
collection.insertDocuments(values, null);
2389+
collection.insertDocuments(values);
23902390
final Collection<String> keys = new ArrayList<>();
23912391
keys.add("1");
23922392
final MultiDocumentEntity<DocumentDeleteEntity<Object>> deleteResult = collection.deleteDocuments(keys, null, null);
@@ -2407,7 +2407,7 @@ void deleteDocumentsByDocumentOne(ArangoCollection collection) {
24072407
e.setKey("1");
24082408
values.add(e);
24092409
}
2410-
collection.insertDocuments(values, null);
2410+
collection.insertDocuments(values);
24112411
final MultiDocumentEntity<DocumentDeleteEntity<Object>> deleteResult = collection.deleteDocuments(values, null, null);
24122412
assertThat(deleteResult).isNotNull();
24132413
assertThat(deleteResult.getDocuments()).hasSize(1);
@@ -2421,7 +2421,7 @@ void deleteDocumentsByDocumentOne(ArangoCollection collection) {
24212421
@MethodSource("cols")
24222422
void deleteDocumentsEmpty(ArangoCollection collection) {
24232423
final Collection<BaseDocument> values = new ArrayList<>();
2424-
collection.insertDocuments(values, null);
2424+
collection.insertDocuments(values);
24252425
final Collection<String> keys = new ArrayList<>();
24262426
final MultiDocumentEntity<DocumentDeleteEntity<Object>> deleteResult = collection.deleteDocuments(keys, null, null);
24272427
assertThat(deleteResult).isNotNull();
@@ -2433,7 +2433,7 @@ void deleteDocumentsEmpty(ArangoCollection collection) {
24332433
@MethodSource("cols")
24342434
void deleteDocumentsByKeyNotExisting(ArangoCollection collection) {
24352435
final Collection<BaseDocument> values = new ArrayList<>();
2436-
collection.insertDocuments(values, null);
2436+
collection.insertDocuments(values);
24372437
final Collection<String> keys = Arrays.asList(rnd(), rnd());
24382438

24392439
final MultiDocumentEntity<DocumentDeleteEntity<Object>> deleteResult = collection.deleteDocuments(keys, null, null);
@@ -2466,7 +2466,7 @@ void deleteDocumentsByDocumentsNotExisting(ArangoCollection collection) {
24662466
@MethodSource("cols")
24672467
void updateDocuments(ArangoCollection collection) {
24682468
final Collection<BaseDocument> values = Arrays.asList(new BaseDocument(rnd()), new BaseDocument(rnd()));
2469-
collection.insertDocuments(values, null);
2469+
collection.insertDocuments(values);
24702470
values.forEach(it -> it.addAttribute("a", "test"));
24712471

24722472
final MultiDocumentEntity<DocumentUpdateEntity<BaseDocument>> updateResult = collection.updateDocuments(values, null);
@@ -2505,7 +2505,7 @@ void updateDocumentsOne(ArangoCollection collection) {
25052505
e.setKey("1");
25062506
values.add(e);
25072507
}
2508-
collection.insertDocuments(values, null);
2508+
collection.insertDocuments(values);
25092509
final Collection<BaseDocument> updatedValues = new ArrayList<>();
25102510
final BaseDocument first = values.iterator().next();
25112511
first.addAttribute("a", "test");
@@ -2531,7 +2531,7 @@ void updateDocumentsWithoutKey(ArangoCollection collection) {
25312531
{
25322532
values.add(new BaseDocument("1"));
25332533
}
2534-
collection.insertDocuments(values, null);
2534+
collection.insertDocuments(values);
25352535
final Collection<BaseDocument> updatedValues = new ArrayList<>();
25362536
for (final BaseDocument i : values) {
25372537
i.addAttribute("a", "test");
@@ -2567,7 +2567,7 @@ void replaceDocuments(ArangoCollection collection) {
25672567
values.add(new BaseDocument("1"));
25682568
values.add(new BaseDocument("2"));
25692569
}
2570-
collection.insertDocuments(values, null);
2570+
collection.insertDocuments(values);
25712571
final Collection<BaseDocument> updatedValues = new ArrayList<>();
25722572
for (final BaseDocument i : values) {
25732573
i.addAttribute("a", "test");
@@ -2587,7 +2587,7 @@ void replaceDocumentsOne(ArangoCollection collection) {
25872587
e.setKey("1");
25882588
values.add(e);
25892589
}
2590-
collection.insertDocuments(values, null);
2590+
collection.insertDocuments(values);
25912591
final Collection<BaseDocument> updatedValues = new ArrayList<>();
25922592
final BaseDocument first = values.iterator().next();
25932593
first.addAttribute("a", "test");
@@ -2613,7 +2613,7 @@ void replaceDocumentsWithoutKey(ArangoCollection collection) {
26132613
{
26142614
values.add(new BaseDocument("1"));
26152615
}
2616-
collection.insertDocuments(values, null);
2616+
collection.insertDocuments(values);
26172617
final Collection<BaseDocument> updatedValues = new ArrayList<>();
26182618
for (final BaseDocument i : values) {
26192619
i.addAttribute("a", "test");

src/test/java/com/arangodb/StreamTransactionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -576,7 +576,7 @@ void deleteDocuments(ArangoDatabase db) {
576576

577577
ArangoCollection collection = db.collection(COLLECTION_NAME);
578578
List<String> keys = collection
579-
.insertDocuments(Arrays.asList(new BaseDocument(), new BaseDocument(), new BaseDocument()), null)
579+
.insertDocuments(Arrays.asList(new BaseDocument(), new BaseDocument(), new BaseDocument()))
580580
.getDocuments().stream().map(DocumentEntity::getKey).collect(Collectors.toList());
581581

582582
StreamTransactionEntity tx = db.beginStreamTransaction(

0 commit comments

Comments
 (0)