package hudson.plugins.phing;
import hudson.CopyOnWrite;
import hudson.model.Descriptor;
import hudson.model.Hudson;
import hudson.tasks.Builder;
import hudson.util.FormValidation;
import java.io.File;
import java.util.List;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.StaplerRequest;
/**
* Descriptor for Phing.
*
* @author Seiji Sogabe
*/
public final class PhingDescriptor extends Descriptor<Builder> {
@CopyOnWrite
private volatile PhingInstallation[] installations =
new PhingInstallation[0];
public PhingDescriptor() {
super(PhingBuilder.class);
load();
}
@Override
public boolean configure(final StaplerRequest req, final JSONObject formData) throws FormException {
final List<PhingInstallation> list = req.bindJSONToList(PhingInstallation.class,
formData.get("phing"));
installations = list.toArray(new PhingInstallation[list.size()]);
save();
return true;
}
@Override
public String getHelpFile() {
return "/plugin/phing/help.html";
}
@Override
public String getDisplayName() {
return Messages.Phing_DisplayName();
}
public PhingInstallation[] getInstallations() {
return installations;
}
@Override
public PhingBuilder newInstance(final StaplerRequest req, final JSONObject formData) throws FormException {
return req.bindJSON(PhingBuilder.class, formData);
}
public FormValidation doCheckPhingHome(@QueryParameter File value) {
if (!Hudson.getInstance().hasPermission(Hudson.ADMINISTER)) {
return FormValidation.ok();
}
if ("".equals(value.getPath().trim())) {
return FormValidation.error(Messages.Phing_PhingHomeRequired());
}
if (!value.isDirectory()) {
return FormValidation.error(Messages.Phing_NotAPHPCommand(value));
}
final File phing = new File(value, "bin" + File.separator + "phing.php");
if (!phing.exists()) {
return FormValidation.error(Messages.Phing_NotAPhingDirectory(value));
}
return FormValidation.ok();
}
public FormValidation doCheckPhpCommand(@QueryParameter File value) {
if (!Hudson.getInstance().hasPermission(Hudson.ADMINISTER)) {
return FormValidation.ok();
}
if ("".equals(value.getPath().trim())) {
return FormValidation.ok();
}
if (!value.exists()) {
return FormValidation.error(Messages.Phing_NotAPHPCommand(value));
}
if (value.isDirectory()) {
return FormValidation.error(Messages.Phing_DirectoryNotAllowed(value));
}
return FormValidation.ok();
}
}