From d96d5889e58fc6fe80878d354697bd538b698f44 Mon Sep 17 00:00:00 2001 From: Filip Hrisafov Date: Wed, 18 Dec 2024 17:27:58 +0100 Subject: [PATCH] Expose the variable names on the VariableContainer --- .../ReadOnlyDelegatePlanItemInstanceImpl.java | 6 ++++++ .../api/variable/EmptyVariableContainer.java | 8 ++++++++ .../engine/api/variable/VariableContainer.java | 4 ++++ .../engine/impl/el/VariableContainerWrapper.java | 8 ++++++++ .../variable/MapDelegateVariableContainer.java | 15 +++++++++++++++ .../engine/impl/bpmn/helper/ErrorPropagation.java | 14 ++++++++++++++ .../delegate/ReadOnlyDelegateExecutionImpl.java | 6 ++++++ 7 files changed, 61 insertions(+) diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delegate/ReadOnlyDelegatePlanItemInstanceImpl.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delegate/ReadOnlyDelegatePlanItemInstanceImpl.java index 7ba5845e87f..1604a4bf0a6 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delegate/ReadOnlyDelegatePlanItemInstanceImpl.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delegate/ReadOnlyDelegatePlanItemInstanceImpl.java @@ -15,6 +15,7 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.StringJoiner; import org.flowable.cmmn.api.delegate.DelegatePlanItemInstance; @@ -284,6 +285,11 @@ public String getTenantId() { return tenantId; } + @Override + public Set getVariableNames() { + return variables.keySet(); + } + @Override public Map getPlanItemInstanceLocalVariables() { return localVariables; diff --git a/modules/flowable-engine-common-api/src/main/java/org/flowable/common/engine/api/variable/EmptyVariableContainer.java b/modules/flowable-engine-common-api/src/main/java/org/flowable/common/engine/api/variable/EmptyVariableContainer.java index 7061ec884ef..13f9c945850 100644 --- a/modules/flowable-engine-common-api/src/main/java/org/flowable/common/engine/api/variable/EmptyVariableContainer.java +++ b/modules/flowable-engine-common-api/src/main/java/org/flowable/common/engine/api/variable/EmptyVariableContainer.java @@ -12,6 +12,9 @@ */ package org.flowable.common.engine.api.variable; +import java.util.Collections; +import java.util.Set; + /** * @author Arthur Hupka-Merle */ @@ -43,4 +46,9 @@ public void setTransientVariable(String variableName, Object variableValue) { public String getTenantId() { return null; } + + @Override + public Set getVariableNames() { + return Collections.emptySet(); + } } diff --git a/modules/flowable-engine-common-api/src/main/java/org/flowable/common/engine/api/variable/VariableContainer.java b/modules/flowable-engine-common-api/src/main/java/org/flowable/common/engine/api/variable/VariableContainer.java index 83c6d132a24..c97c6e9ae78 100644 --- a/modules/flowable-engine-common-api/src/main/java/org/flowable/common/engine/api/variable/VariableContainer.java +++ b/modules/flowable-engine-common-api/src/main/java/org/flowable/common/engine/api/variable/VariableContainer.java @@ -12,6 +12,8 @@ */ package org.flowable.common.engine.api.variable; +import java.util.Set; + /** * @author Joram Barrez */ @@ -34,4 +36,6 @@ public static VariableContainer empty(){ String getTenantId(); + Set getVariableNames(); + } diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/VariableContainerWrapper.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/VariableContainerWrapper.java index 54d996c88fe..1f06c5dda35 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/VariableContainerWrapper.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/VariableContainerWrapper.java @@ -12,8 +12,11 @@ */ package org.flowable.common.engine.impl.el; +import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.Set; import java.util.StringJoiner; import org.flowable.common.engine.api.variable.VariableContainer; @@ -79,6 +82,11 @@ public void setTenantId(String tenantId) { this.tenantId = tenantId; } + @Override + public Set getVariableNames() { + return variables.keySet(); + } + @Override public String toString() { return new StringJoiner(", ", getClass().getSimpleName() + "[", "]") diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/variable/MapDelegateVariableContainer.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/variable/MapDelegateVariableContainer.java index f4b129b87c7..e768053c2a5 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/variable/MapDelegateVariableContainer.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/variable/MapDelegateVariableContainer.java @@ -13,7 +13,9 @@ package org.flowable.common.engine.impl.variable; import java.util.HashMap; +import java.util.LinkedHashSet; import java.util.Map; +import java.util.Set; import java.util.StringJoiner; import org.flowable.common.engine.api.variable.VariableContainer; @@ -147,6 +149,19 @@ public String getTenantId() { return this.delegate.getTenantId(); } + @Override + public Set getVariableNames() { + if (delegate == null || delegate == VariableContainer.empty()) { + return this.transientVariables.keySet(); + } + if (transientVariables.isEmpty()) { + return delegate.getVariableNames(); + } + Set keys = new LinkedHashSet<>(delegate.getVariableNames()); + keys.addAll(transientVariables.keySet()); + return keys; + } + @Override public String toString() { return new StringJoiner(", ", getClass().getSimpleName() + "[", "]") diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/ErrorPropagation.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/ErrorPropagation.java index fb446a0549c..4e98afbd9f4 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/ErrorPropagation.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/ErrorPropagation.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -623,6 +624,19 @@ public String getTenantId() { return tenantId; } + @Override + public Set getVariableNames() { + if (additionalDataContainer == null) { + return Set.of(ERROR_CODE_VARIABLE_NAME, ERROR_VARIABLE_NAME, ERROR_MESSAGE_VARIABLE_NAME); + } + + Set variableKeys = new LinkedHashSet<>(additionalDataContainer.getVariableNames()); + variableKeys.add(ERROR_CODE_VARIABLE_NAME); + variableKeys.add(ERROR_VARIABLE_NAME); + variableKeys.add(ERROR_MESSAGE_VARIABLE_NAME); + return variableKeys; + } + @Override public String toString() { return new StringJoiner(", ", getClass().getSimpleName() + "[", "]") diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delegate/ReadOnlyDelegateExecutionImpl.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delegate/ReadOnlyDelegateExecutionImpl.java index da3076647d2..afebdfb6968 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delegate/ReadOnlyDelegateExecutionImpl.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delegate/ReadOnlyDelegateExecutionImpl.java @@ -14,6 +14,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.StringJoiner; import org.flowable.bpmn.model.FlowElement; @@ -174,6 +175,11 @@ public boolean hasVariable(String variableName) { return variables.containsKey(variableName); } + @Override + public Set getVariableNames() { + return variables.keySet(); + } + @Override public String toString() { return new StringJoiner(", ", getClass().getSimpleName() + "[", "]")