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}