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

davsclaus pushed a commit to branch ih
in repository https://gitbox.apache.org/repos/asf/camel.git

commit c3535d56a1bb6033292a16d5076fa8a95f0e2c6c
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Nov 23 14:26:04 2025 +0100

    CAMEL-22693: Mark up EIP and endpoint headers that are of importance to 
make tooling, trouble shooting and development easier.
---
 .../src/main/java/org/apache/camel/NamedNode.java  | 14 +++++++++++
 .../camel/spi/BacklogTracerEventMessage.java       | 10 ++++++++
 .../impl/debugger/DefaultBacklogDebugger.java      | 16 +++++++------
 .../debugger/DefaultBacklogTracerEventMessage.java | 25 +++++++++++++++++--
 .../camel/impl/engine/CamelInternalProcessor.java  | 28 +++++++++++++++++-----
 .../org/apache/camel/model/ChoiceDefinition.java   | 24 +++++++++++++++++++
 .../core/commands/action/CamelHistoryAction.java   |  8 +++++++
 7 files changed, 110 insertions(+), 15 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/NamedNode.java 
b/core/camel-api/src/main/java/org/apache/camel/NamedNode.java
index 85cdf53a7663..e34600e8f783 100644
--- a/core/camel-api/src/main/java/org/apache/camel/NamedNode.java
+++ b/core/camel-api/src/main/java/org/apache/camel/NamedNode.java
@@ -93,4 +93,18 @@ public interface NamedNode extends LineNumberAware {
         return null;
     }
 
+    /**
+     * Special methods for Choice EIP
+     */
+    default NamedNode findMatchingWhen(String id) {
+        return null;
+    }
+
+    /**
+     * Special methods for Choice EIP
+     */
+    default NamedNode findMatchingOtherwise(String id) {
+        return null;
+    }
+
 }
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracerEventMessage.java
 
b/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracerEventMessage.java
index e53d49d94d80..20aacafdd3d5 100644
--- 
a/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracerEventMessage.java
+++ 
b/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracerEventMessage.java
@@ -78,6 +78,16 @@ public interface BacklogTracerEventMessage {
      */
     String getToNodeParentId();
 
+    /**
+     * Special for choice where we want to know which when predicate was 
triggered
+     */
+    String getToNodeParentWhenId();
+
+    /**
+     * Special for choice where we want to know which when predicate was 
triggered
+     */
+    String getToNodeParentWhenLabel();
+
     /**
      * Node short name where the message is being routed to
      */
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
index b0d3eecf9998..fd20892131d3 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
@@ -885,8 +885,10 @@ public final class DefaultBacklogDebugger extends 
ServiceSupport implements Back
                 (nId, message) -> new DefaultBacklogTracerEventMessage(
                         camelContext,
                         false, false, message.getUid(), 
message.getTimestamp(), message.getLocation(), message.getRouteId(),
-                        message.getToNode(), message.getToNodeShortName(), 
message.getToNodeLabel(), message.getToNodeParentId(), message.getToNodeLevel(),
-                        message.getExchangeId(), 
message.getCorrelationExchangeId(),
+                        message.getToNode(), message.getToNodeParentId(), 
message.getToNodeParentWhenId(),
+                        message.getToNodeParentWhenLabel(),
+                        message.getToNodeShortName(), message.getToNodeLabel(),
+                        message.getToNodeLevel(), message.getExchangeId(), 
message.getCorrelationExchangeId(),
                         false, false,
                         dumpAsJSonObject(suspendedExchange.getExchange())));
     }
@@ -937,7 +939,7 @@ public final class DefaultBacklogDebugger extends 
ServiceSupport implements Back
             BacklogTracerEventMessage msg
                     = new DefaultBacklogTracerEventMessage(
                             camelContext,
-                            first, false, uid, timestamp, source, routeId, 
toNode, toNodeParentId,
+                            first, false, uid, timestamp, source, routeId, 
toNode, toNodeParentId, null, null,
                             toNodeShortName, toNodeLabel, level, exchangeId, 
correlationExchangeId,
                             false, false, data);
             suspendedBreakpointMessages.put(nodeId, msg);
@@ -1026,7 +1028,7 @@ public final class DefaultBacklogDebugger extends 
ServiceSupport implements Back
             BacklogTracerEventMessage msg
                     = new DefaultBacklogTracerEventMessage(
                             camelContext,
-                            false, false, uid, timestamp, source, routeId, 
toNode, toNodeParentId,
+                            false, false, uid, timestamp, source, routeId, 
toNode, toNodeParentId, null, null,
                             toNodeShortName, toNodeLabel, level,
                             exchangeId, correlationExchangeId,
                             false, false, data);
