Skip to content

Commit 226e676

Browse files
cenedhrynbmaizels
authored andcommitted
Dynamodb-enhanced [preview]: Updates all operations with consumer style invocations
1 parent dfe5c06 commit 226e676

File tree

76 files changed

+2894
-752
lines changed

Some content is hidden

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

76 files changed

+2894
-752
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"type": "feature",
3+
"category": "Amazon DynamoDB Enhanced Client [Preview]",
4+
"description": "Improves discoverability by adding consumer-style methods for all client, table and index operations."
5+
}

services-custom/dynamodb-enhanced/README.md

Lines changed: 76 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -80,66 +80,109 @@ values used are also completely arbitrary.
8080

8181
### Common primitive operations
8282
These all strongly map to the primitive DynamoDB operations they are
83-
named after. These examples are the most simple variants of each
84-
operation possible. These commands can be customized by using the
85-
builders provided for each command and offer most of the features
86-
available in the low-level DynamoDB SDK client.
83+
named after. The examples below are the most simple variants of each
84+
operation possible, using the the two styles available for constructing
85+
requests with either builder or consumers. These commands can be
86+
customized by using the builders provided for each command and offer
87+
most of the features available in the low-level DynamoDB SDK client.
8788

8889
```java
8990
// CreateTable
90-
customerTable.createTable(CreateTableEnhancedRequest.create());
91+
customerTable.createTable();
92+
customerTable.createTable(CreateTableEnhancedRequest.builder().build());
9193

9294
// GetItem
93-
Customer customer = customerTable.getItem(GetItemEnhancedRequest.create(Key.create(stringValue("a123"))));
94-
95+
Customer customer = customerTable.getItem(r -> r.key(Key.create(stringValue("a123"))));
96+
Customer customer = customerTable.getItem(GetItemEnhancedRequest.builder()
97+
.key(Key.create(stringValue("a123")))
98+
.build());
9599
// UpdateItem
96-
Customer updatedCustomer = customerTable.updateItem(UpdateItemEnhancedRequest.create(customer));
100+
Customer updatedCustomer = customerTable.updateItem(Customer.class, r -> r.item(customer));
101+
Customer updatedCustomer = customerTable.updateItem(UpdateItemEnhancedRequest.builder(Customer.class)
102+
.item(customer)
103+
.build());
97104

98105
// PutItem
99-
customerTable.putItem(PutItemEnhancedRequest.create(customer));
106+
customerTable.putItem(Customer.class, r -> r.item(customer));
107+
customerTable.putItem(PutItemEnhancedRequest.builder(Customer.class)
108+
.item(customer)
109+
.build());
100110

101111
// DeleteItem
102-
Customer deletedCustomer = customerTable.deleteItem(DeleteItemEnhancedRequest.create(Key.create(stringValue("a123"), numberValue(456))));
112+
Customer deletedCustomer = customerTable.deleteItem(r -> r.key(Key.create(stringValue("a123"), numberValue(456))));
113+
Customer deletedCustomer = customerTable.deleteItem(DeleteItemEnhancedRequest.builder()
114+
.key(Key.create(stringValue("a123"), numberValue(456)))
115+
.build());
103116

104117
// Query
105-
Iterable<Page<Customer>> customers = customerTable.query(QueryEnhancedRequest.create(equalTo(Key.create(stringValue("a123")))));
106-
118+
Iterable<Page<Customer>> customers = customerTable.query(r -> r.queryConditional(equalTo(Key.create(stringValue("a123")))));
119+
Iterable<Page<Customer>> customers = customerTable.query(QueryEnhancedRequest.builder()
120+
.queryConditional(equalTo(Key.create(stringValue("a123"))))
121+
.build());
107122
// Scan
108-
Iterable<Page<Customer>> customers = customerTable.scan(ScanEnhancedRequest.create());
123+
Iterable<Page<Customer>> customers = customerTable.scan();
124+
Iterable<Page<Customer>> customers = customerTable.scan(ScanEnhancedRequest.builder().build());
109125

110126
// BatchGetItem
127+
batchResults = enhancedClient.batchGetItem(r -> r.addReadBatch(ReadBatch.builder(Customer.class)
128+
.mappedTableResource(customerTable)
129+
.addGetItem(i -> i.key(key1))
130+
.addGetItem(i -> i.key(key2))
131+
.addGetItem(i -> i.key(key3))
132+
.build()));
111133
batchResults = enhancedClient.batchGetItem(
112-
BatchGetItemEnhancedRequest.builder().addReadBatch(ReadBatch.builder(Customer.class)
113-
.mappedTableResource(customerTable)
114-
.addGetItem(GetItemEnhancedRequest.create(key1))
115-
.addGetItem(GetItemEnhancedRequest.create(key2))
116-
.addGetItem(GetItemEnhancedRequest.create(key3))
117-
.build())
134+
BatchGetItemEnhancedRequest.builder()
135+
.readBatches(ReadBatch.builder(Customer.class)
136+
.mappedTableResource(customerTable)
137+
.addGetItem(GetItemEnhancedRequest.builder().key(key1).build())
138+
.addGetItem(GetItemEnhancedRequest.builder().key(key2).build())
139+
.addGetItem(GetItemEnhancedRequest.builder().key(key3).build())
140+
.build())
118141
.build());
119142

120143
// BatchWriteItem
144+
batchResults = enhancedClient.batchWriteItem(r -> r.addWriteBatch(WriteBatch.builder(Customer.class)
145+
.mappedTableResource(customerTable)
146+
.addPutItem(i -> i.item(customer))
147+
.addDeleteItem(i -> i.key(key1))
148+
.addDeleteItem(i -> i.key(key1))
149+
.build()));
121150
batchResults = enhancedClient.batchWriteItem(
122-
BatchWriteItemEnhancedRequest.builder().addWriteBatch(WriteBatch.builder(Customer.class)
123-
.mappedTableResource(customerTable)
124-
.putItem(PutItemEnhancedRequest.create(item))
125-
.deleteItem(DeleteItemEnhancedRequest.create(key1))
126-
.deleteItem(DeleteItemEnhancedRequest.create(key2))
127-
.build())
151+
BatchWriteItemEnhancedRequest.builder()
152+
.addWriteBatch(WriteBatch.builder(Customer.class)
153+
.mappedTableResource(customerTable)
154+
.addPutItem(PutItemEnhancedRequest.builder(Customer.class).item(customer).build())
155+
.addDeleteItem(DeleteItemEnhancedRequest.builder().key(key1).build())
156+
.addDeleteItem(DeleteItemEnhancedRequest.builder().key(key2).build())
157+
.build())
128158
.build());
129159

130160
// TransactGetItems
161+
transactResults = enhancedClient.transactGetItems(r -> r.addGetItem(customerTable, r -> r.key(Key.create(key1)))
162+
.addGetItem(customerTable, r -> r.key(Key.create(key2))));
131163
transactResults = enhancedClient.transactGetItems(
132164
TransactGetItemsEnhancedRequest.builder()
133-
.addGetItem(customerTable, GetItemEnhancedRequest.create(Key.create(key1)))
134-
.addGetItem(customerTable, GetItemEnhancedRequest.create(Key.create(key2)))
165+
.addGetItem(customerTable, GetItemEnhancedRequest.builder().key(Key.create(key1)).build())
166+
.addGetItem(customerTable, GetItemEnhancedRequest.builder().key(Key.create(key2)).build())
135167
.build());
136168

137169
// TransactWriteItems
170+
enhancedClient.transactWriteItems(r -> r.addConditionCheck(customerTable, i -> i.key(orderKey).conditionExpression(conditionExpression))
171+
.addUpdateItem(customerTable, Customer.class, i -> i.item(customer))
172+
.addDeleteItem(customerTable, i -> i.key(key)));
173+
138174
enhancedClient.transactWriteItems(
139175
TransactWriteItemsEnhancedRequest.builder()
140-
.addConditionCheck(customerTable, ConditionCheck.create(orderKey, conditionExpression))
141-
.addUpdateItem(customerTable, UpdateItemEnhancedRequest.create(customer))
142-
.addDeleteItem(customerTable, DeleteItemEnhancedRequest.create(key))
176+
.addConditionCheck(customerTable, ConditionCheck.builder()
177+
.key(orderKey)
178+
.conditionExpression(conditionExpression)
179+
.build())
180+
.addUpdateItem(customerTable, UpdateItemEnhancedRequest.builder(Customer.class)
181+
.item(customer)
182+
.build())
183+
.addDeleteItem(customerTable, DeleteItemEnhancedRequest.builder()
184+
.key(key)
185+
.build())
143186
.build());
144187
```
145188

