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 2020/10/08 15:58:50 UTC

[camel] branch master updated: CAMEL-15659: Add back manually coded configurers for the languages

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 eba825c  CAMEL-15659: Add back manually coded configurers for the languages
eba825c is described below

commit eba825c392bc78800f180a3825600395a7e45347
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Oct 8 17:40:08 2020 +0200

    CAMEL-15659: Add back manually coded configurers for the languages
---
 .../apache/camel/language/bean/BeanLanguage.java   | 32 ++++++++++++-
 .../apache/camel/jsonpath/JsonPathLanguage.java    | 43 ++++++++++++++++-
 .../camel/language/xquery/XQueryLanguage.java      | 24 +++++++++-
 .../apache/camel/language/xpath/XPathLanguage.java | 56 +++++++++++++++++++++-
 .../org/apache/camel/builder/ExpressionClause.java |  6 +--
 .../camel/builder/ExpressionClauseSupport.java     |  6 +--
 .../camel/language/tokenizer/TokenizeLanguage.java | 54 ++++++++++++++++++++-
 .../language/xtokenizer/XMLTokenizeLanguage.java   | 28 ++++++++++-
 8 files changed, 236 insertions(+), 13 deletions(-)

diff --git a/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanLanguage.java b/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanLanguage.java
index abb2bec..65b8146 100644
--- a/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanLanguage.java
+++ b/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanLanguage.java
@@ -20,6 +20,7 @@ import java.net.URISyntaxException;
 import java.util.Map;
 
 import org.apache.camel.BeanScope;
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
 import org.apache.camel.RuntimeCamelException;
@@ -28,8 +29,10 @@ import org.apache.camel.component.bean.BeanComponent;
 import org.apache.camel.component.bean.ParameterMappingStrategy;
 import org.apache.camel.component.bean.ParameterMappingStrategyHelper;
 import org.apache.camel.spi.Language;
+import org.apache.camel.spi.PropertyConfigurer;
 import org.apache.camel.support.ExpressionToPredicateAdapter;
 import org.apache.camel.support.LanguageSupport;
+import org.apache.camel.support.component.PropertyConfigurerSupport;
 import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.URISupport;
 
@@ -45,7 +48,7 @@ import org.apache.camel.util.URISupport;
  * As of Camel 1.5 the bean language also supports invoking a provided bean by its classname or the bean itself.
  */
 @org.apache.camel.spi.annotations.Language("bean")
