/*
* Copyright 2013 Qubell, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.qubell.jenkinsci.plugins.qubell;
import hudson.Extension;
import hudson.util.FormValidation;
import jenkins.model.GlobalConfiguration;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.StaplerRequest;
import javax.servlet.ServletException;
import java.io.IOException;
/**
* The plugin configuration holder, see {@link GlobalConfiguration} for details
* @author Alex Krupnov
*/
@Extension
public class Configuration extends GlobalConfiguration {
private String url = DEFAULT_URL;
private String login;
private String password;
private int statusPollingInterval = DEFAULT_POLLING_INTERVAL;
private boolean skipCertificateChecks;
private boolean enableMessageLogging = false;
public static final int DEFAULT_POLLING_INTERVAL = 5;
public static final String DEFAULT_URL = "https://express.qubell.com/";
/**
* @return the Jenkins managed singleton for the configuration object
*/
public static Configuration get() {
return GlobalConfiguration.all().get(Configuration.class);
}
public Configuration() {
load();
}
@DataBoundConstructor
public Configuration(String url, boolean skipCertificateChecks, String login, String password, int statusPollingInterval, boolean enableMessageLogging) {
this.url = url;
this.login = login;
this.password = password;
this.statusPollingInterval = statusPollingInterval;
this.skipCertificateChecks = skipCertificateChecks;
this.enableMessageLogging = enableMessageLogging;
}
/**
* Loads configuration values from frm data
* @param req current request
* @param formData form data
* @return true when successfull
* @throws FormException
*/
@Override
public boolean configure(StaplerRequest req, JSONObject formData) throws FormException {
// To persist global configuration information,
// set that to properties and call save().
login = formData.getString("login");
password = formData.getString("password");
url = formData.getString("url");
statusPollingInterval = formData.getInt("statusPollingInterval");
skipCertificateChecks = formData.getBoolean("skipCertificateChecks");
enableMessageLogging = formData.getBoolean("enableMessageLogging");
// ^Can also use req.bindJSON(this, formData);
// (easier when there are many fields; need set* methods for this, like setUseFrench)
save();
return true;
}
/**
* Qubell api login
* @return string for email
*/
public String getLogin() {
return login;
}
/**
* If set to true, authority and other parameters of SSL certificate won't be checked
* @return true when check should be skipped
*/
public boolean isSkipCertificateChecks() {
return skipCertificateChecks;
}
/**
* Qubell user password
* @return string for password, not exposed to UI via native Jenkins password box
*/
public String getPassword() {
return password;
}
/**
* Base URL for Qubell instance
* @return url value
*/
public String getUrl() {
return url;
}
/**
* Polling interval for checking the instance status
* @return value in seconds
*/
public int getStatusPollingInterval() {
//Since int has default value, we can't use jelly's default for int fields, adding default on java code level
return statusPollingInterval;
}
/**
* When true, in and out messages are appended to CXF specific logger
* @return true when extra logging enabled, false otherwise
*/
public boolean isEnableMessageLogging() {
return enableMessageLogging;
}
/**
* Validates polling interval value: integer, greater then zero
*
* @param value string value of polling interval passed from configuration form
* @return jenkins validation container, see {@link hudson.util.FormValidation}
* @throws java.io.IOException
* @throws javax.servlet.ServletException
*/
public FormValidation doCheckStatusPollingInterval(@QueryParameter String value)
throws IOException, ServletException {
try {
int timeout = Integer.parseInt(value);
if (timeout <= 0) {
return FormValidation.error("Polling interval must be a positive integer value");
}
} catch (NumberFormatException nfe) {
return FormValidation.error("Polling interval must be a positive integer value");
}
return FormValidation.ok();
}
}