RSE
Release 3.0

org.eclipse.rse.internal.services.terminals
Class ProcessBaseShell

java.lang.Object
  extended by org.eclipse.core.runtime.PlatformObject
      extended by org.eclipse.rse.internal.services.terminals.ProcessBaseShell
All Implemented Interfaces:
IAdaptable, IBaseShell

public class ProcessBaseShell
extends PlatformObject
implements IBaseShell

A wrapper for Java Process objects to give more convenient access to them through the IBaseShell interface.

EXPERIMENTAL. This class or interface has been added as part of a work in progress. There is no guarantee that this API will work or that it will remain the same. Please do not use this API without consulting with the Target Management team.

Since:
org.eclipse.rse.services 3.0

Field Summary
protected  Process fProcess
          The underlying Process instance.
 
Constructor Summary
ProcessBaseShell(Process p)
          Constructor.
 
Method Summary
 void exit()
          Forcefully terminate the underlying Process through Process.destroy().
 int exitValue()
          Return the exit value of the Process connected by this shell.
 InputStream getErrorStream()
          Get a remote-to-local InputStream connected to the standard error output of the underlying Process.
 InputStream getInputStream()
          Get a remote-to-local InputStream connected to the standard output of the underlying Process.
 OutputStream getOutputStream()
          Get a local-to-remote OutputStream connected to the standard input of the underlying Process.
 boolean isActive()
          Check if the underlying Process is still active.
 boolean waitFor(long timeout)
          Block the calling Thread until this shell is no longer active, or the specified timeout has elapsed.
 
Methods inherited from class org.eclipse.core.runtime.PlatformObject
getAdapter
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.eclipse.core.runtime.IAdaptable
getAdapter
 

Field Detail

fProcess

protected final Process fProcess
The underlying Process instance.

Constructor Detail

ProcessBaseShell

public ProcessBaseShell(Process p)
Constructor.

Parameters:
p - the Process to wrap with this IBaseShell interface.
Method Detail

exit

public void exit()
Forcefully terminate the underlying Process through Process.destroy(). Subclasses may want to override this behavior by trying to terminate the underlying Process in a cleaner way.

Specified by:
exit in interface IBaseShell
See Also:
IBaseShell.exit()

exitValue

public int exitValue()
Description copied from interface: IBaseShell
Return the exit value of the Process connected by this shell. Depending on the underlying implementation, this call may not be supported. Implementations which do not support this must throw an IllegalThreadStateException when the shell is still active, or return 0 the shell has terminated.

Specified by:
exitValue in interface IBaseShell
Returns:
the exit value of the Process connected by this shell, provided that it has already terminated. By convention, the exit value 0 indicates successful completion or the fact that transmission of exit values is not supported by an implementation.
See Also:
Process.exitValue()

getErrorStream

public InputStream getErrorStream()
Description copied from interface: IBaseShell
Get a remote-to-local InputStream connected to the standard error output of the underlying Process. Implementations may return null if they do not support separate Streams for output and error. Clients must not close the obtained InputStream themselves, since the behavior that this may have on the underlying shell or process is undefined. Use {#exit()} instead to terminate the shell if that is desired, it will close all relevant Streams.

Specified by:
getErrorStream in interface IBaseShell
Returns:
an InputStream for reading error output from the underlying process, or null if separate output and error streams are not supported. Error output will be merged with the Stream obtained from IBaseShell.getInputStream() in that case.

getInputStream

public InputStream getInputStream()
Description copied from interface: IBaseShell
Get a remote-to-local InputStream connected to the standard output of the underlying Process. Clients must not close the obtained InputStream themselves, since the behavior that this may have on the underlying shell or process is undefined. Use {#exit()} instead to terminate the shell if that is desired, it will close all relevant Streams.

Specified by:
getInputStream in interface IBaseShell
Returns:
an InputStream for reading from the underlying process.

getOutputStream

public OutputStream getOutputStream()
Description copied from interface: IBaseShell
Get a local-to-remote OutputStream connected to the standard input of the underlying Process. Clients must not close the obtained OutputStream themselves, since the behavior that this may have on the underlying shell or process is undefined. Use {#exit()} instead to terminate the shell if that is desired, it will close all relevant Streams.

Specified by:
getOutputStream in interface IBaseShell
Returns:
an OutputStream for talking to the underlying process.

isActive

public boolean isActive()
Check if the underlying Process is still active. Does not check whether the Streams for the Process have been closed by the client, since this does not influence the process active state anyways.

Specified by:
isActive in interface IBaseShell
Returns:
true if the connection is active, i.e. the Process underlying this connection is running, and the Streams connected to it are not closed.
See Also:
IBaseShell.isActive()

waitFor

public boolean waitFor(long timeout)
                throws InterruptedException
Description copied from interface: IBaseShell
Block the calling Thread until this shell is no longer active, or the specified timeout has elapsed. If the underlying shell has already terminated, this method returns immediately. When this method returns false, the shell is no longer active, so an IBaseShell.exitValue() may be obtained.

Specified by:
waitFor in interface IBaseShell
Parameters:
timeout - the maximum time (in milliseconds) to wait. Implementations may return sooner even if the underlying Process has not yet terminated, so clients always need to keep track of time themselves and need to check the return value. A timeout value of zero causes this method to not limit the wait time. Negative wait time has undefined behavior.
Returns:
true if the Shell is still active after waiting (e.g. because the timeout has elapsed); false if the shell is no longer active.
Throws:
InterruptedException - if the waiting Thread has been interrupted, e.g. because the main application is shutting down.
See Also:
IBaseShell.isActive()

RSE
Release 3.0

Copyright (c) IBM Corporation and others 2000, 2008. All Rights Reserved.