Skip to content

Commit f0ee8fb

Browse files
committed
chore: updated to use semistructured api
Signed-off-by: Maximillian Arruda <[email protected]>
1 parent 4a56b26 commit f0ee8fb

25 files changed

+277
-301
lines changed
Lines changed: 30 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
package org.eclipse.jnosql.databases.dynamodb.communication;
1717

1818
import org.eclipse.jnosql.communication.Settings;
19-
import org.eclipse.jnosql.communication.document.DocumentDeleteQuery;
20-
import org.eclipse.jnosql.communication.document.DocumentEntity;
21-
import org.eclipse.jnosql.communication.document.DocumentQuery;
19+
import org.eclipse.jnosql.communication.semistructured.CommunicationEntity;
20+
import org.eclipse.jnosql.communication.semistructured.DeleteQuery;
21+
import org.eclipse.jnosql.communication.semistructured.SelectQuery;
2222
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
2323
import software.amazon.awssdk.services.dynamodb.model.AttributeDefinition;
2424
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
@@ -60,11 +60,11 @@
6060
import static java.util.Objects.requireNonNull;
6161
import static org.eclipse.jnosql.databases.dynamodb.communication.DynamoDBConverter.entityAttributeName;
6262
import static org.eclipse.jnosql.databases.dynamodb.communication.DynamoDBConverter.toAttributeValue;
63-
import static org.eclipse.jnosql.databases.dynamodb.communication.DynamoDBConverter.toDocumentEntity;
63+
import static org.eclipse.jnosql.databases.dynamodb.communication.DynamoDBConverter.toCommunicationEntity;
6464
import static org.eclipse.jnosql.databases.dynamodb.communication.DynamoDBConverter.toItem;
6565
import static org.eclipse.jnosql.databases.dynamodb.communication.DynamoDBConverter.toItemUpdate;
6666

