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 603210c7e4f709a36550d3f7e6b1ddd0b65b6e67 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Tue Sep 1 13:54:44 2020 +0200 CAMEL-15478: Component metadata should mark if a component is API based or not --- .../main/java/org/apache/camel/ApiEndpoint.java | 24 ++++++++++++++++++++++ .../support/component/AbstractApiEndpoint.java | 3 ++- .../apache/camel/tooling/model/ComponentModel.java | 9 ++++++++ .../org/apache/camel/tooling/model/JsonMapper.java | 2 ++ .../packaging/EndpointSchemaGeneratorMojo.java | 1 + 5 files changed, 38 insertions(+), 1 deletion(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/ApiEndpoint.java b/core/camel-api/src/main/java/org/apache/camel/ApiEndpoint.java new file mode 100644 index 0000000..bf0c2e8 --- /dev/null +++ b/core/camel-api/src/main/java/org/apache/camel/ApiEndpoint.java @@ -0,0 +1,24 @@ +/* + * 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; + +/** + * Marks the {@link Endpoint} as an endpoint from an API based component. + */ +public interface ApiEndpoint extends Endpoint { + +} diff --git a/core/camel-support/src/main/java/org/apache/camel/support/component/AbstractApiEndpoint.java b/core/camel-support/src/main/java/org/apache/camel/support/component/AbstractApiEndpoint.java index 3bb45bf..363fd26 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/component/AbstractApiEndpoint.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/component/AbstractApiEndpoint.java @@ -26,6 +26,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; +import org.apache.camel.ApiEndpoint; import org.apache.camel.CamelContext; import org.apache.camel.Component; import org.apache.camel.spi.ExecutorServiceManager; @@ -41,7 +42,7 @@ import org.slf4j.LoggerFactory; */ public abstract class AbstractApiEndpoint<E extends ApiName, T> extends ScheduledPollEndpoint - implements PropertyNamesInterceptor, PropertiesInterceptor { + implements ApiEndpoint, PropertyNamesInterceptor, PropertiesInterceptor { // thread pool executor with Endpoint Class name as keys private static Map<String, ExecutorService> executorServiceMap = new ConcurrentHashMap<>(); diff --git a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/ComponentModel.java b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/ComponentModel.java index 71420d7..dd1efac 100644 --- a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/ComponentModel.java +++ b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/ComponentModel.java @@ -28,6 +28,7 @@ public class ComponentModel extends ArtifactModel<ComponentModel.ComponentOption protected String syntax; protected String alternativeSyntax; protected boolean async; + protected boolean api; protected boolean consumerOnly; protected boolean producerOnly; protected boolean lenientProperties; @@ -90,6 +91,14 @@ public class ComponentModel extends ArtifactModel<ComponentModel.ComponentOption this.async = async; } + public boolean isApi() { + return api; + } + + public void setApi(boolean api) { + this.api = api; + } + public boolean isConsumerOnly() { return consumerOnly; } diff --git a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java index 3a8c041..fdba0c2 100644 --- a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java +++ b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java @@ -109,6 +109,7 @@ public final class JsonMapper { model.setSyntax(mobj.getString("syntax")); model.setAlternativeSyntax(mobj.getString("alternativeSyntax")); model.setAsync(mobj.getBooleanOrDefault("async", false)); + model.setApi(mobj.getBooleanOrDefault("api", false)); model.setConsumerOnly(mobj.getBooleanOrDefault("consumerOnly", false)); model.setProducerOnly(mobj.getBooleanOrDefault("producerOnly", false)); model.setLenientProperties(mobj.getBooleanOrDefault("lenientProperties", false)); @@ -136,6 +137,7 @@ public final class JsonMapper { obj.put("syntax", model.getSyntax()); obj.put("alternativeSyntax", model.getAlternativeSyntax()); obj.put("async", model.isAsync()); + obj.put("api", model.isApi()); obj.put("consumerOnly", model.isConsumerOnly()); obj.put("producerOnly", model.isProducerOnly()); obj.put("lenientProperties", model.isLenientProperties()); 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 ec7c64a..1221ad5 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 @@ -486,6 +486,7 @@ public class EndpointSchemaGeneratorMojo extends AbstractGeneratorMojo { model.setProducerOnly(uriEndpoint.producerOnly()); model.setLenientProperties(uriEndpoint.lenientProperties()); model.setAsync(loadClass("org.apache.camel.AsyncEndpoint").isAssignableFrom(endpointClassElement)); + model.setApi(loadClass("org.apache.camel.ApiEndpoint").isAssignableFrom(endpointClassElement)); // what is the first version this component was added to Apache Camel String firstVersion = uriEndpoint.firstVersion();