From 797322eb90a1f5d21166fd691479b050ad7b754b Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 21 Nov 2011 09:24:05 -0500
Subject: [PATCH] Tighter Gravatar integration. New window/tab on most activity links.

---
 src/com/gitblit/utils/ActivityUtils.java |   66 +++++++++++++++++++++++++++++++++
 1 files changed, 66 insertions(+), 0 deletions(-)

diff --git a/src/com/gitblit/utils/ActivityUtils.java b/src/com/gitblit/utils/ActivityUtils.java
index 8c8a7ec..204fe3c 100644
--- a/src/com/gitblit/utils/ActivityUtils.java
+++ b/src/com/gitblit/utils/ActivityUtils.java
@@ -15,7 +15,11 @@
  */
 package com.gitblit.utils;
 
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.lang.reflect.Type;
 import java.text.DateFormat;
+import java.text.MessageFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
@@ -33,8 +37,10 @@
 import com.gitblit.GitBlit;
 import com.gitblit.models.Activity;
 import com.gitblit.models.Activity.RepositoryCommit;
+import com.gitblit.models.GravatarProfile;
 import com.gitblit.models.RefModel;
 import com.gitblit.models.RepositoryModel;
+import com.google.gson.reflect.TypeToken;
 
 /**
  * Utility class for building activity information from repositories.
@@ -127,4 +133,64 @@
 		}
 		return recentActivity;
 	}
+
+	/**
+	 * Returns the Gravatar profile, if available, for the specified email
+	 * address.
+	 * 
+	 * @param emailaddress
+	 * @return a Gravatar Profile
+	 * @throws IOException
+	 */
+	public static GravatarProfile getGravatarProfileFromAddress(String emailaddress)
+			throws IOException {
+		return getGravatarProfile(StringUtils.getMD5(emailaddress.toLowerCase()));
+	}
+
+	/**
+	 * Creates a Gravatar thumbnail url from the specified email address.
+	 * 
+	 * @param email
+	 *            address to query Gravatar
+	 * @param width
+	 *            size of thumbnail. if width <= 0, the defalt of 60 is used.
+	 * @return
+	 */
+	public static String getGravatarThumbnailUrl(String email, int width) {
+		if (width <= 0) {
+			width = 60;
+		}
+		String emailHash = StringUtils.getMD5(email);
+		String url = MessageFormat.format(
+				"http://www.gravatar.com/avatar/{0}?s={1,number,0}&d=identicon", emailHash, width);
+		return url;
+	}
+
+	/**
+	 * Returns the Gravatar profile, if available, for the specified hashcode.
+	 * address.
+	 * 
+	 * @param hash
+	 *            the hash of the email address
+	 * @return a Gravatar Profile
+	 * @throws IOException
+	 */
+	public static GravatarProfile getGravatarProfile(String hash) throws IOException {
+		String url = MessageFormat.format("http://www.gravatar.com/{0}.json", hash);
+		// Gravatar has a complex json structure
+		Type profileType = new TypeToken<Map<String, List<GravatarProfile>>>() {
+		}.getType();
+		Map<String, List<GravatarProfile>> profiles = null;
+		try {
+			profiles = JsonUtils.retrieveJson(url, profileType);
+		} catch (FileNotFoundException e) {
+		}
+		if (profiles == null || profiles.size() == 0) {
+			return null;
+		}
+		// due to the complex json structure we need to pull out the profile
+		// from a list 2 levels deep
+		GravatarProfile profile = profiles.values().iterator().next().get(0);
+		return profile;
+	}
 }

--
Gitblit v1.9.1