import {JavaVersionParser} from './java-version-parser'; const exec = typeof window !== 'undefined' ? window.require('child_process').exec : require('child_process').exec; const remote = typeof window !== 'undefined' ? window.require('electron').remote : require('electron').remote; /** * @author Thomas Kleinke */ export module JavaToolExecutor { const REQUIRED_JAVA_VERSION: number = 8; export function executeJavaTool(jarName: string, jarArguments: string): Promise { return new Promise((resolve, reject) => { exec(getCommand(jarName, jarArguments), (error: string, stdout: string, stderr: string) => { if (error) { console.error(error); reject('Jar execution failed'); } else if (stderr !== '') { reject(stderr); } else { resolve(); } }); }); } export function getParameterFromErrorMessage(error: string): string { const separatorPosition: number = error.indexOf(' '); if (separatorPosition === -1 || separatorPosition === error.length - 1) { return ''; } else { return error.substring(separatorPosition + 1); } } export async function isJavaInstalled(): Promise { return await getJavaVersion() >= REQUIRED_JAVA_VERSION; } function getJavaVersion(): Promise { return new Promise(resolve => { exec('java -version', (error: string, stdout: string, stderr: string) => { resolve(JavaVersionParser.parse(stderr)); }); }); } function getCommand(jarName: string, jarArguments: string): string { return 'java -Djava.awt.headless=true -jar ' + getJarPath(jarName) + ' ' + jarArguments; } function getJarPath(jarName: string): string { return remote.getGlobal('toolsPath') + '/' + jarName; } }