package org.bubblecloud.ilves.util; import com.vaadin.server.ExternalResource; import com.vaadin.server.Sizeable; import com.vaadin.ui.Link; import org.apache.commons.codec.digest.DigestUtils; import org.bubblecloud.ilves.exception.SiteException; import org.bubblecloud.ilves.site.Site; import java.net.MalformedURLException; import java.net.URL; /** * Utility class for accessing gravatar images. */ public class GravatarUtil { /** The gravatar URL. */ private final static String GRAVATAR_URL = "http://www.gravatar.com/avatar/"; public static Link getGravatarImageLink(final String email) { final URL gravatarUrl = GravatarUtil.getGravatarUrl(email, 32); final Link link = new Link(null, new ExternalResource("http://www.gravatar.com/")); link.setStyleName("gravatar"); link.setIcon(new ExternalResource(gravatarUrl)); link.setWidth(32, Sizeable.Unit.PIXELS); link.setHeight(32, Sizeable.Unit.PIXELS); return link; } /** * Get the gravatar URL based on email address. * @param email the email address * @param size the size in pixels * @return the gravatar URL */ public static URL getGravatarUrl(final String email, int size) { if (Site.getCurrent().getSiteContext().getObject("gravatar-url-" + email) == null) { Site.getCurrent().getSiteContext().putObject("gravatar-url-" + email, constructGravatarUrl(email, size)); } try { return new URL((String) Site.getCurrent().getSiteContext().getObject("gravatar-url-" + email)); } catch (MalformedURLException e) { throw new SiteException("Error in gravatar URL format: " + Site.getCurrent().getSiteContext().getObject("gravatar-url")); } } /** * Constructs gravatar URL from email address. * @param email the email address * @param size the size in pixels * @return the gravatar URL. */ private static String constructGravatarUrl(final String email, final int size) { return GRAVATAR_URL + DigestUtils.md5Hex(email.toLowerCase().trim()) + ".jpg?s=" + size + "&d=mm&r=g"; } }