alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*******************************************************************************
 * Copyright (c) 2000, 2008 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
 *     Benjamin Cabe <benjamin.cabe@anyware-techc.com> - bug 218618
 *******************************************************************************/
package org.eclipse.pde.internal.ui;

import java.util.Locale;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.ui.ISharedImages;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.osgi.service.resolver.BundleDescription;
import org.eclipse.osgi.service.resolver.ResolverError;
import org.eclipse.osgi.util.NLS;
import org.eclipse.pde.core.build.IBuildEntry;
import org.eclipse.pde.core.plugin.*;
import org.eclipse.pde.internal.core.*;
import org.eclipse.pde.internal.core.builders.CompilerFlags;
import org.eclipse.pde.internal.core.feature.*;
import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSConstants;
import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSObject;
import org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSConstants;
import org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSObject;
import org.eclipse.pde.internal.core.ictxhelp.ICtxHelpConstants;
import org.eclipse.pde.internal.core.ifeature.*;
import org.eclipse.pde.internal.core.iproduct.IProductFeature;
import org.eclipse.pde.internal.core.iproduct.IProductPlugin;
import org.eclipse.pde.internal.core.ischema.*;
import org.eclipse.pde.internal.core.isite.*;
import org.eclipse.pde.internal.core.itarget.*;
import org.eclipse.pde.internal.core.itoc.ITocConstants;
import org.eclipse.pde.internal.core.plugin.ImportObject;
import org.eclipse.pde.internal.core.text.bundle.*;
import org.eclipse.pde.internal.core.text.ctxhelp.CtxHelpObject;
import org.eclipse.pde.internal.core.text.toc.TocObject;
import org.eclipse.pde.internal.core.util.PDETextHelper;
import org.eclipse.pde.internal.ui.elements.NamedElement;
import org.eclipse.pde.internal.ui.util.SharedLabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.internal.BidiUtil;
import org.eclipse.ui.PlatformUI;
import org.osgi.framework.Version;

public class PDELabelProvider extends SharedLabelProvider {
	private static final String SYSTEM_BUNDLE = "system.bundle"; //$NON-NLS-1$

	public PDELabelProvider() {
	}

	public String getText(Object obj) {
		if (obj instanceof IPluginModelBase) {
			return getObjectText(((IPluginModelBase) obj).getPluginBase());
		}
		if (obj instanceof IPluginBase) {
			return getObjectText((IPluginBase) obj);
		}
		if (obj instanceof ImportObject) {
			return getObjectText((ImportObject) obj);
		}
		if (obj instanceof IProductPlugin) {
			return getObjectText((IProductPlugin) obj);
		}
		if (obj instanceof BundleDescription) {
			return getObjectText((BundleDescription) obj);
		}
		if (obj instanceof IPluginImport) {
			return getObjectText((IPluginImport) obj);
		}
		if (obj instanceof IPluginLibrary) {
			return getObjectText((IPluginLibrary) obj);
		}
		if (obj instanceof IPluginExtension) {
			return getObjectText((IPluginExtension) obj);
		}
		if (obj instanceof IPluginExtensionPoint) {
			return getObjectText((IPluginExtensionPoint) obj);
		}
		if (obj instanceof NamedElement) {
			return ((NamedElement) obj).getLabel();
		}
		if (obj instanceof ISchemaObject) {
			return getObjectText((ISchemaObject) obj);
		}
		if (obj instanceof ISimpleCSObject) {
			return getObjectText((ISimpleCSObject) obj);
		}
		if (obj instanceof ICompCSObject) {
			return getObjectText((ICompCSObject) obj);
		}
		if (obj instanceof TocObject) {
			return getObjectText((TocObject) obj);
		}
		if (obj instanceof CtxHelpObject) {
			return getObjectText((CtxHelpObject) obj);
		}
		if (obj instanceof FeaturePlugin) {
			return getObjectText((FeaturePlugin) obj);
		}
		if (obj instanceof FeatureImport) {
			return getObjectText((FeatureImport) obj);
		}
		if (obj instanceof IFeatureModel) {
			return getObjectText((IFeatureModel) obj);
		}
		if (obj instanceof FeatureChild) {
			return getObjectText((FeatureChild) obj);
		}
		if (obj instanceof IProductFeature) {
			return getObjectText((IProductFeature) obj);
		}
		if (obj instanceof ISiteFeature) {
			return getObjectText((ISiteFeature) obj);
		}
		if (obj instanceof ISiteArchive) {
			return getObjectText((ISiteArchive) obj);
		}
		if (obj instanceof ISiteCategoryDefinition) {
			return getObjectText((ISiteCategoryDefinition) obj);
		}
		if (obj instanceof ISiteCategory) {
			return getObjectText((ISiteCategory) obj);
		}
		if (obj instanceof IBuildEntry) {
			return getObjectText((IBuildEntry) obj);
		}
		if (obj instanceof PackageObject) {
			return getObjectText((PackageObject) obj);
		}
		if (obj instanceof ITargetPlugin) {
			return getObjectText((ITargetPlugin) obj);
		}
		if (obj instanceof ITargetFeature) {
			return getObjectText((ITargetFeature) obj);
		}
		if (obj instanceof IAdditionalLocation) {
			return getObjectText((IAdditionalLocation) obj);
		}
		if (obj instanceof ExecutionEnvironment) {
			return getObjectText((ExecutionEnvironment) obj);
		}
		return super.getText(obj);
	}

