public static Either<CommandResult> runCommand( final Context context, final String command, final File path, final List<String> arguments) { try { final List<String> commandAndArgs = new ArrayList<String>(); commandAndArgs.add(command); commandAndArgs.addAll(arguments); final ProcessBuilder pb = new ProcessBuilder(commandAndArgs); if (path != null) { pb.directory(path); } logCommand(context, pb); final Process compilation = pb.start(); final ConsumeStream result = ConsumeStream.start(compilation.getInputStream(), context); final ConsumeStream error = ConsumeStream.start(compilation.getErrorStream(), context); final int exitCode = compilation.waitFor(); result.join(); error.join(); if (result.exception != null) { return Either.fail(result.exception); } if (error.exception != null) { return Either.fail(error.exception); } return Either.success( new CommandResult(result.output.toString(), error.output.toString(), exitCode)); } catch (IOException ex) { return Either.fail(ex); } catch (InterruptedException ex) { return Either.fail(ex); } }
public static synchronized Either<Document> readXml(final InputStream stream) { try { final DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); final DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); return Either.success(dBuilder.parse(stream)); } catch (IOException ex) { return Either.fail(ex); } catch (ParserConfigurationException ex) { return Either.fail(ex); } catch (SAXException ex) { return Either.fail(ex); } }
public static Either<String> readFile(final File file) { try { final FileInputStream stream = new FileInputStream(file); try { final String content = read(stream); return Either.success(content); } finally { stream.close(); } } catch (IOException ex) { return Either.fail(ex); } }
public static Either<String> findCommand( final Context context, final String path, final String name, final String contains) { final String simple = path != null ? new File(path, name).getAbsolutePath() : name; if (testCommand(context, simple, contains, new ArrayList<String>())) { context.log("Found " + name + " in " + simple); return Either.success(simple); } if (isWindows()) { final String bat = path != null ? new File(path, name + ".bat").getAbsolutePath() : name + ".bat"; if (testCommand(context, bat, contains, new ArrayList<String>())) { context.log("Found " + name + " in " + bat); return Either.success(bat); } final String cmd = path != null ? new File(path, name + ".cmd").getAbsolutePath() : name + ".cmd"; if (testCommand(context, cmd, contains, new ArrayList<String>())) { context.log("Found " + name + " in " + cmd); return Either.success(cmd); } } return Either.fail("File not found: " + name); }