001: // THIS SOFTWARE IS PROVIDED BY SOFTARIS PTY.LTD. AND OTHER METABOSS
002: // CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
003: // BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
004: // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SOFTARIS PTY.LTD.
005: // OR OTHER METABOSS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
006: // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
007: // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
008: // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
009: // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
010: // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
011: // EVEN IF SOFTARIS PTY.LTD. OR OTHER METABOSS CONTRIBUTORS ARE ADVISED OF THE
012: // POSSIBILITY OF SUCH DAMAGE.
013: //
014: // Copyright 2000-2005 © Softaris Pty.Ltd. All Rights Reserved.
015: package com.metaboss.sdlctools.applications.anttasks.builder.tools;
016:
017: import java.io.File;
018: import java.util.ArrayList;
019: import java.util.Arrays;
020: import java.util.Iterator;
021: import java.util.List;
022:
023: import org.apache.tools.ant.BuildException;
024: import org.apache.tools.ant.Project;
025: import org.apache.tools.ant.taskdefs.ExecTask;
026: import org.apache.tools.ant.types.Commandline;
027:
028: import com.metaboss.sdlctools.applications.anttasks.builder.MetaBossBuilderTask;
029: import com.metaboss.sdlctools.applications.anttasks.builder.ToolInvocationDefinition;
030: import com.metaboss.util.ObjectUtils;
031:
032: /** This definition is responsible for invocation of the 'exec' ant task */
033: public class SystemCommandInvocationDefinition extends
034: ToolInvocationDefinition {
035: // The command to execute
036: private String mExecutable = null;
037: // Directory from where to run the executable
038: private String mDirectory = null;
039: // Fail or Not
040: private boolean mFailOnError = true;
041:
042: // Array of command line arguments
043: private List mArguments = new ArrayList();
044:
045: /** Public constructor for the invocation */
046: public SystemCommandInvocationDefinition(
047: MetaBossBuilderTask pOwnerTask, String pToolInvocationName) {
048: super (pOwnerTask, pToolInvocationName);
049: }
050:
051: /** Sets the executable to run */
052: public void setExecutable(String pExecutable) {
053: mExecutable = pExecutable;
054: }
055:
056: /** Set whether to propagate existing environment variables to the new process */
057: public void setDir(String pDirectory) {
058: mDirectory = pDirectory;
059: }
060:
061: /** Set fail on error attribute */
062: public void setFailOnError(boolean pFailOnError) {
063: mFailOnError = pFailOnError;
064: }
065:
066: /* ** Sets the Java class path */
067: public void addArgument(String pArgument) {
068: mArguments.add(pArgument);
069: }
070:
071: /** Overridden to compare details of the invocation */
072: public boolean equals(Object pOther) {
073: if (this == pOther)
074: return true;
075:
076: if (pOther == null)
077: return false;
078:
079: if ((pOther instanceof SystemCommandInvocationDefinition) == false)
080: return false;
081:
082: SystemCommandInvocationDefinition lOther = (SystemCommandInvocationDefinition) pOther;
083:
084: if (!ObjectUtils.equals(mExecutable, lOther.mExecutable))
085: return false;
086: if (!ObjectUtils.equals(mDirectory, lOther.mDirectory))
087: return false;
088: if (mFailOnError != lOther.mFailOnError)
089: return false;
090: if (!Arrays.equals(mArguments.toArray(), lOther.mArguments
091: .toArray()))
092: return false;
093:
094: return true; // Everything appears to be in order
095: }
096:
097: /** This method will have to invoke the generator */
098: public void invoke() throws BuildException {
099: MetaBossBuilderTask lOwnerTask = getOwnerTask();
100: Project lThisProject = lOwnerTask.getProject();
101: // Now create and execute the java compiler task
102: ExecTask lExecTask = (ExecTask) lThisProject.createTask("exec");
103: lExecTask.setTaskName(lOwnerTask.getTaskName());
104: if (mExecutable == null) {
105: throw new BuildException(
106: "Could not execute Ant Task (exec) due to no 'Executable' being set. Internal Exception.");
107: }
108:
109: lExecTask.setExecutable(mExecutable);
110:
111: lExecTask.setFailonerror(mFailOnError);
112: if (mDirectory != null) {
113: File lDir = new File(mDirectory);
114: lExecTask.setDir(lDir);
115: }
116: // Work on arguments and then roar like a lion.
117: for (Iterator lArgumentsIterator = mArguments.iterator(); lArgumentsIterator
118: .hasNext();) {
119: String lArgument = (String) lArgumentsIterator.next();
120: Commandline.Argument lTaskArgument = lExecTask.createArg();
121: lTaskArgument.setValue(lArgument);
122: }
123:
124: lExecTask.execute();
125: }
126: }
|