001package com.dev9.mvnwatcher; 002 003import java.io.File; 004import java.nio.file.Files; 005import java.nio.file.Path; 006import java.nio.file.Paths; 007import java.util.ArrayList; 008import java.util.List; 009 010public class Task { 011 private String executable; 012 private List<String> arguments; 013 private File outputFile; 014 private Path executableDirectory; 015 016 public Task(String executable, List<String> arguments, File outputFile, Path executableDirectory) { 017 this.executable = executable; 018 this.arguments = arguments; 019 this.outputFile = outputFile; 020 this.executableDirectory = executableDirectory; 021 022 if (!Files.exists(Paths.get(outputFile.getParent()))) 023 throw new IllegalArgumentException("Can't find " + outputFile.getParent()); 024 025 if (!executableDirectory.toFile().exists()) 026 throw new IllegalArgumentException("Can't find " + executableDirectory.toAbsolutePath()); 027 } 028 029 public File getOutputFile() { 030 return outputFile; 031 } 032 033 private List<String> toArgList() { 034 List<String> result = new ArrayList<>(); 035 036 result.add(executable); 037 result.addAll(arguments); 038 039 return result; 040 } 041 042 public Path getExecutableDirectory() { 043 return executableDirectory; 044 } 045 046 047 public ProcessBuilder toProcessBuilder() { 048 ProcessBuilder b = new ProcessBuilder(toArgList()); 049 b.directory(executableDirectory.toFile()); 050 051 b.redirectErrorStream(true); 052 b.redirectOutput(ProcessBuilder.Redirect.appendTo(outputFile)); 053 054 return b; 055 } 056 057}