You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by bu...@apache.org on 2002/03/19 16:42:02 UTC

cvs commit: xml-axis/java/test/utils TestSrcContent.java

butek       02/03/19 07:42:02

  Modified:    java     axis.properties build.xml
               java/docs developers-guide.html user-guide.html
               java/samples/addr readme
               java/src/org/apache/axis/wsdl Java2WSDL.java WSDL2Java.java
               java/src/org/apache/axis/wsdl/toJava Emitter.java
               java/test/utils TestSrcContent.java
  Added:       java/src/org/apache/axis/utils CLArgsParser.java
                        CLOption.java CLOptionDescriptor.java CLUtil.java
                        ParserControl.java Token.java
  Removed:     java/lib clutil.LICENSE clutil.jar
  Log:
  I removed clutil.jar and placed the 6 classes from it that we use into
  org.apache.axis.utils.  One less jar to worry about!
  
  Revision  Changes    Path
  1.5       +0 -1      xml-axis/java/axis.properties
  
  Index: axis.properties
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/axis.properties,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- axis.properties	15 Mar 2002 10:19:35 -0000	1.4
  +++ axis.properties	19 Mar 2002 15:42:01 -0000	1.5
  @@ -17,7 +17,6 @@
   wsdl4j.jar=lib/wsdl4j.jar
   commons-logging.jar=lib/commons-logging.jar
   log4j-core.jar=lib/log4j-core.jar
  -clutil.jar=lib/clutil.jar
   tt-bytecode.jar=lib/tt-bytecode.jar
   
   junit.jar=lib/junit.jar
  
  
  
  1.126     +0 -8      xml-axis/java/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/build.xml,v
  retrieving revision 1.125
  retrieving revision 1.126
  diff -u -r1.125 -r1.126
  --- build.xml	15 Mar 2002 17:35:50 -0000	1.125
  +++ build.xml	19 Mar 2002 15:42:01 -0000	1.126
  @@ -81,7 +81,6 @@
     <property name="wsdl4j.jar" value="lib/wsdl4j.jar"/>
     <property name="commons-logging.jar" value="lib/commons-logging.jar"/>
     <property name="log4j-core.jar" value="lib/log4j-core.jar"/>
  -  <property name="clutil.jar" value="lib/clutil.jar"/>
     <property name="tt-bytecode.jar" value="lib/tt-bytecode.jar"/>
   
     <property name="regexp.jar" value="test/lib/jakarta-oro-2.0.5.jar"/>
  @@ -109,7 +108,6 @@
     <!-- Determine what dependencies are present                             -->
     <!-- =================================================================== -->
     <path id="classpath">
  -    <pathelement location="${clutil.jar}"/>
       <pathelement location="${xerces.jar}"/>
       <pathelement location="${regexp.jar}"/>
       <pathelement location="${junit.jar}"/>
  @@ -149,10 +147,6 @@
         classname="org.apache.log4j.Category"
         classpathref="classpath"/>
   
  -    <available property="clutil.present"
  -      classname="org.apache.avalon.excalibur.cli.CLUtil"
  -      classpathref="classpath"/>
  -      
       <available property="tt-bytecode.present"
         classname="com.techtrader.modules.tools.bytecode.BCClass"
         classpathref="classpath"/>
  @@ -194,7 +188,6 @@
       <echo message="wsdl4j.present=${wsdl4j.present}" />
       <echo message="commons-logging.present=${commons-logging.present}" />
       <echo message="log4j.present=${log4j.present}" />
  -    <echo message="clutil.present=${clutil.present}" />
       <echo message="tt-bytecode.present=${tt-bytecode.present}" />
       <echo message=""/>
       <echo message="--- Optional Libraries ---" />
  @@ -275,7 +268,6 @@
       <copy file="${wsdl4j.jar}" toDir="${build.lib}"/>
       <copy file="${commons-logging.jar}" toDir="${build.lib}"/>
       <copy file="${log4j-core.jar}" toDir="${build.lib}"/>
  -    <copy file="${clutil.jar}" toDir="${build.lib}"/>
       <copy file="${tt-bytecode.jar}" toDir="${build.lib}"/>
       <antcall target="post-compile"/>
     </target>
  
  
  
  1.13      +0 -1      xml-axis/java/docs/developers-guide.html
  
  Index: developers-guide.html
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/docs/developers-guide.html,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- developers-guide.html	12 Mar 2002 21:03:16 -0000	1.12
  +++ developers-guide.html	19 Mar 2002 15:42:01 -0000	1.13
  @@ -92,7 +92,6 @@
   <br><tt><font color="#009900">G:\\xml-axis\\java\\build\\lib\\wsdl4j.jar</font></tt>
   <br><tt><font color="#009900">G:\\xml-axis\\java\\build\\lib\\axis.jar</font></tt>
   <br><tt><font color="#009900">G:\\xml-axis\\java\\build\\lib\\log4j-core.jar</font></tt>
  -<br><tt><font color="#009900">G:\\xml-axis\\java\\build\\lib\\clutil.jar</font></tt>
   <br><tt><font color="#009900">G:\\xml-axis\\java\\build\\classes</font></tt></blockquote>
   </blockquote>
   If you access the internet via a proxy server, you'll need to set an environment
  
  
  
  1.49      +0 -1      xml-axis/java/docs/user-guide.html
  
  Index: user-guide.html
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/docs/user-guide.html,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- user-guide.html	18 Mar 2002 16:03:44 -0000	1.48
  +++ user-guide.html	19 Mar 2002 15:42:01 -0000	1.49
  @@ -172,7 +172,6 @@
   <ul>
   <li>xml-axis-beta1/lib/axis.jar</li>
   <li>xml-axis-beta1/lib/jaxrpc.jar</li>
  -<li>xml-axis-beta1/lib/clutil.jar</li>
   <li>xml-axis-beta1/lib/commons-logging.jar</li>
   <li>xml-axis-beta1/lib/tt-bytecode.jar</li>
   <li>xml-axis-beta1/lib/wsdl4j.jar</li>
  
  
  
  1.8       +1 -1      xml-axis/java/samples/addr/readme
  
  Index: readme
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/samples/addr/readme,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- readme	11 Mar 2002 22:07:18 -0000	1.7
  +++ readme	19 Mar 2002 15:42:01 -0000	1.8
  @@ -2,7 +2,7 @@
   the AddressBook.wsdl file.
   
   First, set up the CLASSPATH.  It must contain an XML parser (ie., xerces.jar);
  -all the jars in the lib directory:  axis.jar, clutil.jar, commons-logging.jar,
  +all the jars in the lib directory:  axis.jar, commons-logging.jar,
   log4j-core.jar, and wsdl4j.jar; and the directory containing the samples
   subdirectory.
   
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/utils/CLArgsParser.java
  
  Index: CLArgsParser.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  // This file is pulled from package org.apache.avalon.excalibur.cli Excalibur
  // version 4.1 (Jan 30, 2002).  Only the package name has been changed.
  package org.apache.axis.utils;
  
  import java.text.ParseException;
  import java.util.Hashtable;
  import java.util.Vector;
  
  /**
   * Parser for command line arguments.
   *
   * This parses command lines according to the standard (?) of
   * GNU utilities.
   *
   * Note: This is still used in 1.1 libraries so do not add 1.2+ dependencies.
   *
   * @author <a href="mailto:peter@apache.org">Peter Donald</a>
   * @since 4.0
   */
  public final class CLArgsParser
  {
      private static final int                 STATE_NORMAL           = 0;
      private static final int                 STATE_REQUIRE_2ARGS    = 1;
      private static final int                 STATE_REQUIRE_ARG      = 2;
      private static final int                 STATE_OPTIONAL_ARG     = 3;
      private static final int                 STATE_NO_OPTIONS       = 4;
      private static final int                 STATE_OPTION_MODE      = 5;
  
      private static final int                 TOKEN_SEPARATOR        = 0;
      private static final int                 TOKEN_STRING           = 1;
  
  
      private static final char[]              ARG2_SEPARATORS        =
          new char[] { (char)0, '=', '-' };
  
      private static final char[]              ARG_SEPARATORS         =
          new char[] { (char)0, '=' };
  
      private static final char[]              NULL_SEPARATORS        =
          new char[] { (char)0 };
  
      private final CLOptionDescriptor[]       m_optionDescriptors;
      private final Vector                     m_options;
      private Hashtable m_optionIndex;
      private final ParserControl              m_control;
  
      private String                           m_errorMessage;
      private String[]                         m_unparsedArgs         = new String[] {};
  
      //variables used while parsing options.
      private char                           ch;
      private String[]                       args;
      private boolean                        isLong;
      private int                            argIndex;
      private int                            stringIndex;
      private int                            stringLength;
  
      //cached character == Integer.MAX_VALUE when invalid
      private static final int               INVALID         = Integer.MAX_VALUE;
      private int                            m_lastChar      = INVALID;
  
      private int                            m_lastOptionId;
      private CLOption                       m_option;
      private int                            m_state         = STATE_NORMAL;
  
      public final String[] getUnparsedArgs()
      {
          return m_unparsedArgs;
      }
  
      /**
       * Retrieve a list of options that were parsed from command list.
       *
       * @return the list of options
       */
      public final Vector getArguments()
      {
          //System.out.println( "Arguments: " + m_options );
          return m_options;
      }
  
      /**
       * Retrieve the {@link CLOption} with specified id, or
       * <code>null</code> if no command line option is found.
       *
       * @param id the command line option id
       * @return the {@link CLOption) with the specified id, or
       *    <code>null</code> if no CLOption is found.
       * @see CLOption
       */
      public final CLOption getArgumentById( final int id )
      {
          return (CLOption)m_optionIndex.get( new Integer( id ) );
      }
  
      /**
       * Retrieve the {@link CLOption} with specified name, or
       * <code>null</code> if no command line option is found.
       *
       * @param name the command line option name
       * @return the {@link CLOption) with the specified name, or
       *    <code>null</code> if no CLOption is found.
       * @see CLOption
       */
      public final CLOption getArgumentByName( final String name)
      {
          return (CLOption)m_optionIndex.get( name );
      }
  
      /**
       * Get Descriptor for option id.
       *
       * @param id the id
       * @return the descriptor
       */
      private final CLOptionDescriptor getDescriptorFor( final int id )
      {
          for( int i = 0; i < m_optionDescriptors.length; i++ )
          {
              if( m_optionDescriptors[i].getId() == id )
              {
                  return m_optionDescriptors[i];
              }
          }
  
          return null;
      }
  
      /**
       * Retrieve a descriptor by name.
       *
       * @param name the name
       * @return the descriptor
       */
      private final CLOptionDescriptor getDescriptorFor( final String name )
      {
          for( int i = 0; i < m_optionDescriptors.length; i++ )
          {
              if( m_optionDescriptors[i].getName().equals( name ) )
              {
                  return m_optionDescriptors[i];
              }
          }
  
          return null;
      }
  
      /**
       * Retrieve an error message that occured during parsing if one existed.
       *
       * @return the error string
       */
      public final String getErrorString()
      {
          //System.out.println( "ErrorString: " + m_errorMessage );
          return m_errorMessage;
      }
  
      /**
       * Require state to be placed in for option.
       *
       * @param descriptor the Option Descriptor
       * @return the state
       */
      private final int getStateFor( final CLOptionDescriptor descriptor )
      {
          int flags = descriptor.getFlags();
          if( ( flags & CLOptionDescriptor.ARGUMENTS_REQUIRED_2 ) ==
              CLOptionDescriptor.ARGUMENTS_REQUIRED_2 )
          {
              return STATE_REQUIRE_2ARGS;
          }
          else if( ( flags & CLOptionDescriptor.ARGUMENT_REQUIRED ) ==
                   CLOptionDescriptor.ARGUMENT_REQUIRED )
          {
              return STATE_REQUIRE_ARG;
          }
          else if( ( flags & CLOptionDescriptor.ARGUMENT_OPTIONAL ) ==
                   CLOptionDescriptor.ARGUMENT_OPTIONAL )
          {
              return STATE_OPTIONAL_ARG;
          }
          else
          {
              return STATE_NORMAL;
          }
      }
  
      /**
       * Create a parser that can deal with options and parses certain args.
       *
       * @param args[] the args, typically that passed to the
       * <code>public static void main(String[] args)</code> method.
       * @param optionDescriptors[] the option descriptors
       */
      public CLArgsParser( final String[] args,
                           final CLOptionDescriptor[] optionDescriptors,
                           final ParserControl control )
      {
          m_optionDescriptors = optionDescriptors;
          m_control = control;
          m_options = new Vector();
          this.args = args;
  
          try
          {
              parse();
              checkIncompatibilities( m_options );
              buildOptionIndex();
          }
          catch( final ParseException pe )
          {
              m_errorMessage = pe.getMessage();
          }
  
          //System.out.println( "Built : " + m_options );
          //System.out.println( "From : " + Arrays.asList( args ) );
      }
  
      /**
       * Check for duplicates of an option.
       * It is an error to have duplicates unless appropriate flags is set in descriptor.
       *
       * @param arguments the arguments
       */
      private final void checkIncompatibilities( final Vector arguments )
          throws ParseException
      {
          final int size = arguments.size();
  
          for( int i = 0; i < size; i++ )
          {
              final CLOption option = (CLOption)arguments.elementAt( i );
              final int id = option.getId();
              final CLOptionDescriptor descriptor = getDescriptorFor( id );
  
              //this occurs when id == 0 and user has not supplied a descriptor
              //for arguments
              if( null == descriptor )
              {
                  continue;
              }
  
              final int[] incompatible = descriptor.getIncompatble();
  
              checkIncompatible( arguments, incompatible, i );
          }
      }
  
      private final void checkIncompatible( final Vector arguments,
                                      final int[] incompatible,
                                      final int original )
          throws ParseException
      {
          final int size = arguments.size();
  
          for( int i = 0; i < size; i++ )
          {
              if( original == i )
              {
                  continue;
              }
  
              final CLOption option = (CLOption)arguments.elementAt( i );
              final int id = option.getId();
              final CLOptionDescriptor descriptor = getDescriptorFor( id );
  
              for( int j = 0; j < incompatible.length; j++ )
              {
                  if( id == incompatible[ j ] )
                  {
                      final CLOption originalOption = (CLOption)arguments.elementAt( original );
                      final int originalId = originalOption.getId();
  
                      String message = null;
  
                      if( id == originalId )
                      {
                          message =
                              "Duplicate options for " + describeDualOption( originalId ) +
                              " found.";
                      }
                      else
                      {
                          message = "Incompatible options -" +
                              describeDualOption( id ) + " and " +
                              describeDualOption( originalId ) + " found.";
                      }
                      throw new ParseException( message, 0 );
                  }
              }
          }
      }
  
      private final String describeDualOption( final int id )
      {
          final CLOptionDescriptor descriptor = getDescriptorFor( id );
          if( null == descriptor )
          {
              return "<parameter>";
          }
          else
          {
              final StringBuffer sb = new StringBuffer();
              boolean hasCharOption = false;
  
              if( Character.isLetter( (char)id ) )
              {
                  sb.append( '-' );
                  sb.append( (char)id );
                  hasCharOption = true;
              }
  
              final String longOption = descriptor.getName();
              if( null != longOption )
              {
                  if( hasCharOption )
                  {
                      sb.append( '/' );
                  }
                  sb.append( "--" );
                  sb.append( longOption );
              }
  
              return sb.toString();
          }
      }
  
      /**
       * Create a parser that deals with options and parses certain args.
       *
       * @param args[] the args
       * @param optionDescriptors[] the option descriptors
       */
      public CLArgsParser( final String[] args,
                           final CLOptionDescriptor[] optionDescriptors )
      {
          this( args, optionDescriptors, null );
      }
  
      /**
       * Create a string array that is subset of input array.
       * The sub-array should start at array entry indicated by index. That array element
       * should only include characters from charIndex onwards.
       *
       * @param array[] the original array
       * @param index the cut-point in array
       * @param charIndex the cut-point in element of array
       * @return the result array
       */
      private final String[] subArray( final String[] array,
                                 final int index,
                                 final int charIndex )
      {
          final int remaining = array.length - index;
          final String[] result = new String[ remaining ];
  
          if( remaining > 1 )
          {
              System.arraycopy( array, index + 1, result, 1, remaining - 1 );
          }
  
          result[0] = array[ index ].substring( charIndex - 1 );
  
          return result;
      }
  
      /**
       * Actually parse arguments
       *
       * @param args[] arguments
       */
      private final void parse()
          throws ParseException
      {
          if( 0 == args.length )
          {
              return;
          }
  
          stringLength = args[ argIndex ].length();
  
          //ch = peekAtChar();
  
          while( true )
          {
              ch = peekAtChar();
  
              //System.out.println( "Pre State=" + m_state );
              //System.out.println( "Pre Char=" + (char)ch + "/" + (int)ch );
  
              if( argIndex >= args.length )
              {
                  break;
              }
  
              if( null != m_control && m_control.isFinished( m_lastOptionId ) )
              {
                  //this may need mangling due to peeks
                  m_unparsedArgs = subArray( args, argIndex, stringIndex );
                  return;
              }
  
              //System.out.println( "State=" + m_state );
              //System.out.println( "Char=" + (char)ch + "/" + (int)ch );
  
              if( STATE_OPTION_MODE == m_state )
              {
                  //if get to an arg barrier then return to normal mode
                  //else continue accumulating options
                  if( 0 == ch )
                  {
                      getChar(); //strip the null
                      m_state = STATE_NORMAL;
                  }
                  else
                  {
                      parseShortOption();
                  }
              }
              else if( STATE_NORMAL == m_state )
              {
                  parseNormal();
              }
              else if( STATE_NO_OPTIONS == m_state )
              {
                  //should never get to here when stringIndex != 0
                  addOption( new CLOption( args[ argIndex++ ] ) );
              }
              else if( STATE_OPTIONAL_ARG == m_state && '-' == ch )
              {
                  m_state = STATE_NORMAL;
                  addOption( m_option );
              }
              else
              {
                  parseArguments();
              }
          }
  
          if( m_option != null )
          {
              if( STATE_OPTIONAL_ARG == m_state )
              {
                  m_options.addElement( m_option );
              }
              else if( STATE_REQUIRE_ARG == m_state )
              {
                  final CLOptionDescriptor descriptor = getDescriptorFor( m_option.getId() );
                  final String message =
                      "Missing argument to option " + getOptionDescription( descriptor );
                  throw new ParseException( message, 0 );
              }
              else if( STATE_REQUIRE_2ARGS == m_state )
              {
                  if( 1 == m_option.getArgumentCount() )
                  {
                      m_option.addArgument( "" );
                      m_options.addElement( m_option );
                  }
                  else
                  {
                      final CLOptionDescriptor descriptor = getDescriptorFor( m_option.getId() );
                      final String message =
                          "Missing argument to option " + getOptionDescription( descriptor );
                      throw new ParseException( message, 0 );
                  }
              }
              else
              {
                  throw new ParseException( "IllegalState " + m_state + ": " + m_option, 0 );
              }
          }
      }
  
      private final String getOptionDescription( final CLOptionDescriptor descriptor )
      {
          if( isLong )
          {
              return "--" + descriptor.getName();
          }
          else
          {
              return "-" + (char)descriptor.getId();
          }
      }
  
      private final char peekAtChar()
      {
          if( INVALID == m_lastChar )
          {
              m_lastChar = readChar();
          }
          return (char)m_lastChar;
      }
  
      private final char getChar()
      {
          if( INVALID != m_lastChar )
          {
              final char result = (char)m_lastChar;
              m_lastChar = INVALID;
              return result;
          }
          else
          {
              return readChar();
          }
      }
  
      private final char readChar()
      {
          if( stringIndex >= stringLength )
          {
              argIndex++;
              stringIndex = 0;
  
              if( argIndex < args.length )
              {
                  stringLength = args[ argIndex ].length();
              }
              else
              {
                  stringLength = 0;
              }
  
              return 0;
          }
  
          if( argIndex >= args.length )
              return 0;
  
          return args[ argIndex ].charAt( stringIndex++ );
      }
  
      private final Token nextToken( final char[] separators )
      {
          ch = getChar();
  
          if( isSeparator( ch, separators ) )
          {
              ch = getChar();
              return new Token( TOKEN_SEPARATOR, null );
          }
  
          final StringBuffer sb = new StringBuffer();
  
          do
          {
              sb.append( ch );
              ch = getChar();
          }
          while( !isSeparator( ch, separators ) );
  
          return new Token( TOKEN_STRING, sb.toString() );
      }
  
      private final boolean isSeparator( final char ch, final char[] separators )
      {
          for( int i = 0; i < separators.length; i++ )
          {
              if( ch == separators[ i ] )
              {
                  return true;
              }
          }
  
          return false;
      }
  
      private final void addOption( final CLOption option )
      {
          m_options.addElement( option );
          m_lastOptionId = option.getId();
          m_option = null;
      }
  
      private final void parseOption( final CLOptionDescriptor descriptor,
                                final String optionString )
          throws ParseException
      {
          if( null == descriptor )
          {
              throw new ParseException( "Unknown option " + optionString, 0 );
          }
  
          m_state = getStateFor( descriptor );
          m_option = new CLOption( descriptor.getId() );
  
          if( STATE_NORMAL == m_state )
          {
              addOption( m_option );
          }
      }
  
      private final void parseShortOption()
          throws ParseException
      {
          ch = getChar();
          final CLOptionDescriptor descriptor = getDescriptorFor( ch );
          isLong = false;
          parseOption( descriptor, "-" + ch );
  
          if( STATE_NORMAL == m_state )
          {
              m_state = STATE_OPTION_MODE;
          }
      }
  
      private final void parseArguments()
          throws ParseException
      {
          if( STATE_REQUIRE_ARG == m_state )
          {
              if( '=' == ch || 0 == ch )
              {
                  getChar();
              }
  
              final Token token = nextToken( NULL_SEPARATORS );
              m_option.addArgument( token.getValue() );
  
              addOption( m_option );
              m_state = STATE_NORMAL;
          }
          else if( STATE_OPTIONAL_ARG == m_state )
          {
              if( '-' == ch || 0 == ch )
              {
                  getChar(); //consume stray character
                  addOption( m_option );
                  m_state = STATE_NORMAL;
                  return;
              }
  
              if( '=' == ch )
              {
                  getChar();
              }
  
              final Token token = nextToken( NULL_SEPARATORS );
              m_option.addArgument( token.getValue() );
  
              addOption( m_option );
              m_state = STATE_NORMAL;
          }
          else if( STATE_REQUIRE_2ARGS == m_state )
          {
              if( 0 == m_option.getArgumentCount() )
              {
                  final Token token = nextToken( ARG_SEPARATORS );
  
                  if( TOKEN_SEPARATOR == token.getType() )
                  {
                      final CLOptionDescriptor descriptor = getDescriptorFor( m_option.getId() );
                      final String message =
                          "Unable to parse first argument for option " +
                          getOptionDescription( descriptor );
                      throw new ParseException( message, 0 );
                  }
                  else
                  {
                      m_option.addArgument( token.getValue() );
                  }
              }
              else //2nd argument
              {
                  final StringBuffer sb = new StringBuffer();
  
                  ch = getChar();
                  if( '-' == ch )
                  {
                      m_lastChar = ch;
                  }
  
                  while( !isSeparator( ch, ARG2_SEPARATORS ) )
                  {
                      sb.append( ch );
                      ch = getChar();
                  }
  
                  final String argument = sb.toString();
  
                  //System.out.println( "Arguement:" + argument );
  
                  m_option.addArgument( argument );
                  addOption( m_option );
                  m_option = null;
                  m_state = STATE_NORMAL;
              }
          }
      }
  
      /**
       * Parse Options from Normal mode.
       */
      private final void parseNormal()
          throws ParseException
      {
          if( '-' != ch )
          {
              //Parse the arguments that are not options
              final String argument = nextToken( NULL_SEPARATORS ).getValue();
              addOption( new CLOption( argument ) );
              m_state = STATE_NORMAL;
          }
          else
          {
              getChar(); // strip the -
  
              if( 0 == peekAtChar() )
              {
                  throw new ParseException( "Malformed option -", 0 );
              }
              else
              {
                  ch = peekAtChar();
  
                  //if it is a short option then parse it else ...
                  if( '-' != ch )
                  {
                      parseShortOption();
                  }
                  else
                  {
                      getChar(); // strip the -
                      //-- sequence .. it can either mean a change of state
                      //to STATE_NO_OPTIONS or else a long option
  
                      if( 0 == peekAtChar() )
                      {
                          getChar();
                          m_state = STATE_NO_OPTIONS;
                      }
                      else
                      {
                          //its a long option
                          final String optionName = nextToken( ARG_SEPARATORS ).getValue();
                          final CLOptionDescriptor descriptor = getDescriptorFor( optionName );
                          isLong = true;
                          parseOption( descriptor, "--" + optionName );
                      }
                  }
              }
          }
      }
  
      /**
       * Build the m_optionIndex lookup map for the parsed options.
       */
      private final void buildOptionIndex()
      {
          m_optionIndex = new Hashtable( m_options.size() * 2 );
  
          for( int i = 0; i < m_options.size(); i++ )
          {
              final CLOption option = (CLOption)m_options.get( i );
              final CLOptionDescriptor optionDescriptor =
                  getDescriptorFor( option.getId() );
  
              m_optionIndex.put( new Integer( option.getId() ), option );
  
              if( null != optionDescriptor )
              {
                  m_optionIndex.put( optionDescriptor.getName(), option );
              }
          }
      }
  }
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/utils/CLOption.java
  
  Index: CLOption.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  // This file is pulled from package org.apache.avalon.excalibur.cli Excalibur
  // version 4.1 (Jan 30, 2002).  Only the package name has been changed.
  package org.apache.axis.utils;
  
  import java.util.Arrays;
  
  /**
   * Basic class describing an instance of option.
   *
   * @author <a href="mailto:peter@apache.org">Peter Donald</a>
   * @since 4.0
   */
  public final class CLOption
  {
      /**
       * Value of {@link #getId} when the option is a text argument.
       */
      public static final int  TEXT_ARGUMENT = 0;
  
      private final int      m_id;
      private String[]       m_arguments;
  
      /**
       * Retrieve argument to option if it takes arguments.
       *
       * @return the (first) argument
       */
      public final String getArgument()
      {
          return getArgument( 0 );
      }
  
      /**
       * Retrieve indexed argument to option if it takes arguments.
       *
       * @param index The argument index, from 0 to
       * {@link #getArgumentCount()}-1.
       * @return the argument
       */
      public final String getArgument( final int index )
      {
          if( null == m_arguments || index < 0 || index >= m_arguments.length )
          {
              return null;
          }
          else
          {
              return m_arguments[ index ];
          }
      }
  
      /**
       * Retrieve id of option.
       *
       * The id is eqivalent to character code if it can be a single letter option.
       *
       * @return the id
       */
      public final int getId()
      {
          return m_id;
      }
  
      /**
       * Constructor taking an id (that must be a proper character code)
       *
       * @param id the new id
       */
      public CLOption( final int id )
      {
          m_id = id;
      }
  
      /**
       * Constructor taking argument for option.
       *
       * @param argument the argument
       */
      public CLOption( final String argument )
      {
          this( TEXT_ARGUMENT );
          addArgument( argument );
      }
  
      /**
       * Mutator of Argument property.
       *
       * @param argument the argument
       */
      public final void addArgument( final String argument )
      {
          if( null == m_arguments ) m_arguments = new String[] { argument };
          else
          {
              final String[] arguments = new String[ m_arguments.length + 1 ];
              System.arraycopy( m_arguments, 0, arguments, 0, m_arguments.length );
              arguments[ m_arguments.length ] = argument;
              m_arguments = arguments;
          }
      }
  
      /**
      * Get number of arguments.
      */
      public final int getArgumentCount()
      {
          if( null == m_arguments )
          {
              return 0;
          }
          else
          {
              return m_arguments.length;
          }
      }
  
      /**
       * Convert to String.
       *
       * @return the string value
       */
      public final String toString()
      {
          final StringBuffer sb = new StringBuffer();
          sb.append( "[Option " );
          sb.append( (char)m_id );
  
          if( null != m_arguments )
          {
              sb.append( ", " );
              sb.append( Arrays.asList( m_arguments ) );
          }
  
          sb.append( " ]" );
  
          return sb.toString();
      }
  }
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/utils/CLOptionDescriptor.java
  
  Index: CLOptionDescriptor.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  // This file is pulled from package org.apache.avalon.excalibur.cli Excalibur
  // version 4.1 (Jan 30, 2002).  Only the package name has been changed.
  package org.apache.axis.utils;
  
  /**
   * Basic class describing an type of option.
   * Typically, one creates a static array of <code>CLOptionDescriptor</code>s,
   * and passes it to {@link CLArgsParser#CLArgsParser(String[], CLOptionDescriptor[])}.
   *
   * @author <a href="mailto:peter@apache.org">Peter Donald</a>
   * @since 4.0
   */
  public final class CLOptionDescriptor
  {
      /** Flag to say that one argument is required */
      public static final int                  ARGUMENT_REQUIRED         = 1 << 1;
      /** Flag to say that the argument is optional */
      public static final int                  ARGUMENT_OPTIONAL         = 1 << 2;
      /** Flag to say this option does not take arguments */
      public static final int                  ARGUMENT_DISALLOWED       = 1 << 3;
      /** Flag to say this option requires 2 arguments */
      public static final int                  ARGUMENTS_REQUIRED_2      = 1 << 4;
      /** Flag to say this option may be repeated on the command line */
      public static final int                  DUPLICATES_ALLOWED        = 1 << 5;
  
      private final int                      m_id;
      private final int                      m_flags;
      private final String                   m_name;
      private final String                   m_description;
      private final int[]                    m_incompatible;
  
      /**
       * Constructor.
       *
       * @param name the name/long option
       * @param flags the flags
       * @param id the id/character option
       * @param description description of option usage
       */
      public CLOptionDescriptor( final String name,
                                 final int flags,
                                 final int id,
                                 final String description )
      {
          this( name, flags, id, description,
              ((flags & CLOptionDescriptor.DUPLICATES_ALLOWED) > 0)
                  ? new int[] {}
                  : new int[] { id } );
      }
  
      /**
       * Constructor.
       *
       * @param name the name/long option
       * @param flags the flags
       * @param id the id/character option
       * @param description description of option usage
       */
      public CLOptionDescriptor( final String name,
                                 final int flags,
                                 final int id,
                                 final String description,
                                 final int[] incompatable )
      {
          m_id = id;
          m_name = name;
          m_flags = flags;
          m_description = description;
          m_incompatible = incompatable;
      }
  
      /**
       * @deprecated Use the correctly spelled {@link #getIncompatible} instead.
       */
      protected final int[] getIncompatble()
      {
          return getIncompatible();
      }
  
      protected final int[] getIncompatible()
      {
          return m_incompatible;
      }
  
      /**
       * Retrieve textual description.
       *
       * @return the description
       */
      public final String getDescription()
      {
          return m_description;
      }
  
      /**
       * Retrieve flags about option.
       * Flags include details such as whether it allows parameters etc.
       *
       * @return the flags
       */
      public final int getFlags()
      {
          return m_flags;
      }
  
      /**
       * Retrieve the id for option.
       * The id is also the character if using single character options.
       *
       * @return the id
       */
      public final int getId()
      {
          return m_id;
      }
  
      /**
       * Retrieve name of option which is also text for long option.
       *
       * @return name/long option
       */
      public final String getName()
      {
          return m_name;
      }
  
      /**
       * Convert to String.
       *
       * @return the converted value to string.
       */
      public final String toString()
      {
          return
              new StringBuffer()
              .append("[OptionDescriptor ").append(m_name)
              .append(", ").append(m_id).append(", ").append(m_flags)
              .append(", ").append(m_description).append(" ]").toString();
      }
  }
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/utils/CLUtil.java
  
  Index: CLUtil.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  // This file is pulled from package org.apache.avalon.excalibur.cli Excalibur
  // version 4.1 (Jan 30, 2002).  Only the package name has been changed.
  package org.apache.axis.utils;
  
  /**
   * CLUtil offers basic utility operations for use both internal and external to package.
   *
   * @author <a href="mailto:peter@apache.org">Peter Donald</a>
   * @since 4.0
   */
  public final class CLUtil
  {
      private final static int        MAX_DESCRIPTION_COLUMN_LENGTH = 60;
  
      /**
       * Format options into StringBuffer and return. This is typically used to
       * print "Usage" text in response to a "--help" or invalid option.
       *
       * @param options[] the option descriptors
       * @return the formatted description/help for options
       */
      public final static StringBuffer describeOptions( final CLOptionDescriptor[] options )
      {
          final String lSep = System.getProperty( "line.separator" );
          final StringBuffer sb = new StringBuffer();
  
          for( int i = 0; i < options.length; i++ )
          {
              final char ch = (char) options[i].getId();
              final String name = options[i].getName();
              String description = options[i].getDescription();
              int flags = options[i].getFlags();
              boolean argumentRequired =
                      ( (flags & CLOptionDescriptor.ARGUMENT_REQUIRED) ==
                        CLOptionDescriptor.ARGUMENT_REQUIRED);
              boolean twoArgumentsRequired =
                      ( (flags & CLOptionDescriptor.ARGUMENTS_REQUIRED_2) ==
                        CLOptionDescriptor.ARGUMENTS_REQUIRED_2);
              boolean needComma = false;
              if (twoArgumentsRequired)
                  argumentRequired = true;
  
              sb.append('\t');
  
              if( Character.isLetter(ch) )
              {
                  sb.append( "-" );
                  sb.append( ch );
                  needComma = true;
              }
  
              if( null != name )
              {
                  if( needComma )
                  {
                      sb.append( ", " );
                  }
  
                  sb.append( "--" );
                  sb.append( name );
                  if (argumentRequired)
                  {
                      sb.append(" <argument>");
                  }
                  if (twoArgumentsRequired)
                  {
                      sb.append("=<value>");
                  }
                  sb.append( lSep );
              }
  
              if( null != description )
              {
                  while( description.length() > MAX_DESCRIPTION_COLUMN_LENGTH )
                  {
                      final String descriptionPart =
                          description.substring( 0, MAX_DESCRIPTION_COLUMN_LENGTH );
                      description =
                          description.substring( MAX_DESCRIPTION_COLUMN_LENGTH );
                      sb.append( "\t\t" );
                      sb.append( descriptionPart );
                      sb.append( lSep );
                  }
  
                  sb.append( "\t\t" );
                  sb.append( description );
                  sb.append( lSep );
              }
          }
          return sb;
      }
  
      /**
       * Private Constructor so that no instance can ever be created.
       *
       */
      private CLUtil()
      {
      }
  }
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/utils/ParserControl.java
  
  Index: ParserControl.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  // This file is pulled from package org.apache.avalon.excalibur.cli Excalibur
  // version 4.1 (Jan 30, 2002).  Only the package name has been changed.
  package org.apache.axis.utils;
  
  /**
   * ParserControl is used to control particular behaviour of the parser.
   *
   * @author <a href="mailto:peter@apache.org">Peter Donald</a>
   * @since 4.0
   */
  public interface ParserControl
  {
      boolean isFinished( int lastOptionCode );
  }
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/utils/Token.java
  
  Index: Token.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  // This file is pulled from package org.apache.avalon.excalibur.cli Excalibur
  // version 4.1 (Jan 30, 2002).  Only the package name has been changed.
  package org.apache.axis.utils;
  
  
  /**
   * Token handles tokenizing the CLI arguments
   *
   * @author <a href="mailto:peter@apache.org">Peter Donald</a>
   * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
   * @since 4.0
   */
  class Token
  {
      /** Type for a separator token */
      public static final int TOKEN_SEPARATOR = 0;
      /** Type for a text token */
      public static final int TOKEN_STRING = 1;
  
      private final int m_type;
      private final String m_value;
  
      /**
       * New Token object with a type and value
       */
      public Token( final int type, final String value )
      {
          m_type = type;
          m_value = value;
      }
  
      /**
       * Get the value of the token
       */
      public final String getValue()
      {
          return m_value;
      }
  
      /**
       * Get the type of the token
       */
      public final int getType()
      {
          return m_type;
      }
  
      /**
       * Convert to a string
       */
      public final String toString()
      {
          return new StringBuffer().append(m_type).append(":").append(m_value).toString();
      }
  }
  
  
  
  1.12      +5 -5      xml-axis/java/src/org/apache/axis/wsdl/Java2WSDL.java
  
  Index: Java2WSDL.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/Java2WSDL.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- Java2WSDL.java	18 Mar 2002 16:10:41 -0000	1.11
  +++ Java2WSDL.java	19 Mar 2002 15:42:02 -0000	1.12
  @@ -54,13 +54,13 @@
    */
   package org.apache.axis.wsdl;
   
  -import org.apache.avalon.excalibur.cli.CLArgsParser;
  -import org.apache.avalon.excalibur.cli.CLOption;
  -import org.apache.avalon.excalibur.cli.CLOptionDescriptor;
  -import org.apache.avalon.excalibur.cli.CLUtil;
  +import org.apache.axis.utils.CLArgsParser;
  +import org.apache.axis.utils.CLOption;
  +import org.apache.axis.utils.CLOptionDescriptor;
  +import org.apache.axis.utils.CLUtil;
  +import org.apache.axis.utils.JavaUtils;
   
   import org.apache.axis.wsdl.fromJava.Emitter;
  -import org.apache.axis.utils.JavaUtils;
   
   import org.apache.axis.encoding.DefaultTypeMappingImpl;
   import org.apache.axis.encoding.DefaultSOAP12TypeMappingImpl;
  
  
  
  1.15      +4 -5      xml-axis/java/src/org/apache/axis/wsdl/WSDL2Java.java
  
  Index: WSDL2Java.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/WSDL2Java.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- WSDL2Java.java	13 Mar 2002 20:07:06 -0000	1.14
  +++ WSDL2Java.java	19 Mar 2002 15:42:02 -0000	1.15
  @@ -54,11 +54,10 @@
    */
   package org.apache.axis.wsdl;
   
  -import org.apache.avalon.excalibur.cli.CLArgsParser;
  -import org.apache.avalon.excalibur.cli.CLOption;
  -import org.apache.avalon.excalibur.cli.CLOptionDescriptor;
  -import org.apache.avalon.excalibur.cli.CLUtil;
  -
  +import org.apache.axis.utils.CLArgsParser;
  +import org.apache.axis.utils.CLOption;
  +import org.apache.axis.utils.CLOptionDescriptor;
  +import org.apache.axis.utils.CLUtil;
   import org.apache.axis.utils.JavaUtils;
   
   import org.apache.axis.wsdl.toJava.Emitter;
  
  
  
  1.26      +4 -5      xml-axis/java/src/org/apache/axis/wsdl/toJava/Emitter.java
  
  Index: Emitter.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/Emitter.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- Emitter.java	13 Mar 2002 15:19:26 -0000	1.25
  +++ Emitter.java	19 Mar 2002 15:42:02 -0000	1.26
  @@ -54,11 +54,10 @@
    */
   package org.apache.axis.wsdl.toJava;
   
  -import org.apache.avalon.excalibur.cli.CLArgsParser;
  -import org.apache.avalon.excalibur.cli.CLOption;
  -import org.apache.avalon.excalibur.cli.CLOptionDescriptor;
  -import org.apache.avalon.excalibur.cli.CLUtil;
  -
  +import org.apache.axis.utils.CLArgsParser;
  +import org.apache.axis.utils.CLOption;
  +import org.apache.axis.utils.CLOptionDescriptor;
  +import org.apache.axis.utils.CLUtil;
   import org.apache.axis.utils.JavaUtils;
   import org.apache.axis.utils.XMLUtils;
   
  
  
  
  1.6       +3 -1      xml-axis/java/test/utils/TestSrcContent.java
  
  Index: TestSrcContent.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/utils/TestSrcContent.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- TestSrcContent.java	25 Feb 2002 21:47:44 -0000	1.5
  +++ TestSrcContent.java	19 Mar 2002 15:42:02 -0000	1.6
  @@ -146,10 +146,11 @@
                                          "org\\.apache\\.log4j", false),
   
               // Verify that axis java files do not use System.out.println
  -            // or System.err.println, expect:
  +            // or System.err.println, except:
               //   - utils/tcpmon.java
               //   - client/AdminClient.java
               //   - providers/BSFProvider.java
  +            //   - utils/CLArgsParser.java
               //   - Version.java
               //   - tooling in 'org/apache/axis/wsdl'
               //
  @@ -158,6 +159,7 @@
                                          + "(?!utils\\1tcpmon\\.java"
                                          + "|client\\1AdminClient\\.java"
                                          + "|providers\\1BSFProvider\\.java"
  +                                       + "|utils\\1CLArgsParser\\.java"
                                          + "|Version\\.java"
                                          + "|wsdl\\1)"
                                          + "([a-zA-Z0-9_]+\\1)*"