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/22 08:43:11 UTC

[camel] branch master updated: CAMEL-15730: camel-core - Untangle reifier from builder

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 607e844  CAMEL-15730: camel-core - Untangle reifier from builder
607e844 is described below

commit 607e844d1c0b2bdbc5f984c897f6906537227c34
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Oct 22 10:21:37 2020 +0200

    CAMEL-15730: camel-core - Untangle reifier from builder
---
 .../apache/camel/spi/ExpressionFactoryAware.java   | 31 ++++++++++++++++++++++
 .../camel/builder/ExpressionClauseSupport.java     |  8 +++++-
 .../camel/model/language/ExpressionDefinition.java |  8 +++++-
 .../org/apache/camel/reifier/ChoiceReifier.java    | 13 ++++-----
 4 files changed, 52 insertions(+), 8 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/ExpressionFactoryAware.java b/core/camel-api/src/main/java/org/apache/camel/spi/ExpressionFactoryAware.java
new file mode 100644
index 0000000..b5041a2
--- /dev/null
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/ExpressionFactoryAware.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spi;
+
+import org.apache.camel.ExpressionFactory;
+
+/**
+ * When an instance is aware of {@link ExpressionFactory}.
+ */
+public interface ExpressionFactoryAware {
+
+    /**
+     * Gets the {@link ExpressionFactory}.
+     */
+    ExpressionFactory getExpressionFactory();
+
+}
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 c878e63..de3b374 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
@@ -40,12 +40,13 @@ import org.apache.camel.model.language.TokenizerExpression;
 import org.apache.camel.model.language.XMLTokenizerExpression;
 import org.apache.camel.model.language.XPathExpression;
 import org.apache.camel.model.language.XQueryExpression;
+import org.apache.camel.spi.ExpressionFactoryAware;
 import org.apache.camel.support.builder.Namespaces;
 
 /**
  * A support class for building expression clauses.
  */
-public class ExpressionClauseSupport<T> {
+public class ExpressionClauseSupport<T> implements ExpressionFactoryAware {
 
     // Implementation detail: We must use the specific model.language.xxx
     // classes to make the DSL use these specific types
@@ -1088,6 +1089,11 @@ public class ExpressionClauseSupport<T> {
         this.expressionType = expressionType;
     }
 
+    @Override
+    public ExpressionFactory getExpressionFactory() {
+        return expressionType;
+    }
+
     protected Expression createExpression(CamelContext camelContext) {
         if (getExpressionValue() == null) {
             if (getExpressionType() != null) {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
index 6069ed7..a675d2a 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
@@ -34,6 +34,7 @@ import org.apache.camel.Expression;
 import org.apache.camel.ExpressionFactory;
 import org.apache.camel.Predicate;
 import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.spi.ExpressionFactoryAware;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.util.ObjectHelper;
 
@@ -45,7 +46,7 @@ import org.apache.camel.util.ObjectHelper;
 @XmlType(name = "expression") // must be named expression
 @XmlAccessorType(XmlAccessType.FIELD)
 @SuppressWarnings("rawtypes")
-public class ExpressionDefinition implements Expression, Predicate, ExpressionFactory {
+public class ExpressionDefinition implements Expression, Predicate, ExpressionFactory, ExpressionFactoryAware {
     @XmlAttribute
     @XmlID
     private String id;
@@ -190,6 +191,11 @@ public class ExpressionDefinition implements Expression, Predicate, ExpressionFa
     //
 
     @Override
+    public ExpressionFactory getExpressionFactory() {
+        return this;
+    }
+
+    @Override
     public Expression createExpression(CamelContext camelContext) {
         return camelContext.adapt(ModelCamelContext.class).createExpression(this);
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ChoiceReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ChoiceReifier.java
index 1537459..54e5780 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ChoiceReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ChoiceReifier.java
@@ -23,13 +23,13 @@ import org.apache.camel.ExpressionFactory;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
-import org.apache.camel.builder.ExpressionClause;
 import org.apache.camel.model.ChoiceDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.WhenDefinition;
 import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.processor.ChoiceProcessor;
 import org.apache.camel.processor.FilterProcessor;
+import org.apache.camel.spi.ExpressionFactoryAware;
 
 public class ChoiceReifier extends ProcessorReifier<ChoiceDefinition> {
 
@@ -46,18 +46,19 @@ public class ChoiceReifier extends ProcessorReifier<ChoiceDefinition> {
                 exp = exp.getExpressionType();
             }
             Predicate pre = exp.getPredicate();
-            if (pre instanceof ExpressionClause) {
-                ExpressionClause<?> clause = (ExpressionClause<?>) pre;
-                if (clause.getExpressionType() != null) {
+            if (pre instanceof ExpressionFactoryAware) {
+                ExpressionFactoryAware aware = (ExpressionFactoryAware) pre;
+                if (aware.getExpressionFactory() != null) {
                     // if using the Java DSL then the expression may have been
                     // set using the
-                    // ExpressionClause which is a fancy builder to define
+                    // ExpressionClause (implements ExpressionFactoryAware)
+                    // which is a fancy builder to define
                     // expressions and predicates
                     // using fluent builders in the DSL. However we need
                     // afterwards a callback to
                     // reset the expression to the expression type the
                     // ExpressionClause did build for us
-                    ExpressionFactory model = clause.getExpressionType();
+                    ExpressionFactory model = aware.getExpressionFactory();
                     if (model instanceof ExpressionDefinition) {
                         whenClause.setExpression((ExpressionDefinition) model);
                     }