James Moger
2012-01-05 cb285cbfddfc0b633d6b8cdb4dc0d2bd2b8b51ef
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.
@@ -79,7 +85,7 @@
            // determine commit branch
            String branch = objectId;
            if (StringUtils.isEmpty(branch)) {
            if (StringUtils.isEmpty(branch) && !commits.isEmpty()) {
               List<RefModel> headRefs = allRefs.get(commits.get(0).getId());
               List<String> localBranches = new ArrayList<String>();
               for (RefModel ref : headRefs) {
@@ -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;
   }
}