package com.dhemery.os;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* A runnable command launched via a Java {@link ProcessBuilder}.
*/
public class RuntimeCommand implements RunnableCommand {
private final String path;
private final List<String> arguments;
private final Map<String, String> environment;
private final String description;
/**
* Create a command to be run via a Java {@link ProcessBuilder}.
*/
public RuntimeCommand(String description, String path, List<String> arguments, Map<String, String> environment) {
this.description = description;
this.path = path;
this.arguments = Collections.unmodifiableList(arguments);
this.environment = Collections.unmodifiableMap(environment);
}
@Override
public OSProcess run() {
ProcessBuilder builder = build();
try {
return new RuntimeProcess(this, builder.start());
} catch (IOException cause) {
throw new OSCommandException(this, cause);
}
}
private ProcessBuilder build() {
ProcessBuilder builder = new ProcessBuilder();
builder.command().add(path);
builder.command().addAll(arguments);
builder.environment().putAll(environment);
return builder;
}
@Override
public String description() {
return description;
}
@Override
public String path() {
return path;
}
@Override
public List<String> arguments() {
return arguments;
}
@Override
public Map<String, String> environment() {
return environment;
}
}