+++ /dev/null
-package net.sourceforge.phpdt.externaltools.internal.program.launchConfigurations;
-
-/**********************************************************************
-Copyright (c) 2002 IBM Corp. and others. All rights reserved.
-This file is made available under the terms of the Common Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/cpl-v10.html
-
-Contributors:
-**********************************************************************/
-
-import java.io.File;
-
-import net.sourceforge.phpdt.externaltools.launchConfigurations.ExternalToolsUtil;
-import net.sourceforge.phpdt.externaltools.variable.ExpandVariableContext;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.model.ILaunchConfigurationDelegate;
-import org.eclipse.debug.core.model.IProcess;
-
-/**
- * Launch delegate for a program.
- */
-public class ProgramLaunchDelegate implements ILaunchConfigurationDelegate {
-
- /**
- * Constructor for ProgramLaunchDelegate.
- */
- public ProgramLaunchDelegate() {
- super();
- }
-
- /**
- * @see org.eclipse.debug.core.model.ILaunchConfigurationDelegate#launch(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String, org.eclipse.debug.core.ILaunch, org.eclipse.core.runtime.IProgressMonitor)
- */
- public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException {
-
- if (monitor.isCanceled()) {
- return;
- }
-
- // get variable context
- ExpandVariableContext resourceContext = ExternalToolsUtil.getVariableContext();
-
- if (monitor.isCanceled()) {
- return;
- }
-
- // resolve location
- IPath location = ExternalToolsUtil.getLocation(configuration, resourceContext);
-
- if (monitor.isCanceled()) {
- return;
- }
-
- // resolve working directory
- IPath workingDirectory = ExternalToolsUtil.getWorkingDirectory(configuration, resourceContext);
-
- if (monitor.isCanceled()) {
- return;
- }
-
- // resolve arguments
- String[] arguments = ExternalToolsUtil.getArguments(configuration, resourceContext);
-
- if (monitor.isCanceled()) {
- return;
- }
-
- int cmdLineLength = 1;
- if (arguments != null) {
- cmdLineLength += arguments.length;
- }
- String[] cmdLine = new String[cmdLineLength];
- cmdLine[0] = location.toOSString();
- if (arguments != null) {
- System.arraycopy(arguments, 0, cmdLine, 1, arguments.length);
- }
-
- File workingDir = null;
- if (workingDirectory != null) {
- workingDir = workingDirectory.toFile();
- }
-
- if (monitor.isCanceled()) {
- return;
- }
-
- Process p = DebugPlugin.exec(cmdLine, workingDir);
- IProcess process = null;
- if (p != null) {
- process = DebugPlugin.newProcess(launch, p, location.toOSString());
- }
- process.setAttribute(IProcess.ATTR_CMDLINE, renderCommandLine(cmdLine));
-
- if (ExternalToolsUtil.isBackground(configuration)) {
- // refresh resources after process finishes
- if (ExternalToolsUtil.getRefreshScope(configuration) != null) {
- BackgroundResourceRefresher refresher = new BackgroundResourceRefresher(configuration, process, resourceContext);
- refresher.startBackgroundRefresh();
- }
- } else {
- // wait for process to exit
- while (!process.isTerminated()) {
- try {
- if (monitor.isCanceled()) {
- process.terminate();
- break;
- }
- Thread.sleep(50);
- } catch (InterruptedException e) {
- }
- }
-
- // refresh resources
- ExternalToolsUtil.refreshResources(configuration, resourceContext, monitor);
- }
-
-
- }
-
- protected static String renderCommandLine(String[] commandLine) {
- if (commandLine.length < 1)
- return ""; //$NON-NLS-1$
- StringBuffer buf= new StringBuffer(commandLine[0]);
- for (int i= 1; i < commandLine.length; i++) {
- buf.append(' ');
- buf.append(commandLine[i]);
- }
- return buf.toString();
- }
-
-}