/*******************************************************************************
* Copyright (c) 2012, 2014 Mentor Graphics 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:
* Mentor Graphics - Initial API and implementation
* Red Hat Inc. - modified for use in Standalone Debugger
*******************************************************************************/
package org.eclipse.cdt.internal.debug.application;
import org.eclipse.cdt.debug.application.Activator;
import org.eclipse.cdt.debug.application.Messages;
import org.eclipse.cdt.debug.application.NewExecutableDialog;
import org.eclipse.cdt.debug.application.NewExecutableInfo;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class DebugNewExecutableHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
NewExecutableDialog dialog = new NewExecutableDialog(new Shell());
if (dialog.open() == IDialogConstants.OK_ID) {
NewExecutableInfo info = dialog.getExecutableInfo();
String executable = info.getHostPath();
String arguments = info.getArguments();
String buildLog = info.getBuildLog();
try {
final ILaunchConfiguration config = DebugExecutable.importAndCreateLaunchConfig(new NullProgressMonitor(), executable, buildLog, arguments, false);
if (config != null) {
final JobContainer LaunchJobs = new JobContainer();
Job.getJobManager().addJobChangeListener(new JobChangeAdapter() {
@Override
public void scheduled(IJobChangeEvent event) {
Job job = event.getJob();
if (job.getName().contains(config.getName()))
LaunchJobs.setLaunchJob(job);
}
@Override
public void done(IJobChangeEvent event) {
}
});
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
DebugUITools.launch(config, ILaunchManager.DEBUG_MODE);
}
});
if (LaunchJobs.getLaunchJob() != null) {
try {
LaunchJobs.getLaunchJob().join();
} catch (InterruptedException e) {
IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0,
Messages.LaunchInterruptedError, e);
ResourcesPlugin.getPlugin().getLog().log(status);
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (CoreException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
return null;
}
}