	private String getObjectText(ExecutionEnvironment environment) {
		return preventNull(environment.getName());
	}

	public String getObjectText(IPluginBase pluginBase) {
		String name = isFullNameModeEnabled() ? pluginBase.getTranslatedName() : pluginBase.getId();
		name = preventNull(name);
		String version = pluginBase.getVersion();

		String text;

		if (version != null && version.length() > 0)
			text = name + ' ' + formatVersion(pluginBase.getVersion());
		else
			text = name;
		if (SYSTEM_BUNDLE.equals(pluginBase.getId())) {
			text += getSystemBundleInfo();
		}
		if (pluginBase.getModel() != null && !pluginBase.getModel().isInSync())
			text += " " + PDEUIMessages.PluginModelManager_outOfSync; //$NON-NLS-1$
		return text;
	}

	private String getSystemBundleInfo() {
		IPluginBase systemBundle = PluginRegistry.findModel(SYSTEM_BUNDLE).getPluginBase();
		return NLS.bind(" [{0}]", systemBundle.getId()); //$NON-NLS-1$
	}

	private String preventNull(String text) {
		return text != null ? text : ""; //$NON-NLS-1$
	}

	public String getObjectText(IPluginExtension extension) {
		return preventNull(isFullNameModeEnabled() ? extension.getTranslatedName() : extension.getPoint());
	}

	public String getObjectText(IPluginExtensionPoint point) {
		return preventNull(isFullNameModeEnabled() ? point.getTranslatedName() : point.getId());
	}

	public String getObjectText(ImportObject obj) {
		String version = obj.getImport().getVersion();
		if (version != null && version.length() > 0)
			version = formatVersion(version);

		String text = isFullNameModeEnabled() ? obj.toString() : preventNull(obj.getId());
		if (SYSTEM_BUNDLE.equals(obj.getId()))
			return text + getSystemBundleInfo();
		return version == null || version.length() == 0 ? text : text + " " + version; //$NON-NLS-1$
	}

	public String getObjectText(IProductPlugin obj) {
		if (isFullNameModeEnabled()) {
			String id = obj.getId();
			IPluginModelBase model = PluginRegistry.findModel(obj.getId());
			if (model != null) {
				return model.getPluginBase().getTranslatedName();
			}
			return id != null ? id : "?"; //$NON-NLS-1$
		}
		return preventNull(obj.getId());
	}

	public String getObjectText(BundleDescription bundle) {
		String id = bundle.getSymbolicName();
		if (isFullNameModeEnabled()) {
			IPluginModelBase model = PluginRegistry.findModel(bundle);
			if (model != null) {
				return model.getPluginBase().getTranslatedName();
			}
			return id != null ? id : "?"; //$NON-NLS-1$
		}
		return preventNull(id);
	}

	public String getObjectText(IPluginImport obj) {
		if (isFullNameModeEnabled()) {
			String id = obj.getId();
			IPluginModelBase model = PluginRegistry.findModel(obj.getId());
			if (model != null) {
				return model.getPluginBase().getTranslatedName();
			}
			return id != null ? id : "?"; //$NON-NLS-1$
		}
		return preventNull(obj.getId());
	}

	public String getObjectText(IBuildEntry obj) {
		return obj.getName();
	}

	public String getObjectText(IPluginLibrary obj) {
		return preventNull(obj.getName());
	}

	public String getObjectText(ISchemaObject obj) {
		StringBuffer text = new StringBuffer(obj.getName());
		if (obj instanceof ISchemaRepeatable) {
			ISchemaRepeatable rso = (ISchemaRepeatable) obj;
			boolean unbounded = rso.getMaxOccurs() == Integer.MAX_VALUE;
			int maxOccurs = rso.getMaxOccurs();
			int minOccurs = rso.getMinOccurs();
			if (maxOccurs != 1 || minOccurs != 1) {
				if (isRTL() && BidiUtil.isBidiPlatform())
					text.append('\u200f');
				text.append(" ("); //$NON-NLS-1$
				text.append(minOccurs);
				text.append(" - "); //$NON-NLS-1$
				if (unbounded)
					text.append('*');
				else
					text.append(maxOccurs);
				text.append(')');
			}
		}

		return text.toString();
	}

