package hudson.plugins.codeplex;
import hudson.Extension;
import hudson.Util;
import hudson.model.AbstractProject;
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 CodePlex project name.
*
* @author Erik Ramfelt
*/
public final class CodePlexProjectProperty extends JobProperty<AbstractProject<?,?>> {
private static final String CODEPLEX_URL_STR = "http://www.codeplex.com/";
/**
* CodePlex project name.
*
* Null if this is not configured yet.
*/
public final String projectName;
@DataBoundConstructor
public CodePlexProjectProperty(String projectName) {
// normalize
this.projectName = Util.fixEmptyAndTrim(projectName);
}
/**
* Returns the project name for the codeplex project property
* @return the project name
*/
public String getProjectName() {
return projectName;
}
public String getProjectUrlString() {
return CODEPLEX_URL_STR + projectName + "/";
}
public String getSubversionRootUrlString() {
return String.format("https://%s.svn.codeplex.com/svn/", projectName);
}
@Extension
public static final class DescriptorImpl extends JobPropertyDescriptor {
public DescriptorImpl() {
super(CodePlexProjectProperty.class);
load();
}
@SuppressWarnings("unchecked") // because of the raw type in the method declaration
@Override
public boolean isApplicable(Class<? extends Job> jobType) {
return AbstractProject.class.isAssignableFrom(jobType);
}
@Override
public String getDisplayName() {
return "CodePlex project name";
}
@Override
public JobProperty<?> newInstance(StaplerRequest req, JSONObject formData) throws FormException {
if (Util.fixEmptyAndTrim(formData.getString("projectName")) != null) {
return super.newInstance(req, formData);
}
return null;
}
}
}