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/03/14 18:49:08 UTC

(camel) 08/10: CAMEL-17641: Generate json metadata for pojo beans in camel-core that end users can use such as AggregationStrategy implementations. And have that information in camel-catalog for tooling assistance.

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

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

commit 260468a9922e58fa080fa1bcd9f99e0bd6bba3cc
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 14 18:11:54 2024 +0100

    CAMEL-17641: Generate json metadata for pojo beans in camel-core that end users can use such as AggregationStrategy implementations. And have that information in camel-catalog for tooling assistance.
---
 .../services/org/apache/camel/bean.properties      |  2 +-
 .../camel/bean/DefaultHeaderFilterStrategy.json    | 16 +++++++++
 .../camel/bean/FileIdempotentRepository.json       |  2 +-
 .../camel/bean/MemoryIdempotentRepository.json     |  2 +-
 .../camel/support/DefaultHeaderFilterStrategy.java | 41 +++++++++++++++++++---
 .../idempotent/FileIdempotentRepository.java       |  8 +++--
 .../idempotent/MemoryIdempotentRepository.java     |  2 +-
 .../maven/packaging/GeneratePojoBeanMojo.java      |  8 +++--
 8 files changed, 68 insertions(+), 13 deletions(-)

diff --git a/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean.properties b/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean.properties
index 5a5da2cace5..25ce5d4b2f9 100644
--- a/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean.properties
+++ b/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean.properties
@@ -1,5 +1,5 @@
 # Generated by camel build tools - do NOT edit this file!
-bean=FileIdempotentRepository MemoryIdempotentRepository
+bean=DefaultHeaderFilterStrategy FileIdempotentRepository MemoryIdempotentRepository
 groupId=org.apache.camel
 artifactId=camel-support
 version=4.5.0-SNAPSHOT
