This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new 5b82a17 CAMEL-15914: camel-csimple - Generate source code whether its a predicate or expression. 5b82a17 is described below commit 5b82a173db4cc51deafa1f8a082f3753b23091de Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Fri Dec 4 12:51:26 2020 +0100 CAMEL-15914: camel-csimple - Generate source code whether its a predicate or expression. --- .../language/csimple/CSimpleCodeGenerator.java | 6 +++ .../camel/language/csimple/CSimpleExpression.java | 5 +++ .../camel/language/csimple/CSimpleLanguage.java | 50 ++++++++++++---------- .../camel/language/csimple/HighPredicate.java | 5 +++ .../camel/language/csimple/MedPredicate.java | 5 +++ 5 files changed, 48 insertions(+), 23 deletions(-) diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleCodeGenerator.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleCodeGenerator.java index b336aa8..1d92fc4 100644 --- a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleCodeGenerator.java +++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleCodeGenerator.java @@ -103,6 +103,12 @@ public class CSimpleCodeGenerator { sb.append("\n"); sb.append(" @Override\n"); + sb.append(" public boolean isPredicate() {\n"); + sb.append(" return ").append(predicate).append(";\n"); + sb.append(" }\n"); + sb.append("\n"); + + sb.append(" @Override\n"); sb.append(" public String getText() {\n"); // \ should be escaped String escaped = StringHelper.replaceAll(text, "\\", "\\\\"); diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleExpression.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleExpression.java index b33fbd3..46d383e 100644 --- a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleExpression.java +++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleExpression.java @@ -26,6 +26,11 @@ import org.apache.camel.Predicate; public interface CSimpleExpression extends Expression, Predicate { /** + * Whether this script is to be used as predicate only. + */ + boolean isPredicate(); + + /** * The csimple script as text */ String getText(); diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleLanguage.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleLanguage.java index 4c8eec4..d7210d6 100644 --- a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleLanguage.java +++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleLanguage.java @@ -20,9 +20,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.util.Collections; import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -51,15 +49,16 @@ public class CSimpleLanguage extends LanguageSupport implements StaticService { private static final Logger LOG = LoggerFactory.getLogger(CSimpleLanguage.class); - private final Map<String, CSimpleExpression> compiled; + private final Map<String, CSimpleExpression> compiledPredicates = new ConcurrentHashMap<>(); + private final Map<String, CSimpleExpression> compiledExpressions = new ConcurrentHashMap<>(); + /** * If set, this implementation attempts to compile those expressions at runtime, that are not yet available in - * {@link #compiled}; otherwise no compilation attempts will be made at runtime + * {@link #compiledPredicates}; otherwise no compilation attempts will be made at runtime */ private final CompilationSupport compilationSupport; public CSimpleLanguage() { - this.compiled = new ConcurrentHashMap<>(); this.compilationSupport = new CompilationSupport(); } @@ -69,7 +68,13 @@ public class CSimpleLanguage extends LanguageSupport implements StaticService { * @param compiled the compiled */ private CSimpleLanguage(Map<String, CSimpleExpression> compiled) { - this.compiled = compiled; + compiled.forEach((k, v) -> { + if (v.isPredicate()) { + this.compiledPredicates.put(k, v); + } else { + this.compiledExpressions.put(k, v); + } + }); this.compilationSupport = null; } @@ -130,11 +135,11 @@ public class CSimpleLanguage extends LanguageSupport implements StaticService { String text = expression.replaceAll("\n", ""); text = text.trim(); - Predicate answer = compiled.get(text); + Predicate answer = compiledPredicates.get(text); if (answer == null && compilationSupport != null) { CSimpleExpression exp = compilationSupport.compilePredicate(getCamelContext(), expression); if (exp != null) { - compiled.put(text, exp); + compiledPredicates.put(text, exp); answer = exp; } } @@ -153,11 +158,11 @@ public class CSimpleLanguage extends LanguageSupport implements StaticService { String text = expression.replaceAll("\n", ""); text = text.trim(); - Expression answer = compiled.get(text); + Expression answer = compiledExpressions.get(text); if (answer == null && compilationSupport != null) { CSimpleExpression exp = compilationSupport.compileExpression(getCamelContext(), expression); if (exp != null) { - compiled.put(text, exp); + compiledExpressions.put(text, exp); answer = exp; } } @@ -180,12 +185,10 @@ public class CSimpleLanguage extends LanguageSupport implements StaticService { } public static class Builder { - private Map<String, CSimpleExpression> compiled = new LinkedHashMap<String, CSimpleExpression>(); + private Map<String, CSimpleExpression> compiled = new HashMap<>(); public CSimpleLanguage build() { - final Map<String, CSimpleExpression> cmpl = Collections.unmodifiableMap(compiled); - compiled = null; // invalidate the builder to prevent leaking the mutable collection - return new CSimpleLanguage(cmpl); + return new CSimpleLanguage(compiled); } public Builder expression(CSimpleExpression expression) { @@ -225,12 +228,8 @@ public class CSimpleLanguage extends LanguageSupport implements StaticService { compiler = (CSimpleCompiler) ecc.getInjector().newInstance(clazz.get(), false); if (compiler != null) { LOG.info("Detected camel-csimple-joor compiler"); - if (imports != null) { - imports.forEach(compiler::addImport); - } - if (aliases != null) { - aliases.forEach(compiler::addAliases); - } + imports.forEach(compiler::addImport); + aliases.forEach(compiler::addAliases); } ServiceHelper.initService(compiler); } @@ -275,15 +274,20 @@ public class CSimpleLanguage extends LanguageSupport implements StaticService { Class<CSimpleExpression> clazz = ecc.getClassResolver().resolveMandatoryClass(fqn, CSimpleExpression.class); CSimpleExpression ce = clazz.getConstructor(CamelContext.class).newInstance(getCamelContext()); - compiled.put(ce.getText(), ce); + if (ce.isPredicate()) { + compiledPredicates.put(ce.getText(), ce); + } else { + compiledExpressions.put(ce.getText(), ce); + } } } catch (Exception e) { throw new RuntimeCamelException("Error initializing csimple language", e); } finally { IOHelper.close(is); } - if (!compiled.isEmpty()) { - LOG.info("Loaded and initialized {} csimple expressions from classpath", compiled.size()); + int size = compiledPredicates.size() + compiledExpressions.size(); + if (size > 0) { + LOG.info("Loaded and initialized {} csimple expressions from classpath", size); } } } diff --git a/core/camel-core/src/test/java/org/apache/camel/language/csimple/HighPredicate.java b/core/camel-core/src/test/java/org/apache/camel/language/csimple/HighPredicate.java index 377ce26..4c33f05 100644 --- a/core/camel-core/src/test/java/org/apache/camel/language/csimple/HighPredicate.java +++ b/core/camel-core/src/test/java/org/apache/camel/language/csimple/HighPredicate.java @@ -29,6 +29,11 @@ public class HighPredicate extends CSimpleSupport { } @Override + public boolean isPredicate() { + return true; + } + + @Override public String getText() { return "${body} > 10"; } diff --git a/core/camel-core/src/test/java/org/apache/camel/language/csimple/MedPredicate.java b/core/camel-core/src/test/java/org/apache/camel/language/csimple/MedPredicate.java index 0be1d42..00a37ff 100644 --- a/core/camel-core/src/test/java/org/apache/camel/language/csimple/MedPredicate.java +++ b/core/camel-core/src/test/java/org/apache/camel/language/csimple/MedPredicate.java @@ -29,6 +29,11 @@ public class MedPredicate extends CSimpleSupport { } @Override + public boolean isPredicate() { + return true; + } + + @Override public String getText() { return "${body} > 5"; }