1 /* 2 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 #ifndef EXECUTOR_H 27 #define EXECUTOR_H 28 29 #include "tstrings.h" 30 #include "UniqueHandle.h" 31 32 33 class Executor { 34 public: 35 explicit Executor(const std::wstring& appPath=std::wstring()) { 36 app(appPath).visible(false); 37 } 38 39 /** 40 * Returns command line configured with arg() calls so far. 41 */ 42 std::wstring args() const; 43 44 /** 45 * Set path to application to execute. 46 */ 47 Executor& app(const std::wstring& v) { 48 appPath = v; 49 return *this; 50 } 51 52 /** 53 * Adds another command line argument. 54 */ 55 Executor& arg(const std::wstring& v) { 56 argsArray.push_back(v); 57 return *this; 58 } 59 60 /** 61 * Controls if application window should be visible. 62 */ 63 Executor& visible(bool v) { 64 theVisible = v; 65 return *this; 66 } 67 68 /** 69 * Starts application process and blocks waiting when the started 70 * process terminates. 71 * Returns process exit code. 72 * Throws exception if process start failed. 73 */ 74 int execAndWaitForExit() const; 75 76 private: 77 UniqueHandle startProcess() const; 78 79 bool theVisible; 80 tstring_array argsArray; 81 std::wstring appPath; 82 }; 83 84 #endif // #ifndef EXECUTOR_H