org.jboss.tools.common.jdt.debug.ui.actions.LaunchDialogAction.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.common.jdt.debug.ui.actions.LaunchDialogAction.java

Source

/*************************************************************************************
 * Copyright (c) 2008-2011 Red Hat, Inc. 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:
 *     JBoss by Red Hat - Initial implementation.
 ************************************************************************************/
package org.jboss.tools.common.jdt.debug.ui.actions;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager;
import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog;
import org.eclipse.debug.internal.ui.launchConfigurations.LaunchGroupExtension;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.jboss.tools.common.jdt.debug.RemoteDebugActivator;
import org.jboss.tools.common.jdt.debug.ui.RemoteDebugUIActivator;

/**
 * 
 * @author snjeza
 *
 */
public class LaunchDialogAction extends Action {

    public void run() {
        LaunchConfigurationManager lcManager = DebugUIPlugin.getDefault().getLaunchConfigurationManager();
        LaunchGroupExtension group = lcManager.getLaunchGroup(RemoteDebugActivator.LAUNCH_CATEGORY);
        LaunchConfigurationsDialog dialog = new LaunchConfigurationsDialog(getShell(), group);
        ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
        ILaunchConfigurationType type = manager
                .getLaunchConfigurationType(RemoteDebugActivator.REMOTE_JAVA_APPLICATION_ID);
        ILaunchConfiguration config = RemoteDebugActivator.getDefault().getDefaultLaunchConfiguration();
        ILaunchConfigurationWorkingCopy wc = null;
        try {
            if (config == null) {
                wc = RemoteDebugActivator.createNewLaunchConfiguration(type);
            } else {
                wc = config.getWorkingCopy();
            }
        } catch (CoreException e) {
            RemoteDebugUIActivator.log(e);
            RemoteDebugUIActivator.displayLaunchError(getShell(), config, e);
        }
        IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
        ISelection currentSelection = page.getSelection();
        if (currentSelection instanceof ITreeSelection) {
            ITreeSelection selection = (ITreeSelection) currentSelection;
            Object object = selection.getFirstElement();
            if (!(object instanceof IJavaElement) && object instanceof IAdaptable) {
                object = ((IAdaptable) object).getAdapter(IJavaElement.class);
            }
            if (object instanceof IJavaElement) {
                IJavaElement javaElement = (IJavaElement) object;
                IJavaProject javaProject = javaElement.getJavaProject();
                if (javaProject != null) {
                    try {
                        wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME,
                                javaProject.getElementName());
                        RemoteDebugUIActivator.getDefault().addSelectedProjects(wc, selection, javaProject);
                        config = wc.doSave();
                    } catch (CoreException e) {
                        RemoteDebugUIActivator.log(e);
                        RemoteDebugUIActivator.displayLaunchError(getShell(), config, e);
                    }
                }
            }
        }
        IStructuredSelection selection = new StructuredSelection(config);
        dialog.setInitialSelection(selection);
        dialog.setOpenMode(LaunchConfigurationsDialog.LAUNCH_CONFIGURATION_DIALOG_OPEN_ON_SELECTION);
        dialog.open();
    }

    private static Shell getShell() {
        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
        if (window == null) {
            IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows();
            if (windows.length > 0) {
                return windows[0].getShell();
            }
        } else {
            return window.getShell();
        }
        return null;
    }
}