This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch camel-main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 01f3cdecacb72633ca19a251b4a880482fa84ede Author: Nicolas Filotto <nfilo...@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; }