CAMEL-6493 - add yammer message producer

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e42674e2
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e42674e2
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e42674e2

Branch: refs/heads/master
Commit: e42674e2f09e00e3bdf63edd6fb626a146535ce7
Parents: 3a1db5c
Author: Jonathan Anstey <jans...@gmail.com>
Authored: Wed Jul 10 16:19:30 2013 -0230
Committer: Jonathan Anstey <jans...@gmail.com>
Committed: Wed Jul 10 16:19:30 2013 -0230

----------------------------------------------------------------------
 .../camel/component/yammer/ApiRequestor.java    |  5 +-
 .../component/yammer/ScribeApiRequestor.java    | 18 +++--
 .../camel/component/yammer/YammerEndpoint.java  |  2 +-
 .../yammer/YammerMessagePollingConsumer.java    |  2 +-
 .../component/yammer/YammerMessageProducer.java | 70 ++++++++++++++++++++
 .../YammerRelationshipPollingConsumer.java      |  2 +-
 .../yammer/YammerUserPollingConsumer.java       |  2 +-
 .../component/yammer/TestApiRequestor.java      | 13 +++-
 .../yammer/YammerMessageProducerRouteTest.java  | 58 ++++++++++++++++
 .../src/test/resources/message.json             | 45 +++++++++++++
 10 files changed, 203 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/e42674e2/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/ApiRequestor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/ApiRequestor.java
 
