package com.coravy.hudson.plugins.github; 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; /** * Stores the github related project properties. * <p> * As of now this is only the URL to the github project. * * @todo Should we store the GithubUrl instead of the String? * @author Stefan Saasen <stefan@coravy.com> */ public final class GithubProjectProperty extends JobProperty<AbstractProject<?, ?>> { /** * This will the URL to the project main branch. */ private String projectUrl; @DataBoundConstructor public GithubProjectProperty(String projectUrl) { this.projectUrl = new GithubUrl(projectUrl).baseUrl(); } /** * @return the projectUrl */ public GithubUrl getProjectUrl() { return new GithubUrl(projectUrl); } @Override public Action getJobAction(AbstractProject<?, ?> job) { if (null != projectUrl) { return new GithubLinkAction(this); } return null; } /* @Override public JobPropertyDescriptor getDescriptor() { return DESCRIPTOR; } public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl(); */ @Extension public static final class DescriptorImpl extends JobPropertyDescriptor { public DescriptorImpl() { super(GithubProjectProperty.class); load(); } public boolean isApplicable(Class<? extends Job> jobType) { return AbstractProject.class.isAssignableFrom(jobType); } public String getDisplayName() { return "Github project page"; } @Override public JobProperty<?> newInstance(StaplerRequest req, JSONObject formData) throws FormException { GithubProjectProperty tpp = req.bindJSON( GithubProjectProperty.class, formData); if (tpp.projectUrl == null) { tpp = null; // not configured } return tpp; } } }