diff --git a/experimental/agentic/pom.xml b/experimental/agentic/pom.xml
index ae1967690..a6ea803e9 100644
--- a/experimental/agentic/pom.xml
+++ b/experimental/agentic/pom.xml
@@ -11,6 +11,10 @@
io.serverlessworkflow
serverlessworkflow-experimental-lambda
+
+
+ io.serverlessworkflow
+ serverlessworkflow-experimental-model
dev.langchain4j
diff --git a/experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticExpressionFactory.java b/experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticExpressionFactory.java
deleted file mode 100644
index a4b79a183..000000000
--- a/experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticExpressionFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.expressions.agentic;
-
-import io.serverlessworkflow.impl.WorkflowModelFactory;
-import io.serverlessworkflow.impl.expressions.func.JavaExpressionFactory;
-
-public class AgenticExpressionFactory extends JavaExpressionFactory {
-
- private final WorkflowModelFactory modelFactory = new AgenticModelFactory();
-
- @Override
- public WorkflowModelFactory modelFactory() {
- return modelFactory;
- }
-
- public int priority() {
- return DEFAULT_PRIORITY - 1;
- }
-}
diff --git a/experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticModel.java b/experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/AgenticModel.java
similarity index 93%
rename from experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticModel.java
rename to experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/AgenticModel.java
index 0d34d4248..2270fe0b6 100644
--- a/experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticModel.java
+++ b/experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/AgenticModel.java
@@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.serverlessworkflow.impl.expressions.agentic;
+package io.serverlessworkflow.impl.model.agentic;
import dev.langchain4j.agentic.scope.AgenticScope;
import io.serverlessworkflow.impl.WorkflowModel;
-import io.serverlessworkflow.impl.expressions.func.JavaModel;
+import io.serverlessworkflow.impl.model.func.JavaModel;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
diff --git a/experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticModelCollection.java b/experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/AgenticModelCollection.java
similarity index 94%
rename from experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticModelCollection.java
rename to experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/AgenticModelCollection.java
index 90ef8e734..a27866ab1 100644
--- a/experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticModelCollection.java
+++ b/experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/AgenticModelCollection.java
@@ -13,12 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.serverlessworkflow.impl.expressions.agentic;
+package io.serverlessworkflow.impl.model.agentic;
import dev.langchain4j.agentic.scope.AgenticScope;
import dev.langchain4j.agentic.scope.ResultWithAgenticScope;
import io.serverlessworkflow.impl.WorkflowModel;
-import io.serverlessworkflow.impl.expressions.func.JavaModelCollection;
+import io.serverlessworkflow.impl.model.func.JavaModelCollection;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
diff --git a/experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticModelFactory.java b/experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/AgenticModelFactory.java
similarity index 92%
rename from experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticModelFactory.java
rename to experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/AgenticModelFactory.java
index d14dca884..f14c54ea7 100644
--- a/experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticModelFactory.java
+++ b/experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/AgenticModelFactory.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.serverlessworkflow.impl.expressions.agentic;
+package io.serverlessworkflow.impl.model.agentic;
import dev.langchain4j.agentic.scope.AgenticScope;
import io.cloudevents.CloudEvent;
@@ -21,12 +21,12 @@
import io.serverlessworkflow.impl.WorkflowModel;
import io.serverlessworkflow.impl.WorkflowModelCollection;
import io.serverlessworkflow.impl.WorkflowModelFactory;
-import io.serverlessworkflow.impl.expressions.agentic.langchain4j.AgenticScopeRegistryAssessor;
+import io.serverlessworkflow.impl.model.agentic.langchain4j.AgenticScopeRegistryAssessor;
import java.time.OffsetDateTime;
import java.util.HashMap;
import java.util.Map;
-class AgenticModelFactory implements WorkflowModelFactory {
+public class AgenticModelFactory implements WorkflowModelFactory {
static final String DEFAULT_AGENTIC_SCOPE_STATE_KEY = "input";
private final AgenticScopeRegistryAssessor scopeRegistryAssessor =
@@ -126,4 +126,11 @@ public WorkflowModel fromOther(Object value) {
}
return newAgenticModel(value);
}
+
+ public AgenticModelFactory() {}
+
+ @Override
+ public int priority() {
+ return DEFAULT_PRIORITY - 1;
+ }
}
diff --git a/experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticScopeCloudEventsHandler.java b/experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/AgenticScopeCloudEventsHandler.java
similarity index 97%
rename from experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticScopeCloudEventsHandler.java
rename to experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/AgenticScopeCloudEventsHandler.java
index 8e9347ebd..1ee807fed 100644
--- a/experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/AgenticScopeCloudEventsHandler.java
+++ b/experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/AgenticScopeCloudEventsHandler.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.serverlessworkflow.impl.expressions.agentic;
+package io.serverlessworkflow.impl.model.agentic;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
diff --git a/experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/langchain4j/AgenticScopeRegistryAssessor.java b/experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/langchain4j/AgenticScopeRegistryAssessor.java
similarity index 97%
rename from experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/langchain4j/AgenticScopeRegistryAssessor.java
rename to experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/langchain4j/AgenticScopeRegistryAssessor.java
index 1d3b5ab14..68f057e9f 100644
--- a/experimental/agentic/src/main/java/io/serverlessworkflow/impl/expressions/agentic/langchain4j/AgenticScopeRegistryAssessor.java
+++ b/experimental/agentic/src/main/java/io/serverlessworkflow/impl/model/agentic/langchain4j/AgenticScopeRegistryAssessor.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.serverlessworkflow.impl.expressions.agentic.langchain4j;
+package io.serverlessworkflow.impl.model.agentic.langchain4j;
import dev.langchain4j.agentic.internal.AgenticScopeOwner;
import dev.langchain4j.agentic.scope.AgenticScope;
diff --git a/experimental/agentic/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory b/experimental/agentic/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory
new file mode 100644
index 000000000..eac09c0f2
--- /dev/null
+++ b/experimental/agentic/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory
@@ -0,0 +1 @@
+io.serverlessworkflow.impl.model.agentic.AgenticModelFactory
\ No newline at end of file
diff --git a/experimental/agentic/src/main/resources/META-INF/services/io.serverlessworkflow.impl.expressions.ExpressionFactory b/experimental/agentic/src/main/resources/META-INF/services/io.serverlessworkflow.impl.expressions.ExpressionFactory
deleted file mode 100644
index e0038ed99..000000000
--- a/experimental/agentic/src/main/resources/META-INF/services/io.serverlessworkflow.impl.expressions.ExpressionFactory
+++ /dev/null
@@ -1 +0,0 @@
-io.serverlessworkflow.impl.expressions.agentic.AgenticExpressionFactory
\ No newline at end of file
diff --git a/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/WorkflowInvocationHandler.java b/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/WorkflowInvocationHandler.java
index 8eaffceec..33c9a9745 100644
--- a/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/WorkflowInvocationHandler.java
+++ b/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/WorkflowInvocationHandler.java
@@ -27,7 +27,7 @@
import dev.langchain4j.service.MemoryId;
import io.serverlessworkflow.api.types.Workflow;
import io.serverlessworkflow.impl.WorkflowApplication;
-import io.serverlessworkflow.impl.expressions.agentic.langchain4j.AgenticScopeRegistryAssessor;
+import io.serverlessworkflow.impl.model.agentic.langchain4j.AgenticScopeRegistryAssessor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
diff --git a/experimental/lambda/pom.xml b/experimental/lambda/pom.xml
index a557b1ebe..50c054dad 100644
--- a/experimental/lambda/pom.xml
+++ b/experimental/lambda/pom.xml
@@ -12,9 +12,18 @@
io.serverlessworkflow
serverlessworkflow-experimental-types
+
+ io.serverlessworkflow
+ serverlessworkflow-experimental-model
+ test
+
io.serverlessworkflow
serverlessworkflow-impl-core
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-jq
io.serverlessworkflow
diff --git a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaExpressionFactory.java b/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaExpressionFactory.java
index 1faea783a..bdc1aedf9 100644
--- a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaExpressionFactory.java
+++ b/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaExpressionFactory.java
@@ -25,7 +25,6 @@
import io.serverlessworkflow.api.types.func.TypedJavaContextFunction;
import io.serverlessworkflow.api.types.func.TypedJavaFilterFunction;
import io.serverlessworkflow.api.types.func.TypedPredicate;
-import io.serverlessworkflow.impl.WorkflowModelFactory;
import io.serverlessworkflow.impl.WorkflowPredicate;
import io.serverlessworkflow.impl.expressions.AbstractExpressionFactory;
import io.serverlessworkflow.impl.expressions.ExpressionDescriptor;
@@ -39,8 +38,6 @@
public class JavaExpressionFactory extends AbstractExpressionFactory {
- private final WorkflowModelFactory modelFactory = new JavaModelFactory();
-
@Override
public ObjectExpression buildExpression(ExpressionDescriptor descriptor) {
Object value = descriptor.asObject();
@@ -61,6 +58,26 @@ public ObjectExpression buildExpression(ExpressionDescriptor descriptor) {
}
}
+ @Override
+ public int priority(ExpressionDescriptor descriptor) {
+ Object value = descriptor.asObject();
+ if (value instanceof Function
+ || value instanceof TypedFunction
+ || value instanceof JavaFilterFunction
+ || value instanceof TypedJavaFilterFunction
+ || value instanceof JavaContextFunction
+ || value instanceof TypedJavaContextFunction
+ || value instanceof Predicate
+ || value instanceof TypedPredicate
+ || value instanceof Boolean) {
+ return DEFAULT_PRIORITY - 500;
+ } else if (descriptor.asString() == null) {
+ return MIN_PRIORITY;
+ } else {
+ return DEFAULT_PRIORITY + 500;
+ }
+ }
+
@SuppressWarnings({"rawtypes", "unchecked"})
private WorkflowPredicate fromPredicate(Predicate pred) {
return (w, t, n) -> pred.test(n.asJavaObject());
@@ -82,12 +99,7 @@ public Optional buildIfFilter(TaskBase task) {
return Optional.of(fromPredicate(pred));
}
}
- return super.buildIfFilter(task);
- }
-
- @Override
- public WorkflowModelFactory modelFactory() {
- return modelFactory;
+ return Optional.empty();
}
@Override
diff --git a/experimental/model/pom.xml b/experimental/model/pom.xml
new file mode 100644
index 000000000..6777d9e2b
--- /dev/null
+++ b/experimental/model/pom.xml
@@ -0,0 +1,16 @@
+
+ 4.0.0
+
+ io.serverlessworkflow
+ serverlessworkflow-experimental
+ 8.0.0-SNAPSHOT
+
+ serverlessworkflow-experimental-model
+ Serverless Workflow :: Experimental :: Model
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-core
+
+
+
\ No newline at end of file
diff --git a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaModel.java b/experimental/model/src/main/java/io/serverlessworkflow/impl/model/func/JavaModel.java
similarity index 98%
rename from experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaModel.java
rename to experimental/model/src/main/java/io/serverlessworkflow/impl/model/func/JavaModel.java
index e1d4dae3b..b4cec73e6 100644
--- a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaModel.java
+++ b/experimental/model/src/main/java/io/serverlessworkflow/impl/model/func/JavaModel.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.serverlessworkflow.impl.expressions.func;
+package io.serverlessworkflow.impl.model.func;
import io.serverlessworkflow.impl.WorkflowModel;
import java.time.OffsetDateTime;
diff --git a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaModelCollection.java b/experimental/model/src/main/java/io/serverlessworkflow/impl/model/func/JavaModelCollection.java
similarity index 98%
rename from experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaModelCollection.java
rename to experimental/model/src/main/java/io/serverlessworkflow/impl/model/func/JavaModelCollection.java
index 2f84411af..5c52b33ed 100644
--- a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaModelCollection.java
+++ b/experimental/model/src/main/java/io/serverlessworkflow/impl/model/func/JavaModelCollection.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.serverlessworkflow.impl.expressions.func;
+package io.serverlessworkflow.impl.model.func;
import io.serverlessworkflow.impl.WorkflowModel;
import io.serverlessworkflow.impl.WorkflowModelCollection;
diff --git a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaModelFactory.java b/experimental/model/src/main/java/io/serverlessworkflow/impl/model/func/JavaModelFactory.java
similarity index 97%
rename from experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaModelFactory.java
rename to experimental/model/src/main/java/io/serverlessworkflow/impl/model/func/JavaModelFactory.java
index 4502abf11..fecc0b8f5 100644
--- a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaModelFactory.java
+++ b/experimental/model/src/main/java/io/serverlessworkflow/impl/model/func/JavaModelFactory.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.serverlessworkflow.impl.expressions.func;
+package io.serverlessworkflow.impl.model.func;
import io.cloudevents.CloudEvent;
import io.cloudevents.CloudEventData;
diff --git a/experimental/model/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory b/experimental/model/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory
new file mode 100644
index 000000000..4b198a4d2
--- /dev/null
+++ b/experimental/model/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory
@@ -0,0 +1 @@
+io.serverlessworkflow.impl.model.func.JavaModelFactory
\ No newline at end of file
diff --git a/experimental/pom.xml b/experimental/pom.xml
index 51c56ded6..520ecb954 100644
--- a/experimental/pom.xml
+++ b/experimental/pom.xml
@@ -14,12 +14,23 @@
io.serverlessworkflow
serverlessworkflow-impl-core
${project.version}
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-jq
+ ${project.version}
+ test
io.serverlessworkflow
serverlessworkflow-experimental-lambda
${project.version}
+
+ io.serverlessworkflow
+ serverlessworkflow-experimental-model
+ ${project.version}
+
io.serverlessworkflow
serverlessworkflow-experimental-types
@@ -38,5 +49,6 @@
agentic
lambda-fluent
fluent
+ model
\ No newline at end of file
diff --git a/impl/core/src/main/java/io/serverlessworkflow/impl/CompositeExpressionFactory.java b/impl/core/src/main/java/io/serverlessworkflow/impl/CompositeExpressionFactory.java
new file mode 100644
index 000000000..c8ea51e15
--- /dev/null
+++ b/impl/core/src/main/java/io/serverlessworkflow/impl/CompositeExpressionFactory.java
@@ -0,0 +1,89 @@
+/*
+ * 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;
+
+import io.cloudevents.CloudEventData;
+import io.serverlessworkflow.api.types.TaskBase;
+import io.serverlessworkflow.impl.expressions.ExpressionDescriptor;
+import io.serverlessworkflow.impl.expressions.ExpressionFactory;
+import java.time.OffsetDateTime;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.Function;
+
+class CompositeExpressionFactory implements ExpressionFactory {
+
+ private final Collection exprFactories;
+
+ public CompositeExpressionFactory(Collection exprFactories) {
+ this.exprFactories = exprFactories;
+ }
+
+ private T processFactories(
+ ExpressionDescriptor desc, Function consumer) {
+ return exprFactories.stream()
+ .sorted((f1, f2) -> f1.priority(desc) - f2.priority(desc))
+ .findFirst()
+ .map(consumer::apply)
+ .orElseThrow(
+ () ->
+ new IllegalArgumentException("No expression factory found for expression " + desc));
+ }
+
+ @Override
+ public WorkflowValueResolver resolveString(ExpressionDescriptor desc) {
+ return processFactories(desc, f -> f.resolveString(desc));
+ }
+
+ @Override
+ public WorkflowValueResolver resolveDate(ExpressionDescriptor desc) {
+ return processFactories(desc, f -> f.resolveDate(desc));
+ }
+
+ @Override
+ public WorkflowValueResolver resolveCE(ExpressionDescriptor desc) {
+ return processFactories(desc, f -> f.resolveCE(desc));
+ }
+
+ @Override
+ public WorkflowValueResolver
-
- net.thisptr
- jackson-jq
-
-
- org.junit.jupiter
- junit-jupiter-engine
-
-
- org.assertj
- assertj-core
-
-
- org.mockito
- mockito-core
-
\ No newline at end of file
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModel.java b/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModel.java
similarity index 98%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModel.java
rename to impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModel.java
index c3a61893a..5a91c5db2 100644
--- a/impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModel.java
+++ b/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModel.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.serverlessworkflow.impl.expressions.jq;
+package io.serverlessworkflow.impl.model.jackson;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModelCollection.java b/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelCollection.java
similarity index 98%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModelCollection.java
rename to impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelCollection.java
index 456db1658..d6e9c6b9e 100644
--- a/impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModelCollection.java
+++ b/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelCollection.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.serverlessworkflow.impl.expressions.jq;
+package io.serverlessworkflow.impl.model.jackson;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModelDeserializer.java b/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelDeserializer.java
similarity index 96%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModelDeserializer.java
rename to impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelDeserializer.java
index 73d10bc1d..e0dd30bef 100644
--- a/impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModelDeserializer.java
+++ b/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelDeserializer.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.serverlessworkflow.impl.expressions.jq;
+package io.serverlessworkflow.impl.model.jackson;
import com.fasterxml.jackson.core.JacksonException;
import com.fasterxml.jackson.core.JsonParser;
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModelFactory.java b/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java
similarity index 98%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModelFactory.java
rename to impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java
index 8f894fdb4..cb2516143 100644
--- a/impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModelFactory.java
+++ b/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.serverlessworkflow.impl.expressions.jq;
+package io.serverlessworkflow.impl.model.jackson;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.DoubleNode;
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModelSerializer.java b/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelSerializer.java
similarity index 95%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModelSerializer.java
rename to impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelSerializer.java
index 7d4b07c92..e621ee77f 100644
--- a/impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JacksonModelSerializer.java
+++ b/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelSerializer.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.serverlessworkflow.impl.expressions.jq;
+package io.serverlessworkflow.impl.model.jackson;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
diff --git a/impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory b/impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory
new file mode 100644
index 000000000..663194671
--- /dev/null
+++ b/impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory
@@ -0,0 +1 @@
+io.serverlessworkflow.impl.model.jackson.JacksonModelFactory
\ No newline at end of file
diff --git a/impl/jq/pom.xml b/impl/jq/pom.xml
new file mode 100644
index 000000000..451ab5553
--- /dev/null
+++ b/impl/jq/pom.xml
@@ -0,0 +1,32 @@
+
+ 4.0.0
+
+ io.serverlessworkflow
+ serverlessworkflow-impl
+ 8.0.0-SNAPSHOT
+
+ serverlessworkflow-impl-jq
+ Serverless Workflow :: Impl :: JQ
+
+
+ net.thisptr
+ jackson-jq
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-jackson
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+
+
+ org.assertj
+ assertj-core
+
+
+ org.mockito
+ mockito-core
+
+
+
\ No newline at end of file
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JQExpression.java b/impl/jq/src/main/java/io/serverlessworkflow/impl/expressions/jq/JQExpression.java
similarity index 100%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JQExpression.java
rename to impl/jq/src/main/java/io/serverlessworkflow/impl/expressions/jq/JQExpression.java
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JQExpressionFactory.java b/impl/jq/src/main/java/io/serverlessworkflow/impl/expressions/jq/JQExpressionFactory.java
similarity index 93%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JQExpressionFactory.java
rename to impl/jq/src/main/java/io/serverlessworkflow/impl/expressions/jq/JQExpressionFactory.java
index 7ebeaf106..7eeac60f5 100644
--- a/impl/jackson/src/main/java/io/serverlessworkflow/impl/expressions/jq/JQExpressionFactory.java
+++ b/impl/jq/src/main/java/io/serverlessworkflow/impl/expressions/jq/JQExpressionFactory.java
@@ -17,7 +17,6 @@
import io.cloudevents.CloudEventData;
import io.cloudevents.jackson.JsonCloudEventData;
-import io.serverlessworkflow.impl.WorkflowModelFactory;
import io.serverlessworkflow.impl.expressions.ExpressionUtils;
import io.serverlessworkflow.impl.expressions.ObjectExpression;
import io.serverlessworkflow.impl.expressions.ObjectExpressionFactory;
@@ -34,8 +33,6 @@
public class JQExpressionFactory extends ObjectExpressionFactory {
- private WorkflowModelFactory modelFactory = new JacksonModelFactory();
-
private final Supplier scopeSupplier;
public JQExpressionFactory() {
@@ -71,11 +68,6 @@ public ObjectExpression buildExpression(String expression) {
}
}
- @Override
- public WorkflowModelFactory modelFactory() {
- return modelFactory;
- }
-
@Override
protected boolean toBoolean(Object eval) {
return JsonUtils.convertValue(eval, Boolean.class);
diff --git a/impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.expressions.ExpressionFactory b/impl/jq/src/main/resources/META-INF/services/io.serverlessworkflow.impl.expressions.ExpressionFactory
similarity index 100%
rename from impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.expressions.ExpressionFactory
rename to impl/jq/src/main/resources/META-INF/services/io.serverlessworkflow.impl.expressions.ExpressionFactory
diff --git a/impl/jackson/src/test/java/io/serverlessworkflow/impl/expressions/jq/JQExpressionFactoryTest.java b/impl/jq/src/test/java/io/serverlessworkflow/impl/expressions/jq/JQExpressionFactoryTest.java
similarity index 90%
rename from impl/jackson/src/test/java/io/serverlessworkflow/impl/expressions/jq/JQExpressionFactoryTest.java
rename to impl/jq/src/test/java/io/serverlessworkflow/impl/expressions/jq/JQExpressionFactoryTest.java
index b78d5ff78..784de6885 100644
--- a/impl/jackson/src/test/java/io/serverlessworkflow/impl/expressions/jq/JQExpressionFactoryTest.java
+++ b/impl/jq/src/test/java/io/serverlessworkflow/impl/expressions/jq/JQExpressionFactoryTest.java
@@ -18,6 +18,7 @@
import static org.assertj.core.api.Assertions.assertThat;
import io.serverlessworkflow.impl.WorkflowContext;
+import io.serverlessworkflow.impl.WorkflowModelFactory;
import io.serverlessworkflow.impl.WorkflowValueResolver;
import io.serverlessworkflow.impl.expressions.ExpressionDescriptor;
import io.serverlessworkflow.impl.jackson.JsonUtils;
@@ -25,6 +26,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.ServiceLoader;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -33,15 +35,18 @@ class JQExpressionFactoryTest {
private WorkflowContext workflowContext;
private JQExpressionFactory factory;
+ private WorkflowModelFactory modelFactory;
@BeforeEach
void setup() {
workflowContext = Mockito.mock(WorkflowContext.class);
factory = new JQExpressionFactory();
+ modelFactory = ServiceLoader.load(WorkflowModelFactory.class).findFirst().orElseThrow();
}
@Test
void testArrayExpression() {
+
WorkflowValueResolver> expr =
factory.resolveMap(
ExpressionDescriptor.object(
@@ -50,7 +55,7 @@ void testArrayExpression() {
expr.apply(
workflowContext,
null,
- new JacksonModel(
+ modelFactory.fromAny(
JsonUtils.mapper()
.createObjectNode()
.set("array", JsonUtils.mapper().createArrayNode().add("John").add("Doe"))));
@@ -77,7 +82,7 @@ void testNesterMapAndArrayTogether() {
expr.apply(
workflowContext,
null,
- new JacksonModel(JsonUtils.mapper().createObjectNode().put("name", "John")));
+ modelFactory.fromAny(JsonUtils.mapper().createObjectNode().put("name", "John")));
Iterator iter = ((Collection) result.get("array")).iterator();
assertThat(iter.next()).isEqualTo("item1");
assertThat(iter.next()).isEqualTo("item2");
diff --git a/impl/persistence/jackson-marshaller/src/main/java/io/serverlessworkflow/impl/marshaller/jackson/JacksonModelMarshaller.java b/impl/persistence/jackson-marshaller/src/main/java/io/serverlessworkflow/impl/marshaller/jackson/JacksonModelMarshaller.java
index ee0933ff7..9d62db1f0 100644
--- a/impl/persistence/jackson-marshaller/src/main/java/io/serverlessworkflow/impl/marshaller/jackson/JacksonModelMarshaller.java
+++ b/impl/persistence/jackson-marshaller/src/main/java/io/serverlessworkflow/impl/marshaller/jackson/JacksonModelMarshaller.java
@@ -16,11 +16,11 @@
package io.serverlessworkflow.impl.marshaller.jackson;
import com.fasterxml.jackson.core.JsonProcessingException;
-import io.serverlessworkflow.impl.expressions.jq.JacksonModel;
import io.serverlessworkflow.impl.jackson.JsonUtils;
import io.serverlessworkflow.impl.marshaller.CustomObjectMarshaller;
import io.serverlessworkflow.impl.marshaller.WorkflowInputBuffer;
import io.serverlessworkflow.impl.marshaller.WorkflowOutputBuffer;
+import io.serverlessworkflow.impl.model.jackson.JacksonModel;
import java.io.IOException;
import java.io.UncheckedIOException;
diff --git a/impl/pom.xml b/impl/pom.xml
index f252b49bd..fe4f6bd32 100644
--- a/impl/pom.xml
+++ b/impl/pom.xml
@@ -57,6 +57,11 @@
serverlessworkflow-impl-jackson
${project.version}
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-jq
+ ${project.version}
+
net.thisptr
jackson-jq
@@ -98,5 +103,6 @@
jwt-impl
persistence
test
+ jq
\ No newline at end of file
diff --git a/impl/test/db-samples/running.db b/impl/test/db-samples/running.db
index 29adc703b..4ec62e7f7 100644
Binary files a/impl/test/db-samples/running.db and b/impl/test/db-samples/running.db differ
diff --git a/impl/test/db-samples/suspended.db b/impl/test/db-samples/suspended.db
index a174df9ed..939cd6abd 100644
Binary files a/impl/test/db-samples/suspended.db and b/impl/test/db-samples/suspended.db differ
diff --git a/impl/test/pom.xml b/impl/test/pom.xml
index f861f9c55..32bc56756 100644
--- a/impl/test/pom.xml
+++ b/impl/test/pom.xml
@@ -29,6 +29,10 @@
io.serverlessworkflow
serverlessworkflow-impl-http
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-jq
+
io.serverlessworkflow
serverlessworkflow-impl-jackson-jwt