@@ -1135,9 +1137,9 @@ public final class DefaultBacklogDebugger extends 
ServiceSupport implements Back
             BacklogTracerEventMessage msg
                     = new DefaultBacklogTracerEventMessage(
                             camelContext,
-                        false, true, uid, timestamp, source, routeId, toNode, 
toNodeParentId,
-                        null, null, level, exchangeId, correlationExchangeId,
-                        false, false, data);
+                            false, true, uid, timestamp, source, routeId, 
toNode, toNodeParentId,
+                            null, null, null, null, level, exchangeId, 
correlationExchangeId,
+                            false, false, data);
             // we want to capture if there was an exception
             if (cause != null) {
                 msg.setException(cause);
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java
index 14c1dd84408d..a299be7b7918 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java
@@ -46,6 +46,8 @@ public final class DefaultBacklogTracerEventMessage 
implements BacklogTracerEven
     private final String routeId;
     private final String toNode;
     private final String toNodeParentId;
+    private final String toNodeParentWhenId;
+    private final String toNodeParentWhenLabel;
     private final String toNodeShortName;
     private final String toNodeLabel;
     private final int toNodeLevel;
@@ -70,8 +72,9 @@ public final class DefaultBacklogTracerEventMessage 
implements BacklogTracerEven
     private boolean done;
 
     public DefaultBacklogTracerEventMessage(CamelContext camelContext, boolean 
first, boolean last, long uid, long timestamp,
-                                            String location, String routeId, 
String toNode, String toNodeParentId, String toNodeShortName,
-                                            String toNodeLabel, int 
toNodeLevel, String exchangeId,
+                                            String location, String routeId, 
String toNode, String toNodeParentId,
+                                            String toNodeParentWhenId, String 
toNodeParentWhenLabel,
+                                            String toNodeShortName, String 
toNodeLabel, int toNodeLevel, String exchangeId,
                                             String correlationExchangeId,
                                             boolean rest, boolean template, 
JsonObject data) {
         this.camelContext = camelContext;
@@ -84,6 +87,8 @@ public final class DefaultBacklogTracerEventMessage 
implements BacklogTracerEven
         this.routeId = routeId;
         this.toNode = toNode;
         this.toNodeParentId = toNodeParentId;
+        this.toNodeParentWhenId = toNodeParentWhenId;
+        this.toNodeParentWhenLabel = toNodeParentWhenLabel;
         this.toNodeShortName = toNodeShortName;
         this.toNodeLabel = toNodeLabel;
         this.toNodeLevel = toNodeLevel;
@@ -153,6 +158,16 @@ public final class DefaultBacklogTracerEventMessage 
implements BacklogTracerEven
         return toNodeParentId;
     }
 
+    @Override
+    public String getToNodeParentWhenId() {
+        return toNodeParentWhenId;
+    }
+
+    @Override
+    public String getToNodeParentWhenLabel() {
+        return toNodeParentWhenLabel;
+    }
+
     @Override
     public String getToNodeShortName() {
         return toNodeShortName;
@@ -541,6 +556,12 @@ public final class DefaultBacklogTracerEventMessage 
implements BacklogTracerEven
         if (toNodeParentId != null) {
             jo.put("nodeParentId", toNodeParentId);
         }
+        if (toNodeParentWhenId != null) {
+            jo.put("nodeParentWhenId", toNodeParentWhenId);
+        }
+        if (toNodeParentWhenLabel != null) {
+            jo.put("nodeParentWhenLabel", toNodeParentWhenLabel);
+        }
         if (toNodeShortName != null) {
             jo.put("nodeShortName", toNodeShortName);
         }
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
index 77cc3546d467..c2b0e649127a 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
@@ -653,6 +653,20 @@ public class CamelInternalProcessor extends 
DelegateAsyncProcessor implements In
                 String toNode = processorDefinition.getId();
                 String toNodeParentId = processorDefinition.getParentId();
                 String toNodeShortName = processorDefinition.getShortName();
+                // special for choice as we want to know which when predicate 
that was triggered
+                String toNodeParentWhenId = null;
+                String toNodeParentWhenLabel = null;
+                NamedNode pn = processorDefinition.getParent();
+                if (pn != null && "choice".equals(pn.getShortName())) {
+                    NamedNode mn = 
pn.findMatchingWhen(processorDefinition.getId());
+                    if (mn == null) {
+                        mn = 
pn.findMatchingOtherwise(processorDefinition.getId());
+                    }
+                    if (mn != null) {
+                        toNodeParentWhenId = mn.getId();
+                        toNodeParentWhenLabel = mn.getLabel();
+                    }
+                }
                 String toNodeLabel = 
StringHelper.limitLength(processorDefinition.getLabel(), 50);
                 String exchangeId = exchange.getExchangeId();
                 String correlationExchangeId = 
exchange.getProperty(ExchangePropertyKey.CORRELATION_ID, String.class);
@@ -673,9 +687,10 @@ public class CamelInternalProcessor extends 
DelegateAsyncProcessor implements In
                     final long created = exchange.getClock().getCreated();
                     DefaultBacklogTracerEventMessage pseudoFirst = new 
DefaultBacklogTracerEventMessage(
                             camelContext,
-                            true, false, 
backlogTracer.incrementTraceCounter(), created, source, routeId, null, null, 
null, null,
-                            level,
-                            exchangeId, correlationExchangeId, rest, template, 
data);
+                            true, false, 
backlogTracer.incrementTraceCounter(), created, source, routeId, null, null, 
null,
+                            null,
+                            null, null,
+                            level, exchangeId, correlationExchangeId, rest, 
template, data);
                     if (exchange.getFromEndpoint() instanceof 
EndpointServiceLocation esl) {
                         pseudoFirst.setEndpointServiceUrl(esl.getServiceUrl());
                         
pseudoFirst.setEndpointServiceProtocol(esl.getServiceProtocol());
@@ -688,6 +703,7 @@ public class CamelInternalProcessor extends 
DelegateAsyncProcessor implements In
                 DefaultBacklogTracerEventMessage event = new 
DefaultBacklogTracerEventMessage(
                         camelContext,
                         false, false, backlogTracer.incrementTraceCounter(), 
timestamp, source, routeId, toNode, toNodeParentId,
+                        toNodeParentWhenId, toNodeParentWhenLabel,
                         toNodeShortName, toNodeLabel, level,
                         exchangeId, correlationExchangeId, rest, template, 
data);
                 backlogTracer.traceEvent(event);
@@ -716,9 +732,9 @@ public class CamelInternalProcessor extends 
DelegateAsyncProcessor implements In
                             backlogTracer.getBodyMaxChars());
                     DefaultBacklogTracerEventMessage pseudoLast = new 
DefaultBacklogTracerEventMessage(
                             camelContext,
-                            false, true, 
backlogTracer.incrementTraceCounter(), created, source, routeId, null, null,  
null, null,
-                            level,
-                            exchangeId, correlationExchangeId, rest, template, 
data);
+                            false, true, 
backlogTracer.incrementTraceCounter(), created, source, routeId, null, null, 
null,
+                            null, null, null,
+                            level, exchangeId, correlationExchangeId, rest, 
template, data);
                     backlogTracer.traceEvent(pseudoLast);
                     doneProcessing(exchange, pseudoLast);
                     doneProcessing(exchange, pseudoFirst);
