add support for custom status

Signed-off-by: salaboy <Salaboy@gmail.com>
This commit is contained in:
salaboy 2025-08-18 09:45:54 +01:00
parent 04b19e1cf7
commit 13754b5879
3 changed files with 34 additions and 3 deletions

View File

@ -526,4 +526,12 @@ public interface WorkflowContext {
default UUID newUuid() { default UUID newUuid() {
throw new RuntimeException("No implementation found."); throw new RuntimeException("No implementation found.");
} }
/**
* Set a custom status to a workflow execution.
*
* @param status to be set to the current execution
*/
void setCustomStatus(Object status);
} }

View File

@ -59,7 +59,7 @@ public class DefaultWorkflowContext implements WorkflowContext {
* @throws IllegalArgumentException if context or logger is null * @throws IllegalArgumentException if context or logger is null
*/ */
public DefaultWorkflowContext(TaskOrchestrationContext context, Logger logger) public DefaultWorkflowContext(TaskOrchestrationContext context, Logger logger)
throws IllegalArgumentException { throws IllegalArgumentException {
if (context == null) { if (context == null) {
throw new IllegalArgumentException("Context cannot be null"); throw new IllegalArgumentException("Context cannot be null");
} }
@ -114,7 +114,7 @@ public class DefaultWorkflowContext implements WorkflowContext {
*/ */
@Override @Override
public <V> Task<V> waitForExternalEvent(String name, Duration timeout, Class<V> dataType) public <V> Task<V> waitForExternalEvent(String name, Duration timeout, Class<V> dataType)
throws TaskCanceledException { throws TaskCanceledException {
return this.innerContext.waitForExternalEvent(name, timeout, dataType); return this.innerContext.waitForExternalEvent(name, timeout, dataType);
} }
@ -130,7 +130,7 @@ public class DefaultWorkflowContext implements WorkflowContext {
* @param timeout the amount of time to wait before canceling the returned * @param timeout the amount of time to wait before canceling the returned
* {@code Task} * {@code Task}
* @return a new {@link Task} that completes when the external event is received * @return a new {@link Task} that completes when the external event is received
* or when {@code timeout} expires * or when {@code timeout} expires
* @throws TaskCanceledException if the specified {@code timeout} value expires * @throws TaskCanceledException if the specified {@code timeout} value expires
* before the event is received * before the event is received
*/ */
@ -294,4 +294,13 @@ public class DefaultWorkflowContext implements WorkflowContext {
return workflowTaskRetryHandler.handle(workflowRetryContext); return workflowTaskRetryHandler.handle(workflowRetryContext);
}; };
} }
/**
* Set custom status to a workflow execution.
*
* @param status to set to the execution
*/
public void setCustomStatus(Object status) {
innerContext.setCustomStatus(status);
}
} }

View File

@ -135,6 +135,11 @@ public class DefaultWorkflowContextTest {
@Override @Override
public void continueAsNew(Object input, boolean preserveUnprocessedEvents) { public void continueAsNew(Object input, boolean preserveUnprocessedEvents) {
} }
@Override
public void setCustomStatus(Object status) {
}
}; };
} }
@ -403,6 +408,15 @@ public class DefaultWorkflowContextTest {
verify(mockInnerContext, times(1)).callSubOrchestrator(expectedName, expectedInput, null, null, String.class); verify(mockInnerContext, times(1)).callSubOrchestrator(expectedName, expectedInput, null, null, String.class);
} }
@Test
public void setCustomStatusWorkflow() {
String customStatus = "CustomStatus";
context.setCustomStatus(customStatus);
verify(mockInnerContext, times(1)).setCustomStatus(customStatus);
}
@Test @Test
public void newUuidTest() { public void newUuidTest() {
context.newUuid(); context.newUuid();