r6916 - in dumbhippo/trunk/server/src/com/dumbhippo: server/impl services web/servlets



Author: marinaz
Date: 2007-11-14 18:42:02 -0600 (Wed, 14 Nov 2007)
New Revision: 6916

Modified:
   dumbhippo/trunk/server/src/com/dumbhippo/server/impl/FacebookTrackerBean.java
   dumbhippo/trunk/server/src/com/dumbhippo/services/FacebookWebServices.java
   dumbhippo/trunk/server/src/com/dumbhippo/web/servlets/FacebookAddServlet.java
Log:
Display a list of five latest activities from the user's Mugshot on their Facebook profile when the user adds the Facebook application.

Modified: dumbhippo/trunk/server/src/com/dumbhippo/server/impl/FacebookTrackerBean.java
===================================================================
--- dumbhippo/trunk/server/src/com/dumbhippo/server/impl/FacebookTrackerBean.java	2007-11-14 22:52:26 UTC (rev 6915)
+++ dumbhippo/trunk/server/src/com/dumbhippo/server/impl/FacebookTrackerBean.java	2007-11-15 00:42:02 UTC (rev 6916)
@@ -19,6 +19,7 @@
 
 import com.dumbhippo.GlobalSetup;
 import com.dumbhippo.Pair;
+import com.dumbhippo.Site;
 import com.dumbhippo.persistence.ExternalAccount;
 import com.dumbhippo.persistence.ExternalAccountType;
 import com.dumbhippo.persistence.FacebookAccount;
@@ -33,7 +34,11 @@
 import com.dumbhippo.server.FacebookSystemException;
 import com.dumbhippo.server.FacebookTracker;
 import com.dumbhippo.server.Notifier;
+import com.dumbhippo.server.Pageable;
+import com.dumbhippo.server.Stacker;
+import com.dumbhippo.server.blocks.BlockView;
 import com.dumbhippo.server.util.EJBUtil;
+import com.dumbhippo.server.views.AnonymousViewpoint;
 import com.dumbhippo.server.views.UserViewpoint;
 import com.dumbhippo.services.FacebookPhotoDataView;
 import com.dumbhippo.services.FacebookWebServices;
@@ -52,18 +57,23 @@
 	// how long to wait on the Facebook API call
 	static protected final int REQUEST_TIMEOUT = 1000 * 12;
 	
+	static private final int INITIAL_BLOCKS_PER_PAGE = 5;
+	
 	@EJB
 	private ExternalAccountSystem externalAccounts;
 	
 	@PersistenceContext(unitName = "dumbhippo")
 	private EntityManager em; 
-		
+	
 	@EJB
 	private Configuration config;
 	
 	@EJB
 	private Notifier notifier;
 	
+	@EJB
+	private Stacker stacker;
+	
 	@WebServiceCache
 	private FacebookPhotoDataCache taggedPhotosCache;
 	
@@ -124,6 +134,9 @@
 		    facebookAccount.setSessionKeyValid(true);	
 	    facebookAccount.setApplicationEnabled(applicationEnabled);
 			
+		FacebookWebServices ws = new FacebookWebServices(REQUEST_TIMEOUT, config);
+		ws.setProfileFbml(facebookAccount, createFbmlForUser(viewpoint.getViewer()));
+
 		FacebookEvent loginStatusEvent = getLoginStatusEvent(facebookAccount, true);
 		if (loginStatusEvent != null)  
 		    notifier.onFacebookEvent(facebookAccount.getExternalAccount().getAccount().getOwner(), loginStatusEvent);
@@ -435,4 +448,34 @@
         notifier.onFacebookEventCreated(event.getFacebookAccount().getExternalAccount().getAccount().getOwner(),
         		                        event);
 	}
