CAMEL-11730: camel-connector-maven-plugin : it should be possible to configure connector only properties
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/bc09a41d Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/bc09a41d Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/bc09a41d Branch: refs/heads/master Commit: bc09a41da297d0012af31f08ddedbf1f4452d279 Parents: 3a3c05b Author: lburgazzoli <[email protected]> Authored: Fri Sep 1 18:55:42 2017 +0200 Committer: lburgazzoli <[email protected]> Committed: Tue Sep 5 17:00:08 2017 +0200 ---------------------------------------------------------------------- .../camel/maven/connector/ConnectorMojo.java | 39 ++++++++ .../SpringBootAutoConfigurationMojo.java | 34 +++++-- .../maven/connector/model/ComponentModel.java | 9 ++ .../connector/model/ConnectorOptionModel.java | 20 ++++ .../component/connector/ConnectorModel.java | 30 ++++++ .../connector/DefaultConnectorComponent.java | 24 ++--- .../main/resources/camel-connector-schema.json | 2 + .../main/resources/camel-connector-schema.json | 2 + .../PetStoreConnectorAutoConfiguration.java | 98 ++++++++++++++----- .../PetStoreConnectorConfigurationCommon.java | 14 ++- .../main/resources/camel-connector-schema.json | 2 + .../src/main/resources/camel-connector.json | 2 +- ...UpsertContactConnectorAutoConfiguration.java | 99 +++++++++++++++----- ...sertContactConnectorConfigurationCommon.java | 3 +- .../main/resources/camel-connector-schema.json | 4 +- .../src/main/resources/camel-connector.json | 2 +- ...witterMentionConnectorAutoConfiguration.java | 18 ++-- ...tterMentionConnectorConfigurationCommon.java | 3 +- .../main/resources/camel-connector-schema.json | 2 + .../src/main/resources/camel-connector.json | 2 +- ...TwitterSearchConnectorAutoConfiguration.java | 18 ++-- ...itterSearchConnectorConfigurationCommon.java | 17 +++- .../main/resources/camel-connector-schema.json | 3 + .../src/main/resources/camel-connector.json | 16 +++- .../java/org/foo/TwitterSearchCustomizer.java | 7 ++ .../src/main/resources/application.properties | 3 +- .../main/resources/camel-connector-schema.json | 2 + 27 files changed, 371 insertions(+), 104 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/ConnectorMojo.java ---------------------------------------------------------------------- diff --git a/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/ConnectorMojo.java b/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/ConnectorMojo.java index 2f6d95e..b0471c0 100644 --- a/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/ConnectorMojo.java +++ b/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/ConnectorMojo.java @@ -29,6 +29,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; import com.fasterxml.jackson.core.JsonProcessingException; @@ -124,12 +125,16 @@ public class ConnectorMojo extends AbstractJarMojo { String endpointOptions = buildEndpointOptionsSchema(rows, dto); getLog().debug(endpointOptions); + String connectorOptions = buildConnectorOptionsSchema(dto); + getLog().debug(connectorOptions); + // generate the json file StringBuilder jsonSchema = new StringBuilder(); jsonSchema.append("{\n"); jsonSchema.append(header); jsonSchema.append(componentOptions); jsonSchema.append(endpointOptions); + jsonSchema.append(connectorOptions); jsonSchema.append("}\n"); String newJson = jsonSchema.toString(); @@ -233,6 +238,7 @@ public class ConnectorMojo extends AbstractJarMojo { sb.append(" \"componentProperties\": {\n"); boolean first = true; + for (int i = 0; i < rows.size(); i++) { Map<String, String> row = rows.get(i); String key = row.get("name"); @@ -346,6 +352,39 @@ public class ConnectorMojo extends AbstractJarMojo { sb.append("\n"); } + sb.append(" },\n"); + return sb.toString(); + } + + private String buildConnectorOptionsSchema(Map dto) throws JsonProcessingException { + // find the endpoint options + Map<String, Map> properties = (Map) dto.get("connectorProperties"); + + StringBuilder sb = new StringBuilder(); + sb.append(" \"connectorProperties\": {\n"); + + AtomicBoolean first = new AtomicBoolean(true); + + if (properties != null) { + for (Map.Entry<String, Map> entry: properties.entrySet()) { + Map row = entry.getValue(); + row.put("name", entry.getKey()); + + String line = buildJSonLineFromRow(row); + + if (!first.get()) { + sb.append(",\n"); + } + sb.append(" ").append(line); + + first.set(false); + } + } + + if (!first.get()) { + sb.append("\n"); + } + sb.append(" }\n"); return sb.toString(); } http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/SpringBootAutoConfigurationMojo.java ---------------------------------------------------------------------- diff --git a/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/SpringBootAutoConfigurationMojo.java b/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/SpringBootAutoConfigurationMojo.java index 179d788..00404d3 100644 --- a/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/SpringBootAutoConfigurationMojo.java +++ b/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/SpringBootAutoConfigurationMojo.java @@ -31,6 +31,7 @@ import javax.annotation.PostConstruct; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.camel.maven.connector.model.ComponentModel; import org.apache.camel.maven.connector.model.ComponentOptionModel; +import org.apache.camel.maven.connector.model.ConnectorOptionModel; import org.apache.camel.maven.connector.model.EndpointOptionModel; import org.apache.camel.maven.connector.model.OptionModel; import org.apache.camel.maven.connector.util.JSonSchemaHelper; @@ -113,7 +114,7 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { } // find the component dependency and get its .json file - file = new File(classesDirectory, "camel-component-schema.json"); + file = new File(classesDirectory, "camel-connector-schema.json"); if (file.exists() && javaType != null && connectorScheme != null) { String json = loadText(new FileInputStream(file)); ComponentModel model = generateComponentModel(json); @@ -229,6 +230,10 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { } } + for (OptionModel option : model.getConnectorOptions()) { + addProperty(commonClass, model, option); + } + sortImports(commonClass); writeSourceIfChanged(commonClass, packageName.replaceAll("\\.", "\\/") + "/" + commonName + ".java"); @@ -293,7 +298,7 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { javaClass.addImport(HashMap.class); javaClass.addImport(Map.class); - javaClass.addImport("org.apache.camel.util.IntrospectionSupport"); + javaClass.addImport("org.apache.camel.spring.boot.util.CamelPropertiesHelper"); } javaClass.addImport(javaType); @@ -402,9 +407,8 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { sb.append("\n"); if (hasOptions) { sb.append("Map<String, Object> parameters = new HashMap<>();\n"); - sb.append("IntrospectionSupport.getProperties(configuration, parameters, null, false);\n"); - sb.append("IntrospectionSupport.setProperties(camelContext, camelContext.getTypeConverter(), connector, parameters);\n"); - sb.append("connector.setComponentOptions(parameters);\n"); + sb.append("CamelPropertiesHelper.setCamelProperties(camelContext, connector, parameters, false);\n"); + sb.append("connector.setOptions(parameters);\n"); } sb.append("if (ObjectHelper.isNotEmpty(customizers)) {\n"); sb.append(" for (ConnectorCustomizer<").append(shortJavaType).append("> customizer : customizers) {\n"); @@ -442,9 +446,8 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { sb.append("connector.setCamelContext(camelContext);\n"); sb.append("\n"); sb.append("try {\n"); - sb.append("IntrospectionSupport.getProperties(entry.getValue(), parameters, null, false);\n"); - sb.append("IntrospectionSupport.setProperties(camelContext, camelContext.getTypeConverter(), connector, parameters);\n"); - sb.append("connector.setComponentOptions(parameters);\n"); + sb.append("CamelPropertiesHelper.setCamelProperties(camelContext, connector, parameters, false);\n"); + sb.append("connector.setOptions(parameters);\n"); sb.append("if (ObjectHelper.isNotEmpty(customizers)) {\n"); sb.append(" for (ConnectorCustomizer<").append(shortJavaType).append("> customizer : customizers) {\n"); sb.append("\n"); @@ -580,6 +583,21 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { component.addEndpointOption(option); } + rows = JSonSchemaHelper.parseJsonSchema("connectorProperties", json, true); + for (Map<String, String> row : rows) { + ConnectorOptionModel option = new ConnectorOptionModel(); + option.setName(getSafeValue("name", row)); + option.setDisplayName(getSafeValue("displayName", row)); + option.setKind(getSafeValue("kind", row)); + option.setType(getSafeValue("type", row)); + option.setJavaType(getSafeValue("javaType", row)); + option.setDeprecated(getSafeValue("deprecated", row)); + option.setDescription(getSafeValue("description", row)); + option.setDefaultValue(getSafeValue("defaultValue", row)); + option.setEnums(getSafeValue("enum", row)); + component.addConnectorOption(option); + } + return component; } http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/model/ComponentModel.java ---------------------------------------------------------------------- diff --git a/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/model/ComponentModel.java b/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/model/ComponentModel.java index 0d61b14..2ba33aa 100644 --- a/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/model/ComponentModel.java +++ b/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/model/ComponentModel.java @@ -39,6 +39,7 @@ public class ComponentModel { private String version; private final List<ComponentOptionModel> componentOptions = new ArrayList<>(); private final List<EndpointOptionModel> endpointOptions = new ArrayList<>(); + private final List<ConnectorOptionModel> connectorOptions = new ArrayList<>(); public String getKind() { return kind; @@ -184,6 +185,14 @@ public class ComponentModel { endpointOptions.add(option); } + public List<ConnectorOptionModel> getConnectorOptions() { + return connectorOptions; + } + + public void addConnectorOption(ConnectorOptionModel option) { + connectorOptions.add(option); + } + public String getShortJavaType() { if (javaType.startsWith("java.util.Map")) { return "Map"; http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/model/ConnectorOptionModel.java ---------------------------------------------------------------------- diff --git a/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/model/ConnectorOptionModel.java b/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/model/ConnectorOptionModel.java new file mode 100644 index 0000000..99cf1d4 --- /dev/null +++ b/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/model/ConnectorOptionModel.java @@ -0,0 +1,20 @@ +/** + * 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.connector.model; + +public class ConnectorOptionModel extends OptionModel { +} http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/ConnectorModel.java ---------------------------------------------------------------------- diff --git a/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/ConnectorModel.java b/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/ConnectorModel.java index 8d409f7..112d4985 100644 --- a/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/ConnectorModel.java +++ b/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/ConnectorModel.java @@ -63,6 +63,7 @@ final class ConnectorModel { private Map<String, String> defaultEndpointOptions; private List<String> endpointOptions; private List<String> componentOptions; + private List<String> connectorOptions; ConnectorModel(String componentName, String className) { this.componentName = componentName; @@ -150,6 +151,14 @@ final class ConnectorModel { return endpointOptions; } + public List<String> getConnectorOptions() { + if (connectorOptions == null) { + connectorOptions = Collections.unmodifiableList(extractConnectorOptions(lines.get())); + } + + return connectorOptions; + } + public DataType getInputDataType() { if (inputDataType == null) { String line = extractInputDataType(lines.get()); @@ -410,4 +419,25 @@ final class ConnectorModel { return answer; } + + private List<String> extractConnectorOptions(List<String> lines) { + List<String> answer = new ArrayList<>(); + + // extract the default options + boolean found = false; + for (String line : lines) { + line = line.trim(); + if (line.startsWith("\"connectorProperties\": {")) { + found = true; + } else if (line.startsWith("}")) { + found = false; + } else if (found) { + int pos = line.indexOf(':'); + String key = line.substring(0, pos); + answer.add(StringHelper.removeLeadingAndEndingQuotes(key.trim())); + } + } + + return answer; + } } http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/DefaultConnectorComponent.java ---------------------------------------------------------------------- diff --git a/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/DefaultConnectorComponent.java b/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/DefaultConnectorComponent.java index 1d0c675..81e22ba 100644 --- a/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/DefaultConnectorComponent.java +++ b/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/DefaultConnectorComponent.java @@ -89,7 +89,7 @@ public abstract class DefaultConnectorComponent extends DefaultComponent impleme registerExtension(this::getComponentVerifierExtension); } - protected <T> void addConnectorOption(Map<String, T> options, String name, T value) { + protected <T> void doAddOption(Map<String, T> options, String name, T value) { log.trace("Adding option: {}={}", name, value); T val = options.put(name, value); if (val != null) { @@ -169,20 +169,19 @@ public abstract class DefaultConnectorComponent extends DefaultComponent impleme } @Override - public void setOptions(Map<String, Object> baseComponentOptions) { + public void setOptions(Map<String, Object> options) { this.options.clear(); - this.options.putAll(baseComponentOptions); + this.options.putAll(options); } @Override public void addOption(String name, Object value) { - addConnectorOption(this.options, name, value); + doAddOption(this.options, name, value); } @Override public void addOptions(Map<String, Object> options) { - options.forEach((name, value)-> addConnectorOption(this.options, name, value)); - + options.forEach((name, value)-> doAddOption(this.options, name, value)); } @Override @@ -361,10 +360,11 @@ public abstract class DefaultConnectorComponent extends DefaultComponent impleme // Get the list of options from the connector catalog that // are configured to target the endpoint List<String> endpointOptions = model.getEndpointOptions(); + List<String> connectorOptions = model.getConnectorOptions(); for (Map.Entry<String, Object> entry : options.entrySet()) { - // Only set options that are not targeting the endpoint - if (!endpointOptions.contains(entry.getKey())) { + // Only set options that are targeting the component + if (!endpointOptions.contains(entry.getKey()) && !connectorOptions.contains(entry.getKey())) { log.debug("Using component option: {}={}", entry.getKey(), entry.getValue()); IntrospectionSupport.setProperty(context, base, entry.getKey(), entry.getValue()); } @@ -433,7 +433,7 @@ public abstract class DefaultConnectorComponent extends DefaultComponent impleme if (!defaultOptions.isEmpty()) { defaultOptions.forEach((key, value) -> { if (isValidConnectionOption(key, value)) { - addConnectorOption(options, key, value); + doAddOption(options, key, value); } }); } @@ -446,7 +446,7 @@ public abstract class DefaultConnectorComponent extends DefaultComponent impleme for (String endpointOption : endpointOptions) { Object value = this.options.get(endpointOption); if (value != null) { - addConnectorOption( + doAddOption( options, endpointOption, getCamelContext().getTypeConverter().mandatoryConvertTo(String.class, value)); @@ -462,7 +462,7 @@ public abstract class DefaultConnectorComponent extends DefaultComponent impleme value = entry.getValue().toString(); } if (isValidConnectionOption(key, value)) { - addConnectorOption(options, key, value); + doAddOption(options, key, value); } } @@ -473,7 +473,7 @@ public abstract class DefaultConnectorComponent extends DefaultComponent impleme if (extra != null && !extra.isEmpty()) { extra.forEach((key, value) -> { if (isValidConnectionOption(key, value)) { - addConnectorOption(options, key, value); + doAddOption(options, key, value); } }); } http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/bar-connector/src/main/resources/camel-connector-schema.json ---------------------------------------------------------------------- diff --git a/connectors/examples/bar-connector/src/main/resources/camel-connector-schema.json b/connectors/examples/bar-connector/src/main/resources/camel-connector-schema.json index 46b9216..8682139 100644 --- a/connectors/examples/bar-connector/src/main/resources/camel-connector-schema.json +++ b/connectors/examples/bar-connector/src/main/resources/camel-connector-schema.json @@ -22,5 +22,7 @@ "drink": { "kind": "path", "displayName": "Drink", "group": "producer", "required": true, "type": "object", "javaType": "org.beverage.Beverages", "enum": [ "Wine", "GinTonic", "Beer" ], "deprecated": false, "secret": false, "description": "What drink to order" }, "amount": { "kind": "parameter", "displayName": "Amount", "group": "producer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "secret": false, "defaultValue": 2, "description": "Number of drinks in the order" }, "celebrity": { "kind": "parameter", "displayName": "Celebrity", "group": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Is this a famous person ordering" } + }, + "connectorProperties": { } } http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/foo-connector/src/main/resources/camel-connector-schema.json ---------------------------------------------------------------------- diff --git a/connectors/examples/foo-connector/src/main/resources/camel-connector-schema.json b/connectors/examples/foo-connector/src/main/resources/camel-connector-schema.json index 416faf6..7d15f98 100644 --- a/connectors/examples/foo-connector/src/main/resources/camel-connector-schema.json +++ b/connectors/examples/foo-connector/src/main/resources/camel-connector-schema.json @@ -22,5 +22,7 @@ "timerName": { "kind": "path", "displayName": "Timer Name", "group": "consumer", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The name of the timer" }, "period": { "kind": "parameter", "displayName": "Period", "group": "consumer", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "secret": false, "defaultValue": 5000, "description": "If greater than 0 generate periodic events every period milliseconds. The default value is 1000. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour)." }, "repeatCount": { "kind": "parameter", "displayName": "Repeat Count", "group": "consumer", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "secret": false, "defaultValue": 0, "description": "Specifies a maximum limit of number of fires. So if you set it to 1 the timer will only fire once. If you set it to 5 it will only fire five times. A value of zero or negative means fire forever." } + }, + "connectorProperties": { } } http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/petstore-connector/src/main/java/org/foo/connector/springboot/PetStoreConnectorAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/connectors/examples/petstore-connector/src/main/java/org/foo/connector/springboot/PetStoreConnectorAutoConfiguration.java b/connectors/examples/petstore-connector/src/main/java/org/foo/connector/springboot/PetStoreConnectorAutoConfiguration.java index 85e27b0..d0a5121 100644 --- a/connectors/examples/petstore-connector/src/main/java/org/foo/connector/springboot/PetStoreConnectorAutoConfiguration.java +++ b/connectors/examples/petstore-connector/src/main/java/org/foo/connector/springboot/PetStoreConnectorAutoConfiguration.java @@ -17,12 +17,19 @@ package org.foo.connector.springboot; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.annotation.Generated; import javax.annotation.PostConstruct; import org.apache.camel.CamelContext; -import org.apache.camel.util.IntrospectionSupport; +import org.apache.camel.component.connector.ConnectorCustomizer; +import org.apache.camel.spi.HasId; +import org.apache.camel.spring.boot.util.CamelPropertiesHelper; +import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator; +import org.apache.camel.util.ObjectHelper; import org.foo.connector.PetStoreComponent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.BeanCreationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; @@ -30,6 +37,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Lazy; @@ -44,10 +52,16 @@ import org.springframework.context.annotation.Lazy; @EnableConfigurationProperties(PetStoreConnectorConfiguration.class) public class PetStoreConnectorAutoConfiguration { + private static final Logger LOGGER = LoggerFactory + .getLogger(PetStoreConnectorAutoConfiguration.class); + @Autowired + private ApplicationContext applicationContext; @Autowired private CamelContext camelContext; @Autowired private PetStoreConnectorConfiguration configuration; + @Autowired(required = false) + private List<ConnectorCustomizer<PetStoreComponent>> customizers; @Lazy @Bean(name = "petstore-component") @@ -57,35 +71,71 @@ public class PetStoreConnectorAutoConfiguration { PetStoreComponent connector = new PetStoreComponent(); connector.setCamelContext(camelContext); Map<String, Object> parameters = new HashMap<>(); - IntrospectionSupport.getProperties(configuration, parameters, null, - false); - IntrospectionSupport.setProperties(camelContext, - camelContext.getTypeConverter(), connector, parameters); - connector.setComponentOptions(parameters); + CamelPropertiesHelper.setCamelProperties(camelContext, connector, + parameters, false); + connector.setOptions(parameters); + if (ObjectHelper.isNotEmpty(customizers)) { + for (ConnectorCustomizer<PetStoreComponent> customizer : customizers) { + boolean useCustomizer = (customizer instanceof HasId) + ? HierarchicalPropertiesEvaluator.evaluate( + applicationContext.getEnvironment(), + "camel.connector.customizer", + "camel.connector.petstore.customizer", + ((HasId) customizer).getId()) + : HierarchicalPropertiesEvaluator.evaluate( + applicationContext.getEnvironment(), + "camel.connector.customizer", + "camel.connector.petstore.customizer"); + if (useCustomizer) { + LOGGER.debug("Configure connector {}, with customizer {}", + connector, customizer); + customizer.customize(connector); + } + } + } return connector; } @PostConstruct public void postConstructPetStoreComponent() { - if (camelContext != null) { - Map<String, Object> parameters = new HashMap<>(); - for (Map.Entry<String, PetStoreConnectorConfigurationCommon> entry : configuration - .getConfigurations().entrySet()) { - parameters.clear(); - PetStoreComponent connector = new PetStoreComponent(); - connector.setCamelContext(camelContext); - try { - IntrospectionSupport.getProperties(entry.getValue(), - parameters, null, false); - IntrospectionSupport.setProperties(camelContext, - camelContext.getTypeConverter(), connector, - parameters); - connector.setComponentOptions(parameters); - camelContext.addComponent(entry.getKey(), connector); - } catch (Exception e) { - throw new BeanCreationException(entry.getKey(), - e.getMessage(), e); + Map<String, Object> parameters = new HashMap<>(); + for (Map.Entry<String, PetStoreConnectorConfigurationCommon> entry : configuration + .getConfigurations().entrySet()) { + parameters.clear(); + PetStoreComponent connector = new PetStoreComponent(); + connector.setCamelContext(camelContext); + try { + CamelPropertiesHelper.setCamelProperties(camelContext, + connector, parameters, false); + connector.setOptions(parameters); + if (ObjectHelper.isNotEmpty(customizers)) { + for (ConnectorCustomizer<PetStoreComponent> customizer : customizers) { + boolean useCustomizer = (customizer instanceof HasId) + ? HierarchicalPropertiesEvaluator.evaluate( + applicationContext.getEnvironment(), + "camel.connector.customizer", + "camel.connector.petstore." + + entry.getKey() + + ".customizer", + ((HasId) customizer).getId()) + : HierarchicalPropertiesEvaluator.evaluate( + applicationContext.getEnvironment(), + "camel.connector.customizer", + "camel.connector.petstore." + + entry.getKey() + + ".customizer"); + if (useCustomizer) { + LOGGER.debug( + "Configure connector {}, with customizer {}", + connector, customizer); + customizer.customize(connector); + } + } } + camelContext.addComponent(entry.getKey(), connector); + } catch (Exception e) { + throw new BeanCreationException(entry.getKey(), e.getMessage(), + e); } } } http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/petstore-connector/src/main/java/org/foo/connector/springboot/PetStoreConnectorConfigurationCommon.java ---------------------------------------------------------------------- diff --git a/connectors/examples/petstore-connector/src/main/java/org/foo/connector/springboot/PetStoreConnectorConfigurationCommon.java b/connectors/examples/petstore-connector/src/main/java/org/foo/connector/springboot/PetStoreConnectorConfigurationCommon.java index 8af2c18..c0ef487 100644 --- a/connectors/examples/petstore-connector/src/main/java/org/foo/connector/springboot/PetStoreConnectorConfigurationCommon.java +++ b/connectors/examples/petstore-connector/src/main/java/org/foo/connector/springboot/PetStoreConnectorConfigurationCommon.java @@ -20,7 +20,7 @@ import java.net.URI; import javax.annotation.Generated; /** - * An awesome REST endpoint backed by Swagger specifications. + * Pets in the store * * Generated by camel-package-maven-plugin - do not edit this file! */ @@ -42,6 +42,10 @@ public class PetStoreConnectorConfigurationCommon { * ID of the operation from the Swagger specification. */ private String operationId; + /** + * Delay in milli seconds between scheduling (executing) + */ + private long schedulerPeriod = 5000L; public URI getSpecificationUri() { return specificationUri; @@ -58,4 +62,12 @@ public class PetStoreConnectorConfigurationCommon { public void setOperationId(String operationId) { this.operationId = operationId; } + + public long getSchedulerPeriod() { + return schedulerPeriod; + } + + public void setSchedulerPeriod(long schedulerPeriod) { + this.schedulerPeriod = schedulerPeriod; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/petstore-connector/src/main/resources/camel-connector-schema.json ---------------------------------------------------------------------- diff --git a/connectors/examples/petstore-connector/src/main/resources/camel-connector-schema.json b/connectors/examples/petstore-connector/src/main/resources/camel-connector-schema.json index 04bcd73..f28e253 100644 --- a/connectors/examples/petstore-connector/src/main/resources/camel-connector-schema.json +++ b/connectors/examples/petstore-connector/src/main/resources/camel-connector-schema.json @@ -22,5 +22,7 @@ "properties": { "operationId": { "kind": "path", "displayName": "Operation Id", "group": "producer", "label": "producer", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "ID of the operation from the Swagger specification." }, "schedulerPeriod": { "kind": "parameter", "displayName": "Period", "group": "consumer", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "secret": false, "defaultValue": 5000, "description": "Delay in milli seconds between scheduling (executing)" } + }, + "connectorProperties": { } } http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/petstore-connector/src/main/resources/camel-connector.json ---------------------------------------------------------------------- diff --git a/connectors/examples/petstore-connector/src/main/resources/camel-connector.json b/connectors/examples/petstore-connector/src/main/resources/camel-connector.json index f701a65..fb44e52 100644 --- a/connectors/examples/petstore-connector/src/main/resources/camel-connector.json +++ b/connectors/examples/petstore-connector/src/main/resources/camel-connector.json @@ -2,7 +2,7 @@ "baseScheme" : "rest-swagger", "baseGroupId" : "org.apache.camel", "baseArtifactId" : "camel-rest-swagger", - "baseVersion" : "2.20.0-SNAPSHOT", + "baseVersion" : "2.20.0-20170904.034931-187", "baseJavaType" : "org.apache.camel.component.rest.swagger.RestSwaggerComponent", "name" : "PetStore", "scheme" : "petstore", http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorAutoConfiguration.java b/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorAutoConfiguration.java index 89c4dee..dcc1411 100644 --- a/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorAutoConfiguration.java +++ b/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorAutoConfiguration.java @@ -17,12 +17,19 @@ package org.foo.salesforce.contact.springboot; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.annotation.Generated; import javax.annotation.PostConstruct; import org.apache.camel.CamelContext; -import org.apache.camel.util.IntrospectionSupport; +import org.apache.camel.component.connector.ConnectorCustomizer; +import org.apache.camel.spi.HasId; +import org.apache.camel.spring.boot.util.CamelPropertiesHelper; +import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator; +import org.apache.camel.util.ObjectHelper; import org.foo.salesforce.contact.SalesforceUpsertContactComponent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.BeanCreationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; @@ -30,6 +37,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Lazy; @@ -44,10 +52,16 @@ import org.springframework.context.annotation.Lazy; @EnableConfigurationProperties(SalesforceUpsertContactConnectorConfiguration.class) public class SalesforceUpsertContactConnectorAutoConfiguration { + private static final Logger LOGGER = LoggerFactory + .getLogger(SalesforceUpsertContactConnectorAutoConfiguration.class); + @Autowired + private ApplicationContext applicationContext; @Autowired private CamelContext camelContext; @Autowired private SalesforceUpsertContactConnectorConfiguration configuration; + @Autowired(required = false) + private List<ConnectorCustomizer<SalesforceUpsertContactComponent>> customizers; @Lazy @Bean(name = "salesforce-upsert-contact-component") @@ -58,35 +72,72 @@ public class SalesforceUpsertContactConnectorAutoConfiguration { SalesforceUpsertContactComponent connector = new SalesforceUpsertContactComponent(); connector.setCamelContext(camelContext); Map<String, Object> parameters = new HashMap<>(); - IntrospectionSupport.getProperties(configuration, parameters, null, - false); - IntrospectionSupport.setProperties(camelContext, - camelContext.getTypeConverter(), connector, parameters); - connector.setComponentOptions(parameters); + CamelPropertiesHelper.setCamelProperties(camelContext, connector, + parameters, false); + connector.setOptions(parameters); + if (ObjectHelper.isNotEmpty(customizers)) { + for (ConnectorCustomizer<SalesforceUpsertContactComponent> customizer : customizers) { + boolean useCustomizer = (customizer instanceof HasId) + ? HierarchicalPropertiesEvaluator + .evaluate( + applicationContext.getEnvironment(), + "camel.connector.customizer", + "camel.connector.salesforce-upsert-contact.customizer", + ((HasId) customizer).getId()) + : HierarchicalPropertiesEvaluator + .evaluate(applicationContext.getEnvironment(), + "camel.connector.customizer", + "camel.connector.salesforce-upsert-contact.customizer"); + if (useCustomizer) { + LOGGER.debug("Configure connector {}, with customizer {}", + connector, customizer); + customizer.customize(connector); + } + } + } return connector; } @PostConstruct public void postConstructSalesforceUpsertContactComponent() { - if (camelContext != null) { - Map<String, Object> parameters = new HashMap<>(); - for (Map.Entry<String, SalesforceUpsertContactConnectorConfigurationCommon> entry : configuration - .getConfigurations().entrySet()) { - parameters.clear(); - SalesforceUpsertContactComponent connector = new SalesforceUpsertContactComponent(); - connector.setCamelContext(camelContext); - try { - IntrospectionSupport.getProperties(entry.getValue(), - parameters, null, false); - IntrospectionSupport.setProperties(camelContext, - camelContext.getTypeConverter(), connector, - parameters); - connector.setComponentOptions(parameters); - camelContext.addComponent(entry.getKey(), connector); - } catch (Exception e) { - throw new BeanCreationException(entry.getKey(), - e.getMessage(), e); + Map<String, Object> parameters = new HashMap<>(); + for (Map.Entry<String, SalesforceUpsertContactConnectorConfigurationCommon> entry : configuration + .getConfigurations().entrySet()) { + parameters.clear(); + SalesforceUpsertContactComponent connector = new SalesforceUpsertContactComponent(); + connector.setCamelContext(camelContext); + try { + CamelPropertiesHelper.setCamelProperties(camelContext, + connector, parameters, false); + connector.setOptions(parameters); + if (ObjectHelper.isNotEmpty(customizers)) { + for (ConnectorCustomizer<SalesforceUpsertContactComponent> customizer : customizers) { + boolean useCustomizer = (customizer instanceof HasId) + ? HierarchicalPropertiesEvaluator.evaluate( + applicationContext.getEnvironment(), + "camel.connector.customizer", + "camel.connector.salesforce-upsert-contact." + + entry.getKey() + + ".customizer", + ((HasId) customizer).getId()) + : HierarchicalPropertiesEvaluator.evaluate( + applicationContext.getEnvironment(), + "camel.connector.customizer", + "camel.connector.salesforce-upsert-contact." + + entry.getKey() + + ".customizer"); + if (useCustomizer) { + LOGGER.debug( + "Configure connector {}, with customizer {}", + connector, customizer); + customizer.customize(connector); + } + } } + camelContext.addComponent(entry.getKey(), connector); + } catch (Exception e) { + throw new BeanCreationException(entry.getKey(), e.getMessage(), + e); } } } http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorConfigurationCommon.java ---------------------------------------------------------------------- diff --git a/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorConfigurationCommon.java b/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorConfigurationCommon.java index 02ecb84..865dda6 100644 --- a/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorConfigurationCommon.java +++ b/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorConfigurationCommon.java @@ -19,8 +19,7 @@ package org.foo.salesforce.contact.springboot; import javax.annotation.Generated; /** - * The salesforce connector is used for integrating Camel with the massive - * Salesforce API. + * Create or update Salesforce Contact SObject * * Generated by camel-package-maven-plugin - do not edit this file! */ http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/salesforce-upsert-contact-connector/src/main/resources/camel-connector-schema.json ---------------------------------------------------------------------- diff --git a/connectors/examples/salesforce-upsert-contact-connector/src/main/resources/camel-connector-schema.json b/connectors/examples/salesforce-upsert-contact-connector/src/main/resources/camel-connector-schema.json index 6e3813b..966d32f 100644 --- a/connectors/examples/salesforce-upsert-contact-connector/src/main/resources/camel-connector-schema.json +++ b/connectors/examples/salesforce-upsert-contact-connector/src/main/resources/camel-connector-schema.json @@ -18,12 +18,14 @@ }, "componentProperties": { "loginUrl": { "kind": "property", "displayName": "Login Url", "group": "security", "label": "common,security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "defaultValue": "https://login.salesforce.com", "description": "URL of the Salesforce instance used for authentication by default set to https://login.salesforce.com" }, - "clientId": { "kind": "property", "displayName": "Client Id", "group": "security", "label": "common,security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": true, "description": "OAuth Consumer Key of the connected app configured in the Salesforce instance setup. Typically a connected app needs to be configured but one can be provided by installing a package." }, + "clientId": { "kind": "property", "displayName": "Client Id", "group": "security", "label": "common,security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "OAuth Consumer Key of the connected app configured in the Salesforce instance setup. Typically a connected app needs to be configured but one can be provided by installing a package." }, "clientSecret": { "kind": "property", "displayName": "Client Secret", "group": "security", "label": "common,security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": true, "description": "OAuth Consumer Secret of the connected app configured in the Salesforce instance setup." }, "refreshToken": { "kind": "property", "displayName": "Refresh Token", "group": "security", "label": "common,security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": true, "description": "Refresh token already obtained in the refresh token OAuth flow. One needs to setup a web application and configure a callback URL to receive the refresh token or configure using the builtin callback at https://login.salesforce.com/services/oauth2/success or https://test.salesforce.com/services/oauth2/success and then retrive the refresh_token from the URL at the end of the flow. Note that in development organizations Salesforce allows hosting the callback web application at localhost." } }, "properties": { "sObjectIdName": { "kind": "parameter", "displayName": "SObject Id Name", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "SObject external ID field name" }, "sObjectIdValue": { "kind": "parameter", "displayName": "SObject Id Value", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "SObject external ID field value" } + }, + "connectorProperties": { } } http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/salesforce-upsert-contact-connector/src/main/resources/camel-connector.json ---------------------------------------------------------------------- diff --git a/connectors/examples/salesforce-upsert-contact-connector/src/main/resources/camel-connector.json b/connectors/examples/salesforce-upsert-contact-connector/src/main/resources/camel-connector.json index bad488c..e548c02 100644 --- a/connectors/examples/salesforce-upsert-contact-connector/src/main/resources/camel-connector.json +++ b/connectors/examples/salesforce-upsert-contact-connector/src/main/resources/camel-connector.json @@ -2,7 +2,7 @@ "baseScheme" : "salesforce", "baseGroupId" : "org.apache.camel", "baseArtifactId" : "camel-salesforce", - "baseVersion" : "2.20.0-SNAPSHOT", + "baseVersion" : "2.20.0-20170904.035306-186", "baseJavaType" : "org.apache.camel.component.salesforce.SalesforceComponent", "name" : "SalesforceUpsertContact", "scheme" : "salesforce-upsert-contact", http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorAutoConfiguration.java b/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorAutoConfiguration.java index e7f3c02..1421242 100644 --- a/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorAutoConfiguration.java +++ b/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorAutoConfiguration.java @@ -24,8 +24,8 @@ import javax.annotation.PostConstruct; import org.apache.camel.CamelContext; import org.apache.camel.component.connector.ConnectorCustomizer; import org.apache.camel.spi.HasId; +import org.apache.camel.spring.boot.util.CamelPropertiesHelper; import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator; -import org.apache.camel.util.IntrospectionSupport; import org.apache.camel.util.ObjectHelper; import org.foo.mention.TwitterMentionComponent; import org.slf4j.Logger; @@ -72,11 +72,9 @@ public class TwitterMentionConnectorAutoConfiguration { TwitterMentionComponent connector = new TwitterMentionComponent(); connector.setCamelContext(camelContext); Map<String, Object> parameters = new HashMap<>(); - IntrospectionSupport.getProperties(configuration, parameters, null, - false); - IntrospectionSupport.setProperties(camelContext, - camelContext.getTypeConverter(), connector, parameters); - connector.setComponentOptions(parameters); + CamelPropertiesHelper.setCamelProperties(camelContext, connector, + parameters, false); + connector.setOptions(parameters); if (ObjectHelper.isNotEmpty(customizers)) { for (ConnectorCustomizer<TwitterMentionComponent> customizer : customizers) { boolean useCustomizer = (customizer instanceof HasId) @@ -108,11 +106,9 @@ public class TwitterMentionConnectorAutoConfiguration { TwitterMentionComponent connector = new TwitterMentionComponent(); connector.setCamelContext(camelContext); try { - IntrospectionSupport.getProperties(entry.getValue(), - parameters, null, false); - IntrospectionSupport.setProperties(camelContext, - camelContext.getTypeConverter(), connector, parameters); - connector.setComponentOptions(parameters); + CamelPropertiesHelper.setCamelProperties(camelContext, + connector, parameters, false); + connector.setOptions(parameters); if (ObjectHelper.isNotEmpty(customizers)) { for (ConnectorCustomizer<TwitterMentionComponent> customizer : customizers) { boolean useCustomizer = (customizer instanceof HasId) http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorConfigurationCommon.java ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorConfigurationCommon.java b/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorConfigurationCommon.java index 10c70b1..37d6efd 100644 --- a/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorConfigurationCommon.java +++ b/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorConfigurationCommon.java @@ -19,8 +19,7 @@ package org.foo.mention.springboot; import javax.annotation.Generated; /** - * Use twitter-directmessage twitter-search twitter-streaming and - * twitter-timeline instead of this connector. + * Connection from twitter when anyone mention you * * Generated by camel-package-maven-plugin - do not edit this file! */ http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/twitter-mention-connector/src/main/resources/camel-connector-schema.json ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-mention-connector/src/main/resources/camel-connector-schema.json b/connectors/examples/twitter-mention-connector/src/main/resources/camel-connector-schema.json index 666b3b6..4ab2632 100644 --- a/connectors/examples/twitter-mention-connector/src/main/resources/camel-connector-schema.json +++ b/connectors/examples/twitter-mention-connector/src/main/resources/camel-connector-schema.json @@ -23,5 +23,7 @@ "consumerSecret": { "kind": "property", "displayName": "Consumer Secret", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": true, "description": "The consumer secret" } }, "properties": { + }, + "connectorProperties": { } } http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/twitter-mention-connector/src/main/resources/camel-connector.json ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-mention-connector/src/main/resources/camel-connector.json b/connectors/examples/twitter-mention-connector/src/main/resources/camel-connector.json index d97831a..5777153 100644 --- a/connectors/examples/twitter-mention-connector/src/main/resources/camel-connector.json +++ b/connectors/examples/twitter-mention-connector/src/main/resources/camel-connector.json @@ -2,7 +2,7 @@ "baseScheme" : "twitter", "baseGroupId" : "org.apache.camel", "baseArtifactId" : "camel-twitter", - "baseVersion" : "2.20.0-20170831.153623-177", + "baseVersion" : "2.20.0-20170904.041524-180", "baseJavaType" : "org.apache.camel.component.twitter.TwitterComponent", "name" : "TwitterMention", "scheme" : "twitter-mention", http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorAutoConfiguration.java b/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorAutoConfiguration.java index fb76779..b2acf9b 100644 --- a/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorAutoConfiguration.java +++ b/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorAutoConfiguration.java @@ -24,8 +24,8 @@ import javax.annotation.PostConstruct; import org.apache.camel.CamelContext; import org.apache.camel.component.connector.ConnectorCustomizer; import org.apache.camel.spi.HasId; +import org.apache.camel.spring.boot.util.CamelPropertiesHelper; import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator; -import org.apache.camel.util.IntrospectionSupport; import org.apache.camel.util.ObjectHelper; import org.foo.search.TwitterSearchComponent; import org.slf4j.Logger; @@ -72,11 +72,9 @@ public class TwitterSearchConnectorAutoConfiguration { TwitterSearchComponent connector = new TwitterSearchComponent(); connector.setCamelContext(camelContext); Map<String, Object> parameters = new HashMap<>(); - IntrospectionSupport.getProperties(configuration, parameters, null, - false); - IntrospectionSupport.setProperties(camelContext, - camelContext.getTypeConverter(), connector, parameters); - connector.setComponentOptions(parameters); + CamelPropertiesHelper.setCamelProperties(camelContext, connector, + parameters, false); + connector.setOptions(parameters); if (ObjectHelper.isNotEmpty(customizers)) { for (ConnectorCustomizer<TwitterSearchComponent> customizer : customizers) { boolean useCustomizer = (customizer instanceof HasId) @@ -108,11 +106,9 @@ public class TwitterSearchConnectorAutoConfiguration { TwitterSearchComponent connector = new TwitterSearchComponent(); connector.setCamelContext(camelContext); try { - IntrospectionSupport.getProperties(entry.getValue(), - parameters, null, false); - IntrospectionSupport.setProperties(camelContext, - camelContext.getTypeConverter(), connector, parameters); - connector.setComponentOptions(parameters); + CamelPropertiesHelper.setCamelProperties(camelContext, + connector, parameters, false); + connector.setOptions(parameters); if (ObjectHelper.isNotEmpty(customizers)) { for (ConnectorCustomizer<TwitterSearchComponent> customizer : customizers) { boolean useCustomizer = (customizer instanceof HasId) http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorConfigurationCommon.java ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorConfigurationCommon.java b/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorConfigurationCommon.java index 2adcb3f..c320a39 100644 --- a/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorConfigurationCommon.java +++ b/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorConfigurationCommon.java @@ -19,8 +19,7 @@ package org.foo.search.springboot; import javax.annotation.Generated; /** - * Use twitter-directmessage twitter-search twitter-streaming and - * twitter-timeline instead of this connector. + * Search for twitter * * Generated by camel-package-maven-plugin - do not edit this file! */ @@ -56,7 +55,11 @@ public class TwitterSearchConnectorConfigurationCommon { /** * Milliseconds before the next poll. */ - private long delay = 30000L; + private long delay = 5000L; + /** + * A prefix + */ + private String prefix; public String getAccessToken() { return accessToken; @@ -113,4 +116,12 @@ public class TwitterSearchConnectorConfigurationCommon { public void setDelay(long delay) { this.delay = delay; } + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/twitter-search-connector/src/main/resources/camel-connector-schema.json ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-connector/src/main/resources/camel-connector-schema.json b/connectors/examples/twitter-search-connector/src/main/resources/camel-connector-schema.json index 60ffe74..c60ebb5 100644 --- a/connectors/examples/twitter-search-connector/src/main/resources/camel-connector-schema.json +++ b/connectors/examples/twitter-search-connector/src/main/resources/camel-connector-schema.json @@ -26,5 +26,8 @@ "filterOld": { "kind": "parameter", "displayName": "Filter Old", "group": "filter", "label": "consumer,filter", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": true, "description": "Filter out old tweets that has previously been polled. This state is stored in memory only and based on last tweet id." }, "keywords": { "kind": "parameter", "displayName": "Keywords", "group": "filter", "label": "consumer,filter", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Can be used for search and streaming/filter. Multiple values can be separated with comma." }, "delay": { "kind": "parameter", "displayName": "Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "optionalPrefix": "consumer.", "deprecated": false, "secret": false, "defaultValue": 5000, "description": "Milliseconds before the next poll." } + }, + "connectorProperties": { + "prefix": { "kind": "parameter", "displayName": "Keywourd prefix", "group": "filter", "label": "consumer,filter", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "A prefix" } } } http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/twitter-search-connector/src/main/resources/camel-connector.json ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-connector/src/main/resources/camel-connector.json b/connectors/examples/twitter-search-connector/src/main/resources/camel-connector.json index 9fcaef8..618fee3 100644 --- a/connectors/examples/twitter-search-connector/src/main/resources/camel-connector.json +++ b/connectors/examples/twitter-search-connector/src/main/resources/camel-connector.json @@ -2,7 +2,7 @@ "baseScheme" : "twitter", "baseGroupId" : "org.apache.camel", "baseArtifactId" : "camel-twitter", - "baseVersion" : "2.20.0-20170831.153623-177", + "baseVersion" : "2.20.0-20170904.041524-180", "baseJavaType" : "org.apache.camel.component.twitter.TwitterComponent", "name" : "TwitterSearch", "scheme" : "twitter-search", @@ -21,5 +21,19 @@ "kind" : "search", "type" : "POLLING", "delay" : 5000 + }, + "connectorProperties" : { + "prefix" : { + "kind" : "parameter", + "displayName" : "Keywourd prefix", + "group" : "filter", + "label" : "consumer,filter", + "required" : false, + "type" : "string", + "javaType" : "java.lang.String", + "deprecated" : false, + "secret" : false, + "description" : "A prefix" + } } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/twitter-search-example/src/main/java/org/foo/TwitterSearchCustomizer.java ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-example/src/main/java/org/foo/TwitterSearchCustomizer.java b/connectors/examples/twitter-search-example/src/main/java/org/foo/TwitterSearchCustomizer.java index 2190949..435c2e0 100644 --- a/connectors/examples/twitter-search-example/src/main/java/org/foo/TwitterSearchCustomizer.java +++ b/connectors/examples/twitter-search-example/src/main/java/org/foo/TwitterSearchCustomizer.java @@ -34,5 +34,12 @@ public class TwitterSearchCustomizer implements ConnectorCustomizer<TwitterSearc if (ObjectHelper.isNotEmpty(configuration.getKeywords())) { component.addOption("keywords", configuration.getKeywords()); } + + String keywords = (String)component.getOptions().get("keywords"); + String prefix = (String)component.getOptions().get("prefix"); + + if (ObjectHelper.isNotEmpty(keywords) && ObjectHelper.isNotEmpty(prefix)) { + component.addOption("keywords", prefix + keywords); + } } } http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/twitter-search-example/src/main/resources/application.properties ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-example/src/main/resources/application.properties b/connectors/examples/twitter-search-example/src/main/resources/application.properties index 30319b1..86ae03c 100644 --- a/connectors/examples/twitter-search-example/src/main/resources/application.properties +++ b/connectors/examples/twitter-search-example/src/main/resources/application.properties @@ -26,5 +26,6 @@ camel.connector.twitter-search.configurations.tw-search.consumer-secret = VxNQiR camel.connector.twitter-search.configurations.tw-search.access-token = 26693234-W0YjxL9cMJrC0VZZ4xdgFMymxIQ10LeL1K8YlbBY camel.connector.twitter-search.configurations.tw-search.access-token-secret = BZD51BgzbOdFstWZYsqB5p5dbuuDV12vrOdatzhY4E camel.connector.twitter-search.configurations.tw-search.keywords = camel-test +camel.connector.twitter-search.configurations.tw-search.prefix = camel -camel.connector.twitter-search.customizer.keywords = cameltest \ No newline at end of file +camel.connector.twitter-search.customizer.keywords = test \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/bc09a41d/connectors/examples/wine-connector/src/main/resources/camel-connector-schema.json ---------------------------------------------------------------------- diff --git a/connectors/examples/wine-connector/src/main/resources/camel-connector-schema.json b/connectors/examples/wine-connector/src/main/resources/camel-connector-schema.json index 957f612..ba7e908 100644 --- a/connectors/examples/wine-connector/src/main/resources/camel-connector-schema.json +++ b/connectors/examples/wine-connector/src/main/resources/camel-connector-schema.json @@ -21,5 +21,7 @@ "properties": { "drink": { "kind": "path", "displayName": "Wine Bottle", "group": "producer", "required": true, "type": "object", "javaType": "org.beverage.Beverages", "enum": [ "Wine" ], "deprecated": false, "secret": false, "defaultValue": "Wine", "description": "You can only order wine" }, "amount": { "kind": "parameter", "displayName": "Amount", "group": "producer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "secret": false, "defaultValue": 1, "description": "Number of drinks in the order" } + }, + "connectorProperties": { } }
