package org.hudson.serena;
import org.hudson.serena.model.Dimension10Installation;
import com.serena.dmclient.api.DimensionsConnection;
import hudson.Extension;
import hudson.model.Hudson;
import hudson.model.ModelObject;
import hudson.scm.SCMDescriptor;
import hudson.util.FormValidation;
import java.io.IOException;
import java.util.List;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.StaplerRequest;
/**
* Contains the list of configured Dimensions servers.
*
* @author Jose Noheda [jose.noheda@gmail.com]
*/
public class DimensionsDescriptor extends SCMDescriptor<DimensionsSCM> implements ModelObject {
private static final Logger LOGGER = Logger.getLogger(DimensionsDescriptor.class.getName());
@Extension
public static final DimensionsDescriptor DESCRIPTOR = new DimensionsDescriptor();
private List<Dimension10Installation> installations;
public DimensionsDescriptor() {
super(DimensionsSCM.class, null);
this.load();
}
@Override public final String getDisplayName() {
return "Dimensions 10";
}
@Override
public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
req.bindJSON(DESCRIPTOR, json);
DESCRIPTOR.save();
return true;
}
/**
* Tests the connection to a Dimensions server with the provided parameters. Useful for Form Validation.
*/
public FormValidation doTestConnection(@QueryParameter("server") final String server, @QueryParameter("dbName") final String dbName, @QueryParameter("dbConnection") final String dbConnection, @QueryParameter("user") final String user, @QueryParameter("password") final String password) throws IOException, ServletException {
if (!Hudson.getInstance().hasPermission(Hudson.ADMINISTER)) return FormValidation.ok();
LOGGER.info("Testing connection " + server + ":" + dbName + "@" + dbConnection + ":" + user);
try {
DimensionsConnection conn = ConnectionManager.getConnection(server, dbName, dbConnection, user, password);
conn.initialise();
ConnectionManager.close(conn);
return FormValidation.ok("Connection to [" + server + "] successful");
} catch (Exception e) {
return FormValidation.error("Connection error : " + e.getMessage());
}
}
/**
* Returns server connection data given an identifier.
*/
public Dimension10Installation getInstallation(String name) {
if ((getInstallations() != null) && (name != null)) {
for (Dimension10Installation installation : getInstallations()) {
if ((installation.getName() != null) && (installation.getName().equals(name))) {
return installation;
}
}
}
return null;
}
public List<Dimension10Installation> getInstallations() {
return DESCRIPTOR.installations;
}
public void setInstallations(List<Dimension10Installation> installations) {
DESCRIPTOR.installations = installations;
}
}