+	
+	private String createFbmlForUser(User user) {
+		StringBuilder fbmlSb = new StringBuilder("");
+		Pageable<BlockView> pageableMugshot = new Pageable<BlockView>("mugshot");
+		pageableMugshot.setPosition(0);
+		pageableMugshot.setInitialPerPage(INITIAL_BLOCKS_PER_PAGE);
+		pageableMugshot.setFlexibleResultCount(true);
+		stacker.pageStack(AnonymousViewpoint.getInstance(Site.NONE), user, pageableMugshot, true);
+		for (BlockView blockView : pageableMugshot.getResults()) {
+			fbmlSb.append(
+			    "<table cellspacing='0' cellpadding='0'>" +
+			    "<tbody><tr><td>" +
+	            "<img src='http://mugshot.org"; + blockView.getIcon() + "' style='width: 16; height: 16; border: none; margin-right: 3px;'/>" +
+			    "</td><td>" +
+			    blockView.getSummaryHeading() +
+		        ": <a target='_blank' href='" + getAbsoluteUrl(blockView.getSummaryLink()) + "'>" + blockView.getSummaryLinkText() + "</a>" +
+			    "</td></tr></table>");
+		}
+		fbmlSb.append("<a target='blank' style='font-size: 12px; font-weight: bold; margin-top: 10px;' href='" + getAbsoluteUrl("/person?who=" + user.getId().toString()) + "'>" +
+				      "Visit My Mugshot to See More</a>");
+		return fbmlSb.toString();
+	}
+	
+	private String getAbsoluteUrl(String link)  {
+		if (link.startsWith("/")) {
+			String baseurl = config.getBaseUrlMugshot().toExternalForm();
+			return baseurl + link;
+		}		
+		return link;
+	}
 }

Modified: dumbhippo/trunk/server/src/com/dumbhippo/services/FacebookWebServices.java
===================================================================
--- dumbhippo/trunk/server/src/com/dumbhippo/services/FacebookWebServices.java	2007-11-14 22:52:26 UTC (rev 6915)
+++ dumbhippo/trunk/server/src/com/dumbhippo/services/FacebookWebServices.java	2007-11-15 00:42:02 UTC (rev 6916)
@@ -1,5 +1,6 @@
 package com.dumbhippo.services;
 
+import java.io.IOException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
@@ -23,6 +24,8 @@
 import com.dumbhippo.server.FacebookSystemException;
 import com.dumbhippo.server.HippoProperty;
 import com.dumbhippo.server.Configuration.PropertyNotFoundException;
+import com.facebook.api.FacebookException;
+import com.facebook.api.FacebookXmlRestClient;
 
 public class FacebookWebServices extends AbstractXmlRequest<FacebookSaxHandler> {
 	static private final Logger logger = GlobalSetup.getLogger(FacebookWebServices.class);
@@ -315,6 +318,18 @@
         return modifiedAlbums;
 	}
 	
+	public void setProfileFbml(FacebookAccount facebookAccount, String profileFbml) {
+		try {
+	        FacebookXmlRestClient facebookClient = new FacebookXmlRestClient(apiKey, secret, facebookAccount.getSessionKey());	
+	        facebookClient.profile_setFBML(profileFbml, Integer.valueOf(facebookAccount.getFacebookUserId()));
+		} catch (FacebookException e) {
+			logger.error("FacebookException when setting profile FBML for {}: {}",
+					     facebookAccount.getFacebookUserId(), e.toString());
+		} catch (IOException e) {
+			logger.error("IOException when converting {} to an integer", facebookAccount.getFacebookUserId());
+		}
+	}
+	
 	private String generateFacebookRequest(List<String> params) {
 		params.add("api_key=" + apiKey);
 		params.add("call_id=" + System.currentTimeMillis());

Modified: dumbhippo/trunk/server/src/com/dumbhippo/web/servlets/FacebookAddServlet.java
===================================================================
--- dumbhippo/trunk/server/src/com/dumbhippo/web/servlets/FacebookAddServlet.java	2007-11-14 22:52:26 UTC (rev 6915)
+++ dumbhippo/trunk/server/src/com/dumbhippo/web/servlets/FacebookAddServlet.java	2007-11-15 00:42:02 UTC (rev 6916)
@@ -30,6 +30,9 @@
 	
 	static final long serialVersionUID = 1;
 	
+	// how long to wait on the Facebook API call
+	static protected final int REQUEST_TIMEOUT = 1000 * 12;
+	
 	private Configuration config;
 	
 	@Override



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]