You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ji...@apache.org on 2023/04/24 14:57:00 UTC

[camel-quarkus] 04/33: Add support of expressions referring an external resource

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

jiriondrusek pushed a commit to branch camel-main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit c72cd51e8931b9394433bb919f147835e0224415
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Thu Mar 23 19:39:57 2023 +0100

    Add support of expressions referring an external resource
---
 .../language/deployment/ExpressionBuildItem.java   | 26 +++++++++++++++++++++-
 .../deployment/LanguageSupportProcessor.java       | 10 ++++++---
 .../language/deployment/ScriptBuildItem.java       |  8 ++++++-
 .../language/deployment/dm/DryModeLanguage.java    | 17 ++++++++------
 .../deployment/dm/DryModeLanguageResolver.java     |  4 ++--
 .../deployment/dm/DryModeScriptingLanguage.java    |  7 +++---
 .../language/deployment/dm/ExpressionHolder.java   | 12 +++++++---
 .../language/deployment/dm/ScriptHolder.java       |  8 ++++++-
 8 files changed, 71 insertions(+), 21 deletions(-)

diff --git a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/ExpressionBuildItem.java b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/ExpressionBuildItem.java
index bbb5242308..b3dc72b3fa 100644
--- a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/ExpressionBuildItem.java
+++ b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/ExpressionBuildItem.java
@@ -26,28 +26,52 @@ public final class ExpressionBuildItem extends MultiBuildItem {
 
     final String language;
     final String expression;
+    final String loadedExpression;
     final boolean predicate;
     final Object[] properties;
 
-    public ExpressionBuildItem(String language, String expression, Object[] properties, boolean predicate) {
+    public ExpressionBuildItem(String language, String expression, String loadedExpression, Object[] properties,
+            boolean predicate) {
         this.language = language;
         this.expression = expression;
+        this.loadedExpression = loadedExpression;
         this.properties = properties;
         this.predicate = predicate;
     }
 
+    /**
+     * @return the name of the language in which the expression is written.
+     */
     public String getLanguage() {
         return language;
     }
 
+    /**
+     * @return the original content of the extracted expression.
+     */
     public String getExpression() {
         return expression;
     }
 
+    /**
+     * @return the content of the expression after being loaded in case the given expression is referring to an external
+     *         resource by using the syntax
+     *         <tt>resource:scheme:uri<tt>.
+     */
+    public String getLoadedExpression() {
+        return loadedExpression;
+    }
+
+    /**
+     * @return {@code true} if the expression is a predicate, {@code false} otherwise.
+     */
     public boolean isPredicate() {
         return predicate;
     }
 
+    /**
+     * @return the properties provided to evaluate the expression.
+     */
     public Object[] getProperties() {
         return properties;
     }
diff --git a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/LanguageSupportProcessor.java b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/LanguageSupportProcessor.java
index 3a5f88eaf0..7f95d71d40 100644
--- a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/LanguageSupportProcessor.java
+++ b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/LanguageSupportProcessor.java
@@ -64,13 +64,17 @@ class LanguageSupportProcessor {
                 for (DryModeLanguage language : main.getLanguages()) {
                     final String name = language.getName();
                     for (ExpressionHolder holder : language.getPredicates()) {
-                        expressions.produce(new ExpressionBuildItem(name, holder.getContent(), holder.getProperties(), true));
+                        expressions.produce(new ExpressionBuildItem(name, holder.getContent(), holder.getLoadedContent(),
+                                holder.getProperties(), true));
                     }
                     for (ExpressionHolder holder : language.getExpressions()) {
-                        expressions.produce(new ExpressionBuildItem(name, holder.getContent(), holder.getProperties(), false));
+                        expressions.produce(new ExpressionBuildItem(name, holder.getContent(), holder.getLoadedContent(),
+                                holder.getProperties(), false));
                     }
                     for (ScriptHolder script : language.getScripts()) {
-                        scripts.produce(new ScriptBuildItem(name, script.getContent(), script.getBindings()));
+                        scripts.produce(
+                                new ScriptBuildItem(name, script.getContent(), script.getLoadedContent(),
+                                        script.getBindings()));
                     }
                 }
                 return new ExpressionExtractionResultBuildItem(true);
diff --git a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/ScriptBuildItem.java b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/ScriptBuildItem.java
index da3c862560..0e3119e0a2 100644
--- a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/ScriptBuildItem.java
+++ b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/ScriptBuildItem.java
@@ -28,11 +28,13 @@ public final class ScriptBuildItem extends MultiBuildItem {
 
     final String language;
     final String content;
+    final String loadedContent;
     final Map<String, Object> bindings;
 
-    public ScriptBuildItem(String language, String content, Map<String, Object> bindings) {
+    public ScriptBuildItem(String language, String content, String loadedContent, Map<String, Object> bindings) {
         this.language = language;
         this.content = content;
+        this.loadedContent = loadedContent;
         this.bindings = bindings;
     }
 
@@ -44,6 +46,10 @@ public final class ScriptBuildItem extends MultiBuildItem {
         return content;
     }
 
+    public String getLoadedContent() {
+        return loadedContent;
+    }
+
     public Map<String, Object> getBindings() {
         return bindings;
     }
diff --git a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/DryModeLanguage.java b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/DryModeLanguage.java
index e74a699cc2..f8e0e38e72 100644
--- a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/DryModeLanguage.java
+++ b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/DryModeLanguage.java
@@ -24,21 +24,22 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
-import org.apache.camel.spi.Language;
+import org.apache.camel.support.LanguageSupport;
 
 /**
  * {@code DryModeLanguage} is a mock language meant to collect all the expressions and predicates that are registered
  * for a specific language.
  */
-public class DryModeLanguage implements Language {
+public class DryModeLanguage extends LanguageSupport {
 
     private final String name;
     private final Predicate defaultPredicate = new DryModePredicate();
     private final Expression defaultExpression = new DryModeExpression();
     private final Map<Boolean, Set<ExpressionHolder>> expressions = new ConcurrentHashMap<>();
 
-    public DryModeLanguage(String name) {
+    DryModeLanguage(CamelContext camelContext, String name) {
         this.name = name;
+        this.setCamelContext(camelContext);
     }
 
     public String getName() {
@@ -59,27 +60,29 @@ public class DryModeLanguage implements Language {
 
     @Override
     public Predicate createPredicate(String expression) {
-        expressions.computeIfAbsent(Boolean.TRUE, mode -> ConcurrentHashMap.newKeySet()).add(new ExpressionHolder(expression));
+        expressions.computeIfAbsent(Boolean.TRUE, mode -> ConcurrentHashMap.newKeySet())
+                .add(new ExpressionHolder(expression, loadResource(expression)));
         return defaultPredicate;
     }
 
     @Override
     public Expression createExpression(String expression) {
-        expressions.computeIfAbsent(Boolean.FALSE, mode -> ConcurrentHashMap.newKeySet()).add(new ExpressionHolder(expression));
+        expressions.computeIfAbsent(Boolean.FALSE, mode -> ConcurrentHashMap.newKeySet())
+                .add(new ExpressionHolder(expression, loadResource(expression)));
         return defaultExpression;
     }
 
     @Override
     public Predicate createPredicate(String expression, Object[] properties) {
         expressions.computeIfAbsent(Boolean.TRUE, mode -> ConcurrentHashMap.newKeySet())
-                .add(new ExpressionHolder(expression, properties));
+                .add(new ExpressionHolder(expression, loadResource(expression), properties));
         return defaultPredicate;
     }
 
     @Override
     public Expression createExpression(String expression, Object[] properties) {
         expressions.computeIfAbsent(Boolean.FALSE, mode -> ConcurrentHashMap.newKeySet())
-                .add(new ExpressionHolder(expression, properties));
+                .add(new ExpressionHolder(expression, loadResource(expression), properties));
         return defaultExpression;
     }
 
diff --git a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/DryModeLanguageResolver.java b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/DryModeLanguageResolver.java
index 1d2e1bfccb..b2443fd91c 100644
--- a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/DryModeLanguageResolver.java
+++ b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/DryModeLanguageResolver.java
@@ -38,9 +38,9 @@ class DryModeLanguageResolver extends DefaultLanguageResolver {
     public Language resolveLanguage(String name, CamelContext context) throws NoSuchLanguageException {
         final Language language = super.resolveLanguage(name, context);
         if (language instanceof ScriptingLanguage) {
-            return languages.computeIfAbsent(name, DryModeScriptingLanguage::new);
+            return languages.computeIfAbsent(name, n -> new DryModeScriptingLanguage(context, n));
         }
-        return languages.computeIfAbsent(name, DryModeLanguage::new);
+        return languages.computeIfAbsent(name, n -> new DryModeLanguage(context, n));
     }
 
     Collection<DryModeLanguage> getLanguages() {
diff --git a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/DryModeScriptingLanguage.java b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/DryModeScriptingLanguage.java
index 5f9f938b2a..4c8bfd3b6e 100644
--- a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/DryModeScriptingLanguage.java
+++ b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/DryModeScriptingLanguage.java
@@ -20,6 +20,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.spi.ScriptingLanguage;
 
 /**
@@ -30,8 +31,8 @@ class DryModeScriptingLanguage extends DryModeLanguage implements ScriptingLangu
 
     private final Set<ScriptHolder> scripts = ConcurrentHashMap.newKeySet();
 
-    public DryModeScriptingLanguage(String name) {
-        super(name);
+    DryModeScriptingLanguage(CamelContext camelContext, String name) {
+        super(camelContext, name);
     }
 
     @Override
@@ -42,7 +43,7 @@ class DryModeScriptingLanguage extends DryModeLanguage implements ScriptingLangu
     @SuppressWarnings("unchecked")
     @Override
     public <T> T evaluate(String script, Map<String, Object> bindings, Class<T> resultType) {
-        scripts.add(new ScriptHolder(script, bindings));
+        scripts.add(new ScriptHolder(script, loadResource(script), bindings));
         // A non-null value must be returned and the returned type is not really important for the dry mode
         return (T) new Object();
     }
diff --git a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/ExpressionHolder.java b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/ExpressionHolder.java
index 45c80139eb..7f0b8374a1 100644
--- a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/ExpressionHolder.java
+++ b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/ExpressionHolder.java
@@ -25,15 +25,17 @@ import java.util.Objects;
 public final class ExpressionHolder {
 
     private final String content;
+    private final String loadedContent;
 
     private final Object[] properties;
 
-    public ExpressionHolder(String content) {
-        this(content, null);
+    public ExpressionHolder(String content, String loadedContent) {
+        this(content, loadedContent, null);
     }
 
-    public ExpressionHolder(String content, Object[] properties) {
+    public ExpressionHolder(String content, String loadedContent, Object[] properties) {
         this.content = content;
+        this.loadedContent = loadedContent;
         this.properties = properties;
     }
 
@@ -41,6 +43,10 @@ public final class ExpressionHolder {
         return content;
     }
 
+    public String getLoadedContent() {
+        return loadedContent;
+    }
+
     public Object[] getProperties() {
         return properties;
     }
diff --git a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/ScriptHolder.java b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/ScriptHolder.java
index fb99746d1a..43233d045d 100644
--- a/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/ScriptHolder.java
+++ b/extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/dm/ScriptHolder.java
@@ -25,11 +25,13 @@ import java.util.Objects;
 public final class ScriptHolder {
 
     private final String content;
+    private final String loadedContent;
 
     private final Map<String, Object> bindings;
 
-    public ScriptHolder(String content, Map<String, Object> bindings) {
+    public ScriptHolder(String content, String loadedContent, Map<String, Object> bindings) {
         this.content = content;
+        this.loadedContent = loadedContent;
         this.bindings = bindings;
     }
 
@@ -37,6 +39,10 @@ public final class ScriptHolder {
         return content;
     }
 
+    public String getLoadedContent() {
+        return loadedContent;
+    }
+
     public Map<String, Object> getBindings() {
         return bindings;
     }