Skip to content

Commit 1da2f75

Browse files
committed
adding new method signature plus test
1 parent a7d426a commit 1da2f75

File tree

3 files changed

+55
-5
lines changed

3 files changed

+55
-5
lines changed

sdk/src/main/java/io/dapr/client/AbstractDaprClient.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,7 @@
4848
import reactor.core.publisher.Flux;
4949
import reactor.core.publisher.Mono;
5050

51-
import java.util.ArrayList;
52-
import java.util.Arrays;
53-
import java.util.Collections;
54-
import java.util.List;
55-
import java.util.Map;
51+
import java.util.*;
5652
import java.util.stream.Collectors;
5753

5854
/**
@@ -509,6 +505,24 @@ public Mono<Void> saveState(String storeName, String key, String etag, Object va
509505
return this.saveBulkState(storeName, Collections.singletonList(state));
510506
}
511507

508+
/**
509+
* {@inheritDoc}
510+
*/
511+
@Override
512+
public Mono<Void> saveState(String storeName, String key, String etag, Object value, Map<String, String> meta,
513+
StateOptions options) {
514+
if (meta == null) {
515+
meta = new HashMap<>();
516+
}
517+
518+
if( value != null){
519+
meta.put("contentType", stateSerializer.getContentType());
520+
}
521+
522+
State<?> state = new State<>(key, value, etag, meta, options);
523+
return this.saveBulkState(storeName, Collections.singletonList(state));
524+
}
525+
512526
/**
513527
* {@inheritDoc}
514528
*/

sdk/src/main/java/io/dapr/client/DaprClient.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,21 @@ Mono<Void> executeStateTransaction(String storeName,
498498
*/
499499
Mono<Void> saveState(String storeName, String key, String etag, Object value, StateOptions options);
500500

501+
502+
/**
503+
* Save/Update a state.
504+
*
505+
* @param storeName The name of the state store.
506+
* @param key The key of the state.
507+
* @param etag The etag to be used.
508+
* @param value The value of the state.
509+
* @param meta The metadata to be set to the state.
510+
* @param options The Options to use for each state.
511+
* @return a Mono plan of type Void.
512+
*/
513+
Mono<Void> saveState(String storeName, String key, String etag, Object value, Map<String, String> meta,
514+
StateOptions options);
515+
501516
/**
502517
* Delete a state.
503518
*

sdk/src/test/java/io/dapr/client/DaprClientGrpcTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1241,6 +1241,27 @@ public void saveStateNoOptionsTest() {
12411241
result.block();
12421242
}
12431243

1244+
@Test
1245+
public void saveStateWithMetaTest() {
1246+
String key = "key1";
1247+
String etag = "ETag1";
1248+
String value = "State value";
1249+
Map<String, String> metadata = new HashMap<>();
1250+
metadata.put("custom", "customValue");
1251+
ArgumentCaptor<DaprProtos.SaveStateRequest> argument = ArgumentCaptor.forClass(DaprProtos.SaveStateRequest.class);
1252+
doAnswer((Answer<Void>) invocation -> {
1253+
StreamObserver<Empty> observer = (StreamObserver<Empty>) invocation.getArguments()[1];
1254+
observer.onNext(Empty.getDefaultInstance());
1255+
observer.onCompleted();
1256+
return null;
1257+
}).when(daprStub).saveState(argument.capture(), any());
1258+
1259+
1260+
Mono<Void> result = client.saveState(STATE_STORE_NAME, key, etag, value, metadata,null);
1261+
result.block();
1262+
assertEquals("customValue", argument.getValue().getStates(0).getMetadata().get("custom"));
1263+
}
1264+
12441265
@Test
12451266
public void saveStateTest() {
12461267
String key = "key1";

0 commit comments

Comments
 (0)