	/**
	 * @param obj
	 */
	public String getObjectText(ISimpleCSObject obj) {
		int limit = 50;

		if (obj.getType() == ISimpleCSConstants.TYPE_CHEAT_SHEET) {
			limit = 40;
		} else if (obj.getType() == ISimpleCSConstants.TYPE_ITEM) {
			limit = 36;
		} else if (obj.getType() == ISimpleCSConstants.TYPE_INTRO) {
			limit = 36;
		} else if (obj.getType() == ISimpleCSConstants.TYPE_SUBITEM) {
			limit = 32;
		}
		return PDETextHelper.truncateAndTrailOffText(PDETextHelper.translateReadText(obj.getName()), limit);
	}

	/**
	 * @param obj
	 */
	public String getObjectText(ICompCSObject obj) {
		int limit = 40;
		ICompCSObject parent = obj.getParent();
		while (parent != null) {
			limit = limit - 4;
			parent = parent.getParent();
		}
		return PDETextHelper.truncateAndTrailOffText(PDETextHelper.translateReadText(obj.getName()), limit);
	}

	/**
	 * @param obj
	 */
	public String getObjectText(TocObject obj) {
		return PDETextHelper.translateReadText(obj.getName());
	}

	/**
	 * @param obj
	 */
	public String getObjectText(CtxHelpObject obj) {
		return PDETextHelper.translateReadText(obj.getName());
	}

	public String getObjectText(FeaturePlugin obj) {
		String name = isFullNameModeEnabled() ? obj.getLabel() : obj.getId();
		String version = obj.getVersion();

		String text;

		if (version != null && version.length() > 0)
			text = name + ' ' + formatVersion(version);
		else
			text = name;
		return preventNull(text);
	}

	public String getObjectText(FeatureImport obj) {
		int type = obj.getType();
		if (type == IFeatureImport.PLUGIN) {
			IPlugin plugin = obj.getPlugin();
			if (plugin != null && isFullNameModeEnabled()) {
				return preventNull(plugin.getTranslatedName());
			}
		} else if (type == IFeatureImport.FEATURE) {
			IFeature feature = obj.getFeature();
			if (feature != null && isFullNameModeEnabled()) {
				return preventNull(feature.getTranslatableLabel());
			}
		}
		return preventNull(obj.getId());
	}

	public String getObjectText(IFeatureModel obj, boolean showVersion) {
		IFeature feature = obj.getFeature();
		String name = (isFullNameModeEnabled()) ? feature.getTranslatableLabel() : feature.getId();
		if (!showVersion)
			return preventNull(name);
		return preventNull(name) + ' ' + formatVersion(feature.getVersion());

	}

	public String getObjectText(IFeatureModel obj) {
		return getObjectText(obj, true);
	}

	public String getObjectText(FeatureChild obj) {
		return preventNull(obj.getId()) + ' ' + formatVersion(obj.getVersion());
	}

	public String getObjectText(IProductFeature obj) {
		IFeatureModel model = PDECore.getDefault().getFeatureModelManager().findFeatureModel(obj.getId());
		return (model != null) ? getObjectText(model, false) : preventNull(obj.getId());
	}

	public String getObjectText(ISiteFeature obj) {
		IFeatureModel model = PDECore.getDefault().getFeatureModelManager().findFeatureModel(obj.getId(), obj.getVersion() != null ? obj.getVersion() : "0.0.0"); //$NON-NLS-1$
		if (model != null)
			return getObjectText(model);
		return preventNull(obj.getURL());
	}

	public String getObjectText(ISiteArchive obj) {
		return preventNull(obj.getPath());
	}

	public String getObjectText(ISiteCategoryDefinition obj) {
		return preventNull(obj.getLabel());
	}

	public String getObjectText(PackageObject obj) {
		StringBuffer buffer = new StringBuffer(obj.getName());
		String version = obj.getVersion();
		if (version != null && !version.equals(Version.emptyVersion.toString())) {
			// Format version range for ImportPackageObject.  ExportPackageObject is handled correctly in this function
			version = formatVersion(version);
			buffer.append(' ').append(version);
		}
		return buffer.toString();
	}

	public String getObjectText(ISiteCategory obj) {
		ISiteCategoryDefinition def = obj.getDefinition();
		if (def != null)
			return preventNull(def.getLabel());
		return preventNull(obj.getName());
	}

	public String getObjectText(ITargetPlugin obj) {
		if (isFullNameModeEnabled()) {
			String id = obj.getId();
			IPluginModelBase model = PluginRegistry.findModel(obj.getId());
			if (model != null) {
				return model.getPluginBase().getTranslatedName();
			}
			return id != null ? id : "?"; //$NON-NLS-1$
		}
		return preventNull(obj.getId());
	}

	public String getObjectText(ITargetFeature obj) {
		IFeatureModel model = PDECore.getDefault().getFeatureModelManager().findFeatureModel(obj.getId());
		return (model != null) ? getObjectText(model, false) : preventNull(obj.getId());
	}

	public String getObjectText(IAdditionalLocation obj) {
		return preventNull(obj.getPath());
	}

