Skip to content

Commit ac51797

Browse files
committed
Ensure not workflowmodel is returned within a Map or Collection
1 parent f08c840 commit ac51797

File tree

3 files changed

+23
-7
lines changed

3 files changed

+23
-7
lines changed

experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModel.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@
2121
import java.util.Collection;
2222
import java.util.Collections;
2323
import java.util.Map;
24+
import java.util.Map.Entry;
2425
import java.util.Optional;
2526
import java.util.function.BiConsumer;
27+
import java.util.stream.Collectors;
2628

27-
public class JavaModel implements WorkflowModel {
29+
class JavaModel implements WorkflowModel {
2830

2931
private Object object;
3032

@@ -33,7 +35,7 @@ public class JavaModel implements WorkflowModel {
3335
static final JavaModel NullModel = new JavaModel(null);
3436

3537
JavaModel(Object object) {
36-
this.object = object;
38+
this.object = asJavaObject(object);
3739
}
3840

3941
@Override
@@ -89,6 +91,20 @@ public Object asJavaObject() {
8991
return object;
9092
}
9193

94+
static Object asJavaObject(Object object) {
95+
if (object instanceof WorkflowModel model) {
96+
return model.asJavaObject();
97+
} else if (object instanceof Map map) {
98+
return ((Map<String, Object>) map)
99+
.entrySet().stream()
100+
.collect(Collectors.toMap(Entry::getKey, e -> asJavaObject(e.getValue())));
101+
} else if (object instanceof Collection col) {
102+
return col.stream().map(JavaModel::asJavaObject).collect(Collectors.toList());
103+
} else {
104+
return object;
105+
}
106+
}
107+
92108
@Override
93109
public Object asIs() {
94110
return object;

experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModelCollection.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import java.util.Iterator;
2323
import java.util.Optional;
2424

25-
public class JavaModelCollection implements Collection<WorkflowModel>, WorkflowModelCollection {
25+
class JavaModelCollection implements Collection<WorkflowModel>, WorkflowModelCollection {
2626

2727
private final Collection object;
2828

@@ -31,7 +31,7 @@ public class JavaModelCollection implements Collection<WorkflowModel>, WorkflowM
3131
}
3232

3333
JavaModelCollection(Collection<?> object) {
34-
this.object = object;
34+
this.object = (Collection) JavaModel.asJavaObject(object);
3535
}
3636

3737
@Override
@@ -86,12 +86,12 @@ public <T> T[] toArray(T[] a) {
8686

8787
@Override
8888
public boolean add(WorkflowModel e) {
89-
return object.add(e.asIs());
89+
return object.add(e.asJavaObject());
9090
}
9191

9292
@Override
9393
public boolean remove(Object o) {
94-
return object.remove(((WorkflowModel) o).asIs());
94+
return object.remove(((WorkflowModel) o).asJavaObject());
9595
}
9696

9797
@Override

experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/JavaModelFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import java.time.OffsetDateTime;
2424
import java.util.Map;
2525

26-
public class JavaModelFactory implements WorkflowModelFactory {
26+
class JavaModelFactory implements WorkflowModelFactory {
2727

2828
@Override
2929
public WorkflowModel combine(Map<String, WorkflowModel> workflowVariables) {

0 commit comments

Comments
 (0)