Skip to content

Commit 6831209

Browse files
committed
[Fix #1025] Allow using a different factory for context.
Signed-off-by: fjtirado <ftirados@redhat.com>
1 parent f77cac6 commit 6831209

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ public class WorkflowApplication implements AutoCloseable {
7070
private final Collection<EventPublisher> eventPublishers;
7171
private final boolean lifeCycleCEPublishingEnabled;
7272
private final WorkflowModelFactory modelFactory;
73+
private final WorkflowModelFactory contextFactory;
7374
private final WorkflowScheduler scheduler;
7475
private final Map<String, WorkflowAdditionalObject<?>> additionalObjects;
7576
private final ConfigManager configManager;
@@ -93,6 +94,7 @@ private WorkflowApplication(Builder builder) {
9394
this.eventPublishers = builder.eventPublishers;
9495
this.lifeCycleCEPublishingEnabled = builder.lifeCycleCEPublishingEnabled;
9596
this.modelFactory = builder.modelFactory;
97+
this.contextFactory = builder.contextFactory;
9698
this.scheduler = builder.scheduler;
9799
this.schedulerListener = builder.schedulerListener;
98100
this.additionalObjects = builder.additionalObjects;
@@ -175,6 +177,7 @@ public SchemaValidator getValidator(SchemaInline inline) {
175177
() -> new RuntimeDescriptor("reference impl", "1.0.0_alpha", Collections.emptyMap());
176178
private boolean lifeCycleCEPublishingEnabled = true;
177179
private WorkflowModelFactory modelFactory;
180+
private WorkflowModelFactory contextFactory;
178181
private Map<String, WorkflowAdditionalObject<?>> additionalObjects = new HashMap<>();
179182
private SecretManager secretManager;
180183
private ConfigManager configManager;
@@ -273,6 +276,11 @@ public Builder withModelFactory(WorkflowModelFactory modelFactory) {
273276
return this;
274277
}
275278

279+
public Builder withContextFactory(WorkflowModelFactory contextFactory) {
280+
this.contextFactory = contextFactory;
281+
return this;
282+
}
283+
276284
public WorkflowApplication build() {
277285
if (modelFactory == null) {
278286
modelFactory =
@@ -283,6 +291,9 @@ public WorkflowApplication build() {
283291
new IllegalStateException(
284292
"WorkflowModelFactory instance has to be set in WorkflowApplication or present in the classpath"));
285293
}
294+
if (contextFactory == null) {
295+
contextFactory = modelFactory;
296+
}
286297
ServiceLoader.load(ExpressionFactory.class).forEach(exprFactories::add);
287298
if (schemaValidatorFactory == null) {
288299
schemaValidatorFactory =
@@ -373,6 +384,10 @@ public WorkflowModelFactory modelFactory() {
373384
return modelFactory;
374385
}
375386

387+
public WorkflowModelFactory contextFactory() {
388+
return contextFactory;
389+
}
390+
376391
public RuntimeDescriptorFactory runtimeDescriptorFactory() {
377392
return runtimeDescriptorFactory;
378393
}

impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class WorkflowContext implements WorkflowContextData {
2323
WorkflowContext(WorkflowDefinition definition, WorkflowMutableInstance instance) {
2424
this.definition = definition;
2525
this.instance = instance;
26-
this.context = definition.application().modelFactory().fromNull();
26+
this.context = definition.application().contextFactory().fromNull();
2727
}
2828

2929
@Override

impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowUtils.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.serverlessworkflow.api.types.UriTemplate;
2626
import io.serverlessworkflow.api.types.Workflow;
2727
import io.serverlessworkflow.impl.expressions.ExpressionDescriptor;
28+
import io.serverlessworkflow.impl.expressions.ExpressionFactory;
2829
import io.serverlessworkflow.impl.expressions.ExpressionUtils;
2930
import io.serverlessworkflow.impl.resources.ResourceLoader;
3031
import io.serverlessworkflow.impl.schema.SchemaValidator;
@@ -77,7 +78,9 @@ public static Optional<WorkflowFilter> buildWorkflowFilter(WorkflowApplication a
7778

7879
public static Optional<WorkflowFilter> buildWorkflowFilter(WorkflowApplication app, ExportAs as) {
7980
return as != null
80-
? Optional.of(buildFilterFromStrObject(app, as.getString(), as.getObject()))
81+
? Optional.of(
82+
buildFilterFromStrObject(
83+
app.expressionFactory(), app.contextFactory(), as.getString(), as.getObject()))
8184
: Optional.empty();
8285
}
8386

@@ -118,8 +121,12 @@ private static WorkflowValueResolver<String> toString(String literal) {
118121

119122
private static WorkflowFilter buildFilterFromStrObject(
120123
WorkflowApplication app, String str, Object object) {
121-
return app.expressionFactory()
122-
.buildFilter(new ExpressionDescriptor(str, object), app.modelFactory());
124+
return buildFilterFromStrObject(app.expressionFactory(), app.modelFactory(), str, object);
125+
}
126+
127+
private static WorkflowFilter buildFilterFromStrObject(
128+
ExpressionFactory exprFactory, WorkflowModelFactory modelFactory, String str, Object object) {
129+
return exprFactory.buildFilter(new ExpressionDescriptor(str, object), modelFactory);
123130
}
124131

125132
public static WorkflowValueResolver<Map<String, Object>> buildMapResolver(

0 commit comments

Comments
 (0)