View Javadoc
1 /* TaskControl.java */ 2 3 package org.quilt.frontend.ant; 4 5 import java.io.File; 6 import java.io.OutputStream; 7 import java.util.Vector; 8 9 import org.apache.tools.ant.BuildException; 10 import org.apache.tools.ant.Project; 11 import org.apache.tools.ant.Task; 12 import org.apache.tools.ant.taskdefs.ExecuteWatchdog; 13 import org.apache.tools.ant.taskdefs.LogOutputStream; 14 import org.apache.tools.ant.types.Commandline; 15 import org.apache.tools.ant.types.CommandlineJava; 16 import org.apache.tools.ant.types.Environment; 17 import org.apache.tools.ant.types.Path; 18 19 import org.quilt.cl.QuiltClassLoader; 20 import org.quilt.framework.QuiltTest; 21 import org.quilt.reports.FmtSelector; 22 import org.quilt.runner.Runner; 23 24 ///////////////////////////////////////////////////////////////////// 25 // NEEDS A LOT OF ATTENTION 26 ///////////////////////////////////////////////////////////////////// 27 28 /*** 29 * Run control parameters from the Ant build.xml file. 30 */ 31 public class TaskControl { 32 33 // set by constructor or created at construction //////////////// 34 /*** Command line, clone of which is used to fork tests. */ 35 private CommandlineJava commandline 36 = new CommandlineJava(); 37 /*** Run-time environment for command line. */ 38 private Environment env = new Environment(); 39 40 /*** The running Task. */ 41 private QuiltTask task; 42 43 // values assigned by Ant using add/create/set ////////////////// 44 private File dir = null; 45 private Vector formatters = new Vector(); 46 private boolean includeAntRuntime = true; 47 private boolean mockExec = false; 48 private boolean newEnvironment = false; 49 private boolean showOutput = false; 50 private boolean summary = false; // printsummary 51 private Vector tests = new Vector(); 52 private Long timeout = null; 53 54 // ancillary variables ////////////////////////////////////////// 55 private Path antRuntimeClasses = null; 56 private Runner runner = null; 57 private String summaryValue = ""; 58 59 // Quilt-specific, not available from Ant /////////////////////// 60 protected QuiltClassLoader loader = null; 61 62 ///////////////////////////////////////////////////////////////// 63 /*** No-arg constructor for clone() */ 64 private TaskControl () { } 65 66 /*** 67 * Constructor. 68 * @param t The QuiltTask being executed. 69 */ 70 public TaskControl (QuiltTask t) { 71 task = t; 72 } 73 // ////////////////////////////////////////////////////////////// 74 // ADD/CREATE/SET METHODS. Please keep in 75 // alphabetical order by the name of the variable being set (so 76 // addXYZ sorts after createABC). 77 // ////////////////////////////////////////////////////////////// 78 public void setAntRuntimeClasses (Path p) { 79 antRuntimeClasses = p; 80 } 81 public Path createClasspath() { 82 return commandline.createClasspath(task.getProject()).createPath(); 83 } 84 public void setCommandline (CommandlineJava cmd) { 85 commandline = cmd; 86 } 87 public void setDir(File dir) { 88 this.dir = dir; 89 } 90 public void addEnv(Environment.Variable var) { 91 env.addVariable(var); 92 } 93 94 public void addFormatter(FmtSelector fs) { 95 formatters.addElement(fs); 96 } 97 public void setFormatters (Vector v) { 98 formatters = v; 99 } 100 101 public void setIncludeAntRuntime(boolean b) { 102 includeAntRuntime = b; 103 } 104 public void setJvm(String value) { 105 commandline.setVm(value); 106 } 107 public Commandline.Argument createJvmarg() { 108 return commandline.createVmArgument(); 109 } 110 // not for use from Ant 111 public void setLoader (QuiltClassLoader qcl) { 112 loader = qcl; 113 } 114 public void setMaxmemory(String max) { 115 commandline.setMaxmemory(max); 116 } 117 public void setMockExec(boolean b) { 118 mockExec = b; 119 } 120 public void setNewEnvironment(boolean newenv) { 121 newEnvironment = newenv; 122 } 123 124 public void setPrintsummary(SummaryAttribute value) { 125 summaryValue = value.getValue(); 126 summary = value.asBoolean(); 127 } 128 public void setRunner (Runner r) { 129 runner = r; 130 } 131 public void setShowOutput (boolean b) { 132 showOutput = b; 133 } 134 public void setSummary(boolean b) { 135 summary = b; 136 } 137 public void setSummaryValue (String s) { 138 summaryValue = s; 139 } 140 141 public void addSysproperty(Environment.Variable sysp) { 142 commandline.addSysproperty(sysp); 143 } 144 public void addTest(QuiltTest t) { 145 tests.addElement(t); 146 } 147 public void setTests (Vector v) { 148 tests = v; 149 } 150 public void setTask(QuiltTask t) { 151 task = t; 152 } 153 public void setTimeout(Long value) { 154 timeout = value; 155 } 156 // GET METHODS ////////////////////////////////////////////////// 157 public CommandlineJava getCommandline() { return commandline; } 158 public File getDir() { return dir; } 159 public Environment getEnv() { return env; } 160 public Vector getFormatters() { return formatters; } 161 public boolean getIncludeAntRuntime() { return includeAntRuntime;} 162 public QuiltClassLoader getLoader() { return loader; } 163 public boolean getMockExec() { return mockExec; } 164 public boolean getNewEnvironment() { return newEnvironment; } 165 public boolean getSummary() { return summary; } 166 public Task getTask() { return task; } 167 public Vector getTests() { return tests; } 168 public Long getTimeout() { return timeout; } 169 170 public Path getAntRuntimeClasses() { return antRuntimeClasses;} 171 public Runner getRunner() { return runner; } 172 public String getSummaryValue() { return summaryValue; } 173 174 // I/O HANDLING ///////////////////////////////////////////////// 175 void handleOutput(String line) { 176 if (runner != null) { 177 runner.handleOutput(line); 178 if (showOutput) { 179 task.handleTheOutput(line); 180 } 181 } else { 182 task.handleTheOutput(line); 183 } 184 } 185 void handleFlush(String line) { 186 if (runner != null) { 187 runner.handleFlush(line); 188 if (showOutput) { 189 task.handleTheFlush(line); 190 } 191 } else { 192 task.handleTheFlush(line); 193 } 194 } 195 void handleErrorOutput(String line) { 196 if (runner != null) { 197 runner.handleErrorOutput(line); 198 if (showOutput) { 199 task.handleTheErrorOutput(line); 200 } 201 } else { 202 task.handleTheErrorOutput(line); 203 } 204 } 205 void handleErrorFlush(String line) { 206 if (runner != null) { 207 runner.handleErrorFlush(line); 208 if (showOutput) { 209 task.handleTheErrorFlush(line); 210 } 211 } else { 212 task.handleTheErrorFlush(line); 213 } 214 } 215 216 OutputStream getDefaultOutput(){ 217 return new LogOutputStream(task, Project.MSG_INFO); 218 } 219 FmtSelector[] mergeSelectors(QuiltTest test){ 220 Vector fsVector = (Vector) getFormatters().clone(); 221 test.addFormattersTo(fsVector); 222 FmtSelector[] fsArray = 223 new FmtSelector[fsVector.size()]; 224 fsVector.copyInto(fsArray); 225 return fsArray; 226 } 227 File getOutput(FmtSelector fs, QuiltTest test){ 228 if (fs.getUseFile()) { 229 String filename = test.getOutfile() + fs.getExtension(); 230 File destFile = new File(test.getTodir(), filename); 231 String absFilename = destFile.getAbsolutePath(); 232 return task.getProject().resolveFile(absFilename); 233 } 234 return null; 235 } 236 ExecuteWatchdog createWatchdog() throws BuildException { 237 if (timeout == null){ 238 return null; 239 } 240 return new ExecuteWatchdog(timeout.longValue()); 241 } 242 243 // EQUALS() ///////////////////////////////////////////////////// 244 public boolean equals( TaskControl tc2 ) { 245 if (this == tc2) 246 return true; 247 else 248 return 249 formatters. equals( tc2.getFormatters() ) && 250 tests. equals( tc2.getTests() ) && 251 252 task == tc2.getTask() && 253 commandline == tc2.getCommandline() && 254 dir == tc2.getDir() && 255 includeAntRuntime == tc2.getIncludeAntRuntime() && 256 loader == tc2.getLoader() && 257 mockExec == tc2.getMockExec() && 258 newEnvironment == tc2.getNewEnvironment() && 259 summary == tc2.getSummary() && 260 timeout == tc2.getTimeout() && 261 antRuntimeClasses == tc2.getAntRuntimeClasses() && 262 runner == tc2.getRunner() && 263 summaryValue.equals(tc2.getSummaryValue()); 264 } 265 // CLONE() ////////////////////////////////////////////////////// 266 public Object clone() { 267 TaskControl tc2 = new TaskControl(); 268 tc2.setTask(task); 269 tc2.setCommandline(commandline); 270 271 // the Vectors 272 tc2.setFormatters((Vector)formatters.clone()); 273 tc2.setTests((Vector)tests.clone()); 274 275 tc2.setDir(dir); 276 tc2.setIncludeAntRuntime(includeAntRuntime); 277 tc2.setLoader(loader); 278 tc2.setMockExec(mockExec); 279 tc2.setNewEnvironment(newEnvironment); 280 tc2.setSummary(summary); 281 tc2.setTimeout(timeout); 282 tc2.setAntRuntimeClasses(antRuntimeClasses); 283 tc2.setRunner(runner); 284 tc2.setSummaryValue(summaryValue); 285 return tc2; 286 } 287 // TOSTRING () ////////////////////////////////////////////////// 288 public String toString() { 289 // the Vectors 290 String f = ""; 291 for (int i = 0; i < formatters.size(); i++) 292 f += formatters.elementAt(i) + " "; 293 294 String s = 295 " task: " + task.getTaskName() 296 + "\n antRuntimeClasses: " + antRuntimeClasses 297 + "\n commandline: " 298 + "\n as string: " + commandline 299 + "\n classname: " + commandline.getClassname() 300 + "\n classpath: " + commandline.getClasspath() 301 + "\n dir: " + dir 302 + "\n includeAntRuntime: " + includeAntRuntime 303 // loader ignored 304 + "\n mockExec: " + mockExec 305 + "\n newEnvironment: " + newEnvironment 306 + "\n runner: " + runner 307 + "\n summary: " + summary 308 + "\n summaryValue: " + summaryValue 309 + "\n timeout: " + timeout 310 + "\n formatters: " + f 311 + "\n ---------------------------------------------\n"; 312 return s; 313 } 314 }

This page was automatically generated by Maven