	public Image getImage(Object obj) {
		if (obj instanceof IPlugin) {
			return getObjectImage((IPlugin) obj);
		}
		if (obj instanceof IFragment) {
			return getObjectImage((IFragment) obj);
		}
		if (obj instanceof IPluginModel) {
			return getObjectImage(((IPluginModel) obj).getPlugin());
		}
		if (obj instanceof IFragmentModel) {
			return getObjectImage(((IFragmentModel) obj).getFragment());
		}
		if (obj instanceof ImportObject) {
			return getObjectImage((ImportObject) obj);
		}
		if (obj instanceof IPluginImport) {
			return getObjectImage((IPluginImport) obj);
		}
		if (obj instanceof IProductPlugin) {
			return getObjectImage((IProductPlugin) obj);
		}
		if (obj instanceof BundleDescription) {
			return getObjectImage((BundleDescription) obj);
		}
		if (obj instanceof IPluginLibrary) {
			return getObjectImage((IPluginLibrary) obj);
		}
		if (obj instanceof IPluginExtension) {
			return getObjectImage((IPluginExtension) obj);
		}
		if (obj instanceof IPluginExtensionPoint) {
			return getObjectImage((IPluginExtensionPoint) obj);
		}
		if (obj instanceof NamedElement) {
			return ((NamedElement) obj).getImage();
		}
		if (obj instanceof ISchemaElement) {
			return getObjectImage((ISchemaElement) obj);
		}
		if (obj instanceof ISimpleCSObject) {
			return getObjectImage((ISimpleCSObject) obj);
		}
		if (obj instanceof ICompCSObject) {
			return getObjectImage((ICompCSObject) obj);
		}
		if (obj instanceof TocObject) {
			return getObjectImage((TocObject) obj);
		}
		if (obj instanceof CtxHelpObject) {
			return getObjectImage((CtxHelpObject) obj);
		}
		if (obj instanceof ISchemaAttribute) {
			return getObjectImage((ISchemaAttribute) obj);
		}
		if (obj instanceof ISchemaInclude) {
			ISchema schema = ((ISchemaInclude) obj).getIncludedSchema();
			return get(PDEPluginImages.DESC_PAGE_OBJ, schema == null || !schema.isValid() ? F_ERROR : 0);
		}
		if (obj instanceof IDocumentSection || obj instanceof ISchema) {
			return get(PDEPluginImages.DESC_DOC_SECTION_OBJ);
		}
		if (obj instanceof ISchemaCompositor) {
			return getObjectImage((ISchemaCompositor) obj);
		}
		if (obj instanceof IFeatureURLElement) {
			return getObjectImage((IFeatureURLElement) obj);
		}
		if (obj instanceof IFeatureModel) {
			int flags = 0;
			if (((IFeatureModel) obj).getUnderlyingResource() == null)
				flags |= F_EXTERNAL;
			return get(PDEPluginImages.DESC_FEATURE_OBJ, flags);
		}
		if (obj instanceof IFeatureChild) {
			return getObjectImage((IFeatureChild) obj);
		}
		if (obj instanceof IProductFeature) {
			return getObjectImage((IProductFeature) obj);
		}
		if (obj instanceof IFeaturePlugin) {
			return getObjectImage((IFeaturePlugin) obj);
		}
		if (obj instanceof IFeatureData) {
			return getObjectImage((IFeatureData) obj);
		}
		if (obj instanceof IFeatureImport) {
			return getObjectImage((IFeatureImport) obj);
		}
		if (obj instanceof IFeatureInfo) {
			return getObjectImage((IFeatureInfo) obj);
		}
		if (obj instanceof IBuildEntry) {
			return get(PDEPluginImages.DESC_BUILD_VAR_OBJ);
		}
		if (obj instanceof ISiteFeature) {
			return getObjectImage((ISiteFeature) obj);
		}
		if (obj instanceof ISiteArchive) {
			return getObjectImage((ISiteArchive) obj);
		}
		if (obj instanceof ISiteCategoryDefinition) {
			return getObjectImage((ISiteCategoryDefinition) obj);
		}
		if (obj instanceof ISiteCategory) {
			return getObjectImage((ISiteCategory) obj);
		}
		if (obj instanceof ExportPackageObject) {
			return getObjectImage((ExportPackageObject) obj);
		}
		if (obj instanceof PackageObject) {
			return getObjectImage((PackageObject) obj);
		}
		if (obj instanceof ITargetPlugin) {
			return getObjectImage((ITargetPlugin) obj);
		}
		if (obj instanceof ITargetFeature) {
			return getObjectImage((ITargetFeature) obj);
		}
		if (obj instanceof IAdditionalLocation) {
			return getObjectImage((IAdditionalLocation) obj);
		}
		if (obj instanceof ExecutionEnvironment) {
			return getObjectImage((ExecutionEnvironment) obj);
		}
		if (obj instanceof ResolverError) {
			return getObjectImage((ResolverError) obj);
		}
		return super.getImage(obj);
	}

