Repository: camel Updated Branches: refs/heads/master 000e09a80 -> 3dd29006c
http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorConfiguration.java ---------------------------------------------------------------------- diff --git a/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorConfiguration.java b/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorConfiguration.java index 740cb70..1ce88e2 100644 --- a/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorConfiguration.java +++ b/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorConfiguration.java @@ -16,74 +16,23 @@ */ package org.foo.salesforce.contact.springboot; +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Generated; import org.springframework.boot.context.properties.ConfigurationProperties; -/** - * The salesforce connector is used for integrating Camel with the massive - * Salesforce API. - * - * Generated by camel-connector-maven-plugin - do not edit this file! - */ +@Generated("org.apache.camel.maven.connector.SpringBootAutoConfigurationMojo") @ConfigurationProperties(prefix = "camel.connector.salesforce-upsert-contact") -public class SalesforceUpsertContactConnectorConfiguration { +public class SalesforceUpsertContactConnectorConfiguration + extends + SalesforceUpsertContactConnectorConfigurationCommon { /** - * URL of the Salesforce instance used for authentication by default set to - * https://login.salesforce.com - */ - private String loginUrl = "https://login.salesforce.com"; - /** - * 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. - */ - private String clientId; - /** - * OAuth Consumer Secret of the connected app configured in the Salesforce - * instance setup. + * Define additional configuration definitions */ - private String clientSecret; - /** - * 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. - */ - private String refreshToken; - - public String getLoginUrl() { - return loginUrl; - } - - public void setLoginUrl(String loginUrl) { - this.loginUrl = loginUrl; - } - - public String getClientId() { - return clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getClientSecret() { - return clientSecret; - } - - public void setClientSecret(String clientSecret) { - this.clientSecret = clientSecret; - } - - public String getRefreshToken() { - return refreshToken; - } + private Map<String, SalesforceUpsertContactConnectorConfigurationCommon> configurations = new HashMap<>(); - public void setRefreshToken(String refreshToken) { - this.refreshToken = refreshToken; + public Map<String, SalesforceUpsertContactConnectorConfigurationCommon> getConfigurations() { + return configurations; } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/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 new file mode 100644 index 0000000..02ecb84 --- /dev/null +++ b/connectors/examples/salesforce-upsert-contact-connector/src/main/java/org/foo/salesforce/contact/springboot/SalesforceUpsertContactConnectorConfigurationCommon.java @@ -0,0 +1,113 @@ +/** + * 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.foo.salesforce.contact.springboot; + +import javax.annotation.Generated; + +/** + * The salesforce connector is used for integrating Camel with the massive + * Salesforce API. + * + * Generated by camel-package-maven-plugin - do not edit this file! + */ +@Generated("org.apache.camel.maven.connector.SpringBootAutoConfigurationMojo") +public class SalesforceUpsertContactConnectorConfigurationCommon { + + /** + * URL of the Salesforce instance used for authentication by default set to + * https://login.salesforce.com + */ + private String loginUrl = "https://login.salesforce.com"; + /** + * 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. + */ + private String clientId; + /** + * OAuth Consumer Secret of the connected app configured in the Salesforce + * instance setup. + */ + private String clientSecret; + /** + * 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. + */ + private String refreshToken; + /** + * SObject external ID field name + */ + private String sObjectIdName; + /** + * SObject external ID field value + */ + private String sObjectIdValue; + + public String getLoginUrl() { + return loginUrl; + } + + public void setLoginUrl(String loginUrl) { + this.loginUrl = loginUrl; + } + + public String getClientId() { + return clientId; + } + + public void setClientId(String clientId) { + this.clientId = clientId; + } + + public String getClientSecret() { + return clientSecret; + } + + public void setClientSecret(String clientSecret) { + this.clientSecret = clientSecret; + } + + public String getRefreshToken() { + return refreshToken; + } + + public void setRefreshToken(String refreshToken) { + this.refreshToken = refreshToken; + } + + public String getSObjectIdName() { + return sObjectIdName; + } + + public void setSObjectIdName(String sObjectIdName) { + this.sObjectIdName = sObjectIdName; + } + + public String getSObjectIdValue() { + return sObjectIdValue; + } + + public void setSObjectIdValue(String sObjectIdValue) { + this.sObjectIdValue = sObjectIdValue; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-mention-connector/pom.xml ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-mention-connector/pom.xml b/connectors/examples/twitter-mention-connector/pom.xml index 6c213df..bc6d1fb 100644 --- a/connectors/examples/twitter-mention-connector/pom.xml +++ b/connectors/examples/twitter-mention-connector/pom.xml @@ -142,6 +142,7 @@ </goals> <phase>generate-resources</phase> </execution> + <!-- <execution> <id>validate</id> <goals> @@ -149,6 +150,7 @@ </goals> <phase>prepare-package</phase> </execution> + --> </executions> </plugin> http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/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 f3f4dd6..c09ad0a 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 @@ -18,9 +18,13 @@ package org.foo.mention.springboot; import java.util.HashMap; 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.foo.mention.TwitterMentionComponent; +import org.springframework.beans.factory.BeanCreationException; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -33,19 +37,23 @@ import org.springframework.context.annotation.Lazy; /** * Generated by camel-connector-maven-plugin - do not edit this file! */ +@Generated("org.apache.camel.maven.connector.SpringBootAutoConfigurationMojo") @Configuration @ConditionalOnBean(type = "org.apache.camel.spring.boot.CamelAutoConfiguration") @AutoConfigureAfter(name = "org.apache.camel.spring.boot.CamelAutoConfiguration") @EnableConfigurationProperties(TwitterMentionConnectorConfiguration.class) public class TwitterMentionConnectorAutoConfiguration { + @Autowired + private CamelContext camelContext; + @Autowired + private TwitterMentionConnectorConfiguration configuration; + @Lazy @Bean(name = "twitter-mention-component") @ConditionalOnClass(CamelContext.class) - @ConditionalOnMissingBean(org.foo.mention.TwitterMentionComponent.class) - public TwitterMentionComponent configureTwitterMentionComponent( - CamelContext camelContext, - TwitterMentionConnectorConfiguration configuration) + @ConditionalOnMissingBean(name = "twitter-mention-component") + public TwitterMentionComponent configureTwitterMentionComponent() throws Exception { TwitterMentionComponent connector = new TwitterMentionComponent(); connector.setCamelContext(camelContext); @@ -57,4 +65,29 @@ public class TwitterMentionConnectorAutoConfiguration { connector.setComponentOptions(parameters); return connector; } + + @PostConstruct + public void postConstructTwitterMentionComponent() { + if (camelContext != null) { + Map<String, Object> parameters = new HashMap<>(); + for (Map.Entry<String, TwitterMentionConnectorConfigurationCommon> entry : configuration + .getConfigurations().entrySet()) { + parameters.clear(); + 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); + camelContext.addComponent(entry.getKey(), connector); + } catch (Exception e) { + throw new BeanCreationException(entry.getKey(), + e.getMessage(), e); + } + } + } + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorConfiguration.java ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorConfiguration.java b/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorConfiguration.java index abddbf3..8d128ac 100644 --- a/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorConfiguration.java +++ b/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorConfiguration.java @@ -16,63 +16,23 @@ */ package org.foo.mention.springboot; +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Generated; import org.springframework.boot.context.properties.ConfigurationProperties; -/** - * This connector integrates with Twitter to send tweets or search for tweets - * and more. - * - * Generated by camel-connector-maven-plugin - do not edit this file! - */ +@Generated("org.apache.camel.maven.connector.SpringBootAutoConfigurationMojo") @ConfigurationProperties(prefix = "camel.connector.twitter-mention") -public class TwitterMentionConnectorConfiguration { +public class TwitterMentionConnectorConfiguration + extends + TwitterMentionConnectorConfigurationCommon { /** - * The access token - */ - private String accessToken; - /** - * The access token secret - */ - private String accessTokenSecret; - /** - * The consumer key + * Define additional configuration definitions */ - private String consumerKey; - /** - * The consumer secret - */ - private String consumerSecret; - - public String getAccessToken() { - return accessToken; - } - - public void setAccessToken(String accessToken) { - this.accessToken = accessToken; - } - - public String getAccessTokenSecret() { - return accessTokenSecret; - } - - public void setAccessTokenSecret(String accessTokenSecret) { - this.accessTokenSecret = accessTokenSecret; - } - - public String getConsumerKey() { - return consumerKey; - } - - public void setConsumerKey(String consumerKey) { - this.consumerKey = consumerKey; - } - - public String getConsumerSecret() { - return consumerSecret; - } + private Map<String, TwitterMentionConnectorConfigurationCommon> configurations = new HashMap<>(); - public void setConsumerSecret(String consumerSecret) { - this.consumerSecret = consumerSecret; + public Map<String, TwitterMentionConnectorConfigurationCommon> getConfigurations() { + return configurations; } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/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 new file mode 100644 index 0000000..c59c980 --- /dev/null +++ b/connectors/examples/twitter-mention-connector/src/main/java/org/foo/mention/springboot/TwitterMentionConnectorConfigurationCommon.java @@ -0,0 +1,78 @@ +/** + * 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.foo.mention.springboot; + +import javax.annotation.Generated; + +/** + * This connector integrates with Twitter to send tweets or search for tweets + * and more. + * + * Generated by camel-package-maven-plugin - do not edit this file! + */ +@Generated("org.apache.camel.maven.connector.SpringBootAutoConfigurationMojo") +public class TwitterMentionConnectorConfigurationCommon { + + /** + * The access token + */ + private String accessToken; + /** + * The access token secret + */ + private String accessTokenSecret; + /** + * The consumer key + */ + private String consumerKey; + /** + * The consumer secret + */ + private String consumerSecret; + + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public String getAccessTokenSecret() { + return accessTokenSecret; + } + + public void setAccessTokenSecret(String accessTokenSecret) { + this.accessTokenSecret = accessTokenSecret; + } + + public String getConsumerKey() { + return consumerKey; + } + + public void setConsumerKey(String consumerKey) { + this.consumerKey = consumerKey; + } + + public String getConsumerSecret() { + return consumerSecret; + } + + public void setConsumerSecret(String consumerSecret) { + this.consumerSecret = consumerSecret; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-search-connector/pom.xml ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-connector/pom.xml b/connectors/examples/twitter-search-connector/pom.xml new file mode 100644 index 0000000..a801db6 --- /dev/null +++ b/connectors/examples/twitter-search-connector/pom.xml @@ -0,0 +1,188 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.camel</groupId> + <artifactId>connectors-examples</artifactId> + <version>2.20.0-SNAPSHOT</version> + <relativePath>..</relativePath> + </parent> + + <groupId>org.foo</groupId> + <artifactId>twitter-search-connector</artifactId> + <name>Camel :: Connectors :: Examples :: Twitter Search Connector</name> + <description>Twitter Search Connector</description> + <packaging>jar</packaging> + + <dependencyManagement> + <dependencies> + <!-- Camel BOM --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-parent</artifactId> + <version>${project.version}</version> + <scope>import</scope> + <type>pom</type> + </dependency> + </dependencies> + </dependencyManagement> + + <dependencies> + + <!-- base component to use for this connector --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-twitter</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-twitter-starter</artifactId> + <version>${project.version}</version> + </dependency> + + <!-- camel-connector --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-connector</artifactId> + <version>${project.version}</version> + </dependency> + + <!-- camel and spring boot compiler plugins --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>apt</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-configuration-processor</artifactId> + <version>${spring-boot-version}</version> + </dependency> + + <!-- testing --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-test-spring</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <version>${spring-boot-version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <defaultGoal>install</defaultGoal> + + <plugins> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.6.0</version> + <configuration> + <source>1.8</source> + <target>1.8</target> + </configuration> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-resources-plugin</artifactId> + <version>3.0.1</version> + <configuration> + <encoding>UTF-8</encoding> + </configuration> + </plugin> + + <!-- generate components meta-data and validate component includes documentation etc --> + <plugin> + <groupId>org.apache.camel</groupId> + <artifactId>camel-package-maven-plugin</artifactId> + <version>${project.version}</version> + <executions> + <execution> + <id>prepare</id> + <goals> + <goal>prepare-components</goal> + </goals> + <phase>generate-resources</phase> + </execution> + <!-- + <execution> + <id>validate</id> + <goals> + <goal>validate-components</goal> + </goals> + <phase>prepare-package</phase> + </execution> + --> + </executions> + </plugin> + + <!-- turn off jar plugin as we use connector plugin to jar instead --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <version>${maven-jar-plugin-version}</version> + <executions> + <execution> + <id>default-jar</id> + <phase/> + </execution> + </executions> + </plugin> + + <!-- connector plugin will build the jar --> + <plugin> + <groupId>org.apache.camel</groupId> + <artifactId>camel-connector-maven-plugin</artifactId> + <version>${project.version}</version> + <executions> + <execution> + <id>boot</id> + <goals> + <goal>prepare-spring-boot-auto-configuration</goal> + </goals> + </execution> + <execution> + <id>connector</id> + <goals> + <goal>jar</goal> + </goals> + </execution> + </executions> + </plugin> + + </plugins> + </build> + +</project> http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/TwitterSearchComponent.java ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/TwitterSearchComponent.java b/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/TwitterSearchComponent.java new file mode 100644 index 0000000..9b18c85 --- /dev/null +++ b/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/TwitterSearchComponent.java @@ -0,0 +1,30 @@ +/** + * 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.foo.search; + +import org.apache.camel.component.connector.DefaultConnectorComponent; + +/** + * Camel twitter-mention connector + */ +public class TwitterSearchComponent extends DefaultConnectorComponent { + + public TwitterSearchComponent() { + super("twitter-search", "org.foo.search.TwitterSearchComponent"); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/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 new file mode 100644 index 0000000..0a458ac --- /dev/null +++ b/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorAutoConfiguration.java @@ -0,0 +1,93 @@ +/** + * 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.foo.search.springboot; + +import java.util.HashMap; +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.foo.search.TwitterSearchComponent; +import org.springframework.beans.factory.BeanCreationException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +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.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; + +/** + * Generated by camel-connector-maven-plugin - do not edit this file! + */ +@Generated("org.apache.camel.maven.connector.SpringBootAutoConfigurationMojo") +@Configuration +@ConditionalOnBean(type = "org.apache.camel.spring.boot.CamelAutoConfiguration") +@AutoConfigureAfter(name = "org.apache.camel.spring.boot.CamelAutoConfiguration") +@EnableConfigurationProperties(TwitterSearchConnectorConfiguration.class) +public class TwitterSearchConnectorAutoConfiguration { + + @Autowired + private CamelContext camelContext; + @Autowired + private TwitterSearchConnectorConfiguration configuration; + + @Lazy + @Bean(name = "twitter-search-component") + @ConditionalOnClass(CamelContext.class) + @ConditionalOnMissingBean(name = "twitter-search-component") + public TwitterSearchComponent configureTwitterSearchComponent() + throws Exception { + 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); + return connector; + } + + @PostConstruct + public void postConstructTwitterSearchComponent() { + if (camelContext != null) { + Map<String, Object> parameters = new HashMap<>(); + for (Map.Entry<String, TwitterSearchConnectorConfigurationCommon> entry : configuration + .getConfigurations().entrySet()) { + parameters.clear(); + 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); + camelContext.addComponent(entry.getKey(), connector); + } catch (Exception e) { + throw new BeanCreationException(entry.getKey(), + e.getMessage(), e); + } + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorConfiguration.java ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorConfiguration.java b/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorConfiguration.java new file mode 100644 index 0000000..f65676c --- /dev/null +++ b/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorConfiguration.java @@ -0,0 +1,38 @@ +/** + * 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.foo.search.springboot; + +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Generated; +import org.springframework.boot.context.properties.ConfigurationProperties; + +@Generated("org.apache.camel.maven.connector.SpringBootAutoConfigurationMojo") +@ConfigurationProperties(prefix = "camel.connector.twitter-search") +public class TwitterSearchConnectorConfiguration + extends + TwitterSearchConnectorConfigurationCommon { + + /** + * Define additional configuration definitions + */ + private Map<String, TwitterSearchConnectorConfigurationCommon> configurations = new HashMap<>(); + + public Map<String, TwitterSearchConnectorConfigurationCommon> getConfigurations() { + return configurations; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/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 new file mode 100644 index 0000000..fb506f6 --- /dev/null +++ b/connectors/examples/twitter-search-connector/src/main/java/org/foo/search/springboot/TwitterSearchConnectorConfigurationCommon.java @@ -0,0 +1,116 @@ +/** + * 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.foo.search.springboot; + +import javax.annotation.Generated; + +/** + * This connector integrates with Twitter to send tweets or search for tweets + * and more. + * + * Generated by camel-package-maven-plugin - do not edit this file! + */ +@Generated("org.apache.camel.maven.connector.SpringBootAutoConfigurationMojo") +public class TwitterSearchConnectorConfigurationCommon { + + /** + * The access token + */ + private String accessToken; + /** + * The access token secret + */ + private String accessTokenSecret; + /** + * The consumer key + */ + private String consumerKey; + /** + * The consumer secret + */ + private String consumerSecret; + /** + * Filter out old tweets that has previously been polled. This state is + * stored in memory only and based on last tweet id. + */ + private boolean filterOld = true; + /** + * Can be used for search and streaming/filter. Multiple values can be + * separated with comma. + */ + private String keywords; + /** + * Milliseconds before the next poll. + */ + private long delay = 30000L; + + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public String getAccessTokenSecret() { + return accessTokenSecret; + } + + public void setAccessTokenSecret(String accessTokenSecret) { + this.accessTokenSecret = accessTokenSecret; + } + + public String getConsumerKey() { + return consumerKey; + } + + public void setConsumerKey(String consumerKey) { + this.consumerKey = consumerKey; + } + + public String getConsumerSecret() { + return consumerSecret; + } + + public void setConsumerSecret(String consumerSecret) { + this.consumerSecret = consumerSecret; + } + + public boolean isFilterOld() { + return filterOld; + } + + public void setFilterOld(boolean filterOld) { + this.filterOld = filterOld; + } + + public String getKeywords() { + return keywords; + } + + public void setKeywords(String keywords) { + this.keywords = keywords; + } + + public long getDelay() { + return delay; + } + + public void setDelay(long delay) { + this.delay = delay; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-search-connector/src/main/resources/META-INF/services/org/apache/camel/component/twitter-search ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-connector/src/main/resources/META-INF/services/org/apache/camel/component/twitter-search b/connectors/examples/twitter-search-connector/src/main/resources/META-INF/services/org/apache/camel/component/twitter-search new file mode 100644 index 0000000..34e94d4 --- /dev/null +++ b/connectors/examples/twitter-search-connector/src/main/resources/META-INF/services/org/apache/camel/component/twitter-search @@ -0,0 +1,18 @@ +# +# 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. +# + +class=org.foo.search.TwitterSearchComponent http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-search-connector/src/main/resources/META-INF/spring.factories ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-connector/src/main/resources/META-INF/spring.factories b/connectors/examples/twitter-search-connector/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..5eb5f31 --- /dev/null +++ b/connectors/examples/twitter-search-connector/src/main/resources/META-INF/spring.factories @@ -0,0 +1,19 @@ +# +# 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. +# + +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +org.foo.search.springboot.TwitterSearchConnectorAutoConfiguration http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/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 new file mode 100644 index 0000000..c870f82 --- /dev/null +++ b/connectors/examples/twitter-search-connector/src/main/resources/camel-connector-schema.json @@ -0,0 +1,30 @@ +{ + "component": { + "kind": "component", + "baseScheme": "twitter", + "scheme": "twitter-search", + "syntax": "twitter-search:kind", + "title": "TwitterSearch", + "description": "Search for twitter", + "label": "twitter", + "deprecated": false, + "async": false, + "consumerOnly": true, + "lenientProperties": false, + "javaType": "org.foo.search.TwitterSearchComponent", + "groupId": "org.foo", + "artifactId": "twitter-search-connector", + "version": "2.20.0-SNAPSHOT" + }, + "componentProperties": { + "accessToken": { "kind": "property", "displayName": "Access Token", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": true, "description": "The access token" }, + "accessTokenSecret": { "kind": "property", "displayName": "Access Token Secret", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": true, "description": "The access token secret" }, + "consumerKey": { "kind": "property", "displayName": "Consumer Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": true, "description": "The consumer key" }, + "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": { + "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." } + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/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 new file mode 100644 index 0000000..e33257c --- /dev/null +++ b/connectors/examples/twitter-search-connector/src/main/resources/camel-connector.json @@ -0,0 +1,25 @@ +{ + "baseScheme" : "twitter", + "baseGroupId" : "org.apache.camel", + "baseArtifactId" : "camel-twitter", + "baseVersion" : "2.20.0-SNAPSHOT", + "baseJavaType" : "org.apache.camel.component.twitter.TwitterComponent", + "name" : "TwitterSearch", + "scheme" : "twitter-search", + "javaType" : "org.foo.search.TwitterSearchComponent", + "groupId" : "org.foo", + "artifactId" : "twitter-search-connector", + "version" : "2.20.0-SNAPSHOT", + "description" : "Search for twitter", + "labels" : [ "twitter" ], + "pattern" : "From", + "inputDataType" : "none", + "outputDataType" : "java:twitter4j.Status", + "componentOptions" : [ "accessToken", "accessTokenSecret", "consumerKey", "consumerSecret" ], + "endpointOptions" : [ "delay", "keywords", "filterOld" ], + "endpointValues" : { + "kind" : "search", + "type" : "POLLING", + "delay" : 5000 + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-search-connector/src/test/java/org/foo/search/springbot/TwitterSearchConnectorTest.java ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-connector/src/test/java/org/foo/search/springbot/TwitterSearchConnectorTest.java b/connectors/examples/twitter-search-connector/src/test/java/org/foo/search/springbot/TwitterSearchConnectorTest.java new file mode 100644 index 0000000..ec77bec --- /dev/null +++ b/connectors/examples/twitter-search-connector/src/test/java/org/foo/search/springbot/TwitterSearchConnectorTest.java @@ -0,0 +1,65 @@ +package org.foo.search.springbot; + +import org.apache.camel.CamelContext; +import org.apache.camel.Endpoint; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.twitter.TwitterEndpointPolling; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@DirtiesContext +@SpringBootApplication +@SpringBootTest( + classes = { + TwitterSearchConnectorTest.TestConfiguration.class + } +) +public class TwitterSearchConnectorTest { + @Autowired + private CamelContext camelContext; + + @Test + public void testConfiguration() throws Exception { + TwitterEndpointPolling twitterEnpoint = null; + + for (Endpoint endpoint : camelContext.getEndpoints()) { + if (endpoint instanceof TwitterEndpointPolling) { + twitterEnpoint = (TwitterEndpointPolling)endpoint; + break; + } + } + + Assert.assertNotNull("No TwitterConsumerPolling found", twitterEnpoint); + Assert.assertTrue(twitterEnpoint.getEndpointUri().startsWith("twitter-search-component:")); + Assert.assertEquals("camelsearchtest", twitterEnpoint.getKeywords()); + Assert.assertFalse(twitterEnpoint.isFilterOld()); + } + + // *********************************** + // Configuration + // *********************************** + + @Configuration + public static class TestConfiguration { + @Bean + public RouteBuilder routeBuilder() { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("tw-search?keywords=camelsearchtest&filterOld=false") + .noAutoStartup() + .to("mock:result"); + } + }; + } + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-search-connector/src/test/resources/application.properties ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-connector/src/test/resources/application.properties b/connectors/examples/twitter-search-connector/src/test/resources/application.properties new file mode 100644 index 0000000..e13d809 --- /dev/null +++ b/connectors/examples/twitter-search-connector/src/test/resources/application.properties @@ -0,0 +1,7 @@ +camel.springboot.name = search + +camel.connector.twitter-search.configurations.tw-search.consumer-key = NMqaca1bzXsOcZhP2XlwA +camel.connector.twitter-search.configurations.tw-search.consumer-secret = VxNQiRLwwKVD0K9mmfxlTTbVdgRpriORypnUbHhxeQw +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 = cameltest \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-search-connector/src/test/resources/logback.xml ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-connector/src/test/resources/logback.xml b/connectors/examples/twitter-search-connector/src/test/resources/logback.xml new file mode 100644 index 0000000..8b3ce55 --- /dev/null +++ b/connectors/examples/twitter-search-connector/src/test/resources/logback.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<configuration> + + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <!-- encoders are assigned the type + ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> + <encoder> + <pattern>%d{HH:mm:ss.SSS} [%-15.15thread] %-5level %-30.30logger - %msg%n</pattern> + </encoder> + </appender> + + <appender name="FILE" class="ch.qos.logback.core.FileAppender"> + <encoder> + <pattern>%d{HH:mm:ss.SSS} [%-15.15thread] %-5level %-30.30logger - %msg%n</pattern> + </encoder> + <file>target/twitter-search-connector-test.log</file> + </appender> + + <root level="INFO"> + <appender-ref ref="FILE"/> + </root> +</configuration> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-search-example/README.md ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-example/README.md b/connectors/examples/twitter-search-example/README.md new file mode 100644 index 0000000..408c573 --- /dev/null +++ b/connectors/examples/twitter-search-example/README.md @@ -0,0 +1,18 @@ +## Twitter Search Example + +This example searches for some keywords + +This is an example that uses the `twitter-search` Camel connectors. These connectors +are used as if they are regular Camel components in Camel routes. + +### How to run + +This example can be run from the command line using: + + mvn spring-boot:run + +### Configuring Credentials + +The example uses the `@CamelTweet` twitter account for connecting to twitter. + +You can configure your own accounts in the `application.properties` file. http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-search-example/pom.xml ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-example/pom.xml b/connectors/examples/twitter-search-example/pom.xml new file mode 100644 index 0000000..f2e59e3 --- /dev/null +++ b/connectors/examples/twitter-search-example/pom.xml @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.camel</groupId> + <artifactId>connectors-examples</artifactId> + <version>2.20.0-SNAPSHOT</version> + <relativePath>..</relativePath> + </parent> + + <groupId>org.foo</groupId> + <artifactId>twitter-search-example</artifactId> + <name>Camel :: Connectors :: Examples :: Twitter Search Example</name> + <description>Twitter search</description> + <packaging>jar</packaging> + + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-dependencies</artifactId> + <version>${spring-boot-version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-spring-boot-dependencies</artifactId> + <version>${project.version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> + + <dependencies> + + <!-- spring-boot as runtime --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-spring-boot-starter</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-undertow</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-actuator</artifactId> + </dependency> + + <!-- connectors used in this example --> + <dependency> + <groupId>org.foo</groupId> + <artifactId>twitter-search-connector</artifactId> + <version>${project.version}</version> + </dependency> + + <!-- testing --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-test</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + + </dependencies> + + <build> + + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <version>${spring-boot-version}</version> + <executions> + <execution> + <goals> + <goal>repackage</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-search-example/src/main/java/org/foo/TwitterSearchApplication.java ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-example/src/main/java/org/foo/TwitterSearchApplication.java b/connectors/examples/twitter-search-example/src/main/java/org/foo/TwitterSearchApplication.java new file mode 100644 index 0000000..489de0a --- /dev/null +++ b/connectors/examples/twitter-search-example/src/main/java/org/foo/TwitterSearchApplication.java @@ -0,0 +1,32 @@ +/** + * 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.foo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +//CHECKSTYLE:OFF +@SpringBootApplication +public class TwitterSearchApplication { + /** + * A main method to start this application. + */ + public static void main(String[] args) { + SpringApplication.run(TwitterSearchApplication.class, args); + } +} +//CHECKSTYLE:ON http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-search-example/src/main/java/org/foo/TwitterSearchRoute.java ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-example/src/main/java/org/foo/TwitterSearchRoute.java b/connectors/examples/twitter-search-example/src/main/java/org/foo/TwitterSearchRoute.java new file mode 100644 index 0000000..bbe5d3c --- /dev/null +++ b/connectors/examples/twitter-search-example/src/main/java/org/foo/TwitterSearchRoute.java @@ -0,0 +1,29 @@ +/** + * 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.foo; + +import org.apache.camel.builder.RouteBuilder; +import org.springframework.stereotype.Component; + +@Component +public class TwitterSearchRoute extends RouteBuilder { + @Override + public void configure() throws Exception { + from("tw-search") + .log("Got ${body}"); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-search-example/src/main/resources/META-INF/LICENSE.txt ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-example/src/main/resources/META-INF/LICENSE.txt b/connectors/examples/twitter-search-example/src/main/resources/META-INF/LICENSE.txt new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/connectors/examples/twitter-search-example/src/main/resources/META-INF/LICENSE.txt @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed 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. + http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/connectors/examples/twitter-search-example/src/main/resources/META-INF/NOTICE.txt ---------------------------------------------------------------------- diff --git a/connectors/examples/twitter-search-example/src/main/resources/META-INF/NOTICE.txt b/connectors/examples/twitter-search-example/src/main/resources/META-INF/NOTICE.txt new file mode 100644 index 0000000..2e215bf --- /dev/null +++ b/connectors/examples/twitter-search-example/src/main/resources/META-INF/NOTICE.txt @@ -0,0 +1,11 @@ + ========================================================================= + == NOTICE file corresponding to the section 4 d of == + == the Apache License, Version 2.0, == + == in this case for the Apache Camel distribution. == + ========================================================================= + + This product includes software developed by + The Apache Software Foundation (http://www.apache.org/). + + Please read the different LICENSE files present in the licenses directory of + this distribution. http://git-wip-us.apache.org/repos/asf/camel/blob/3dd29006/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 new file mode 100644 index 0000000..d8e08ea --- /dev/null +++ b/connectors/examples/twitter-search-example/src/main/resources/application.properties @@ -0,0 +1,29 @@ +# +# 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. +# + +## name of CamelContext +camel.springboot.name = search + +## This uses the Twitter 'cameltweet' account for testing purposes. +## do NOT use this twitter account in your applications! + +camel.connector.twitter-search.configurations.tw-search.consumer-key = NMqaca1bzXsOcZhP2XlwA +camel.connector.twitter-search.configurations.tw-search.consumer-secret = VxNQiRLwwKVD0K9mmfxlTTbVdgRpriORypnUbHhxeQw +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 = cameltest +