package de.codecentric.jenkins.dashboard;
import hudson.model.Descriptor;
import hudson.model.ViewDescriptor;
import hudson.util.FormValidation;
import hudson.util.ListBoxModel;
import java.net.URI;
import java.util.List;
import java.util.logging.Logger;
import jenkins.model.Jenkins;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.StaplerRequest;
import org.springframework.util.StringUtils;
import de.codecentric.jenkins.dashboard.impl.repositories.RepositoryTypes;
import de.codecentric.jenkins.dashboard.impl.repositories.artifactory.ArtifactoryConnector;
/**
* Descriptor for the Dashboard View. This descriptor object contains the
* metadata about the Dashboard View.
*/
public final class DashboardViewDescriptor extends ViewDescriptor {
private final static Logger LOGGER = Logger.getLogger(DashboardViewDescriptor.class.getName());
private String repositoryType;
private String repositoryRestUri = "";
private String username = "";
private String password = "";
public DashboardViewDescriptor() {
super(DashboardView.class); // Have to provide the original class
// because there is no enclosing class
load();
}
@Override
public String getDisplayName() {
return Messages.DashboardView_DisplayName();
}
// All types that the user can add
public List<Environment.EnvironmentDescriptor> getEnvironmentDescriptors() {
return Jenkins.getInstance().getDescriptorList(Environment.class);
}
@Override
public String getHelpFile() {
return "/plugin/jenkins-deployment-dashboard-plugin/help.html";
}
public ListBoxModel doFillRepositoryTypeItems() {
final ListBoxModel model = new ListBoxModel();
for (RepositoryTypes value : RepositoryTypes.values()) {
model.add(value.getDescription(), value.getid());
}
return model;
}
public FormValidation doCheckArtifactoryRestUri(@QueryParameter final String artifactoryRestUri) {
return FormValidation.ok();
}
public FormValidation doCheckUsername(@QueryParameter final String username) {
if (StringUtils.hasText(username)) {
return FormValidation.ok();
}
return FormValidation.warning(Messages.DashboardView_artifactoryUsername());
}
public FormValidation doCheckPassword(@QueryParameter final String password) {
if (StringUtils.hasText(password)) {
return FormValidation.ok();
}
return FormValidation.warning(Messages.DashboardView_artifactoryPassword());
}
public FormValidation doTestRepositoryConnection(@QueryParameter("repositoryRestUri") final String repositoryRestUri, @QueryParameter("username") final String username,
@QueryParameter("password") final String password) {
LOGGER.info("Verify Repository connection for URI " + repositoryRestUri);
FormValidation validationResult;
try {
URI repositoryURI = new URI(repositoryRestUri);
ArtifactoryConnector repository = new ArtifactoryConnector(username, password, repositoryURI);
LOGGER.info("Artifactory config valid? " + repository.canConnect());
if (repository.canConnect()) {
validationResult = FormValidation.ok(Messages.DashboardView_artifactoryConnectionSuccessful());
} else {
validationResult = FormValidation.warning(Messages.DashboardView_artifactoryConnectionFailed() + repositoryRestUri);
}
} catch (Exception e) {
LOGGER.severe(e.getMessage());
validationResult = FormValidation.error(Messages.DashboardView_artifactoryConnectionCritical() + e.getMessage());
}
return validationResult;
}
@Override
public boolean configure(StaplerRequest req, JSONObject json) throws Descriptor.FormException {
req.bindJSON(this, json.getJSONObject("deployment-dashboard"));
save();
return true;
}
public String getRepositoryType() {
return repositoryType;
}
public void setRepositoryType(String repositoryType) {
this.repositoryType = repositoryType;
}
public String getRepositoryRestUri() {
return repositoryRestUri;
}
public void setRepositoryRestUri(final String repositoryRestUri) {
this.repositoryRestUri = repositoryRestUri;
}
public String getUsername() {
return username;
}
public void setUsername(final String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(final String password) {
this.password = password;
}
}