Component docs
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a0003f56 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a0003f56 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a0003f56 Branch: refs/heads/master Commit: a0003f5645b073682c61fab245b23f66dc143cb9 Parents: dab79df Author: Claus Ibsen <davscl...@apache.org> Authored: Mon Jun 1 09:06:14 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Jun 1 09:06:14 2015 +0200 ---------------------------------------------------------------------- .../camel/component/slack/SlackComponent.java | 28 ++++----- .../camel/component/slack/SlackEndpoint.java | 60 +++++++++++++------- .../camel/component/slack/SlackProducer.java | 47 ++++++++++----- .../component/slack/helper/SlackMessage.java | 28 --------- .../src/test/resources/log4j.properties | 35 ++++++++++++ 5 files changed, 116 insertions(+), 82 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/a0003f56/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackComponent.java b/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackComponent.java index fd1c9ff..9929d82 100644 --- a/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackComponent.java +++ b/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackComponent.java @@ -16,27 +16,26 @@ */ package org.apache.camel.component.slack; -import org.apache.camel.Endpoint; -import org.apache.camel.impl.DefaultComponent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.util.Map; -public class SlackComponent extends DefaultComponent { +import org.apache.camel.Endpoint; +import org.apache.camel.impl.UriEndpointComponent; - private static final transient Logger LOG = LoggerFactory.getLogger(SlackComponent.class); +public class SlackComponent extends UriEndpointComponent { private String webhookUrl; + public SlackComponent() { + super(SlackEndpoint.class); + } + /** * Create a slack endpoint * - * @param uri the full URI of the endpoint + * @param uri the full URI of the endpoint * @param channelName the channel or username that the message should be sent to - * @param parameters the optional parameters passed in + * @param parameters the optional parameters passed in * @return the camel endpoint - * @throws Exception */ @Override protected Endpoint createEndpoint(String uri, String channelName, Map<String, Object> parameters) throws Exception { @@ -45,19 +44,12 @@ public class SlackComponent extends DefaultComponent { return endpoint; } - /** - * Getter for the incoming webhook URL - * - * @return String containing the incoming webhook URL - */ public String getWebhookUrl() { return webhookUrl; } /** - * Setter for the incoming webhook URL - * - * @param webhookUrl the incoming webhook URL + * The incoming webhook URL */ public void setWebhookUrl(String webhookUrl) { this.webhookUrl = webhookUrl; http://git-wip-us.apache.org/repos/asf/camel/blob/a0003f56/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackEndpoint.java b/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackEndpoint.java index 0278ea8..e3d0d10 100644 --- a/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackEndpoint.java +++ b/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackEndpoint.java @@ -20,17 +20,23 @@ import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.impl.DefaultEndpoint; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.camel.spi.Metadata; +import org.apache.camel.spi.UriEndpoint; +import org.apache.camel.spi.UriParam; +import org.apache.camel.spi.UriPath; +@UriEndpoint(scheme = "slack", title = "Slack", syntax = "slack:channel", producerOnly = true, label = "social") public class SlackEndpoint extends DefaultEndpoint { - private static final transient Logger LOG = LoggerFactory.getLogger(SlackEndpoint.class); - + @UriPath @Metadata(required = "true") + private String channel; + @UriParam private String webhookUrl; + @UriParam private String username; - private String channel; + @UriParam private String iconUrl; + @UriParam private String iconEmoji; /** @@ -46,25 +52,12 @@ public class SlackEndpoint extends DefaultEndpoint { this.channel = channelName; } - /** - * Creates a SlackProducer - * - * @return SlackProducer - * @throws Exception - */ @Override public Producer createProducer() throws Exception { SlackProducer producer = new SlackProducer(this); return producer; } - /** - * Unsupported operation - * - * @param processor - * @return - * @throws java.lang.UnsupportedOperationException - */ @Override public Consumer createConsumer(Processor processor) throws Exception { throw new UnsupportedOperationException("You cannot consume slack messages from this endpoint: " + getEndpointUri()); @@ -75,26 +68,46 @@ public class SlackEndpoint extends DefaultEndpoint { return true; } + /** + * The incoming webhook URL + */ + public void setWebhookUrl(String webhookUrl) { + this.webhookUrl = webhookUrl; + } + public String getWebhookUrl() { return webhookUrl; } + public String getChannel() { + return channel; + } + + /** + * The channel name (syntax #name) or slackuser (syntax @userName) to send a message directly to an user. + */ + public void setChannel(String channel) { + this.channel = channel; + } + public String getUsername() { return username; } + /** + * This is the username that the bot will have when sending messages to a channel or user. + */ public void setUsername(String username) { this.username = username; } - public String getChannel() { - return channel; - } - public String getIconUrl() { return iconUrl; } + /** + * The avatar that the component will use when sending message to a channel or user. + */ public void setIconUrl(String iconUrl) { this.iconUrl = iconUrl; } @@ -103,6 +116,9 @@ public class SlackEndpoint extends DefaultEndpoint { return iconEmoji; } + /** + * Use a Slack emoji as an avatar + */ public void setIconEmoji(String iconEmoji) { this.iconEmoji = iconEmoji; } http://git-wip-us.apache.org/repos/asf/camel/blob/a0003f56/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackProducer.java b/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackProducer.java index 7fcbb2e..637f830 100644 --- a/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackProducer.java +++ b/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackProducer.java @@ -16,7 +16,10 @@ */ package org.apache.camel.component.slack; -import org.apache.camel.CamelException; +import java.util.HashMap; +import java.util.Map; + +import org.apache.camel.CamelExchangeException; import org.apache.camel.Exchange; import org.apache.camel.component.slack.helper.SlackMessage; import org.apache.camel.impl.DefaultProducer; @@ -25,20 +28,12 @@ import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClientBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.json.simple.JSONObject; public class SlackProducer extends DefaultProducer { - private static final transient Logger LOG = LoggerFactory.getLogger(SlackProducer.class); - private SlackEndpoint slackEndpoint; - /** - * Constuctor - * - * @param endpoint a SlackEndpoint - */ public SlackProducer(SlackEndpoint endpoint) { super(endpoint); this.slackEndpoint = endpoint; @@ -60,16 +55,40 @@ public class SlackProducer extends DefaultProducer { slackMessage.setIconEmoji(slackEndpoint.getIconEmoji()); // Set the post body - StringEntity body = new StringEntity(slackMessage.toString()); + String json = asJson(slackMessage); + StringEntity body = new StringEntity(json); // Do the post httpPost.setEntity(body); HttpResponse response = client.execute(httpPost); - if (response.getStatusLine().getStatusCode() != 200) { - LOG.error("Error POSTing to Slack API: " + response.toString()); - throw new CamelException("Error POSTing to Slack API: " + response.toString()); + // 2xx is OK, anything else we regard as failure + if (response.getStatusLine().getStatusCode() < 200 || response.getStatusLine().getStatusCode() > 299) { + throw new CamelExchangeException("Error POSTing to Slack API: " + response.toString(), exchange); } } + + /** + * Returns a JSON string to be posted to the Slack API + * + * @return JSON string + */ + public String asJson(SlackMessage message) { + Map<String, String> jsonMap = new HashMap<String, String>(); + + // Put the values in a map + jsonMap.put("text", message.getText()); + jsonMap.put("channel", message.getChannel()); + jsonMap.put("username", message.getUsername()); + jsonMap.put("icon_url", message.getIconUrl()); + jsonMap.put("icon_emoji", message.getIconEmoji()); + + // Generate a JSONObject + JSONObject jsonObject = new JSONObject(jsonMap); + + // Return the string based on the JSON Object + return JSONObject.toJSONString(jsonObject); + } + } http://git-wip-us.apache.org/repos/asf/camel/blob/a0003f56/components/camel-slack/src/main/java/org/apache/camel/component/slack/helper/SlackMessage.java ---------------------------------------------------------------------- diff --git a/components/camel-slack/src/main/java/org/apache/camel/component/slack/helper/SlackMessage.java b/components/camel-slack/src/main/java/org/apache/camel/component/slack/helper/SlackMessage.java index ceba145..8b33633 100644 --- a/components/camel-slack/src/main/java/org/apache/camel/component/slack/helper/SlackMessage.java +++ b/components/camel-slack/src/main/java/org/apache/camel/component/slack/helper/SlackMessage.java @@ -16,11 +16,6 @@ */ package org.apache.camel.component.slack.helper; -import org.json.simple.JSONObject; - -import java.util.HashMap; -import java.util.Map; - public class SlackMessage { private String text; @@ -69,28 +64,5 @@ public class SlackMessage { this.iconEmoji = iconEmoji; } - /** - * Returns a JSON string to be posted to the Slack API - * - * @return JSON string - */ - public String toString() { - - Map<String, String> jsonMap = new HashMap<String, String>(); - - // Put the values in a map - jsonMap.put("text", this.text); - jsonMap.put("channel", this.channel); - jsonMap.put("username", this.username); - jsonMap.put("icon_url", this.iconUrl); - jsonMap.put("icon_emoji", this.iconEmoji); - - // Generate a JSONObject - JSONObject jsonObject = new JSONObject(jsonMap); - - // Return the string based on the JSON Object - return JSONObject.toJSONString(jsonMap); - - } } http://git-wip-us.apache.org/repos/asf/camel/blob/a0003f56/components/camel-slack/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/components/camel-slack/src/test/resources/log4j.properties b/components/camel-slack/src/test/resources/log4j.properties new file mode 100644 index 0000000..7b3e914 --- /dev/null +++ b/components/camel-slack/src/test/resources/log4j.properties @@ -0,0 +1,35 @@ +## --------------------------------------------------------------------------- +## 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. +## --------------------------------------------------------------------------- + +# +# The logging properties used during tests.. +# +log4j.rootLogger=INFO, file + +#log4j.logger.org.apache.camel=INFO + +# CONSOLE appender not used by default +log4j.appender.out=org.apache.log4j.ConsoleAppender +log4j.appender.out.layout=org.apache.log4j.PatternLayout +log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n + +# File appender +log4j.appender.file=org.apache.log4j.FileAppender +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n +log4j.appender.file.file=target/camel-slack-test.log +log4j.appender.file.append=false