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 2019/08/14 07:53:05 UTC

[camel] 11/21: CAMEL-13850: Optimize model classes to provide changeable properties that support property placeholders to avoid reflection. Work in progress.

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

commit e59cf7a415deccc2031343c9fca04fae34a226c9
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Aug 13 08:54:11 2019 +0200

    CAMEL-13850: Optimize model classes to provide changeable properties that support property placeholders to avoid reflection. Work in progress.
---
 .../camel/spi/PropertyPlaceholderConfigurer.java}  | 28 +++++++---------------
 .../apache/camel/model/DataFormatDefinition.java   |  2 +-
 ...> DefinitionPropertyPlaceholderConfigurer.java} |  9 +++----
 .../camel/model/OptionalIdentifiedDefinition.java  |  2 +-
 .../camel/model/ProcessorDefinitionHelper.java     |  7 +++---
 .../camel/model/language/ExpressionDefinition.java |  4 ++--
 .../apt/CoreEipAnnotationProcessorHelper.java      | 16 ++++++-------
 7 files changed, 29 insertions(+), 39 deletions(-)

diff --git a/core/camel-core/src/main/java/org/apache/camel/model/DefinitionPropertyPlaceholderConfigurable.java b/core/camel-api/src/main/java/org/apache/camel/spi/PropertyPlaceholderConfigurer.java
similarity index 51%
copy from core/camel-core/src/main/java/org/apache/camel/model/DefinitionPropertyPlaceholderConfigurable.java
copy to core/camel-api/src/main/java/org/apache/camel/spi/PropertyPlaceholderConfigurer.java
index 1209972..34b7693 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/DefinitionPropertyPlaceholderConfigurable.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/PropertyPlaceholderConfigurer.java
@@ -1,51 +1,41 @@
-/*
+/**
  * 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
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
  * 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.model;
+package org.apache.camel.spi;
 
 import java.util.Map;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.model.placeholder.DefinitionPropertiesPlaceholderProviderHelper;
 
-/**
- * To be used for configuring property placeholder options on the EIP models.
- */
-public interface DefinitionPropertyPlaceholderConfigurable {
+public interface PropertyPlaceholderConfigurer {
 
     /**
-     * Gets the options on the model definition which supports property placeholders and can be resolved.
+     * Gets the options which supports property placeholders and can be resolved.
      * This will be all the string based options.
      *
      * @return key/values of options
      */
-    default Map<String, Supplier<String>> getReadPropertyPlaceholderOptions(CamelContext camelContext) {
-        DefinitionPropertyPlaceholderConfigurable aware = DefinitionPropertiesPlaceholderProviderHelper.provider(this).orElse(null);
-        return aware != null ? aware.getReadPropertyPlaceholderOptions(camelContext) : null;
-    }
+    Map<String, Supplier<String>> getReadPropertyPlaceholderOptions(CamelContext camelContext);
 
     /**
      * To update an existing property using the function with the key/value and returning the changed value
      * This will be all the string based options.
      */
-    default Map<String, Consumer<String>> getWritePropertyPlaceholderOptions(CamelContext camelContext) {
-        DefinitionPropertyPlaceholderConfigurable aware = DefinitionPropertiesPlaceholderProviderHelper.provider(this).orElse(null);
-        return aware != null ? aware.getWritePropertyPlaceholderOptions(camelContext) : null;
-    }
+    Map<String, Consumer<String>> getWritePropertyPlaceholderOptions(CamelContext camelContext);
 
 }
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java
index f36fb68..6e14717 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java
@@ -35,7 +35,7 @@ import org.apache.camel.spi.Metadata;
 @Metadata(label = "dataformat,transformation")
 @XmlType(name = "dataFormat")
 @XmlAccessorType(XmlAccessType.FIELD)
-public class DataFormatDefinition extends IdentifiedType implements OtherAttributesAware, DefinitionPropertyPlaceholderConfigurable {
+public class DataFormatDefinition extends IdentifiedType implements OtherAttributesAware, DefinitionPropertyPlaceholderConfigurer {
     @XmlTransient
     private DataFormat dataFormat;
     @XmlTransient
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/DefinitionPropertyPlaceholderConfigurable.java b/core/camel-core/src/main/java/org/apache/camel/model/DefinitionPropertyPlaceholderConfigurer.java
similarity index 78%
rename from core/camel-core/src/main/java/org/apache/camel/model/DefinitionPropertyPlaceholderConfigurable.java
rename to core/camel-core/src/main/java/org/apache/camel/model/DefinitionPropertyPlaceholderConfigurer.java
index 1209972..65ec401 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/DefinitionPropertyPlaceholderConfigurable.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/DefinitionPropertyPlaceholderConfigurer.java
@@ -22,11 +22,12 @@ import java.util.function.Supplier;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.placeholder.DefinitionPropertiesPlaceholderProviderHelper;
+import org.apache.camel.spi.PropertyPlaceholderConfigurer;
 
 /**
  * To be used for configuring property placeholder options on the EIP models.
  */
-public interface DefinitionPropertyPlaceholderConfigurable {
+public interface DefinitionPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
 
     /**
      * Gets the options on the model definition which supports property placeholders and can be resolved.
@@ -35,8 +36,8 @@ public interface DefinitionPropertyPlaceholderConfigurable {
      * @return key/values of options
      */
     default Map<String, Supplier<String>> getReadPropertyPlaceholderOptions(CamelContext camelContext) {
-        DefinitionPropertyPlaceholderConfigurable aware = DefinitionPropertiesPlaceholderProviderHelper.provider(this).orElse(null);
-        return aware != null ? aware.getReadPropertyPlaceholderOptions(camelContext) : null;
+        PropertyPlaceholderConfigurer configurer = DefinitionPropertiesPlaceholderProviderHelper.provider(this).orElse(null);
+        return configurer != null ? configurer.getReadPropertyPlaceholderOptions(camelContext) : null;
     }
 
     /**
@@ -44,7 +45,7 @@ public interface DefinitionPropertyPlaceholderConfigurable {
      * This will be all the string based options.
      */
     default Map<String, Consumer<String>> getWritePropertyPlaceholderOptions(CamelContext camelContext) {
-        DefinitionPropertyPlaceholderConfigurable aware = DefinitionPropertiesPlaceholderProviderHelper.provider(this).orElse(null);
+        PropertyPlaceholderConfigurer aware = DefinitionPropertiesPlaceholderProviderHelper.provider(this).orElse(null);
         return aware != null ? aware.getWritePropertyPlaceholderOptions(camelContext) : null;
     }
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/OptionalIdentifiedDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/OptionalIdentifiedDefinition.java
index 9ca6bff..1fb350f 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/OptionalIdentifiedDefinition.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/OptionalIdentifiedDefinition.java
@@ -31,7 +31,7 @@ import org.apache.camel.spi.NodeIdFactory;
 @XmlType(name = "optionalIdentifiedDefinition")
 @XmlAccessorType(XmlAccessType.PROPERTY)
 // must use XmlAccessType.PROPERTY which is required by camel-spring / camel-blueprint for their namespace parsers
-public abstract class OptionalIdentifiedDefinition<T extends OptionalIdentifiedDefinition<T>> implements NamedNode, DefinitionPropertyPlaceholderConfigurable {
+public abstract class OptionalIdentifiedDefinition<T extends OptionalIdentifiedDefinition<T>> implements NamedNode, DefinitionPropertyPlaceholderConfigurer {
 
     private String id;
     private Boolean customId;
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java b/core/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
index 69e06b3..947ee37 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
@@ -28,7 +28,6 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
-
 import javax.xml.namespace.QName;
 
 import org.apache.camel.CamelContext;
@@ -37,8 +36,8 @@ import org.apache.camel.NamedNode;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.ExecutorServiceManager;
 import org.apache.camel.spi.PropertiesComponent;
+import org.apache.camel.spi.PropertyPlaceholderConfigurer;
 import org.apache.camel.spi.RouteContext;
-import org.apache.camel.support.IntrospectionSupport;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StringHelper;
@@ -686,11 +685,11 @@ public final class ProcessorDefinitionHelper {
         LOG.trace("Resolving property placeholders for: {}", definition);
 
         // only do this for models that supports property placeholders
-        if (!(definition instanceof DefinitionPropertyPlaceholderConfigurable)) {
+        if (!(definition instanceof PropertyPlaceholderConfigurer)) {
             return;
         }
 
-        DefinitionPropertyPlaceholderConfigurable ppa = (DefinitionPropertyPlaceholderConfigurable) definition;
+        PropertyPlaceholderConfigurer ppa = (PropertyPlaceholderConfigurer) definition;
 
         // find all getter/setter which we can use for property placeholders
         Map<String, String> changedProperties = new HashMap<>();
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
index 4e8fb41..4f59766f 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
@@ -38,7 +38,7 @@ import org.apache.camel.Expression;
 import org.apache.camel.ExpressionFactory;
 import org.apache.camel.NoSuchLanguageException;
 import org.apache.camel.Predicate;
-import org.apache.camel.model.DefinitionPropertyPlaceholderConfigurable;
+import org.apache.camel.model.DefinitionPropertyPlaceholderConfigurer;
 import org.apache.camel.model.OtherAttributesAware;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.Metadata;
@@ -56,7 +56,7 @@ import org.apache.camel.util.ObjectHelper;
 @XmlRootElement
 @XmlType(name = "expression") // must be named expression
 @XmlAccessorType(XmlAccessType.FIELD)
-public class ExpressionDefinition implements Expression, Predicate, OtherAttributesAware, ExpressionFactory, DefinitionPropertyPlaceholderConfigurable {
+public class ExpressionDefinition implements Expression, Predicate, OtherAttributesAware, ExpressionFactory, DefinitionPropertyPlaceholderConfigurer {
     @XmlAttribute
     @XmlID
     private String id;
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreEipAnnotationProcessorHelper.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreEipAnnotationProcessorHelper.java
index 6b49614..93f57a0 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreEipAnnotationProcessorHelper.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreEipAnnotationProcessorHelper.java
@@ -176,7 +176,7 @@ public class CoreEipAnnotationProcessorHelper {
             return;
         }
 
-        TypeElement parent = findTypeElement(processingEnv, roundEnv, "org.apache.camel.model.DefinitionPropertyPlaceholderConfigurable");
+        TypeElement parent = findTypeElement(processingEnv, roundEnv, "org.apache.camel.spi.PropertyPlaceholderConfigurer");
         String def = classElement.getSimpleName().toString();
         String fqnDef = classElement.getQualifiedName().toString();
         String cn = def + "PropertyPlaceholderProvider";
@@ -220,9 +220,9 @@ public class CoreEipAnnotationProcessorHelper {
             w.write("\n");
             w.write("import org.apache.camel.CamelContext;\n");
             w.write("import " + fqnDef + ";\n");
-            w.write("import org.apache.camel.model.DefinitionPropertyPlaceholderConfigurable;\n");
+            w.write("import org.apache.camel.spi.PropertyPlaceholderConfigurer;\n");
             w.write("\n");
-            w.write("public class " + cn + " implements DefinitionPropertyPlaceholderConfigurable {\n");
+            w.write("public class " + cn + " implements PropertyPlaceholderConfigurer {\n");
             w.write("\n");
             w.write("    private final Map<String, Supplier<String>> readPlaceholders = new HashMap<>();\n");
             w.write("    private final Map<String, Consumer<String>> writePlaceholders = new HashMap<>();\n");
@@ -330,16 +330,16 @@ public class CoreEipAnnotationProcessorHelper {
             w.write("import java.util.function.Function;\n");
             w.write("import java.util.function.Supplier;\n");
             w.write("\n");
-            w.write("import org.apache.camel.model.DefinitionPropertyPlaceholderConfigurable;\n");
+            w.write("import org.apache.camel.spi.PropertyPlaceholderConfigurer;\n");
             for (String def : propertyPlaceholderDefinitions) {
                 w.write("import " + def + ";\n");
             }
             w.write("\n");
             w.write("public class DefinitionPropertiesPlaceholderProviderHelper {\n");
             w.write("\n");
-            w.write("    private static final Map<Class, Function<Object, DefinitionPropertyPlaceholderConfigurable>> MAP;\n");
+            w.write("    private static final Map<Class, Function<Object, PropertyPlaceholderConfigurer>> MAP;\n");
             w.write("    static {\n");
-            w.write("        Map<Class, Function<Object, DefinitionPropertyPlaceholderConfigurable>> map = new HashMap<>(" + propertyPlaceholderDefinitions.size() + ");\n");
+            w.write("        Map<Class, Function<Object, PropertyPlaceholderConfigurer>> map = new HashMap<>(" + propertyPlaceholderDefinitions.size() + ");\n");
             for (String def : propertyPlaceholderDefinitions) {
                 String cn = def.substring(def.lastIndexOf('.') + 1);
                 w.write("        map.put(" + cn + ".class, " + cn + "PropertyPlaceholderProvider::new);\n");
@@ -347,8 +347,8 @@ public class CoreEipAnnotationProcessorHelper {
             w.write("        MAP = map;\n");
             w.write("    }\n");
             w.write("\n");
-            w.write("    public static Optional<DefinitionPropertyPlaceholderConfigurable> provider(Object definition) {\n");
-            w.write("        Function<Object, DefinitionPropertyPlaceholderConfigurable> func = MAP.get(definition.getClass());\n");
+            w.write("    public static Optional<PropertyPlaceholderConfigurer> provider(Object definition) {\n");
+            w.write("        Function<Object, PropertyPlaceholderConfigurer> func = MAP.get(definition.getClass());\n");
             w.write("        if (func != null) {\n");
             w.write("            return Optional.of(func.apply(definition));\n");
             w.write("        }\n");