Repository: camel Updated Branches: refs/heads/master f20b7f01e -> 52f04d40d
CAMEL-10636: Component options docs - Include more details like endpoint options. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/52f04d40 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/52f04d40 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/52f04d40 Branch: refs/heads/master Commit: 52f04d40dce7f836944a1970f010bb085c142600 Parents: f20b7f0 Author: Claus Ibsen <davscl...@apache.org> Authored: Thu Dec 22 15:50:48 2016 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu Dec 22 15:50:48 2016 +0100 ---------------------------------------------------------------------- .../springboot/JmsComponentConfiguration.java | 2 +- .../camel/component/jms/JmsComponent.java | 10 +-- .../camel/component/jms/JmsConfiguration.java | 2 +- .../tools/apt/EndpointAnnotationProcessor.java | 70 ++++++++++++-------- .../java/org/apache/camel/spi/Metadata.java | 10 +++ 5 files changed, 60 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/52f04d40/components-starter/camel-jms-starter/src/main/java/org/apache/camel/component/jms/springboot/JmsComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-jms-starter/src/main/java/org/apache/camel/component/jms/springboot/JmsComponentConfiguration.java b/components-starter/camel-jms-starter/src/main/java/org/apache/camel/component/jms/springboot/JmsComponentConfiguration.java index 3fd040a..65b1c6c 100644 --- a/components-starter/camel-jms-starter/src/main/java/org/apache/camel/component/jms/springboot/JmsComponentConfiguration.java +++ b/components-starter/camel-jms-starter/src/main/java/org/apache/camel/component/jms/springboot/JmsComponentConfiguration.java @@ -294,7 +294,7 @@ public class JmsComponentConfiguration { * is the lowest priority and 9 is the highest). The explicitQosEnabled * option must also be enabled in order for this option to have any effect. */ - private Integer priority = 4; + private Integer priority = Integer; /** * Specifies whether to inhibit the delivery of messages published by its * own connection. http://git-wip-us.apache.org/repos/asf/camel/blob/52f04d40/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java index 2d3b5cd..a996f65 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java @@ -265,7 +265,7 @@ public class JmsComponent extends HeaderFilterStrategyComponent implements Appli /** * The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE */ - @Metadata(defaultValue = "AUTO_ACKNOWLEDGE", label = "consumer", + @Metadata(defaultValue = "AUTO_ACKNOWLEDGE", label = "consumer", enums = "SESSION_TRANSACTED,CLIENT_ACKNOWLEDGE,AUTO_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE", description = "The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE") public void setAcknowledgementModeName(String consumerAcknowledgementMode) { getConfiguration().setAcknowledgementModeName(consumerAcknowledgementMode); @@ -294,7 +294,7 @@ public class JmsComponent extends HeaderFilterStrategyComponent implements Appli * Possible values are: CACHE_AUTO, CACHE_CONNECTION, CACHE_CONSUMER, CACHE_NONE, and CACHE_SESSION. * The default setting is CACHE_AUTO. See the Spring documentation and Transactions Cache Levels for more information. */ - @Metadata(defaultValue = "CACHE_AUTO", label = "consumer", + @Metadata(defaultValue = "CACHE_AUTO", label = "consumer", enums = "CACHE_AUTO,CACHE_CONNECTION,CACHE_CONSUMER,CACHE_NONE,CACHE_SESSION", description = "Sets the cache level by name for the underlying JMS resources." + " Possible values are: CACHE_AUTO, CACHE_CONNECTION, CACHE_CONSUMER, CACHE_NONE, and CACHE_SESSION." + " The default setting is CACHE_AUTO. See the Spring documentation and Transactions Cache Levels for more information.") @@ -311,7 +311,7 @@ public class JmsComponent extends HeaderFilterStrategyComponent implements Appli * Note: If using temporary queues then CACHE_NONE is not allowed, * and you must use a higher value such as CACHE_CONSUMER or CACHE_SESSION. */ - @Metadata(label = "producer,advanced", + @Metadata(label = "producer,advanced", enums = "CACHE_AUTO,CACHE_CONNECTION,CACHE_CONSUMER,CACHE_NONE,CACHE_SESSION", description = "Sets the cache level by name for the reply consumer when doing request/reply over JMS." + " This option only applies when using fixed reply queues (not temporary)." + " Camel will by default use: CACHE_CONSUMER for exclusive or shared w/ replyToSelectorName." @@ -401,7 +401,7 @@ public class JmsComponent extends HeaderFilterStrategyComponent implements Appli * Possibles values are those defined by javax.jms.DeliveryMode. * NON_PERSISTENT = 1 and PERSISTENT = 2. */ - @Metadata(label = "producer", + @Metadata(label = "producer", enums = "1,2", description = "Specifies the delivery mode to be used." + " Possibles values are those defined by javax.jms.DeliveryMode." + " NON_PERSISTENT = 1 and PERSISTENT = 2.") @@ -625,7 +625,7 @@ public class JmsComponent extends HeaderFilterStrategyComponent implements Appli * Values greater than 1 specify the message priority when sending (where 0 is the lowest priority and 9 is the highest). * The explicitQosEnabled option must also be enabled in order for this option to have any effect. */ - @Metadata(defaultValue = "" + Message.DEFAULT_PRIORITY, label = "producer", + @Metadata(defaultValue = "" + Message.DEFAULT_PRIORITY, enums = "1,2,3,4,5,6,7,8,9", label = "producer", description = "Values greater than 1 specify the message priority when sending (where 0 is the lowest priority and 9 is the highest)." + " The explicitQosEnabled option must also be enabled in order for this option to have any effect.") public void setPriority(int priority) { http://git-wip-us.apache.org/repos/asf/camel/blob/52f04d40/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java index 6ac017b..b1b9724 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java @@ -401,7 +401,7 @@ public class JmsConfiguration implements Cloneable { + " must be executed synchronously (Camel 3.0 may support async transactions).") private boolean asyncConsumer; // the cacheLevelName of reply manager - @UriParam(label = "producer,advanced", + @UriParam(label = "producer,advanced", enums = "CACHE_AUTO,CACHE_CONNECTION,CACHE_CONSUMER,CACHE_NONE,CACHE_SESSION", description = "Sets the cache level by name for the reply consumer when doing request/reply over JMS." + " This option only applies when using fixed reply queues (not temporary)." + " Camel will by default use: CACHE_CONSUMER for exclusive or shared w/ replyToSelectorName." http://git-wip-us.apache.org/repos/asf/camel/blob/52f04d40/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 c072cc9..82bab2d 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 @@ -96,7 +96,7 @@ public class EndpointAnnotationProcessor extends AbstractProcessor { return true; } - protected void processEndpointClass(final RoundEnvironment roundEnv, final TypeElement classElement) { + private void processEndpointClass(final RoundEnvironment roundEnv, final TypeElement classElement) { final UriEndpoint uriEndpoint = classElement.getAnnotation(UriEndpoint.class); if (uriEndpoint != null) { String scheme = uriEndpoint.scheme(); @@ -108,10 +108,10 @@ public class EndpointAnnotationProcessor extends AbstractProcessor { // for example camel-mail has a bunch of component schema names that does that String[] schemes = scheme.split(","); String[] titles = title.split(","); - String[] extendsSchemes = extendsScheme != null ? extendsScheme.split(",") : null; + String[] extendsSchemes = extendsScheme.split(","); for (int i = 0; i < schemes.length; i++) { final String alias = schemes[i]; - final String extendsAlias = extendsSchemes != null ? (i < extendsSchemes.length ? extendsSchemes[i] : extendsSchemes[0]) : null; + final String extendsAlias = i < extendsSchemes.length ? extendsSchemes[i] : extendsSchemes[0]; String aTitle = i < titles.length ? titles[i] : titles[0]; // some components offer a secure alternative which we need to amend the title accordingly @@ -189,7 +189,7 @@ public class EndpointAnnotationProcessor extends AbstractProcessor { writeHtmlDocumentationAndFieldInjections(writer, roundEnv, componentModel, classElement, "", uriEndpoint.excludeProperties()); - // only if its a consuemr capable component + // only if its a consumer capable component if (uriEndpoint.consumerOnly() || !uriEndpoint.producerOnly()) { // This code is not my fault, it seems to honestly be the hacky way to find a class name in APT :) TypeMirror consumerType = null; @@ -599,7 +599,7 @@ public class EndpointAnnotationProcessor extends AbstractProcessor { String required = metadata != null ? metadata.required() : null; String label = metadata != null ? metadata.label() : null; - boolean secret = metadata != null ? metadata.secret() : false; + boolean secret = metadata != null && metadata.secret(); // we do not yet have default values / notes / as no annotation support yet // String defaultValueNote = param.defaultValueNote(); @@ -628,15 +628,27 @@ public class EndpointAnnotationProcessor extends AbstractProcessor { // gather enums Set<String> enums = new LinkedHashSet<String>(); - boolean isEnum = fieldTypeElement != null && fieldTypeElement.getKind() == ElementKind.ENUM; - if (isEnum) { - TypeElement enumClass = findTypeElement(processingEnv, roundEnv, fieldTypeElement.asType().toString()); - // find all the enum constants which has the possible enum value that can be used - List<VariableElement> fields = ElementFilter.fieldsIn(enumClass.getEnclosedElements()); - for (VariableElement var : fields) { - if (var.getKind() == ElementKind.ENUM_CONSTANT) { - String val = var.toString(); - enums.add(val); + + boolean isEnum; + if (metadata != null && !Strings.isNullOrEmpty(metadata.enums())) { + isEnum = true; + String[] values = metadata.enums().split(","); + for (String val : values) { + enums.add(val); + } + } else { + isEnum = fieldTypeElement != null && fieldTypeElement.getKind() == ElementKind.ENUM; + if (isEnum) { + TypeElement enumClass = findTypeElement(processingEnv, roundEnv, fieldTypeElement.asType().toString()); + if (enumClass != null) { + // find all the enum constants which has the possible enum value that can be used + List<VariableElement> fields = ElementFilter.fieldsIn(enumClass.getEnclosedElements()); + for (VariableElement var : fields) { + if (var.getKind() == ElementKind.ENUM_CONSTANT) { + String val = var.toString(); + enums.add(val); + } + } } } } @@ -689,7 +701,7 @@ public class EndpointAnnotationProcessor extends AbstractProcessor { } String defaultValue = path.defaultValue(); - if (defaultValue == null && metadata != null) { + if (Strings.isNullOrEmpty(defaultValue) && metadata != null) { defaultValue = metadata.defaultValue(); } String defaultValueNote = path.defaultValueNote(); @@ -723,11 +735,13 @@ public class EndpointAnnotationProcessor extends AbstractProcessor { if (isEnum) { TypeElement enumClass = findTypeElement(processingEnv, roundEnv, fieldTypeElement.asType().toString()); // find all the enum constants which has the possible enum value that can be used - List<VariableElement> fields = ElementFilter.fieldsIn(enumClass.getEnclosedElements()); - for (VariableElement var : fields) { - if (var.getKind() == ElementKind.ENUM_CONSTANT) { - String val = var.toString(); - enums.add(val); + if (enumClass != null) { + List<VariableElement> fields = ElementFilter.fieldsIn(enumClass.getEnclosedElements()); + for (VariableElement var : fields) { + if (var.getKind() == ElementKind.ENUM_CONSTANT) { + String val = var.toString(); + enums.add(val); + } } } } @@ -810,12 +824,14 @@ public class EndpointAnnotationProcessor extends AbstractProcessor { isEnum = fieldTypeElement != null && fieldTypeElement.getKind() == ElementKind.ENUM; if (isEnum) { TypeElement enumClass = findTypeElement(processingEnv, roundEnv, fieldTypeElement.asType().toString()); - // find all the enum constants which has the possible enum value that can be used - List<VariableElement> fields = ElementFilter.fieldsIn(enumClass.getEnclosedElements()); - for (VariableElement var : fields) { - if (var.getKind() == ElementKind.ENUM_CONSTANT) { - String val = var.toString(); - enums.add(val); + if (enumClass != null) { + // find all the enum constants which has the possible enum value that can be used + List<VariableElement> fields = ElementFilter.fieldsIn(enumClass.getEnclosedElements()); + for (VariableElement var : fields) { + if (var.getKind() == ElementKind.ENUM_CONSTANT) { + String val = var.toString(); + enums.add(val); + } } } } @@ -860,7 +876,7 @@ public class EndpointAnnotationProcessor extends AbstractProcessor { return false; } - protected static Map<String, String> parseAsMap(String data) { + private 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/52f04d40/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java ---------------------------------------------------------------------- diff --git a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java index 5adebc1..241361e 100644 --- a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java +++ b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java @@ -62,6 +62,16 @@ public @interface Metadata { String description() default ""; /** + * Allows to define enums this options accepts. + * <p/> + * If the type is already an enum, then this option should not be used; instead you can use + * this option when the type is a String that only accept certain values. + * <p/> + * Multiple values is separated by comma. + */ + String enums() default ""; + + /** * Whether the option is secret/sensitive information such as a password. */ boolean secret() default false;