001: /*******************************************************************************
002: * Copyright (c) 2000, 2007 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.pde.internal.runtime;
011:
012: import org.eclipse.core.runtime.Platform;
013: import org.eclipse.swt.widgets.Shell;
014: import org.eclipse.ui.IWorkbenchPage;
015: import org.eclipse.ui.IWorkbenchWindow;
016: import org.eclipse.ui.plugin.AbstractUIPlugin;
017: import org.osgi.framework.Bundle;
018: import org.osgi.framework.BundleContext;
019: import org.osgi.service.packageadmin.PackageAdmin;
020: import org.osgi.util.tracker.ServiceTracker;
021:
022: public class PDERuntimePlugin extends AbstractUIPlugin {
023:
024: private static PDERuntimePlugin inst;
025: private BundleContext fContext;
026: private ServiceTracker packageAdminTracker;
027:
028: private static boolean isBundleAvailable(String bundleID) {
029: Bundle bundle = Platform.getBundle(bundleID);
030: return bundle != null
031: && (bundle.getState() & (Bundle.ACTIVE
032: | Bundle.STARTING | Bundle.RESOLVED)) != 0;
033: }
034:
035: public static final boolean HAS_IDE_BUNDLES;
036: static {
037: boolean result = false;
038: try {
039: result = isBundleAvailable("org.eclipse.core.resources") //$NON-NLS-1$
040: && isBundleAvailable("org.eclipse.pde.core") //$NON-NLS-1$
041: && isBundleAvailable("org.eclipse.jdt.core") //$NON-NLS-1$
042: && isBundleAvailable("org.eclipse.jdt.ui"); //$NON-NLS-1$
043: } catch (Throwable exception) {
044: }
045: HAS_IDE_BUNDLES = result;
046: }
047:
048: public static IWorkbenchPage getActivePage() {
049: return getDefault().internalGetActivePage();
050: }
051:
052: public static Shell getActiveWorkbenchShell() {
053: return getActiveWorkbenchWindow().getShell();
054: }
055:
056: public static IWorkbenchWindow getActiveWorkbenchWindow() {
057: return getDefault().getWorkbench().getActiveWorkbenchWindow();
058: }
059:
060: public PackageAdmin getPackageAdmin() {
061: if (packageAdminTracker == null) {
062: return null;
063: }
064: return (PackageAdmin) packageAdminTracker.getService();
065: }
066:
067: public static PDERuntimePlugin getDefault() {
068: return inst;
069: }
070:
071: public static String getPluginId() {
072: return getDefault().getBundle().getSymbolicName();
073: }
074:
075: public PDERuntimePlugin() {
076: inst = this ;
077: }
078:
079: private IWorkbenchPage internalGetActivePage() {
080: return getWorkbench().getActiveWorkbenchWindow()
081: .getActivePage();
082: }
083:
084: /* (non-Javadoc)
085: * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
086: */
087: public void start(BundleContext context) throws Exception {
088: super .start(context);
089: this .fContext = context;
090:
091: packageAdminTracker = new ServiceTracker(context,
092: PackageAdmin.class.getName(), null);
093: packageAdminTracker.open();
094: }
095:
096: public BundleContext getBundleContext() {
097: return this .fContext;
098: }
099:
100: /**
101: * This method is called when the plug-in is stopped
102: */
103: public void stop(BundleContext context) throws Exception {
104: super.stop(context);
105: if (packageAdminTracker != null) {
106: packageAdminTracker.close();
107: packageAdminTracker = null;
108: }
109: inst = null;
110: }
111:
112: }
|