blob: 394de7f99063795369c8231584e3004abd17b6df [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation 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:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.authoring.ui.properties;
import java.util.Iterator;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.epf.library.edit.util.TngUtil;
import org.eclipse.epf.library.ui.LibraryUIImages;
import org.eclipse.epf.library.util.LibraryUtil;
import org.eclipse.epf.uma.BreakdownElement;
import org.eclipse.jface.util.Assert;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.views.properties.tabbed.ITypeMapper;
/**
* Label provider for the title bar for the tabbed property sheet page.
*
* @author Shilpa Toraskar
* @since 1.0
*/
public class ElementLabelProvider extends LabelProvider {
private ITypeMapper typeMapper;
private ILabelProvider labelProvider = null;
/**
* Create an instance
*/
public ElementLabelProvider() {
super();
typeMapper = new ElementTypeMapper();
}
/**
* @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
*/
public Image getImage(Object objects) {
if (objects == null || objects.equals(StructuredSelection.EMPTY)) {
return null;
}
Image image = LibraryUIImages.IMG_PROCESS;
final boolean multiple[] = { false };
final Object object = getObject(objects, multiple);
if (object == null || ((IStructuredSelection) objects).size() > 1) {
return image;
} else {
Object obj = LibraryUtil.unwrap(object);
if (labelProvider == null) {
labelProvider = new AdapterFactoryLabelProvider(TngUtil.umaItemProviderAdapterFactory);
}
Image titleImage = labelProvider.getImage(obj);
return titleImage;
}
}
/**
* @see org.eclipse.jface.viewers.LabelProvider#dispose()
*/
public void dispose() {
labelProvider.dispose();
}
/**
* @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
*/
public String getText(Object objects) {
if (objects == null || objects.equals(StructuredSelection.EMPTY)) {
return PropertiesResources.Process_NoItems;
}
final boolean multiple[] = { false };
final Object object = getObject(objects, multiple);
if (object == null || ((IStructuredSelection) objects).size() > 1) {
Object size = new Integer(((IStructuredSelection) objects).size());
String msg = PropertiesResources.bind(PropertiesResources.Process_ItemsSelected, (new Object[] { size }));
return msg;
} else {
Object obj = LibraryUtil.unwrap(object);
return getName(obj);
}
}
private String getName(Object obj) {
String name = null;
String prefix = PropertiesUtil.getType(obj);
if (obj instanceof BreakdownElement) {
name = prefix + " : " + ((BreakdownElement) obj).getName(); //$NON-NLS-1$
} else {
name = PropertiesResources.Process_NoPropertiesAvailable;
}
return name;
}
/**
* Determine if a multiple object selection has been passed to the label
* provider. If the objects is a IStructuredSelection, see if all the
* objects in the selection are the same and if so, we want to provide
* labels for the common selected element.
*
* @param objects
* a single object or a IStructuredSelection.
* @param multiple
* first element in the array is true if there is multiple
* unequal selected elements in a IStructuredSelection.
* @return the object to get labels for.
*/
private Object getObject(Object objects, boolean multiple[]) {
Assert.isNotNull(objects);
Object object = null;
if (objects instanceof IStructuredSelection) {
IStructuredSelection selection = (IStructuredSelection) objects;
object = selection.getFirstElement();
if (selection.size() == 1) {
// one element selected
multiple[0] = false;
return object;
}
// multiple elements selected
multiple[0] = true;
// Class firstClass = typeMapper.mapType(object, object.getClass());
Class firstClass = typeMapper.mapType(object);
// determine if all the objects in the selection are the same type
if (selection.size() > 1) {
for (Iterator i = selection.iterator(); i.hasNext();) {
Object next = i.next();
// Class nextClass = typeMapper.mapType(next, next
// .getClass());
Class nextClass = typeMapper.mapType(next);
if (!nextClass.equals(firstClass)) {
// two elements not equal == multiple selected unequal
multiple[0] = false;
object = null;
break;
}
}
}
} else {
multiple[0] = false;
object = objects;
}
return object;
}
}