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 2024/02/02 11:33:34 UTC

(camel) 02/13: CAMEL-20378: Languages should be thread-safe and be configured only via properties array, all in the same way.

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

davsclaus pushed a commit to branch lang2
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 369bcff5d8189f373f387f64bacb314c5ec1a7bc
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Feb 2 10:09:02 2024 +0100

    CAMEL-20378: Languages should be thread-safe and be configured only via properties array, all in the same way.
---
 .../language/xtokenizer/XMLTokenizeLanguage.java   | 148 ++++-----------------
 .../camel/language/tokenizer/TokenizeLanguage.java |   1 -
 2 files changed, 26 insertions(+), 123 deletions(-)

diff --git a/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java b/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
index 76fc9f3dbf1..9c6a35c53a5 100644
--- a/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
+++ b/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
@@ -18,16 +18,12 @@ 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.SingleInputLanguageSupport;
 import org.apache.camel.support.builder.Namespaces;
-import org.apache.camel.support.component.PropertyConfigurerSupport;
-import org.apache.camel.util.ObjectHelper;
 
 /**
  * A language for tokenizer expressions.
@@ -41,60 +37,16 @@ import org.apache.camel.util.ObjectHelper;
  * </ul>
  */
 @Language("xtokenize")
-public class XMLTokenizeLanguage extends SingleInputLanguageSupport implements PropertyConfigurer {
-
-    private String path;
-    private char mode;
-    private int group;
-    private Namespaces namespaces;
-
-    @Deprecated
-    public static Expression tokenize(String path) {
-        return tokenize(null, path, 'i');
-    }
-
-    @Deprecated
-    public static Expression tokenize(String path, char mode) {
-        return tokenize(null, path, mode);
-    }
-
-    @Deprecated
-    public static Expression tokenize(String headerName, String path) {
-        return tokenize(headerName, path, 'i');
-    }
-
-    @Deprecated
-    public static Expression tokenize(String headerName, String path, char mode) {
-        return tokenize(headerName, path, mode, 1, null);
-    }
-
-    @Deprecated
-    public static Expression tokenize(String headerName, String path, char mode, int group, Namespaces namespaces) {
-        XMLTokenizeLanguage language = new XMLTokenizeLanguage();
-        language.setHeaderName(headerName);
-        language.setMode(mode);
-        language.setGroup(group);
-        language.setNamespaces(namespaces);
-        return language.createExpression(path);
-    }
+public class XMLTokenizeLanguage extends SingleInputLanguageSupport {
 
     @Override
     public Predicate createPredicate(String expression) {
         return ExpressionToPredicateAdapter.toPredicate(createExpression(expression));
     }
 
-    /**
-     * Creates a tokenize expression.
-     */
     @Override
     public Expression createExpression(String expression) {
-        String path = expression != null ? expression : this.path;
-        ObjectHelper.notNull(path, "path");
-        XMLTokenExpressionIterator expr = new XMLTokenExpressionIterator(path, mode, group, getHeaderName(), getPropertyName());
-        if (namespaces != null) {
-            expr.setNamespaces(namespaces.getNamespaces());
-        }
-        return expr;
+        return createExpression(expression, null);
     }
 
     @Override
@@ -104,90 +56,42 @@ public class XMLTokenizeLanguage extends SingleInputLanguageSupport implements P
 
     @Override
     public Expression createExpression(String expression, Object[] properties) {
-        XMLTokenizeLanguage answer = new XMLTokenizeLanguage();
-        answer.setHeaderName(property(String.class, properties, 0, getHeaderName()));
-        answer.setMode(property(Character.class, properties, 1, "i"));
-        answer.setGroup(property(Integer.class, properties, 2, group));
+        String headerName = property(String.class, properties, 0, getHeaderName());
+        Character mode = property(Character.class, properties, 1, "i");
+        Integer group = property(Integer.class, properties, 2, null);
         Object obj = properties[3];
+        Namespaces ns = null;
         if (obj != null) {
             if (obj instanceof Namespaces) {
-                answer.setNamespaces((Namespaces) obj);
+                ns = (Namespaces) obj;
             } else if (obj instanceof Map) {
-                Namespaces ns = new Namespaces();
+                ns = new Namespaces();
                 ((Map<String, String>) obj).forEach(ns::add);
-                answer.setNamespaces(ns);
             } else {
                 throw new IllegalArgumentException(
                         "Namespaces is not instance of java.util.Map or " + Namespaces.class.getName());
             }
         }
-        String path = expression != null ? expression : this.path;
-        answer.setPropertyName(property(String.class, properties, 4, getPropertyName()));
-        answer.setVariableName(property(String.class, properties, 5, getVariableName()));
-        return answer.createExpression(path);
-    }
-
-    public String getPath() {
-        return path;
-    }
-
-    public void setPath(String path) {
-        this.path = path;
-    }
+        String propertyName = property(String.class, properties, 4, null);
+        String variableName = property(String.class, properties, 5, null);
 
-    public char getMode() {
-        return mode;
-    }
-
-    public void setMode(char mode) {
-        this.mode = mode;
-    }
-
-    public int getGroup() {
-        return group;
-    }
-
-    public void setGroup(int group) {
-        this.group = group;
-    }
-
-    public Namespaces getNamespaces() {
-        return namespaces;
-    }
-
-    public void setNamespaces(Namespaces namespaces) {
-        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 !");
+        XMLTokenExpressionIterator tokenizer = new XMLTokenExpressionIterator(expression, mode);
+        if (headerName != null) {
+            tokenizer.setHeaderName(headerName);
         }
-        switch (ignoreCase ? name.toLowerCase() : name) {
-            case "headername":
-            case "headerName":
-                setHeaderName(PropertyConfigurerSupport.property(camelContext, String.class, value));
-                return true;
-            case "propertyname":
-            case "propertyName":
-                setPropertyName(PropertyConfigurerSupport.property(camelContext, String.class, value));
-                return true;
-            case "variablename":
-            case "variableName":
-                setVariableName(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;
+        if (group != null) {
+            tokenizer.setGroup(group);
         }
+        if (ns != null) {
+            tokenizer.setNamespaces(ns.getNamespaces());
+        }
+        if (propertyName != null) {
+            tokenizer.setPropertyName(propertyName);
+        }
+        if (variableName != null) {
+            tokenizer.setVariableName(variableName);
+        }
+        return tokenizer;
     }
+
 }
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 6c246662ab6..23d9142b53e 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
@@ -113,7 +113,6 @@ public class TokenizeLanguage extends LanguageSupport {
             answer.init(getCamelContext());
         }
         return answer;
-
     }
 
 }