org.eclipse.wst.xsl.internal.debug.ui.XSLDebugUIPlugin.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.wst.xsl.internal.debug.ui.XSLDebugUIPlugin.java

Source

/*******************************************************************************
 * Copyright (c) 2008 Chase Technology Ltd - http://www.chasetechnology.co.uk
 * 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:
 *     Doug Satchwell (Chase Technology Ltd) - initial API and implementation
 *******************************************************************************/
package org.eclipse.wst.xsl.internal.debug.ui;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.preference.IPreferenceNode;
import org.eclipse.jface.preference.IPreferencePage;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.jface.preference.PreferenceManager;
import org.eclipse.jface.preference.PreferenceNode;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;

/**
 * The XSL Debug UI plugin.
 * 
 * @author Doug Satchwell
 * @since 1.0
 */
public class XSLDebugUIPlugin extends AbstractUIPlugin {
    /**
     * The id of this.
     */
    public static final String PLUGIN_ID = "org.eclipse.wst.xsl.debug.ui"; //$NON-NLS-1$

    // The shared instance
    private static XSLDebugUIPlugin plugin;

    private XSLDebugUILaunchListener launchListener = new XSLDebugUILaunchListener();

    /**
     * Create a new instance of this.
     */
    public XSLDebugUIPlugin() {
        plugin = this;
    }

    @Override
    public void start(BundleContext context) throws Exception {
        super.start(context);
        launchListener.start();
    }

    @Override
    public void stop(BundleContext context) throws Exception {
        plugin = null;
        launchListener.stop();
        super.stop(context);
    }

    /**
     * Get the singleton instance of this.
     * 
     * @return the singleton
     */
    public static XSLDebugUIPlugin getDefault() {
        return plugin;
    }

    /**
     * Get an ImageDescriptor from a path in this bundle.
     * 
     * @param path
     *            the path to the image
     * @return the ImageDescriptor
     */
    public static ImageDescriptor getImageDescriptor(String path) {
        return imageDescriptorFromPlugin(PLUGIN_ID, path);
    }

    /**
     * Convenience method for opening a given preference page.
     * 
     * @param id
     *            the id of the preference page
     * @param page
     *            the preference page to show
     */
    public static void showPreferencePage(String id, IPreferencePage page) {
        final IPreferenceNode targetNode = new PreferenceNode(id, page);

        PreferenceManager manager = new PreferenceManager();
        manager.addToRoot(targetNode);
        final PreferenceDialog dialog = new PreferenceDialog(XSLDebugUIPlugin.getActiveWorkbenchShell(), manager);
        final boolean[] result = new boolean[] { false };
        BusyIndicator.showWhile(XSLDebugUIPlugin.getStandardDisplay(), new Runnable() {
            public void run() {
                dialog.create();
                dialog.setMessage(targetNode.getLabelText());
                result[0] = (dialog.open() == Window.OK);
            }
        });
    }

    /**
     * Get the current Display if possible, or else the default Display.
     * 
     * @return the current or default Display
     */
    public static Display getStandardDisplay() {
        Display display;
        display = Display.getCurrent();
        if (display == null)
            display = Display.getDefault();
        return display;
    }

    /**
     * Get the active workbench window from the workbench.
     * 
     * @return the active workbench window
     */
    public static IWorkbenchWindow getActiveWorkbenchWindow() {
        return getDefault().getWorkbench().getActiveWorkbenchWindow();
    }

    /**
     * Get the shell of the active workbench window.
     * 
     * @return the active workbench shell
     */
    public static Shell getActiveWorkbenchShell() {
        IWorkbenchWindow window = getActiveWorkbenchWindow();
        if (window != null) {
            return window.getShell();
        }
        return null;
    }

    /**
     * Get the active page of the active workbench window.
     * 
     * @return the active page
     */
    public static IWorkbenchPage getActivePage() {
        IWorkbenchWindow w = getActiveWorkbenchWindow();
        if (w != null) {
            return w.getActivePage();
        }
        return null;
    }

    /**
     * Log the given exception by creating a new Status.
     * 
     * @param e
     *            the exception to log
     */
    public static void log(Exception e) {
        getDefault().getLog().log(new Status(IStatus.ERROR, PLUGIN_ID, 0, "", e)); //$NON-NLS-1$
    }

    /**
     * Log the given core exception.
     * 
     * @param e
     *            the exception to log
     */
    public static void log(CoreException e) {
        getDefault().getLog().log(e.getStatus());
    }
}