You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2013/07/10 04:35:15 UTC

[3/3] git commit: CAMEL-6493 - add support for relationship API

CAMEL-6493 - add support for relationship API


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

Branch: refs/heads/master
Commit: bca3430097bc3752d6549f8e03ee44d659060b93
Parents: 6f32fa2
Author: Jonathan Anstey <ja...@gmail.com>
Authored: Wed Jul 10 00:04:50 2013 -0230
Committer: Jonathan Anstey <ja...@gmail.com>
Committed: Wed Jul 10 00:04:50 2013 -0230

----------------------------------------------------------------------
 .../camel/component/yammer/YammerEndpoint.java  |  2 +
 .../component/yammer/YammerFunctionType.java    |  3 +-
 .../YammerRelationshipPollingConsumer.java      | 91 ++++++++++++++++++++
 .../component/yammer/model/Relationships.java   | 59 +++++++++++++
 .../yammer/YammerRelationshipRouteTest.java     | 58 +++++++++++++
 .../src/test/resources/relationships.json       | 28 ++++++
 6 files changed, 240 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/bca34300/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 6e392a9..e48dc3d 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
@@ -59,6 +59,8 @@ public class YammerEndpoint extends ScheduledPollEndpoint {
         case USERS:
         case CURRENT:
             return new YammerUserPollingConsumer(this, processor);
+        case RELATIONSHIPS:
+            return new YammerRelationshipPollingConsumer(this, processor);
         default:
             throw new Exception(String.format("%s is not a valid Yammer function type.", config.getFunction()));
         }  

