File outputFile = new File( options.getOutput() );
output = new FileCommandOutput( outputFile );
}
try
{
CommandInput input;
if ( options.getInput().equals( CliMainOptions.STDIN ) )
{
if ( options.isNonInteractive() )
{
input = new InputStreamCommandInput( System.in );
}
else
{
ConsoleReader consoleReader = new ConsoleReader( System.in, System.err );
final FileHistory history = new FileHistory(
new File(System.getProperty("user.home"), ".jmxterm_history"));
consoleReader.setHistory(history);
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable()
{
@Override
public void run()
{
try
{
history.flush();
}
catch (IOException e)
{
System.err.println("Failed to flush command history! " + e);
}
}
}));
input = new JlineCommandInput( consoleReader, COMMAND_PROMPT );
}
}
else
{
File inputFile = new File( options.getInput() );
if ( !inputFile.isFile() )
{
throw new FileNotFoundException( "File " + inputFile + " is not a valid file" );
}
input = new FileCommandInput( new File( options.getInput() ) );
}
try
{
CommandCenter commandCenter = new CommandCenter( output, input );
if ( input instanceof JlineCommandInput )
{
( (JlineCommandInput) input ).getConsole().addCompleter(new ConsoleCompletor(commandCenter));
}
if ( options.getUrl() != null )
{
Map<String, Object> env;
if ( options.getUser() != null )
{
env = new HashMap<String, Object>( 1 );
String password = options.getPassword();
if ( password == null )
{
password = input.readMaskedString( "Authentication password: " );
}
String[] credentials = { options.getUser(), password };
env.put( JMXConnector.CREDENTIALS, credentials );
}
else
{
env = null;
}
commandCenter.connect( SyntaxUtils.getUrl( options.getUrl(), commandCenter.getProcessManager() ),
env );
}
if ( verboseLevel != null )
{
commandCenter.setVerboseLevel( verboseLevel );
}
if ( verboseLevel != VerboseLevel.SILENT )
{
output.printMessage( "Welcome to JMX terminal. Type \"help\" for available commands." );
}
String line;
int exitCode = 0;
int lineNumber = 0;
while ( ( line = input.readLine() ) != null )
{
lineNumber++;
if ( !commandCenter.execute( line ) && options.isExitOnFailure() )
{
exitCode = -lineNumber;
break;
}
if ( commandCenter.isClosed() )
{
break;
}
}
commandCenter.close();
return exitCode;
}
finally
{
input.close();
}
}
finally
{
output.close();