diff --git a/common/src/main/java/org/implab/gradle/common/exec/ExecBuilder.java b/common/src/main/java/org/implab/gradle/common/exec/ExecBuilder.java --- a/common/src/main/java/org/implab/gradle/common/exec/ExecBuilder.java +++ b/common/src/main/java/org/implab/gradle/common/exec/ExecBuilder.java @@ -8,6 +8,7 @@ import java.util.Objects; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.stream.Stream; +import java.util.Collection; import org.eclipse.jdt.annotation.NonNullByDefault; @@ -31,22 +32,31 @@ public abstract class ExecBuilder { private RedirectTo errorRedirect; /** Sets command line, clears previous one if any */ - public void command(String cmd, String... args) { + public ExecBuilder command(String cmd, String... args) { commandLine.clear(); commandLine.add(cmd); Stream.of(args).forEach(commandLine::add); + return this; + } + + public ExecBuilder command(Collection cmd) { + this.commandLine.clear(); + this.commandLine.addAll(cmd); + return this; } /** Adds an argument to the command line */ - public void argument(String arg) { + public ExecBuilder argument(String arg) { Objects.requireNonNull(arg, "arg parameter can't be null"); commandLine.add(arg); + return this; } /** Sets the working directory */ - public void directory(File directory) { + public ExecBuilder directory(File directory) { Objects.requireNonNull(directory, "directory parameter can't be null"); this.directory = directory; + return this; } /** @@ -55,14 +65,24 @@ public abstract class ExecBuilder { * @param envVar The name of the environment variable * @param value The value to set, */ - public void setEnvironment(String envVar, String value) { + public ExecBuilder setEnvironment(String envVar, String value) { Objects.requireNonNull(value, "Value can't be null"); Objects.requireNonNull(envVar, "envVar parameter can't be null"); environment.put(envVar, value); + return this; } - public void unsetEnvironment(String envVar) { + public ExecBuilder setEnvironment(Map env) { + Objects.requireNonNull(env, "env parameter can't be null"); + + environment.clear(); + environment.putAll(env); + return this; + } + + public ExecBuilder unsetEnvironment(String envVar) { environment.remove(envVar); + return this; } /** @@ -72,27 +92,30 @@ public abstract class ExecBuilder { *

* If redirection */ - public void stdin(RedirectFrom from) { + public ExecBuilder stdin(RedirectFrom from) { Objects.requireNonNull(from, "from parameter can't be null"); inputRedirect = from; + return this; } /** * Sets redirection for the stdout, {@link RedirectTo} will be applied * every time the process is started. */ - public void stdout(RedirectTo out) { + public ExecBuilder stdout(RedirectTo out) { Objects.requireNonNull(out, "out parameter can't be null"); outputRedirect = out; + return this; } /** * Sets redirection for the stderr, {@link RedirectTo} will be applied * every time the process is started. */ - public void stderr(RedirectTo err) { + public ExecBuilder stderr(RedirectTo err) { Objects.requireNonNull(err, "err parameter can't be null"); errorRedirect = err; + return this; } /** Implement this function to */