	private Image getObjectImage(ResolverError obj) {
		int type = obj.getType();
		switch (type) {
			case ResolverError.MISSING_IMPORT_PACKAGE :
			case ResolverError.EXPORT_PACKAGE_PERMISSION :
			case ResolverError.IMPORT_PACKAGE_PERMISSION :
			case ResolverError.IMPORT_PACKAGE_USES_CONFLICT :
				return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_PACKAGE);
			case ResolverError.MISSING_EXECUTION_ENVIRONMENT :
				return get(PDEPluginImages.DESC_JAVA_LIB_OBJ);
			case ResolverError.MISSING_FRAGMENT_HOST :
			case ResolverError.MISSING_REQUIRE_BUNDLE :
			case ResolverError.PROVIDE_BUNDLE_PERMISSION :
			case ResolverError.REQUIRE_BUNDLE_PERMISSION :
			case ResolverError.REQUIRE_BUNDLE_USES_CONFLICT :
			case ResolverError.HOST_BUNDLE_PERMISSION :
				return get(PDEPluginImages.DESC_PLUGIN_OBJ);
		}
		return null;
	}

	private Image getObjectImage(ExecutionEnvironment environment) {
		return get(PDEPluginImages.DESC_JAVA_LIB_OBJ);
	}

	private Image getObjectImage(IPlugin plugin) {
		return getObjectImage(plugin, false, false);
	}

	private Image getObjectImage(BundleDescription bundle) {
		return bundle.getHost() == null ? get(PDEPluginImages.DESC_PLUGIN_OBJ) : get(PDEPluginImages.DESC_FRAGMENT_OBJ);
	}

	public Image getObjectImage(IPlugin plugin, boolean checkEnabled, boolean javaSearch) {
		IPluginModelBase model = plugin.getPluginModel();
		int flags = getModelFlags(model);

		if (javaSearch)
			flags |= F_JAVA;
		ImageDescriptor desc = PDEPluginImages.DESC_PLUGIN_OBJ;
		if (checkEnabled && model.isEnabled() == false)
			desc = PDEPluginImages.DESC_EXT_PLUGIN_OBJ;
		return get(desc, flags);
	}

	private int getModelFlags(IPluginModelBase model) {
		int flags = 0;
		if (!(model.isLoaded() && model.isInSync()))
			flags = F_ERROR;
		IResource resource = model.getUnderlyingResource();
		if (resource == null) {
			flags |= F_EXTERNAL;
		} else {
			IProject project = resource.getProject();
			try {
				if (WorkspaceModelManager.isBinaryProject(project)) {
					String property = project.getPersistentProperty(PDECore.EXTERNAL_PROJECT_PROPERTY);
					if (property != null) {
						/*
						if (property.equals(PDECore.EXTERNAL_PROJECT_VALUE))
							flags |= F_EXTERNAL;
						else if (property.equals(PDECore.BINARY_PROJECT_VALUE))
						*/
						flags |= F_BINARY;
					}
				}
			} catch (CoreException e) {
			}
		}
		return flags;
	}

	private Image getObjectImage(IFragment fragment) {
		return getObjectImage(fragment, false, false);
	}

	public Image getObjectImage(IFragment fragment, boolean checkEnabled, boolean javaSearch) {
		IPluginModelBase model = fragment.getPluginModel();
		int flags = getModelFlags(model);
		if (javaSearch)
			flags |= F_JAVA;
		ImageDescriptor desc = PDEPluginImages.DESC_FRAGMENT_OBJ;
		if (checkEnabled && !model.isEnabled())
			desc = PDEPluginImages.DESC_EXT_FRAGMENT_OBJ;
		return get(desc, flags);
	}

	private Image getObjectImage(ImportObject iobj) {
		int flags = 0;
		IPluginImport iimport = iobj.getImport();
		if (!iobj.isResolved())
			flags = iimport.isOptional() ? F_WARNING : F_ERROR;
		else if (iimport.isReexported())
			flags = F_EXPORT;
		if (iimport.isOptional())
			flags |= F_OPTIONAL;
		IPlugin plugin = iobj.getPlugin();
		if (plugin != null) {
			IPluginModelBase model = plugin.getPluginModel();
			flags |= getModelFlags(model);
		}
		return get(getRequiredPluginImageDescriptor(iimport), flags);
	}

	protected ImageDescriptor getRequiredPluginImageDescriptor(IPluginImport iobj) {
		return PDEPluginImages.DESC_REQ_PLUGIN_OBJ;
	}

	private Image getObjectImage(IPluginImport obj) {
		int flags = 0;
		if (obj.isReexported())
			flags |= F_EXPORT;
		return get(getRequiredPluginImageDescriptor(obj), flags);
	}

	private Image getObjectImage(IProductPlugin obj) {
		BundleDescription desc = TargetPlatformHelper.getState().getBundle(obj.getId(), null);
		if (desc != null) {
			return desc.getHost() == null ? get(PDEPluginImages.DESC_PLUGIN_OBJ) : get(PDEPluginImages.DESC_FRAGMENT_OBJ);
		}
		return get(PDEPluginImages.DESC_PLUGIN_OBJ, F_ERROR);
	}

	private Image getObjectImage(IPluginLibrary library) {
		return get(PDEPluginImages.DESC_JAVA_LIB_OBJ);
	}

	private Image getObjectImage(IPluginExtension point) {
		return get(PDEPluginImages.DESC_EXTENSION_OBJ);
	}

	private Image getObjectImage(IPluginExtensionPoint point) {
		return get(PDEPluginImages.DESC_EXT_POINT_OBJ);
	}

	private Image getObjectImage(ISimpleCSObject object) {

		if (object.getType() == ISimpleCSConstants.TYPE_ITEM) {
			return get(PDEPluginImages.DESC_CSITEM_OBJ);
		} else if (object.getType() == ISimpleCSConstants.TYPE_SUBITEM) {
			return get(PDEPluginImages.DESC_CSSUBITEM_OBJ);
		} else if (object.getType() == ISimpleCSConstants.TYPE_REPEATED_SUBITEM) {
			return get(PDEPluginImages.DESC_CSUNSUPPORTED_OBJ);
		} else if (object.getType() == ISimpleCSConstants.TYPE_CONDITIONAL_SUBITEM) {
			return get(PDEPluginImages.DESC_CSUNSUPPORTED_OBJ);
		} else if (object.getType() == ISimpleCSConstants.TYPE_CHEAT_SHEET) {
			return get(PDEPluginImages.DESC_SIMPLECS_OBJ);
		} else if (object.getType() == ISimpleCSConstants.TYPE_INTRO) {
			return get(PDEPluginImages.DESC_CSINTRO_OBJ);
		} else if (object.getType() == ISimpleCSConstants.TYPE_PERFORM_WHEN) {
			return get(PDEPluginImages.DESC_CSUNSUPPORTED_OBJ);
		}
		return get(PDEPluginImages.DESC_SIMPLECS_OBJ, F_ERROR);
	}

	/**
	 * @param object
	 */
	private Image getObjectImage(ICompCSObject object) {

		if (object.getType() == ICompCSConstants.TYPE_TASK) {
			return get(PDEPluginImages.DESC_SIMPLECS_OBJ);
		} else if (object.getType() == ICompCSConstants.TYPE_TASKGROUP) {
			return get(PDEPluginImages.DESC_CSTASKGROUP_OBJ);
		} else if (object.getType() == ICompCSConstants.TYPE_COMPOSITE_CHEATSHEET) {
			return get(PDEPluginImages.DESC_COMPCS_OBJ);
		}
		return get(PDEPluginImages.DESC_SIMPLECS_OBJ, F_ERROR);
	}

	/**
	 * @param object
	 */
	private Image getObjectImage(TocObject object) {
		switch (object.getType()) {
			case ITocConstants.TYPE_TOC : {
				return get(PDEPluginImages.DESC_TOC_OBJ);
			}
			case ITocConstants.TYPE_TOPIC : { //Return the leaf topic icon for a topic with no children
				if (object.getChildren().isEmpty()) {
					return get(PDEPluginImages.DESC_TOC_LEAFTOPIC_OBJ);
				}
				//Return the regular topic icon for a topic with children
				return get(PDEPluginImages.DESC_TOC_TOPIC_OBJ);
			}
			case ITocConstants.TYPE_LINK : {
				return get(PDEPluginImages.DESC_TOC_LINK_OBJ);
			}
			case ITocConstants.TYPE_ANCHOR : {
				return get(PDEPluginImages.DESC_TOC_ANCHOR_OBJ);
			}
			default :
				return get(PDEPluginImages.DESC_SIMPLECS_OBJ, F_ERROR);
		}
	}

	/**
	 * @param object
	 */
	private Image getObjectImage(CtxHelpObject object) {
		switch (object.getType()) {
			case ICtxHelpConstants.TYPE_ROOT : {
				return get(PDEPluginImages.DESC_TOC_OBJ);
			}
			case ICtxHelpConstants.TYPE_CONTEXT : {
				return get(PDEPluginImages.DESC_CTXHELP_CONTEXT_OBJ);
			}
			case ICtxHelpConstants.TYPE_DESCRIPTION : {
				return get(PDEPluginImages.DESC_CTXHELP_DESC_OBJ);
			}
			case ICtxHelpConstants.TYPE_TOPIC : {
				return get(PDEPluginImages.DESC_TOC_LEAFTOPIC_OBJ);
			}
			case ICtxHelpConstants.TYPE_COMMAND : {
				return get(PDEPluginImages.DESC_CTXHELP_COMMAND_OBJ);
			}
			default :
				return get(PDEPluginImages.DESC_SIMPLECS_OBJ, F_ERROR);
		}
	}

	private Image getObjectImage(ISchemaElement element) {
		int flags = 0;
		if (element instanceof ISchemaObjectReference && ((ISchemaObjectReference) element).getReferencedObject() == null)
			flags |= F_ERROR;
		ImageDescriptor desc = element instanceof ISchemaObjectReference ? PDEPluginImages.DESC_XML_ELEMENT_REF_OBJ : PDEPluginImages.DESC_GEL_SC_OBJ;
		return get(desc, flags);
	}

	private Image getObjectImage(ISchemaAttribute att) {
		int kind = att.getKind();
		String type = att.getType().getName();
		int use = att.getUse();
		int flags = 0;
		if (use == ISchemaAttribute.OPTIONAL)
			flags = 0; //|= F_OPTIONAL;
		if (kind == IMetaAttribute.JAVA)
			return get(PDEPluginImages.DESC_ATT_CLASS_OBJ, flags);
		if (kind == IMetaAttribute.RESOURCE)
			return get(PDEPluginImages.DESC_ATT_FILE_OBJ, flags);
		if (kind == IMetaAttribute.IDENTIFIER)
			return get(PDEPluginImages.DESC_ATT_ID_OBJ, flags);
		if (type.equals(ISchemaAttribute.TYPES[ISchemaAttribute.BOOL_IND]))
			return get(PDEPluginImages.DESC_ATT_BOOLEAN_OBJ, flags);

		return get(PDEPluginImages.DESC_ATT_STRING_OBJ);
	}

	private Image getObjectImage(ISchemaCompositor compositor) {
		switch (compositor.getKind()) {
			case ISchemaCompositor.ALL :
				return get(PDEPluginImages.DESC_ALL_SC_OBJ);
			case ISchemaCompositor.CHOICE :
				return get(PDEPluginImages.DESC_CHOICE_SC_OBJ);
			case ISchemaCompositor.SEQUENCE :
				return get(PDEPluginImages.DESC_SEQ_SC_OBJ);
			case ISchemaCompositor.GROUP :
				return get(PDEPluginImages.DESC_GROUP_SC_OBJ);
		}
		return null;
	}

	private Image getObjectImage(IFeatureURLElement url) {
		return get(PDEPluginImages.DESC_LINK_OBJ);
	}

	private Image getObjectImage(IFeaturePlugin plugin) {
		int flags = 0;
		if (((FeaturePlugin) plugin).getPluginBase() == null) {
			int cflag = CompilerFlags.getFlag(null, CompilerFlags.F_UNRESOLVED_PLUGINS);
			if (cflag == CompilerFlags.ERROR)
				flags = F_ERROR;
			else if (cflag == CompilerFlags.WARNING)
				flags = F_WARNING;
		}
		if (plugin.isFragment())
			return get(PDEPluginImages.DESC_FRAGMENT_OBJ, flags);
		return get(PDEPluginImages.DESC_PLUGIN_OBJ, flags);
	}

	private Image getObjectImage(IFeatureChild feature) {
		int flags = 0;
		if (((FeatureChild) feature).getReferencedFeature() == null) {
			int cflag = CompilerFlags.getFlag(null, CompilerFlags.F_UNRESOLVED_FEATURES);
			if (cflag == CompilerFlags.ERROR)
				flags = F_ERROR;
			else if (cflag == CompilerFlags.WARNING)
				flags = F_WARNING;
		}
		return get(PDEPluginImages.DESC_FEATURE_OBJ, flags);
	}

	private Image getObjectImage(IProductFeature feature) {
		return get(PDEPluginImages.DESC_FEATURE_OBJ, 0);
	}

	private Image getObjectImage(IFeatureData data) {
		int flags = 0;
		if (!data.exists())
			flags = F_ERROR;
		ImageDescriptor desc = PlatformUI.getWorkbench().getEditorRegistry().getImageDescriptor(data.getId());
		return get(desc, flags);
	}

	private Image getObjectImage(IFeatureImport obj) {
		FeatureImport iimport = (FeatureImport) obj;
		int type = iimport.getType();
		ImageDescriptor base;
		int flags = 0;

		if (type == IFeatureImport.FEATURE) {
			base = PDEPluginImages.DESC_FEATURE_OBJ;
			IFeature feature = iimport.getFeature();
			if (feature == null)
				flags = F_ERROR;
		} else {
			base = PDEPluginImages.DESC_REQ_PLUGIN_OBJ;
			IPlugin plugin = iimport.getPlugin();
			if (plugin == null)
				flags = F_ERROR;
		}

		return get(base, flags);
	}

	private Image getObjectImage(IFeatureInfo info) {
		int flags = 0;
		String text = info.getDescription();
		if (text != null)
			text = text.trim();
		if (text != null && text.length() > 0) {
			// complete
			flags = F_EDIT;
		}
		return get(PDEPluginImages.DESC_DOC_SECTION_OBJ, flags);
	}

	public Image getObjectImage(ISiteFeature obj) {
		int flags = 0;
		if (obj.getArchiveFile() != null) {
			flags = F_BINARY;
		}
		return get(PDEPluginImages.DESC_JAVA_LIB_OBJ, flags);
	}

	public Image getObjectImage(ISiteArchive obj) {
		return get(PDEPluginImages.DESC_JAVA_LIB_OBJ, 0);
	}

	public Image getObjectImage(ISiteCategoryDefinition obj) {
		return get(PDEPluginImages.DESC_CATEGORY_OBJ);
	}

	public Image getObjectImage(ISiteCategory obj) {
		int flags = obj.getDefinition() == null ? F_ERROR : 0;
		return get(PDEPluginImages.DESC_CATEGORY_OBJ, flags);
	}

	public Image getObjectImage(ExportPackageObject obj) {
		int flags = 0;
		if (obj.isInternal()) {
			flags = F_INTERNAL;
			// if internal with at least one friend
			if (obj.getFriends().length > 0)
				flags = F_FRIEND;
		}
		ImageDescriptor desc = JavaUI.getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJS_PACKAGE);
		return get(desc, flags);
	}

	public Image getObjectImage(PackageObject obj) {
		return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_PACKAGE);
	}

	public Image getObjectImage(ITargetPlugin obj) {
		BundleDescription desc = TargetPlatformHelper.getState().getBundle(obj.getId(), null);
		if (desc != null) {
			return desc.getHost() == null ? get(PDEPluginImages.DESC_PLUGIN_OBJ) : get(PDEPluginImages.DESC_FRAGMENT_OBJ);
		}
		return get(PDEPluginImages.DESC_PLUGIN_OBJ, 0);
	}

	public Image getObjectImage(ITargetFeature obj) {
		return get(PDEPluginImages.DESC_FEATURE_OBJ, 0);
	}

	public Image getObjectImage(IAdditionalLocation obj) {
		return get(PDEPluginImages.DESC_SITE_OBJ);
	}

	public boolean isFullNameModeEnabled() {
		return PDEPlugin.isFullNameModeEnabled();
	}

	/*
	 * BIDI support (bug 183417)
	 * Any time we display a bracketed version, we should preface it with /u200f (zero width arabic character).
	 * Then inside the bracket, we should include /u200e (zero width latin character).  Since the leading separator
	 * will be resolved based on its surrounding text, when it is surrounded by a arabic character and a latin character
	 * the bracket will take the proper shape based on the underlying embedded direction.  The latin character must
	 * come after the bracket since versions are represented with latin numbers.  This ensure proper number format.
	 */

	/*
	 * returns true if instance has either arabic of hebrew locale (text displayed RTL)
	 */
	private static boolean isRTL() {
		Locale locale = Locale.getDefault();
		String localeString = locale.toString();
		return (localeString.startsWith("ar") || //$NON-NLS-1$
		localeString.startsWith("he")); //$NON-NLS-1$
	}

	/*
	 * Returns a String containing the unicode to properly display the version ranging when running bidi. 
	 */
	public static String formatVersion(String versionRange) {
		boolean isBasicVersion = versionRange == null || versionRange.length() == 0 || Character.isDigit(versionRange.charAt(0));
		if (isBasicVersion) {
			if (BidiUtil.isBidiPlatform())
				// The versionRange is a single version.  Since parenthesis is neutral, it direction is determined by leading and following character.
				// Since leading character is arabic and following character is latin, the parenthesis will take default (proper) direction.  
				// Must have the following character be the latin character to ensure version is formatted as latin (LTR)
				return "\u200f(\u200e" + versionRange + ")"; //$NON-NLS-1$ //$NON-NLS-2$
			return "(" + versionRange + ')'; //$NON-NLS-1$
		} else if (isRTL() && BidiUtil.isBidiPlatform()) {
			// when running RTL and formatting a versionRange, we need to break up the String to make sure it is properly formatted.
			// A version should always be formatted LTR (start with \u202d, ends with \u202c) since it is composed of latin characaters.  
			// With specifying this format, if the qualifier has a latin character, it will not be formatted correctly.
			int index = versionRange.indexOf(',');
			if (index > 0) {
				// begin with zero length arabic character so version appears on left (correct) side of id.  
				// Then add RTL strong encoding so parentheses and comma have RTL formatting. 
				StringBuffer buffer = new StringBuffer("\u200f\u202e"); //$NON-NLS-1$
				// begin with leading separator (either parenthesis or bracket)
				buffer.append(versionRange.charAt(0));
				// start LTR encoding for min version
				buffer.append('\u202d');
				// min version
				buffer.append(versionRange.substring(1, index));
				// end LTR encoding, add ',' (which will be RTL due to first RTL strong encoding), and start LTR encoding for max version
				// We require a space between the two numbers otherwise it is considered 1 number in arabic (comma is digit grouping system).
				buffer.append("\u202c, \u202d"); //$NON-NLS-1$
				// max version
				buffer.append(versionRange.substring(index + 1, versionRange.length() - 1));
				// end LTR encoding
				buffer.append('\u202c');
				// add trailing separator
				buffer.append(versionRange.charAt(versionRange.length() - 1));
				return buffer.toString();
			}
			//			} else {
			//			    since the version is LTR and we are running LTR, do nothing.  This is the case for version ranges when run in LTR
		}
		return versionRange;
	}
}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.