Skip to content

Commit

Permalink
[JENKINS-19316] added support for boolean parameters rendered via che…
Browse files Browse the repository at this point in the history
…ckboxes
  • Loading branch information
mcupak committed May 24, 2014
1 parent 545936d commit 0349984
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 34 deletions.
Expand Up @@ -6,8 +6,9 @@
import hudson.model.StringParameterValue;

public class BuildParameter {

static final String JOB_DEFAULT_PASSWORD_PLACEHOLDER = "job_default_password";
private boolean isPasswordParam;
private BuildParameterType type;
private String name, description, value;

public BuildParameter(String name, String description) {
Expand All @@ -16,10 +17,10 @@ public BuildParameter(String name, String description) {
}

public static boolean isDefaultPasswordPlaceholder(String candidate) {
if(candidate == null) {
return false;
}
return JOB_DEFAULT_PASSWORD_PLACEHOLDER.equals(candidate);
if (candidate == null) {
return false;
}
return JOB_DEFAULT_PASSWORD_PLACEHOLDER.equals(candidate);
}

public String getName() {
Expand All @@ -44,11 +45,12 @@ public void setValue(ParameterValue parameterValue) {
}
}

public void setPasswordParam(boolean isPasswordParam) {
this.isPasswordParam = isPasswordParam;
}

public boolean isPasswordParam() {
return isPasswordParam;
}
public BuildParameterType getType() {
return type;
}

public void setType(BuildParameterType type) {
this.type = type;
}

}
@@ -0,0 +1,12 @@
package org.jenkinsci.plugins.buildwithparameters;

/**
* Type of a build parameter.
*
* @author Miroslav Cupak (mirocupak@gmail.com)
* @version 1.0
*/
public enum BuildParameterType {

STRING, PASSWORD, TEXT, BOOLEAN, CHOICE;
}
@@ -1,8 +1,8 @@
package org.jenkinsci.plugins.buildwithparameters;


import hudson.model.AbstractProject;
import hudson.model.Action;
import hudson.model.BooleanParameterDefinition;
import hudson.model.Cause;
import hudson.model.CauseAction;
import hudson.model.Hudson;
Expand All @@ -13,30 +13,28 @@
import hudson.model.PasswordParameterDefinition;
import hudson.model.PasswordParameterValue;
import hudson.util.Secret;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.Stapler;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;

import javax.servlet.ServletException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class BuildWithParametersAction implements Action {

private final AbstractProject project;

public BuildWithParametersAction(AbstractProject project) {
this.project = project;
}


//////////////////
// //
// VIEW //
// //
//////////////////

public String getProjectName() {
return project.getName();
}
Expand All @@ -46,7 +44,13 @@ public List<BuildParameter> getAvailableParameters() {

for (ParameterDefinition parameterDefinition : getParameterDefinitions()) {
BuildParameter buildParameter = new BuildParameter(parameterDefinition.getName(), parameterDefinition.getDescription());
buildParameter.setPasswordParam(parameterDefinition.getClass().isAssignableFrom(PasswordParameterDefinition.class));
if (parameterDefinition.getClass().isAssignableFrom(PasswordParameterDefinition.class)) {
buildParameter.setType(BuildParameterType.PASSWORD);
} else if (parameterDefinition.getClass().isAssignableFrom(BooleanParameterDefinition.class)) {
buildParameter.setType(BuildParameterType.BOOLEAN);
} else {
buildParameter.setType(BuildParameterType.STRING);
}

try {
buildParameter.setValue(getParameterDefinitionValue(parameterDefinition));
Expand Down Expand Up @@ -76,13 +80,11 @@ public String getUrlName() {
return "parambuild";
}


//////////////////
// //
// SUBMISSION //
// //
//////////////////

public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
project.checkPermission(AbstractProject.BUILD);

Expand All @@ -92,7 +94,7 @@ public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOExc
if (!formData.isEmpty()) {
for (ParameterDefinition parameterDefinition : getParameterDefinitions()) {
ParameterValue parameterValue = parameterDefinition.createValue(req);
if(parameterValue.getClass().isAssignableFrom(PasswordParameterValue.class)) {
if (parameterValue.getClass().isAssignableFrom(PasswordParameterValue.class)) {
parameterValue = applyDefaultPassword(parameterDefinition, parameterValue);
}
// This will throw an exception if the provided value is not a valid option for the parameter.
Expand All @@ -105,31 +107,27 @@ public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOExc
rsp.sendRedirect("../");
}


ParameterValue applyDefaultPassword(ParameterDefinition parameterDefinition,
ParameterValue parameterValue) {
String jobPassword = getPasswordValue((PasswordParameterValue)parameterValue);
if(!BuildParameter.isDefaultPasswordPlaceholder(jobPassword)) {
String jobPassword = getPasswordValue((PasswordParameterValue) parameterValue);
if (!BuildParameter.isDefaultPasswordPlaceholder(jobPassword)) {
return parameterValue;
}
String jobDefaultPassword = getPasswordValue(((PasswordParameterValue) parameterDefinition.getDefaultParameterValue()));
ParameterValue passwordParameterValue = new PasswordParameterValue(parameterValue.getName(), jobDefaultPassword);
return passwordParameterValue;
}


static String getPasswordValue(PasswordParameterValue parameterValue) {
Secret secret = parameterValue.getValue();
return Secret.toString(secret);
}


//////////////////
// //
// HELPERS //
// //
//////////////////

private List<ParameterDefinition> getParameterDefinitions() {
ParametersDefinitionProperty property = (ParametersDefinitionProperty) project.getProperty(ParametersDefinitionProperty.class);
if (property != null && property.getParameterDefinitions() != null) {
Expand Down
Expand Up @@ -13,11 +13,14 @@
<f:entry title="${parameter.name}" description="${parameter.description}">
<div>
<j:choose>
<j:when test="${!parameter.passwordParam}">
<f:textbox name="${parameter.name}" value="${parameter.value}"/>
<j:when test="${parameter.type == 'PASSWORD'}">
<f:password name="${parameter.name}" value="${parameter.value}"/>
</j:when>
<j:when test="${parameter.type == 'BOOLEAN'}">
<f:checkbox name="value" checked="${parameter.value}" />
</j:when>
<j:otherwise>
<f:password name="${parameter.name}" value="${parameter.value}"/>
<f:textbox name="${parameter.name}" value="${parameter.value}"/>
</j:otherwise>
</j:choose>
</div>
Expand Down
Expand Up @@ -24,7 +24,7 @@ public void getAvailableParameters_passwordParam() throws IOException {
BuildWithParametersAction bwpa = testableProject(pwParamDef);

BuildParameter pwParameter = bwpa.getAvailableParameters().get(0);
assertTrue(pwParameter.isPasswordParam());
assertTrue(pwParameter.getType()==BuildParameterType.PASSWORD);
}

private BuildWithParametersAction testableProject(
Expand Down

0 comments on commit 0349984

Please sign in to comment.