Skip to content

Commit fe439a8

Browse files
authored
Merge pull request #157 from jenkinsci/dialogs
use new dialog.form for adding maintenance windows
2 parents 99d1f3b + f66b3d6 commit fe439a8

File tree

9 files changed

+181
-215
lines changed

9 files changed

+181
-215
lines changed

pom.xml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@
4242
<revision>2</revision>
4343
<changelist>999999-SNAPSHOT</changelist>
4444
<gitHubRepo>jenkinsci/agent-maintenance-plugin</gitHubRepo>
45-
<jenkins.version>2.426.1</jenkins.version>
45+
<jenkins.base>2.440</jenkins.base>
46+
<jenkins.version>${jenkins.base}.3</jenkins.version>
4647
<powermock.version>1.6.1</powermock.version>
4748
<checkstyle.version>10.16.0</checkstyle.version>
4849
<hpi.compatibleSinceVersion>2.0</hpi.compatibleSinceVersion>
@@ -52,8 +53,8 @@
5253
<dependencies>
5354
<dependency>
5455
<groupId>io.jenkins.tools.bom</groupId>
55-
<artifactId>bom-2.426.x</artifactId>
56-
<version>2571.vede9dc5a_2e23</version>
56+
<artifactId>bom-${jenkins.base}.x</artifactId>
57+
<version>3023.v02a_987a_b_3ff9</version>
5758
<type>pom</type>
5859
<scope>import</scope>
5960
</dependency>
@@ -83,7 +84,7 @@
8384
<dependency>
8485
<groupId>org.jenkins-ci.plugins</groupId>
8586
<artifactId>mock-slave</artifactId>
86-
<version>125.vcfb_5c627d399</version>
87+
<version>153.v9768799a_2294</version>
8788
<scope>test</scope>
8889
</dependency>
8990
<dependency>

src/main/java/com/sap/prd/jenkins/plugins/agent_maintenance/MaintenanceAction.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ public Computer getComputer() {
4949
return computer;
5050
}
5151

