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 07:12:27 UTC
[camel-quarkus] 04/32: 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 776807261478f7b93f2189dd3ba9641b82f58525
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;
}