http://git-wip-us.apache.org/repos/asf/camel/blob/bca34300/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerFunctionType.java
----------------------------------------------------------------------
diff --git a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerFunctionType.java b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerFunctionType.java
index 2735c93..649bff5 100644
--- a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerFunctionType.java
+++ b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerFunctionType.java
@@ -18,7 +18,8 @@ package org.apache.camel.component.yammer;
 
 public enum YammerFunctionType {
     MESSAGES, MY_FEED, ALGO, FOLLOWING, SENT, PRIVATE, 
-    USERS, CURRENT;
+    USERS, CURRENT,
+    RELATIONSHIPS;
 
     public static YammerFunctionType fromUri(String uri) {
         for (YammerFunctionType endpointType : YammerFunctionType.values()) {

http://git-wip-us.apache.org/repos/asf/camel/blob/bca34300/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
new file mode 100644
index 0000000..6ef5ce5
--- /dev/null
+++ b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerRelationshipPollingConsumer.java
@@ -0,0 +1,91 @@
+/**
+ * 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.util.concurrent.TimeUnit;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.component.yammer.model.Relationships;
+import org.apache.camel.impl.ScheduledPollConsumer;
+import org.codehaus.jackson.map.ObjectMapper;
+
+/**
+ * A Yammer consumer that periodically polls relationships from Yammer's relationship API.
+ */
+public class YammerRelationshipPollingConsumer extends ScheduledPollConsumer {
+    private final YammerEndpoint endpoint;
+    private final String apiUrl;
+    
+    public YammerRelationshipPollingConsumer(YammerEndpoint endpoint, Processor processor) throws Exception {
+        super(endpoint, processor);
+        this.endpoint = endpoint;
+
+        long delay = endpoint.getConfig().getDelay();
+        setDelay(delay);
+        setTimeUnit(TimeUnit.MILLISECONDS);
+        apiUrl = getApiUrl();
+    }
+
+    private String getApiUrl() throws Exception {    
+        StringBuilder url = new StringBuilder();
+        
+        String function = endpoint.getConfig().getFunction();
+        switch (YammerFunctionType.fromUri(function)) {
+        case RELATIONSHIPS:
+            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 relationship function type.", function));
+        }        
+        
+        return url.toString();
+    }
+
+    
+    @Override
+    protected int poll() throws Exception {
+        Exchange exchange = endpoint.createExchange();
+
+        try {
+            String jsonBody = endpoint.getConfig().getRequestor(apiUrl).send();
+
+            if (!endpoint.getConfig().isUseJson()) {
+                ObjectMapper jsonMapper = new ObjectMapper();
+                Relationships relationships = jsonMapper.readValue(jsonBody, Relationships.class);
+                
+                exchange.getIn().setBody(relationships);
+            } else {
+                exchange.getIn().setBody(jsonBody);
+            }
+
+            // send message to next processor in the route
+            getProcessor().process(exchange);
+
+            return 1; // number of messages polled
+        } finally {
+            // log exception if an exception occurred and was not handled
+            if (exchange.getException() != null) {
+                getExceptionHandler().handleException("Error processing exchange", exchange, exchange.getException());
+            }
+        }
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/bca34300/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/model/Relationships.java
----------------------------------------------------------------------
diff --git a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/model/Relationships.java b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/model/Relationships.java
new file mode 100644
index 0000000..17e6d00
--- /dev/null
+++ b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/model/Relationships.java
@@ -0,0 +1,59 @@
+/**
+ * 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.model;
+
+import java.util.List;
+
+import org.codehaus.jackson.annotate.JsonIgnoreProperties;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Relationships {
+
+    private List<User> subordinates;
+    private List<User> superiors;
+    private List<User> colleagues;
+
+    public List<User> getSubordinates() {
+        return subordinates;
+    }
+
+    public void setSubordinates(List<User> subordinates) {
+        this.subordinates = subordinates;
+    }
+
+    public List<User> getSuperiors() {
+        return superiors;
+    }
+
+    public void setSuperiors(List<User> superiors) {
+        this.superiors = superiors;
+    }
+
+    public List<User> getColleagues() {
+        return colleagues;
+    }
+
+    public void setColleagues(List<User> colleagues) {
+        this.colleagues = colleagues;
+    }
+
+    @Override
+    public String toString() {
+        return "Relationships [subordinates=" + subordinates + ", superiors=" + superiors + ", colleagues=" + colleagues + "]";
+    }   
+    
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/bca34300/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerRelationshipRouteTest.java
----------------------------------------------------------------------
diff --git a/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerRelationshipRouteTest.java b/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerRelationshipRouteTest.java
new file mode 100644
index 0000000..baaa876
--- /dev/null
+++ b/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerRelationshipRouteTest.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 java.util.List;
+
+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.Relationships;
+import org.junit.Test;
+
+public class YammerRelationshipRouteTest extends YammerComponentTestSupport {
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testConsumeAllUsers() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedMinimumMessageCount(1);
+        assertMockEndpointsSatisfied();
+        
+        Exchange exchange = mock.getExchanges().get(0);
+        Relationships relationships = exchange.getIn().getBody(Relationships.class);
+
+        assertEquals(1, relationships.getSuperiors().size());
+        assertEquals("Joe Camel", relationships.getSuperiors().get(0).getFullName());        
+    }
+
+    @Override
+    protected String jsonFile() {
+        return "/relationships.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("yammer:relationships?consumerKey=aConsumerKey&consumerSecret=aConsumerSecretKey&accessToken=aAccessToken").to("mock:result");
+            }
+        };
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/bca34300/components/camel-yammer/src/test/resources/relationships.json
----------------------------------------------------------------------
diff --git a/components/camel-yammer/src/test/resources/relationships.json b/components/camel-yammer/src/test/resources/relationships.json
new file mode 100644
index 0000000..da7cbd9
--- /dev/null
+++ b/components/camel-yammer/src/test/resources/relationships.json
@@ -0,0 +1,28 @@
+{
+	"subordinates":[
+		
+	],
+	"superiors":[
+		{
+			"mugshot_url":"",
+			"stats":{
+				"updates":24,
+				"following":6,
+				"followers":80
+			},
+			"state":"active",
+			"url":"https://www.yammer.com/api/v1/users/123456",
+			"job_title":"",
+			"type":"user",
+			"mugshot_url_template":"",
+			"web_url":"https://www.yammer.com/redhat.com/users/jcamel",
+			"full_name":"Joe Camel",
+			"id":143117,
+			"activated_at":"2010/01/21 16:24:25 +0000",
+			"name":"jcamel"
+		}
+	],
+	"colleagues":[
+		
+	]
+}
\ No newline at end of file