/******************************************************************************* * Copyright (c) 2014 Bruno Medeiros and other Contributors. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Bruno Medeiros - initial API and implementation *******************************************************************************/ package melnorme.lang.utils; import static melnorme.utilbox.core.Assert.AssertNamespace.assertTrue; import java.io.IOException; import java.nio.file.Path; import melnorme.lang.tooling.ToolingMessages; import melnorme.utilbox.collections.ArrayList2; import melnorme.utilbox.collections.Indexable; import melnorme.utilbox.core.CommonException; import melnorme.utilbox.misc.Location; import melnorme.utilbox.process.ProcessHelperMessages; public class ProcessUtils { public static ProcessBuilder createProcessBuilder(Indexable<String> commandLine, Location workingDir) { assertTrue(commandLine.size() > 0); ProcessBuilder pb = new ProcessBuilder(commandLine.toArrayList()); if(workingDir != null) { pb.directory(workingDir.toFile()); } return pb; } public static ProcessBuilder createProcessBuilder(Path cmdExePath, Location workingDir, String... arguments) { ArrayList2<String> commandLine = createCommandLine(cmdExePath, arguments); return createProcessBuilder(commandLine, workingDir); } public static ArrayList2<String> createCommandLine(Path cmdExePath, String... arguments) { ArrayList2<String> commandLine = new ArrayList2<>(); commandLine.add(cmdExePath.toString()); commandLine.addElements(arguments); return commandLine; } public static ProcessBuilder createProcessBuilder(Path cmdExePath, Location workingDir, boolean addCmdDirToPath, String... arguments) { ProcessBuilder pb = createProcessBuilder(cmdExePath, workingDir, arguments); if(addCmdDirToPath) { EnvUtils.addCmdDirToPathEnv(cmdExePath, pb); } return pb; } /* ----------------- ----------------- */ public static Process startProcess(ProcessBuilder pb) throws CommonException { try { return pb.start(); } catch (IOException ioe) { String msg = ioe.getMessage(); if(msg == null) { msg = ProcessHelperMessages.ExternalProcess_CouldNotStart; } throw new CommonException(msg, ioe); } } /* ----------------- ----------------- */ public static void validateNonZeroExitValue(int exitValue) throws CommonException { validateNonZeroExitValue("Process", exitValue); } public static void validateNonZeroExitValue(String processName, int exitValue) throws CommonException { if(exitValue != 0) { throw new CommonException(ToolingMessages.PROCESS_CompletedWithNonZeroValue(processName, exitValue)); } } }