blob: 80c35decf58055d8ae24279b674bf20bb6994ee7 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2006 IBM Corporation.
* 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:
* IBM Corporation - Initial Implementation
*
*****************************************************************************/
package org.eclipse.ptp.remotetools.internal.ssh;
import java.io.ByteArrayOutputStream;
import org.eclipse.ptp.remotetools.core.IRemoteExecutionTools;
import org.eclipse.ptp.remotetools.core.IRemoteScript;
import org.eclipse.ptp.remotetools.core.IRemoteScriptExecution;
import org.eclipse.ptp.remotetools.core.RemoteProcess;
import org.eclipse.ptp.remotetools.exception.CancelException;
import org.eclipse.ptp.remotetools.exception.RemoteConnectionException;
import org.eclipse.ptp.remotetools.exception.RemoteExecutionException;
import org.eclipse.ptp.remotetools.internal.common.RemoteScript;
/**
* A set of facility methods for common execution patterns.
*
* @author Richard Maciel
*/
public class ExecutionTools implements IRemoteExecutionTools {
ExecutionManager manager;
protected ExecutionTools(ExecutionManager manager) {
this.manager = manager;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.remotetools.core.IRemoteExecutionTools#createScript()
*/
public IRemoteScript createScript() {
return new RemoteScript();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.remotetools.core.IRemoteExecutionTools#executeScript(org.eclipse.ptp.remotetools.core.IRemoteScript)
*/
public IRemoteScriptExecution executeScript(IRemoteScript remoteScript) throws RemoteConnectionException {
if (!(remoteScript instanceof RemoteScript)) {
throw new IllegalArgumentException();
}
ScriptExecution actualExecution = new ScriptExecution(manager, (RemoteScript) remoteScript);
actualExecution.startExecution();
return actualExecution;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.remotetools.core.IRemoteExecutionTools#executeCommand(java.lang.String)
*/
public int executeWithExitValue(String command) throws RemoteExecutionException, RemoteConnectionException, CancelException {
IRemoteScript script = createScript();
script.setScript(command);
IRemoteScriptExecution execution = executeScript(script);
execution.waitForEndOfExecution();
int returncode = execution.getReturnCode();
execution.close();
return returncode;
}
/*
* (non-Javadoc)
* @see org.eclipse.ptp.remotetools.core.IRemoteExecutionTools#executeCommandWithOutput(java.lang.String)
*/
public String executeWithOutput(String command) throws RemoteExecutionException, RemoteConnectionException, CancelException {
IRemoteScript script = createScript();
script.setScript(command);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
script.setProcessOutputStream(baos);
IRemoteScriptExecution execution = executeScript(script);
execution.waitForEndOfExecution();
execution.close();
return baos.toString();
}
public void executeBashCommand(String command) throws RemoteExecutionException, CancelException, RemoteConnectionException {
IRemoteScript script = createScript();
script.setScript(command);
ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
script.setProcessOutputStream(baos1);
ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
script.setProcessErrorStream(baos2);
IRemoteScriptExecution execution = executeScript(script);
execution.waitForEndOfExecution();
int returncode = execution.getReturnCode();
execution.close();
if (returncode != 0) {
throw new RemoteExecutionException(Messages.ExecutionTools_ExecuteBashCommand_FailedRunBashCommand, returncode, baos1.toString(), baos2.toString());
}
}
public RemoteProcess executeProcess(IRemoteScript remoteScript) throws RemoteExecutionException, CancelException, RemoteConnectionException {
remoteScript.setFetchProcessErrorStream(true);
remoteScript.setFetchProcessInputStream(true);
remoteScript.setFetchProcessOutputStream(true);
IRemoteScriptExecution execution = executeScript(remoteScript);
SSHRemoteProcess process = new SSHRemoteProcess(execution);
return process;
}
}