Skip to content

Commit 24c8203

Browse files
authored
Merge pull request #268 from eclipse/unify-query
Unified Semistructured API: Harmonizing Document and Column Operations
2 parents ea0c808 + dc31a02 commit 24c8203

File tree

230 files changed

+2955
-2951
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

230 files changed

+2955
-2951
lines changed

jnosql-arangodb/pom.xml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@
3131
<arango.driver>7.5.1</arango.driver>
3232
</properties>
3333
<dependencies>
34-
<dependency>
35-
<groupId>org.eclipse.jnosql.communication</groupId>
36-
<artifactId>jnosql-communication-document</artifactId>
37-
</dependency>
3834
<dependency>
3935
<groupId>org.eclipse.jnosql.mapping</groupId>
4036
<artifactId>jnosql-mapping-document</artifactId>
@@ -43,10 +39,6 @@
4339
<groupId>org.eclipse.jnosql.mapping</groupId>
4440
<artifactId>jnosql-mapping-key-value</artifactId>
4541
</dependency>
46-
<dependency>
47-
<groupId>org.eclipse.jnosql.communication</groupId>
48-
<artifactId>jnosql-communication-key-value</artifactId>
49-
</dependency>
5042
<dependency>
5143
<groupId>${project.groupId}</groupId>
5244
<artifactId>jnosql-database-commons</artifactId>

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentConfiguration.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,20 @@
1717

1818
import com.arangodb.ArangoDB;
1919
import org.eclipse.jnosql.communication.Settings;
20-
import org.eclipse.jnosql.communication.document.DocumentConfiguration;
20+
import org.eclipse.jnosql.communication.semistructured.DatabaseConfiguration;
2121

2222
import static java.util.Objects.requireNonNull;
2323

