package de.saumya.mojo.tests; import java.io.File; import java.io.IOException; import java.lang.reflect.Method; import java.util.List; import java.util.Properties; import org.codehaus.plexus.util.FileUtils; public abstract class AbstractTestScriptFactory implements TestScriptFactory { protected List<String> classpathElements; protected File summaryReport; protected File outputDir; protected File baseDir; protected File sourceDir; protected File reportPath; protected Properties systemProperties; protected File gemHome; protected File[] gemPaths; public void setClasspathElements(List<String> classpathElements) { this.classpathElements = classpathElements; } public void setSummaryReport(File summaryReport) { this.summaryReport = summaryReport; } public void setOutputDir(File outputDir) { this.outputDir = outputDir; } public void setBaseDir(File baseDir) { this.baseDir = baseDir == null ? new File(".") : baseDir; } public void setSourceDir(File sourceDir) { this.sourceDir = sourceDir; } public void setReportPath(File reportPath) { this.reportPath = reportPath; } public void setSystemProperties(Properties systemProperties) { this.systemProperties = systemProperties; } public void setGemHome(File gemHome) { this.gemHome = gemHome; } public void setGemPaths(File[] gemPaths) { this.gemPaths = gemPaths; } protected abstract String getScriptName(); public File getScriptFile() { return new File(new File(outputDir, "bin"), getScriptName()); } public void emit() throws IOException { String script = getFullScript(); File scriptFile = getScriptFile(); scriptFile.getParentFile().mkdirs(); FileUtils.fileWrite(scriptFile.getAbsolutePath(), "UTF-8", script); try { // use reflection so it compiles with java1.5 as well but does not set executable Method m = scriptFile.getClass().getMethod("setExecutable", boolean.class); m.invoke(scriptFile, new Boolean(true)); } catch (Exception e) { //ignore for the time being } } }