| /******************************************************************************* |
| * Copyright (c) 2007, 2011 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 |
| *******************************************************************************/ |
| package org.eclipse.equinox.internal.p2.ui; |
| |
| import java.net.URL; |
| import org.eclipse.core.runtime.*; |
| import org.eclipse.core.runtime.jobs.Job; |
| import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper; |
| import org.eclipse.equinox.internal.p2.core.helpers.Tracing; |
| import org.eclipse.equinox.p2.core.IProvisioningAgent; |
| import org.eclipse.equinox.p2.engine.IProfileRegistry; |
| import org.eclipse.equinox.p2.operations.ProvisioningSession; |
| import org.eclipse.equinox.p2.ui.*; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.jface.resource.ImageRegistry; |
| import org.eclipse.ui.plugin.AbstractUIPlugin; |
| import org.osgi.framework.*; |
| import org.osgi.service.packageadmin.PackageAdmin; |
| |
| /** |
| * Controls the lifecycle of the provisioning UI bundle |
| * |
| * @since 3.4 |
| */ |
| public class ProvUIActivator extends AbstractUIPlugin { |
| private static BundleContext context; |
| private static PackageAdmin packageAdmin = null; |
| private static ServiceReference<?> packageAdminRef = null; |
| private static ProvUIActivator plugin; |
| public static final String PLUGIN_ID = "org.eclipse.equinox.p2.ui"; //$NON-NLS-1$ |
| |
| private ProvisioningSession session; |
| private ProvisioningUI ui; |
| |
| public static BundleContext getContext() { |
| return context; |
| } |
| |
| /** |
| * Returns the singleton plugin instance |
| * |
| * @return the instance |
| */ |
| public static ProvUIActivator getDefault() { |
| return plugin; |
| } |
| |
| public static Bundle getBundle(String symbolicName) { |
| if (packageAdmin == null) |
| return null; |
| Bundle[] bundles = packageAdmin.getBundles(symbolicName, null); |
| if (bundles == null) |
| return null; |
| // Return the first bundle that is not installed or uninstalled |
| for (int i = 0; i < bundles.length; i++) { |
| if ((bundles[i].getState() & (Bundle.INSTALLED | Bundle.UNINSTALLED)) == 0) { |
| return bundles[i]; |
| } |
| } |
| return null; |
| } |
| |
| public ProvUIActivator() { |
| // do nothing |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) |
| */ |
| public void start(BundleContext bundleContext) throws Exception { |
| super.start(bundleContext); |
| |
| plugin = this; |
| ProvUIActivator.context = bundleContext; |
| packageAdminRef = bundleContext.getServiceReference(PackageAdmin.class.getName()); |
| packageAdmin = (PackageAdmin) bundleContext.getService(packageAdminRef); |
| } |
| |
| public void stop(BundleContext bundleContext) throws Exception { |
| try { |
| // cancel any repository load jobs started in the UI |
| Job.getJobManager().cancel(LoadMetadataRepositoryJob.LOAD_FAMILY); |
| // See https://bugs.eclipse.org/bugs/show_bug.cgi?id=305163 |
| // join the jobs so that this bundle does not stop until the jobs are |
| // actually cancelled. |
| Job.getJobManager().join(LoadMetadataRepositoryJob.LOAD_FAMILY, new NullProgressMonitor()); |
| plugin = null; |
| ProvUIActivator.context = null; |
| ui = null; |
| } finally { |
| super.stop(bundleContext); |
| } |
| } |
| |
| protected void initializeImageRegistry(ImageRegistry reg) { |
| createImageDescriptor(ProvUIImages.IMG_METADATA_REPOSITORY, reg); |
| createImageDescriptor(ProvUIImages.IMG_ARTIFACT_REPOSITORY, reg); |
| createImageDescriptor(ProvUIImages.IMG_IU, reg); |
| createImageDescriptor(ProvUIImages.IMG_DISABLED_IU, reg); |
| createImageDescriptor(ProvUIImages.IMG_UPDATED_IU, reg); |
| createImageDescriptor(ProvUIImages.IMG_PATCH_IU, reg); |
| createImageDescriptor(ProvUIImages.IMG_DISABLED_PATCH_IU, reg); |
| createImageDescriptor(ProvUIImages.IMG_CATEGORY, reg); |
| createImageDescriptor(ProvUIImages.IMG_PROFILE, reg); |
| createImageDescriptor(ProvUIImages.WIZARD_BANNER_INSTALL, reg); |
| createImageDescriptor(ProvUIImages.WIZARD_BANNER_REVERT, reg); |
| createImageDescriptor(ProvUIImages.WIZARD_BANNER_UNINSTALL, reg); |
| createImageDescriptor(ProvUIImages.WIZARD_BANNER_UPDATE, reg); |
| } |
| |
| /** |
| * Creates the specified image descriptor and registers it |
| */ |
| private void createImageDescriptor(String id, ImageRegistry reg) { |
| URL url = FileLocator.find(getBundle(), new Path(ProvUIImages.ICON_PATH + id), null); |
| ImageDescriptor desc = ImageDescriptor.createFromURL(url); |
| reg.put(id, desc); |
| } |
| |
| public ProvisioningUI getProvisioningUI() { |
| if (Tracing.DEBUG_DEFAULT_UI) |
| Tracing.debug("Falling back to default provisioning UI"); //$NON-NLS-1$ |
| |
| if (ui == null) { |
| IProvisioningAgent agent = (IProvisioningAgent) ServiceHelper.getService(getContext(), IProvisioningAgent.SERVICE_NAME); |
| session = new ProvisioningSession(agent); |
| Policy policy = (Policy) ServiceHelper.getService(ProvUIActivator.getContext(), Policy.class.getName()); |
| if (policy == null) |
| policy = new Policy(); |
| ui = new ProvisioningUI(session, IProfileRegistry.SELF, policy); |
| } |
| return ui; |
| } |
| } |