Skip to content

Commit 2912702

Browse files
committed
Fix styling of select boxes for issue and version parameter
1 parent 984160c commit 2912702

File tree

4 files changed

+60
-57
lines changed

4 files changed

+60
-57
lines changed

src/main/java/hudson/plugins/jira/listissuesparameter/JiraIssueParameterDefinition.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,18 @@
2222
import com.atlassian.jira.rest.client.api.domain.IssueField;
2323
import hudson.Extension;
2424
import hudson.cli.CLICommand;
25-
import hudson.model.Job;
26-
import hudson.model.ParameterDefinition;
27-
import hudson.model.ParameterValue;
25+
import hudson.model.*;
2826
import hudson.plugins.jira.JiraSession;
2927
import hudson.plugins.jira.JiraSite;
28+
import hudson.util.ListBoxModel;
3029
import java.io.IOException;
3130
import java.util.ArrayList;
3231
import java.util.List;
3332
import java.util.concurrent.TimeoutException;
3433
import net.sf.json.JSONObject;
3534
import org.apache.commons.lang.StringUtils;
3635
import org.jenkinsci.Symbol;
37-
import org.kohsuke.stapler.DataBoundConstructor;
38-
import org.kohsuke.stapler.DataBoundSetter;
39-
import org.kohsuke.stapler.Stapler;
40-
import org.kohsuke.stapler.StaplerRequest2;
36+
import org.kohsuke.stapler.*;
4137

