From 86efa4a9435a06a4247fc4ce645487670177ec63 Mon Sep 17 00:00:00 2001 From: fjtirado Date: Fri, 16 Jan 2026 17:14:34 +0100 Subject: [PATCH] [Fix #1091] Add EmittedEventDecorator Signed-off-by: fjtirado --- .../impl/events/EmittedEventDecorator.java | 27 +++++++++++++++++++ .../impl/executors/EmitExecutor.java | 9 ++++++- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 impl/core/src/main/java/io/serverlessworkflow/impl/events/EmittedEventDecorator.java diff --git a/impl/core/src/main/java/io/serverlessworkflow/impl/events/EmittedEventDecorator.java b/impl/core/src/main/java/io/serverlessworkflow/impl/events/EmittedEventDecorator.java new file mode 100644 index 000000000..728b100d8 --- /dev/null +++ b/impl/core/src/main/java/io/serverlessworkflow/impl/events/EmittedEventDecorator.java @@ -0,0 +1,27 @@ +/* + * Copyright 2020-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.serverlessworkflow.impl.events; + +import io.cloudevents.core.builder.CloudEventBuilder; +import io.serverlessworkflow.impl.ServicePriority; +import io.serverlessworkflow.impl.TaskContext; +import io.serverlessworkflow.impl.WorkflowContext; + +public interface EmittedEventDecorator extends ServicePriority { + + void decorate( + CloudEventBuilder ceBuilder, WorkflowContext workflowContext, TaskContext taskContext); +} diff --git a/impl/core/src/main/java/io/serverlessworkflow/impl/executors/EmitExecutor.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/EmitExecutor.java index 0dad582c7..e90d248ed 100644 --- a/impl/core/src/main/java/io/serverlessworkflow/impl/executors/EmitExecutor.java +++ b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/EmitExecutor.java @@ -33,6 +33,7 @@ import io.serverlessworkflow.impl.WorkflowUtils; import io.serverlessworkflow.impl.WorkflowValueResolver; import io.serverlessworkflow.impl.events.CloudEventUtils; +import io.serverlessworkflow.impl.events.EmittedEventDecorator; import io.serverlessworkflow.impl.events.EventPublisher; import io.serverlessworkflow.impl.expressions.ExpressionDescriptor; import java.net.URI; @@ -40,10 +41,16 @@ import java.util.Collection; import java.util.Map; import java.util.Optional; +import java.util.ServiceLoader; import java.util.concurrent.CompletableFuture; public class EmitExecutor extends RegularTaskExecutor { + private static final Collection emittedDecorators = + ServiceLoader.load(EmittedEventDecorator.class).stream() + .map(ServiceLoader.Provider::get) + .sorted() + .toList(); private final EventPropertiesBuilder props; public static class EmitExecutorBuilder extends RegularTaskExecutorBuilder { @@ -124,7 +131,7 @@ private CloudEvent buildCloudEvent(WorkflowContext workflow, TaskContext taskCon .additionalFilter() .map(filter -> filter.apply(workflow, taskContext, taskContext.input())) .ifPresent(value -> value.forEach((k, v) -> addExtension(ceBuilder, k, v))); - + emittedDecorators.forEach(d -> d.decorate(ceBuilder, workflow, taskContext)); return ceBuilder.build(); }