diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/Execute2.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/Execute2.java new file mode 100644 index 000000000..4171d4362 --- /dev/null +++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/exec/Execute2.java @@ -0,0 +1,134 @@ +/* + * 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.Properties; +import org.apache.avalon.framework.logger.AbstractLogEnabled; +import org.apache.myrmidon.api.TaskException; +import org.apache.myrmidon.framework.exec.DefaultExecOutputHandler; +import org.apache.myrmidon.framework.exec.ExecException; +import org.apache.myrmidon.framework.exec.ExecMetaData; +import org.apache.myrmidon.framework.exec.ExecOutputHandler; +import org.apache.myrmidon.framework.exec.impl.DefaultExecManager; + +/** + * Runs an external program. + * + * @author thomas.haas@softwired-inc.com + */ +public class Execute2 + extends AbstractLogEnabled +{ + private String[] m_command; + private Properties m_environment = new Properties(); + private File m_workingDirectory = new File( "." ); + private boolean m_newEnvironment; + private ExecOutputHandler m_handler; + private long m_timeout; + + /** + * Controls whether the VM is used to launch commands, where possible + */ + private boolean m_useVMLauncher = true; + + private static File getAntHomeDirectory() + { + final String antHome = System.getProperty( "myrmidon.home" ); + if( null == antHome ) + { + final String message = + "Cannot locate antRun script: Property 'ant.home' not specified"; + throw new IllegalStateException( message ); + } + + return new File( antHome ); + } + + public void setTimeout( final long timeout ) + { + m_timeout = timeout; + } + + public void setExecOutputHandler( final ExecOutputHandler handler ) + { + m_handler = handler; + } + + /** + * 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; + } + + /** + * 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 + { + if( null == m_handler ) + { + m_handler = new DefaultExecOutputHandler(); + setupLogger( m_handler ); + } + + try + { + final DefaultExecManager manager = + new DefaultExecManager( getAntHomeDirectory() ); + + final ExecMetaData metaData = + new ExecMetaData( m_command, m_environment, + m_workingDirectory, m_newEnvironment ); + + return manager.execute( metaData, m_handler, m_timeout ); + } + catch( final ExecException ee ) + { + throw new TaskException( ee.getMessage(), ee ); + } + } +} diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/Execute2.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/Execute2.java new file mode 100644 index 000000000..4171d4362 --- /dev/null +++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/exec/Execute2.java @@ -0,0 +1,134 @@ +/* + * 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.Properties; +import org.apache.avalon.framework.logger.AbstractLogEnabled; +import org.apache.myrmidon.api.TaskException; +import org.apache.myrmidon.framework.exec.DefaultExecOutputHandler; +import org.apache.myrmidon.framework.exec.ExecException; +import org.apache.myrmidon.framework.exec.ExecMetaData; +import org.apache.myrmidon.framework.exec.ExecOutputHandler; +import org.apache.myrmidon.framework.exec.impl.DefaultExecManager; + +/** + * Runs an external program. + * + * @author thomas.haas@softwired-inc.com + */ +public class Execute2 + extends AbstractLogEnabled +{ + private String[] m_command; + private Properties m_environment = new Properties(); + private File m_workingDirectory = new File( "." ); + private boolean m_newEnvironment; + private ExecOutputHandler m_handler; + private long m_timeout; + + /** + * Controls whether the VM is used to launch commands, where possible + */ + private boolean m_useVMLauncher = true; + + private static File getAntHomeDirectory() + { + final String antHome = System.getProperty( "myrmidon.home" ); + if( null == antHome ) + { + final String message = + "Cannot locate antRun script: Property 'ant.home' not specified"; + throw new IllegalStateException( message ); + } + + return new File( antHome ); + } + + public void setTimeout( final long timeout ) + { + m_timeout = timeout; + } + + public void setExecOutputHandler( final ExecOutputHandler handler ) + { + m_handler = handler; + } + + /** + * 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; + } + + /** + * 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 + { + if( null == m_handler ) + { + m_handler = new DefaultExecOutputHandler(); + setupLogger( m_handler ); + } + + try + { + final DefaultExecManager manager = + new DefaultExecManager( getAntHomeDirectory() ); + + final ExecMetaData metaData = + new ExecMetaData( m_command, m_environment, + m_workingDirectory, m_newEnvironment ); + + return manager.execute( metaData, m_handler, m_timeout ); + } + catch( final ExecException ee ) + { + throw new TaskException( ee.getMessage(), ee ); + } + } +}