4238
public class JiraIssueParameterDefinition extends ParameterDefinition {
4339
private static final long serialVersionUID = 3927562542249244416L;
@@ -75,7 +71,10 @@ public ParameterValue createValue(CLICommand command, String value) throws IOExc
7571
public List<JiraIssueParameterDefinition.Result> getIssues()
7672
throws IOException, TimeoutException, RestClientException {
7773
Job<?, ?> job = Stapler.getCurrentRequest2().findAncestorObject(Job.class);
74+
return getIssues(job);
75+
}
7876

77+
private List<JiraIssueParameterDefinition.Result> getIssues(Job<?, ?> job) {
7978
JiraSite site = JiraSite.get(job);
8079
if (site == null) {
8180
throw new IllegalStateException(
@@ -122,6 +121,21 @@ public static class DescriptorImpl extends ParameterDescriptor {
122121
public String getDisplayName() {
123122
return "Jira Issue Parameter";
124123
}
124+
125+
public ListBoxModel doFillValueItems(@AncestorInPath Job<?, ?> job, @QueryParameter String name) {
126+
ListBoxModel items = new ListBoxModel();
127+
if (job.hasPermission(Item.BUILD)) {
128+
ParametersDefinitionProperty prop = job.getProperty(ParametersDefinitionProperty.class);
129+
if (prop != null) {
130+
ParameterDefinition def = prop.getParameterDefinition(name);
131+
if (def instanceof JiraIssueParameterDefinition jiraIssueDef) {
132+
List<Result> issueValues = jiraIssueDef.getIssues(job);
133+
issueValues.forEach(it -> items.add(it.summary, it.key));
134+
}
135+
}
136+
}
137+
return items;
138+
}
125139
}
126140

127141
public static class Result {

src/main/java/hudson/plugins/jira/versionparameter/JiraVersionParameterDefinition.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,18 @@
44
import com.atlassian.jira.rest.client.api.domain.Version;
55
import hudson.Extension;
66
import hudson.cli.CLICommand;
7-
import hudson.model.Job;
8-
import hudson.model.ParameterDefinition;
9-
import hudson.model.ParameterValue;
7+
import hudson.model.*;
108
import hudson.plugins.jira.JiraSession;
119
import hudson.plugins.jira.JiraSite;
10+
import hudson.util.ListBoxModel;
1211
import java.io.IOException;
1312
import java.util.List;
1413
import java.util.Objects;
1514
import java.util.regex.Pattern;
1615
import java.util.stream.Collectors;
1716
import net.sf.json.JSONObject;
1817
import org.jenkinsci.Symbol;
19-
import org.kohsuke.stapler.DataBoundConstructor;
20-
import org.kohsuke.stapler.Stapler;
21-
import org.kohsuke.stapler.StaplerRequest2;
18+
import org.kohsuke.stapler.*;
2219

2320
public class JiraVersionParameterDefinition extends ParameterDefinition {
2421
private static final long serialVersionUID = 4232979892748310160L;
@@ -69,7 +66,10 @@ public ParameterValue createValue(CLICommand command, String value) throws IOExc
6966

7067
public List<JiraVersionParameterDefinition.Result> getVersions() throws IOException, RestClientException {
7168
Job<?, ?> contextJob = Stapler.getCurrentRequest2().findAncestorObject(Job.class);
69+
return getVersions(contextJob);
70+
}
7271

72+
private List<JiraVersionParameterDefinition.Result> getVersions(Job<?, ?> contextJob) {
7373
JiraSite site = JiraSite.get(contextJob);
7474
if (site == null) {
7575
throw new IllegalStateException(
@@ -173,6 +173,21 @@ public static class DescriptorImpl extends ParameterDescriptor {
173173
public String getDisplayName() {
174174
return "Jira Release Version Parameter";
175175
}
176+
177+
public ListBoxModel doFillVersionItems(@AncestorInPath Job<?, ?> job, @QueryParameter String name) {
178+
ListBoxModel items = new ListBoxModel();
179+
if (job.hasPermission(Item.BUILD)) {
180+
ParametersDefinitionProperty prop = job.getProperty(ParametersDefinitionProperty.class);
181+
if (prop != null) {
182+
ParameterDefinition def = prop.getParameterDefinition(name);
183+
if (def instanceof JiraVersionParameterDefinition jiraVersionDef) {
184+
List<JiraVersionParameterDefinition.Result> issueValues = jiraVersionDef.getVersions(job);
185+
issueValues.forEach(it -> items.add(it.name));
186+
}
187+
}
188+
}
189+
return items;
190+
}
176191
}
177192

178193
public static class Result {

src/main/resources/hudson/plugins/jira/listissuesparameter/JiraIssueParameterDefinition/index.jelly

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,13 @@ limitations under the License.
1616
<!-- this is the page fragment displayed when triggering a new build -->
1717
<?jelly escape-by-default='true'?>
1818
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form">
19-
<j:set var="escapeEntryTitleAndDescription" value="false"/>
20-
<f:entry title="${h.escape(it.name)}" description="${it.formattedDescription}">
21-
<!-- this div is required because of ParametersDefinitionProperty.java#117 -->
22-
<div name="parameter">
23-
<input type="hidden" name="name" value="${it.name}"/>
24-
<j:choose>
25-
<j:when test="${it.issues == null or it.issues.size() == 0}">
26-
<!-- no tags at all -->
27-
${%No issues matched the search.}<br/>
28-
${%If you trigger the build, it will likely fail.}
29-
</j:when>
30-
<j:otherwise>
31-
<!-- everything is fine, we can display the drop-down list to the user -->
32-
<select name="value">
33-
<j:forEach var="issue" items="${it.issues}">
34-
<option value="${issue.key}">${issue.key}: ${issue.summary}</option>
35-
</j:forEach>
36-
</select>
37-
</j:otherwise>
38-
</j:choose>
39-
</div>
40-
</f:entry>
19+
<j:set var="escapeEntryTitleAndDescription" value="false"/>
20+
<j:set var="instance" value="${it}"/>
21+
<j:set var="descriptor" value="${it.descriptor}"/>
22+
<f:entry field="value" title="${h.escape(it.name)}" description="${it.formattedDescription}">
23+
<div name="parameter">
24+
<input type="hidden" name="name" value="${it.name}"/>
25+
<f:select/>
26+
</div>
27+
</f:entry>
4128
</j:jelly>
Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,13 @@
11
<!-- this is the page fragment displayed when triggering a new build -->
22
<?jelly escape-by-default='true'?>
33
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form">
4-
<j:set var="escapeEntryTitleAndDescription" value="false"/>
5-
<f:entry title="${h.escape(it.name)}" description="${it.formattedDescription}">
6-
<!-- this div is required because of ParametersDefinitionProperty.java#117 -->
7-
<div name="parameter">
8-
<input type="hidden" name="name" value="${it.name}"/>
9-
<j:choose>
10-
<j:when test="${it.versions == null or it.versions.size() == 0}">
11-
<!-- no tags at all -->
12-
${%No versions found meeting your filter criteria.}<br/>
13-
${%If you trigger the build, it will likely fail.}
14-
</j:when>
15-
<j:otherwise>
16-
<!-- everything is fine, we can display the drop-down list to the user -->
17-
<select name="version">
18-
<j:forEach var="version" items="${it.versions}">
19-
<option value="${version.name}">${version.name}</option>
20-
</j:forEach>
21-
</select>
22-
</j:otherwise>
23-
</j:choose>
24-
</div>
25-
</f:entry>
4+
<j:set var="escapeEntryTitleAndDescription" value="false"/>
5+
<j:set var="instance" value="${it}"/>
6+
<j:set var="descriptor" value="${it.descriptor}"/>
7+
<f:entry field="version" title="${h.escape(it.name)}" description="${it.formattedDescription}">
8+
<div name="parameter">
9+
<input type="hidden" name="name" value="${it.name}"/>
10+
<f:select/>
11+
</div>
12+
</f:entry>
2613
</j:jelly>

0 commit comments

Comments
 (0)