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" + } + ] + + }