You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/06/01 09:10:26 UTC
[12/14] camel git commit: Component docs
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 <da...@apache.org>
Authored: Mon Jun 1 09:06:14 2015 +0200
Committer: Claus Ibsen <da...@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