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