You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/12/30 15:15:19 UTC

(camel) 22/25: CAMEL-19749: Add variables as concept to Camel

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

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

commit 64febd93924dc0d18ff9c930e4634271c36422e0
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Dec 30 14:18:08 2023 +0100

    CAMEL-19749: Add variables as concept to Camel
---
 .../api/management/mbean/CamelOpenMBeanTypes.java  | 13 ++++++
 .../mbean/ManagedVariableRepositoryMBean.java      |  5 +++
 .../mbean/ManagedVariableRepository.java           | 47 ++++++++++++++++++++++
 3 files changed, 65 insertions(+)

diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
index 93b01ebd60d..a89c5100773 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
+++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
@@ -295,4 +295,17 @@ public final class CamelOpenMBeanTypes {
                         SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING });
     }
 
+    public static CompositeType camelVariablesCompositeType() throws OpenDataException {
+        return new CompositeType(
+                "variables", "Variables",
+                new String[] { "id", "key", "className", "value" },
+                new String[] { "Id", "Key", "className", "Value" },
+                new OpenType[] { SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING });
+    }
+
+    public static TabularType camelVariablesTabularType() throws OpenDataException {
+        CompositeType ct = camelVariablesCompositeType();
+        return new TabularType("variables", "Variables", ct, new String[] { "id", "key" });
+    }
+
 }
diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java
index afcd503e8ee..8614f2b812c 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java
+++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java
@@ -21,6 +21,8 @@ import java.util.Set;
 import org.apache.camel.api.management.ManagedAttribute;
 import org.apache.camel.api.management.ManagedOperation;
 
+import javax.management.openmbean.TabularData;
+
 public interface ManagedVariableRepositoryMBean extends ManagedServiceMBean {
 
     @ManagedAttribute(description = "Repository ID")
@@ -35,4 +37,7 @@ public interface ManagedVariableRepositoryMBean extends ManagedServiceMBean {
     @ManagedOperation(description = "Variable names")
     Set<String> names();
 
+    @ManagedOperation(description = "List all variables")
+    TabularData variables();
+
 }
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedVariableRepository.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedVariableRepository.java
index eef3e4c8306..ecf42907f5e 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedVariableRepository.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedVariableRepository.java
@@ -16,14 +16,23 @@
  */
 package org.apache.camel.management.mbean;
 
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.api.management.mbean.CamelOpenMBeanTypes;
 import org.apache.camel.api.management.mbean.ManagedVariableRepositoryMBean;
 import org.apache.camel.spi.BrowsableVariableRepository;
 
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.CompositeDataSupport;
+import javax.management.openmbean.CompositeType;
+import javax.management.openmbean.TabularData;
+import javax.management.openmbean.TabularDataSupport;
+
 @ManagedResource(description = "Managed VariableRepository")
 public class ManagedVariableRepository extends ManagedService implements ManagedVariableRepositoryMBean {
     private final BrowsableVariableRepository variableRepository;
@@ -56,4 +65,42 @@ public class ManagedVariableRepository extends ManagedService implements Managed
     public Set<String> names() {
         return variableRepository.names().collect(Collectors.toSet());
     }
+
+    @Override
+    public TabularData variables() {
+        try {
+            final TabularData answer = new TabularDataSupport(CamelOpenMBeanTypes.camelVariablesTabularType());
+            final CompositeType type = CamelOpenMBeanTypes.camelVariablesCompositeType();
+
+            for (Map.Entry<String, Object> entry : variableRepository.getVariables().entrySet()) {
+                String key = entry.getKey();
+                String className = entry.getValue() != null ? entry.getValue().getClass().getName() : "";
+                String value = entry.getValue() != null ? entry.getValue().toString() : "";
+                if (value.length() > 1000) {
+                    value = value.substring(0, 1000) + "...";
+                }
+
+                CompositeData data = new CompositeDataSupport(
+                        type,
+                        new String[] {
+                                "id",
+                                "key",
+                                "className",
+                                "value",
+                        },
+                        new Object[] {
+                                getId(),
+                                key,
+                                className,
+                                value
+                        });
+                answer.put(data);
+            }
+
+            return answer;
+        } catch (Exception e) {
+            throw RuntimeCamelException.wrapRuntimeCamelException(e);
+        }
+    }
+
 }