Navigation Menu

Skip to content

Commit

Permalink
[JENKINS-26093] Look up the downstream parameter definitions and show…
Browse files Browse the repository at this point in the history
… their index pages.

Originally-Committed-As: 276eee3b7d552e031b73d440a2faf29d25dbc680
  • Loading branch information
jglick committed Mar 3, 2015
1 parent da3bfa5 commit c5155cb
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 6 deletions.
Expand Up @@ -3,15 +3,24 @@
import hudson.Extension;
import hudson.model.AutoCompletionCandidates;
import hudson.model.ItemGroup;
import hudson.model.Job;
import hudson.model.ParameterDefinition;
import hudson.model.ParameterValue;
import hudson.model.ParametersDefinitionProperty;
import java.util.ArrayList;
import java.util.List;
import jenkins.model.Jenkins;
import jenkins.model.ParameterizedJobMixIn;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.jenkinsci.plugins.workflow.steps.AbstractStepDescriptorImpl;
import org.jenkinsci.plugins.workflow.steps.AbstractStepImpl;
import org.jenkinsci.plugins.workflow.steps.Step;
import org.kohsuke.stapler.AncestorInPath;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.DataBoundSetter;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.StaplerRequest;

/**
* @author Vivek Pandey
Expand Down Expand Up @@ -54,6 +63,37 @@ public DescriptorImpl() {
super(BuildTriggerStepExecution.class);
}

@Override public Step newInstance(StaplerRequest req, JSONObject formData) throws FormException {
BuildTriggerStep step = (BuildTriggerStep) super.newInstance(req, formData);
// Cf. ParametersDefinitionProperty._doBuild:
JSONArray params = formData.optJSONArray("parameter");
if (params != null) {
Job<?,?> job = Jenkins.getInstance().getItemByFullName(step.getJob(), Job.class);
if (job != null) {
ParametersDefinitionProperty pdp = job.getProperty(ParametersDefinitionProperty.class);
if (pdp != null) {
List<ParameterValue> values = new ArrayList<ParameterValue>();
for (Object o : params) {
JSONObject jo = (JSONObject) o;
String name = jo.getString("name");
ParameterDefinition d = pdp.getParameterDefinition(name);
if (d == null) {
throw new IllegalArgumentException("No such parameter definition: " + name);
}
ParameterValue parameterValue = d.createValue(req, jo);
if (parameterValue != null) {
values.add(parameterValue);
} else {
throw new IllegalArgumentException("Cannot retrieve the parameter value: " + name);
}
}
step.setParameters(values);
}
}
}
return step;
}

@Override
public String getFunctionName() {
return "build";
Expand Down
@@ -0,0 +1,27 @@
package org.jenkinsci.plugins.workflow.support.steps.build.BuildTriggerStep;
def st = namespace('jelly:stapler')
def l = namespace('/lib/layout')
l.ajax {
def jobName = request.getParameter('job')
if (jobName != null) {
def job = app.getItemByFullName(jobName, hudson.model.Job)
if (job != null) {
def pdp = job.getProperty(hudson.model.ParametersDefinitionProperty)
if (pdp != null) {
table(width: '100%', class: 'parameters') {
for (parameterDefinition in pdp.parameterDefinitions) {
tbody {
st.include(it: parameterDefinition, page: parameterDefinition.descriptor.valuePage)
}
}
}
} else {
text("${job.fullDisplayName} is not parameterized")
}
} else {
text("no such job ${jobName}")
}
} else {
text('no job specified')
}
}
Expand Up @@ -24,15 +24,31 @@ THE SOFTWARE.
-->

<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form">
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form" xmlns:st="jelly:stapler">
<j:set var="jobFieldId" value="${h.generateId()}"/>
<f:entry field="job" title="Project to Build">
<f:textbox/>
</f:entry>
<f:entry title="Parameters">
<!-- TODO JENKINS-26093 load *ParameterDefinition/index.jelly blocks from downstream project -->
<f:block>To set parameters, use for example: <code>parameters: [[$class: 'StringParameterValue', name: 'branch', value: 'master']]</code></f:block>
<f:textbox onblur="loadParams()" id="${jobFieldId}"/>
</f:entry>
<f:entry field="wait">
<f:checkbox default="true" title="Wait for completion"/>
</f:entry>
<f:entry title="Parameters">
<div id="params"/>
</f:entry>
<script>
function loadParams() {
var div = $$('params');
console.log($$('${jobFieldId}').text);
new Ajax.Request('${descriptor.descriptorUrl}/parameters?job=' + encodeURIComponent($$('${jobFieldId}').value), {
method : 'get',
onSuccess : function(x) {
div.innerHTML = x.responseText;
Behaviour.applySubtree(div);
},
onFailure : function(x) {
div.innerHTML = "<b>ERROR</b>: Failed to load parameter definitions: " + x.statusText;
}
});
}
</script>
</j:jelly>

0 comments on commit c5155cb

Please sign in to comment.