/** * (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jabylon.rest.ui.wicket.components; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.image.Image; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.request.Url; import org.apache.wicket.request.resource.ResourceReference; import org.apache.wicket.request.resource.UrlResourceReference; import org.jabylon.users.User; public class UserImagePanel extends Panel { private static final String GRAVATAR_BASE_URL = "https://www.gravatar.com/avatar/"; private static final int DEFAULT_SIZE = 30; private static final int LARGE_SIZE = 120; private int size = DEFAULT_SIZE; private static final long serialVersionUID = 1L; public UserImagePanel(String id, IModel<User> model) { this(id,model,false); } public UserImagePanel(String id, IModel<User> model, boolean large) { super(id,model); Label name = new Label("name", getUsername(model)); add(name); if(large) { name.add(new AttributeAppender("style", "font-size: large;")); size = LARGE_SIZE; } Image image = new Image("image", getImageUrl(model)); if(large) image.add(new AttributeAppender("class","img-polaroid")); add(image); } private String getUsername(IModel<User> model) { String username = "none"; if (model.getObject() != null) { username = model.getObject().getDisplayName(); if (username == null || username.isEmpty()) username = model.getObject().getName(); } return username; } private ResourceReference getImageUrl(IModel<User> model) { String email = getEMail(model); if (email == null) email = model.getObject().toString(); Url url = Url.parse(GRAVATAR_BASE_URL + MD5Util.md5Hex(normalize(email))); url.addQueryParameter("size", size); url.addQueryParameter("d", "wavatar"); return new UrlResourceReference(url); } private String normalize(String email) { if(email==null) return ""; return email.trim().toLowerCase(getSession().getLocale()); } private String getEMail(IModel<User> model) { if (model.getObject() == null) return null; return model.getObject().getEmail(); } } class MD5Util { public static String hex(byte[] array) { StringBuffer sb = new StringBuffer(); for (byte element : array) { sb.append(Integer.toHexString((element & 0xFF) | 0x100).substring(1, 3)); } return sb.toString(); } public static String md5Hex(String message) { try { MessageDigest md = MessageDigest.getInstance("MD5"); return hex(md.digest(message.getBytes("CP1252"))); } catch (NoSuchAlgorithmException e) { } catch (UnsupportedEncodingException e) { } return null; } }