uk.ac.starlink.util
Class ProcessDataSource

java.lang.Object
  extended by uk.ac.starlink.util.DataSource
      extended by uk.ac.starlink.util.ProcessDataSource

public class ProcessDataSource
extends DataSource

DataSource that uses the standard output of a System process.

Since:
24 Mar 2015

Field Summary
 
Fields inherited from class uk.ac.starlink.util.DataSource
DEFAULT_INTRO_LIMIT, MARK_WORKAROUND_PROPERTY
 
Constructor Summary
ProcessDataSource(java.lang.ProcessBuilder pbuilder)
          Constructor.
 
Method Summary
static java.lang.ProcessBuilder createCommandLineProcessBuilder(java.lang.String cmdLine)
          Utility method to create a process builder given a shell command line that generates output to standard output.
protected  java.io.InputStream getRawInputStream()
          Provides a new InputStream for this data source.
 
Methods inherited from class uk.ac.starlink.util.DataSource
close, forceCompression, getCompression, getHybridInputStream, getInputStream, getInputStream, getIntro, getIntroLimit, getLength, getMarkWorkaround, getName, getPosition, getRawLength, getSystemId, getURL, makeDataSource, makeDataSource, makeDataSource, setCompression, setIntroLimit, setMarkWorkaround, setName, setPosition, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ProcessDataSource

public ProcessDataSource(java.lang.ProcessBuilder pbuilder)
Constructor.

Parameters:
pbuilder - process builder
Method Detail

getRawInputStream

protected java.io.InputStream getRawInputStream()
                                         throws java.io.IOException
Description copied from class: DataSource
Provides a new InputStream for this data source. This method should be implemented by subclasses to provide a new InputStream giving the raw content of the source each time it is called. The general contract of this method is that each time it is called it will return a stream with the same content.

Specified by:
getRawInputStream in class DataSource
Returns:
an InputStream containing the data of this source
Throws:
java.io.IOException

createCommandLineProcessBuilder

public static java.lang.ProcessBuilder createCommandLineProcessBuilder(java.lang.String cmdLine)
Utility method to create a process builder given a shell command line that generates output to standard output. The command line may contain shell syntax like | symbols.

This method simply sets up a ProcessBuilder to execute a process with the argv { "sh", "-c", cmdLine }. I haven't tested this exhaustively, but I'd expect it to work on un*x-like systems. I've got no idea if there's any chance of getting something like this to work on MS Windows, or even if such a thing would be any use.

Parameters:
cmdLine - shell command that generates output to stdout
Returns:
process builder to execute cmdLine