in src/main/java/org/apache/directory/fortress/core/cli/CmdLineParser.java [604:694]
final void parse( String[] argv, Locale locale ) throws IllegalOptionValueException, UnknownOptionException
{
// It would be best if this method only threw OptionException, but for
// backwards compatibility with old user code we throw the two
// exceptions above instead.
Vector otherArgs = new Vector();
int position = 0;
this.values = new Hashtable( 10 );
while ( position < argv.length )
{
String curArg = argv[position];
if ( curArg.startsWith( "-" ) )
{
if ( curArg.equals( "--" ) )
{ // end of options
position += 1;
break;
}
String valueArg = null;
if ( curArg.startsWith( "--" ) )
{ // handle --arg=value
int equalsPos = curArg.indexOf( '=' );
if ( equalsPos != -1 )
{
valueArg = curArg.substring( equalsPos + 1 );
curArg = curArg.substring( 0, equalsPos );
}
}
else if ( curArg.length() > 2 )
{ // handle -abcd
for ( int i = 1; i < curArg.length(); i++ )
{
Option opt = ( Option ) this.options.get( "-" + curArg.charAt( i ) );
if ( opt == null )
{
throw new UnknownSuboptionException( curArg, curArg.charAt( i ) );
}
if ( opt.wantsValue() )
{
throw new NotFlagException( curArg, curArg.charAt( i ) );
}
addValue( opt, opt.getValue( null, locale ) );
}
position++;
continue;
}
Option opt = ( Option ) this.options.get( curArg );
if ( opt == null )
{
throw new UnknownOptionException( curArg );
}
Object value;
if ( opt.wantsValue() )
{
if ( valueArg == null )
{
position += 1;
if ( position < argv.length )
{
valueArg = argv[position];
}
}
value = opt.getValue( valueArg, locale );
}
else
{
value = opt.getValue( null, locale );
}
addValue( opt, value );
position += 1;
}
else
{
otherArgs.addElement( curArg );
position += 1;
}
}
for (; position < argv.length; ++position )
{
otherArgs.addElement( argv[position] );
}
this.remainingArgs = new String[otherArgs.size()];
otherArgs.copyInto( remainingArgs );
}