You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by va...@apache.org on 2020/10/13 20:38:24 UTC
[camel-kafka-connector] 01/03: fix #563: better handling of options
without a default value.
This is an automated email from the ASF dual-hosted git repository.
valdar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-kafka-connector.git
commit 15059129c3e85c19c1ab0846032326ef5ec47b62
Author: Andrea Tarocchi <an...@gmail.com>
AuthorDate: Tue Oct 13 21:30:51 2020 +0200
fix #563: better handling of options without a default value.
---
.../maven/CamelKafkaConnectorUpdateMojo.java | 98 +++++++++++-----------
.../maven/utils/JsonMapperKafkaConnector.java | 4 +-
.../camel-kafka-connector-sink-options.mvel | 2 +-
.../camel-kafka-connector-source-options.mvel | 2 +-
4 files changed, 56 insertions(+), 50 deletions(-)
diff --git a/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/CamelKafkaConnectorUpdateMojo.java b/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/CamelKafkaConnectorUpdateMojo.java
index 6d888a9..03ca7ee 100644
--- a/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/CamelKafkaConnectorUpdateMojo.java
+++ b/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/CamelKafkaConnectorUpdateMojo.java
@@ -109,6 +109,13 @@ public class CamelKafkaConnectorUpdateMojo extends AbstractCamelKafkaConnectorMo
private static final Map<String, String> RESERVED_WORDS_SUBSTITUTION_MAP;
+ private static final String CONFIG_DEF_TYPE_STRING = "ConfigDef.Type.STRING";
+ private static final String CONFIG_DEF_IMPORTANCE_LOW = "ConfigDef.Importance.LOW";
+ private static final String CONFIG_DEF_IMPORTANCE_MEDIUM = "ConfigDef.Importance.MEDIUM";
+ private static final String CONFIG_DEF_IMPORTANCE_HIGH = "ConfigDef.Importance.HIGH";
+ private static final String CONFIG_DEF_IMPORTANCE_PREFIX = "ConfigDef.Importance.";
+ private static final String CONFIG_DEF_NO_DEFAULT_VALUE = "ConfigDef.NO_DEFAULT_VALUE";
+
static {
PRIMITIVE_TYPES_TO_CLASS_MAP = new HashMap<>();
PRIMITIVE_TYPES_TO_CLASS_MAP.put("boolean", Boolean.class);
@@ -570,6 +577,8 @@ public class CamelKafkaConnectorUpdateMojo extends AbstractCamelKafkaConnectorMo
File docFileWebsite = new File(docFolderWebsite, getMainDepArtifactId() + "-kafka-" + ct.name().toLowerCase() + "-connector.adoc");
String changed = templateAutoConfigurationOptions(listOptions, getMainDepArtifactId(), connectorDir, ct, packageName + "." + javaClassConnectorName, convertersList,
transformsList, aggregationStrategiesList);
+
+
boolean updated = updateAutoConfigureOptions(docFile, changed);
if (updated) {
getLog().info("Updated doc file: " + docFile);
@@ -598,84 +607,79 @@ public class CamelKafkaConnectorUpdateMojo extends AbstractCamelKafkaConnectorMo
}
private void addConnectorOptions(String sanitizedName, ConnectorType ct, JavaClass javaClass, Method confMethod, String propertyQualifier, String firstNamespace,
- String secondNamespace, BaseOptionModel epo, List<CamelKafkaConnectorOptionModel> listOptions) {
- String propertyName = epo.getName();
+ String secondNamespace, BaseOptionModel baseOptionModel, List<CamelKafkaConnectorOptionModel> listOptions) {
+ String propertyName = baseOptionModel.getName();
String regex = "([A-Z][a-z]+)";
String replacement = "$1_";
String propertyPrefix = "CAMEL_" + ct + "_" + sanitizedName.replace("-", "").toUpperCase() + "_" + propertyQualifier.toUpperCase() + "_"
+ StringUtils.capitalize(propertyName).replaceAll(regex, replacement).toUpperCase();
- String propertyValue = "camel." + firstNamespace + "." + secondNamespace + "." + epo.getName();
+ String propertyValue = "camel." + firstNamespace + "." + secondNamespace + "." + baseOptionModel.getName();
String confFieldName = propertyPrefix + "CONF";
javaClass.addField().setFinal(true).setPublic().setStatic(true).setName(confFieldName).setType(String.class).setStringInitializer(propertyValue);
String docFieldName = propertyPrefix + "DOC";
- String docLiteralInitializer = epo.getDescription();
- if (epo.getEnums() != null && !epo.getEnums().isEmpty()) {
+ String docLiteralInitializer = baseOptionModel.getDescription();
+ if (baseOptionModel.getEnums() != null && !baseOptionModel.getEnums().isEmpty()) {
docLiteralInitializer = docLiteralInitializer + " One of:";
- String enumOptionListing = epo.getEnums().stream().reduce("", (s, s2) -> s + " [" + s2 + "]");
+ String enumOptionListing = baseOptionModel.getEnums().stream().reduce("", (s, s2) -> s + " [" + s2 + "]");
docLiteralInitializer = docLiteralInitializer + enumOptionListing;
}
javaClass.addField().setFinal(true).setPublic().setStatic(true).setName(docFieldName).setType(String.class).setStringInitializer(docLiteralInitializer);
String defaultFieldName = propertyPrefix + "DEFAULT";
- Class<?> defaultValueClass = PRIMITIVE_TYPES_TO_CLASS_MAP.getOrDefault(epo.getShortJavaType(), String.class);
- String type = epo.getType();
- String defaultValueClassLiteralInitializer = epo.getDefaultValue() == null ? "null" : epo.getDefaultValue().toString();
- if (!defaultValueClassLiteralInitializer.equals("null") && defaultValueClass.equals(String.class)) {
- defaultValueClassLiteralInitializer = "\"" + defaultValueClassLiteralInitializer + "\"";
- } else if (!defaultValueClassLiteralInitializer.equals("null") && defaultValueClass.equals(Long.class)) {
- if (!type.equalsIgnoreCase("duration")) {
- defaultValueClassLiteralInitializer = defaultValueClassLiteralInitializer + "L";
- } else {
- if (defaultValueClassLiteralInitializer.endsWith("ms")) {
- defaultValueClassLiteralInitializer = StringUtils.removeEnd(defaultValueClassLiteralInitializer, "ms") + "L";
- } else {
- defaultValueClassLiteralInitializer = TimeUtils.toMilliSeconds(defaultValueClassLiteralInitializer) + "L";
- }
+ Class<?> defaultValueClass = PRIMITIVE_TYPES_TO_CLASS_MAP.getOrDefault(baseOptionModel.getShortJavaType(), String.class);
+ String type = baseOptionModel.getType();
+
+ String defaultValueClassLiteralInitializer;
+ if (baseOptionModel.getDefaultValue() == null) {
+ //Handling null default camel options values (that means there is no default value).
+ defaultValueClassLiteralInitializer = "null";
+ } else {
+ defaultValueClassLiteralInitializer = baseOptionModel.getDefaultValue().toString();
+ if (defaultValueClass.equals(String.class)) {
+ defaultValueClassLiteralInitializer = "\"" + defaultValueClassLiteralInitializer + "\"";
}
- } else if (!defaultValueClassLiteralInitializer.equals("null") && defaultValueClass.equals(Integer.class)) {
- if (!type.equalsIgnoreCase("duration")) {
- defaultValueClassLiteralInitializer = defaultValueClassLiteralInitializer + "";
- } else {
- if (defaultValueClassLiteralInitializer.endsWith("ms")) {
- defaultValueClassLiteralInitializer = StringUtils.removeEnd(defaultValueClassLiteralInitializer, "ms") + "";
- } else {
- defaultValueClassLiteralInitializer = TimeUtils.toMilliSeconds(defaultValueClassLiteralInitializer) + "";
+
+ if (defaultValueClass.equals(Long.class) || defaultValueClass.equals(Integer.class) || defaultValueClass.equals(int.class)) {
+ if (type.equalsIgnoreCase("duration")) {
+ if (defaultValueClassLiteralInitializer.endsWith("ms")) {
+ defaultValueClassLiteralInitializer = StringUtils.removeEnd(defaultValueClassLiteralInitializer, "ms");
+ } else {
+ defaultValueClassLiteralInitializer = Long.toString(TimeUtils.toMilliSeconds(defaultValueClassLiteralInitializer));
+ }
}
- }
- } else if (!defaultValueClassLiteralInitializer.equals("null") && defaultValueClass.equals(int.class)) {
- if (!type.equalsIgnoreCase("duration")) {
- defaultValueClassLiteralInitializer = defaultValueClassLiteralInitializer + "";
- } else {
- if (defaultValueClassLiteralInitializer.endsWith("ms")) {
- defaultValueClassLiteralInitializer = StringUtils.removeEnd(defaultValueClassLiteralInitializer, "ms") + "";
- } else {
- defaultValueClassLiteralInitializer = TimeUtils.toMilliSeconds(defaultValueClassLiteralInitializer) + "";
+
+ if (defaultValueClass.equals(Long.class) && !defaultValueClassLiteralInitializer.endsWith("L")) {
+ defaultValueClassLiteralInitializer = defaultValueClassLiteralInitializer + "L";
}
}
- } else if (!defaultValueClassLiteralInitializer.equals("null") && defaultValueClass.equals(Float.class)) {
- defaultValueClassLiteralInitializer = defaultValueClassLiteralInitializer + "F";
- } else if (!defaultValueClassLiteralInitializer.equals("null") && defaultValueClass.equals(Double.class)) {
- defaultValueClassLiteralInitializer = defaultValueClassLiteralInitializer + "D";
+
+ if (defaultValueClass.equals(Float.class)) {
+ defaultValueClassLiteralInitializer = defaultValueClassLiteralInitializer + "F";
+ }
+
+ if (defaultValueClass.equals(Double.class)) {
+ defaultValueClassLiteralInitializer = defaultValueClassLiteralInitializer + "D";
+ }
}
+
javaClass.addField().setFinal(true).setPublic().setStatic(true).setName(defaultFieldName).setType(defaultValueClass)
.setLiteralInitializer(defaultValueClassLiteralInitializer);
- String confType = PRIMITIVE_TYPES_TO_KAFKA_CONFIG_DEF_MAP.getOrDefault(epo.getShortJavaType(), "ConfigDef.Type.STRING");
- String confPriority = epo.isDeprecated() ? "ConfigDef.Importance.LOW" : "ConfigDef.Importance.MEDIUM";
- confPriority = epo.isRequired() ? "ConfigDef.Importance.HIGH" : confPriority;
+ String confType = PRIMITIVE_TYPES_TO_KAFKA_CONFIG_DEF_MAP.getOrDefault(baseOptionModel.getShortJavaType(), CONFIG_DEF_TYPE_STRING);
+ String confPriority = baseOptionModel.isDeprecated() ? CONFIG_DEF_IMPORTANCE_LOW : CONFIG_DEF_IMPORTANCE_MEDIUM;
+ confPriority = baseOptionModel.isRequired() ? CONFIG_DEF_IMPORTANCE_HIGH : confPriority;
confMethod.setBody(confMethod.getBody() + "conf.define(" + confFieldName + ", " + confType + ", " + defaultFieldName + ", " + confPriority + ", " + docFieldName + ");\n");
CamelKafkaConnectorOptionModel optionModel = new CamelKafkaConnectorOptionModel();
optionModel.setName(propertyValue);
optionModel.setDescription(docLiteralInitializer);
- optionModel.setPriority(StringUtils.removeStart(confPriority, "ConfigDef.Importance."));
- optionModel.setDefaultValue(defaultValueClassLiteralInitializer);
+ optionModel.setPriority(StringUtils.removeStart(confPriority, CONFIG_DEF_IMPORTANCE_PREFIX));
+ optionModel.setDefaultValue(defaultValueClassLiteralInitializer.equals("null") ? null : defaultValueClassLiteralInitializer);
listOptions.add(optionModel);
-
}
private String templateAutoConfigurationOptions(List<CamelKafkaConnectorOptionModel> options, String componentName, File connectorDir, ConnectorType ct, String connectorClass,
diff --git a/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/utils/JsonMapperKafkaConnector.java b/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/utils/JsonMapperKafkaConnector.java
index afe2815..9f75272 100644
--- a/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/utils/JsonMapperKafkaConnector.java
+++ b/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/utils/JsonMapperKafkaConnector.java
@@ -54,7 +54,9 @@ public final class JsonMapperKafkaConnector {
JsonObject obj = new JsonObject();
obj.put("name", model.getName());
obj.put("description", model.getDescription());
- obj.put("defaultValue", model.getDefaultValue());
+ if (model.getDefaultValue() != null) {
+ obj.put("defaultValue", model.getDefaultValue());
+ }
obj.put("priority", model.getPriority());
return obj;
}
diff --git a/tooling/camel-kafka-connector-generator-maven-plugin/src/main/resources/camel-kafka-connector-sink-options.mvel b/tooling/camel-kafka-connector-generator-maven-plugin/src/main/resources/camel-kafka-connector-sink-options.mvel
index 2664129..d829742 100644
--- a/tooling/camel-kafka-connector-generator-maven-plugin/src/main/resources/camel-kafka-connector-sink-options.mvel
+++ b/tooling/camel-kafka-connector-generator-maven-plugin/src/main/resources/camel-kafka-connector-sink-options.mvel
@@ -30,7 +30,7 @@ The @{title} sink connector supports @{options.size()} options, which are listed
[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Priority
-@foreach{row : options}| *@{row.getShortName(50)}* | @{util.escape(row.description)} | @{row.defaultValue} | @{row.priority}
+@foreach{row : options}| *@{row.getShortName(50)}* | @{util.escape(row.description)} | @{row.defaultValue == "ConfigDef.NO_DEFAULT_VALUE" ? "none" : row.defaultValue} | @{row.priority}
@end{}|===
@end{}
diff --git a/tooling/camel-kafka-connector-generator-maven-plugin/src/main/resources/camel-kafka-connector-source-options.mvel b/tooling/camel-kafka-connector-generator-maven-plugin/src/main/resources/camel-kafka-connector-source-options.mvel
index 342e304..4f25a47 100644
--- a/tooling/camel-kafka-connector-generator-maven-plugin/src/main/resources/camel-kafka-connector-source-options.mvel
+++ b/tooling/camel-kafka-connector-generator-maven-plugin/src/main/resources/camel-kafka-connector-source-options.mvel
@@ -30,7 +30,7 @@ The @{title} source connector supports @{options.size()} options, which are list
[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Priority
-@foreach{row : options}| *@{row.getShortName(50)}* | @{util.escape(row.description)} | @{row.defaultValue} | @{row.priority}
+@foreach{row : options}| *@{row.getShortName(50)}* | @{util.escape(row.description)} | @{row.defaultValue == "ConfigDef.NO_DEFAULT_VALUE" ? "none" : row.defaultValue} | @{row.priority}
@end{}|===
@end{}