package hudson.plugins.kagemai;
import hudson.Extension;
import hudson.Util;
import hudson.model.Hudson;
import hudson.model.Job;
import hudson.model.JobProperty;
import hudson.model.JobPropertyDescriptor;
import hudson.util.CopyOnWriteList;
import hudson.util.FormValidation;
import java.io.IOException;
import java.net.URL;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.StaplerRequest;
/**
* @author yamkazu
*/
public class KagemaiProjectProperty extends JobProperty<Job<?, ?>> {
private String siteName;
private String projectId;
private String regex;
private boolean linkEnabled;
@Extension
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
@DataBoundConstructor
public KagemaiProjectProperty(String siteName, String projectId,
String regex, boolean linkEnabled) {
String name = siteName;
if (siteName == null) {
final KagemaiSite[] sites = DESCRIPTOR.getSites();
if (sites.length > 0) {
name = sites[0].getName();
}
}
this.siteName = Util.fixEmptyAndTrim(name);
this.projectId = Util.fixEmptyAndTrim(projectId);
this.regex = Util.fixEmptyAndTrim(regex);
this.linkEnabled = linkEnabled;
}
public String getSiteName() {
return siteName;
}
public String getProjectId() {
return projectId;
}
public String getRegex() {
if (StringUtils.isEmpty(regex)) {
this.regex = "\\b[0-9.]*[0-9]\\b";
}
return regex;
}
public boolean isLinkEnabled() {
return linkEnabled;
}
public KagemaiSession getKagemaiSession() {
return new KagemaiSession(getSite().getBaseUrl(), projectId, getSite()
.getBasicUserName(), getSite().getBasicPassword(), getSite()
.getEncode());
}
public KagemaiSite getSite() {
KagemaiSite[] sites = DESCRIPTOR.getSites();
if (siteName == null && sites.length > 0) {
return sites[0];
}
for (final KagemaiSite site : sites) {
if (site.getName().equals(siteName)) {
return site;
}
}
return null;
}
/**
* @see hudson.model.JobProperty#getDescriptor()
*/
@Override
public JobPropertyDescriptor getDescriptor() {
return DESCRIPTOR;
}
/**
* @author yamkazu
*
*/
public static final class DescriptorImpl extends JobPropertyDescriptor {
private final CopyOnWriteList<KagemaiSite> sites = new CopyOnWriteList<KagemaiSite>();
DescriptorImpl() {
super(KagemaiProjectProperty.class);
load();
}
@Override
public String getDisplayName() {
return "Kagemai";
}
@Override
public JobProperty<?> newInstance(StaplerRequest req,
JSONObject formData) throws FormException {
KagemaiProjectProperty kagemaiProjectProperty = req.bindParameters(
KagemaiProjectProperty.class, "kagemai.");
if (kagemaiProjectProperty.siteName == null) {
kagemaiProjectProperty = null;
}
return kagemaiProjectProperty;
}
@Override
public boolean configure(StaplerRequest req, JSONObject formData) throws FormException {
sites.replaceBy(req.bindParametersToList(KagemaiSite.class,
"kagemai."));
save();
return true;
}
public KagemaiSite[] getSites() {
return sites.toArray(new KagemaiSite[0]);
}
public FormValidation doRegexCheck(@QueryParameter String value) {
String regex = Util.fixEmpty(value);
if (regex == null) {
return FormValidation.ok();
}
try {
Pattern.compile(regex);
return FormValidation.ok();
} catch (PatternSyntaxException e) {
return FormValidation.error(Messages.error_regex());
}
}
public FormValidation doLoginCheck(@QueryParameter String baseUrl,
@QueryParameter String basicUserName, @QueryParameter String basicPassword)
throws IOException {
//if (!Hudson.getInstance().hasPermission(Hudson.ADMINISTER)) return FormValidation.ok();
baseUrl = Util.fixEmpty(baseUrl);
basicUserName = Util.fixEmpty(basicUserName);
basicPassword = Util.fixEmpty(basicPassword);
if (StringUtils.isEmpty(baseUrl)) {
return FormValidation.ok();
}
KagemaiSession session = new KagemaiSession(
new URL(baseUrl), basicUserName, basicPassword);
if (session.isConnect()) {
return FormValidation.ok();
} else {
return FormValidation.error(Messages.error_login());
}
}
}
}