|
17 | 17 |
|
18 | 18 | import com.github.f4b6a3.ulid.UlidCreator; |
19 | 19 | import io.serverlessworkflow.api.types.Document; |
| 20 | +import io.serverlessworkflow.api.types.SchemaInline; |
20 | 21 | import io.serverlessworkflow.api.types.Workflow; |
21 | 22 | import io.serverlessworkflow.impl.events.EventConsumer; |
22 | 23 | import io.serverlessworkflow.impl.events.EventPublisher; |
23 | 24 | import io.serverlessworkflow.impl.events.InMemoryEvents; |
24 | 25 | import io.serverlessworkflow.impl.executors.DefaultTaskExecutorFactory; |
25 | 26 | import io.serverlessworkflow.impl.executors.TaskExecutorFactory; |
26 | 27 | import io.serverlessworkflow.impl.expressions.ExpressionFactory; |
27 | | -import io.serverlessworkflow.impl.expressions.JQExpressionFactory; |
28 | 28 | import io.serverlessworkflow.impl.expressions.RuntimeDescriptor; |
29 | | -import io.serverlessworkflow.impl.jsonschema.DefaultSchemaValidatorFactory; |
30 | | -import io.serverlessworkflow.impl.jsonschema.SchemaValidatorFactory; |
31 | 29 | import io.serverlessworkflow.impl.resources.DefaultResourceLoaderFactory; |
32 | 30 | import io.serverlessworkflow.impl.resources.ResourceLoaderFactory; |
| 31 | +import io.serverlessworkflow.impl.resources.StaticResource; |
| 32 | +import io.serverlessworkflow.impl.schema.SchemaValidator; |
| 33 | +import io.serverlessworkflow.impl.schema.SchemaValidatorFactory; |
33 | 34 | import java.util.Collection; |
34 | 35 | import java.util.Collections; |
35 | 36 | import java.util.HashSet; |
36 | 37 | import java.util.Map; |
| 38 | +import java.util.ServiceLoader; |
37 | 39 | import java.util.concurrent.ConcurrentHashMap; |
38 | 40 | import java.util.concurrent.ExecutorService; |
39 | 41 | import java.util.concurrent.Executors; |
@@ -101,11 +103,31 @@ public WorkflowIdFactory idFactory() { |
101 | 103 | } |
102 | 104 |
|
103 | 105 | public static class Builder { |
| 106 | + private static final SchemaValidatorFactory EMPTY_SCHEMA_VALIDATOR = |
| 107 | + new SchemaValidatorFactory() { |
| 108 | + |
| 109 | + private final SchemaValidator NoValidation = |
| 110 | + new SchemaValidator() { |
| 111 | + @Override |
| 112 | + public void validate(WorkflowModel node) {} |
| 113 | + }; |
| 114 | + |
| 115 | + @Override |
| 116 | + public SchemaValidator getValidator(StaticResource resource) { |
| 117 | + |
| 118 | + return NoValidation; |
| 119 | + } |
| 120 | + |
| 121 | + @Override |
| 122 | + public SchemaValidator getValidator(SchemaInline inline) { |
| 123 | + return NoValidation; |
| 124 | + } |
| 125 | + }; |
104 | 126 | private TaskExecutorFactory taskFactory = DefaultTaskExecutorFactory.get(); |
105 | | - private ExpressionFactory exprFactory = JQExpressionFactory.get(); |
| 127 | + private ExpressionFactory exprFactory; |
106 | 128 | private Collection<WorkflowExecutionListener> listeners; |
107 | 129 | private ResourceLoaderFactory resourceLoaderFactory = DefaultResourceLoaderFactory.get(); |
108 | | - private SchemaValidatorFactory schemaValidatorFactory = DefaultSchemaValidatorFactory.get(); |
| 130 | + private SchemaValidatorFactory schemaValidatorFactory; |
109 | 131 | private WorkflowPositionFactory positionFactory = () -> new QueueWorkflowPosition(); |
110 | 132 | private WorkflowIdFactory idFactory = () -> UlidCreator.getMonotonicUlid().toString(); |
111 | 133 | private ExecutorServiceFactory executorFactory = () -> Executors.newCachedThreadPool(); |
@@ -175,6 +197,18 @@ public Builder withEventPublisher(EventPublisher eventPublisher) { |
175 | 197 | } |
176 | 198 |
|
177 | 199 | public WorkflowApplication build() { |
| 200 | + if (exprFactory == null) { |
| 201 | + exprFactory = |
| 202 | + ServiceLoader.load(ExpressionFactory.class) |
| 203 | + .findFirst() |
| 204 | + .orElseThrow(() -> new IllegalStateException("Expression factory is required")); |
| 205 | + } |
| 206 | + if (schemaValidatorFactory == null) { |
| 207 | + schemaValidatorFactory = |
| 208 | + ServiceLoader.load(SchemaValidatorFactory.class) |
| 209 | + .findFirst() |
| 210 | + .orElse(EMPTY_SCHEMA_VALIDATOR); |
| 211 | + } |
178 | 212 | return new WorkflowApplication(this); |
179 | 213 | } |
180 | 214 | } |
|
0 commit comments