This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit 1a2c5510b6f7253169405cb5e87ee0fee68a41aa
Author: Alex Heneveld <[email protected]>
AuthorDate: Mon Mar 18 08:49:54 2024 +0000

    make better subworkflow name and store on tag for easier navigation
---
 .../brooklyn/core/mgmt/BrooklynTaskTags.java       |  2 +
 .../core/workflow/steps/CustomWorkflowStep.java    | 75 ++++++++++++++--------
 2 files changed, 52 insertions(+), 25 deletions(-)

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 950713a6d1..52086f44c3 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 @@ public class BrooklynTaskTags extends TaskTags {
         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 @@ public class BrooklynTaskTags extends TaskTags {
         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 ddfc6d9f17..d61cf7bd8a 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.mgmt.BrooklynTaskTags;
 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.apache.commons.lang3.tuple.Pair;
 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 @@ public class CustomWorkflowStep extends 
WorkflowStepDefinition implements Workfl
             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 @@ public class CustomWorkflowStep extends 
WorkflowStepDefinition implements Workfl
         boolean wasList = targetR instanceof Iterable;
 
         targetR = checkTarget(targetR);
-
         Map reducingV = initializeReducingVariables(context, reducing);
 
         AtomicInteger index = new AtomicInteger(0);
@@ -504,11 +508,36 @@ public class CustomWorkflowStep extends 
WorkflowStepDefinition implements Workfl
         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");
-    }
-    public String getNameOrDefault(Supplier<String> defaultSupplier) {
-        return Strings.isNonBlank(getName()) ? getName() : 
defaultSupplier==null ? null : defaultSupplier.get();
+    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 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 @@ public class CustomWorkflowStep extends 
WorkflowStepDefinition implements Workfl
         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 @@ public class CustomWorkflowStep extends 
WorkflowStepDefinition implements Workfl
 
 
         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;

Reply via email to