| /******************************************************************************* |
| * Copyright (c) 2000, 2015 IBM Corporation and others. |
| * |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * Benjamin Cabe <benjamin.cabe@anyware-tech.com> - bug 218618 |
| * Brian de Alwis (MTI) - bug 429420 |
| * Simon Scholz <simon.scholz@vogella.com> - Bug 444808 |
| *******************************************************************************/ |
| 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.core.runtime.IStatus; |
| 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.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.plugin.ImportObject; |
| import org.eclipse.pde.internal.core.schema.SchemaRegistry; |
| import org.eclipse.pde.internal.core.text.bundle.*; |
| import org.eclipse.pde.internal.core.util.VersionUtil; |
| 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() { |
| } |
| |
| @Override |
| 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 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 ExecutionEnvironment) { |
| return getObjectText((ExecutionEnvironment) obj); |
| } |
| if (obj instanceof Locale) { |
| return getObjectText((Locale) obj); |
| } |
| if (obj instanceof IStatus) { |
| return getObjectText((IStatus) 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) { |
| // TODO, should we just get the model and call the proper method? |
| String name = obj.getId(); |
| String version = obj.getVersion(); |
| String text; |
| if (version != null && version.length() > 0) |
| text = name + ' ' + formatVersion(obj.getVersion()); |
| else |
| text = name; |
| return preventNull(text); |
| } |
| |
| 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) { |
| StringBuilder text = new StringBuilder(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(); |
| } |
| |
| private String getObjectText(Locale obj) { |
| String country = " (" + obj.getDisplayCountry() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ |
| return obj.getDisplayLanguage() + (" ()".equals(country) ? "" : country); //$NON-NLS-1$//$NON-NLS-2$ |
| } |
| |
| 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) { |
| String name = preventNull(obj.getId()); |
| if (obj.isRootInstallMode()) { |
| name += " (root)"; //$NON-NLS-1$ |
| } |
| if (VersionUtil.isEmptyVersion(obj.getVersion())) |
| return name; |
| return name + ' ' + formatVersion(obj.getVersion()); |
| } |
| |
| public String getObjectText(ISiteFeature obj) { |
| IFeatureModel model = PDECore.getDefault().getFeatureModelManager().findFeatureModel(obj.getId(), obj.getVersion() != null ? obj.getVersion() : ICoreConstants.DEFAULT_VERSION); |
| if (model != null) |
| return getObjectText(model); |
| String url = obj.getURL(); |
| if (url != null) |
| return url; |
| return preventNull(obj.getId()); |
| } |
| |
| public String getObjectText(ISiteBundle obj) { |
| IPluginModelBase modelBase = PluginRegistry.findModel(obj.getId(), obj.getVersion(), IMatchRules.COMPATIBLE, null); |
| if (modelBase != null) |
| return getObjectText(modelBase.getPluginBase()); |
| return preventNull(obj.getId()); |
| } |
| |
| public String getObjectText(ISiteArchive obj) { |
| return preventNull(obj.getPath()); |
| } |
| |
| public String getObjectText(ISiteCategoryDefinition obj) { |
| return preventNull(obj.getLabel()); |
| } |
| |
| public String getObjectText(PackageObject obj) { |
| StringBuilder buffer = new StringBuilder(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()); |
| } |
| |
| private String getObjectText(IStatus status) { |
| return status.getMessage(); |
| } |
| |
| @Override |
| 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 IPluginElement) { |
| return getObjectImage((IPluginElement) 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 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 ExecutionEnvironment) { |
| return getObjectImage((ExecutionEnvironment) obj); |
| } |
| if (obj instanceof ResolverError) { |
| return getObjectImage((ResolverError) obj); |
| } |
| if (obj instanceof Locale) { |
| return get(PDEPluginImages.DESC_DISCOVERY); |
| } |
| if (obj instanceof IStatus) { |
| return getObjectImage((IStatus) 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.FRAGMENT_BUNDLE_PERMISSION : |
| case ResolverError.FRAGMENT_CONFLICT : |
| return get(PDEPluginImages.DESC_FRAGMENT_OBJ); |
| } |
| return get(PDEPluginImages.DESC_PLUGIN_OBJ); |
| } |
| |
| 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(IPluginElement iobj) { |
| return PDEPluginImages.DESC_GENERIC_XML_OBJ; |
| } |
| |
| private Image getObjectImage(IPluginElement obj) { |
| int flags = 0; |
| IPluginObject parent = obj.getParent(); |
| while (parent != null && !(parent instanceof IPluginExtension)) { |
| parent = parent.getParent(); |
| } |
| if (parent != null) { |
| String point = ((IPluginExtension) parent).getPoint(); |
| SchemaRegistry registry = PDECore.getDefault().getSchemaRegistry(); |
| ISchema schema = registry.getSchema(point); |
| if (schema != null) { |
| ISchemaElement schemaElement = schema.findElement(obj.getName()); |
| // Only label an element if either the element is deprecated or it actually specifies a deprecated attribute; |
| // We don't want to mislabel non-deprecated elements with no deprecated attributes. |
| if (schemaElement != null && (schemaElement.isDeprecated() || hasDeprecatedAttributes(obj, schemaElement))) |
| flags |= F_WARNING; |
| } |
| } |
| return get(getRequiredPluginImageDescriptor(obj), flags); |
| } |
| |
| /** Return true if the {@code obj} has an attribute that is deprecated */ |
| private boolean hasDeprecatedAttributes(IPluginElement obj, ISchemaElement schemaElement) { |
| for (ISchemaAttribute schAtt : schemaElement.getAttributes()) { |
| if (schAtt.isDeprecated()) { |
| IPluginAttribute pAtt = obj.getAttribute(schAtt.getName()); |
| if (pAtt != null) { |
| return true; |
| } |
| } |
| } |
| return false; |
| } |
| |
| 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) { |
| Version version = (obj.getVersion() != null && obj.getVersion().length() > 0 && !obj.getVersion().equals(ICoreConstants.DEFAULT_VERSION)) ? Version.parseVersion(obj.getVersion()) : null; |
| BundleDescription desc = TargetPlatformHelper.getState().getBundle(obj.getId(), version); |
| 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(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) { |
| int flags = 0; |
| String version = feature.getVersion().length() > 0 ? feature.getVersion() : ICoreConstants.DEFAULT_VERSION; |
| IFeatureModel model = PDECore.getDefault().getFeatureModelManager().findFeatureModel(feature.getId(), version); |
| if (model == null) |
| flags = F_ERROR; |
| return get(PDEPluginImages.DESC_FEATURE_OBJ, flags); |
| } |
| |
| 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); |
| } |
| |
| private Image getObjectImage(IStatus status) { |
| int sev = status.getSeverity(); |
| switch (sev) { |
| case IStatus.ERROR : |
| return PlatformUI.getWorkbench().getSharedImages().getImage(org.eclipse.ui.ISharedImages.IMG_OBJS_ERROR_TSK); |
| case IStatus.WARNING : |
| return PlatformUI.getWorkbench().getSharedImages().getImage(org.eclipse.ui.ISharedImages.IMG_OBJS_WARN_TSK); |
| default : |
| return PlatformUI.getWorkbench().getSharedImages().getImage(org.eclipse.ui.ISharedImages.IMG_OBJS_INFO_TSK); |
| } |
| } |
| |
| 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 characters. |
| // 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. |
| StringBuilder buffer = new StringBuilder("\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; |
| } |
| |
| } |