git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270716 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -21,7 +21,7 @@ import java.util.ArrayList; | |||||
| import java.util.Enumeration; | import java.util.Enumeration; | ||||
| import java.util.Hashtable; | import java.util.Hashtable; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.taskdefs.condition.Condition; | import org.apache.tools.ant.taskdefs.condition.Condition; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| @@ -13,7 +13,7 @@ import java.util.Date; | |||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.aut.nativelib.Os; | import org.apache.aut.nativelib.Os; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.FileList; | import org.apache.tools.ant.types.FileList; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| @@ -19,7 +19,7 @@ import java.util.zip.ZipEntry; | |||||
| import java.util.zip.ZipInputStream; | import java.util.zip.ZipInputStream; | ||||
| import org.apache.avalon.excalibur.io.FileUtil; | import org.apache.avalon.excalibur.io.FileUtil; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| import org.apache.tools.ant.types.PatternSet; | import org.apache.tools.ant.types.PatternSet; | ||||
| @@ -200,7 +200,7 @@ public class Expand extends MatchingTask | |||||
| for( int v = 0; v < patternsets.size(); v++ ) | for( int v = 0; v < patternsets.size(); v++ ) | ||||
| { | { | ||||
| PatternSet p = (PatternSet)patternsets.get( v ); | PatternSet p = (PatternSet)patternsets.get( v ); | ||||
| String[] incls = p.getIncludePatterns( getProject() ); | |||||
| String[] incls = p.getIncludePatterns( null ); | |||||
| if( incls != null ) | if( incls != null ) | ||||
| { | { | ||||
| for( int w = 0; w < incls.length; w++ ) | for( int w = 0; w < incls.length; w++ ) | ||||
| @@ -213,7 +213,7 @@ public class Expand extends MatchingTask | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| String[] excls = p.getExcludePatterns( getProject() ); | |||||
| String[] excls = p.getExcludePatterns( null ); | |||||
| if( excls != null ) | if( excls != null ) | ||||
| { | { | ||||
| for( int w = 0; w < excls.length; w++ ) | for( int w = 0; w < excls.length; w++ ) | ||||
| @@ -20,7 +20,7 @@ import java.io.Reader; | |||||
| import java.util.Enumeration; | import java.util.Enumeration; | ||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.FileScanner; | |||||
| import org.apache.tools.ant.types.FileScanner; | |||||
| import org.apache.tools.ant.types.ZipFileSet; | import org.apache.tools.ant.types.ZipFileSet; | ||||
| import org.apache.tools.zip.ZipOutputStream; | import org.apache.tools.zip.ZipOutputStream; | ||||
| @@ -13,13 +13,13 @@ import java.util.Iterator; | |||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.myrmidon.framework.JavaVersion; | import org.apache.myrmidon.framework.JavaVersion; | ||||
| import org.apache.aut.nativelib.Os; | import org.apache.aut.nativelib.Os; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.taskdefs.compilers.CompilerAdapter; | import org.apache.tools.ant.taskdefs.compilers.CompilerAdapter; | ||||
| import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory; | import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory; | ||||
| import org.apache.tools.ant.types.Argument; | import org.apache.tools.ant.types.Argument; | ||||
| import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
| import org.apache.tools.ant.util.GlobPatternMapper; | import org.apache.tools.ant.util.GlobPatternMapper; | ||||
| import org.apache.tools.ant.util.SourceFileScanner; | |||||
| import org.apache.tools.ant.types.SourceFileScanner; | |||||
| /** | /** | ||||
| * Task to compile Java source files. This task can take the following | * Task to compile Java source files. This task can take the following | ||||
| @@ -9,7 +9,7 @@ package org.apache.tools.ant.taskdefs; | |||||
| import java.io.File; | import java.io.File; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| import org.apache.tools.ant.types.PatternSet; | import org.apache.tools.ant.types.PatternSet; | ||||
| @@ -14,12 +14,12 @@ import java.rmi.Remote; | |||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import org.apache.avalon.excalibur.io.FileUtil; | import org.apache.avalon.excalibur.io.FileUtil; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.taskdefs.rmic.RmicAdapter; | import org.apache.tools.ant.taskdefs.rmic.RmicAdapter; | ||||
| import org.apache.tools.ant.taskdefs.rmic.RmicAdapterFactory; | import org.apache.tools.ant.taskdefs.rmic.RmicAdapterFactory; | ||||
| import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
| import org.apache.tools.ant.util.FileNameMapper; | import org.apache.tools.ant.util.FileNameMapper; | ||||
| import org.apache.tools.ant.util.SourceFileScanner; | |||||
| import org.apache.tools.ant.types.SourceFileScanner; | |||||
| /** | /** | ||||
| * Task to compile RMI stubs and skeletons. This task can take the following | * Task to compile RMI stubs and skeletons. This task can take the following | ||||
| @@ -32,7 +32,7 @@ import java.util.Iterator; | |||||
| import java.util.Properties; | import java.util.Properties; | ||||
| import java.util.StringTokenizer; | import java.util.StringTokenizer; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| @@ -14,11 +14,11 @@ import java.io.IOException; | |||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| import org.apache.tools.ant.util.MergingMapper; | import org.apache.tools.ant.util.MergingMapper; | ||||
| import org.apache.tools.ant.util.SourceFileScanner; | |||||
| import org.apache.tools.ant.types.SourceFileScanner; | |||||
| import org.apache.tools.tar.TarConstants; | import org.apache.tools.tar.TarConstants; | ||||
| import org.apache.tools.tar.TarEntry; | import org.apache.tools.tar.TarEntry; | ||||
| import org.apache.tools.tar.TarOutputStream; | import org.apache.tools.tar.TarOutputStream; | ||||
| @@ -11,13 +11,13 @@ import java.io.File; | |||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.taskdefs.condition.Condition; | import org.apache.tools.ant.taskdefs.condition.Condition; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| import org.apache.tools.ant.types.Mapper; | import org.apache.tools.ant.types.Mapper; | ||||
| import org.apache.tools.ant.util.FileNameMapper; | import org.apache.tools.ant.util.FileNameMapper; | ||||
| import org.apache.tools.ant.util.MergingMapper; | import org.apache.tools.ant.util.MergingMapper; | ||||
| import org.apache.tools.ant.util.SourceFileScanner; | |||||
| import org.apache.tools.ant.types.SourceFileScanner; | |||||
| /** | /** | ||||
| * Will set the given property if the specified target has a timestamp greater | * Will set the given property if the specified target has a timestamp greater | ||||
| @@ -21,14 +21,14 @@ import java.util.Stack; | |||||
| import java.util.zip.CRC32; | import java.util.zip.CRC32; | ||||
| import java.util.zip.ZipInputStream; | import java.util.zip.ZipInputStream; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.FileScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.FileScanner; | |||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| import org.apache.tools.ant.types.ZipFileSet; | import org.apache.tools.ant.types.ZipFileSet; | ||||
| import org.apache.tools.ant.types.ZipScanner; | import org.apache.tools.ant.types.ZipScanner; | ||||
| import org.apache.tools.ant.util.MergingMapper; | import org.apache.tools.ant.util.MergingMapper; | ||||
| import org.apache.tools.ant.util.SourceFileScanner; | |||||
| import org.apache.tools.ant.types.SourceFileScanner; | |||||
| import org.apache.tools.zip.ZipEntry; | import org.apache.tools.zip.ZipEntry; | ||||
| import org.apache.tools.zip.ZipOutputStream; | import org.apache.tools.zip.ZipOutputStream; | ||||
| @@ -9,8 +9,7 @@ package org.apache.tools.ant.types; | |||||
| import java.io.File; | import java.io.File; | ||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.StringTokenizer; | |||||
| import org.apache.myrmidon.api.TaskException; | |||||
| import org.apache.avalon.excalibur.util.StringUtil; | |||||
| /** | /** | ||||
| * Commandline objects help handling command lines specifying processes to | * Commandline objects help handling command lines specifying processes to | ||||
| @@ -33,154 +32,10 @@ import org.apache.myrmidon.api.TaskException; | |||||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
| */ | */ | ||||
| public class Commandline | public class Commandline | ||||
| implements Cloneable | |||||
| { | { | ||||
| protected final ArrayList m_arguments = new ArrayList(); | protected final ArrayList m_arguments = new ArrayList(); | ||||
| private String m_executable; | private String m_executable; | ||||
| /** | |||||
| * 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 toString( String[] line ) | |||||
| { | |||||
| // empty path return empty string | |||||
| if( line == null || line.length == 0 ) | |||||
| return ""; | |||||
| // path containing one or more elements | |||||
| final StringBuffer result = new StringBuffer(); | |||||
| for( int i = 0; i < line.length; i++ ) | |||||
| { | |||||
| if( i > 0 ) | |||||
| { | |||||
| result.append( ' ' ); | |||||
| } | |||||
| try | |||||
| { | |||||
| result.append( quoteArgument( line[ i ] ) ); | |||||
| } | |||||
| catch( TaskException e ) | |||||
| { | |||||
| } | |||||
| } | |||||
| return result.toString(); | |||||
| } | |||||
| 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 ); | |||||
| } | |||||
| /** | /** | ||||
| * Sets the executable to run. | * Sets the executable to run. | ||||
| * | * | ||||
| @@ -249,32 +104,6 @@ public class Commandline | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Clear out the whole command line. | |||||
| */ | |||||
| public void clear() | |||||
| { | |||||
| m_executable = null; | |||||
| m_arguments.clear(); | |||||
| } | |||||
| /** | |||||
| * Clear out the arguments but leave the executable in place for another | |||||
| * operation. | |||||
| */ | |||||
| public void clearArgs() | |||||
| { | |||||
| m_arguments.clear(); | |||||
| } | |||||
| public Object clone() | |||||
| { | |||||
| final Commandline commandline = new Commandline(); | |||||
| commandline.setExecutable( m_executable ); | |||||
| commandline.addArguments( getArguments() ); | |||||
| return commandline; | |||||
| } | |||||
| /** | /** | ||||
| * Creates an argument object. Each commandline object has at most one | * Creates an argument object. Each commandline object has at most one | ||||
| * instance of the argument class. | * instance of the argument class. | ||||
| @@ -308,7 +137,6 @@ public class Commandline | |||||
| public String toString() | public String toString() | ||||
| { | { | ||||
| return toString( getCommandline() ); | |||||
| return StringUtil.join( getCommandline(), " " ); | |||||
| } | } | ||||
| } | } | ||||
| @@ -21,7 +21,7 @@ import java.util.ArrayList; | |||||
| import java.util.Enumeration; | import java.util.Enumeration; | ||||
| import java.util.Hashtable; | import java.util.Hashtable; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.taskdefs.condition.Condition; | import org.apache.tools.ant.taskdefs.condition.Condition; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| @@ -13,7 +13,7 @@ import java.util.Date; | |||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.aut.nativelib.Os; | import org.apache.aut.nativelib.Os; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.FileList; | import org.apache.tools.ant.types.FileList; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| @@ -19,7 +19,7 @@ import java.util.zip.ZipEntry; | |||||
| import java.util.zip.ZipInputStream; | import java.util.zip.ZipInputStream; | ||||
| import org.apache.avalon.excalibur.io.FileUtil; | import org.apache.avalon.excalibur.io.FileUtil; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| import org.apache.tools.ant.types.PatternSet; | import org.apache.tools.ant.types.PatternSet; | ||||
| @@ -200,7 +200,7 @@ public class Expand extends MatchingTask | |||||
| for( int v = 0; v < patternsets.size(); v++ ) | for( int v = 0; v < patternsets.size(); v++ ) | ||||
| { | { | ||||
| PatternSet p = (PatternSet)patternsets.get( v ); | PatternSet p = (PatternSet)patternsets.get( v ); | ||||
| String[] incls = p.getIncludePatterns( getProject() ); | |||||
| String[] incls = p.getIncludePatterns( null ); | |||||
| if( incls != null ) | if( incls != null ) | ||||
| { | { | ||||
| for( int w = 0; w < incls.length; w++ ) | for( int w = 0; w < incls.length; w++ ) | ||||
| @@ -213,7 +213,7 @@ public class Expand extends MatchingTask | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| String[] excls = p.getExcludePatterns( getProject() ); | |||||
| String[] excls = p.getExcludePatterns( null ); | |||||
| if( excls != null ) | if( excls != null ) | ||||
| { | { | ||||
| for( int w = 0; w < excls.length; w++ ) | for( int w = 0; w < excls.length; w++ ) | ||||
| @@ -20,7 +20,7 @@ import java.io.Reader; | |||||
| import java.util.Enumeration; | import java.util.Enumeration; | ||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.FileScanner; | |||||
| import org.apache.tools.ant.types.FileScanner; | |||||
| import org.apache.tools.ant.types.ZipFileSet; | import org.apache.tools.ant.types.ZipFileSet; | ||||
| import org.apache.tools.zip.ZipOutputStream; | import org.apache.tools.zip.ZipOutputStream; | ||||
| @@ -13,13 +13,13 @@ import java.util.Iterator; | |||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.myrmidon.framework.JavaVersion; | import org.apache.myrmidon.framework.JavaVersion; | ||||
| import org.apache.aut.nativelib.Os; | import org.apache.aut.nativelib.Os; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.taskdefs.compilers.CompilerAdapter; | import org.apache.tools.ant.taskdefs.compilers.CompilerAdapter; | ||||
| import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory; | import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory; | ||||
| import org.apache.tools.ant.types.Argument; | import org.apache.tools.ant.types.Argument; | ||||
| import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
| import org.apache.tools.ant.util.GlobPatternMapper; | import org.apache.tools.ant.util.GlobPatternMapper; | ||||
| import org.apache.tools.ant.util.SourceFileScanner; | |||||
| import org.apache.tools.ant.types.SourceFileScanner; | |||||
| /** | /** | ||||
| * Task to compile Java source files. This task can take the following | * Task to compile Java source files. This task can take the following | ||||
| @@ -9,7 +9,7 @@ package org.apache.tools.ant.taskdefs; | |||||
| import java.io.File; | import java.io.File; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| import org.apache.tools.ant.types.PatternSet; | import org.apache.tools.ant.types.PatternSet; | ||||
| @@ -14,12 +14,12 @@ import java.rmi.Remote; | |||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import org.apache.avalon.excalibur.io.FileUtil; | import org.apache.avalon.excalibur.io.FileUtil; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.taskdefs.rmic.RmicAdapter; | import org.apache.tools.ant.taskdefs.rmic.RmicAdapter; | ||||
| import org.apache.tools.ant.taskdefs.rmic.RmicAdapterFactory; | import org.apache.tools.ant.taskdefs.rmic.RmicAdapterFactory; | ||||
| import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
| import org.apache.tools.ant.util.FileNameMapper; | import org.apache.tools.ant.util.FileNameMapper; | ||||
| import org.apache.tools.ant.util.SourceFileScanner; | |||||
| import org.apache.tools.ant.types.SourceFileScanner; | |||||
| /** | /** | ||||
| * Task to compile RMI stubs and skeletons. This task can take the following | * Task to compile RMI stubs and skeletons. This task can take the following | ||||
| @@ -32,7 +32,7 @@ import java.util.Iterator; | |||||
| import java.util.Properties; | import java.util.Properties; | ||||
| import java.util.StringTokenizer; | import java.util.StringTokenizer; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| @@ -14,11 +14,11 @@ import java.io.IOException; | |||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| import org.apache.tools.ant.util.MergingMapper; | import org.apache.tools.ant.util.MergingMapper; | ||||
| import org.apache.tools.ant.util.SourceFileScanner; | |||||
| import org.apache.tools.ant.types.SourceFileScanner; | |||||
| import org.apache.tools.tar.TarConstants; | import org.apache.tools.tar.TarConstants; | ||||
| import org.apache.tools.tar.TarEntry; | import org.apache.tools.tar.TarEntry; | ||||
| import org.apache.tools.tar.TarOutputStream; | import org.apache.tools.tar.TarOutputStream; | ||||
| @@ -11,13 +11,13 @@ import java.io.File; | |||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.taskdefs.condition.Condition; | import org.apache.tools.ant.taskdefs.condition.Condition; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| import org.apache.tools.ant.types.Mapper; | import org.apache.tools.ant.types.Mapper; | ||||
| import org.apache.tools.ant.util.FileNameMapper; | import org.apache.tools.ant.util.FileNameMapper; | ||||
| import org.apache.tools.ant.util.MergingMapper; | import org.apache.tools.ant.util.MergingMapper; | ||||
| import org.apache.tools.ant.util.SourceFileScanner; | |||||
| import org.apache.tools.ant.types.SourceFileScanner; | |||||
| /** | /** | ||||
| * Will set the given property if the specified target has a timestamp greater | * Will set the given property if the specified target has a timestamp greater | ||||
| @@ -21,14 +21,14 @@ import java.util.Stack; | |||||
| import java.util.zip.CRC32; | import java.util.zip.CRC32; | ||||
| import java.util.zip.ZipInputStream; | import java.util.zip.ZipInputStream; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.FileScanner; | |||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.FileScanner; | |||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| import org.apache.tools.ant.types.ZipFileSet; | import org.apache.tools.ant.types.ZipFileSet; | ||||
| import org.apache.tools.ant.types.ZipScanner; | import org.apache.tools.ant.types.ZipScanner; | ||||
| import org.apache.tools.ant.util.MergingMapper; | import org.apache.tools.ant.util.MergingMapper; | ||||
| import org.apache.tools.ant.util.SourceFileScanner; | |||||
| import org.apache.tools.ant.types.SourceFileScanner; | |||||
| import org.apache.tools.zip.ZipEntry; | import org.apache.tools.zip.ZipEntry; | ||||
| import org.apache.tools.zip.ZipOutputStream; | import org.apache.tools.zip.ZipOutputStream; | ||||
| @@ -9,8 +9,7 @@ package org.apache.tools.ant.types; | |||||
| import java.io.File; | import java.io.File; | ||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.StringTokenizer; | |||||
| import org.apache.myrmidon.api.TaskException; | |||||
| import org.apache.avalon.excalibur.util.StringUtil; | |||||
| /** | /** | ||||
| * Commandline objects help handling command lines specifying processes to | * Commandline objects help handling command lines specifying processes to | ||||
| @@ -33,154 +32,10 @@ import org.apache.myrmidon.api.TaskException; | |||||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
| */ | */ | ||||
| public class Commandline | public class Commandline | ||||
| implements Cloneable | |||||
| { | { | ||||
| protected final ArrayList m_arguments = new ArrayList(); | protected final ArrayList m_arguments = new ArrayList(); | ||||
| private String m_executable; | private String m_executable; | ||||
| /** | |||||
| * 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 toString( String[] line ) | |||||
| { | |||||
| // empty path return empty string | |||||
| if( line == null || line.length == 0 ) | |||||
| return ""; | |||||
| // path containing one or more elements | |||||
| final StringBuffer result = new StringBuffer(); | |||||
| for( int i = 0; i < line.length; i++ ) | |||||
| { | |||||
| if( i > 0 ) | |||||
| { | |||||
| result.append( ' ' ); | |||||
| } | |||||
| try | |||||
| { | |||||
| result.append( quoteArgument( line[ i ] ) ); | |||||
| } | |||||
| catch( TaskException e ) | |||||
| { | |||||
| } | |||||
| } | |||||
| return result.toString(); | |||||
| } | |||||
| 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 ); | |||||
| } | |||||
| /** | /** | ||||
| * Sets the executable to run. | * Sets the executable to run. | ||||
| * | * | ||||
| @@ -249,32 +104,6 @@ public class Commandline | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Clear out the whole command line. | |||||
| */ | |||||
| public void clear() | |||||
| { | |||||
| m_executable = null; | |||||
| m_arguments.clear(); | |||||
| } | |||||
| /** | |||||
| * Clear out the arguments but leave the executable in place for another | |||||
| * operation. | |||||
| */ | |||||
| public void clearArgs() | |||||
| { | |||||
| m_arguments.clear(); | |||||
| } | |||||
| public Object clone() | |||||
| { | |||||
| final Commandline commandline = new Commandline(); | |||||
| commandline.setExecutable( m_executable ); | |||||
| commandline.addArguments( getArguments() ); | |||||
| return commandline; | |||||
| } | |||||
| /** | /** | ||||
| * Creates an argument object. Each commandline object has at most one | * Creates an argument object. Each commandline object has at most one | ||||
| * instance of the argument class. | * instance of the argument class. | ||||
| @@ -308,7 +137,6 @@ public class Commandline | |||||
| public String toString() | public String toString() | ||||
| { | { | ||||
| return toString( getCommandline() ); | |||||
| return StringUtil.join( getCommandline(), " " ); | |||||
| } | } | ||||
| } | } | ||||