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:13 UTC

(camel) 16/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 08c6d2e68b4517c5ff8e9d3f5afff4c73bf8921c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Dec 30 09:52:45 2023 +0100

    CAMEL-19749: Add variables as concept to Camel
---
 .../camel/spi/BrowsableVariableRepository.java}    | 36 +++++++++++++++++++---
 .../mbean/ManagedVariableRepositoryMBean.java      | 12 ++++++++
 .../management/JmxManagementLifecycleStrategy.java |  4 +--
 .../mbean/ManagedVariableRepository.java           | 26 +++++++++++++---
 .../camel/support/ExchangeVariableRepository.java  |  3 +-
 .../camel/support/GlobalVariableRepository.java    | 29 ++++++++++++++++-
 6 files changed, 97 insertions(+), 13 deletions(-)

diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java b/core/camel-api/src/main/java/org/apache/camel/spi/BrowsableVariableRepository.java
similarity index 56%
copy from core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java
copy to core/camel-api/src/main/java/org/apache/camel/spi/BrowsableVariableRepository.java
index d9e4ea37583..2de29f5881a 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/BrowsableVariableRepository.java
@@ -14,13 +14,39 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.api.management.mbean;
+package org.apache.camel.spi;
 
-import org.apache.camel.api.management.ManagedAttribute;
+import java.util.Map;
+import java.util.stream.Stream;
 
