diff --git a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModel.java b/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModel.java index 0e4b4df1..00481d54 100644 --- a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModel.java +++ b/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModel.java @@ -21,10 +21,12 @@ import java.util.Collection; import java.util.Collections; import java.util.Map; +import java.util.Map.Entry; import java.util.Optional; import java.util.function.BiConsumer; +import java.util.stream.Collectors; -public class JavaModel implements WorkflowModel { +class JavaModel implements WorkflowModel { private Object object; @@ -33,7 +35,7 @@ public class JavaModel implements WorkflowModel { static final JavaModel NullModel = new JavaModel(null); JavaModel(Object object) { - this.object = object; + this.object = asJavaObject(object); } @Override @@ -89,6 +91,20 @@ public Object asJavaObject() { return object; } + static Object asJavaObject(Object object) { + if (object instanceof WorkflowModel model) { + return model.asJavaObject(); + } else if (object instanceof Map map) { + return ((Map) map) + .entrySet().stream() + .collect(Collectors.toMap(Entry::getKey, e -> asJavaObject(e.getValue()))); + } else if (object instanceof Collection col) { + return col.stream().map(JavaModel::asJavaObject).collect(Collectors.toList()); + } else { + return object; + } + } + @Override public Object asIs() { return object; diff --git a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModelCollection.java b/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModelCollection.java index 065d8832..501cc287 100644 --- a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModelCollection.java +++ b/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModelCollection.java @@ -22,7 +22,7 @@ import java.util.Iterator; import java.util.Optional; -public class JavaModelCollection implements Collection, WorkflowModelCollection { +class JavaModelCollection implements Collection, WorkflowModelCollection { private final Collection object; @@ -31,7 +31,7 @@ public class JavaModelCollection implements Collection, WorkflowM } JavaModelCollection(Collection object) { - this.object = object; + this.object = (Collection) JavaModel.asJavaObject(object); } @Override @@ -86,12 +86,12 @@ public T[] toArray(T[] a) { @Override public boolean add(WorkflowModel e) { - return object.add(e.asIs()); + return object.add(e.asJavaObject()); } @Override public boolean remove(Object o) { - return object.remove(((WorkflowModel) o).asIs()); + return object.remove(((WorkflowModel) o).asJavaObject()); } @Override diff --git a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModelFactory.java b/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModelFactory.java index 6034d33a..6ca4cc06 100644 --- a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModelFactory.java +++ b/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModelFactory.java @@ -23,7 +23,7 @@ import java.time.OffsetDateTime; import java.util.Map; -public class JavaModelFactory implements WorkflowModelFactory { +class JavaModelFactory implements WorkflowModelFactory { @Override public WorkflowModel combine(Map workflowVariables) {