make better subworkflow name and store on tag for easier navigation
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
index 950713a..52086f4 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
@@ -479,6 +479,7 @@
protected String applicationId;
protected String entityId;
protected String workflowId;
+ protected String workflowName;
protected Integer stepIndex;
// TODO handle these in the UI:
@@ -536,6 +537,7 @@
t.applicationId = workflow.getEntity().getApplicationId();
t.entityId = workflow.getEntity().getId();
t.workflowId = workflow.getWorkflowId();
+ t.workflowName = workflow.getName();
return t;
}
public static WorkflowTaskTag tagForWorkflow(WorkflowStepInstanceExecutionContext workflowStep) {
diff --git a/core/src/main/java/org/apache/brooklyn/core/workflow/steps/CustomWorkflowStep.java b/core/src/main/java/org/apache/brooklyn/core/workflow/steps/CustomWorkflowStep.java
index ddfc6d9..d61cf7b 100644
--- a/core/src/main/java/org/apache/brooklyn/core/workflow/steps/CustomWorkflowStep.java
+++ b/core/src/main/java/org/apache/brooklyn/core/workflow/steps/CustomWorkflowStep.java
@@ -18,6 +18,15 @@
*/
package org.apache.brooklyn.core.workflow.steps;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+import javax.annotation.Nonnull;
+
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -38,7 +47,13 @@
import org.apache.brooklyn.core.resolve.jackson.BeanWithTypeUtils;
import org.apache.brooklyn.core.resolve.jackson.JsonPassThroughDeserializer;
import org.apache.brooklyn.core.typereg.RegisteredTypes;
-import org.apache.brooklyn.core.workflow.*;
+import org.apache.brooklyn.core.workflow.WorkflowCommonConfig;
+import org.apache.brooklyn.core.workflow.WorkflowExecutionContext;
+import org.apache.brooklyn.core.workflow.WorkflowExpressionResolution;
+import org.apache.brooklyn.core.workflow.WorkflowReplayUtils;
+import org.apache.brooklyn.core.workflow.WorkflowStepDefinition;
+import org.apache.brooklyn.core.workflow.WorkflowStepInstanceExecutionContext;
+import org.apache.brooklyn.core.workflow.WorkflowStepResolution;
import org.apache.brooklyn.core.workflow.utils.WorkflowConcurrencyParser;
import org.apache.brooklyn.core.workflow.utils.WorkflowRetentionParser;
import org.apache.brooklyn.util.collections.MutableList;
@@ -56,16 +71,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.annotation.Nonnull;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Supplier;
-import java.util.stream.Collectors;
-
public class CustomWorkflowStep extends WorkflowStepDefinition implements WorkflowStepDefinition.WorkflowStepDefinitionWithSpecialDeserialization, WorkflowStepDefinition.WorkflowStepDefinitionWithSubWorkflow {
private static final Logger LOG = LoggerFactory.getLogger(CustomWorkflowStep.class);
@@ -136,7 +141,7 @@
if (SHORTHAND_TYPE_NAME_DEFAULT.equals(shorthandTypeName)) {
shorthand = WORKFLOW_SETTING_SHORTHAND;
} else {
- throw new IllegalStateException("Shorthand not supported for " + getNameOrDefault());
+ throw new IllegalStateException("Shorthand not supported for " + getStepTypeName());
}
}
if (input==null) input = MutableMap.of();
@@ -258,7 +263,6 @@
boolean wasList = targetR instanceof Iterable;
targetR = checkTarget(targetR);
-
Map reducingV = initializeReducingVariables(context, reducing);
AtomicInteger index = new AtomicInteger(0);
@@ -504,11 +508,36 @@
throw new IllegalArgumentException("Invalid target '"+target+"'; if a string, it must match a known keyword ('children' or 'members') or pattern (a range, '1..10')");
}
- public String getNameOrDefault() {
- return getNameOrDefault(() -> Strings.isNonBlank(shorthandTypeName) ? shorthandTypeName : "custom step");
+ private static final String FALLBACK_STEP_TYPE_NAME = "custom step";
+ @JsonIgnore
+ protected String getStepTypeName() {
+ return Strings.isNonBlank(shorthandTypeName) ? shorthandTypeName : FALLBACK_STEP_TYPE_NAME;
}
- public String getNameOrDefault(Supplier<String> defaultSupplier) {
- return Strings.isNonBlank(getName()) ? getName() : defaultSupplier==null ? null : defaultSupplier.get();
+ public String getSubworkflowName(Object target, Integer targetIndexOrNullIfNotList) {
+ // old subworkflow name
+// String indexName = targetIndexOrNull==null ? "" : " "+(targetIndexOrNull+1);
+// String name = getName();
+// name = (name == null ? "Sub-workflow" + indexName : "Sub-workflow"+indexName+" for " + name);
+// String targetString = target==null ? null : target.toString();
+// if (targetString!=null && targetString.length()<60 && !Strings.isMultiLine(targetString)) name += " ("+targetString+")";
+// return name;
+
+ // now:
+ String name = getName();
+ if (Strings.isBlank(name) || name.length()>30) name = getStepTypeName();
+ String targetString = target==null ? null :
+ (target instanceof BrooklynObject) ? ((BrooklynObject)target).getDisplayName()
+ : target.toString();
+ if (targetIndexOrNullIfNotList!=null) {
+ name = name + " ("+(targetIndexOrNullIfNotList+1)+")";
+ }
+ if (targetString!=null && targetString.length()<30) {
+ name = name + ": "+targetString;
+ } else if (targetIndexOrNullIfNotList==null) {
+ // need to say something to distinguish from parent
+ name = name + " (sub-workflow)";
+ }
+ return name;
}
@Override
@@ -572,14 +601,10 @@
return typeBestGuess!=null && !shorthandDefault.equals(typeBestGuess) && !clazz.getName().equals(typeBestGuess);
}
- protected WorkflowExecutionContext newWorkflow(WorkflowStepInstanceExecutionContext context, Object target, Integer targetIndexOrNull) {
+ protected WorkflowExecutionContext newWorkflow(WorkflowStepInstanceExecutionContext context, Object target, Integer targetIndexOrNullIfNotList) {
if (steps==null) throw new IllegalArgumentException("Cannot make new workflow with no steps");
- String indexName = targetIndexOrNull==null ? "" : " "+(targetIndexOrNull+1);
- String name = getNameOrDefault(null);
- name = (name == null ? "Sub-workflow" + indexName : "Sub-workflow"+indexName+" for " + name);
- String targetString = target==null ? null : target.toString();
- if (targetString!=null && targetString.length()<60 && !Strings.isMultiLine(targetString)) name += " ("+targetString+")";
+ String name = getSubworkflowName(target, targetIndexOrNullIfNotList);
WorkflowExecutionContext nestedWorkflowContext = WorkflowExecutionContext.newInstanceUnpersistedWithParent(
target instanceof BrooklynObject ? (BrooklynObject) target : context.getEntity(), context.getWorkflowExectionContext(),
@@ -590,7 +615,7 @@
String tivn = context.resolve(WorkflowExpressionResolution.WorkflowExpressionStage.STEP_INPUT, target_index_var_name, String.class);
- if (targetIndexOrNull!=null) nestedWorkflowContext.updateWorkflowScratchVariable(tivn == null ? TARGET_INDEX_VAR_NAME_DEFAULT : tivn, targetIndexOrNull);
+ if (targetIndexOrNullIfNotList!=null) nestedWorkflowContext.updateWorkflowScratchVariable(tivn == null ? TARGET_INDEX_VAR_NAME_DEFAULT : tivn, targetIndexOrNullIfNotList);
initializeSubWorkflowForTarget(context, target, nestedWorkflowContext);
return nestedWorkflowContext;