/******************************************************************************* * Copyright (c) 2011, 2014 Tasktop Technologies. * 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: * Tasktop Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.internal.commons.identity.ui; import java.io.ByteArrayInputStream; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.mylyn.commons.identity.core.Account; import org.eclipse.mylyn.commons.identity.core.IIdentity; import org.eclipse.mylyn.commons.identity.core.IProfile; import org.eclipse.mylyn.commons.identity.core.IProfileImage; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.internal.WorkbenchImages; /** * @author Steffen Pingel */ public class PersonLabelProvider extends LabelProvider { private static final int IMAGE_SIZE = 16; ImageRegistry registry = new ImageRegistry(); @Override public void dispose() { registry.dispose(); super.dispose(); } @Override public Image getImage(Object object) { if (object instanceof PeopleCategory) { return WorkbenchImages.getImage(ISharedImages.IMG_OBJ_FOLDER); } else if (object instanceof IIdentity) { IIdentity identity = (IIdentity) object; Image image = registry.get(identity.getId().toString()); if (image == null) { Future<IProfileImage> result = identity.requestImage(IMAGE_SIZE, IMAGE_SIZE); if (result.isDone()) { try { IProfileImage profileImage = result.get(0, TimeUnit.SECONDS); if (profileImage != null) { ImageData data = new ImageData(new ByteArrayInputStream(profileImage.getData())); if (data.width != IMAGE_SIZE || data.height != IMAGE_SIZE) { data = data.scaledTo(IMAGE_SIZE, IMAGE_SIZE); } registry.put(identity.getId().toString(), ImageDescriptor.createFromImageData(data)); image = registry.get(identity.getId().toString()); } } catch (Exception e) { // ignore } } } return image; } return null; } @Override public String getText(Object object) { if (object instanceof IIdentity) { IIdentity identity = (IIdentity) object; Future<IProfile> result = identity.requestProfile(); if (result.isDone()) { try { IProfile profile = result.get(0, TimeUnit.SECONDS); if (profile.getName() != null) { return profile.getName(); } else if (profile.getEmail() != null) { return profile.getEmail(); } } catch (Exception e) { // ignore } } //return identity.getAccounts()[0].getId(); return identity.getId().toString(); } else if (object instanceof Account) { Account account = (Account) object; if (account.getName() != null) { return account.getName() + " <" + account.getId() + ">"; //$NON-NLS-1$ //$NON-NLS-2$ } else { return account.getId(); } } return null; } }