package hudson.plugins.redmine;
import hudson.Extension;
import hudson.model.AbstractProject;
import hudson.model.Action;
import hudson.model.Job;
import hudson.model.JobProperty;
import hudson.model.JobPropertyDescriptor;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.StaplerRequest;
/**
* Property for {@link AbstractProject} that stores the associated Redmine website URL.
*
* @author gaooh
* @date 2008/10/13
*/
public class RedmineProjectProperty extends JobProperty<AbstractProject<?, ?>> {
public final String redmineWebsite;
public final String projectName;
public final Boolean redmineVersion;
@DataBoundConstructor
public RedmineProjectProperty(String redmineWebsite, String projectName, Boolean redmineVersion) {
if (StringUtils.isBlank(redmineWebsite)) {
redmineWebsite = null;
} else {
if (!redmineWebsite.endsWith("/")) {
redmineWebsite += '/';
}
}
this.redmineWebsite = redmineWebsite;
this.projectName = projectName;
this.redmineVersion = redmineVersion;
}
@Override
public Action getJobAction(AbstractProject<?,?> job) {
return new RedmineLinkAction(this);
}
@Override
public JobPropertyDescriptor getDescriptor() {
return DESCRIPTOR;
}
@Extension
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
public static final class DescriptorImpl extends JobPropertyDescriptor {
private transient String redmineWebsite;
public DescriptorImpl() {
super(RedmineProjectProperty.class);
load();
}
@Override
public boolean isApplicable(Class<? extends Job> jobType) {
return AbstractProject.class.isAssignableFrom(jobType);
}
public String getDisplayName() {
return "Associated Redmine website";
}
@Override
public JobProperty<?> newInstance(StaplerRequest req, JSONObject formData) throws FormException {
try {
String redmineWebSite = req.getParameter("redmine.redmineWebsite");
String projectName = req.getParameter("redmine.projectName");
String redmineVersion = req.getParameter("redmine.version");
Boolean version = false;
if(StringUtils.isNotBlank(redmineVersion) && redmineVersion.equals("on")) {
version = true;
}
return new RedmineProjectProperty(redmineWebSite, projectName, version);
} catch (IllegalArgumentException e) {
throw new FormException("redmine.redmineWebsite", "redmine.redmineWebSite");
}
}
}
}