final void parse()

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 );
    }