@@ -149,7 +192,7 @@ index. Here's an example of how to do this:
149192
```
150193
DynamoDbIndex<Customer> customersByName = customerTable.index("customers_by_name");
151194
152-
Iterable<Page<Customer>> customersWithName = customersByName.query(QueryEnhancedRequest.create(equalTo(Key.create(stringValue("Smith")))));
195+
Iterable<Page<Customer>> customersWithName = customersByName.query(r -> r.queryConditional(equalTo(Key.create(stringValue("Smith")))));
153196
```
154197
155198
### Non-blocking asynchronous operations
@@ -172,7 +215,7 @@ key differences:
172215
application can then do other work without having to block on the
173216
result:
174217
```java
175-
CompletableFuture<Customer> result = mappedTable.getItem(GetItemEnhancedRequest.create(customerKey));
218+
CompletableFuture<Customer> result = mappedTable.getItem(r -> r.key(customerKey));
176219
// Perform other work here
177220
return result.join(); // now block and wait for the result
178221
```
@@ -182,7 +225,7 @@ key differences:
182225
application can then subscribe a handler to that publisher and deal
183226
with the results asynchronously without having to block:
184227
```java
185-
SdkPublisher<Customer> results = mappedTable.query(QueryEnhancedRequest.create(equalTo(Key.create(stringValue("a123")))));
228+
SdkPublisher<Customer> results = mappedTable.query(r -> r.queryConditional(equalTo(Key.create(stringValue("a123")))));
186229
results.subscribe(myCustomerResultsProcessor);
187230
// Perform other work and let the processor handle the results asynchronously
188231
```

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/extensions/dynamodb/mappingclient/DynamoDbAsyncIndex.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
package software.amazon.awssdk.extensions.dynamodb.mappingclient;
1717

