/*******************************************************************************
* Copyright (c) 2010-2014 SAP AG 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
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.skalli.view.component;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
import org.apache.commons.lang.StringEscapeUtils;
import org.eclipse.skalli.model.Member;
import org.eclipse.skalli.model.User;
import org.eclipse.skalli.view.Consts;
import org.eclipse.skalli.view.internal.container.UserContainer;
import com.vaadin.ui.Component;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Label;
import com.vaadin.ui.Layout;
@SuppressWarnings("serial")
public class PeopleComponent extends CustomComponent {
private static final String STYLE = "peoplecomponent"; //$NON-NLS-1$
protected PeopleComponent(final User user) {
addStyleName(STYLE);
Layout layout = new CssLayout();
layout.setSizeFull();
layout.setMargin(false);
StringBuilder sb = new StringBuilder();
sb.append("<span class=\"v-img-peoplecomponent\">"); //$NON-NLS-1$
sb.append("<img src=\"/VAADIN/themes/simple/icons/people/team.png\" /> "); //$NON-NLS-1$
sb.append("</span>"); //$NON-NLS-1$
String userDetailsLink = UserDetailsUtil.getUserDetailsLink(user.getUserId());
if (userDetailsLink != null) {
// user details link configured, render a link to user details dialog
sb.append("<a href=\""); //$NON-NLS-1$
sb.append(userDetailsLink);
sb.append("\" target=\"_blank\">"); //$NON-NLS-1$
sb.append(StringEscapeUtils.escapeHtml(user.getDisplayName()));
sb.append("</a> "); //$NON-NLS-1$
} else {
// not configured, just display the user name
sb.append(StringEscapeUtils.escapeHtml(user.getDisplayName()));
sb.append(" "); //$NON-NLS-1$
}
sb.append("<span class=\"v-link-peoplecomponent\">"); //$NON-NLS-1$
if (user.hasEmail()) {
sb.append("<a class=\"link\" href=\"mailto:"); //$NON-NLS-1$
sb.append(user.getEmail());
sb.append("\">"); //$NON-NLS-1$
sb.append("Mail");
sb.append("</a> "); //$NON-NLS-1$
}
sb.append("<a class=\"link\" href=\""); //$NON-NLS-1$
sb.append(Consts.URL_PROJECTS_USER);
sb.append(StringEscapeUtils.escapeHtml(user.getUserId()));
sb.append("\">"); //$NON-NLS-1$
sb.append("Projects");
sb.append("</a> "); //$NON-NLS-1$
sb.append("</span>"); //$NON-NLS-1$
Label lbl = new Label();
lbl.setContentMode(Label.CONTENT_XHTML);
lbl.setValue(sb.toString());
layout.addComponent(lbl);
setCompositionRoot(layout);
}
public static Component getPeopleListComponent(Set<User> users) {
return new PeopleListComponent(users);
}
public static Component getPeopleListComponentForMember(Set<Member> member) {
return new PeopleListComponent(UserContainer.getUsers(member));
}
static class PeopleListComponent extends CustomComponent {
public PeopleListComponent(Set<User> users) {
TreeSet<User> sortedUsers = new TreeSet<User>(new Comparator<User>() {
@Override
public int compare(User u1, User u2) {
int result = u1.getDisplayName().compareTo(u2.getDisplayName());
if(result == 0){
result = u1.getUserId().compareTo(u2.getUserId());
}
return result;
}
});
sortedUsers.addAll(users);
Layout layout = new CssLayout();
layout.setSizeFull();
for (User user : sortedUsers) {
layout.addComponent(new PeopleComponent(user));
}
setCompositionRoot(layout);
}
}
}