You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2011/06/14 22:30:16 UTC
svn commit: r1135779 - in /openejb/trunk/sandbox/tools: ./
src/main/java/org/apache/openejb/tools/twitter/
src/main/java/org/apache/openejb/tools/twitter/util/ src/main/resources/
src/test/java/org/apache/openejb/tools/
Author: rmannibucau
Date: Tue Jun 14 20:30:15 2011
New Revision: 1135779
URL: http://svn.apache.org/viewvc?rev=1135779&view=rev
Log:
OPENEJB-1565 retweet functionnality, thanks Vishwanath for this patch
Added:
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/RetweetAppConstants.java
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/ScreenNamesRetriever.java
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/UserStatusRetriever.java
openejb/trunk/sandbox/tools/src/main/resources/log4j.properties
Modified:
openejb/trunk/sandbox/tools/pom.xml
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/AuthorizationUrlGenerator.java
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/ContribListStatusRetriever.java
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/JsonResponseParser.java
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/OpenEJBMessageFilterUtil.java
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/Retweet.java
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/StoreAccessToken.java
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/util/RetweetAppUtil.java
openejb/trunk/sandbox/tools/src/test/java/org/apache/openejb/tools/RetweetITest.java
openejb/trunk/sandbox/tools/src/test/java/org/apache/openejb/tools/RetweetTest.java
Modified: openejb/trunk/sandbox/tools/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/pom.xml?rev=1135779&r1=1135778&r2=1135779&view=diff
==============================================================================
--- openejb/trunk/sandbox/tools/pom.xml (original)
+++ openejb/trunk/sandbox/tools/pom.xml Tue Jun 14 20:30:15 2011
@@ -115,6 +115,12 @@
<scope>compile</scope>
</dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.16</version>
+ </dependency>
+
</dependencies>
</project>
Modified: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/AuthorizationUrlGenerator.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/AuthorizationUrlGenerator.java?rev=1135779&r1=1135778&r2=1135779&view=diff
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/AuthorizationUrlGenerator.java (original)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/AuthorizationUrlGenerator.java Tue Jun 14 20:30:15 2011
@@ -30,7 +30,7 @@ import org.apache.openejb.tools.twitter.
import java.util.Properties;
public class AuthorizationUrlGenerator {
- static Properties retweetToolProperties;
+ static Properties retweetToolProperties;
static OAuthConsumer consumer;
static OAuthProvider provider;
Modified: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/ContribListStatusRetriever.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/ContribListStatusRetriever.java?rev=1135779&r1=1135778&r2=1135779&view=diff
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/ContribListStatusRetriever.java (original)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/ContribListStatusRetriever.java Tue Jun 14 20:30:15 2011
@@ -14,6 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+/*
package org.apache.openejb.tools.twitter;
import org.apache.http.HttpResponse;
@@ -56,3 +57,4 @@ public class ContribListStatusRetriever
return response;
}
}
+*/
\ No newline at end of file
Modified: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/JsonResponseParser.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/JsonResponseParser.java?rev=1135779&r1=1135778&r2=1135779&view=diff
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/JsonResponseParser.java (original)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/JsonResponseParser.java Tue Jun 14 20:30:15 2011
@@ -20,6 +20,7 @@ import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.impl.client.BasicResponseHandler;
+import org.apache.log4j.Logger;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
@@ -33,6 +34,8 @@ import java.util.Map;
public class JsonResponseParser {
+
+ private static Logger logger = Logger.getLogger(JsonResponseParser.class);
public static String getResponseBody(HttpResponse response) {
ResponseHandler<String> responseHander = new BasicResponseHandler();
@@ -45,7 +48,7 @@ public class JsonResponseParser {
e.printStackTrace();
}
- System.out.println("Response Body Data:" + responseBody);
+ logger.debug("Response Body Data:" + responseBody);
return responseBody;
}
@@ -64,8 +67,29 @@ public class JsonResponseParser {
} catch (IOException e) {
e.printStackTrace();
}
- System.out.println("Json to List of key value pairs:" + result);
+ logger.debug("Json to List of key value pairs:" + result);
return result;
}
+
+
+ @SuppressWarnings("rawtypes")
+ public static Map getMapFromJson(Reader jsonDataReader)
+ {
+ Map result = null;
+ ObjectMapper mapper = new ObjectMapper();
+ try {
+ result=mapper.readValue(jsonDataReader, new TypeReference<Map>() {
+ });
+ } catch (JsonParseException e) {
+ e.printStackTrace();
+ } catch (JsonMappingException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return result;
+
+ }
}
Modified: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/OpenEJBMessageFilterUtil.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/OpenEJBMessageFilterUtil.java?rev=1135779&r1=1135778&r2=1135779&view=diff
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/OpenEJBMessageFilterUtil.java (original)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/OpenEJBMessageFilterUtil.java Tue Jun 14 20:30:15 2011
@@ -16,56 +16,125 @@
*/
package org.apache.openejb.tools.twitter;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
import java.util.List;
import java.util.Map;
+import org.apache.log4j.Logger;
+
public class OpenEJBMessageFilterUtil {
+
+ static SimpleDateFormat dateFormat = new SimpleDateFormat(RetweetAppConstants.TWITTER_DATE_FORMAT);
+ private static Logger logger = Logger.getLogger(OpenEJBMessageFilterUtil.class);
+
+ @SuppressWarnings("rawtypes")
+ public static List<String> getNonRetweetedOpenEJBStatusIDs(
+ List<Map> keyValuePairs) {
+
+ List<String> openEJBStatusIDs = new ArrayList<String>();
+
+ for (Object keyValuePair : keyValuePairs) {
+ Map keyValue = (Map) keyValuePair;
+ if (keyValue.containsKey("text")) {
+ acceptOrRejectTweets(openEJBStatusIDs, keyValue);
+ }
+ }
+
+ return openEJBStatusIDs;
+ }
+
+ @SuppressWarnings("rawtypes")
+ private static void acceptOrRejectTweets(List<String> openEJBStatusIDs,
+ Map keyValue) {
+ String tweet = (String) keyValue.get("text");
+ if (!isOlderThanAnHour(keyValue) & isOpenEJBTweet(tweet) & !isRetweeted(keyValue) ) {
+ acceptTweet(openEJBStatusIDs, keyValue, tweet);
+ } else {
+ logWhyTweetWasRejected(keyValue, tweet);
+ }
+ }
+
+
+ @SuppressWarnings("rawtypes")
+ private static void acceptTweet(List<String> openEJBStatusIDs,
+ Map keyValue, String tweet) {
+ logger.info("Adding Tweet:" + tweet);
+ Number tweetId = (Number) keyValue.get("id");
+ openEJBStatusIDs.add(tweetId.toString());
+ }
+
+ @SuppressWarnings("rawtypes")
+ private static void logWhyTweetWasRejected(Map keyValue, String tweet) {
+ logger.debug("IsOpenEJBTweet?:" + isOpenEJBTweet(tweet));
+ logger.debug("Was it retweeted before:" + isRetweeted(keyValue));
+ logger.info("Tweet Not Considered:" + keyValue.get("text"));
+ }
@SuppressWarnings("rawtypes")
- public static List<String> getNonRetweetedOpenEJBStatusIDs(List<Map> keyValuePairs) {
-
- List<String> openEJBStatusIDs = new ArrayList<String>();
-
- for (Object keyValuePair : keyValuePairs) {
- Map keyValue = (Map) keyValuePair;
- if (keyValue.containsKey("text")) {
- String tweet = (String) keyValue.get("text");
- if (isOpenEJBTweet(tweet) && !isRetweeted(keyValue)) {
- System.out.println("Adding Tweet:" + tweet);
- Number tweetId = (Number) keyValue.get("id");
- openEJBStatusIDs.add(tweetId.toString());
- } else {
- System.out.println("Tweet Not Considered:" + keyValue.get("text"));
- System.out.println("IsOpenEJBTweet?:" + isOpenEJBTweet(tweet));
- System.out.println("Was it retweeted before:" + isRetweeted(keyValue));
- }
-
- }
- }
-
- return openEJBStatusIDs;
- }
+ private static boolean isOlderThanAnHour(Map keyValue) {
+ String dateAsString =(String) keyValue.get("created_at");
+ Calendar calendar = Calendar.getInstance();
+ calendar.add(Calendar.HOUR_OF_DAY, -1);
+ try {
+ Date tweetDate = dateFormat.parse(dateAsString);
+ logger.debug("Older than an hour?: "+tweetDate.before(calendar.getTime()));
+ return tweetDate.before(calendar.getTime());
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+
+ return false;
+ }
- @SuppressWarnings("rawtypes")
+ @SuppressWarnings("rawtypes")
private static boolean isRetweeted(Map keyValue) {
- Integer retweetCount = new Integer((Integer) keyValue.get("retweet_count"));
- if (retweetCount > 0) {
+
+ Integer retweetCount;
+ try {
+ retweetCount = null;
+ retweetCount = getRetweetCount(keyValue, retweetCount);
+ } catch (NumberFormatException ignoredException) {
+ //Sometimes retweet-count returned by twitter is "100+" A non Number.
+ //Ignoring such exception
+ logger.debug("Skipping this status...");
+ return true;
+ }
+
+ if (retweetCount > 0) {
return true;
} else {
return false;
}
}
+ @SuppressWarnings("rawtypes")
+ private static Integer getRetweetCount(Map keyValue, Integer retweetCount) {
+ if(keyValue.get("retweet_count") instanceof String) {
+ retweetCount = new Integer((String)keyValue.get("retweet_count"));
+ }
+ else if(keyValue.get("retweet_count") instanceof Integer) {
+ retweetCount =(Integer)keyValue.get("retweet_count");
+ }
+ return retweetCount;
+ }
+
+ /*
+ * tweet.contains(string) can't help since mentions can end with period, like "#openejb."
+ */
private static boolean isOpenEJBTweet(String tweet) {
String[] words = tweet.split(" ");
List<String> wordsAsList = Arrays.asList(words);
for (String word : wordsAsList) {
if (isOpenEJBMentioned(word)) {
String mentionName = word.trim().substring(1, 8);
- if (mentionName.equalsIgnoreCase("openejb")) {return true;}
+ if (mentionName.equalsIgnoreCase("openejb")) {
+ return true;}
}
}
return false;
Modified: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/Retweet.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/Retweet.java?rev=1135779&r1=1135778&r2=1135779&view=diff
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/Retweet.java (original)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/Retweet.java Tue Jun 14 20:30:15 2011
@@ -16,24 +16,25 @@
*/
package org.apache.openejb.tools.twitter;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Properties;
+import java.util.Set;
+
import oauth.signpost.OAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import oauth.signpost.exception.OAuthCommunicationException;
import oauth.signpost.exception.OAuthExpectationFailedException;
import oauth.signpost.exception.OAuthMessageSignerException;
+
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.log4j.Logger;
import org.apache.openejb.tools.twitter.util.RetweetAppUtil;
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
/**
* We should monitor this feed http://twitter.com/#!/OpenEJB/contributors
* and retweet anything that mentions OpenEJB
@@ -60,31 +61,26 @@ public class Retweet {
public static Properties retweetToolProperties = RetweetAppUtil.getTwitterAppProperties();
public static OAuthConsumer consumer;
+ private static Logger logger = Logger.getLogger(Retweet.class);
- @SuppressWarnings("rawtypes")
public static void main(String[] args) {
- HttpResponse response = ContribListStatusRetriever.getStatusesFromOpenEJBContributorsList();
- String responseBody = JsonResponseParser.getResponseBody(response);
- StringReader jsonDataReader = new StringReader(responseBody);
- //Each status is a entry in the list. Each status has various properties in the form of key-value pairs
- List<Map> listFromJson = JsonResponseParser.getListFromJson(jsonDataReader);
- List<String> nonRetweetedOpenEJBStatusIDs = OpenEJBMessageFilterUtil.getNonRetweetedOpenEJBStatusIDs(listFromJson);
- System.out.println("About to retweet:" + nonRetweetedOpenEJBStatusIDs);
- retweetIfListIsNotEmpty(nonRetweetedOpenEJBStatusIDs);
+ Set<String> nonRetweetedOpenEJBStatusIDs = UserStatusRetriever.getAllContributorsOpenEJBStatuses();
+ logger.info("About to retweet:" + nonRetweetedOpenEJBStatusIDs);
+ retweetIfNotEmpty(nonRetweetedOpenEJBStatusIDs);
}
- private static void retweetIfListIsNotEmpty(List<String> nonRetweetedOpenEJBStatusIDs) {
+ private static void retweetIfNotEmpty(Collection<String> nonRetweetedOpenEJBStatusIDs) {
if (!nonRetweetedOpenEJBStatusIDs.isEmpty()) {
- retweetThisListOfStatuses(nonRetweetedOpenEJBStatusIDs);
+ retweetThisCollectionOfStatuses(nonRetweetedOpenEJBStatusIDs);
} else {
- System.out.println("No message to retweet.");
+ logger.info("No message to retweet.");
}
}
- private static void retweetThisListOfStatuses(List<String> nonRetweetedOpenEJBStatusIDs) {
+ private static void retweetThisCollectionOfStatuses(Collection<String> nonRetweetedOpenEJBStatusIDs) {
for (String statusIDToRetweet : nonRetweetedOpenEJBStatusIDs) {
try {
@@ -114,14 +110,14 @@ public class Retweet {
}
public static HttpResponse retweet(String statusIDToRetweet) throws OAuthMessageSignerException, OAuthExpectationFailedException, OAuthCommunicationException {
- HttpPost httpPost = new HttpPost("http://api.twitter.com/1/statuses/retweet/" + statusIDToRetweet + ".json");
+ HttpPost httpPost = new HttpPost(RetweetAppConstants.RETWEET_URL+statusIDToRetweet+".json");
initConsumer();
consumer.sign(httpPost);
HttpResponse response = null;
try {
response = getHttpClient().execute(httpPost);
- System.out.println(response.getStatusLine());
- System.out.println("Retweeted " + statusIDToRetweet);
+ logger.debug(response.getStatusLine());
+ logger.info("Retweeted " + statusIDToRetweet);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
@@ -136,7 +132,7 @@ public class Retweet {
}
private static void pauseBeforeTheNextRetweet() {
- try {
+ try { //So it doesn't look like spamming
Thread.sleep(1000 * 60 * 5);
} catch (InterruptedException e) {
e.printStackTrace();
Added: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/RetweetAppConstants.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/RetweetAppConstants.java?rev=1135779&view=auto
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/RetweetAppConstants.java (added)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/RetweetAppConstants.java Tue Jun 14 20:30:15 2011
@@ -0,0 +1,24 @@
+/**
+ * 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.openejb.tools.twitter;
+
+public class RetweetAppConstants {
+
+ public static final String TWITTER_DATE_FORMAT="EEE MMM d H:m:s Z y";
+ public static final String USER_TIMELINE_STATUS_URL="http://api.twitter.com/1/statuses/user_timeline.json?include_rts=true&count=20&screen_name=";
+ public static final String RETWEET_URL="http://api.twitter.com/1/statuses/retweet/";
+}
Added: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/ScreenNamesRetriever.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/ScreenNamesRetriever.java?rev=1135779&view=auto
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/ScreenNamesRetriever.java (added)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/ScreenNamesRetriever.java Tue Jun 14 20:30:15 2011
@@ -0,0 +1,114 @@
+/**
+ * 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.openejb.tools.twitter;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import oauth.signpost.exception.OAuthCommunicationException;
+import oauth.signpost.exception.OAuthExpectationFailedException;
+import oauth.signpost.exception.OAuthMessageSignerException;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.log4j.Logger;
+
+
+public class ScreenNamesRetriever {
+
+ private static Logger logger = Logger.getLogger(ScreenNamesRetriever.class);
+
+ public static void main(String[] args) throws OAuthMessageSignerException, OAuthExpectationFailedException, OAuthCommunicationException {
+ getContributorsNames();
+ }
+
+ public static List<String> getContributorsNames()
+ {
+ List<String> contributorsScreenNames = null;
+ try {
+ contributorsScreenNames = getContributorsScreenNames();
+ } catch (OAuthMessageSignerException e) {
+ e.printStackTrace();
+ } catch (OAuthExpectationFailedException e) {
+ e.printStackTrace();
+ } catch (OAuthCommunicationException e) {
+ e.printStackTrace();
+ } catch (ClientProtocolException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return contributorsScreenNames;
+ }
+
+ @SuppressWarnings("rawtypes")
+ private static List<String> getContributorsScreenNames()
+ throws OAuthMessageSignerException,
+ OAuthExpectationFailedException, OAuthCommunicationException,
+ IOException, ClientProtocolException {
+ HttpResponse response = getContribListMembersResponse();
+ String responseBody = JsonResponseParser.getResponseBody(response);
+ StringReader reader= new StringReader(responseBody);
+ Map mapFromJson = JsonResponseParser.getMapFromJson(reader);
+ logger.debug("MAP:"+mapFromJson);
+ List listFromJson=(List) mapFromJson.get("users");
+ return getScreenNamesAlone(listFromJson);
+ }
+
+ @SuppressWarnings("rawtypes")
+ private static List<String> getScreenNamesAlone(List listFromJson)
+ {
+ List<String> contribMembersList = new ArrayList<String>();
+ for(Object object:listFromJson)
+ {
+ LinkedHashMap map = (LinkedHashMap)object;
+ contribMembersList.add((String)map.get("screen_name"));
+ }
+ return contribMembersList;
+ }
+
+
+ private static HttpResponse getContribListMembersResponse()
+ throws OAuthMessageSignerException,
+ OAuthExpectationFailedException, OAuthCommunicationException,
+ IOException, ClientProtocolException {
+ HttpClient client = new DefaultHttpClient();
+ HttpGet httpGet = getRequestForContribListMembers();
+ Retweet.initConsumer();
+ Retweet.consumer.sign(httpGet);
+ HttpResponse response = client.execute(getRequestForContribListMembers());
+ return response;
+ }
+
+ public static HttpGet getRequestForContribListMembers()
+ {
+ String listName="contributors";
+ String ownerScreenName="OpenEJB";
+ HttpGet httpGet = new HttpGet("http://api.twitter.com/1/lists/members.json?slug="+listName
+ +"&owner_screen_name="+ownerScreenName);
+ return httpGet;
+
+ }
+
+}
Modified: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/StoreAccessToken.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/StoreAccessToken.java?rev=1135779&r1=1135778&r2=1135779&view=diff
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/StoreAccessToken.java (original)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/StoreAccessToken.java Tue Jun 14 20:30:15 2011
@@ -14,6 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+/*
package org.apache.openejb.tools.twitter;
public class StoreAccessToken {
@@ -21,3 +22,4 @@ public class StoreAccessToken {
// Store it in File/DB
// This access token would be used for any READ/WRITE
}
+*/
\ No newline at end of file
Added: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/UserStatusRetriever.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/UserStatusRetriever.java?rev=1135779&view=auto
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/UserStatusRetriever.java (added)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/UserStatusRetriever.java Tue Jun 14 20:30:15 2011
@@ -0,0 +1,76 @@
+/**
+ * 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.openejb.tools.twitter;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.methods.HttpGet;
+
+public class UserStatusRetriever {
+
+ public static HttpGet getHttpRequestToRetrieveUserStatuses(String screenName)
+ {
+
+ HttpGet requestForUserStatus=new HttpGet(RetweetAppConstants.USER_TIMELINE_STATUS_URL+screenName);
+ return requestForUserStatus;
+ }
+
+ public static HttpResponse getUserStatusResponse(HttpGet userStatusRequest)
+ {
+ HttpResponse response = null;
+ try {
+ response = Retweet.getHttpClient().execute(userStatusRequest);
+ } catch (ClientProtocolException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return response;
+
+ }
+
+ @SuppressWarnings("rawtypes")
+ public static List<String> getUserOpenEJBStatus(String screenName)
+ {
+ HttpResponse userStatusResponse = getUserStatusResponse(getHttpRequestToRetrieveUserStatuses(screenName));
+ String responseBody = JsonResponseParser.getResponseBody(userStatusResponse);
+ StringReader dataToParse = new StringReader(responseBody);
+ List<Map> listFromJson = JsonResponseParser.getListFromJson(dataToParse);
+ List<String> nonRetweetedOpenEJBStatusIDs = OpenEJBMessageFilterUtil.getNonRetweetedOpenEJBStatusIDs(listFromJson);
+ return nonRetweetedOpenEJBStatusIDs;
+ }
+
+ public static Set<String> getAllContributorsOpenEJBStatuses()
+ {
+ List<String> contributorsNames = ScreenNamesRetriever.getContributorsNames();
+ Set<String> openEJBStatuses = new HashSet<String>();
+ for(String screenName : contributorsNames)
+ {
+ openEJBStatuses.addAll(getUserOpenEJBStatus(screenName));
+ }
+ return openEJBStatuses;
+ }
+
+}
Modified: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/util/RetweetAppUtil.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/util/RetweetAppUtil.java?rev=1135779&r1=1135778&r2=1135779&view=diff
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/util/RetweetAppUtil.java (original)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/twitter/util/RetweetAppUtil.java Tue Jun 14 20:30:15 2011
@@ -16,6 +16,7 @@
*/
package org.apache.openejb.tools.twitter.util;
+import org.apache.log4j.Logger;
import org.springframework.core.io.ClassPathResource;
import java.io.FileNotFoundException;
@@ -24,11 +25,12 @@ import java.util.Properties;
public class RetweetAppUtil {
+ private static Logger logger = Logger.getLogger(RetweetAppUtil.class);
public static Properties getTwitterAppProperties() {
- Properties retweetAppProperties = new Properties();
- try {
- ClassPathResource retweetToolPropertiesFile = new ClassPathResource(
+ Properties retweetAppProperties = new Properties();
+ try {
+ ClassPathResource retweetToolPropertiesFile = new ClassPathResource(
"RetweetTool.properties");
retweetAppProperties.load(retweetToolPropertiesFile
.getInputStream());
@@ -38,9 +40,8 @@ public class RetweetAppUtil {
e.printStackTrace();
}
- System.out.print("Using the following properties: ");
- System.out.print("---------------------------------");
- retweetAppProperties.list(System.out);
+ logger.info("Using the following properties: ");
+ logger.info(retweetAppProperties);
return retweetAppProperties;
}
Added: openejb/trunk/sandbox/tools/src/main/resources/log4j.properties
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/resources/log4j.properties?rev=1135779&view=auto
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/resources/log4j.properties (added)
+++ openejb/trunk/sandbox/tools/src/main/resources/log4j.properties Tue Jun 14 20:30:15 2011
@@ -0,0 +1,32 @@
+#
+# 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.
+#
+
+# Set root logger level to DEBUG and its only appender to Appender1.
+log4j.rootLogger=INFO, Appender1,Appender2
+
+# Appender1 is set to be a ConsoleAppender.
+log4j.appender.Appender1=org.apache.log4j.ConsoleAppender
+log4j.appender.Appender2=org.apache.log4j.RollingFileAppender
+log4j.appender.Appender2.File=RetweetTool.log
+
+
+# Appender2 uses PatternLayout.
+log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout
+log4j.appender.Appender1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+
+log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout
+log4j.appender.Appender2.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
Modified: openejb/trunk/sandbox/tools/src/test/java/org/apache/openejb/tools/RetweetITest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/test/java/org/apache/openejb/tools/RetweetITest.java?rev=1135779&r1=1135778&r2=1135779&view=diff
==============================================================================
--- openejb/trunk/sandbox/tools/src/test/java/org/apache/openejb/tools/RetweetITest.java (original)
+++ openejb/trunk/sandbox/tools/src/test/java/org/apache/openejb/tools/RetweetITest.java Tue Jun 14 20:30:15 2011
@@ -16,35 +16,35 @@
*/
package org.apache.openejb.tools;
-import static org.junit.Assert.assertNotNull;
-
-import java.io.StringReader;
-import java.util.List;
-import java.util.Map;
-
+import static org.junit.Assert.*;
+import java.io.IOException;
import org.apache.http.HttpResponse;
-import org.apache.openejb.tools.twitter.ContribListStatusRetriever;
-import org.apache.openejb.tools.twitter.JsonResponseParser;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.ResponseHandler;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.BasicResponseHandler;
+import org.apache.openejb.tools.twitter.ScreenNamesRetriever;
+import org.apache.openejb.tools.twitter.UserStatusRetriever;
import org.junit.Test;
public class RetweetITest {
-
-
- @SuppressWarnings("rawtypes")
@Test
- public void convertJsonResponseToListOfKeyValuePairs()
+ public void screenNamesListShouldNotBeEmpty()
{
- HttpResponse statusesFromOpenEJBContributorsList = ContribListStatusRetriever.getStatusesFromOpenEJBContributorsList();
- String responseBody = JsonResponseParser.getResponseBody(statusesFromOpenEJBContributorsList);
-
- assertNotNull(responseBody);
-
- StringReader jsonDataReader=new StringReader(responseBody);
- List<Map> listFromJson = JsonResponseParser.getListFromJson(jsonDataReader);
-
- assertNotNull(listFromJson);
+ assertFalse(ScreenNamesRetriever.getContributorsNames().isEmpty());
}
+ @Test
+ public void userStatusShouldBeRetrieved() throws ClientProtocolException, IOException
+ {
+ HttpGet httpGet = UserStatusRetriever.getHttpRequestToRetrieveUserStatuses("stratwine");
+ HttpResponse userStatusResponse = UserStatusRetriever.getUserStatusResponse(httpGet);
+ ResponseHandler<String> responseHander = new BasicResponseHandler();
+ String responseBody = (String)responseHander.handleResponse(userStatusResponse);
+ System.out.println(responseBody);
+ assertTrue(userStatusResponse.getStatusLine().getStatusCode()==200);
+
+ }
}
Modified: openejb/trunk/sandbox/tools/src/test/java/org/apache/openejb/tools/RetweetTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/test/java/org/apache/openejb/tools/RetweetTest.java?rev=1135779&r1=1135778&r2=1135779&view=diff
==============================================================================
--- openejb/trunk/sandbox/tools/src/test/java/org/apache/openejb/tools/RetweetTest.java (original)
+++ openejb/trunk/sandbox/tools/src/test/java/org/apache/openejb/tools/RetweetTest.java Tue Jun 14 20:30:15 2011
@@ -16,14 +16,8 @@
*/
package org.apache.openejb.tools;
-import static org.junit.Assert.assertTrue;
-import java.io.IOException;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.ResponseHandler;
-import org.apache.http.impl.client.BasicResponseHandler;
-import org.apache.openejb.tools.twitter.ContribListStatusRetriever;
import org.apache.openejb.tools.twitter.Retweet;
+import org.apache.openejb.tools.twitter.UserStatusRetriever;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -36,17 +30,12 @@ public class RetweetTest {
{
Retweet.initConsumer();
}
-
+
@Test
- public void contributorsListStatusesShouldBeRetrieved() throws ClientProtocolException, IOException
+ public void userStatusShouldBeRetrieved()
{
- HttpResponse response=ContribListStatusRetriever.getStatusesFromOpenEJBContributorsList();
-
- assertTrue(response.getStatusLine().getStatusCode()==200);
-
- ResponseHandler<String> responseHander = new BasicResponseHandler();
- String responseBody = (String)responseHander.handleResponse(response);
- System.out.println(responseBody);
+ UserStatusRetriever.getUserOpenEJBStatus("stratwine");
+ //No asserts. Just to check if it run without exceptions
}