Component docs - Allow to exclude inherited properties
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/420fd084 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/420fd084 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/420fd084 Branch: refs/heads/master Commit: 420fd08446a02759d14cc7c2f67b079137eeb0e8 Parents: 1189692 Author: Claus Ibsen <[email protected]> Authored: Wed Jan 6 09:47:30 2016 +0100 Committer: Claus Ibsen <[email protected]> Committed: Wed Jan 6 11:36:27 2016 +0100 ---------------------------------------------------------------------- .../atmosphere/websocket/WebsocketEndpoint.java | 3 +- .../tools/apt/EndpointAnnotationProcessor.java | 36 +++++++++++++++----- .../java/org/apache/camel/spi/UriEndpoint.java | 8 +++++ 3 files changed, 38 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/420fd084/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketEndpoint.java b/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketEndpoint.java index 1feabef..8790443 100644 --- a/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketEndpoint.java +++ b/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketEndpoint.java @@ -32,7 +32,8 @@ import org.apache.camel.spi.UriPath; * To exchange data with external Websocket clients using Atmosphere. */ @UriEndpoint(scheme = "atmosphere-websocket", extendsScheme = "servlet", title = "Atmosphere Websocket", - syntax = "atmosphere-websocket:servicePath", consumerClass = WebsocketConsumer.class, label = "websocket") + syntax = "atmosphere-websocket:servicePath", consumerClass = WebsocketConsumer.class, label = "websocket", + excludeProperties = "httpUri,contextPath") public class WebsocketEndpoint extends ServletEndpoint { private WebSocketStore store; http://git-wip-us.apache.org/repos/asf/camel/blob/420fd084/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java ---------------------------------------------------------------------- diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java index b35512b..9c7a65d 100644 --- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java +++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java @@ -149,7 +149,7 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor { writer.println("<b>Deprecated:</b>" + componentModel.isDeprecated() + "<br/>"); writer.println("<b>Maven:</b> " + componentModel.getGroupId() + "/" + componentModel.getArtifactId() + "/" + componentModel.getVersionId() + "<br/>"); - writeHtmlDocumentationAndFieldInjections(writer, roundEnv, componentModel, classElement, ""); + writeHtmlDocumentationAndFieldInjections(writer, roundEnv, componentModel, classElement, "", uriEndpoint.excludeProperties()); // This code is not my fault, it seems to honestly be the hacky way to find a class name in APT :) TypeMirror consumerType = null; @@ -167,7 +167,7 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor { TypeElement consumerElement = findTypeElement(roundEnv, consumerClassName); if (consumerElement != null) { writer.println("<h2>" + scheme + " consumer" + "</h2>"); - writeHtmlDocumentationAndFieldInjections(writer, roundEnv, componentModel, consumerElement, consumerPrefix); + writeHtmlDocumentationAndFieldInjections(writer, roundEnv, componentModel, consumerElement, consumerPrefix, uriEndpoint.excludeProperties()); found = true; } } @@ -193,7 +193,7 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor { findComponentClassProperties(writer, roundEnv, componentModel, componentOptions, componentClassElement, ""); } - findClassProperties(writer, roundEnv, componentModel, endpointPaths, endpointOptions, classElement, ""); + findClassProperties(writer, roundEnv, componentModel, endpointPaths, endpointOptions, classElement, "", uriEndpoint.excludeProperties()); String json = createParameterJsonSchema(componentModel, componentOptions, endpointPaths, endpointOptions); writer.println(json); @@ -364,7 +364,7 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor { } protected void writeHtmlDocumentationAndFieldInjections(PrintWriter writer, RoundEnvironment roundEnv, ComponentModel componentModel, - TypeElement classElement, String prefix) { + TypeElement classElement, String prefix, String excludeProperties) { String classDoc = processingEnv.getElementUtils().getDocComment(classElement); if (!isNullOrEmpty(classDoc)) { // remove dodgy @version that we may have in class javadoc @@ -375,7 +375,7 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor { Set<EndpointPath> endpointPaths = new LinkedHashSet<EndpointPath>(); Set<EndpointOption> endpointOptions = new LinkedHashSet<EndpointOption>(); - findClassProperties(writer, roundEnv, componentModel, endpointPaths, endpointOptions, classElement, prefix); + findClassProperties(writer, roundEnv, componentModel, endpointPaths, endpointOptions, classElement, prefix, excludeProperties); // sort the endpoint options in the standard order we prefer List<EndpointPath> paths = new ArrayList<EndpointPath>(); @@ -603,7 +603,7 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor { protected void findClassProperties(PrintWriter writer, RoundEnvironment roundEnv, ComponentModel componentModel, Set<EndpointPath> endpointPaths, Set<EndpointOption> endpointOptions, - TypeElement classElement, String prefix) { + TypeElement classElement, String prefix, String excludeProperties) { Elements elementUtils = processingEnv.getElementUtils(); while (true) { List<VariableElement> fieldElements = ElementFilter.fieldsIn(classElement.getEnclosedElements()); @@ -621,6 +621,11 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor { } name = prefix + name; + // should we exclude the name? + if (excludeProperty(excludeProperties, name)) { + continue; + } + String defaultValue = path.defaultValue(); if (defaultValue == null && metadata != null) { defaultValue = metadata.defaultValue(); @@ -685,6 +690,11 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor { } name = prefix + name; + // should we exclude the name? + if (excludeProperty(excludeProperties, name)) { + continue; + } + String paramOptionalPrefix = param.optionalPrefix(); String paramPrefix = param.prefix(); boolean multiValue = param.multiValue(); @@ -713,7 +723,7 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor { if (!isNullOrEmpty(extraPrefix)) { nestedPrefix += extraPrefix; } - findClassProperties(writer, roundEnv, componentModel, endpointPaths, endpointOptions, fieldTypeElement, nestedPrefix); + findClassProperties(writer, roundEnv, componentModel, endpointPaths, endpointOptions, fieldTypeElement, nestedPrefix, excludeProperties); } else { String docComment = findJavaDoc(elementUtils, fieldElement, fieldName, name, classElement, false); if (isNullOrEmpty(docComment)) { @@ -773,7 +783,17 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor { } } - protected Map<String, String> parseAsMap(String data) { + private static boolean excludeProperty(String excludeProperties, String name) { + String[] excludes = excludeProperties.split(","); + for (String exclude : excludes) { + if (name.equals(exclude)) { + return true; + } + } + return false; + } + + protected static Map<String, String> parseAsMap(String data) { Map<String, String> answer = new HashMap<String, String>(); String[] lines = data.split("\n"); for (String line : lines) { http://git-wip-us.apache.org/repos/asf/camel/blob/420fd084/tooling/spi-annotations/src/main/java/org/apache/camel/spi/UriEndpoint.java ---------------------------------------------------------------------- diff --git a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/UriEndpoint.java b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/UriEndpoint.java index e989ce9..b557d51 100644 --- a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/UriEndpoint.java +++ b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/UriEndpoint.java @@ -130,4 +130,12 @@ public @interface UriEndpoint { */ boolean lenientProperties() default false; + /** + * To exclude one or more properties in this endpoint. + * <p/> + * This is used when a Camel component extend another component, and then may need to not use some of the properties from + * the parent component. Multiple properties can be separated by comma. + */ + String excludeProperties() default ""; + } \ No newline at end of file
