/* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.activiti.explorer.ui.task; import java.io.InputStream; import org.activiti.engine.IdentityService; import org.activiti.engine.ProcessEngines; import org.activiti.engine.identity.Picture; import org.activiti.engine.identity.User; import org.activiti.explorer.Constants; import org.activiti.explorer.ExplorerApp; import org.activiti.explorer.ViewManager; import org.activiti.explorer.ui.Images; import org.activiti.explorer.ui.mainlayout.ExplorerLayout; import com.vaadin.event.MouseEvents.ClickEvent; import com.vaadin.terminal.Resource; import com.vaadin.terminal.StreamResource; import com.vaadin.terminal.StreamResource.StreamSource; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Embedded; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.Reindeer; /** * Component for one user (picture + name + optional action). * * @author Joram Barrez */ public class UserDetailsComponent extends HorizontalLayout { private static final long serialVersionUID = 1L; protected IdentityService identityService; protected ViewManager viewManager; protected User user; protected String skypeId; protected String role; protected String buttonCaption; protected ClickListener clickListener; public UserDetailsComponent(String userId, String role) { this.role = role; this.identityService = ProcessEngines.getDefaultProcessEngine().getIdentityService(); this.viewManager = ExplorerApp.get().getViewManager(); if (userId != null) { user = identityService.createUserQuery().userId(userId).singleResult(); skypeId = identityService.getUserInfo(userId, Constants.USER_INFO_SKYPE); } } public UserDetailsComponent(String userId, String role, String buttonCaption, ClickListener clickListener) { this(userId, role); this.buttonCaption = buttonCaption; this.clickListener = clickListener; } @Override public void attach() { super.attach(); setSpacing(true); addUserPicture(); addUserDetails(); } protected void addUserPicture() { Resource pictureResource = Images.USER_32; // default icon if (user != null) { final Picture userPicture = identityService.getUserPicture(user.getId()); if (userPicture != null) { pictureResource = new StreamResource(new StreamSource() { public InputStream getStream() { return userPicture.getInputStream(); } }, user.getId(), ExplorerApp.get()); } } Embedded picture = new Embedded(null, pictureResource); picture.setType(Embedded.TYPE_IMAGE); picture.addStyleName(ExplorerLayout.STYLE_TASK_EVENT_PICTURE); if (user != null) { // Only set fixed height and width when user has image, otherwise icon's dimensions will be used picture.setHeight("32px"); picture.setWidth("32px"); } addComponent(picture); // Add profile popup listener if (user != null) { picture.addStyleName(ExplorerLayout.STYLE_CLICKABLE); picture.addListener(new com.vaadin.event.MouseEvents.ClickListener() { public void click(ClickEvent event) { viewManager.showProfilePopup(user.getId()); } }); } } protected void addUserDetails() { VerticalLayout detailsLayout = new VerticalLayout(); addComponent(detailsLayout); // Layout for name + skype HorizontalLayout nameLayout = new HorizontalLayout(); nameLayout.setSpacing(true); detailsLayout.addComponent(nameLayout); // Name Label nameLabel = null; if (user != null) { nameLabel = new Label(user.getFirstName() + " " + user.getLastName()); nameLabel.addStyleName(ExplorerLayout.STYLE_LABEL_BOLD); } else { nameLabel = new Label(" ", Label.CONTENT_XHTML); } nameLayout.addComponent(nameLabel); // Layout for lower details HorizontalLayout actionsLayout = new HorizontalLayout(); actionsLayout.setSpacing(true); detailsLayout.addComponent(actionsLayout); // Role Label roleLabel = new Label(role); actionsLayout.addComponent(roleLabel); // Action button if (clickListener != null) { Button button = new Button(buttonCaption); button.addStyleName(Reindeer.BUTTON_SMALL); button.addListener(clickListener); actionsLayout.addComponent(button); } } }