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
        }
 
 


Reply via email to