-public interface ManagedVariableRepositoryMBean extends ManagedServiceMBean {
+/**
+ * A {@link VariableRepository} that can browse the variables.
+ */
+public interface BrowsableVariableRepository extends VariableRepository {
+
+    /**
+     * Are there any variables in the repository.
+     */
+    boolean hasVariables();
+
+    /**
+     * Number of variables
+     */
+    int size();
+
+    /**
+     * The variable names
+     */
+    Stream<String> names();
+
+    /**
+     * Gets all the variables in a Map
+     */
+    Map<String, Object> getVariables();
 
-    @ManagedAttribute(description = "Repository ID")
-    String getId();
+    /**
+     * Removes all variables
+     */
+    void clear();
 
 }
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 d9e4ea37583..afcd503e8ee 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
@@ -16,11 +16,23 @@
  */
 package org.apache.camel.api.management.mbean;
 
+import java.util.Set;
+
 import org.apache.camel.api.management.ManagedAttribute;
+import org.apache.camel.api.management.ManagedOperation;
 
 public interface ManagedVariableRepositoryMBean extends ManagedServiceMBean {
 
     @ManagedAttribute(description = "Repository ID")
     String getId();
 
+    @ManagedAttribute(description = "Number of variables")
+    int getSize();
+
+    @ManagedOperation(description = "Removes all variables")
+    void clear();
+
+    @ManagedOperation(description = "Variable names")
+    Set<String> names();
+
 }
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java b/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java
index 83192a799f7..426ce12f53b 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java
@@ -84,6 +84,7 @@ import org.apache.camel.model.ProcessorDefinitionHelper;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.spi.BrowsableVariableRepository;
 import org.apache.camel.spi.ConsumerCache;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DumpRoutesStrategy;
@@ -107,7 +108,6 @@ import org.apache.camel.spi.TransformerRegistry;
 import org.apache.camel.spi.TypeConverterRegistry;
 import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.spi.ValidatorRegistry;
-import org.apache.camel.spi.VariableRepository;
 import org.apache.camel.support.TimerListenerManager;
 import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.throttling.ThrottlingExceptionRoutePolicy;
@@ -567,7 +567,7 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
             answer = new ManagedTransformerRegistry(context, transformerRegistry);
         } else if (service instanceof ValidatorRegistry<?> validatorRegistry) {
             answer = new ManagedValidatorRegistry(context, validatorRegistry);
-        } else if (service instanceof VariableRepository variableRepository) {
+        } else if (service instanceof BrowsableVariableRepository variableRepository) {
             answer = new ManagedVariableRepository(context, variableRepository);
         } else if (service instanceof CamelClusterService) {
             answer = getManagementObjectStrategy().getManagedObjectForClusterService(context, (CamelClusterService) service);
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 75c9569ff3a..eef3e4c8306 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,21 +16,24 @@
  */
 package org.apache.camel.management.mbean;
 
+import java.util.Set;
+import java.util.stream.Collectors;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.api.management.mbean.ManagedVariableRepositoryMBean;
-import org.apache.camel.spi.VariableRepository;
+import org.apache.camel.spi.BrowsableVariableRepository;
 
 @ManagedResource(description = "Managed VariableRepository")
 public class ManagedVariableRepository extends ManagedService implements ManagedVariableRepositoryMBean {
-    private final VariableRepository variableRepository;
+    private final BrowsableVariableRepository variableRepository;
 
-    public ManagedVariableRepository(CamelContext context, VariableRepository variableRepository) {
+    public ManagedVariableRepository(CamelContext context, BrowsableVariableRepository variableRepository) {
         super(context, variableRepository);
         this.variableRepository = variableRepository;
     }
 
-    public VariableRepository getVariableRepository() {
+    public BrowsableVariableRepository getVariableRepository() {
         return variableRepository;
     }
 
@@ -38,4 +41,19 @@ public class ManagedVariableRepository extends ManagedService implements Managed
     public String getId() {
         return variableRepository.getId();
     }
+
+    @Override
+    public int getSize() {
+        return variableRepository.size();
+    }
+
+    @Override
+    public void clear() {
+        variableRepository.clear();
+    }
+
+    @Override
+    public Set<String> names() {
+        return variableRepository.names().collect(Collectors.toSet());
+    }
 }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ExchangeVariableRepository.java b/core/camel-support/src/main/java/org/apache/camel/support/ExchangeVariableRepository.java
index e422155282f..3e0a3fd3192 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/ExchangeVariableRepository.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/ExchangeVariableRepository.java
@@ -22,13 +22,14 @@ import java.util.stream.Stream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.NonManagedService;
+import org.apache.camel.spi.BrowsableVariableRepository;
 import org.apache.camel.spi.VariableRepository;
 import org.apache.camel.support.service.ServiceSupport;
 
 /**
  * {@link VariableRepository} which is local per {@link Exchange} to hold request-scoped variables.
  */
-class ExchangeVariableRepository extends ServiceSupport implements VariableRepository, NonManagedService {
+class ExchangeVariableRepository extends ServiceSupport implements BrowsableVariableRepository, NonManagedService {
 
     private final Map<String, Object> variables = new ConcurrentHashMap<>(8);
 
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/GlobalVariableRepository.java b/core/camel-support/src/main/java/org/apache/camel/support/GlobalVariableRepository.java
index a026f759c8b..23bef38fc37 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/GlobalVariableRepository.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/GlobalVariableRepository.java
@@ -19,14 +19,16 @@ package org.apache.camel.support;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.stream.Stream;
 
+import org.apache.camel.spi.BrowsableVariableRepository;
 import org.apache.camel.spi.VariableRepository;
 import org.apache.camel.support.service.ServiceSupport;
 
 /**
  * Global {@link VariableRepository} which stores variables in-memory in a {@link Map}.
  */
-public class GlobalVariableRepository extends ServiceSupport implements VariableRepository {
+public class GlobalVariableRepository extends ServiceSupport implements BrowsableVariableRepository {
 
     private final ConcurrentMap<String, Object> variables = new ConcurrentHashMap<>();
 
@@ -55,4 +57,29 @@ public class GlobalVariableRepository extends ServiceSupport implements Variable
     public Object removeVariable(String name) {
         return variables.remove(name);
     }
+
+    @Override
+    public boolean hasVariables() {
+        return !variables.isEmpty();
+    }
+
+    @Override
+    public int size() {
+        return variables.size();
+    }
+
+    @Override
+    public Stream<String> names() {
+        return variables.keySet().stream();
+    }
+
+    @Override
+    public Map<String, Object> getVariables() {
+        return variables;
+    }
+
+    @Override
+    public void clear() {
+        variables.clear();
+    }
 }