67-
public class DefaultDynamoDBDocumentManager implements DynamoDBDocumentManager {
67+
public class DefaultDynamoDBDatabaseManager implements DynamoDBDatabaseManager {
6868

6969
private final String database;
7070

@@ -76,7 +76,7 @@ public class DefaultDynamoDBDocumentManager implements DynamoDBDocumentManager {
7676

7777
private final ConcurrentHashMap<String, DescribeTableResponse> tables = new ConcurrentHashMap<>();
7878

79-
public DefaultDynamoDBDocumentManager(String database, DynamoDbClient dynamoDbClient, Settings settings) {
79+
public DefaultDynamoDBDatabaseManager(String database, DynamoDbClient dynamoDbClient, Settings settings) {
8080
this.settings = settings;
8181
this.database = database;
8282
this.dynamoDbClient = dynamoDbClient;
@@ -96,7 +96,7 @@ public String name() {
9696
}
9797

9898
@Override
99-
public DocumentEntity insert(DocumentEntity documentEntity) {
99+
public CommunicationEntity insert(CommunicationEntity documentEntity) {
100100
requireNonNull(documentEntity, "documentEntity is required");
101101
dynamoDbClient().putItem(PutItemRequest.builder()
102102
.tableName(createTableIfNeeded(documentEntity.name()).table().tableName())
@@ -189,23 +189,23 @@ private String getEntityAttributeName() {
189189
}
190190

191191
@Override
192-
public DocumentEntity insert(DocumentEntity documentEntity, Duration ttl) {
192+
public CommunicationEntity insert(CommunicationEntity documentEntity, Duration ttl) {
193193
requireNonNull(documentEntity, "documentEntity is required");
194194
requireNonNull(ttl, "ttl is required");
195195
documentEntity.add(getTTLAttributeName(documentEntity.name()).get(), Instant.now().plus(ttl).truncatedTo(ChronoUnit.SECONDS));
196196
return insert(documentEntity);
197197
}
198198

199199
@Override
200-
public Iterable<DocumentEntity> insert(Iterable<DocumentEntity> entities) {
200+
public Iterable<CommunicationEntity> insert(Iterable<CommunicationEntity> entities) {
201201
requireNonNull(entities, "entities are required");
202202
return StreamSupport.stream(entities.spliterator(), false)
203203
.map(this::insert)
204204
.toList();
205205
}
206206

207207
@Override
208-
public Iterable<DocumentEntity> insert(Iterable<DocumentEntity> entities, Duration ttl) {
208+
public Iterable<CommunicationEntity> insert(Iterable<CommunicationEntity> entities, Duration ttl) {
209209
requireNonNull(entities, "entities is required");
210210
requireNonNull(ttl, "ttl is required");
211211
return StreamSupport.stream(entities.spliterator(), false)
@@ -214,7 +214,7 @@ public Iterable<DocumentEntity> insert(Iterable<DocumentEntity> entities, Durati
214214
}
215215

216216
@Override
217-
public DocumentEntity update(DocumentEntity documentEntity) {
217+
public CommunicationEntity update(CommunicationEntity documentEntity) {
218218
requireNonNull(documentEntity, "entity is required");
219219
Map<String, AttributeValue> itemKey = getItemKey(documentEntity);
220220
Map<String, AttributeValueUpdate> attributeUpdates = asItemToUpdate(documentEntity);
@@ -227,7 +227,7 @@ public DocumentEntity update(DocumentEntity documentEntity) {
227227
return documentEntity;
228228
}
229229

230-
private Map<String, AttributeValue> getItemKey(DocumentEntity documentEntity) {
230+
private Map<String, AttributeValue> getItemKey(CommunicationEntity documentEntity) {
231231
DescribeTableResponse describeTableResponse = this.tables.computeIfAbsent(documentEntity.name(), this::getDescribeTableResponse);
232232
Map<String, AttributeValue> itemKey = describeTableResponse
233233
.table()
@@ -243,47 +243,48 @@ private Map<String, AttributeValue> getItemKey(DocumentEntity documentEntity) {
243243
return itemKey;
244244
}
245245

246-
private Map<String, AttributeValueUpdate> asItemToUpdate(DocumentEntity documentEntity) {
246+
private Map<String, AttributeValueUpdate> asItemToUpdate(CommunicationEntity documentEntity) {
247247
return toItemUpdate(this::resolveEntityNameAttributeName, documentEntity);
248248
}
249249

250250
@Override
251-
public Iterable<DocumentEntity> update(Iterable<DocumentEntity> entities) {
251+
public Iterable<CommunicationEntity> update(Iterable<CommunicationEntity> entities) {
252252
requireNonNull(entities, "entities is required");
253253
return StreamSupport.stream(entities.spliterator(), false)
254254
.map(this::update)
255255
.toList();
256256
}
257257

258258
@Override
259-
public void delete(DocumentDeleteQuery documentDeleteQuery) {
260-
Objects.requireNonNull(documentDeleteQuery, "documentDeleteQuery is required");
259+
public void delete(DeleteQuery deleteQuery) {
260+
Objects.requireNonNull(deleteQuery, "deleteQuery is required");
261261

262-
List<String> primaryKeys = getDescribeTableResponse(documentDeleteQuery.name())
262+
List<String> primaryKeys = getDescribeTableResponse(deleteQuery.name())
263263
.table()
264264
.keySchema()
265265
.stream()
266266
.map(KeySchemaElement::attributeName).toList();
267267

268-
DocumentQuery.DocumentQueryBuilder selectQueryBuilder = DocumentQuery.builder()
268+
269+
var selectQueryBuilder = SelectQuery.builder()
269270
.select(primaryKeys.toArray(new String[0]))
270-
.from(documentDeleteQuery.name());
271+
.from(deleteQuery.name());
271272

272-
documentDeleteQuery.condition().ifPresent(selectQueryBuilder::where);
273+
deleteQuery.condition().ifPresent(selectQueryBuilder::where);
273274

274275
select(selectQueryBuilder.build()).forEach(
275276
documentEntity ->
276277
dynamoDbClient().deleteItem(DeleteItemRequest.builder()
277-
.tableName(documentDeleteQuery.name())
278+
.tableName(deleteQuery.name())
278279
.key(getItemKey(documentEntity))
279280
.build()));
280281
}
281282

282283
@Override
283-
public Stream<DocumentEntity> select(DocumentQuery documentQuery) {
284-
Objects.requireNonNull(documentQuery, "documentQuery is required");
284+
public Stream<CommunicationEntity> select(SelectQuery query) {
285+
Objects.requireNonNull(query, "query is required");
285286
DynamoDBQuery dynamoDBQuery = DynamoDBQuery
286-
.builderOf(documentQuery.name(), getEntityAttributeName(), documentQuery)
287+
.builderOf(query.name(), getEntityAttributeName(), query)
287288
.get();
288289

289290
ScanRequest.Builder selectRequest = ScanRequest.builder()
@@ -298,7 +299,7 @@ public Stream<DocumentEntity> select(DocumentQuery documentQuery) {
298299
return StreamSupport
299300
.stream(dynamoDbClient().scanPaginator(selectRequest.build()).spliterator(), false)
300301
.flatMap(scanResponse -> scanResponse.items().stream()
301-
.map(item -> toDocumentEntity(this::resolveEntityNameAttributeName, item)));
302+
.map(item -> toCommunicationEntity(this::resolveEntityNameAttributeName, item)));
302303
}
303304

304305
@Override
@@ -319,29 +320,24 @@ public void close() {
319320
}
320321

321322
@Override
322-
public Stream<DocumentEntity> partiQL(String query) {
323-
return partiQL(query,new Object[0]);
324-
}
325-
326-
@Override
327-
public Stream<DocumentEntity> partiQL(String query, Object... params) {
323+
public Stream<CommunicationEntity> partiQL(String query, Object... params) {
328324
Objects.requireNonNull(query, "query is required");
329325
List<AttributeValue> parameters = Stream.of(params).map(DynamoDBConverter::toAttributeValue).toList();
330326
ExecuteStatementResponse executeStatementResponse = dynamoDbClient()
331327
.executeStatement(ExecuteStatementRequest.builder()
332328
.statement(query)
333329
.parameters(parameters)
334330
.build());
335-
List<DocumentEntity> result = new LinkedList<>();
336-
executeStatementResponse.items().forEach(item -> result.add(toDocumentEntity(this::resolveEntityNameAttributeName, item)));
331+
List<CommunicationEntity> result = new LinkedList<>();
332+
executeStatementResponse.items().forEach(item -> result.add(toCommunicationEntity(this::resolveEntityNameAttributeName, item)));
337333
while (executeStatementResponse.nextToken() != null) {
338334
executeStatementResponse = dynamoDbClient()
339335
.executeStatement(ExecuteStatementRequest.builder()
340336
.statement(query)
341337
.parameters(parameters)
342338
.nextToken(executeStatementResponse.nextToken())
343339
.build());
344-
executeStatementResponse.items().forEach(item -> result.add(toDocumentEntity(this::resolveEntityNameAttributeName, item)));
340+
executeStatementResponse.items().forEach(item -> result.add(toCommunicationEntity(this::resolveEntityNameAttributeName, item)));
345341
}
346342
return result.stream();
347343
}

jnosql-dynamodb/src/main/java/org/eclipse/jnosql/databases/dynamodb/communication/DynamoDBConverter.java

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515

1616
package org.eclipse.jnosql.databases.dynamodb.communication;
1717

18-
import org.eclipse.jnosql.communication.document.Document;
19-
import org.eclipse.jnosql.communication.document.DocumentEntity;
20-
import org.eclipse.jnosql.communication.driver.ValueUtil;
18+
import org.eclipse.jnosql.communication.ValueUtil;
19+
import org.eclipse.jnosql.communication.semistructured.CommunicationEntity;
20+
import org.eclipse.jnosql.communication.semistructured.Element;
2121
import software.amazon.awssdk.core.SdkBytes;
2222
import software.amazon.awssdk.services.dynamodb.model.AttributeAction;
2323
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
@@ -62,7 +62,7 @@ private static Object convertValue(Object value) {
6262
case L:
6363
return attributeValue.l().stream().map(DynamoDBConverter::convertValue).toList();
6464
case M:
65-
return attributeValue.m().entrySet().stream().map(e -> Document.of(e.getKey(), convertValue(e.getValue()))).toList();
65+
return attributeValue.m().entrySet().stream().map(e -> Element.of(e.getKey(), convertValue(e.getValue()))).toList();
6666
case NUL:
6767
return null;
6868
case BOOL:
@@ -75,10 +75,10 @@ private static Object convertValue(Object value) {
7575
return value;
7676
}
7777

78-
static Map<String, Object> getMap(UnaryOperator<String> entityNameResolver, DocumentEntity entity) {
78+
static Map<String, Object> getMap(UnaryOperator<String> entityNameResolver, CommunicationEntity entity) {
7979
var nameResolver = Optional.ofNullable(entityNameResolver).orElse(UnaryOperator.identity());
8080
Map<String, Object> jsonObject = new HashMap<>();
81-
entity.documents().forEach(feedJSON(jsonObject));
81+
entity.elements().forEach(feedJSON(jsonObject));
8282
jsonObject.put(entityAttributeName(nameResolver), entity.name());
8383
return jsonObject;
8484
}
@@ -88,11 +88,11 @@ public static String entityAttributeName(UnaryOperator<String> nameResolver) {
8888
}
8989

9090
@SuppressWarnings({"rawtypes", "unchecked"})
91-
private static Consumer<Document> feedJSON(Map<String, Object> jsonObject) {
91+
private static Consumer<Element> feedJSON(Map<String, Object> jsonObject) {
9292
return d -> {
9393
Object value = ValueUtil.convert(d.value());
94-
if (value instanceof Document subDocument) {
95-
jsonObject.put(d.name(), singletonMap(subDocument.name(), subDocument.get()));
94+
if (value instanceof Element subElement) {
95+
jsonObject.put(d.name(), singletonMap(subElement.name(), subElement.get()));
9696
} else if (isSudDocument(value)) {
9797
Map<String, Object> subDocument = getMap(value);
9898
jsonObject.put(d.name(), subDocument);
@@ -114,17 +114,17 @@ private static Map<String, Object> getMap(Object value) {
114114

115115
private static boolean isSudDocument(Object value) {
116116
return value instanceof Iterable && StreamSupport.stream(Iterable.class.cast(value).spliterator(), false).
117-
allMatch(org.eclipse.jnosql.communication.document.Document.class::isInstance);
117+
allMatch(Element.class::isInstance);
118118
}
119119

120120
private static boolean isSudDocumentList(Object value) {
121121
return value instanceof Iterable && StreamSupport.stream(Iterable.class.cast(value).spliterator(), false).
122122
allMatch(d -> d instanceof Iterable && isSudDocument(d));
123123
}
124124

125-
public static Map<String, AttributeValue> toItem(UnaryOperator<String> entityNameResolver, DocumentEntity documentEntity) {
125+
public static Map<String, AttributeValue> toItem(UnaryOperator<String> entityNameResolver, CommunicationEntity entity) {
126126
UnaryOperator<String> resolver = Optional.ofNullable(entityNameResolver).orElse(UnaryOperator.identity());
127-
Map<String, Object> documentAttributes = getMap(resolver, documentEntity);
127+
Map<String, Object> documentAttributes = getMap(resolver, entity);
128128
return toItem(documentAttributes);
129129
}
130130

@@ -161,15 +161,15 @@ public static AttributeValue toAttributeValue(Object value) {
161161
if (value instanceof InputStream input) {
162162
return AttributeValue.builder().b(SdkBytes.fromInputStream(input)).build();
163163
}
164-
if (value instanceof Document document) {
165-
return toAttributeValue(getMap(document));
164+
if (value instanceof Element element) {
165+
return toAttributeValue(getMap(element));
166166
}
167167
return AttributeValue.builder().s(String.valueOf(value)).build();
168168
}
169169

170-
public static Map<String, AttributeValueUpdate> toItemUpdate(UnaryOperator<String> entityNameResolver, DocumentEntity documentEntity) {
170+
public static Map<String, AttributeValueUpdate> toItemUpdate(UnaryOperator<String> entityNameResolver, CommunicationEntity entity) {
171171
UnaryOperator<String> resolver = Optional.ofNullable(entityNameResolver).orElse(UnaryOperator.identity());
172-
Map<String, Object> documentAttributes = getMap(resolver, documentEntity);
172+
Map<String, Object> documentAttributes = getMap(resolver, entity);
173173
return toItemUpdate(documentAttributes);
174174
}
175175

@@ -189,7 +189,7 @@ public static AttributeValueUpdate toAttributeValueUpdate(Object value) {
189189
}
190190

191191

192-
public static DocumentEntity toDocumentEntity(UnaryOperator<String> entityNameResolver, Map<String, AttributeValue> item) {
192+
public static CommunicationEntity toCommunicationEntity(UnaryOperator<String> entityNameResolver, Map<String, AttributeValue> item) {
193193
if (item == null) {
194194
return null;
195195
}
@@ -199,11 +199,11 @@ public static DocumentEntity toDocumentEntity(UnaryOperator<String> entityNameRe
199199
UnaryOperator<String> resolver = Optional.ofNullable(entityNameResolver).orElse(UnaryOperator.identity());
200200
String entityAttribute = resolver.apply(ENTITY);
201201
var entityName = item.containsKey(entityAttribute) ? item.get(entityAttribute).s() : entityAttribute;
202-
List<Document> documents = item.entrySet()
202+
var elements = item.entrySet()
203203
.stream()
204204
.filter(entry -> !Objects.equals(entityAttribute, entry.getKey()))
205-
.map(entry -> Document.of(entry.getKey(), convertValue(entry.getValue())))
205+
.map(entry -> Element.of(entry.getKey(), convertValue(entry.getValue())))
206206
.toList();
207-
return DocumentEntity.of(entityName, documents);
207+
return CommunicationEntity.of(entityName, elements);
208208
}
209209
}
Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,38 +15,27 @@
1515

1616
package org.eclipse.jnosql.databases.dynamodb.communication;
1717

18-
import org.eclipse.jnosql.communication.document.DocumentEntity;
19-
import org.eclipse.jnosql.communication.document.DocumentManager;
18+
import org.eclipse.jnosql.communication.semistructured.CommunicationEntity;
19+
import org.eclipse.jnosql.communication.semistructured.DatabaseManager;
2020
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
2121

2222
import java.util.stream.Stream;
2323

2424
/**
2525
* A document manager interface for DynamoDB database operations.
2626
*/
27-
public interface DynamoDBDocumentManager extends DocumentManager {
28-
29-
/**
30-
* DynamoDB supports a limited subset of
31-
* <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html">PartiQL</a>.
32-
* This method executes a PartiQL query and returns a stream of DocumentEntity objects.
33-
*
34-
* @param query the PartiQL query
35-
* @return a {@link Stream} of {@link DocumentEntity} representing the query result
36-
* @throws NullPointerException when the query is null
37-
*/
38-
Stream<DocumentEntity> partiQL(String query);
27+
public interface DynamoDBDatabaseManager extends DatabaseManager {
3928

4029
/**
4130
* DynamoDB supports a limited subset of <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html">PartiQL</a>.
42-
* This method executes a PartiQL query with parameters and returns a stream of DocumentEntity objects.
31+
* This method executes a PartiQL query with parameters and returns a stream of CommunicationEntity objects.
4332
* <p>Example query: {@code SELECT * FROM users WHERE status = ?}</p>
4433
*
4534
* @param query the PartiQL query
46-
* @return a {@link Stream} of {@link DocumentEntity} representing the query result
35+
* @return a {@link Stream} of {@link CommunicationEntity} representing the query result
4736
* @throws NullPointerException when the query is null
4837
*/
49-
Stream<DocumentEntity> partiQL(String query, Object... params);
38+
Stream<CommunicationEntity> partiQL(String query, Object... params);
5039

5140

5241
/**
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,24 @@
1616
package org.eclipse.jnosql.databases.dynamodb.communication;
1717

1818
import org.eclipse.jnosql.communication.Settings;
19-
import org.eclipse.jnosql.communication.document.DocumentManagerFactory;
19+
import org.eclipse.jnosql.communication.semistructured.DatabaseManagerFactory;
2020
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
2121

2222
import java.util.Optional;
2323

24-
public class DynamoDBDocumentManagerFactory implements DocumentManagerFactory {
24+
public class DynamoDBDatabaseManagerFactory implements DatabaseManagerFactory {
2525

2626
private final DynamoDbClient dynamoDB;
2727
private final Settings settings;
2828

29-
public DynamoDBDocumentManagerFactory(DynamoDbClient dynamoDB, Settings settings) {
29+
public DynamoDBDatabaseManagerFactory(DynamoDbClient dynamoDB, Settings settings) {
3030
this.dynamoDB = dynamoDB;
3131
this.settings = settings;
3232
}
3333

3434
@Override
35-
public DynamoDBDocumentManager apply(String database) {
36-
return new DefaultDynamoDBDocumentManager(database, dynamoDB, settings);
35+
public DynamoDBDatabaseManager apply(String database) {
36+
return new DefaultDynamoDBDatabaseManager(database, dynamoDB, settings);
3737
}
3838

3939
@Override

0 commit comments

Comments
 (0)