blob: d0323b3d3f52409ab40abee4ab6edd7c51e1ad03 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2009 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 API and implementation
* Wojciech Galanciak <wojciech.galanciak@gmail.com> - bug 282804
*******************************************************************************/
package org.eclipse.pde.internal.runtime.registry;
import java.util.Arrays;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.*;
import org.eclipse.osgi.util.NLS;
import org.eclipse.pde.internal.runtime.*;
import org.eclipse.pde.internal.runtime.registry.RegistryBrowserContentProvider.Folder;
import org.eclipse.pde.runtime.core.model.*;
import org.eclipse.swt.graphics.Image;
import org.osgi.framework.Constants;
public class RegistryBrowserLabelProvider extends StyledCellLabelProvider implements ILabelProvider {
private Image fPluginImage;
private Image fActivePluginImage;
private Image fUnresolvedPluginImage;
private Image fLibraryImage;
private Image fRuntimeImage;
private Image fGenericTagImage;
private Image fGenericAttrImage;
private Image fExtensionImage;
private Image fExtensionsImage;
private Image fExtensionPointImage;
private Image fExtensionPointsImage;
private Image fRequiresImage;
private Image fExpReqPluginImage;
private Image fReqPluginImage;
private Image fPluginsImage;
private Image fLocationImage;
private Image fDisabledImage;
private Image fExporterImage;
private Image fImporterImage;
private Image fServiceImage;
private Image fPropertyImage;
private Image fServicePropertyImage;
private Image fFragmentImage;
private Image fPackageImage;
private RegistryBrowser fRegistryBrowser;
public RegistryBrowserLabelProvider(RegistryBrowser browser) {
fRegistryBrowser = browser;
fPluginImage = PDERuntimePluginImages.DESC_PLUGIN_OBJ.createImage();
fReqPluginImage = PDERuntimePluginImages.DESC_REQ_PLUGIN_OBJ.createImage();
fExtensionPointImage = PDERuntimePluginImages.DESC_EXT_POINT_OBJ.createImage();
fExtensionPointsImage = PDERuntimePluginImages.DESC_EXT_POINTS_OBJ.createImage();
fExtensionImage = PDERuntimePluginImages.DESC_EXTENSION_OBJ.createImage();
fExtensionsImage = PDERuntimePluginImages.DESC_EXTENSIONS_OBJ.createImage();
fRequiresImage = PDERuntimePluginImages.DESC_REQ_PLUGINS_OBJ.createImage();
fLibraryImage = PDERuntimePluginImages.DESC_JAVA_LIB_OBJ.createImage();
fGenericTagImage = PDERuntimePluginImages.DESC_GENERIC_XML_OBJ.createImage();
fGenericAttrImage = PDERuntimePluginImages.DESC_ATTR_XML_OBJ.createImage();
fRuntimeImage = PDERuntimePluginImages.DESC_RUNTIME_OBJ.createImage();
fLocationImage = PDERuntimePluginImages.DESC_LOCATION.createImage();
fExporterImage = PDERuntimePluginImages.DESC_EXP_OBJ.createImage();
fImporterImage = PDERuntimePluginImages.DESC_IMP_OBJ.createImage();
fServiceImage = PDERuntimePluginImages.DESC_SERVICE_OBJ.createImage();
fPropertyImage = PDERuntimePluginImages.DESC_PROPERTY_OBJ.createImage();
fPluginsImage = PDERuntimePluginImages.DESC_PLUGINS_OBJ.createImage();
fFragmentImage = PDERuntimePluginImages.DESC_FRAGMENT_OBJ.createImage();
fPackageImage = PDERuntimePluginImages.DESC_PACKAGE_OBJ.createImage();
ImageDescriptor activePluginDesc = new OverlayIcon(PDERuntimePluginImages.DESC_PLUGIN_OBJ, new ImageDescriptor[][] {{PDERuntimePluginImages.DESC_RUN_CO}});
fActivePluginImage = activePluginDesc.createImage();
ImageDescriptor disabledPluginDesc = new OverlayIcon(PDERuntimePluginImages.DESC_PLUGIN_OBJ, new ImageDescriptor[][] {{PDERuntimePluginImages.DESC_ERROR_CO}});
fDisabledImage = disabledPluginDesc.createImage();
ImageDescriptor unresolvedPluginDesc = new OverlayIcon(PDERuntimePluginImages.DESC_PLUGIN_OBJ, new ImageDescriptor[][] {{PDERuntimePluginImages.DESC_ERROR_CO}});
fUnresolvedPluginImage = unresolvedPluginDesc.createImage();
ImageDescriptor exportedRequiresDesc = new OverlayIcon(PDERuntimePluginImages.DESC_REQ_PLUGIN_OBJ, new ImageDescriptor[][] {{PDERuntimePluginImages.DESC_EXPORT_CO}});
fExpReqPluginImage = exportedRequiresDesc.createImage();
ImageDescriptor servicePropertyDesc = new OverlayIcon(PDERuntimePluginImages.DESC_PROPERTY_OBJ, new ImageDescriptor[][] {{PDERuntimePluginImages.DESC_DEFAULT_CO}});
fServicePropertyImage = servicePropertyDesc.createImage();
}
public void dispose() {
fPluginImage.dispose();
fActivePluginImage.dispose();
fUnresolvedPluginImage.dispose();
fReqPluginImage.dispose();
fExtensionPointImage.dispose();
fExtensionPointsImage.dispose();
fExtensionImage.dispose();
fExtensionsImage.dispose();
fRequiresImage.dispose();
fExpReqPluginImage.dispose();
fLibraryImage.dispose();
fGenericTagImage.dispose();
fGenericAttrImage.dispose();
fRuntimeImage.dispose();
fLocationImage.dispose();
fDisabledImage.dispose();
fImporterImage.dispose();
fExporterImage.dispose();
fServiceImage.dispose();
fPropertyImage.dispose();
fServicePropertyImage.dispose();
fPluginsImage.dispose();
fFragmentImage.dispose();
fPackageImage.dispose();
}
public Image getImage(Object element) {
if (element instanceof Bundle) {
Bundle bundle = (Bundle) element;
if (bundle.getFragmentHost() != null)
return fFragmentImage;
if (!bundle.isEnabled())
return fDisabledImage;
switch (bundle.getState()) {
case Bundle.ACTIVE :
return fActivePluginImage;
case Bundle.UNINSTALLED :
return fUnresolvedPluginImage;
case Bundle.INSTALLED :
if (!bundle.isEnabled())
return fUnresolvedPluginImage;
default :
return fPluginImage;
}
}
if (element instanceof ServiceName) {
return fServiceImage;
}
if (element instanceof ServiceRegistration) {
return fPluginImage;
}
if (element instanceof Property) {
Property property = (Property) element;
// special handling for property objectClass
if (property.getName().equals(Constants.OBJECTCLASS)) {
return PDERuntimePluginImages.get(PDERuntimePluginImages.IMG_CLASS_OBJ);
}
// special handling for builtin service properties
if (property.getName().startsWith("service.") || property.getName().startsWith("component.")) { //$NON-NLS-1$ //$NON-NLS-2$
return fServicePropertyImage;
}
return fPropertyImage;
}
if (element instanceof Folder) {
int id = ((Folder) element).getId();
switch (id) {
case Folder.F_EXTENSIONS :
return fExtensionsImage;
case Folder.F_EXTENSION_POINTS :
return fExtensionPointsImage;
case Folder.F_IMPORTS :
return fRequiresImage;
case Folder.F_LIBRARIES :
return fRuntimeImage;
case Folder.F_REGISTERED_SERVICES :
return fExporterImage;
case Folder.F_SERVICES_IN_USE :
return fImporterImage;
case Folder.F_PROPERTIES :
return fPropertyImage;
case Folder.F_USING_BUNDLES :
return fPluginsImage;
case Folder.F_FRAGMENTS :
return fPluginsImage;
case Folder.F_EXPORTED_PACKAGES :
case Folder.F_IMPORTED_PACKAGES :
return fPackageImage;
}
return null;
}
if (element instanceof Extension)
return fExtensionImage;
if (element instanceof ExtensionPoint)
return fExtensionPointImage;
if (element instanceof BundlePrerequisite) {
BundlePrerequisite prereq = (BundlePrerequisite) element;
if (prereq.isPackage())
return fPackageImage;
return prereq.isExported() ? fExpReqPluginImage : fReqPluginImage;
}
if (element instanceof BundleLibrary)
return fLibraryImage;
if (element instanceof ConfigurationElement)
return fGenericTagImage;
if (element instanceof Attribute) {
Attribute attr = (Attribute) element;
if (Attribute.F_LOCATION.equals(attr.getName())) {
return fLocationImage;
}
if (Attribute.F_BUNDLE.equals(attr.getName())) {
return fPluginImage;
}
return fGenericAttrImage;
}
return null;
}
protected StyledString getStyledText(Object element) {
if (element instanceof Bundle) {
Bundle bundle = ((Bundle) element);
StyledString sb = new StyledString(bundle.getSymbolicName());
String version = bundle.getVersion();
if (version != null) {
sb.append(" (", StyledString.DECORATIONS_STYLER); //$NON-NLS-1$
sb.append(version, StyledString.DECORATIONS_STYLER);
sb.append(")", StyledString.DECORATIONS_STYLER); //$NON-NLS-1$
}
String host = bundle.getFragmentHost();
if (host != null) {
sb.append(" [", StyledString.QUALIFIER_STYLER); //$NON-NLS-1$
sb.append(host, StyledString.QUALIFIER_STYLER);
sb.append("]", StyledString.QUALIFIER_STYLER); //$NON-NLS-1$
}
return sb;
}
if (element instanceof ServiceRegistration) {
ServiceRegistration ref = (ServiceRegistration) element;
String identifier = " (id=" + ref.getId() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
StyledString ss = new StyledString();
if (fRegistryBrowser.getGroupBy() == RegistryBrowser.BUNDLES) {
String[] classes = ref.getName().getClasses();
ss.append(Arrays.asList(classes).toString());
} else {
ss.append(PDERuntimeMessages.RegistryBrowserLabelProvider_RegisteredBy);
ss.append(ref.getBundle());
}
ss.append(identifier, StyledString.DECORATIONS_STYLER);
return ss;
}
if (element instanceof ServiceName) {
return new StyledString(Arrays.asList(((ServiceName) element).getClasses()).toString());
}
if (element instanceof Folder) {
String text = null;
switch (((Folder) element).getId()) {
case Folder.F_IMPORTS :
text = PDERuntimeMessages.RegistryView_folders_imports;
break;
case Folder.F_IMPORTED_PACKAGES :
text = PDERuntimeMessages.RegistryBrowserLabelProvider_ImportedPackages;
break;
case Folder.F_EXPORTED_PACKAGES :
text = PDERuntimeMessages.RegistryBrowserLabelProvider_ExportedPackages;
break;
case Folder.F_LIBRARIES :
text = PDERuntimeMessages.RegistryView_folders_libraries;
break;
case Folder.F_EXTENSION_POINTS :
text = PDERuntimeMessages.RegistryView_folders_extensionPoints;
break;
case Folder.F_EXTENSIONS :
text = PDERuntimeMessages.RegistryView_folders_extensions;
break;
case Folder.F_REGISTERED_SERVICES :
text = PDERuntimeMessages.RegistryBrowserLabelProvider_registeredServices;
break;
case Folder.F_SERVICES_IN_USE :
text = PDERuntimeMessages.RegistryBrowserLabelProvider_usedServices;
break;
case Folder.F_PROPERTIES :
text = PDERuntimeMessages.RegistryBrowserLabelProvider_Properties;
break;
case Folder.F_USING_BUNDLES :
text = PDERuntimeMessages.RegistryBrowserLabelProvider_UsingBundles;
break;
case Folder.F_FRAGMENTS :
text = PDERuntimeMessages.RegistryBrowserLabelProvider_Fragments;
break;
}
if (text != null) {
return new StyledString(text);
}
}
if (element instanceof Extension) {
if (((RegistryBrowserContentProvider) fRegistryBrowser.getAdapter(IContentProvider.class)).isInExtensionSet) {
Extension extension = ((Extension) element);
StyledString ss = new StyledString(extension.getExtensionPointUniqueIdentifier());
String name = extension.getLabel();
if (name != null && name.length() > 0) {
ss.append("[ ", StyledString.QUALIFIER_STYLER); //$NON-NLS-1$
ss.append(name, StyledString.QUALIFIER_STYLER);
ss.append(']', StyledString.QUALIFIER_STYLER);
}
return ss;
}
String contributor = ((Extension) element).getNamespaceIdentifier();
return new StyledString(NLS.bind(PDERuntimeMessages.RegistryBrowserLabelProvider_contributedBy, contributor));
}
if (element instanceof ExtensionPoint) {
ExtensionPoint extPoint = (ExtensionPoint) element;
StyledString ss = new StyledString(extPoint.getUniqueIdentifier());
String name = extPoint.getLabel();
if (name != null && name.length() > 0) {
ss.append(" [", StyledString.QUALIFIER_STYLER); //$NON-NLS-1$
ss.append(name, StyledString.QUALIFIER_STYLER);
ss.append(']', StyledString.QUALIFIER_STYLER);
}
return ss;
}
if (element instanceof BundlePrerequisite) {
BundlePrerequisite prereq = (BundlePrerequisite) element;
StyledString ss = new StyledString(prereq.getName());
String version = prereq.getVersion();
if (version != null) {
if (Character.isDigit(version.charAt(0)))
version = '(' + version + ')';
ss.append(' ').append(version, StyledString.DECORATIONS_STYLER);
}
return ss;
}
if (element instanceof BundleLibrary) {
return new StyledString(((BundleLibrary) element).getLibrary());
}
if (element instanceof ConfigurationElement) {
return new StyledString(((ConfigurationElement) element).getName());
}
if (element instanceof Attribute) {
Attribute attribute = (Attribute) element;
if (Attribute.F_BUNDLE.equals(attribute.getName())) {
return new StyledString(attribute.getValue());
}
return new StyledString(attribute.getName() + " = " + attribute.getValue()); //$NON-NLS-1$
}
if (element instanceof Property) {
Property property = (Property) element;
return new StyledString(property.getName() + " = " + property.getValue()); //$NON-NLS-1$
}
return new StyledString(element == null ? "" : element.toString()); //$NON-NLS-1$
}
public void update(ViewerCell cell) {
StyledString string = getStyledText(cell.getElement());
cell.setText(string.getString());
cell.setStyleRanges(string.getStyleRanges());
cell.setImage(getImage(cell.getElement()));
super.update(cell);
}
public String getText(Object element) {
return getStyledText(element).getString();
}
}