Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package io.serverlessworkflow.impl;

import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;

Expand Down Expand Up @@ -63,7 +64,19 @@ default CompletableFuture<Boolean> resumeFuture() {
return CompletableFuture.completedFuture(resume());
}

<T> T addMetadataIfAbsent(String key, Supplier<T> supplier);
default <T> T addMetadataIfAbsent(String key, Supplier<T> supplier) {
return supplier.get();
}

default void removeMetadata(String key) {}
Comment thread
fjtirado marked this conversation as resolved.

void removeMetadata(String key);
/**
* Remove metadata key if present and return a non-empty optional if the deleted object matches
* the specified class type
*/
default <T> Optional<T> removeMetadata(String key, Class<T> clazz) {
Optional<T> value = findMetadata(key, clazz);
removeMetadata(key);
return value;
Comment thread
fjtirado marked this conversation as resolved.
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
package io.serverlessworkflow.impl;

import java.time.Instant;
import java.util.Map;
import java.util.Optional;

public interface WorkflowInstanceData {
Expand All @@ -31,5 +32,11 @@ public interface WorkflowInstanceData {

WorkflowModel context();

<T> Optional<T> findMetadata(String key, Class<T> objectClass);
default <T> Optional<T> findMetadata(String key, Class<T> objectClass) {
return Optional.empty();
}

default Map<String, Object> metadata() {
return Map.of();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.CancellationException;
Expand Down Expand Up @@ -452,6 +453,17 @@ public <T> T addMetadataIfAbsent(String key, Supplier<T> supplier) {
return (T) additionalObjects.computeIfAbsent(key, k -> supplier.get());
}

@Override
public <T> Optional<T> removeMetadata(String key, Class<T> clazz) {
Object value = additionalObjects.remove(key);
return clazz.isInstance(value) ? Optional.of(clazz.cast(value)) : Optional.empty();
}

@Override
public Map<String, Object> metadata() {
return Collections.unmodifiableMap(additionalObjects);
}

@Override
public void removeMetadata(String key) {
additionalObjects.remove(key);
Expand Down
Loading