From ced7b1017def05a9e4c73e1945cb9950c7d0d1a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Pluta?= Date: Tue, 2 Apr 2019 20:04:09 +0200 Subject: [PATCH] 8: Create ProcessExecutor --- .../decompiler/process/ProcessExecutor.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/main/java/com/bartek/esa/decompiler/process/ProcessExecutor.java diff --git a/src/main/java/com/bartek/esa/decompiler/process/ProcessExecutor.java b/src/main/java/com/bartek/esa/decompiler/process/ProcessExecutor.java new file mode 100644 index 0000000..1b59dbd --- /dev/null +++ b/src/main/java/com/bartek/esa/decompiler/process/ProcessExecutor.java @@ -0,0 +1,31 @@ +package com.bartek.esa.decompiler.process; + +import com.bartek.esa.error.EsaException; +import io.vavr.control.Try; + +import javax.inject.Inject; + +public class ProcessExecutor { + + @Inject + public ProcessExecutor() { + + } + + public void execute(String[] command) { + Process process = Try.of(() -> Runtime.getRuntime().exec(command)) + .getOrElseThrow(EsaException::new); + waitForProcess(process); + checkExitValue(process, command[0]); + } + + private void waitForProcess(Process process) { + Try.run(process::waitFor).getOrElseThrow(EsaException::new); + } + + private void checkExitValue(Process process, String commandName) { + if(process.exitValue() != 0) { + throw new EsaException("'" + commandName + "' process has finished with non-zero code. Interrupting..."); + } + } +}