package net.sourceforge.cruisecontrol.bootstrappers;
import java.io.File;
import java.io.IOException;
import net.sourceforge.cruisecontrol.Bootstrapper;
import net.sourceforge.cruisecontrol.CruiseControlException;
import net.sourceforge.cruisecontrol.util.IO;
import net.sourceforge.cruisecontrol.util.Util;
import net.sourceforge.cruisecontrol.util.ValidationHelper;
import org.apache.log4j.Logger;
public class LockFileBootstrapper implements Bootstrapper {
private String path;
private String projectName;
private static final Logger LOG = Logger.getLogger(LockFileBootstrapper.class);
public void bootstrap() throws CruiseControlException {
File lock = new File(path);
try {
if (!lock.createNewFile()) {
String projectNameInFile = Util.readFileToString(lock);
if (!projectName.equalsIgnoreCase(projectNameInFile)) {
String message = "Lock file [" + path + "] already exists from project " + projectNameInFile
+ " , aborting build attempt.";
throw new CruiseControlException(message);
} else {
LOG.debug("Lock file [" + path + "] already exists but project names match");
}
} else {
IO.write(lock, projectName);
LOG.debug("Created lock file [" + path + "]");
lock.deleteOnExit();
}
} catch (IOException e) {
throw new CruiseControlException(e);
}
}
public void validate() throws CruiseControlException {
ValidationHelper.assertIsSet(path, "lockfile", LockFileBootstrapper.class);
ValidationHelper.assertIsSet(projectName, "projectName", LockFileBootstrapper.class);
}
public void setLockFile(String path) {
this.path = path;
}
public void setProjectName(String name) {
projectName = name;
}
}