Updated Branches: refs/heads/master 924ebada9 -> 6f36a097d
CAMEL-6847 Fixed the FacebookConsumer since time issue with thanks to Dhiraj Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b4e75ee9 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b4e75ee9 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b4e75ee9 Branch: refs/heads/master Commit: b4e75ee971f982c4f30176d4266dc4023b6f525e Parents: 924ebad Author: Willem Jiang <ningji...@apache.org> Authored: Sat Oct 12 12:14:39 2013 +0800 Committer: Willem Jiang <ningji...@apache.org> Committed: Sat Oct 12 12:14:39 2013 +0800 ---------------------------------------------------------------------- .../component/facebook/FacebookConsumer.java | 14 +++++++++----- .../component/facebook/data/ReadingBuilder.java | 19 ++++--------------- .../facebook/FacebookComponentConsumerTest.java | 13 +++++++++++++ .../facebook/data/ReadingBuilderTest.java | 3 +-- 4 files changed, 27 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/b4e75ee9/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java ---------------------------------------------------------------------- diff --git a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java index 3f438fe..bbe121b 100644 --- a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java +++ b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookConsumer.java @@ -82,12 +82,13 @@ public class FacebookConsumer extends ScheduledPollConsumer { final Reading reading = (Reading) properties.get(READING_PPROPERTY); if (reading != null) { final String queryString = reading.toString(); - if (queryString.contains("since=")) { + if (queryString.contains(SINCE_PREFIX)) { // use the user supplied value to start with final int startIndex = queryString.indexOf(SINCE_PREFIX) + SINCE_PREFIX.length(); int endIndex = queryString.indexOf('&', startIndex); if (endIndex == -1) { - endIndex = queryString.length(); + // ignore the closing square bracket + endIndex = queryString.length() - 1; } final String strSince = queryString.substring(startIndex, endIndex); try { @@ -105,6 +106,12 @@ public class FacebookConsumer extends ScheduledPollConsumer { this.endpointProperties = Collections.unmodifiableMap(properties); } + @Override + public boolean isGreedy() { + // make this consumer not greedy to avoid making too many Facebook calls + return false; + } + private FacebookMethodsType findMethod() { FacebookMethodsType result; @@ -136,9 +143,6 @@ public class FacebookConsumer extends ScheduledPollConsumer { @Override protected int poll() throws Exception { - // Note mark this consumer as not greedy to avoid making too many Facebook calls - setGreedy(false); - // invoke the consumer method final Map<String, Object> args = getMethodArguments(); try { http://git-wip-us.apache.org/repos/asf/camel/blob/b4e75ee9/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/data/ReadingBuilder.java ---------------------------------------------------------------------- diff --git a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/data/ReadingBuilder.java b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/data/ReadingBuilder.java index 40c4b2f..30854e1 100644 --- a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/data/ReadingBuilder.java +++ b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/data/ReadingBuilder.java @@ -17,16 +17,12 @@ package org.apache.camel.component.facebook.data; import java.lang.reflect.Field; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; import facebook4j.Reading; -import org.apache.camel.component.facebook.FacebookConstants; - /** * Builds {@link facebook4j.Reading} instances. */ @@ -74,22 +70,15 @@ public final class ReadingBuilder { if (offset != null) { reading.offset(Integer.parseInt(offset.toString())); } - final SimpleDateFormat dateFormat = new SimpleDateFormat(FacebookConstants.FACEBOOK_DATE_FORMAT); final Object until = readingProperties.remove("until"); if (until != null) { - try { - reading.until(dateFormat.parse(until.toString())); - } catch (ParseException e) { - throw new RuntimeException("Error parsing property 'until' :" + e.getMessage(), e); - } + // take the string form as is to support PHP strtotime, no validation until API call! + reading.until(until.toString()); } final Object since = readingProperties.remove("since"); if (since != null) { - try { - reading.since(dateFormat.parse(since.toString())); - } catch (ParseException e) { - throw new RuntimeException("Error parsing property 'since' :" + e.getMessage(), e); - } + // take the string form as is to support PHP strtotime, no validation until API call! + reading.since(since.toString()); } final Object metadata = readingProperties.remove("metadata"); if (metadata != null && Boolean.parseBoolean(metadata.toString())) { http://git-wip-us.apache.org/repos/asf/camel/blob/b4e75ee9/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentConsumerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentConsumerTest.java b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentConsumerTest.java index 51ca80e..2bb84db 100644 --- a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentConsumerTest.java +++ b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentConsumerTest.java @@ -74,6 +74,13 @@ public class FacebookComponentConsumerTest extends CamelFacebookTestSupport { assertFalse("Empty rawJSON", rawJSON.isEmpty()); } + @Test + public void testGetPosts() throws Exception { + final MockEndpoint mock = getMockEndpoint("mock:testGetPosts"); + mock.expectedMinimumMessageCount(1); + mock.assertIsSatisfied(); + } + @Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { @@ -100,6 +107,12 @@ public class FacebookComponentConsumerTest extends CamelFacebookTestSupport { from("facebook://me?jsonStoreEnabled=true&" + getOauthParams()) .to("mock:testJsonStoreEnabled"); + // test unix timestamp support + long unixSince = TimeUnit.SECONDS.convert(System.currentTimeMillis(), TimeUnit.MILLISECONDS) + - TimeUnit.SECONDS.convert(30, TimeUnit.DAYS); + from("facebook://posts?reading.limit=10&reading.since=" + unixSince + "&" + getOauthParams()) + .to("mock:testGetPosts"); + // TODO add tests for the rest of the supported methods } }; http://git-wip-us.apache.org/repos/asf/camel/blob/b4e75ee9/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/data/ReadingBuilderTest.java ---------------------------------------------------------------------- diff --git a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/data/ReadingBuilderTest.java b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/data/ReadingBuilderTest.java index 1856228..7329ca7 100644 --- a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/data/ReadingBuilderTest.java +++ b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/data/ReadingBuilderTest.java @@ -23,7 +23,6 @@ import java.util.Locale; import java.util.Map; import facebook4j.Reading; - import org.apache.camel.component.facebook.FacebookConstants; import org.junit.Test; @@ -73,7 +72,7 @@ public class ReadingBuilderTest { properties.put("offset", "1000"); final String facebookDate = new SimpleDateFormat(FacebookConstants.FACEBOOK_DATE_FORMAT).format(new Date()); properties.put("since", facebookDate); - properties.put("until", facebookDate); + properties.put("until", "arbitrary date, to be validated by Facebook call"); properties.put("withLocation", ""); // set properties on Reading