You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2022/03/22 17:55:49 UTC
[camel] branch main updated: CAMEL-16628: Allow to define headers in an enum (#7247)
This is an automated email from the ASF dual-hosted git repository.
nfilotto pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 5e0f41c CAMEL-16628: Allow to define headers in an enum (#7247)
5e0f41c is described below
commit 5e0f41cb366d07d96a68ffc83319d2c86c0abe5d
Author: Nicolas Filotto <es...@users.noreply.github.com>
AuthorDate: Tue Mar 22 18:55:05 2022 +0100
CAMEL-16628: Allow to define headers in an enum (#7247)
## Motivation
There are components that define their constants in an enum so it should be supported too.
## Modifications
* Check if the header class is an enum and if so accept any field annotated with `@Metadata`
* Use the name of the field as header name in case of an enum
---
.../maven/packaging/EndpointSchemaGeneratorMojo.java | 7 +++++--
.../maven/packaging/EndpointSchemaGeneratorMojoTest.java | 14 +++++++++-----
.../camel/maven/packaging/endpoint/SomeConstants.java | 4 ++--
...Constants.java => SomeEndpointUsingEnumConstants.java} | 15 +++------------
.../{SomeConstants.java => SomeEnumConstants.java} | 9 +++------
5 files changed, 22 insertions(+), 27 deletions(-)
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java
index 68fc70d..5ae8dbf 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java
@@ -316,8 +316,9 @@ public class EndpointSchemaGeneratorMojo extends AbstractGeneratorMojo {
}
// A header class has been defined
boolean foundHeader = false;
+ final boolean isEnum = headersClass.isEnum();
for (Field field : headersClass.getDeclaredFields()) {
- if (isStatic(field.getModifiers()) && field.getType() == String.class
+ if ((isEnum || isStatic(field.getModifiers()) && field.getType() == String.class)
&& field.isAnnotationPresent(Metadata.class)) {
getLog().debug(
String.format("Trying to add the constant %s in the class %s as header.", field.getName(),
@@ -381,7 +382,9 @@ public class EndpointSchemaGeneratorMojo extends AbstractGeneratorMojo {
}
try {
field.trySetAccessible();
- header.setName((String) field.get(null));
+ // The name of the header is either the name of the field in case of an enum, otherwise it is the value
+ // of the field as we assume that it is a String constant
+ header.setName(field.getType().isEnum() ? field.getName() : (String) field.get(null));
componentModel.addEndpointHeader(header);
} catch (IllegalAccessException e) {
getLog().debug(String.format("The field %s in class %s cannot be accessed", field.getName(),
diff --git a/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojoTest.java b/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojoTest.java
index d64649b..9032107 100644
--- a/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojoTest.java
+++ b/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojoTest.java
@@ -20,6 +20,7 @@ import java.nio.file.Paths;
import java.util.List;
import org.apache.camel.maven.packaging.endpoint.SomeEndpoint;
+import org.apache.camel.maven.packaging.endpoint.SomeEndpointUsingEnumConstants;
import org.apache.camel.maven.packaging.endpoint.SomeEndpointWithBadHeaders;
import org.apache.camel.maven.packaging.endpoint.SomeEndpointWithFilter;
import org.apache.camel.maven.packaging.endpoint.SomeEndpointWithoutHeaders;
@@ -29,6 +30,8 @@ import org.apache.camel.tooling.model.ComponentModel.EndpointHeaderModel;
import org.apache.maven.project.MavenProject;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -52,15 +55,16 @@ class EndpointSchemaGeneratorMojoTest {
mojo.project = new MavenProject();
}
- @Test
- void testCanRetrieveMetadataOfHeaders() {
- mojo.addEndpointHeaders(model, SomeEndpoint.class.getAnnotation(UriEndpoint.class), "some");
+ @ParameterizedTest
+ @ValueSource(classes = { SomeEndpoint.class, SomeEndpointUsingEnumConstants.class })
+ void testCanRetrieveMetadataOfHeaders(Class<?> clazz) {
+ mojo.addEndpointHeaders(model, clazz.getAnnotation(UriEndpoint.class), "some");
List<EndpointHeaderModel> endpointHeaders = model.getEndpointHeaders();
assertEquals(2, endpointHeaders.size());
// Full
EndpointHeaderModel headerFull = endpointHeaders.get(0);
assertEquals("header", headerFull.getKind());
- assertEquals("name-full", headerFull.getName());
+ assertEquals("KEY_FULL", headerFull.getName());
assertEquals("key full desc", headerFull.getDescription());
assertEquals("my display name", headerFull.getDisplayName());
assertEquals("org.apache.camel.maven.packaging.endpoint.SomeEndpoint$MyEnum", headerFull.getJavaType());
@@ -75,7 +79,7 @@ class EndpointSchemaGeneratorMojoTest {
// Empty
EndpointHeaderModel headerEmpty = endpointHeaders.get(1);
assertEquals("header", headerEmpty.getKind());
- assertEquals("name-empty", headerEmpty.getName());
+ assertEquals("KEY_EMPTY", headerEmpty.getName());
assertTrue(headerEmpty.getDescription().isEmpty());
assertTrue(headerEmpty.getDisplayName().isEmpty());
assertTrue(headerEmpty.getJavaType().isEmpty());
diff --git a/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeConstants.java b/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeConstants.java
index ae4bbb3..f58468d 100644
--- a/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeConstants.java
+++ b/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeConstants.java
@@ -23,9 +23,9 @@ public final class SomeConstants {
@Metadata(description = "key full desc", label = "my label", displayName = "my display name",
javaType = "org.apache.camel.maven.packaging.endpoint.SomeEndpoint$MyEnum", required = true,
defaultValue = "VAL1", deprecationNote = "my deprecated note", secret = true)
- public static final String KEY_FULL = "name-full";
+ public static final String KEY_FULL = "KEY_FULL";
@Metadata
- static final String KEY_EMPTY = "name-empty";
+ static final String KEY_EMPTY = "KEY_EMPTY";
private SomeConstants() {
}
diff --git a/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeConstants.java b/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeEndpointUsingEnumConstants.java
similarity index 61%
copy from tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeConstants.java
copy to tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeEndpointUsingEnumConstants.java
index ae4bbb3..edcb55d 100644
--- a/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeConstants.java
+++ b/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeEndpointUsingEnumConstants.java
@@ -16,17 +16,8 @@
*/
package org.apache.camel.maven.packaging.endpoint;
-import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriEndpoint;
-public final class SomeConstants {
- @Deprecated
- @Metadata(description = "key full desc", label = "my label", displayName = "my display name",
- javaType = "org.apache.camel.maven.packaging.endpoint.SomeEndpoint$MyEnum", required = true,
- defaultValue = "VAL1", deprecationNote = "my deprecated note", secret = true)
- public static final String KEY_FULL = "name-full";
- @Metadata
- static final String KEY_EMPTY = "name-empty";
-
- private SomeConstants() {
- }
+@UriEndpoint(scheme = "some", syntax = "some", title = "some", headersClass = SomeEnumConstants.class)
+public class SomeEndpointUsingEnumConstants {
}
diff --git a/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeConstants.java b/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeEnumConstants.java
similarity index 87%
copy from tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeConstants.java
copy to tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeEnumConstants.java
index ae4bbb3..e00be68 100644
--- a/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeConstants.java
+++ b/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeEnumConstants.java
@@ -18,15 +18,12 @@ package org.apache.camel.maven.packaging.endpoint;
import org.apache.camel.spi.Metadata;
-public final class SomeConstants {
+public enum SomeEnumConstants {
@Deprecated
@Metadata(description = "key full desc", label = "my label", displayName = "my display name",
javaType = "org.apache.camel.maven.packaging.endpoint.SomeEndpoint$MyEnum", required = true,
defaultValue = "VAL1", deprecationNote = "my deprecated note", secret = true)
- public static final String KEY_FULL = "name-full";
+ KEY_FULL,
@Metadata
- static final String KEY_EMPTY = "name-empty";
-
- private SomeConstants() {
- }
+ KEY_EMPTY;
}