diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/ExecTask.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/ExecTask.java deleted file mode 100644 index 72e4a2f8f..000000000 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/ExecTask.java +++ /dev/null @@ -1,414 +0,0 @@ -/* - * 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. - */ -package org.apache.tools.ant.taskdefs.exec; - -import java.io.BufferedReader; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.StringReader; -import java.util.Iterator; -import java.util.Properties; -import org.apache.avalon.excalibur.util.StringUtil; -import org.apache.myrmidon.api.TaskException; -import org.apache.tools.ant.Task; -import org.apache.tools.ant.types.Argument; -import org.apache.tools.ant.types.Commandline; -import org.apache.tools.ant.types.EnvironmentData; -import org.apache.tools.ant.types.EnvironmentVariable; - -/** - * Executes a given command if the os platform is appropriate. - * - * @author duncan@x180.com - * @author rubys@us.ibm.com - * @author thomas.haas@softwired-inc.com - * @author Stefan Bodewig - * @author Mariusz Nowostawski - */ -public class ExecTask - extends Task -{ - private boolean m_newEnvironment; - private Integer m_timeout; - private EnvironmentData m_env = new EnvironmentData(); - private Commandline m_command = new Commandline(); - private FileOutputStream m_ouput; - private ByteArrayOutputStream m_byteArrayOutput; - - /** - * Controls whether the VM (1.3 and above) is used to execute the command - */ - private boolean m_useVMLauncher = true; - private File m_workingDirectory; - - private String m_os; - private File m_outputFile; - private String m_outputProperty; - private String m_resultProperty; - - /** - * The working directory of the process - * - * @param d The new Dir value - */ - public void setDir( final File dir ) - throws TaskException - { - m_workingDirectory = dir; - } - - /** - * The command to execute. - */ - public void setExecutable( final String value ) - throws TaskException - { - m_command.setExecutable( value ); - } - - /** - * Use a completely new environment - */ - public void setNewenvironment( final boolean newEnvironment ) - { - m_newEnvironment = newEnvironment; - } - - /** - * Only execute the process if os.name is included in this - * string. - * - * @param os The new Os value - */ - public void setOs( final String os ) - { - m_os = os; - } - - /** - * File the output of the process is redirected to. - * - * @param out The new Output value - */ - public void setOutput( final File outputFile ) - { - m_outputFile = outputFile; - } - - /** - * Property name whose value should be set to the output of the process - * - * @param outputprop The new Outputproperty value - */ - public void setOutputproperty( final String outputprop ) - { - m_outputProperty = outputprop; - } - - /** - * fill a property in with a result. when no property is defined: failure to - * execute - * - * @param resultProperty The new ResultProperty value - * @since 1.5 - */ - public void setResultProperty( final String resultProperty ) - { - m_resultProperty = resultProperty; - } - - /** - * Timeout in milliseconds after which the process will be killed. - * - * @param value The new Timeout value - */ - public void setTimeout( final Integer timeout ) - { - m_timeout = timeout; - } - - /** - * Control whether the VM is used to launch the new process or whether the - * OS's shell is used. - * - * @param vmLauncher The new VMLauncher value - */ - public void setVMLauncher( final boolean vmLauncher ) - { - m_useVMLauncher = vmLauncher; - } - - /** - * Add a nested env element - an environment variable. - * - * @param var The feature to be added to the Env attribute - */ - public void addEnv( final EnvironmentVariable var ) - { - m_env.addVariable( var ); - } - - /** - * Add a nested arg element - a command line argument. - */ - public void addArg( final Argument argument ) - { - m_command.addArgument( argument ); - } - - /** - * Do the work. - * - * @exception TaskException Description of Exception - */ - public void execute() - throws TaskException - { - validate(); - if( isValidOs() ) - { - runExec( prepareExec() ); - } - } - - /** - * Is this the OS the user wanted? - * - * @return The ValidOs value - */ - protected boolean isValidOs() - { - // test if os match - final String os = System.getProperty( "os.name" ); - - getLogger().debug( "Current OS is " + os ); - if( ( m_os != null ) && ( m_os.indexOf( os ) < 0 ) ) - { - // this command will be executed only on the specified OS - getLogger().debug( "This OS, " + os + " was not found in the specified list of valid OSes: " + m_os ); - return false; - } - return true; - } - - /** - * A Utility method for this classes and subclasses to run an Execute - * instance (an external command). - * - * @param exe Description of Parameter - * @exception IOException Description of Exception - */ - protected final void runExecute( final Execute exe ) - throws IOException, TaskException - { - final int err = exe.execute(); - - //test for and handle a forced process death - maybeSetResultPropertyValue( err ); - if( 0 != err ) - { - throw new TaskException( getContext().getName() + " returned: " + err ); - } - - if( null != m_byteArrayOutput ) - { - writeResultToProperty(); - } - } - - private void writeResultToProperty() throws IOException, TaskException - { - final BufferedReader input = - new BufferedReader( new StringReader( m_byteArrayOutput.toString() ) ); - String line = null; - StringBuffer val = new StringBuffer(); - while( ( line = input.readLine() ) != null ) - { - if( val.length() != 0 ) - { - val.append( StringUtil.LINE_SEPARATOR ); - } - val.append( line ); - } - final String name = m_outputProperty; - final Object value = val.toString(); - getContext().setProperty( name, value ); - } - - /** - * Has the user set all necessary attributes? - * - * @exception TaskException Description of Exception - */ - protected void validate() - throws TaskException - { - if( m_command.getExecutable() == null ) - { - throw new TaskException( "no executable specified" ); - } - - if( m_workingDirectory != null && !m_workingDirectory.exists() ) - { - throw new TaskException( "The directory you specified does not exist" ); - } - - if( m_workingDirectory != null && !m_workingDirectory.isDirectory() ) - { - throw new TaskException( "The directory you specified is not a directory" ); - } - } - - /** - * Create the StreamHandler to use with our Execute instance. - * - * @return Description of the Returned Value - * @exception TaskException Description of Exception - */ - private void setupOutput( final Execute exe ) - throws TaskException - { - if( m_outputFile != null ) - { - try - { - m_ouput = new FileOutputStream( m_outputFile ); - getLogger().debug( "Output redirected to " + m_outputFile ); - exe.setOutput( m_ouput ); - exe.setError( m_ouput ); - } - catch( FileNotFoundException fne ) - { - throw new TaskException( "Cannot write to " + m_outputFile, fne ); - } - catch( IOException ioe ) - { - throw new TaskException( "Cannot write to " + m_outputFile, ioe ); - } - } - else if( m_outputProperty != null ) - { - m_byteArrayOutput = new ByteArrayOutputStream(); - getLogger().debug( "Output redirected to ByteArray" ); - exe.setOutput( m_byteArrayOutput ); - exe.setError( m_byteArrayOutput ); - } - else - { - exe.setOutput( new LogOutputStream( getLogger(), false ) ); - exe.setError( new LogOutputStream( getLogger(), true ) ); - } - } - - /** - * Flush the output stream - if there is one. - */ - protected void logFlush() - { - try - { - if( m_ouput != null ) - { - m_ouput.close(); - } - if( m_byteArrayOutput != null ) - { - m_byteArrayOutput.close(); - } - } - catch( IOException io ) - { - } - } - - /** - * helper method to set result property to the passed in value if - * appropriate - */ - protected void maybeSetResultPropertyValue( int result ) - throws TaskException - { - final String res = Integer.toString( result ); - if( m_resultProperty != null ) - { - final String name = m_resultProperty; - getContext().setProperty( name, res ); - } - } - - /** - * Create an Execute instance with the correct working directory set. - */ - protected Execute prepareExec() - throws TaskException - { - // default directory to the project's base directory - if( m_workingDirectory == null ) - { - m_workingDirectory = getBaseDirectory(); - } - // show the command - getLogger().debug( m_command.toString() ); - - final Execute exe = new Execute(); - setupOutput( exe ); - if( null != m_timeout ) - { - exe.setTimeout( m_timeout.intValue() ); - } - exe.setWorkingDirectory( m_workingDirectory ); - exe.setVMLauncher( m_useVMLauncher ); - exe.setNewenvironment( m_newEnvironment ); - - final Properties environment = m_env.getVariables(); - final Iterator keys = environment.keySet().iterator(); - while( keys.hasNext() ) - { - final String key = (String)keys.next(); - final String value = environment.getProperty( key ); - getLogger().debug( "Setting environment variable: " + key + "=" + value ); - } - exe.setEnvironment( environment ); - return exe; - } - - /** - * Run the command using the given Execute instance. This may be overidden - * by subclasses - * - * @param exe Description of Parameter - * @exception TaskException Description of Exception - */ - protected void runExec( final Execute exe ) - throws TaskException - { - exe.setCommandline( m_command.getCommandline() ); - try - { - runExecute( exe ); - } - catch( IOException e ) - { - throw new TaskException( "Execute failed: " + e.toString(), e ); - } - finally - { - // close the output file if required - logFlush(); - } - } - - protected final Commandline getCommand() - { - return m_command; - } - -} diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/Execute.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/Execute.java deleted file mode 100644 index 06398326b..000000000 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/Execute.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * 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. - */ -package org.apache.tools.ant.taskdefs.exec; - -import java.io.File; -import java.io.IOException; -import java.io.OutputStream; -import java.util.Properties; -import org.apache.aut.nativelib.ExecException; -import org.apache.aut.nativelib.ExecManager; -import org.apache.aut.nativelib.ExecMetaData; -import org.apache.avalon.excalibur.io.IOUtil; -import org.apache.myrmidon.api.TaskException; -import org.apache.myrmidon.framework.factorys.ExecManagerFactory; -import org.apache.myrmidon.interfaces.service.ServiceException; - -/** - * Runs an external program. - * - * @author thomas.haas@softwired-inc.com - */ -public class Execute -{ - private String[] m_command; - private Properties m_environment = new Properties(); - private File m_workingDirectory = new File( "." ); - private boolean m_newEnvironment; - private OutputStream m_output; - private OutputStream m_error; - private long m_timeout; - - /** - * Controls whether the VM is used to launch commands, where possible - */ - private boolean m_useVMLauncher = true; - - public void setTimeout( final long timeout ) - { - m_timeout = timeout; - } - - public void setOutput( final OutputStream output ) - { - m_output = output; - } - - public void setError( final OutputStream error ) - { - m_error = error; - } - - /** - * Sets the commandline of the subprocess to launch. - * - * @param commandline the commandline of the subprocess to launch - */ - public void setCommandline( String[] commandline ) - { - m_command = commandline; - } - - public void setEnvironment( final Properties environment ) - { - if( null == environment ) - { - throw new NullPointerException( "environment" ); - } - m_environment = environment; - } - - /** - * Set whether to propagate the default environment or not. - * - * @param newenv whether to propagate the process environment. - */ - public void setNewenvironment( boolean newEnvironment ) - { - m_newEnvironment = newEnvironment; - } - - /** - * Launch this execution through the VM, where possible, rather than through - * the OS's shell. In some cases and operating systems using the shell will - * allow the shell to perform additional processing such as associating an - * executable with a script, etc - * - * @param useVMLauncher The new VMLauncher value - */ - public void setVMLauncher( boolean useVMLauncher ) - { - m_useVMLauncher = useVMLauncher; - } - - /** - * Sets the working directory of the process to execute.

- * - * @param workingDirectory the working directory of the process. - */ - public void setWorkingDirectory( final File workingDirectory ) - { - m_workingDirectory = workingDirectory; - } - - /** - * Runs a process defined by the command line and returns its exit status. - * - * @return the exit status of the subprocess or INVALID - * @exception IOException Description of Exception - */ - public int execute() - throws IOException, TaskException - { - try - { - final ExecManagerFactory factory = new ExecManagerFactory(); - final ExecManager manager = (ExecManager)factory.createService(); - - final ExecMetaData metaData = - new ExecMetaData( m_command, m_environment, - m_workingDirectory, m_newEnvironment ); - return manager.execute( metaData, null, m_output, m_error, m_timeout ); - } - catch( final ExecException ee ) - { - throw new TaskException( ee.getMessage(), ee ); - } - catch( final ServiceException se ) - { - throw new TaskException( se.getMessage(), se ); - } - finally - { - IOUtil.shutdownStream( m_output ); - IOUtil.shutdownStream( m_error ); - } - } -} diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/ExecuteOn.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/ExecuteOn.java deleted file mode 100644 index f722f44c5..000000000 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/ExecuteOn.java +++ /dev/null @@ -1,440 +0,0 @@ -/* - * 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. - */ -package org.apache.tools.ant.taskdefs.exec; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Hashtable; -import org.apache.avalon.excalibur.util.StringUtil; -import org.apache.myrmidon.api.TaskException; -import org.apache.tools.ant.types.DirectoryScanner; -import org.apache.tools.ant.types.FileSet; -import org.apache.tools.ant.types.Marker; -import org.apache.tools.ant.types.ScannerUtil; -import org.apache.tools.ant.types.SourceFileScanner; -import org.apache.tools.ant.util.mappers.FileNameMapper; -import org.apache.tools.ant.util.mappers.Mapper; - -/** - * Executes a given command, supplying a set of files as arguments. - * - * @author Stefan Bodewig - * @author Mariusz Nowostawski - */ -public class ExecuteOn - extends ExecTask -{ - private ArrayList m_filesets = new ArrayList(); - private boolean m_relative; - private boolean m_parallel; - private String m_type = "file"; - private Marker m_srcFilePos; - private boolean m_skipEmpty; - private Marker m_targetFilePos; - private Mapper m_mapperElement; - private FileNameMapper m_mapper; - private File m_destDir; - - /** - * Has <srcfile> been specified before <targetfile> - */ - private boolean m_srcIsFirst = true; - - /** - * Set the destination directory. - */ - public void setDest( final File destDir ) - { - m_destDir = destDir; - } - - /** - * Shall the command work on all specified files in parallel? - */ - public void setParallel( final boolean parallel ) - { - m_parallel = parallel; - } - - /** - * Should filenames be returned as relative path names? - */ - public void setRelative( final boolean relative ) - { - m_relative = relative; - } - - /** - * Should empty filesets be ignored? - */ - public void setSkipEmptyFilesets( final boolean skip ) - { - m_skipEmpty = skip; - } - - /** - * Shall the command work only on files, directories or both? - */ - public void setType( final FileDirBoth type ) - { - m_type = type.getValue(); - } - - /** - * Adds a set of files (nested fileset attribute). - */ - public void addFileset( final FileSet set ) - { - m_filesets.add( set ); - } - - /** - * Defines the FileNameMapper to use (nested mapper element). - */ - public Mapper createMapper() - throws TaskException - { - if( m_mapperElement != null ) - { - throw new TaskException( "Cannot define more than one mapper" ); - } - m_mapperElement = new Mapper(); - return m_mapperElement; - } - - /** - * Marker that indicates where the name of the source file should be put on - * the command line. - */ - public Marker createSrcfile() - throws TaskException - { - if( m_srcFilePos != null ) - { - throw new TaskException( getContext().getName() + " doesn\'t support multiple srcfile elements." ); - } - m_srcFilePos = getCommand().createMarker(); - return m_srcFilePos; - } - - /** - * Marker that indicates where the name of the target file should be put on - * the command line. - */ - public Marker createTargetfile() - throws TaskException - { - if( m_targetFilePos != null ) - { - throw new TaskException( getContext().getName() + " doesn\'t support multiple targetfile elements." ); - } - m_targetFilePos = getCommand().createMarker(); - m_srcIsFirst = ( m_srcFilePos != null ); - return m_targetFilePos; - } - - /** - * Construct the command line for parallel execution. - * - * @param srcFiles The filenames to add to the commandline - */ - protected String[] getCommandline( final String[] srcFiles, - final File[] baseDirs ) - throws TaskException - { - final ArrayList targets = new ArrayList(); - if( m_targetFilePos != null ) - { - Hashtable addedFiles = new Hashtable(); - for( int i = 0; i < srcFiles.length; i++ ) - { - String[] subTargets = m_mapper.mapFileName( srcFiles[ i ] ); - if( subTargets != null ) - { - for( int j = 0; j < subTargets.length; j++ ) - { - String name = null; - if( !m_relative ) - { - name = - ( new File( m_destDir, subTargets[ j ] ) ).getAbsolutePath(); - } - else - { - name = subTargets[ j ]; - } - if( !addedFiles.contains( name ) ) - { - targets.add( name ); - addedFiles.put( name, name ); - } - } - } - } - } - String[] targetFiles = new String[ targets.size() ]; - targetFiles = (String[])targets.toArray( targetFiles ); - - String[] orig = getCommand().getCommandline(); - String[] result = new String[ orig.length + srcFiles.length + targetFiles.length ]; - - int srcIndex = orig.length; - if( m_srcFilePos != null ) - { - srcIndex = m_srcFilePos.getPosition(); - } - - if( m_targetFilePos != null ) - { - int targetIndex = m_targetFilePos.getPosition(); - - if( srcIndex < targetIndex - || ( srcIndex == targetIndex && m_srcIsFirst ) ) - { - - // 0 --> srcIndex - System.arraycopy( orig, 0, result, 0, srcIndex ); - - // srcIndex --> targetIndex - System.arraycopy( orig, srcIndex, result, - srcIndex + srcFiles.length, - targetIndex - srcIndex ); - - // targets are already absolute file names - System.arraycopy( targetFiles, 0, result, - targetIndex + srcFiles.length, - targetFiles.length ); - - // targetIndex --> end - System.arraycopy( orig, targetIndex, result, - targetIndex + srcFiles.length + targetFiles.length, - orig.length - targetIndex ); - } - else - { - // 0 --> targetIndex - System.arraycopy( orig, 0, result, 0, targetIndex ); - - // targets are already absolute file names - System.arraycopy( targetFiles, 0, result, - targetIndex, - targetFiles.length ); - - // targetIndex --> srcIndex - System.arraycopy( orig, targetIndex, result, - targetIndex + targetFiles.length, - srcIndex - targetIndex ); - - // srcIndex --> end - System.arraycopy( orig, srcIndex, result, - srcIndex + srcFiles.length + targetFiles.length, - orig.length - srcIndex ); - srcIndex += targetFiles.length; - } - - } - else - {// no targetFilePos - - // 0 --> srcIndex - System.arraycopy( orig, 0, result, 0, srcIndex ); - // srcIndex --> end - System.arraycopy( orig, srcIndex, result, - srcIndex + srcFiles.length, - orig.length - srcIndex ); - - } - - // fill in source file names - for( int i = 0; i < srcFiles.length; i++ ) - { - if( !m_relative ) - { - result[ srcIndex + i ] = - ( new File( baseDirs[ i ], srcFiles[ i ] ) ).getAbsolutePath(); - } - else - { - result[ srcIndex + i ] = srcFiles[ i ]; - } - } - return result; - } - - /** - * Construct the command line for serial execution. - * - * @param srcFile The filename to add to the commandline - * @param baseDir filename is relative to this dir - * @return The Commandline value - */ - protected String[] getCommandline( final String srcFile, - final File baseDir ) - throws TaskException - { - return getCommandline( new String[]{srcFile}, new File[]{baseDir} ); - } - - /** - * Return the list of Directories from this DirectoryScanner that should be - * included on the command line. - * - * @param baseDir Description of Parameter - * @param ds Description of Parameter - * @return The Dirs value - */ - protected String[] getDirs( final File baseDir, - final DirectoryScanner ds ) - throws TaskException - { - if( m_mapper != null ) - { - final SourceFileScanner scanner = new SourceFileScanner(); - setupLogger( scanner ); - return scanner.restrict( ds.getIncludedDirectories(), baseDir, m_destDir, - m_mapper ); - } - else - { - return ds.getIncludedDirectories(); - } - } - - /** - * Return the list of files from this DirectoryScanner that should be - * included on the command line. - * - * @param baseDir Description of Parameter - * @param ds Description of Parameter - * @return The Files value - */ - protected String[] getFiles( final File baseDir, - final DirectoryScanner ds ) - throws TaskException - { - if( m_mapper != null ) - { - final SourceFileScanner scanner = new SourceFileScanner(); - setupLogger( scanner ); - return scanner.restrict( ds.getIncludedFiles(), baseDir, m_destDir, - m_mapper ); - } - else - { - return ds.getIncludedFiles(); - } - } - - protected void validate() - throws TaskException - { - super.validate(); - if( m_filesets.size() == 0 ) - { - final String message = "no filesets specified"; - throw new TaskException( message ); - } - - if( m_targetFilePos != null || - m_mapperElement != null || - m_destDir != null ) - { - if( m_mapperElement == null ) - { - final String message = "no mapper specified"; - throw new TaskException( message ); - } - if( m_mapperElement == null ) - { - final String message = "no dest attribute specified"; - throw new TaskException( message ); - } - m_mapper = m_mapperElement.getImplementation(); - } - } - - protected void runExec( final Execute exe ) - throws TaskException - { - try - { - final ArrayList fileNames = new ArrayList(); - final ArrayList baseDirs = new ArrayList(); - for( int i = 0; i < m_filesets.size(); i++ ) - { - final FileSet fs = (FileSet)m_filesets.get( i ); - final File base = fs.getDir(); - final DirectoryScanner ds = ScannerUtil.getDirectoryScanner( fs ); - - if( !"dir".equals( m_type ) ) - { - final String[] s = getFiles( base, ds ); - for( int j = 0; j < s.length; j++ ) - { - fileNames.add( s[ j ] ); - baseDirs.add( base ); - } - } - - if( !"file".equals( m_type ) ) - { - final String[] s = getDirs( base, ds ); - for( int j = 0; j < s.length; j++ ) - { - fileNames.add( s[ j ] ); - baseDirs.add( base ); - } - } - - if( fileNames.size() == 0 && m_skipEmpty ) - { - getLogger().info( "Skipping fileset for directory " + base + ". It is empty." ); - continue; - } - - if( !m_parallel ) - { - String[] s = new String[ fileNames.size() ]; - s = (String[])fileNames.toArray( s ); - for( int j = 0; j < s.length; j++ ) - { - String[] command = getCommandline( s[ j ], base ); - getLogger().debug( "Executing " + StringUtil.join( command, " " ) ); - exe.setCommandline( command ); - runExecute( exe ); - } - fileNames.clear(); - baseDirs.clear(); - } - } - - if( m_parallel && ( fileNames.size() > 0 || !m_skipEmpty ) ) - { - String[] s = new String[ fileNames.size() ]; - s = (String[])fileNames.toArray( s ); - File[] b = new File[ baseDirs.size() ]; - b = (File[])baseDirs.toArray( b ); - String[] command = getCommandline( s, b ); - getLogger().debug( "Executing " + StringUtil.join( command, " " ) ); - exe.setCommandline( command ); - runExecute( exe ); - } - - } - catch( IOException e ) - { - throw new TaskException( "Execute failed: " + e, e ); - } - finally - { - // close the output file if required - logFlush(); - } - } -} diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/FileDirBoth.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/FileDirBoth.java deleted file mode 100644 index 3dd14a723..000000000 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/FileDirBoth.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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. - */ -package org.apache.tools.ant.taskdefs.exec; - -import org.apache.tools.ant.types.EnumeratedAttribute; - -/** - * Enumerated attribute with the values "file", "dir" and "both" for the - * type attribute. - */ -public class FileDirBoth - extends EnumeratedAttribute -{ - public String[] getValues() - { - return new String[]{"file", "dir", "both"}; - } -} diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/LogOutputStream.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/LogOutputStream.java deleted file mode 100644 index 18f13fa37..000000000 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/LogOutputStream.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * 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. - */ -package org.apache.tools.ant.taskdefs.exec; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import org.apache.avalon.framework.logger.Logger; - -/** - * Logs each line written to this stream to the log system of ant. Tries to be - * smart about line separators.
- * TODO: This class can be split to implement other line based processing of - * data written to the stream. - * - * @author thomas.haas@softwired-inc.com - */ -public class LogOutputStream - extends OutputStream -{ - private final boolean m_isError; - private final Logger m_logger; - - private ByteArrayOutputStream m_buffer = new ByteArrayOutputStream(); - private boolean m_skip; - - public LogOutputStream( final Logger logger, final boolean isError ) - { - m_logger = logger; - m_isError = isError; - } - - protected final Logger getLogger() - { - return m_logger; - } - - /** - * Writes all remaining - * - * @exception IOException Description of Exception - */ - public void close() - throws IOException - { - if( m_buffer.size() > 0 ) - { - processBuffer(); - } - super.close(); - } - - /** - * Write the data to the buffer and flush the buffer, if a line separator is - * detected. - * - * @param cc data to log (byte). - * @exception IOException Description of Exception - */ - public void write( final int ch ) - throws IOException - { - if( ( ch == '\n' ) || ( ch == '\r' ) ) - { - if( !m_skip ) - { - processBuffer(); - } - } - else - { - m_buffer.write( (byte)ch ); - } - - m_skip = ( ch == '\r' ); - } - - /** - * Converts the buffer to a string and sends it to processLine - */ - private void processBuffer() - { - processLine( m_buffer.toString() ); - m_buffer.reset(); - } - - /** - * Logs a line to the log system of ant. - * - * @param line the line to log. - * @param level Description of Parameter - */ - protected void processLine( final String line ) - { - if( m_isError ) - { - getLogger().warn( line ); - } - else - { - getLogger().info( line ); - } - } - - public boolean isError() - { - return m_isError; - } -} diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/ExecTask.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/ExecTask.java deleted file mode 100644 index 72e4a2f8f..000000000 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/ExecTask.java +++ /dev/null @@ -1,414 +0,0 @@ -/* - * 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. - */ -package org.apache.tools.ant.taskdefs.exec; - -import java.io.BufferedReader; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.StringReader; -import java.util.Iterator; -import java.util.Properties; -import org.apache.avalon.excalibur.util.StringUtil; -import org.apache.myrmidon.api.TaskException; -import org.apache.tools.ant.Task; -import org.apache.tools.ant.types.Argument; -import org.apache.tools.ant.types.Commandline; -import org.apache.tools.ant.types.EnvironmentData; -import org.apache.tools.ant.types.EnvironmentVariable; - -/** - * Executes a given command if the os platform is appropriate. - * - * @author duncan@x180.com - * @author rubys@us.ibm.com - * @author thomas.haas@softwired-inc.com - * @author Stefan Bodewig - * @author Mariusz Nowostawski - */ -public class ExecTask - extends Task -{ - private boolean m_newEnvironment; - private Integer m_timeout; - private EnvironmentData m_env = new EnvironmentData(); - private Commandline m_command = new Commandline(); - private FileOutputStream m_ouput; - private ByteArrayOutputStream m_byteArrayOutput; - - /** - * Controls whether the VM (1.3 and above) is used to execute the command - */ - private boolean m_useVMLauncher = true; - private File m_workingDirectory; - - private String m_os; - private File m_outputFile; - private String m_outputProperty; - private String m_resultProperty; - - /** - * The working directory of the process - * - * @param d The new Dir value - */ - public void setDir( final File dir ) - throws TaskException - { - m_workingDirectory = dir; - } - - /** - * The command to execute. - */ - public void setExecutable( final String value ) - throws TaskException - { - m_command.setExecutable( value ); - } - - /** - * Use a completely new environment - */ - public void setNewenvironment( final boolean newEnvironment ) - { - m_newEnvironment = newEnvironment; - } - - /** - * Only execute the process if os.name is included in this - * string. - * - * @param os The new Os value - */ - public void setOs( final String os ) - { - m_os = os; - } - - /** - * File the output of the process is redirected to. - * - * @param out The new Output value - */ - public void setOutput( final File outputFile ) - { - m_outputFile = outputFile; - } - - /** - * Property name whose value should be set to the output of the process - * - * @param outputprop The new Outputproperty value - */ - public void setOutputproperty( final String outputprop ) - { - m_outputProperty = outputprop; - } - - /** - * fill a property in with a result. when no property is defined: failure to - * execute - * - * @param resultProperty The new ResultProperty value - * @since 1.5 - */ - public void setResultProperty( final String resultProperty ) - { - m_resultProperty = resultProperty; - } - - /** - * Timeout in milliseconds after which the process will be killed. - * - * @param value The new Timeout value - */ - public void setTimeout( final Integer timeout ) - { - m_timeout = timeout; - } - - /** - * Control whether the VM is used to launch the new process or whether the - * OS's shell is used. - * - * @param vmLauncher The new VMLauncher value - */ - public void setVMLauncher( final boolean vmLauncher ) - { - m_useVMLauncher = vmLauncher; - } - - /** - * Add a nested env element - an environment variable. - * - * @param var The feature to be added to the Env attribute - */ - public void addEnv( final EnvironmentVariable var ) - { - m_env.addVariable( var ); - } - - /** - * Add a nested arg element - a command line argument. - */ - public void addArg( final Argument argument ) - { - m_command.addArgument( argument ); - } - - /** - * Do the work. - * - * @exception TaskException Description of Exception - */ - public void execute() - throws TaskException - { - validate(); - if( isValidOs() ) - { - runExec( prepareExec() ); - } - } - - /** - * Is this the OS the user wanted? - * - * @return The ValidOs value - */ - protected boolean isValidOs() - { - // test if os match - final String os = System.getProperty( "os.name" ); - - getLogger().debug( "Current OS is " + os ); - if( ( m_os != null ) && ( m_os.indexOf( os ) < 0 ) ) - { - // this command will be executed only on the specified OS - getLogger().debug( "This OS, " + os + " was not found in the specified list of valid OSes: " + m_os ); - return false; - } - return true; - } - - /** - * A Utility method for this classes and subclasses to run an Execute - * instance (an external command). - * - * @param exe Description of Parameter - * @exception IOException Description of Exception - */ - protected final void runExecute( final Execute exe ) - throws IOException, TaskException - { - final int err = exe.execute(); - - //test for and handle a forced process death - maybeSetResultPropertyValue( err ); - if( 0 != err ) - { - throw new TaskException( getContext().getName() + " returned: " + err ); - } - - if( null != m_byteArrayOutput ) - { - writeResultToProperty(); - } - } - - private void writeResultToProperty() throws IOException, TaskException - { - final BufferedReader input = - new BufferedReader( new StringReader( m_byteArrayOutput.toString() ) ); - String line = null; - StringBuffer val = new StringBuffer(); - while( ( line = input.readLine() ) != null ) - { - if( val.length() != 0 ) - { - val.append( StringUtil.LINE_SEPARATOR ); - } - val.append( line ); - } - final String name = m_outputProperty; - final Object value = val.toString(); - getContext().setProperty( name, value ); - } - - /** - * Has the user set all necessary attributes? - * - * @exception TaskException Description of Exception - */ - protected void validate() - throws TaskException - { - if( m_command.getExecutable() == null ) - { - throw new TaskException( "no executable specified" ); - } - - if( m_workingDirectory != null && !m_workingDirectory.exists() ) - { - throw new TaskException( "The directory you specified does not exist" ); - } - - if( m_workingDirectory != null && !m_workingDirectory.isDirectory() ) - { - throw new TaskException( "The directory you specified is not a directory" ); - } - } - - /** - * Create the StreamHandler to use with our Execute instance. - * - * @return Description of the Returned Value - * @exception TaskException Description of Exception - */ - private void setupOutput( final Execute exe ) - throws TaskException - { - if( m_outputFile != null ) - { - try - { - m_ouput = new FileOutputStream( m_outputFile ); - getLogger().debug( "Output redirected to " + m_outputFile ); - exe.setOutput( m_ouput ); - exe.setError( m_ouput ); - } - catch( FileNotFoundException fne ) - { - throw new TaskException( "Cannot write to " + m_outputFile, fne ); - } - catch( IOException ioe ) - { - throw new TaskException( "Cannot write to " + m_outputFile, ioe ); - } - } - else if( m_outputProperty != null ) - { - m_byteArrayOutput = new ByteArrayOutputStream(); - getLogger().debug( "Output redirected to ByteArray" ); - exe.setOutput( m_byteArrayOutput ); - exe.setError( m_byteArrayOutput ); - } - else - { - exe.setOutput( new LogOutputStream( getLogger(), false ) ); - exe.setError( new LogOutputStream( getLogger(), true ) ); - } - } - - /** - * Flush the output stream - if there is one. - */ - protected void logFlush() - { - try - { - if( m_ouput != null ) - { - m_ouput.close(); - } - if( m_byteArrayOutput != null ) - { - m_byteArrayOutput.close(); - } - } - catch( IOException io ) - { - } - } - - /** - * helper method to set result property to the passed in value if - * appropriate - */ - protected void maybeSetResultPropertyValue( int result ) - throws TaskException - { - final String res = Integer.toString( result ); - if( m_resultProperty != null ) - { - final String name = m_resultProperty; - getContext().setProperty( name, res ); - } - } - - /** - * Create an Execute instance with the correct working directory set. - */ - protected Execute prepareExec() - throws TaskException - { - // default directory to the project's base directory - if( m_workingDirectory == null ) - { - m_workingDirectory = getBaseDirectory(); - } - // show the command - getLogger().debug( m_command.toString() ); - - final Execute exe = new Execute(); - setupOutput( exe ); - if( null != m_timeout ) - { - exe.setTimeout( m_timeout.intValue() ); - } - exe.setWorkingDirectory( m_workingDirectory ); - exe.setVMLauncher( m_useVMLauncher ); - exe.setNewenvironment( m_newEnvironment ); - - final Properties environment = m_env.getVariables(); - final Iterator keys = environment.keySet().iterator(); - while( keys.hasNext() ) - { - final String key = (String)keys.next(); - final String value = environment.getProperty( key ); - getLogger().debug( "Setting environment variable: " + key + "=" + value ); - } - exe.setEnvironment( environment ); - return exe; - } - - /** - * Run the command using the given Execute instance. This may be overidden - * by subclasses - * - * @param exe Description of Parameter - * @exception TaskException Description of Exception - */ - protected void runExec( final Execute exe ) - throws TaskException - { - exe.setCommandline( m_command.getCommandline() ); - try - { - runExecute( exe ); - } - catch( IOException e ) - { - throw new TaskException( "Execute failed: " + e.toString(), e ); - } - finally - { - // close the output file if required - logFlush(); - } - } - - protected final Commandline getCommand() - { - return m_command; - } - -} diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/Execute.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/Execute.java deleted file mode 100644 index 06398326b..000000000 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/Execute.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * 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. - */ -package org.apache.tools.ant.taskdefs.exec; - -import java.io.File; -import java.io.IOException; -import java.io.OutputStream; -import java.util.Properties; -import org.apache.aut.nativelib.ExecException; -import org.apache.aut.nativelib.ExecManager; -import org.apache.aut.nativelib.ExecMetaData; -import org.apache.avalon.excalibur.io.IOUtil; -import org.apache.myrmidon.api.TaskException; -import org.apache.myrmidon.framework.factorys.ExecManagerFactory; -import org.apache.myrmidon.interfaces.service.ServiceException; - -/** - * Runs an external program. - * - * @author thomas.haas@softwired-inc.com - */ -public class Execute -{ - private String[] m_command; - private Properties m_environment = new Properties(); - private File m_workingDirectory = new File( "." ); - private boolean m_newEnvironment; - private OutputStream m_output; - private OutputStream m_error; - private long m_timeout; - - /** - * Controls whether the VM is used to launch commands, where possible - */ - private boolean m_useVMLauncher = true; - - public void setTimeout( final long timeout ) - { - m_timeout = timeout; - } - - public void setOutput( final OutputStream output ) - { - m_output = output; - } - - public void setError( final OutputStream error ) - { - m_error = error; - } - - /** - * Sets the commandline of the subprocess to launch. - * - * @param commandline the commandline of the subprocess to launch - */ - public void setCommandline( String[] commandline ) - { - m_command = commandline; - } - - public void setEnvironment( final Properties environment ) - { - if( null == environment ) - { - throw new NullPointerException( "environment" ); - } - m_environment = environment; - } - - /** - * Set whether to propagate the default environment or not. - * - * @param newenv whether to propagate the process environment. - */ - public void setNewenvironment( boolean newEnvironment ) - { - m_newEnvironment = newEnvironment; - } - - /** - * Launch this execution through the VM, where possible, rather than through - * the OS's shell. In some cases and operating systems using the shell will - * allow the shell to perform additional processing such as associating an - * executable with a script, etc - * - * @param useVMLauncher The new VMLauncher value - */ - public void setVMLauncher( boolean useVMLauncher ) - { - m_useVMLauncher = useVMLauncher; - } - - /** - * Sets the working directory of the process to execute.

- * - * @param workingDirectory the working directory of the process. - */ - public void setWorkingDirectory( final File workingDirectory ) - { - m_workingDirectory = workingDirectory; - } - - /** - * Runs a process defined by the command line and returns its exit status. - * - * @return the exit status of the subprocess or INVALID - * @exception IOException Description of Exception - */ - public int execute() - throws IOException, TaskException - { - try - { - final ExecManagerFactory factory = new ExecManagerFactory(); - final ExecManager manager = (ExecManager)factory.createService(); - - final ExecMetaData metaData = - new ExecMetaData( m_command, m_environment, - m_workingDirectory, m_newEnvironment ); - return manager.execute( metaData, null, m_output, m_error, m_timeout ); - } - catch( final ExecException ee ) - { - throw new TaskException( ee.getMessage(), ee ); - } - catch( final ServiceException se ) - { - throw new TaskException( se.getMessage(), se ); - } - finally - { - IOUtil.shutdownStream( m_output ); - IOUtil.shutdownStream( m_error ); - } - } -} diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/ExecuteOn.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/ExecuteOn.java deleted file mode 100644 index f722f44c5..000000000 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/ExecuteOn.java +++ /dev/null @@ -1,440 +0,0 @@ -/* - * 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. - */ -package org.apache.tools.ant.taskdefs.exec; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Hashtable; -import org.apache.avalon.excalibur.util.StringUtil; -import org.apache.myrmidon.api.TaskException; -import org.apache.tools.ant.types.DirectoryScanner; -import org.apache.tools.ant.types.FileSet; -import org.apache.tools.ant.types.Marker; -import org.apache.tools.ant.types.ScannerUtil; -import org.apache.tools.ant.types.SourceFileScanner; -import org.apache.tools.ant.util.mappers.FileNameMapper; -import org.apache.tools.ant.util.mappers.Mapper; - -/** - * Executes a given command, supplying a set of files as arguments. - * - * @author Stefan Bodewig - * @author Mariusz Nowostawski - */ -public class ExecuteOn - extends ExecTask -{ - private ArrayList m_filesets = new ArrayList(); - private boolean m_relative; - private boolean m_parallel; - private String m_type = "file"; - private Marker m_srcFilePos; - private boolean m_skipEmpty; - private Marker m_targetFilePos; - private Mapper m_mapperElement; - private FileNameMapper m_mapper; - private File m_destDir; - - /** - * Has <srcfile> been specified before <targetfile> - */ - private boolean m_srcIsFirst = true; - - /** - * Set the destination directory. - */ - public void setDest( final File destDir ) - { - m_destDir = destDir; - } - - /** - * Shall the command work on all specified files in parallel? - */ - public void setParallel( final boolean parallel ) - { - m_parallel = parallel; - } - - /** - * Should filenames be returned as relative path names? - */ - public void setRelative( final boolean relative ) - { - m_relative = relative; - } - - /** - * Should empty filesets be ignored? - */ - public void setSkipEmptyFilesets( final boolean skip ) - { - m_skipEmpty = skip; - } - - /** - * Shall the command work only on files, directories or both? - */ - public void setType( final FileDirBoth type ) - { - m_type = type.getValue(); - } - - /** - * Adds a set of files (nested fileset attribute). - */ - public void addFileset( final FileSet set ) - { - m_filesets.add( set ); - } - - /** - * Defines the FileNameMapper to use (nested mapper element). - */ - public Mapper createMapper() - throws TaskException - { - if( m_mapperElement != null ) - { - throw new TaskException( "Cannot define more than one mapper" ); - } - m_mapperElement = new Mapper(); - return m_mapperElement; - } - - /** - * Marker that indicates where the name of the source file should be put on - * the command line. - */ - public Marker createSrcfile() - throws TaskException - { - if( m_srcFilePos != null ) - { - throw new TaskException( getContext().getName() + " doesn\'t support multiple srcfile elements." ); - } - m_srcFilePos = getCommand().createMarker(); - return m_srcFilePos; - } - - /** - * Marker that indicates where the name of the target file should be put on - * the command line. - */ - public Marker createTargetfile() - throws TaskException - { - if( m_targetFilePos != null ) - { - throw new TaskException( getContext().getName() + " doesn\'t support multiple targetfile elements." ); - } - m_targetFilePos = getCommand().createMarker(); - m_srcIsFirst = ( m_srcFilePos != null ); - return m_targetFilePos; - } - - /** - * Construct the command line for parallel execution. - * - * @param srcFiles The filenames to add to the commandline - */ - protected String[] getCommandline( final String[] srcFiles, - final File[] baseDirs ) - throws TaskException - { - final ArrayList targets = new ArrayList(); - if( m_targetFilePos != null ) - { - Hashtable addedFiles = new Hashtable(); - for( int i = 0; i < srcFiles.length; i++ ) - { - String[] subTargets = m_mapper.mapFileName( srcFiles[ i ] ); - if( subTargets != null ) - { - for( int j = 0; j < subTargets.length; j++ ) - { - String name = null; - if( !m_relative ) - { - name = - ( new File( m_destDir, subTargets[ j ] ) ).getAbsolutePath(); - } - else - { - name = subTargets[ j ]; - } - if( !addedFiles.contains( name ) ) - { - targets.add( name ); - addedFiles.put( name, name ); - } - } - } - } - } - String[] targetFiles = new String[ targets.size() ]; - targetFiles = (String[])targets.toArray( targetFiles ); - - String[] orig = getCommand().getCommandline(); - String[] result = new String[ orig.length + srcFiles.length + targetFiles.length ]; - - int srcIndex = orig.length; - if( m_srcFilePos != null ) - { - srcIndex = m_srcFilePos.getPosition(); - } - - if( m_targetFilePos != null ) - { - int targetIndex = m_targetFilePos.getPosition(); - - if( srcIndex < targetIndex - || ( srcIndex == targetIndex && m_srcIsFirst ) ) - { - - // 0 --> srcIndex - System.arraycopy( orig, 0, result, 0, srcIndex ); - - // srcIndex --> targetIndex - System.arraycopy( orig, srcIndex, result, - srcIndex + srcFiles.length, - targetIndex - srcIndex ); - - // targets are already absolute file names - System.arraycopy( targetFiles, 0, result, - targetIndex + srcFiles.length, - targetFiles.length ); - - // targetIndex --> end - System.arraycopy( orig, targetIndex, result, - targetIndex + srcFiles.length + targetFiles.length, - orig.length - targetIndex ); - } - else - { - // 0 --> targetIndex - System.arraycopy( orig, 0, result, 0, targetIndex ); - - // targets are already absolute file names - System.arraycopy( targetFiles, 0, result, - targetIndex, - targetFiles.length ); - - // targetIndex --> srcIndex - System.arraycopy( orig, targetIndex, result, - targetIndex + targetFiles.length, - srcIndex - targetIndex ); - - // srcIndex --> end - System.arraycopy( orig, srcIndex, result, - srcIndex + srcFiles.length + targetFiles.length, - orig.length - srcIndex ); - srcIndex += targetFiles.length; - } - - } - else - {// no targetFilePos - - // 0 --> srcIndex - System.arraycopy( orig, 0, result, 0, srcIndex ); - // srcIndex --> end - System.arraycopy( orig, srcIndex, result, - srcIndex + srcFiles.length, - orig.length - srcIndex ); - - } - - // fill in source file names - for( int i = 0; i < srcFiles.length; i++ ) - { - if( !m_relative ) - { - result[ srcIndex + i ] = - ( new File( baseDirs[ i ], srcFiles[ i ] ) ).getAbsolutePath(); - } - else - { - result[ srcIndex + i ] = srcFiles[ i ]; - } - } - return result; - } - - /** - * Construct the command line for serial execution. - * - * @param srcFile The filename to add to the commandline - * @param baseDir filename is relative to this dir - * @return The Commandline value - */ - protected String[] getCommandline( final String srcFile, - final File baseDir ) - throws TaskException - { - return getCommandline( new String[]{srcFile}, new File[]{baseDir} ); - } - - /** - * Return the list of Directories from this DirectoryScanner that should be - * included on the command line. - * - * @param baseDir Description of Parameter - * @param ds Description of Parameter - * @return The Dirs value - */ - protected String[] getDirs( final File baseDir, - final DirectoryScanner ds ) - throws TaskException - { - if( m_mapper != null ) - { - final SourceFileScanner scanner = new SourceFileScanner(); - setupLogger( scanner ); - return scanner.restrict( ds.getIncludedDirectories(), baseDir, m_destDir, - m_mapper ); - } - else - { - return ds.getIncludedDirectories(); - } - } - - /** - * Return the list of files from this DirectoryScanner that should be - * included on the command line. - * - * @param baseDir Description of Parameter - * @param ds Description of Parameter - * @return The Files value - */ - protected String[] getFiles( final File baseDir, - final DirectoryScanner ds ) - throws TaskException - { - if( m_mapper != null ) - { - final SourceFileScanner scanner = new SourceFileScanner(); - setupLogger( scanner ); - return scanner.restrict( ds.getIncludedFiles(), baseDir, m_destDir, - m_mapper ); - } - else - { - return ds.getIncludedFiles(); - } - } - - protected void validate() - throws TaskException - { - super.validate(); - if( m_filesets.size() == 0 ) - { - final String message = "no filesets specified"; - throw new TaskException( message ); - } - - if( m_targetFilePos != null || - m_mapperElement != null || - m_destDir != null ) - { - if( m_mapperElement == null ) - { - final String message = "no mapper specified"; - throw new TaskException( message ); - } - if( m_mapperElement == null ) - { - final String message = "no dest attribute specified"; - throw new TaskException( message ); - } - m_mapper = m_mapperElement.getImplementation(); - } - } - - protected void runExec( final Execute exe ) - throws TaskException - { - try - { - final ArrayList fileNames = new ArrayList(); - final ArrayList baseDirs = new ArrayList(); - for( int i = 0; i < m_filesets.size(); i++ ) - { - final FileSet fs = (FileSet)m_filesets.get( i ); - final File base = fs.getDir(); - final DirectoryScanner ds = ScannerUtil.getDirectoryScanner( fs ); - - if( !"dir".equals( m_type ) ) - { - final String[] s = getFiles( base, ds ); - for( int j = 0; j < s.length; j++ ) - { - fileNames.add( s[ j ] ); - baseDirs.add( base ); - } - } - - if( !"file".equals( m_type ) ) - { - final String[] s = getDirs( base, ds ); - for( int j = 0; j < s.length; j++ ) - { - fileNames.add( s[ j ] ); - baseDirs.add( base ); - } - } - - if( fileNames.size() == 0 && m_skipEmpty ) - { - getLogger().info( "Skipping fileset for directory " + base + ". It is empty." ); - continue; - } - - if( !m_parallel ) - { - String[] s = new String[ fileNames.size() ]; - s = (String[])fileNames.toArray( s ); - for( int j = 0; j < s.length; j++ ) - { - String[] command = getCommandline( s[ j ], base ); - getLogger().debug( "Executing " + StringUtil.join( command, " " ) ); - exe.setCommandline( command ); - runExecute( exe ); - } - fileNames.clear(); - baseDirs.clear(); - } - } - - if( m_parallel && ( fileNames.size() > 0 || !m_skipEmpty ) ) - { - String[] s = new String[ fileNames.size() ]; - s = (String[])fileNames.toArray( s ); - File[] b = new File[ baseDirs.size() ]; - b = (File[])baseDirs.toArray( b ); - String[] command = getCommandline( s, b ); - getLogger().debug( "Executing " + StringUtil.join( command, " " ) ); - exe.setCommandline( command ); - runExecute( exe ); - } - - } - catch( IOException e ) - { - throw new TaskException( "Execute failed: " + e, e ); - } - finally - { - // close the output file if required - logFlush(); - } - } -} diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/FileDirBoth.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/FileDirBoth.java deleted file mode 100644 index 3dd14a723..000000000 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/FileDirBoth.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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. - */ -package org.apache.tools.ant.taskdefs.exec; - -import org.apache.tools.ant.types.EnumeratedAttribute; - -/** - * Enumerated attribute with the values "file", "dir" and "both" for the - * type attribute. - */ -public class FileDirBoth - extends EnumeratedAttribute -{ - public String[] getValues() - { - return new String[]{"file", "dir", "both"}; - } -} diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/LogOutputStream.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/LogOutputStream.java deleted file mode 100644 index 18f13fa37..000000000 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/LogOutputStream.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * 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. - */ -package org.apache.tools.ant.taskdefs.exec; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import org.apache.avalon.framework.logger.Logger; - -/** - * Logs each line written to this stream to the log system of ant. Tries to be - * smart about line separators.
- * TODO: This class can be split to implement other line based processing of - * data written to the stream. - * - * @author thomas.haas@softwired-inc.com - */ -public class LogOutputStream - extends OutputStream -{ - private final boolean m_isError; - private final Logger m_logger; - - private ByteArrayOutputStream m_buffer = new ByteArrayOutputStream(); - private boolean m_skip; - - public LogOutputStream( final Logger logger, final boolean isError ) - { - m_logger = logger; - m_isError = isError; - } - - protected final Logger getLogger() - { - return m_logger; - } - - /** - * Writes all remaining - * - * @exception IOException Description of Exception - */ - public void close() - throws IOException - { - if( m_buffer.size() > 0 ) - { - processBuffer(); - } - super.close(); - } - - /** - * Write the data to the buffer and flush the buffer, if a line separator is - * detected. - * - * @param cc data to log (byte). - * @exception IOException Description of Exception - */ - public void write( final int ch ) - throws IOException - { - if( ( ch == '\n' ) || ( ch == '\r' ) ) - { - if( !m_skip ) - { - processBuffer(); - } - } - else - { - m_buffer.write( (byte)ch ); - } - - m_skip = ( ch == '\r' ); - } - - /** - * Converts the buffer to a string and sends it to processLine - */ - private void processBuffer() - { - processLine( m_buffer.toString() ); - m_buffer.reset(); - } - - /** - * Logs a line to the log system of ant. - * - * @param line the line to log. - * @param level Description of Parameter - */ - protected void processLine( final String line ) - { - if( m_isError ) - { - getLogger().warn( line ); - } - else - { - getLogger().info( line ); - } - } - - public boolean isError() - { - return m_isError; - } -}