-public class BeanLanguage extends LanguageSupport implements StaticService {
+public class BeanLanguage extends LanguageSupport implements PropertyConfigurer, StaticService {
 
     private volatile BeanComponent beanComponent;
     private volatile ParameterMappingStrategy parameterMappingStrategy;
@@ -101,6 +104,33 @@ public class BeanLanguage extends LanguageSupport implements StaticService {
     }
 
     @Override
+    public boolean configure(CamelContext camelContext, Object target, String name, Object value, boolean ignoreCase) {
+        if (target != this) {
+            throw new IllegalStateException("Can only configure our own instance !");
+        }
+        switch (ignoreCase ? name.toLowerCase() : name) {
+            case "bean":
+                setBean(PropertyConfigurerSupport.property(camelContext, Object.class, value));
+                return true;
+            case "beantype":
+            case "beanType":
+                setBeanType(PropertyConfigurerSupport.property(camelContext, Class.class, value));
+                return true;
+            case "ref":
+                setRef(PropertyConfigurerSupport.property(camelContext, String.class, value));
+                return true;
+            case "method":
+                setMethod(PropertyConfigurerSupport.property(camelContext, String.class, value));
+                return true;
+            case "scope":
+                setScope(PropertyConfigurerSupport.property(camelContext, BeanScope.class, value));
+                return true;
+            default:
+                return false;
+        }
+    }
+
+    @Override
     public Predicate createPredicate(String expression) {
         return ExpressionToPredicateAdapter.toPredicate(createExpression(expression));
     }
diff --git a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathLanguage.java b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathLanguage.java
index ea071dc..02dfcb8 100644
--- a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathLanguage.java
+++ b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathLanguage.java
@@ -20,13 +20,16 @@ import java.util.ArrayList;
 import java.util.List;
 
 import com.jayway.jsonpath.Option;
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
+import org.apache.camel.spi.PropertyConfigurer;
 import org.apache.camel.spi.annotations.Language;
 import org.apache.camel.support.LanguageSupport;
+import org.apache.camel.support.component.PropertyConfigurerSupport;
 
 @Language("jsonpath")
-public class JsonPathLanguage extends LanguageSupport {
+public class JsonPathLanguage extends LanguageSupport implements PropertyConfigurer {
 
     private Class<?> resultType;
     private boolean suppressExceptions;
@@ -142,4 +145,42 @@ public class JsonPathLanguage extends LanguageSupport {
         return answer;
     }
 
+    @Override
+    public boolean configure(CamelContext camelContext, Object target, String name, Object value, boolean ignoreCase) {
+        if (target != this) {
+            throw new IllegalStateException("Can only configure our own instance !");
+        }
+
+        switch (ignoreCase ? name.toLowerCase() : name) {
+            case "resulttype":
+            case "resultType":
+                setResultType(PropertyConfigurerSupport.property(camelContext, Class.class, value));
+                return true;
+            case "suppressexceptions":
+            case "suppressExceptions":
+                setSuppressExceptions(PropertyConfigurerSupport.property(camelContext, boolean.class, value));
+                return true;
+            case "allowsimple":
+            case "allowSimple":
+                setAllowSimple(PropertyConfigurerSupport.property(camelContext, boolean.class, value));
+                return true;
+            case "alloweasypredicate":
+            case "allowEasyPredicate":
+                setAllowEasyPredicate(PropertyConfigurerSupport.property(camelContext, boolean.class, value));
+                return true;
+            case "headername":
+            case "headerName":
+                setHeaderName(PropertyConfigurerSupport.property(camelContext, String.class, value));
+                return true;
+            case "writeasstring":
+            case "writeAsString":
+                setWriteAsString(PropertyConfigurerSupport.property(camelContext, boolean.class, value));
+                return true;
+            case "options":
+                setOptions(PropertyConfigurerSupport.property(camelContext, Option[].class, value));
+                return true;
+            default:
+                return false;
+        }
+    }
 }
diff --git a/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java b/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java
index ced414c..e278823 100644
--- a/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java
+++ b/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java
@@ -16,14 +16,17 @@
  */
 package org.apache.camel.language.xquery;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
 import org.apache.camel.component.xquery.XQueryBuilder;
+import org.apache.camel.spi.PropertyConfigurer;
 import org.apache.camel.spi.annotations.Language;
 import org.apache.camel.support.LanguageSupport;
+import org.apache.camel.support.component.PropertyConfigurerSupport;
 
 @Language("xquery")
-public class XQueryLanguage extends LanguageSupport {
+public class XQueryLanguage extends LanguageSupport implements PropertyConfigurer {
 
     private Class<?> resultType;
     private String headerName;
@@ -91,4 +94,23 @@ public class XQueryLanguage extends LanguageSupport {
         }
     }
 
+    @Override
+    public boolean configure(CamelContext camelContext, Object target, String name, Object value, boolean ignoreCase) {
+        if (target != this) {
+            throw new IllegalStateException("Can only configure our own instance !");
+        }
+        switch (ignoreCase ? name.toLowerCase() : name) {
+            case "resulttype":
+            case "resultType":
+                setResultType(PropertyConfigurerSupport.property(camelContext, Class.class, value));
+                return true;
+            case "headername":
+            case "headerName":
+                setHeaderName(PropertyConfigurerSupport.property(camelContext, String.class, value));
+                return true;
+            default:
+                return false;
+        }
+    }
+
 }
diff --git a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java
index 4caa22b..17548cf 100644
--- a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java
+++ b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java
@@ -19,16 +19,19 @@ package org.apache.camel.language.xpath;
 import javax.xml.namespace.QName;
 import javax.xml.xpath.XPathFactory;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
+import org.apache.camel.spi.PropertyConfigurer;
 import org.apache.camel.spi.annotations.Language;
 import org.apache.camel.support.LanguageSupport;
+import org.apache.camel.support.component.PropertyConfigurerSupport;
 
 /**
  * XPath language.
  */
 @Language("xpath")
-public class XPathLanguage extends LanguageSupport {
+public class XPathLanguage extends LanguageSupport implements PropertyConfigurer {
     private Class<?> resultType;
     private QName resultQName;
     private Class<?> documentType;
@@ -215,4 +218,55 @@ public class XPathLanguage extends LanguageSupport {
         }
     }
 
+    @Override
+    public boolean configure(CamelContext camelContext, Object target, String name, Object value, boolean ignoreCase) {
+        if (target != this) {
+            throw new IllegalStateException("Can only configure our own instance !");
+        }
+        switch (ignoreCase ? name.toLowerCase() : name) {
+            case "resulttype":
+            case "resultType":
+                setResultType(PropertyConfigurerSupport.property(camelContext, Class.class, value));
+                return true;
+            case "resultqname":
+            case "resultQName":
+                setResultQName(PropertyConfigurerSupport.property(camelContext, QName.class, value));
+                return true;
+            case "documenttype":
+            case "documentType":
+                setDocumentType(PropertyConfigurerSupport.property(camelContext, Class.class, value));
+                return true;
+            case "xpathfactory":
+            case "xpathFactory":
+                setXpathFactory(PropertyConfigurerSupport.property(camelContext, XPathFactory.class, value));
+                return true;
+            case "usesaxon":
+            case "useSaxon":
+                setUseSaxon(PropertyConfigurerSupport.property(camelContext, Boolean.class, value));
+                return true;
+            case "objectmodeluri":
+            case "objectModelUri":
+                setObjectModelUri(PropertyConfigurerSupport.property(camelContext, String.class, value));
+                return true;
+            case "threadsafety":
+            case "threadSafety":
+                setThreadSafety(PropertyConfigurerSupport.property(camelContext, Boolean.class, value));
+                return true;
+            case "lognamespaces":
+            case "logNamespaces":
+                setLogNamespaces(PropertyConfigurerSupport.property(camelContext, Boolean.class, value));
+                return true;
+            case "headername":
+            case "headerName":
+                setHeaderName(PropertyConfigurerSupport.property(camelContext, String.class, value));
+                return true;
+            case "preCompile":
+            case "precompile":
+                setPreCompile(PropertyConfigurerSupport.property(camelContext, Boolean.class, value));
+                return true;
+            default:
+                return false;
+        }
+    }
+
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClause.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClause.java
index 6bf04de..8c97230 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClause.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClause.java
@@ -249,9 +249,9 @@ public class ExpressionClause<T> implements Expression, Predicate {
      * Evaluates an expression using the <a href="http://camel.apache.org/bean-language.html">bean language</a> which
      * basically means the bean is invoked to determine the expression value.
      *
-     * @param  bean   the name of the bean looked up the registry
-     * @param  scope  the scope of the bean
-     * @return        the builder to continue processing the DSL
+     * @param  bean  the name of the bean looked up the registry
+     * @param  scope the scope of the bean
+     * @return       the builder to continue processing the DSL
      */
     public T method(String bean, BeanScope scope) {
         return delegate.method(bean, scope);
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
index 7577674..37970f7 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
@@ -211,9 +211,9 @@ public class ExpressionClauseSupport<T> {
      * Evaluates an expression using the <a href="http://camel.apache.org/bean-language.html>bean language</a> which
      * basically means the bean is invoked to determine the expression value.
      *
-     * @param  bean   the name of the bean looked up the registry
-     * @param  scope  the scope of the bean
-     * @return        the builder to continue processing the DSL
+     * @param  bean  the name of the bean looked up the registry
+     * @param  scope the scope of the bean
+     * @return       the builder to continue processing the DSL
      */
     public T method(String bean, BeanScope scope) {
         MethodCallExpression exp = new MethodCallExpression(bean);
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/tokenizer/TokenizeLanguage.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/tokenizer/TokenizeLanguage.java
index e804b18..dfd4b63 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/tokenizer/TokenizeLanguage.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/tokenizer/TokenizeLanguage.java
@@ -16,11 +16,14 @@
  */
 package org.apache.camel.language.tokenizer;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
+import org.apache.camel.spi.PropertyConfigurer;
 import org.apache.camel.support.ExpressionToPredicateAdapter;
 import org.apache.camel.support.LanguageSupport;
 import org.apache.camel.support.builder.ExpressionBuilder;
+import org.apache.camel.support.component.PropertyConfigurerSupport;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -36,7 +39,7 @@ import org.apache.camel.util.ObjectHelper;
  * <tt>token</tt> and <tt>endToken</tt>. And the <tt>xml</tt> mode supports the <tt>inheritNamespaceTagName</tt> option.
  */
 @org.apache.camel.spi.annotations.Language("tokenize")
-public class TokenizeLanguage extends LanguageSupport {
+public class TokenizeLanguage extends LanguageSupport implements PropertyConfigurer {
 
     private String token;
     private String endToken;
@@ -91,7 +94,54 @@ public class TokenizeLanguage extends LanguageSupport {
         language.setToken(tagName);
         language.setInheritNamespaceTagName(inheritNamespaceTagName);
         language.setXml(true);
-        return language.createExpression((String) null);
+        return language.createExpression(null);
+    }
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object target, String name, Object value, boolean ignoreCase) {
+        if (target != this) {
+            throw new IllegalStateException("Can only configure our own instance !");
+        }
+        switch (ignoreCase ? name.toLowerCase() : name) {
+            case "token":
+                setToken(PropertyConfigurerSupport.property(camelContext, String.class, value));
+                return true;
+            case "endtoken":
+            case "endToken":
+                setEndToken(PropertyConfigurerSupport.property(camelContext, String.class, value));
+                return true;
+            case "inheritnamespacetagname":
+            case "inheritNamespaceTagName":
+                setInheritNamespaceTagName(PropertyConfigurerSupport.property(camelContext, String.class, value));
+                return true;
+            case "headername":
+            case "headerName":
+                setHeaderName(PropertyConfigurerSupport.property(camelContext, String.class, value));
+                return true;
+            case "regex":
+                setRegex(PropertyConfigurerSupport.property(camelContext, Boolean.class, value));
+                return true;
+            case "xml":
+                setXml(PropertyConfigurerSupport.property(camelContext, Boolean.class, value));
+                return true;
+            case "includetokens":
+            case "includeTokens":
+                setIncludeTokens(PropertyConfigurerSupport.property(camelContext, Boolean.class, value));
+                return true;
+            case "group":
+                setGroup(PropertyConfigurerSupport.property(camelContext, String.class, value));
+                return true;
+            case "groupdelimiter":
+            case "groupDelimiter":
+                setGroupDelimiter(PropertyConfigurerSupport.property(camelContext, String.class, value));
+                return true;
+            case "skipfirst":
+            case "skipFirst":
+                setSkipFirst(PropertyConfigurerSupport.property(camelContext, Boolean.class, value));
+                return true;
+            default:
+                return false;
+        }
     }
 
     @Override
diff --git a/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java b/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
index 7c31f2b..6ad908c 100644
--- a/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
+++ b/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
@@ -18,12 +18,15 @@ package org.apache.camel.language.xtokenizer;
 
 import java.util.Map;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
+import org.apache.camel.spi.PropertyConfigurer;
 import org.apache.camel.spi.annotations.Language;
 import org.apache.camel.support.ExpressionToPredicateAdapter;
 import org.apache.camel.support.LanguageSupport;
 import org.apache.camel.support.builder.Namespaces;
+import org.apache.camel.support.component.PropertyConfigurerSupport;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -38,7 +41,7 @@ import org.apache.camel.util.ObjectHelper;
  * </ul>
  */
 @Language("xtokenize")
-public class XMLTokenizeLanguage extends LanguageSupport {
+public class XMLTokenizeLanguage extends LanguageSupport implements PropertyConfigurer {
 
     private String headerName;
     private String path;
@@ -160,4 +163,27 @@ public class XMLTokenizeLanguage extends LanguageSupport {
         this.namespaces = namespaces;
     }
 
+    @Override
+    public boolean configure(CamelContext camelContext, Object target, String name, Object value, boolean ignoreCase) {
+        if (target != this) {
+            throw new IllegalStateException("Can only configure our own instance !");
+        }
+        switch (ignoreCase ? name.toLowerCase() : name) {
+            case "headername":
+            case "headerName":
+                setHeaderName(PropertyConfigurerSupport.property(camelContext, String.class, value));
+                return true;
+            case "mode":
+                setMode(PropertyConfigurerSupport.property(camelContext, char.class, value));
+                return true;
+            case "group":
+                setGroup(PropertyConfigurerSupport.property(camelContext, int.class, value));
+                return true;
+            case "namespaces":
+                setNamespaces(PropertyConfigurerSupport.property(camelContext, Namespaces.class, value));
+                return true;
+            default:
+                return false;
+        }
+    }
 }