package net.sourceforge.cruisecontrol.builders;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import net.sourceforge.cruisecontrol.CruiseControlException;
import net.sourceforge.cruisecontrol.util.Commandline;
public class PhingScript implements Script {
private Map<String, String> buildProperties;
private String phingScript;
private String loggerClassName;
private String tempFileName = "log.xml";
private boolean useLogger;
private boolean useQuiet;
private boolean useDebug;
private String buildFile = "build.xml";
private List<Property> properties;
private String target = "";
private int exitCode;
/**
* construct the command that we're going to execute.
*
* @return Commandline holding command to be executed
* @throws CruiseControlException on unquotable attributes
*/
public Commandline buildCommandline() throws CruiseControlException {
Commandline cmdLine = new Commandline();
cmdLine.setExecutable(phingScript);
if (useLogger) {
cmdLine.createArguments("-logger", getLoggerClassName());
cmdLine.createArguments("-logfile", tempFileName);
} else {
cmdLine.createArguments("-listener", getLoggerClassName());
cmdLine.createArgument("-DXmlLogger.file=" + tempFileName);
}
// -debug and -quiet only affect loggers, not listeners: when we use the loggerClassName as
// a listener, they will affect the default logger that writes to the console
if (useDebug) {
cmdLine.createArgument("-debug");
} else if (useQuiet) {
cmdLine.createArgument("-quiet");
}
for (final Map.Entry<String, String> property : buildProperties.entrySet()) {
final String value = property.getValue();
if (!"".equals(value)) {
cmdLine.createArgument("-D" + property.getKey() + "=" + value);
}
}
for (Property property : properties) {
cmdLine.createArgument("-D" + property.getName() + "=" + property.getValue());
}
cmdLine.createArguments("-buildfile", buildFile);
StringTokenizer targets = new StringTokenizer(target);
while (targets.hasMoreTokens()) {
cmdLine.createArgument(targets.nextToken());
}
System.out.println(cmdLine.toString());
return cmdLine;
}
/**
* @param buildProperties The buildProperties to set.
*/
public void setBuildProperties(final Map<String, String> buildProperties) {
this.buildProperties = buildProperties;
}
/**
* @return Returns the loggerClassName.
*/
public String getLoggerClassName() {
return loggerClassName;
}
/**
* @param loggerClassName The loggerClassName to set.
*/
public void setLoggerClassName(String loggerClassName) {
this.loggerClassName = loggerClassName;
}
/**
* @param antScript The antScript to set.
*/
public void setPhingScript(String antScript) {
this.phingScript = antScript;
}
/**
* @param buildFile The buildFile to set.
*/
public void setBuildFile(String buildFile) {
this.buildFile = buildFile;
}
/**
* @param tempFileName The tempFileName to set.
*/
public void setTempFileName(String tempFileName) {
this.tempFileName = tempFileName;
}
/**
* @param useDebug The useDebug to set.
*/
public void setUseDebug(boolean useDebug) {
this.useDebug = useDebug;
}
/**
* @param useLogger The useLogger to set.
*/
public void setUseLogger(boolean useLogger) {
this.useLogger = useLogger;
}
/**
* @param useQuiet The useQuiet to set.
*/
public void setUseQuiet(boolean useQuiet) {
this.useQuiet = useQuiet;
}
/**
* @param properties The properties to set.
*/
public void setProperties(List<Property> properties) {
this.properties = properties;
}
/**
* @param target The target to set.
*/
public void setTarget(String target) {
this.target = target;
}
/**
* @return Returns the exitCode.
*/
public int getExitCode() {
return exitCode;
}
/**
* @param exitCode The exitCode to set.
*/
public void setExitCode(int exitCode) {
this.exitCode = exitCode;
}
}