package bndtools.editor.workspace;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import aQute.bnd.build.model.clauses.HeaderClause;
import bndtools.Plugin;
public class PluginClauseLabelProvider extends StyledCellLabelProvider {
private final Map<String,IConfigurationElement> configElements;
private final Map<String,Image> images = new HashMap<String,Image>();
public PluginClauseLabelProvider(Map<String,IConfigurationElement> configElements) {
this.configElements = configElements;
}
@Override
public void update(ViewerCell cell) {
HeaderClause header = (HeaderClause) cell.getElement();
String className = header.getName();
StyledString label = new StyledString(className);
Map<String,String> attribs = header.getAttribs();
if (!attribs.isEmpty())
label.append(" ");
for (Iterator<Entry<String,String>> iter = attribs.entrySet().iterator(); iter.hasNext();) {
Entry<String,String> entry = iter.next();
label.append(entry.getKey(), StyledString.QUALIFIER_STYLER);
label.append("=", StyledString.QUALIFIER_STYLER);
label.append(entry.getValue(), StyledString.COUNTER_STYLER);
if (iter.hasNext())
label.append(", ");
}
cell.setText(label.toString());
cell.setStyleRanges(label.getStyleRanges());
Image image = images.get(className);
if (image == null) {
IConfigurationElement configElem = configElements.get(className);
if (configElem != null) {
String iconPath = configElem.getAttribute("icon");
if (iconPath != null) {
ImageDescriptor descriptor = AbstractUIPlugin.imageDescriptorFromPlugin(configElem.getContributor().getName(), iconPath);
if (descriptor != null) {
image = descriptor.createImage();
images.put(className, image);
}
}
}
}
if (image == null) {
image = images.get("__DEFAULT__");
if (image == null) {
image = AbstractUIPlugin.imageDescriptorFromPlugin(Plugin.PLUGIN_ID, "/icons/plugin.png").createImage();
images.put("__DEFAULT__", image);
}
}
cell.setImage(image);
}
@Override
public void dispose() {
super.dispose();
for (Image image : images.values()) {
if (!image.isDisposed())
image.dispose();
}
}
}