/* * Copyright (c) 2002-2017 "Neo Technology," * Network Engine for Objects in Lund AB [http://neotechnology.com] * * This file is part of Neo4j. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.neo4j.driver.v1.util.cc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.List; import org.neo4j.driver.v1.util.ProcessEnvConfigurator; import static java.lang.System.lineSeparator; import static java.util.Arrays.asList; public class CommandLineUtil { public static boolean boltKitAvailable() { try { executeCommand( "neoctrl-cluster", "--help" ); return true; } catch ( CommandLineException e ) { return false; } } public static String executeCommand( List<String> commands ) { try { ProcessBuilder processBuilder = new ProcessBuilder().command( commands ); ProcessEnvConfigurator.configure( processBuilder ); return executeAndGetStdOut( processBuilder ); } catch ( IOException | CommandLineException e ) { throw new CommandLineException( "Error running command " + commands, e ); } catch ( InterruptedException e ) { Thread.currentThread().interrupt(); throw new CommandLineException( "Interrupted while waiting for command " + commands, e ); } } public static String executeCommand( String... command ) { return executeCommand( asList( command ) ); } private static String executeAndGetStdOut( ProcessBuilder processBuilder ) throws IOException, InterruptedException { Process process = processBuilder.start(); int exitCode = process.waitFor(); String stdOut = asString( process.getInputStream() ); String stdErr = asString( process.getErrorStream() ); if ( exitCode != 0 ) { throw new CommandLineException( "Non-zero exit code\nSTDOUT:\n" + stdOut + "\nSTDERR:\n" + stdErr ); } return stdOut; } private static String asString( InputStream input ) { StringBuilder result = new StringBuilder(); try ( BufferedReader reader = new BufferedReader( new InputStreamReader( input ) ) ) { String line; while ( (line = reader.readLine()) != null ) { result.append( line ).append( lineSeparator() ); } } catch ( IOException e ) { throw new CommandLineException( "Unable to read from stream", e ); } return result.toString(); } }