package hudson.plugins.backlog;
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.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.StaplerRequest;
/**
* Property for {@link AbstractProject} that stores the associated Backlog website URL.
*
* @see http://d.hatena.ne.jp/cactusman/20090328/p1
* @author dragon3
*/
public final class BacklogProjectProperty extends JobProperty<AbstractProject<?, ?>> {
public final String spaceURL;
@DataBoundConstructor
public BacklogProjectProperty(String spaceURL) {
// normalize
if (spaceURL == null || spaceURL.length() == 0)
spaceURL = null;
else {
if (!spaceURL.endsWith("/"))
spaceURL += '/';
}
this.spaceURL = spaceURL;
}
@Override
public Action getJobAction(AbstractProject<?,?> job) {
return new BacklogLinkAction(this);
}
@Extension
public static final class DescriptorImpl extends JobPropertyDescriptor {
public DescriptorImpl() {
super(BacklogProjectProperty.class);
load();
}
@Override
public boolean isApplicable(Class<? extends Job> jobType) {
return AbstractProject.class.isAssignableFrom(jobType);
}
public String getDisplayName() {
return "Associated Backlog website";
}
@Override
public JobProperty<?> newInstance(StaplerRequest req, JSONObject formData) throws FormException {
BacklogProjectProperty bpp = req.bindJSON(BacklogProjectProperty.class, formData);
if (bpp.spaceURL == null)
bpp = null; // not configured
return bpp;
}
}
}