package hudson.plugins.descriptionsetter;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import hudson.Extension;
import hudson.model.Action;
import hudson.model.Job;
import hudson.model.JobProperty;
import hudson.model.JobPropertyDescriptor;
import hudson.model.Run;
import hudson.model.Descriptor.FormException;
public class JobByDescription extends JobProperty<Job<?,?>>{
@Override
public Action getJobAction(Job<?, ?> job) {
return new JobByDescriptionAction(owner);
}
@Extension
public static class DescriptorImpl extends JobPropertyDescriptor {
public DescriptorImpl() {
super(JobByDescription.class);
}
@Override
public boolean isApplicable(Class<? extends Job> arg0) {
return true;
}
@Override
public String getDisplayName() {
return "Allow getting a build by description";
}
@Override
public JobProperty<?> newInstance(StaplerRequest req,
JSONObject formData) throws FormException {
return new JobByDescription();
}
}
public static class JobByDescriptionAction implements Action {
private Job<?, ?> owner;
public JobByDescriptionAction(Job<?, ?> owner) {
this.owner = owner;
}
public String getDisplayName() {
return null;
}
public String getIconFileName() {
return null;
}
public String getUrlName() {
return "by-description";
}
public Object getDynamic(String token, StaplerRequest req, StaplerResponse rsp) {
for (Run<?,?> run: owner.getBuilds()) {
DescriptionSetterAction action = run.getAction(DescriptionSetterAction.class);
if (action != null && token.equals(action.getDescription())) {
return run;
}
}
return null;
}
}
}