2424
/**
25-
* The implementation of {@link DocumentConfiguration}
25+
* The implementation of {@link DatabaseConfiguration}
2626
* that returns {@link ArangoDBDocumentManagerFactory}.
2727
*
2828
* @see ArangoDBConfiguration
2929
* @see ArangoDBConfigurations
3030
*
3131
*/
3232
public final class ArangoDBDocumentConfiguration extends ArangoDBConfiguration
33-
implements DocumentConfiguration {
33+
implements DatabaseConfiguration {
3434

3535
@Override
3636
public ArangoDBDocumentManagerFactory apply(Settings settings) throws NullPointerException {

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentManager.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,30 +14,30 @@
1414
*/
1515
package org.eclipse.jnosql.databases.arangodb.communication;
1616

17-
import org.eclipse.jnosql.communication.document.DocumentEntity;
18-
import org.eclipse.jnosql.communication.document.DocumentManager;
17+
import org.eclipse.jnosql.communication.semistructured.CommunicationEntity;
18+
import org.eclipse.jnosql.communication.semistructured.DatabaseManager;
1919

2020
import java.util.Map;
2121
import java.util.stream.Stream;
2222
/**
23-
* The ArangoDB implementation of {@link DocumentManager}. This implementation does not support TTL methods in the context of
24-
* {@link DocumentManager#insert(DocumentEntity)}.
23+
* The ArangoDB implementation of {@link DatabaseManager}. This implementation does not support TTL methods in the context of
24+
* {@link DatabaseManager#insert(org.eclipse.jnosql.communication.semistructured.CommunicationEntity)}.
2525
*/
26-
public interface ArangoDBDocumentManager extends DocumentManager {
26+
public interface ArangoDBDocumentManager extends DatabaseManager {
2727

2828
/**
2929
* Executes an ArangoDB query using the ArangoDB Query Language (AQL).
3030
*
3131
* <p>Example query: {@code FOR u IN users FILTER u.status == @status RETURN u}</p>
3232
*
33-
* <p>The conversion from the query result to {@link DocumentEntity} will happen at the Eclipse JNoSQL side.</p>
33+
* <p>The conversion from the query result to {@link CommunicationEntity} will happen at the Eclipse JNoSQL side.</p>
3434
*
3535
* @param query the AQL query
3636
* @param params the named parameters for the query
37-
* @return a {@link Stream} of {@link DocumentEntity} representing the query result
37+
* @return a {@link Stream} of {@link CommunicationEntity} representing the query result
3838
* @throws NullPointerException when either the query or params are null
3939
*/
40-
Stream<DocumentEntity> aql(String query, Map<String, Object> params);
40+
Stream<CommunicationEntity> aql(String query, Map<String, Object> params);
4141

4242
/**
4343
* Executes an ArangoDB query using the ArangoDB Query Language (AQL).

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentManagerFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616

1717

1818
import com.arangodb.ArangoDB;
19-
import org.eclipse.jnosql.communication.document.DocumentManagerFactory;
19+
import org.eclipse.jnosql.communication.semistructured.DatabaseManagerFactory;
2020

2121

22-
public final class ArangoDBDocumentManagerFactory implements DocumentManagerFactory {
22+
public final class ArangoDBDocumentManagerFactory implements DatabaseManagerFactory {
2323

2424

2525
private final ArangoDB arangoDB;

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBException.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@
1515
package org.eclipse.jnosql.databases.arangodb.communication;
1616

1717

18+
import org.eclipse.jnosql.communication.CommunicationException;
19+
1820
/**
1921
* The exception to ArangoDB
2022
*/
21-
public class ArangoDBException extends RuntimeException {
23+
public class ArangoDBException extends CommunicationException {
2224
public ArangoDBException(String message) {
2325
super(message);
2426
}

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBUtil.java

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
import com.arangodb.entity.BaseDocument;
2020
import com.arangodb.entity.CollectionEntity;
2121
import org.eclipse.jnosql.communication.Value;
22-
import org.eclipse.jnosql.communication.document.Document;
23-
import org.eclipse.jnosql.communication.document.DocumentEntity;
2422
import org.eclipse.jnosql.communication.driver.ValueUtil;
23+
import org.eclipse.jnosql.communication.semistructured.CommunicationEntity;
24+
import org.eclipse.jnosql.communication.semistructured.Element;
2525

2626
import java.util.ArrayList;
2727
import java.util.Collection;
@@ -49,8 +49,8 @@ public final class ArangoDBUtil {
4949
public static final String REV = "_rev";
5050
private static final Logger LOGGER = Logger.getLogger(ArangoDBUtil.class.getName());
5151

52-
private static final Function<Map.Entry<?, ?>, Document> ENTRY_DOCUMENT = entry ->
53-
Document.of(entry.getKey().toString(), entry.getValue());
52+
private static final Function<Map.Entry<?, ?>, Element> ENTRY_DOCUMENT = entry ->
53+
Element.of(entry.getKey().toString(), entry.getValue());
5454

5555
private ArangoDBUtil() {
5656
}
@@ -80,22 +80,22 @@ public static void checkCollection(String bucketName, ArangoDB arangoDB, String
8080
}
8181

8282

83-
static DocumentEntity toEntity(BaseDocument document) {
83+
static CommunicationEntity toEntity(BaseDocument document) {
8484
Map<String, Object> properties = document.getProperties();
85-
List<Document> documents = properties.keySet().stream()
85+
List<Element> documents = properties.keySet().stream()
8686
.map(k -> toDocument(k, properties))
8787
.collect(Collectors.toList());
8888

89-
documents.add(Document.of(KEY, document.getKey()));
90-
documents.add(Document.of(ID, document.getId()));
91-
documents.add(Document.of(REV, document.getRevision()));
89+
documents.add(Element.of(KEY, document.getKey()));
90+
documents.add(Element.of(ID, document.getId()));
91+
documents.add(Element.of(REV, document.getRevision()));
9292
String collection = document.getId().split("/")[0];
93-
return DocumentEntity.of(collection, documents);
93+
return CommunicationEntity.of(collection, documents);
9494
}
9595

96-
static BaseDocument getBaseDocument(DocumentEntity entity) {
96+
static BaseDocument getBaseDocument(CommunicationEntity entity) {
9797
Map<String, Object> map = new HashMap<>();
98-
for (Document document : entity.documents()) {
98+
for (Element document : entity.elements()) {
9999
if(KEY.equals(document.name()) && Objects.isNull(document.get())) {
100100
continue;
101101
}
@@ -104,23 +104,23 @@ static BaseDocument getBaseDocument(DocumentEntity entity) {
104104
return new BaseDocument(map);
105105
}
106106

107-
private static Document toDocument(String key, Map<String, Object> properties) {
107+
private static Element toDocument(String key, Map<String, Object> properties) {
108108
Object value = properties.get(key);
109109
if (value instanceof Map map) {
110-
return Document.of(key, map.keySet()
110+
return Element.of(key, map.keySet()
111111
.stream().map(k -> toDocument(k.toString(), map))
112112
.collect(Collectors.toList()));
113113
}
114114
if (isADocumentIterable(value)) {
115-
List<List<Document>> documents = new ArrayList<>();
115+
List<List<Element>> documents = new ArrayList<>();
116116
for (Object object : Iterable.class.cast(value)) {
117117
Map<?, ?> map = Map.class.cast(object);
118118
documents.add(map.entrySet().stream().map(ENTRY_DOCUMENT).collect(toList()));
119119
}
120-
return Document.of(key, documents);
120+
return Element.of(key, documents);
121121

122122
}
123-
return Document.of(key, value);
123+
return Element.of(key, value);
124124
}
125125

126126
private static boolean isADocumentIterable(Object value) {
@@ -132,8 +132,8 @@ private static boolean isADocumentIterable(Object value) {
132132
private static Object convert(Value value) {
133133
Object val = ValueUtil.convert(value);
134134

135-
if (Document.class.isInstance(val)) {
136-
Document document = Document.class.cast(val);
135+
if (Element.class.isInstance(val)) {
136+
Element document = Element.class.cast(val);
137137
return singletonMap(document.name(), convert(document.value()));
138138
}
139139
if (isSudDocument(val)) {
@@ -163,11 +163,11 @@ private static boolean isSudDocumentList(Object value) {
163163

164164
private static boolean isSudDocument(Object value) {
165165
return value instanceof Iterable && StreamSupport.stream(Iterable.class.cast(value).spliterator(), false).
166-
allMatch(org.eclipse.jnosql.communication.document.Document.class::isInstance);
166+
allMatch(Element.class::isInstance);
167167
}
168168

169-
private static org.eclipse.jnosql.communication.document.Document cast(Object document) {
170-
return org.eclipse.jnosql.communication.document.Document.class.cast(document);
169+
private static Element cast(Object document) {
170+
return Element.class.cast(document);
171171
}
172172

173173
}

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/DefaultArangoDBDocumentManager.java

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
import com.arangodb.entity.BaseDocument;
2020
import com.arangodb.entity.DocumentCreateEntity;
2121
import com.arangodb.entity.DocumentUpdateEntity;
22-
import org.eclipse.jnosql.communication.document.Document;
23-
import org.eclipse.jnosql.communication.document.DocumentDeleteQuery;
24-
import org.eclipse.jnosql.communication.document.DocumentEntity;
25-
import org.eclipse.jnosql.communication.document.DocumentQuery;
22+
import org.eclipse.jnosql.communication.semistructured.CommunicationEntity;
23+
import org.eclipse.jnosql.communication.semistructured.DeleteQuery;
24+
import org.eclipse.jnosql.communication.semistructured.Element;
25+
import org.eclipse.jnosql.communication.semistructured.SelectQuery;
2626

2727
import java.time.Duration;
2828
import java.util.Map;
@@ -60,7 +60,8 @@ public String name() {
6060
}
6161

6262
@Override
63-
public DocumentEntity insert(DocumentEntity entity) throws NullPointerException {
63+
public CommunicationEntity insert(CommunicationEntity entity) {
64+
Objects.requireNonNull(entity, "entity is required");
6465
String collectionName = entity.name();
6566
checkCollection(collectionName);
6667
BaseDocument baseDocument = ArangoDBUtil.getBaseDocument(entity);
@@ -71,7 +72,8 @@ public DocumentEntity insert(DocumentEntity entity) throws NullPointerException
7172
}
7273

7374
@Override
74-
public DocumentEntity update(DocumentEntity entity) {
75+
public CommunicationEntity update(CommunicationEntity entity) {
76+
Objects.requireNonNull(entity, "entity is required");
7577
String collectionName = entity.name();
7678
checkCollection(collectionName);
7779
String id = entity.find(ID, String.class)
@@ -87,15 +89,15 @@ public DocumentEntity update(DocumentEntity entity) {
8789

8890

8991
@Override
90-
public Iterable<DocumentEntity> update(Iterable<DocumentEntity> entities) {
92+
public Iterable<CommunicationEntity> update(Iterable<CommunicationEntity> entities) {
9193
Objects.requireNonNull(entities, "entities is required");
9294
return StreamSupport.stream(entities.spliterator(), false)
9395
.map(this::update)
9496
.collect(Collectors.toList());
9597
}
9698

9799
@Override
98-
public void delete(DocumentDeleteQuery query) {
100+
public void delete(DeleteQuery query) {
99101
requireNonNull(query, "query is required");
100102
try {
101103

@@ -119,7 +121,7 @@ public void delete(DocumentDeleteQuery query) {
119121
}
120122

121123
@Override
122-
public Stream<DocumentEntity> select(DocumentQuery query) throws NullPointerException {
124+
public Stream<CommunicationEntity> select(SelectQuery query) throws NullPointerException {
123125
requireNonNull(query, "query is required");
124126

125127
AQLQueryResult result = QueryAQLConverter.select(query);
@@ -142,7 +144,7 @@ public long count(String documentCollection) {
142144

143145

144146
@Override
145-
public Stream<DocumentEntity> aql(String query, Map<String, Object> params) throws NullPointerException {
147+
public Stream<CommunicationEntity> aql(String query, Map<String, Object> params) throws NullPointerException {
146148
requireNonNull(query, "query is required");
147149
requireNonNull(params, "values is required");
148150
ArangoCursor<BaseDocument> result = arangoDB.db(database).query(query,BaseDocument.class, params, null);
@@ -180,34 +182,34 @@ private void checkCollection(String collectionName) {
180182
}
181183

182184
@Override
183-
public DocumentEntity insert(DocumentEntity entity, Duration ttl) {
185+
public CommunicationEntity insert(CommunicationEntity entity, Duration ttl) {
184186
throw new UnsupportedOperationException("TTL is not supported on ArangoDB implementation");
185187
}
186188

187189
@Override
188-
public Iterable<DocumentEntity> insert(Iterable<DocumentEntity> entities) {
190+
public Iterable<CommunicationEntity> insert(Iterable<CommunicationEntity> entities) {
189191
Objects.requireNonNull(entities, "entities is required");
190192
return StreamSupport.stream(entities.spliterator(), false)
191193
.map(this::insert)
192194
.collect(Collectors.toList());
193195
}
194196

195197
@Override
196-
public Iterable<DocumentEntity> insert(Iterable<DocumentEntity> entities, Duration ttl) {
198+
public Iterable<CommunicationEntity> insert(Iterable<CommunicationEntity> entities, Duration ttl) {
197199
Objects.requireNonNull(entities, "entities is required");
198200
Objects.requireNonNull(ttl, "ttl is required");
199201
return StreamSupport.stream(entities.spliterator(), false)
200202
.map(e -> this.insert(e, ttl))
201203
.collect(Collectors.toList());
202204
}
203205

204-
private void updateEntity(DocumentEntity entity, String key, String id, String rev) {
205-
entity.add(Document.of(KEY, key));
206-
entity.add(Document.of(ID, id));
207-
entity.add(Document.of(REV, rev));
206+
private void updateEntity(CommunicationEntity entity, String key, String id, String rev) {
207+
entity.add(Element.of(KEY, key));
208+
entity.add(Element.of(ID, id));
209+
entity.add(Element.of(REV, rev));
208210
}
209211

210-
private static void feedKey(DocumentEntity entity, String id) {
212+
private static void feedKey(CommunicationEntity entity, String id) {
211213
if (entity.find(KEY).isEmpty()) {
212214
String[] values = id.split("/");
213215
if (values.length == 2) {

0 commit comments

Comments
 (0)