18+
import java.util.function.Consumer;
1819
import software.amazon.awssdk.annotations.SdkPublicApi;
1920
import software.amazon.awssdk.core.async.SdkPublisher;
2021
import software.amazon.awssdk.extensions.dynamodb.mappingclient.model.QueryEnhancedRequest;
@@ -33,10 +34,22 @@ default SdkPublisher<Page<T>> query(QueryEnhancedRequest request) {
3334
throw new UnsupportedOperationException();
3435
}
3536

37+
default SdkPublisher<Page<T>> query(Consumer<QueryEnhancedRequest.Builder> requestConsumer) {
38+
throw new UnsupportedOperationException();
39+
}
40+
3641
default SdkPublisher<Page<T>> scan(ScanEnhancedRequest request) {
3742
throw new UnsupportedOperationException();
3843
}
3944

45+
default SdkPublisher<Page<T>> scan(Consumer<ScanEnhancedRequest.Builder> requestConsumer) {
46+
throw new UnsupportedOperationException();
47+
}
48+
49+
default SdkPublisher<Page<T>> scan() {
50+
throw new UnsupportedOperationException();
51+
}
52+
4053
/**
4154
* Gets the {@link MapperExtension} associated with this mapped resource.
4255
* @return The {@link MapperExtension} associated with this mapped resource.

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/extensions/dynamodb/mappingclient/DynamoDbAsyncTable.java

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package software.amazon.awssdk.extensions.dynamodb.mappingclient;
1717

1818
import java.util.concurrent.CompletableFuture;
19+
import java.util.function.Consumer;
1920
import software.amazon.awssdk.annotations.SdkPublicApi;
2021
import software.amazon.awssdk.core.async.SdkPublisher;
2122
import software.amazon.awssdk.extensions.dynamodb.mappingclient.model.CreateTableEnhancedRequest;
@@ -48,28 +49,65 @@ default CompletableFuture<Void> createTable(CreateTableEnhancedRequest request)
4849
throw new UnsupportedOperationException();
4950
}
5051

51-
default CompletableFuture<T> deleteItem(DeleteItemEnhancedRequest<T> request) {
52+
default CompletableFuture<Void> createTable(Consumer<CreateTableEnhancedRequest.Builder> requestConsumer) {
53+
throw new UnsupportedOperationException();
54+
}
55+
56+
default CompletableFuture<Void> createTable() {
57+
throw new UnsupportedOperationException();
58+
}
59+
60+
default CompletableFuture<T> deleteItem(DeleteItemEnhancedRequest request) {
61+
throw new UnsupportedOperationException();
62+
}
63+
64+
default CompletableFuture<T> deleteItem(Consumer<DeleteItemEnhancedRequest.Builder> requestConsumer) {
5265
throw new UnsupportedOperationException();
5366
}
5467

5568
default CompletableFuture<T> getItem(GetItemEnhancedRequest request) {
5669
throw new UnsupportedOperationException();
5770
}
5871

72+
default CompletableFuture<T> getItem(Consumer<GetItemEnhancedRequest.Builder> requestConsumer) {
73+
throw new UnsupportedOperationException();
74+
}
75+
5976
default SdkPublisher<Page<T>> query(QueryEnhancedRequest request) {
6077
throw new UnsupportedOperationException();
6178
}
6279

80+
default SdkPublisher<Page<T>> query(Consumer<QueryEnhancedRequest.Builder> requestConsumer) {
81+
throw new UnsupportedOperationException();
82+
}
83+
6384
default CompletableFuture<Void> putItem(PutItemEnhancedRequest<T> request) {
6485
throw new UnsupportedOperationException();
6586
}
6687

88+
default CompletableFuture<Void> putItem(Class<? extends T> itemClass,
89+
Consumer<PutItemEnhancedRequest.Builder<T>> requestConsumer) {
90+
throw new UnsupportedOperationException();
91+
}
92+
6793
default SdkPublisher<Page<T>> scan(ScanEnhancedRequest request) {
6894
throw new UnsupportedOperationException();
6995
}
7096

97+
default SdkPublisher<Page<T>> scan(Consumer<ScanEnhancedRequest.Builder> requestConsumer) {
98+
throw new UnsupportedOperationException();
99+
}
100+
101+
default SdkPublisher<Page<T>> scan() {
102+
throw new UnsupportedOperationException();
103+
}
104+
71105
default CompletableFuture<T> updateItem(UpdateItemEnhancedRequest<T> request) {
72106
throw new UnsupportedOperationException();
73107
}
74108

109+
default CompletableFuture<T> updateItem(Class<? extends T> itemClass,
110+
Consumer<UpdateItemEnhancedRequest.Builder<T>> requestConsumer) {
111+
throw new UnsupportedOperationException();
112+
}
75113
}

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/extensions/dynamodb/mappingclient/DynamoDbEnhancedAsyncClient.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.util.List;
1919
import java.util.concurrent.CompletableFuture;
20+
import java.util.function.Consumer;
2021
import software.amazon.awssdk.annotations.SdkPublicApi;
2122
import software.amazon.awssdk.core.async.SdkPublisher;
2223
import software.amazon.awssdk.extensions.dynamodb.mappingclient.core.DefaultDynamoDbEnhancedAsyncClient;
@@ -49,18 +50,35 @@ default SdkPublisher<BatchGetResultPage> batchGetItem(BatchGetItemEnhancedReques
4950
throw new UnsupportedOperationException();
5051
}
5152

53+
default SdkPublisher<BatchGetResultPage> batchGetItem(Consumer<BatchGetItemEnhancedRequest.Builder> requestConsumer) {
54+
throw new UnsupportedOperationException();
55+
}
56+
5257
default CompletableFuture<BatchWriteResult> batchWriteItem(BatchWriteItemEnhancedRequest request) {
5358
throw new UnsupportedOperationException();
5459
}
5560

61+
default CompletableFuture<BatchWriteResult> batchWriteItem(Consumer<BatchWriteItemEnhancedRequest.Builder> requestConsumer) {
62+
throw new UnsupportedOperationException();
63+
}
64+
5665
default CompletableFuture<List<TransactGetResultPage>> transactGetItems(TransactGetItemsEnhancedRequest request) {
5766
throw new UnsupportedOperationException();
5867
}
5968

69+
default CompletableFuture<List<TransactGetResultPage>> transactGetItems(
70+
Consumer<TransactGetItemsEnhancedRequest.Builder> requestConsumer) {
71+
throw new UnsupportedOperationException();
72+
}
73+
6074
default CompletableFuture<Void> transactWriteItems(TransactWriteItemsEnhancedRequest request) {
6175
throw new UnsupportedOperationException();
6276
}
6377

78+
default CompletableFuture<Void> transactWriteItems(Consumer<TransactWriteItemsEnhancedRequest.Builder> requestConsumer) {
79+
throw new UnsupportedOperationException();
80+
}
81+
6482
/**
6583
* Creates a default builder for {@link DynamoDbEnhancedAsyncClient}.
6684
*/

0 commit comments

Comments
 (0)