package com.googlecode.tawus.gravatar.internal; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Map; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.ioc.annotations.Symbol; import com.googlecode.tawus.gravatar.services.GravatarURLCreator; public class GravatarURLCreatorImpl implements GravatarURLCreator{ @Symbol("gravatar-base-url") @Inject @Property private String baseURL; @Override public String createAvatarURL(String email, String type, Map<String, String> parameters) { StringBuilder sb = new StringBuilder(); sb.append(baseURL); sb.append("gravatar/"); sb.append(md5(email)); //hash if(type != null){ sb.append("."); sb.append(type); } sb.append('?'); for(String key: parameters.keySet()){ sb.append('&'); sb.append(key); sb.append('='); sb.append(encode(parameters.get(key))); } return sb.toString(); } private String encode(String string) { try { return URLEncoder.encode(string, "UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException("Could not encode : " + string, e); } } private String hex(byte[] array) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < array.length; ++i) { sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3)); } return sb.toString(); } private String md5(String message) { try { MessageDigest md = MessageDigest.getInstance("MD5"); return hex(md.digest(message.getBytes("CP1252"))); } catch (NoSuchAlgorithmException e) { } catch (UnsupportedEncodingException e) { } return null; } }