/***** BEGIN LICENSE BLOCK *****
* Version: EPL 2.0/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Eclipse Public
* License Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.eclipse.org/legal/cpl-v10.html
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the CPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the CPL, the GPL or the LGPL.
***** END LICENSE BLOCK *****/
package jnr.posix.util;
import java.io.
File;
import java.io.
IOException;
import java.util.
List;
import java.util.
Map;
/**
* Abstract interface for building a process on various JVM versions.
*/
public interface
ProcessMaker {
public static class
Redirect {
public static final
Redirect INHERIT = new
Redirect(
Type.
INHERIT);
public static final
Redirect PIPE = new
Redirect(
Type.
PIPE);
private enum
Type {
APPEND,
INHERIT,
PIPE,
READ,
WRITE
}
private final
Type type;
private final
File file;
private
Redirect(
Type type) {
this(
type, null);
}
private
Redirect(
Type type,
File file) {
this.
type =
type;
this.
file =
file;
}
public static
Redirect appendTo(
File file) {
return new
Redirect(
Type.
APPEND,
file);
}
public static
Redirect from(
File file) {
return new
Redirect(
Type.
READ,
file);
}
public static
Redirect to(
File file) {
return new
Redirect(
Type.
WRITE,
file);
}
public
File file() {
return
file;
}
public
Type type() {
return
type;
}
}
public
List<
String>
command();
public
ProcessMaker command(
List<
String>
command);
public
ProcessMaker command(
String...
command);
public
File directory();
public
ProcessMaker directory(
File dir);
public
Map<
String,
String>
environment();
public
ProcessMaker environment(
String[]
envLines);
public
ProcessMaker inheritIO();
public
Redirect redirectError();
public
ProcessMaker redirectError(
File file);
public
ProcessMaker redirectError(
Redirect destination);
public boolean
redirectErrorStream();
public
ProcessMaker redirectErrorStream(boolean
redirectErrorStream);
public
Redirect redirectInput();
public
ProcessMaker redirectInput(
File file);
public
ProcessMaker redirectInput(
Redirect source);
public
Redirect redirectOutput();
public
ProcessMaker redirectOutput(
File file);
public
ProcessMaker redirectOutput(
Redirect destination);
public
Process start() throws
IOException;
}