52-
private boolean isVisible() {
52+
53+
@Restricted(NoExternalUse.class)
54+
public boolean isVisible() {
5355
return (computer.hasPermission(Computer.DISCONNECT) || computer.hasPermission(Computer.CONFIGURE)
5456
|| computer.hasPermission(Computer.EXTENDED_READ)) && computer.getNode() != null;
5557
}

src/main/resources/com/sap/prd/jenkins/plugins/agent_maintenance/MaintenanceAction/index.jelly

Lines changed: 49 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,19 @@
44
<l:layout title="${%Planned Maintenances}" norefresh="true">
55
<st:include it="${it.computer}" page="sidepanel.jelly"/>
66
<l:main-panel>
7-
<st:bind var="maintenanceJavaScriptBind" value="${it}"/>
8-
<st:adjunct includes="com.sap.prd.jenkins.plugins.agent_maintenance.agent-maintenance"/>
7+
<st:bind var="maintenanceJavaScriptBind" value="${it}"/>
8+
<st:adjunct includes="com.sap.prd.jenkins.plugins.agent_maintenance.agent-maintenance"/>
99
<j:if test="${it.enabled}">
1010
<h1>${%Planned Maintenances}</h1>
1111

12-
<div class="am__modal" id="maintenance-add-form">
13-
<div class="am__modal-content">
14-
<f:form action="add" method="post" name="config" tableClass="form-container">
15-
<h3>${%Add Maintenance Window}</h3>
16-
<st:include class="${it.getMaintenanceWindowClass()}" page="config.jelly"/>
17-
<div class="jenkins-buttons-row jenkins-buttons-row--equal-width">
18-
<button type="submit" class="jenkins-button jenkins-button--primary">${%Add}</button>
19-
<button id="cancel-button" type="button" class="jenkins-button">${%Cancel}</button>
20-
</div>
21-
</f:form>
22-
</div>
12+
<div class="am__modal" id="maintenance-add-form" data-title="${%Add Maintenance Window}">
13+
<f:form action="add" method="post" name="config" class="no-json jenkins-!-padding-top-1">
14+
<st:include class="${it.getMaintenanceWindowClass()}" page="config.jelly"/>
15+
</f:form>
2316
</div>
2417

2518
<f:form action="deleteMultiple" method="post" name="delete">
19+
<j:set var="mw" value="${it.maintenanceWindows}"/>
2620
<table class="jenkins-table jenkins-table--small sortable am__table" id="maintenance-table">
2721
<thead>
2822
<tr>
@@ -42,71 +36,63 @@
4236
</tr>
4337
</thead>
4438
<tbody>
45-
<j:forEach var="m" items="${it.maintenanceWindows}">
46-
<j:set var="mid" value="${h.escape(m.id)}"/>
47-
<tr id="${mid}" class="${m.isMaintenanceScheduled() ? 'active': 'inactive'}">
48-
<td>${m.startTime}</td>
49-
<td>${m.endTime}</td>
50-
<td>${m.reason}</td>
51-
<td class="center" ><f:checkbox class="am__checkbox--disabled" checked="${m.keepUpWhenActive ? 'true' : null}"/></td>
52-
<td class="right">${m.maxWaitMinutes}</td>
53-
<td class="center"><f:checkbox class="am__checkbox--disabled" checked="${m.takeOnline ? 'true' : null}"/></td>
54-
<td>${m.userid}</td>
55-
<p:hasAnyPermission permissions="${it.CONFIGURE_AND_DISCONNECT}">
56-
<td>
57-
<f:checkbox class="am__checkbox" name="${mid}"/>
58-
</td>
59-
<td class="delete">
60-
<div class="am__action-delete"
61-
data-message="${%Delete maintenance window}"
62-
data-message-success="${%Maintenance window was successfully deleted}"
63-
>
64-
<l:icon src="symbol-trash-outline plugin-ionicons-api" class="icon-sm icon-red am__table-icon"
65-
tooltip="Delete this maintenance window"/>
66-
</div>
67-
</td>
68-
</p:hasAnyPermission>
69-
</tr>
70-
</j:forEach>
39+
<j:forEach var="m" items="${mw}">
40+
<j:set var="mid" value="${h.escape(m.id)}"/>
41+
<tr id="${mid}" class="${m.isMaintenanceScheduled() ? 'active': 'inactive'}">
42+
<td>${m.startTime}</td>
43+
<td>${m.endTime}</td>
44+
<td>${m.reason}</td>
45+
<td class="center" ><f:checkbox readOnlyMode="true" checked="${m.keepUpWhenActive ? 'true' : null}"/></td>
46+
<td class="right">${m.maxWaitMinutes}</td>
47+
<td class="center"><f:checkbox readOnlyMode="true" checked="${m.takeOnline ? 'true' : null}"/></td>
48+
<td>${m.userid}</td>
49+
<p:hasAnyPermission permissions="${it.CONFIGURE_AND_DISCONNECT}">
50+
<td>
51+
<f:checkbox class="am__checkbox" name="${mid}"/>
52+
</td>
53+
<td class="delete">
54+
<div class="am__action-delete"
55+
data-message="${%Delete maintenance window}"
56+
data-message-success="${%Maintenance window was successfully deleted}"
57+
>
58+
<l:icon src="symbol-trash-outline plugin-ionicons-api" class="icon-sm icon-red am__table-icon"
59+
tooltip="Delete this maintenance window"/>
60+
</div>
61+
</td>
62+
</p:hasAnyPermission>
63+
</tr>
64+
</j:forEach>
7165
</tbody>
7266
</table>
7367
<p:hasAnyPermission permissions="${it.CONFIGURE_AND_DISCONNECT}">
7468
<f:bottomButtonBar>
75-
<div id="am__div--select" class="jenkins-hidden">
69+
<div id="am__div--select" class="${mw.size() == 0?'jenkins-hidden':''}">
7670
Select:
7771
<span id="select-all" class="am__select">${%All}</span>,
7872
<span id="select-active" class="am__select">${%Active}</span>,
7973
<span id="select-inactive" class="am__select">${%Inactive}</span>,
8074
<span id="select-none" class="am__select">${%None}</span>
8175
</div>
8276
<div class="am__div--break"/>
83-
<button type="button" id="edit-button" class="jenkins-button jenkins-button--primary jenkins-hidden">${%Edit}</button>
77+
<button type="button" id="edit-button" class="jenkins-button jenkins-button--primary ${mw.size() == 0?'jenkins-hidden':''}">${%Edit}</button>
8478
<button id="add-button" type="button"
85-
class="jenkins-button jenkins-button--primary jenkins-hidden">${%Add}</button>
79+
class="jenkins-button jenkins-button--primary">${%Add}</button>
8680
<button id="delete-selected-button-action" type="button"
87-
class="jenkins-button jenkins-button--primary jenkins-hidden"
88-
data-message-success="${%All selected maintenance windows were deleted successfully}">${%Delete selected}</button>
81+
class="jenkins-button jenkins-button--primary delete-selected-button ${mw.size() == 0?'jenkins-hidden':''}"
82+
data-message-success="${%All selected maintenance windows were deleted successfully}" disabled="true">${%Delete selected}</button>
8983
</f:bottomButtonBar>
9084
</p:hasAnyPermission>
9185
</f:form>
9286
<br/>
9387
<br/>
9488
<h1>${%Recurring Maintenances}</h1>
95-
<div class="am__modal" id="recurring-maintenance-add-form">
96-
<div class="am__modal-content">
97-
<f:form action="addRecurring" method="post" name="config" tableClass="form-container">
98-
<h3>${%Add Recurring Maintenance Window}</h3>
99-
<st:include class="${it.getRecurringMaintenanceWindowClass()}" page="config.jelly"/>
100-
<f:block>
101-
<div class="jenkins-buttons-row jenkins-buttons-row--equal-width">
102-
<button type="submit" class="jenkins-button jenkins-button--primary">${%Add}</button>
103-
<button id="recurring-cancel-button" type="button" class="jenkins-button">${%Cancel}</button>
104-
</div>
105-
</f:block>
106-
</f:form>
107-
</div>
89+
<div class="am__modal" id="recurring-maintenance-add-form" data-title="${%Add Recurring Maintenance Window}">
90+
<f:form action="addRecurring" method="post" name="config" class="no-json jenkins-!-padding-top-1">
91+
<st:include class="${it.getRecurringMaintenanceWindowClass()}" page="config.jelly"/>
92+
</f:form>
10893
</div>
10994
<f:form action="deleteMultipleRecurring" method="post" name="delete">
95+
<j:set var="recurring" value="${it.recurringMaintenanceWindows}"/>
11096
<table class="jenkins-table jenkins-table--small sortable am__table" id="recurring-maintenance-table">
11197
<thead>
11298
<tr>
@@ -124,15 +110,15 @@
124110
</tr>
125111
</thead>
126112
<tbody>
127-
<j:forEach var="m" items="${it.recurringMaintenanceWindows}">
113+
<j:forEach var="m" items="${recurring}">
128114
<j:set var="mid" value="${h.escape(m.id)}"/>
129115
<tr id="${mid}">
130116
<td>${m.startTimeSpec}</td>
131117
<td>${m.duration}</td>
132118
<td>${m.reason}</td>
133-
<td class="center" ><f:checkbox class="am__checkbox--disabled" checked="${m.keepUpWhenActive ? 'true' : null}"/></td>
119+
<td class="center" ><f:checkbox readOnlyMode="true" checked="${m.keepUpWhenActive ? 'true' : null}"/></td>
134120
<td class="right">${m.maxWaitMinutes}</td>
135-
<td class="center"><f:checkbox class="am__checkbox--disabled" checked="${m.takeOnline ? 'true' : null}"/></td>
121+
<td class="center"><f:checkbox readOnlyMode="true" checked="${m.takeOnline ? 'true' : null}"/></td>
136122
<td>${m.userid}</td>
137123
<p:hasAnyPermission permissions="${it.CONFIGURE_AND_DISCONNECT}">
138124
<td>
@@ -154,10 +140,10 @@
154140
</table>
155141
<p:hasAnyPermission permissions="${it.CONFIGURE_AND_DISCONNECT}">
156142
<f:bottomButtonBar>
157-
<button type="button" id="edit-recurring" class="jenkins-button jenkins-button--primary">${%Edit}</button>
143+
<button type="button" id="edit-recurring" class="jenkins-button jenkins-button--primary ${recurring.size() == 0?'jenkins-hidden':''}">${%Edit}</button>
158144
<button type="button" id="add-recurring" class="jenkins-button jenkins-button--primary">${%Add}</button>
159-
<button type="button" id="delete-selected-recurring-action" class="jenkins-button jenkins-button--primary"
160-
data-message-success="${%All selected recurring maintenance windows were deleted successfully}">${%Delete selected}</button>
145+
<button type="button" id="delete-selected-recurring-action" class="jenkins-button delete-selected-button jenkins-button--primary ${recurring.size() == 0?'jenkins-hidden':''}"
146+
data-message-success="${%All selected recurring maintenance windows were deleted successfully}" disabled="true">${%Delete selected}</button>
161147
</f:bottomButtonBar>
162148
</p:hasAnyPermission>
163149
</f:form>

src/main/resources/com/sap/prd/jenkins/plugins/agent_maintenance/MaintenanceAction/index_de.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@ missingPermission=Wartungsfensterverf
1919
zum Einschalten benötigt.
2020
Disable\ Agent\ Maintenance\ Availability=Agentenwartungsverfügbarkeit ausschalten
2121
Enable\ Agent\ Maintenance\ Availability=Agentenwartungsverfügbarkeit einschalten
22+
Recurring\ Maintenances=Wiederkehrende Wartungen

src/main/resources/com/sap/prd/jenkins/plugins/agent_maintenance/MaintenanceLink/index.jelly

Lines changed: 50 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,18 @@
99
<st:adjunct includes="com.sap.prd.jenkins.plugins.agent_maintenance.agent-maintenance"/>
1010
<h1>${%Planned Maintenances}</h1>
1111

12-
<div class="am__modal" id="maintenance-add-form">
13-
<div class="am__modal-content">
14-
<f:form action="add" method="post" name="config" tableClass="form-container">
15-
<h3>${%Add Maintenance Window for multiple agents}</h3>
16-
<f:entry field="label" title="${%Label}" help="/plugin/agent-maintenance/help/help-label.html">
17-
<f:textbox
18-
checkUrl="'${rootURL}/agent-maintenances/checkLabel?value='+escape(this.value)"
19-
autoCompleteUrl="${rootURL}/agent-maintenances/autoCompleteLabel"
20-
autoCompleteDelimChar=" "
21-
/>
22-
</f:entry>
23-
<st:include class="${it.getMaintenanceWindowClass()}" page="config.jelly"/>
24-
<div class="jenkins-buttons-row jenkins-buttons-row--equal-width">
25-
<button type="submit" class="jenkins-button jenkins-button--primary">${%Add}</button>
26-
<button type="button"
27-
id="cancel-button"
28-
class="jenkins-button">${%Cancel}</button>
29-
</div>
30-
</f:form>
31-
</div>
12+
<div class="am__modal" id="maintenance-add-form" data-title="${%Add Maintenance Window for multiple agents}">
13+
<f:form action="add" method="post" name="config" class="no-json jenkins-!-padding-top-1">
14+
<f:entry field="label" title="${%Label}" help="/plugin/agent-maintenance/help/help-label.html">
15+
<f:textbox
16+
checkUrl="${rootURL}/agent-maintenances/checkLabel"
17+
autoCompleteUrl="${rootURL}/agent-maintenances/autoCompleteLabel"
18+
autoCompleteDelimChar=" "
19+
checkDependsOn=""
20+
/>
21+
</f:entry>
22+
<st:include class="${it.getMaintenanceWindowClass()}" page="config.jelly"/>
23+
</f:form>
3224
</div>
3325

3426
<f:form action="delete" method="post" name="delete">
@@ -51,39 +43,41 @@
5143
</thead>
5244
<tbody>
5345
<j:forEach var="a" items="${it.agents}">
54-
<j:set var="c" value="${a.computer}"/>
55-
<j:set var="mwcount" value="${mwcount + a.maintenanceWindows.size()}"/>
56-
<j:forEach var="m" items="${a.maintenanceWindows}">
57-
<j:set var="mid" value="${h.escape(m.id)}"/>
58-
<tr id="${mid}" class="${m.isMaintenanceScheduled() ? 'active': 'inactive'}" data-computer-name="${c.name}">
59-
<td><l:icon src="${c.iconClassName}" class="icon-sm am__table-icon"/></td>
60-
<td><nobr><a href="${rootURL}/${c.url}" class="jenkins-table__link model-link inside">${c.displayName}</a></nobr></td>
61-
<td><nobr>${m.startTime}</nobr></td>
62-
<td><nobr>${m.endTime}</nobr></td>
63-
<td>${m.reason}</td>
64-
<td class="center" ><f:checkbox class="am__checkbox--disabled" checked="${m.keepUpWhenActive ? 'true' : null}"/></td>
65-
<td class="right" >${m.maxWaitMinutes}</td>
66-
<td class="center"><f:checkbox class="am__checkbox--disabled" checked="${m.takeOnline ? 'true' : null}"/></td>
67-
<td>${m.userid}</td>
68-
<p:hasAnyPermission it="${c}" permissions="${a.CONFIGURE_AND_DISCONNECT}">
69-
<td>
70-
<f:checkbox class="am__checkbox" name="${mid}"/>
71-
</td>
72-
<td class="delete">
73-
<div class="am__link-delete"
74-
data-message="${%deleteMaintenanceOf} ${c.displayName}"
75-
data-message-success="${%Maintenance window was successfully deleted}">
76-
<l:icon src="symbol-trash-outline plugin-ionicons-api" class="icon-sm icon-red am__table-icon"
77-
tooltip="Delete this maintenance windows for ${h.escape(c.displayName)}"/>
78-
</div>
79-
</td>
80-
</p:hasAnyPermission>
81-
<p:hasNoPermission it="${c}" permissions="${a.CONFIGURE_AND_DISCONNECT}">
82-
<td/>
83-
<td/>
84-
</p:hasNoPermission>
85-
</tr>
86-
</j:forEach>
46+
<j:if test="${a.visible}">
47+
<j:set var="c" value="${a.computer}"/>
48+
<j:set var="mwcount" value="${mwcount + a.maintenanceWindows.size()}"/>
49+
<j:forEach var="m" items="${a.maintenanceWindows}">
50+
<j:set var="mid" value="${h.escape(m.id)}"/>
51+
<tr id="${mid}" class="${m.isMaintenanceScheduled() ? 'active': 'inactive'}" data-computer-name="${c.name}">
52+
<td><l:icon src="${c.iconClassName}" class="icon-sm am__table-icon"/></td>
53+
<td><nobr><a href="${rootURL}/${c.url}" class="jenkins-table__link model-link inside">${c.displayName}</a></nobr></td>
54+
<td><nobr>${m.startTime}</nobr></td>
55+
<td><nobr>${m.endTime}</nobr></td>
56+
<td>${m.reason}</td>
57+
<td class="center" ><f:checkbox checked="${m.keepUpWhenActive ? 'true' : null}" readOnlyMode="true"/></td>
58+
<td class="right" >${m.maxWaitMinutes}</td>
59+
<td class="center"><f:checkbox checked="${m.takeOnline ? 'true' : null}" readonly="" readOnlyMode="true"/></td>
60+
<td>${m.userid}</td>
61+
<p:hasAnyPermission it="${c}" permissions="${a.CONFIGURE_AND_DISCONNECT}">
62+
<td>
63+
<f:checkbox class="am__checkbox" name="${mid}"/>
64+
</td>
65+
<td class="delete">
66+
<div class="am__link-delete"
67+
data-message="${%deleteMaintenanceOf} ${c.displayName}"
68+
data-message-success="${%Maintenance window was successfully deleted}">
69+
<l:icon src="symbol-trash-outline plugin-ionicons-api" class="icon-sm icon-red am__table-icon"
70+
tooltip="Delete this maintenance windows for ${h.escape(c.displayName)}"/>
71+
</div>
72+
</td>
73+
</p:hasAnyPermission>
74+
<p:hasNoPermission it="${c}" permissions="${a.CONFIGURE_AND_DISCONNECT}">
75+
<td/>
76+
<td/>
77+
</p:hasNoPermission>
78+
</tr>
79+
</j:forEach>
80+
</j:if>
8781
</j:forEach>
8882
</tbody>
8983
</table>
@@ -94,7 +88,7 @@
9488
</div>
9589
</j:if>
9690
<f:bottomButtonBar>
97-
<div id="am__div--select" class="jenkins-hidden">
91+
<div id="am__div--select" class="${mwcount==0?'jenkins-hidden':''}">
9892
Select:
9993
<span id="select-all" class="am__select">${%All}</span>,
10094
<span id="select-active" class="am__select">${%Active}</span>,
@@ -103,8 +97,8 @@
10397
</div>
10498
<div class="am__div--break"/>
10599
<button id="add-button" type="button" class="jenkins-button jenkins-button--primary">${%Add}</button>
106-
<button id="delete-selected-button-link" type="button" class="jenkins-button jenkins-button--primary"
107-
data-message-success="${%All selected maintenance windows were deleted successfully}">${%Delete selected}</button>
100+
<button id="delete-selected-button-link" type="button" class="jenkins-button jenkins-button--primary ${mwcount==0?'jenkins-hidden':''} delete-selected-button"
101+
data-message-success="${%All selected maintenance windows were deleted successfully}" disabled="true">${%Delete selected}</button>
108102
</f:bottomButtonBar>
109103
</f:form>
110104
</l:main-panel>

0 commit comments

Comments
 (0)