package me.pbox.invoke;
import me.pbox.env.Environment;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import java.io.File;
import java.io.IOException;
/**
* @author Mike Mirzayanov (mirzayanovmr@gmail.com)
*/
public class InvokeUtil {
private static final Logger logger = Logger.getLogger(InvokeUtil.class);
public static int run(boolean inheritOutput, boolean inheritError, String... args) throws InvokeException {
try {
ProcessBuilder pb = new ProcessBuilder(args);
pb.directory(Environment.getPboxTempAsFile());
if (inheritOutput) {
pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
}
if (inheritError) {
pb.redirectError(ProcessBuilder.Redirect.INHERIT);
}
logger.info("Starting '" + StringUtils.join(args, " ") + "'.");
Process process = pb.start();
try {
return process.waitFor();
} finally {
process.destroy();
}
} catch (IOException | InterruptedException e) {
throw new InvokeException("Can't run " + StringUtils.join(args, ' ') + ".", e);
}
}
public static int run(String... args) throws InvokeException {
return run(true, true, null, args);
}
public static int run(boolean inheritOutput, boolean inheritError, File directory, String... args) throws InvokeException {
try {
ProcessBuilder pb = new ProcessBuilder(args);
pb.directory(directory);
if (inheritOutput) {
pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
}
if (inheritError) {
pb.redirectError(ProcessBuilder.Redirect.INHERIT);
}
logger.info("Starting '" + StringUtils.join(args, " ") + "'.");
Process process = pb.start();
try {
return process.waitFor();
} finally {
process.destroy();
}
} catch (IOException | InterruptedException e) {
throw new InvokeException("Can't run " + StringUtils.join(args, ' ') + ".", e);
}
}
public static int run(File directory, String... args) throws InvokeException {
return run(true, true, directory, args);
}
}