diff --git a/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean/DefaultHeaderFilterStrategy.json b/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean/DefaultHeaderFilterStrategy.json
new file mode 100644
index 00000000000..8d359b034cd
--- /dev/null
+++ b/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean/DefaultHeaderFilterStrategy.json
@@ -0,0 +1,16 @@
+{
+  "bean": {
+    "kind": "bean",
+    "name": "DefaultHeaderFilterStrategy",
+    "javaType": "org.apache.camel.support.DefaultHeaderFilterStrategy",
+    "interfaceType": "org.apache.camel.spi.HeaderFilterStrategy",
+    "title": "Default Header Filter Strategy",
+    "description": "The default header filtering strategy. Users can configure which headers is allowed or denied.",
+    "deprecated": true,
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-support",
+    "version": "4.5.0-SNAPSHOT",
+    "options": { "allowNullValues": { "index": 0, "kind": "property", "displayName": "Allow Null Values", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.support.DefaultHeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "false", "description": "Whether to allow null values. By default a header is skipped if its value is null. Setting this to true will preserve the header." }, "caseInsensitive": { "index [...]
+  }
+}
+
diff --git a/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean/FileIdempotentRepository.json b/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean/FileIdempotentRepository.json
index 48cdb0868ab..e40fb4b2bee 100644
--- a/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean/FileIdempotentRepository.json
+++ b/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean/FileIdempotentRepository.json
@@ -10,7 +10,7 @@
     "groupId": "org.apache.camel",
     "artifactId": "camel-support",
     "version": "4.5.0-SNAPSHOT",
-    "options": { "dropOldestFileStore": { "index": 0, "kind": "property", "displayName": "Drop Oldest File Store", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "1000", "description": "Sets the number of oldest entries to drop from the file store when the maximum capacity is hit to reduce disk space to allow room for new entries." }, "fileStore": { "index": 1, "kind": "property", "displayName": "File St [...]
+    "options": { "dropOldestFileStore": { "index": 0, "kind": "property", "displayName": "Drop Oldest File Store", "required": false, "type": "object", "javaType": "org.apache.camel.support.processor.idempotent.FileIdempotentRepository", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "1000", "description": "Sets the number of oldest entries to drop from the file store when the maximum capacity is hit to reduce disk space to allow room for new entries." }, "file [...]
   }
 }
 
diff --git a/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean/MemoryIdempotentRepository.json b/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean/MemoryIdempotentRepository.json
index 84aac9a7c66..4c152136b51 100644
--- a/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean/MemoryIdempotentRepository.json
+++ b/core/camel-support/src/generated/resources/META-INF/services/org/apache/camel/bean/MemoryIdempotentRepository.json
@@ -10,7 +10,7 @@
     "groupId": "org.apache.camel",
     "artifactId": "camel-support",
     "version": "4.5.0-SNAPSHOT",
-    "options": { "cacheSize": { "index": 0, "kind": "property", "displayName": "Cache Size", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "1000", "description": "Maximum elements that can be stored in-memory" } }
+    "options": { "cacheSize": { "index": 0, "kind": "property", "displayName": "Cache Size", "required": false, "type": "object", "javaType": "org.apache.camel.support.processor.idempotent.MemoryIdempotentRepository", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "1000", "description": "Maximum elements that can be stored in-memory" } }
   }
 }
 
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultHeaderFilterStrategy.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultHeaderFilterStrategy.java
index 7a99e29ab16..901af91262f 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultHeaderFilterStrategy.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultHeaderFilterStrategy.java
@@ -23,17 +23,20 @@ import java.util.regex.Pattern;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.HeaderFilterStrategy;
+import org.apache.camel.spi.Metadata;
 
 /**
  * The default header filtering strategy. Users can configure filter by setting filter set and/or setting a regular
  * expression. Subclass can add extended filter logic in
  * {@link #extendedFilter(org.apache.camel.spi.HeaderFilterStrategy.Direction, String, Object, org.apache.camel.Exchange)}
- *
+ * <p>
  * Filters are associated with directions (in or out). "In" direction is referred to propagating headers "to" Camel
  * message. The "out" direction is opposite which is referred to propagating headers from Camel message to a native
  * message like JMS and CXF message. You can see example of DefaultHeaderFilterStrategy are being extended and invoked
  * in camel-jms and camel-cxf components.
  */
+@Metadata(label = "bean",
+          description = "The default header filtering strategy. Users can configure which headers is allowed or denied.")
 public class DefaultHeaderFilterStrategy implements HeaderFilterStrategy {
 
     /**
@@ -49,17 +52,35 @@ public class DefaultHeaderFilterStrategy implements HeaderFilterStrategy {
      */
     public static final String[] CAMEL_FILTER_STARTS_WITH = new String[] { "Camel", "camel", "org.apache.camel." };
 
+    @Metadata(javaType = "java.lang.String",
+              description = "Sets the in direction filter set. The in direction is referred to copying headers from an external message to a Camel message."
+                            + " Multiple patterns can be separated by comma")
     private Set<String> inFilter;
     private Pattern inFilterPattern;
     private String[] inFilterStartsWith;
 
+    @Metadata(javaType = "java.lang.String",
+              description = "Sets the out direction filter set. The out direction is referred to copying headers from a Camel message to an external message."
+                            + " Multiple patterns can be separated by comma")
     private Set<String> outFilter;
     private Pattern outFilterPattern;
     private String[] outFilterStartsWith;
 
+    @Metadata(label = "advanced", defaultValue = "false",
+              description = "Whether header names should be converted to lower case before checking it with the filter Set."
+                            + " It does not affect filtering using regular expression pattern.")
     private boolean lowerCase;
+    @Metadata(label = "advanced", defaultValue = "false",
+              description = "Whether to allow null values. By default a header is skipped if its value is null. Setting this to true will preserve the header.")
     private boolean allowNullValues;
+    @Metadata(label = "advanced", defaultValue = "false",
+              description = "Sets the caseInsensitive property which is a boolean to determine whether header names should be case insensitive"
+                            + " when checking it with the filter set. It does not affect filtering using regular expression pattern.")
     private boolean caseInsensitive;
+    @Metadata(label = "advanced", defaultValue = "true",
+              description = "Sets what to do when a pattern or filter set is matched."
+                            + " When set to true, a match will filter out the header. This is the default value for backwards compatibility."
+                            + " When set to false, the pattern or filter will indicate that the header must be kept; anything not matched will be filtered (skipped).")
     private boolean filterOnMatch = true; // defaults to the previous behaviour
 
     @Override
@@ -96,6 +117,12 @@ public class DefaultHeaderFilterStrategy implements HeaderFilterStrategy {
         outFilter = value;
     }
 
+    public void setOutFilter(String value) {
+        if (value != null) {
+            this.outFilter = Set.of(value.split(","));
+        }
+    }
+
     /**
      * Sets the "out" direction filter by starts with pattern. The "out" direction is referred to copying headers from a
      * Camel message to an external message.
@@ -166,6 +193,12 @@ public class DefaultHeaderFilterStrategy implements HeaderFilterStrategy {
         inFilter = value;
     }
 
+    public void setInFilter(String value) {
+        if (value != null) {
+            this.inFilter = Set.of(value.split(","));
+        }
+    }
+
     /**
      * Sets the "in" direction filter by starts with pattern. The "in" direction is referred to copying headers from an
      * external message to a Camel message.
@@ -255,7 +288,7 @@ public class DefaultHeaderFilterStrategy implements HeaderFilterStrategy {
 
     /**
      * Whether to allow null values.
-     *
+     * <p>
      * By default a header is skipped if its value is null. Setting this to true will preserve the header.
      */
     public void setAllowNullValues(boolean value) {
@@ -269,9 +302,9 @@ public class DefaultHeaderFilterStrategy implements HeaderFilterStrategy {
     /**
      * Sets the filterOnMatch property which is a boolean to determine what to do when a pattern or filter set is
      * matched.
-     *
+     * <p>
      * When set to true, a match will filter out the header. This is the default value for backwards compatibility.
-     *
+     * <p>
      * When set to false, the pattern or filter will indicate that the header must be kept; anything not matched will be
      * filtered (skipped).
      *
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/idempotent/FileIdempotentRepository.java b/core/camel-support/src/main/java/org/apache/camel/support/processor/idempotent/FileIdempotentRepository.java
index c1f4b296ee7..7770ba84ba9 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/processor/idempotent/FileIdempotentRepository.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/processor/idempotent/FileIdempotentRepository.java
@@ -52,7 +52,7 @@ import org.slf4j.LoggerFactory;
  * file store and make room for newer entries.
  */
 @Metadata(label = "bean",
-        description = "A file based IdempotentRepository.")
+          description = "A file based IdempotentRepository.")
 @ManagedResource(description = "File based idempotent repository")
 public class FileIdempotentRepository extends ServiceSupport implements IdempotentRepository {
 
@@ -64,10 +64,12 @@ public class FileIdempotentRepository extends ServiceSupport implements Idempote
 
     @Metadata(description = "File name of the repository (incl directory)", required = true)
     private File fileStore;
-    @Metadata(description = "The maximum file size for the file store in bytes. The default value is 32mb", defaultValue = "" + 32 * 1024 * 1000L)
+    @Metadata(description = "The maximum file size for the file store in bytes. The default value is 32mb",
+              defaultValue = "" + 32 * 1024 * 1000L)
     private long maxFileStoreSize = 32 * 1024 * 1000L; // 32mb store file
     @Metadata(description = "Sets the number of oldest entries to drop from the file store when the maximum capacity is hit to reduce disk"
-                            + " space to allow room for new entries.", defaultValue = "1000")
+                            + " space to allow room for new entries.",
+              defaultValue = "1000")
     private long dropOldestFileStore = 1000;
 
     public FileIdempotentRepository() {
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/idempotent/MemoryIdempotentRepository.java b/core/camel-support/src/main/java/org/apache/camel/support/processor/idempotent/MemoryIdempotentRepository.java
index 22a0d14506e..898489d9bde 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/processor/idempotent/MemoryIdempotentRepository.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/processor/idempotent/MemoryIdempotentRepository.java
@@ -33,7 +33,7 @@ import org.apache.camel.support.service.ServiceSupport;
  * Care should be taken to use a suitable underlying {@link Map} to avoid this class being a memory leak.
  */
 @Metadata(label = "bean",
-        description = "A memory based IdempotentRepository.")
+          description = "A memory based IdempotentRepository.")
 @ManagedResource(description = "Memory based idempotent repository")
 public class MemoryIdempotentRepository extends ServiceSupport implements IdempotentRepository {
     private Map<String, Object> cache;
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GeneratePojoBeanMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GeneratePojoBeanMojo.java
index 4787b307841..f9d3e0f6400 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GeneratePojoBeanMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GeneratePojoBeanMojo.java
@@ -191,8 +191,12 @@ public class GeneratePojoBeanMojo extends AbstractGeneratorMojo {
                         }
                         o.setDisplayName(displayName);
                         o.setDeprecated(fi.hasAnnotation(Deprecated.class));
-                        o.setJavaType(fi.type().name().toString());
-                        o.setType(getType(o.getJavaType(), false, false));
+                        String javaType = annotationValue(ai, "javaType");
+                        if (javaType == null) {
+                            javaType = ci.name().toString();
+                        }
+                        o.setJavaType(javaType);
+                        o.setType(getType(javaType, false, false));
                         o.setDescription(annotationValue(ai, "description"));
                         String enums = annotationValue(ai, "enums");
                         if (enums != null) {