}
LoggerStreamConsumer loggerConsumer = new LoggerStreamConsumer( logger, logLevel );
AttributeParser.NumericUserIDAttributeParser numericIdParser = null;
FutureTask<Integer> integerFutureTask = null;
Commandline numericCli = null;
if ( includeNumericUserId )
{
numericIdParser = new AttributeParser.NumericUserIDAttributeParser( loggerConsumer, logger );
String lsOptions1 = "-1nla" + ( recursive ? "R" : "d" );
try
{
numericCli = setupCommandLine( dir, lsOptions1, logger );
CommandLineCallable commandLineCallable =
CommandLineUtils.executeCommandLineAsCallable( numericCli, null, numericIdParser, loggerConsumer,
0 );
integerFutureTask = new FutureTask<Integer>( commandLineCallable );
new Thread( integerFutureTask ).start();
}
catch ( CommandLineException e )
{
IOException error = new IOException( "Failed to quote directory: '" + dir + "'" );
error.initCause( e );
throw error;
}
}
AttributeParser.SymbolicUserIDAttributeParser userId =
getNameBasedParser( dir, logger, recursive, loggerConsumer );
if ( includeNumericUserId )
{
final Integer result;
try
{
result = integerFutureTask.get();
}
catch ( InterruptedException e )
{
throw new RuntimeException( e );
}
catch ( ExecutionException e )
{
throw new RuntimeException( e );
}
if ( result != 0 )
{
throw new IOException(
"Failed to retrieve numeric file attributes using: '" + numericCli.toString() + "'" );
}
}
return userId.merge( numericIdParser );
}