/** * Copyright (c) 2011, 2012 Gunnar Wagenknecht 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: * Gunnar Wagenknecht - initial API and implementation * Peter Grube - update return value for RepositoryDefinition */ package org.eclipse.gyrex.admin.ui.p2.internal; import java.util.Locale; import org.eclipse.gyrex.p2.internal.P2Activator; import org.eclipse.gyrex.p2.internal.packages.IPackageManager; import org.eclipse.gyrex.p2.internal.packages.InstallableUnitReference; import org.eclipse.gyrex.p2.internal.packages.PackageDefinition; import org.eclipse.gyrex.p2.internal.repositories.RepositoryDefinition; import org.eclipse.core.runtime.URIUtil; import org.eclipse.equinox.p2.engine.IProfile; import org.eclipse.equinox.p2.metadata.IArtifactKey; import org.eclipse.equinox.p2.metadata.IInstallableUnit; import org.eclipse.equinox.p2.metadata.IRequirement; import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription; import org.eclipse.equinox.p2.metadata.Version; import org.eclipse.equinox.p2.repository.IRepository; import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository; import org.eclipse.equinox.p2.repository.artifact.IProcessingStepDescriptor; import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.resource.LocalResourceManager; import org.eclipse.jface.resource.ResourceManager; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Image; import org.apache.commons.lang.StringUtils; /** * */ public class P2UiLabelProvider extends LabelProvider { /** serialVersionUID */ private static final long serialVersionUID = 1L; private ResourceManager manager; @Override public void dispose() { if (null != manager) { manager.dispose(); manager = null; } super.dispose(); } private String getElementText(final IInstallableUnit iu) { final StringBuilder label = new StringBuilder(); final String name = iu.getProperty(IInstallableUnit.PROP_NAME, Locale.getDefault().toString()); if (StringUtils.isNotBlank(name)) { label.append(name).append(" - "); } label.append(iu.getId()); return label.toString(); } private String getElementText(final InstallableUnitReference unit) { final StringBuilder label = new StringBuilder(); label.append(unit.getId()); final Version version = unit.getVersion(); if (version != null) { label.append(" (").append(version.toString()).append(")"); } return label.toString(); } private String getElementText(final IProfile profile) { final String name = profile.getProperty(IProfile.PROP_NAME); if ((name != null) && (name.length() > 0)) return name; return profile.getProfileId(); } private String getElementText(final IRepository<?> repository) { final String name = repository.getName(); if ((name != null) && (name.length() > 0)) return name; return URIUtil.toUnencodedString(repository.getLocation()); } private String getElementText(final PackageDefinition pkg) { final StringBuilder label = new StringBuilder(); label.append(pkg.getId()); final IPackageManager packageManager = P2Activator.getInstance().getPackageManager(); if (packageManager.isMarkedForInstall(pkg)) { label.append(" (provisioned)"); } if (packageManager.isMarkedForUninstall(pkg)) { label.append(" (revoked)"); } return label.toString(); } private String getElementText(final RepositoryDefinition repo) { final StringBuilder label = new StringBuilder(); label.append(repo.getId()); label.append(" ("); label.append(repo.getLocation()); label.append(") "); return label.toString(); } @Override public Image getImage(final Object element) { ImageDescriptor descriptor = getImageDescriptor(element); if (descriptor == null) { if (element instanceof IArtifactKey) { descriptor = P2UiImages.getImageDescriptor(P2UiImages.IMG_OBJ_ARTIFACT_KEY); } else return null; } return getResourceManager().createImage(descriptor); } private ImageDescriptor getImageDescriptor(final Object element) { if (element instanceof IProfile) return P2UiImages.getImageDescriptor(P2UiImages.IMG_PROFILE); if (element instanceof IInstallableUnit) { final IInstallableUnit iu = (IInstallableUnit) element; if (Boolean.valueOf(iu.getProperty(InstallableUnitDescription.PROP_TYPE_PATCH))) return P2UiImages.getImageDescriptor(P2UiImages.IMG_PATCH_IU); else if (Boolean.valueOf(iu.getProperty(InstallableUnitDescription.PROP_TYPE_CATEGORY))) return P2UiImages.getImageDescriptor(P2UiImages.IMG_CATEGORY); else return P2UiImages.getImageDescriptor(P2UiImages.IMG_IU); } if (element instanceof IArtifactRepository) return P2UiImages.getImageDescriptor(P2UiImages.IMG_ARTIFACT_REPOSITORY); if (element instanceof IMetadataRepository) return P2UiImages.getImageDescriptor(P2UiImages.IMG_METADATA_REPOSITORY); if (element instanceof IRequirement) return P2UiImages.getImageDescriptor(P2UiImages.IMG_IU); return null; } private ResourceManager getResourceManager() { if (null == manager) { manager = new LocalResourceManager(JFaceResources.getResources()); } return manager; } @Override public String getText(final Object element) { if (element instanceof PackageDefinition) return getElementText((PackageDefinition) element); if (element instanceof RepositoryDefinition) return getElementText((RepositoryDefinition) element); if (element instanceof InstallableUnitReference) return getElementText((InstallableUnitReference) element); if (element instanceof IProfile) return getElementText((IProfile) element); if (element instanceof IInstallableUnit) return getElementText((IInstallableUnit) element); if (element instanceof IRepository) return getElementText((IRepository) element); if (element instanceof IArtifactKey) { final IArtifactKey key = (IArtifactKey) element; return key.getId() + " [" + key.getClassifier() + "]"; //$NON-NLS-1$//$NON-NLS-2$ } if (element instanceof IProcessingStepDescriptor) { final IProcessingStepDescriptor descriptor = (IProcessingStepDescriptor) element; return descriptor.getProcessorId(); } if (element instanceof Node) { final Node node = (Node) element; final StringBuilder label = new StringBuilder(); label.append(node.getId()); // if (StringUtils.isNotBlank(node.getLocation())) { // label.append(" (").append(node.getLocation()).append(")"); // } return label.toString(); } return super.getText(element); } }