ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dona...@apache.org
Subject cvs commit: jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/util FileUtils.java
Date Sat, 12 Jan 2002 23:43:32 GMT
donaldp     02/01/12 15:43:32

  Modified:    proposal/myrmidon/src/main/org/apache/tools/ant/util
                        FileUtils.java
  Log:
  Add in tuility nmethod to quote command line args - extracted from Commandline
  
  Revision  Changes    Path
  1.12      +118 -1    jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/util/FileUtils.java
  
  Index: FileUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/util/FileUtils.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- FileUtils.java	30 Dec 2001 10:46:59 -0000	1.11
  +++ FileUtils.java	12 Jan 2002 23:43:32 -0000	1.12
  @@ -17,6 +17,7 @@
   import java.io.IOException;
   import java.util.Stack;
   import java.util.StringTokenizer;
  +import java.util.ArrayList;
   import org.apache.myrmidon.api.TaskException;
   import org.apache.tools.ant.types.FilterSetCollection;
   
  @@ -28,7 +29,7 @@
    * @author duncan@x180.com
    * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
    * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
  - * @version $Revision: 1.11 $
  + * @version $Revision: 1.12 $
    */
   
   public class FileUtils
  @@ -244,6 +245,122 @@
               path = path.replace( '/', '\\' );
           }
           return new File( path );
  +    }
  +
  +    /**
  +     * Put quotes around the given String if necessary. <p>
  +     *
  +     * If the argument doesn't include spaces or quotes, return it as is. If it
  +     * contains double quotes, use single quotes - else surround the argument by
  +     * double quotes.</p>
  +     *
  +     * @param argument Description of Parameter
  +     * @return Description of the Returned Value
  +     */
  +    public static String quoteArgument( String argument )
  +        throws TaskException
  +    {
  +        if( argument.indexOf( "\"" ) > -1 )
  +        {
  +            if( argument.indexOf( "\'" ) > -1 )
  +            {
  +                throw new TaskException( "Can\'t handle single and double quotes in same
argument" );
  +            }
  +            else
  +            {
  +                return '\'' + argument + '\'';
  +            }
  +        }
  +        else if( argument.indexOf( "\'" ) > -1 || argument.indexOf( " " ) > -1 )
  +        {
  +            return '\"' + argument + '\"';
  +        }
  +        else
  +        {
  +            return argument;
  +        }
  +    }
  +
  +    public static String[] translateCommandline( String to_process )
  +        throws TaskException
  +    {
  +        if( to_process == null || to_process.length() == 0 )
  +        {
  +            return new String[ 0 ];
  +        }
  +
  +        // parse with a simple finite state machine
  +
  +        final int normal = 0;
  +        final int inQuote = 1;
  +        final int inDoubleQuote = 2;
  +        int state = normal;
  +        StringTokenizer tok = new StringTokenizer( to_process, "\"\' ", true );
  +        ArrayList v = new ArrayList();
  +        StringBuffer current = new StringBuffer();
  +
  +        while( tok.hasMoreTokens() )
  +        {
  +            String nextTok = tok.nextToken();
  +            switch( state )
  +            {
  +                case inQuote:
  +                    if( "\'".equals( nextTok ) )
  +                    {
  +                        state = normal;
  +                    }
  +                    else
  +                    {
  +                        current.append( nextTok );
  +                    }
  +                    break;
  +                case inDoubleQuote:
  +                    if( "\"".equals( nextTok ) )
  +                    {
  +                        state = normal;
  +                    }
  +                    else
  +                    {
  +                        current.append( nextTok );
  +                    }
  +                    break;
  +                default:
  +                    if( "\'".equals( nextTok ) )
  +                    {
  +                        state = inQuote;
  +                    }
  +                    else if( "\"".equals( nextTok ) )
  +                    {
  +                        state = inDoubleQuote;
  +                    }
  +                    else if( " ".equals( nextTok ) )
  +                    {
  +                        if( current.length() != 0 )
  +                        {
  +                            v.add( current.toString() );
  +                            current.setLength( 0 );
  +                        }
  +                    }
  +                    else
  +                    {
  +                        current.append( nextTok );
  +                    }
  +                    break;
  +            }
  +        }
  +
  +        if( current.length() != 0 )
  +        {
  +            v.add( current.toString() );
  +        }
  +
  +        if( state == inQuote || state == inDoubleQuote )
  +        {
  +            throw new TaskException( "unbalanced quotes in " + to_process );
  +        }
  +
  +        final String[] args = new String[ v.size() ];
  +        return (String[])v.toArray( args );
       }
   }
   
  
  
  

--
To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


Mime
View raw message