Skip to content

Commit 6f08a96

Browse files
committed
Support extended-choice-parameter JSON parameter
1 parent cecd350 commit 6f08a96

File tree

3 files changed

+91
-2
lines changed

3 files changed

+91
-2
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,12 @@
8484
<artifactId>pipeline-model-definition</artifactId>
8585
<scope>test</scope>
8686
</dependency>
87+
<dependency>
88+
<groupId>org.jenkins-ci.plugins</groupId>
89+
<artifactId>extended-choice-parameter</artifactId>
90+
<version>0.82</version>
91+
<scope>test</scope>
92+
</dependency>
8793
<dependency>
8894
<groupId>org.mockito</groupId>
8995
<artifactId>mockito-core</artifactId>

src/main/java/org/jenkinsci/plugins/parameterizedscheduler/ParameterizedTimerTrigger.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.logging.Level;
1919
import java.util.logging.Logger;
2020

21+
import net.sf.json.JSONObject;
2122
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
2223
import org.kohsuke.stapler.DataBoundConstructor;
2324

@@ -64,9 +65,23 @@ private List<ParameterValue> configurePropertyValues(Map<String, String> paramet
6465
if (parameterValues.containsKey(paramDefinition.getName())) {
6566
ParameterizedStaplerRequest request = new ParameterizedStaplerRequest(
6667
parameterValues.get(paramDefinition.getName()));
67-
defValues.add(paramDefinition.createValue(request));
68-
} else if (defaultValue != null)
68+
ParameterValue value;
69+
if (paramDefinition.getClass().getName().equals("com.cwctravel.hudson.plugins.extended_choice_parameter.ExtendedChoiceParameterDefinition") &&
70+
paramDefinition.getType().equals("PT_JSON")) {
71+
JSONObject jO = new JSONObject();
72+
jO.put("value", parameterValues.get(paramDefinition.getName()));
73+
value = paramDefinition.createValue(request, jO);
74+
} else {
75+
value = paramDefinition.createValue(request);
76+
}
77+
if (value!= null) {
78+
defValues.add(value);
79+
} else {
80+
LOGGER.warning("Cannot create value for " + paramDefinition.getName());
81+
}
82+
} else if (defaultValue != null) {
6983
defValues.add(defaultValue);
84+
}
7085
}
7186

7287
return defValues;

src/test/java/org/jenkinsci/plugins/parameterizedscheduler/ParameterizedSchedulerTest.java

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
11
package org.jenkinsci.plugins.parameterizedscheduler;
22

3+
import com.cwctravel.hudson.plugins.extended_choice_parameter.ExtendedChoiceParameterDefinition;
34
import hudson.model.FreeStyleProject;
45
import hudson.model.Job;
6+
import hudson.model.ParameterDefinition;
7+
import hudson.model.ParameterValue;
58
import hudson.model.ParametersAction;
69
import hudson.model.ParametersDefinitionProperty;
710
import hudson.model.StringParameterDefinition;
811
import hudson.triggers.Trigger;
12+
import net.sf.json.JSONObject;
913
import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
1014
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
1115
import org.jenkinsci.plugins.workflow.job.WorkflowRun;
1216
import org.junit.Rule;
1317
import org.junit.Test;
18+
import org.jvnet.hudson.test.Issue;
1419
import org.jvnet.hudson.test.JenkinsRule;
20+
import org.kohsuke.stapler.StaplerRequest;
21+
22+
import javax.annotation.CheckForNull;
23+
import javax.annotation.Nonnull;
1524

1625
import static org.hamcrest.MatcherAssert.assertThat;
1726
import static org.hamcrest.Matchers.is;
@@ -97,4 +106,63 @@ public void declarative() throws Exception {
97106
assertThat(p.getLastCompletedBuild(), is(not(wfr)));
98107
assertThat((String) p.getLastCompletedBuild().getAction(ParametersAction.class).getParameter("foo").getValue(), is("bar"));
99108
}
109+
110+
@Test
111+
@Issue("JENKINS-49372")
112+
public void extendedChoiceJson() throws Exception {
113+
FreeStyleProject p = r.createFreeStyleProject();
114+
p.addProperty(new ParametersDefinitionProperty(new ExtendedChoiceParameterDefinition("foo", ExtendedChoiceParameterDefinition.PARAMETER_TYPE_JSON, "",
115+
"", "", "def jsonSlurper = new groovy.json.JsonSlurper()\n" +
116+
"def object = jsonSlurper.parseText('{\"schema\":{\"type\":\"object\",\"title\":\"Car\",\"properties\":{\"make\":{\"type\":\"string\",\"enum\":[\"Toyota\",\"BMW\",\"Honda\",\"Ford\",\"Chevy\",\"VW\"]},\"model\":{\"type\":\"string\"},\"year\":{\"type\":\"integer\",\"enum\":[1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014],\"default\":2008}}}}')\n" +
117+
"return object", "", "", "", "",
118+
"", "", "" , "", "", "",
119+
"", "", "", "", "", "",
120+
"", "", "", "", false, false,
121+
0, "", "")));
122+
assertThat(p.getLastCompletedBuild(), is(nullValue()));
123+
Trigger<Job> t = new ParameterizedTimerTrigger("* * * * *%foo={\"make\":\"Toyota\",\"model\":\"test\",\"year\":2008}");
124+
t.start(p, true);
125+
p.addTrigger(t);
126+
new Cron().doRun();
127+
assertThat(p.isInQueue(), is(true));
128+
r.waitUntilNoActivity();
129+
// Build should complete successfully but will not have any value
130+
assertThat(p.getLastCompletedBuild(), is(notNullValue()));
131+
assertThat(p.getLastCompletedBuild().getAction(ParametersAction.class).getParameter("foo").getValue(), is("{\"make\":\"Toyota\",\"model\":\"test\",\"year\":2008}"));
132+
}
133+
134+
@Test
135+
@Issue("JENKINS-49372")
136+
public void nullValueCreated() throws Exception {
137+
FreeStyleProject p = r.createFreeStyleProject();
138+
p.addProperty(new ParametersDefinitionProperty(new NullParameterDefinition("foo")));
139+
assertThat(p.getLastCompletedBuild(), is(nullValue()));
140+
Trigger<Job> t = new ParameterizedTimerTrigger("* * * * *%foo=test");
141+
t.start(p, true);
142+
p.addTrigger(t);
143+
new Cron().doRun();
144+
assertThat(p.isInQueue(), is(true));
145+
r.waitUntilNoActivity();
146+
// Build should complete successfully but will not have any value
147+
assertThat(p.getLastCompletedBuild(), is(notNullValue()));
148+
}
149+
150+
private static class NullParameterDefinition extends ParameterDefinition {
151+
152+
public NullParameterDefinition(@Nonnull String name) {
153+
super(name, null);
154+
}
155+
156+
@CheckForNull
157+
@Override
158+
public ParameterValue createValue(StaplerRequest staplerRequest, JSONObject jsonObject) {
159+
return null;
160+
}
161+
162+
@CheckForNull
163+
@Override
164+
public ParameterValue createValue(StaplerRequest staplerRequest) {
165+
return null;
166+
}
167+
}
100168
}

0 commit comments

Comments
 (0)