diff --git 
a/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java
 
b/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java
index 64e2dd5abc7a..e26e5b5227de 100644
--- 
a/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java
+++ 
b/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java
@@ -233,6 +233,30 @@ public class ChoiceDefinition extends 
NoOutputDefinition<ChoiceDefinition> {
         return answer;
     }
 
+    @Override
+    public WhenDefinition findMatchingWhen(String id) {
+        for (WhenDefinition when : whenClauses) {
+            for (ProcessorDefinition<?> out : when.getOutputs()) {
+                if (out.getId().equals(id)) {
+                    return when;
+                }
+            }
+        }
+        return null;
+    }
+
+    public OtherwiseDefinition findMatchingOtherwise(String id) {
+        if (otherwise != null) {
+            for (ProcessorDefinition<?> out : otherwise.getOutputs()) {
+                if (out.getId().equals(id)) {
+                    return otherwise;
+                }
+            }
+            return otherwise;
+        }
+        return null;
+    }
+
     // Properties
     // 
-------------------------------------------------------------------------
 
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHistoryAction.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHistoryAction.java
index 2cc32a804227..ded96c12981d 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHistoryAction.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHistoryAction.java
@@ -243,6 +243,8 @@ public class CamelHistoryAction extends ActionWatchCommand {
                     row.routeId = jo.getString("routeId");
                     row.nodeId = jo.getString("nodeId");
                     row.nodeParentId = jo.getString("nodeParentId");
+                    row.nodeParentWhenId = jo.getString("nodeParentWhenId");
+                    row.nodeParentWhenLabel = 
jo.getString("nodeParentWhenLabel");
                     row.nodeShortName = jo.getString("nodeShortName");
                     row.nodeLabel = jo.getString("nodeLabel");
                     if (mask) {
@@ -317,6 +319,10 @@ public class CamelHistoryAction extends ActionWatchCommand 
{
                 } else {
                     r.summary = "Filter: false";
                 }
+            } else if ("choice".equals(r.nodeShortName)) {
+                if (next != null && r.nodeId != null && 
r.nodeId.equals(next.nodeParentId)) {
+                    r.summary = next.nodeParentWhenLabel;
+                }
             } else if ("split".equals(r.nodeShortName)) {
                 if (next != null && r.nodeId != null && 
r.nodeId.equals(next.nodeParentId)) {
                     var map = extractEipModel("split", next);
@@ -401,6 +407,8 @@ public class CamelHistoryAction extends ActionWatchCommand {
         String routeId;
         String nodeId;
         String nodeParentId;
+        String nodeParentWhenId;
+        String nodeParentWhenLabel;
         String nodeShortName;
         String nodeLabel;
         int nodeLevel;

Reply via email to