b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/ApiRequestor.java
index 0deed1c..6a87c8c 100644
--- 
a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/ApiRequestor.java
+++ 
b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/ApiRequestor.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.yammer;
 
 public interface ApiRequestor {
 
-    String send() throws Exception;
-
+    String get() throws Exception;
+    String post(String params) throws Exception;
+    
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/e42674e2/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/ScribeApiRequestor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/ScribeApiRequestor.java
 
b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/ScribeApiRequestor.java
index b18ef91..6d2ac99 100644
--- 
a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/ScribeApiRequestor.java
+++ 
b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/ScribeApiRequestor.java
@@ -31,12 +31,8 @@ public class ScribeApiRequestor implements ApiRequestor {
         this.apiAccessToken = apiAccessToken;
     }
     
-    /* (non-Javadoc)
-     * @see org.apache.camel.component.yammer.ApiRequestor#send()
-     */
-    @Override
-    public String send() throws Exception {
-        OAuthRequest request = new OAuthRequest(Verb.GET, apiUrl);
+    private String send(Verb verb, String params) throws Exception {
+        OAuthRequest request = new OAuthRequest(verb, apiUrl + ((params != 
null) ? params : ""));
         request.addQuerystringParameter(OAuthConstants.ACCESS_TOKEN, 
apiAccessToken);
         Response response = request.send();
         if (response.isSuccessful()) {                    
@@ -61,4 +57,14 @@ public class ScribeApiRequestor implements ApiRequestor {
     public void setApiAccessToken(String apiAccessToken) {
         this.apiAccessToken = apiAccessToken;
     }
+
+    @Override
+    public String get() throws Exception {
+        return send(Verb.GET, null);
+    }
+
+    @Override
+    public String post(String params) throws Exception {
+        return send(Verb.POST, params);
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/e42674e2/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerEndpoint.java
----------------------------------------------------------------------
diff --git 
a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerEndpoint.java
 
b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerEndpoint.java
index e48dc3d..663c4ac 100644
--- 
a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerEndpoint.java
+++ 
b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerEndpoint.java
@@ -44,7 +44,7 @@ public class YammerEndpoint extends ScheduledPollEndpoint {
     }
 
     public Producer createProducer() throws Exception {
-        throw new UnsupportedOperationException("YammerProducer is not 
implemented");
+        return new YammerMessageProducer(this);
     }
 
     public Consumer createConsumer(Processor processor) throws Exception {

http://git-wip-us.apache.org/repos/asf/camel/blob/e42674e2/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessagePollingConsumer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessagePollingConsumer.java
 
b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessagePollingConsumer.java
index 9432ff4..74d05c8 100644
--- 
a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessagePollingConsumer.java
+++ 
b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessagePollingConsumer.java
@@ -116,7 +116,7 @@ public class YammerMessagePollingConsumer extends 
ScheduledPollConsumer {
         Exchange exchange = endpoint.createExchange();
 
         try {
-            String jsonBody = 
endpoint.getConfig().getRequestor(apiUrl).send();   
+            String jsonBody = endpoint.getConfig().getRequestor(apiUrl).get(); 
  
             
             if (!endpoint.getConfig().isUseJson()) {
                 ObjectMapper jsonMapper = new ObjectMapper();

http://git-wip-us.apache.org/repos/asf/camel/blob/e42674e2/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessageProducer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessageProducer.java
 
b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessageProducer.java
new file mode 100644
index 0000000..c989f0c
--- /dev/null
+++ 
b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessageProducer.java
@@ -0,0 +1,70 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.yammer;
+
+import java.net.URLEncoder;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.component.yammer.model.Messages;
+import org.apache.camel.impl.DefaultProducer;
+import org.codehaus.jackson.map.ObjectMapper;
+
+public class YammerMessageProducer extends DefaultProducer {
+
+    private final YammerEndpoint endpoint;
+    private final String apiUrl;
+    
+    public YammerMessageProducer(YammerEndpoint endpoint) throws Exception {
+        super(endpoint);
+        this.endpoint = endpoint;
+        apiUrl = getApiUrl();
+    }
+
+    private String getApiUrl() throws Exception {    
+        StringBuilder url = new StringBuilder();
+        
+        String function = endpoint.getConfig().getFunction();
+        switch (YammerFunctionType.fromUri(function)) {
+        case MESSAGES:
+            url.append(YammerConstants.YAMMER_BASE_API_URL);
+            url.append(function);
+            url.append(".json");
+            break;
+        default:
+            throw new Exception(String.format("%s is not a valid Yammer 
message producer function type.", function));
+        }        
+        
+        return url.toString();
+    }
+    
+    @Override
+    public void process(Exchange exchange) throws Exception {
+        String body = exchange.getIn().getBody(String.class);               
+       
+        String jsonBody = 
endpoint.getConfig().getRequestor(apiUrl).post("?body=" + 
URLEncoder.encode(body, "UTF-8"));   
+        
+        // we set the body to the message that was created on the server
+        if (!endpoint.getConfig().isUseJson()) {
+            ObjectMapper jsonMapper = new ObjectMapper();
+            Messages messages = jsonMapper.readValue(jsonBody, Messages.class);
+            exchange.getIn().setBody(messages);
+        } else {
+            exchange.getIn().setBody(jsonBody);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/e42674e2/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerRelationshipPollingConsumer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerRelationshipPollingConsumer.java
 
b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerRelationshipPollingConsumer.java
index 2491b2d..4775241 100644
--- 
a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerRelationshipPollingConsumer.java
+++ 
b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerRelationshipPollingConsumer.java
@@ -74,7 +74,7 @@ public class YammerRelationshipPollingConsumer extends 
ScheduledPollConsumer {
         Exchange exchange = endpoint.createExchange();
 
         try {
-            String jsonBody = endpoint.getConfig().getRequestor(apiUrl).send();
+            String jsonBody = endpoint.getConfig().getRequestor(apiUrl).get();
 
             if (!endpoint.getConfig().isUseJson()) {
                 ObjectMapper jsonMapper = new ObjectMapper();

http://git-wip-us.apache.org/repos/asf/camel/blob/e42674e2/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerUserPollingConsumer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerUserPollingConsumer.java
 
b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerUserPollingConsumer.java
index 223e5d3..54826f5 100644
--- 
a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerUserPollingConsumer.java
+++ 
b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerUserPollingConsumer.java
@@ -71,7 +71,7 @@ public class YammerUserPollingConsumer extends 
ScheduledPollConsumer {
         Exchange exchange = endpoint.createExchange();
 
         try {
-            String jsonBody = endpoint.getConfig().getRequestor(apiUrl).send();
+            String jsonBody = endpoint.getConfig().getRequestor(apiUrl).get();
 
             if (!endpoint.getConfig().isUseJson()) {
                 ObjectMapper jsonMapper = new ObjectMapper();

http://git-wip-us.apache.org/repos/asf/camel/blob/e42674e2/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/TestApiRequestor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/TestApiRequestor.java
 
b/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/TestApiRequestor.java
index 8b11eb3..a1b4628 100644
--- 
a/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/TestApiRequestor.java
+++ 
b/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/TestApiRequestor.java
@@ -25,9 +25,18 @@ public class TestApiRequestor implements ApiRequestor {
         this.body = body;
     }
     
-    @Override
-    public String send() {
+    private String send() {
         return body;
     }
 
+    @Override
+    public String get() throws Exception {
+        return send();
+    }
+
+    @Override
+    public String post(String params) throws Exception {
+        return send();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/e42674e2/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerMessageProducerRouteTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerMessageProducerRouteTest.java
 
b/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerMessageProducerRouteTest.java
new file mode 100644
index 0000000..4fb4b09
--- /dev/null
+++ 
b/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerMessageProducerRouteTest.java
@@ -0,0 +1,58 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.yammer;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.yammer.model.Messages;
+import org.junit.Test;
+
+public class YammerMessageProducerRouteTest extends YammerComponentTestSupport 
{
+
+    @Test
+    public void testCreateMessage() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedMinimumMessageCount(1);
+        
+        String messageBodyToCreate = "Hi from Camel!";
+        template.sendBody("direct:start", messageBodyToCreate);
+        
+        assertMockEndpointsSatisfied();
+        
+        Exchange exchange = mock.getExchanges().get(0);
+        Messages messages = exchange.getIn().getBody(Messages.class);
+
+        assertEquals(1, messages.getMessages().size());
+        assertEquals(messageBodyToCreate, 
messages.getMessages().get(0).getBody().getPlain());
+    }
+
+    @Override
+    protected String jsonFile() {
+        return "/message.json";
+    }
+    
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() {
+                // using dummy keys here since we are mocking out calls to 
yammer.com with static json; in a real app, please use your own keys!
+                
from("direct:start").to("yammer:messages?consumerKey=aConsumerKey&consumerSecret=aConsumerSecretKey&accessToken=aAccessToken").to("mock:result");
+            }
+        };
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/e42674e2/components/camel-yammer/src/test/resources/message.json
----------------------------------------------------------------------
diff --git a/components/camel-yammer/src/test/resources/message.json 
b/components/camel-yammer/src/test/resources/message.json
new file mode 100644
index 0000000..e1c8c3d
--- /dev/null
+++ b/components/camel-yammer/src/test/resources/message.json
@@ -0,0 +1,45 @@
+{
+       "messages":[
+               {
+                       "replied_to_id":null,
+                       "network_id":7654,
+                       
"url":"https://www.yammer.com/api/v1/messages/305298242";,
+                       "thread_id":305298242,
+                       "id":305298242,
+                       "message_type":"update",
+                       "chat_client_sequence":null,
+                       "body":{
+                               "parsed":"Hi from Camel!",
+                               "plain":"Hi from Camel!",
+                               "rich":"Hi from Camel!"
+                       },
+                       "client_url":"https://www.yammer.com/";,
+                       "content_excerpt":"Hi from Camel!",
+                       "created_at":"2013/06/25 18:14:45 +0000",
+                       "client_type":"Web",
+                       "privacy":"public",
+                       "sender_type":"user",
+                       "liked_by":{
+                               "count":1,
+                               "names":[
+                                       {
+                                               "permalink":"janstey",
+                                               "full_name":"Jonathan Anstey",
+                                               "user_id":1499642294
+                                       }
+                                       
+                               ]
+                               
+                       },
+                       "sender_id":1499642294,
+                       "language":null,
+                       "system_message":false,
+                       "attachments":[
+                               
+                       ],
+                       "direct_message":false,
+                       
"web_url":"https://www.yammer.com/redhat.com/messages/305298242";
+               }
+               ]
+               
+       }

Reply via email to