This is an automated email from the ASF dual-hosted git repository. klease 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 45011446254 CAMEL-18704: generate headers metadata for component/endpoint superclasses (#8721) 45011446254 is described below commit 450114462545f997413eb2d627d5100458a8f394 Author: klease <38634989+kle...@users.noreply.github.com> AuthorDate: Wed Nov 16 11:47:56 2022 +0100 CAMEL-18704: generate headers metadata for component/endpoint superclasses (#8721) Exclude inherited header keys which alredy exist on the component. Add a test case. --- .../packaging/EndpointSchemaGeneratorMojo.java | 5 +++ .../packaging/EndpointSchemaGeneratorMojoTest.java | 22 ++++++++++++ .../packaging/endpoint/SomeExtendingConstants.java | 32 +++++++++++++++++ .../packaging/endpoint/SomeExtendingEndpoint.java | 41 ++++++++++++++++++++++ 4 files changed, 100 insertions(+) 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 0c5cbd86340..a660809db55 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 @@ -620,6 +620,8 @@ public class EndpointSchemaGeneratorMojo extends AbstractGeneratorMojo { = componentModel.getComponentOptions().stream().map(BaseOptionModel::getName).collect(Collectors.toSet()); Set<String> endpointOptionNames = componentModel.getEndpointOptions().stream().map(BaseOptionModel::getName).collect(Collectors.toSet()); + Set<String> headerNames + = componentModel.getEndpointHeaders().stream().map(BaseOptionModel::getName).collect(Collectors.toSet()); Collections.addAll(componentOptionNames, excludedComponentProperties.split(",")); Collections.addAll(endpointOptionNames, excludedEndpointProperties.split(",")); parentData.getComponentOptions().stream() @@ -628,6 +630,9 @@ public class EndpointSchemaGeneratorMojo extends AbstractGeneratorMojo { parentData.getEndpointOptions().stream() .filter(option -> !endpointOptionNames.contains(option.getName())) .forEach(option -> componentModel.getEndpointOptions().add(option)); + parentData.getEndpointHeaders().stream() + .filter(header -> !headerNames.contains(header.getName())) + .forEach(header -> componentModel.getEndpointHeaders().add(header)); } } 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 08da2b57c84..b717f0343e0 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 @@ -30,6 +30,7 @@ import org.apache.camel.maven.packaging.endpoint.SomeEndpointWithHeaderClassHier import org.apache.camel.maven.packaging.endpoint.SomeEndpointWithHeaderInterfaceHierarchy; import org.apache.camel.maven.packaging.endpoint.SomeEndpointWithJavadocAsDescription; import org.apache.camel.maven.packaging.endpoint.SomeEndpointWithoutHeaders; +import org.apache.camel.maven.packaging.endpoint.SomeExtendingEndpoint; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.tooling.model.ComponentModel; import org.apache.camel.tooling.model.ComponentModel.EndpointHeaderModel; @@ -191,4 +192,25 @@ class EndpointSchemaGeneratorMojoTest { endpoint.headersNameProvider() + (clazz.getName().contains("Method") ? "()" : "")), header.getConstantName()); } + + @Test + void testEndpointWithHeadersOnSelfAndSuperclass() { + ComponentModel parentModel = new ComponentModel(); + mojo.addEndpointHeaders(parentModel, SomeEndpoint.class.getAnnotation(UriEndpoint.class), "some"); + assertEquals(3, parentModel.getEndpointHeaders().size()); + mojo.addEndpointHeaders(model, SomeExtendingEndpoint.class.getAnnotation(UriEndpoint.class), "someext"); + mojo.enhanceComponentModel(model, parentModel, "", ""); + List<EndpointHeaderModel> endpointHeaders = model.getEndpointHeaders(); + assertEquals(4, endpointHeaders.size()); + EndpointHeaderModel headerExtended = endpointHeaders.get(1); + assertEquals("header", headerExtended.getKind()); + assertEquals("key on extended class", headerExtended.getDescription()); + EndpointHeaderModel headerOverridden = endpointHeaders.get(0); + assertEquals("header", headerOverridden.getKind()); + assertEquals("key on extended overriding parent", headerOverridden.getDescription()); + EndpointHeaderModel headerFromParent = endpointHeaders.get(3); + assertEquals("header", headerFromParent.getKind()); + assertEquals("KEY_EMPTY_WITH_JAVA_DOC", headerFromParent.getName()); + + } } diff --git a/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeExtendingConstants.java b/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeExtendingConstants.java new file mode 100644 index 00000000000..7aeb72191e9 --- /dev/null +++ b/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeExtendingConstants.java @@ -0,0 +1,32 @@ +/* + * 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.maven.packaging.endpoint; + +import org.apache.camel.spi.Metadata; + +public final class SomeExtendingConstants { + @Metadata(description = "key on extended overriding parent", label = "my label", displayName = "my extended display name", + javaType = "org.apache.camel.maven.packaging.endpoint.SomeEndpoint$MyEnum", required = true, + defaultValue = "VAL1", secret = true) + public static final String KEY_FULL = "KEY_FULL"; + + @Metadata(description = "key on extended class") + public static final String KEY_EXTENDED = "KEY_EXTENDED"; + + private SomeExtendingConstants() { + } +} diff --git a/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeExtendingEndpoint.java b/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeExtendingEndpoint.java new file mode 100644 index 00000000000..11466af7116 --- /dev/null +++ b/tooling/maven/camel-package-maven-plugin/src/test/java/org/apache/camel/maven/packaging/endpoint/SomeExtendingEndpoint.java @@ -0,0 +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 + * + * 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.maven.packaging.endpoint; + +import org.apache.camel.spi.Metadata; +import org.apache.camel.spi.UriEndpoint; +import org.apache.camel.spi.UriPath; + +@UriEndpoint(scheme = "someext", syntax = "someext", title = "someext", headersClass = SomeExtendingConstants.class) +public class SomeExtendingEndpoint extends SomeEndpoint { + + @UriPath(description = "Port of the Foo server") + @Metadata(required = true) + private int port; + + public int getPort() { + return port; + } + + /** + * Port of the Foo server + */ + public void setPort(int port) { + this.port = port; + } + +}