Skip to content

Commit

Permalink
perf: 优化 job 配置页面中选择机器人的方式
Browse files Browse the repository at this point in the history
  • Loading branch information
liuweiGL committed Feb 3, 2023
1 parent 60b22f5 commit 6824a94
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 72 deletions.
20 changes: 5 additions & 15 deletions src/main/java/io/jenkins/plugins/DingTalkJobProperty.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,9 @@
import hudson.model.Job;
import hudson.model.JobProperty;
import hudson.model.JobPropertyDescriptor;
import io.jenkins.plugins.DingTalkNotifierConfig.DingTalkNotifierConfigDescriptor;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import jenkins.model.Jenkins;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.kohsuke.stapler.DataBoundConstructor;
Expand All @@ -30,28 +28,27 @@ public class DingTalkJobProperty extends JobProperty<Job<?, ?>> {
* @return 机器人配置列表
*/
public ArrayList<DingTalkNotifierConfig> getNotifierConfigs() {

ArrayList<DingTalkNotifierConfig> notifierConfigsList = new ArrayList<>();
ArrayList<DingTalkNotifierConfig> notifierConfigList = new ArrayList<>();
ArrayList<DingTalkRobotConfig> robotConfigs = DingTalkGlobalConfig.getInstance()
.getRobotConfigs();

for (DingTalkRobotConfig robotConfig : robotConfigs) {
String id = robotConfig.getId();
DingTalkNotifierConfig newNotifierConfig = new DingTalkNotifierConfig(robotConfig);

if (notifierConfigs != null && !notifierConfigs.isEmpty()) {
for (DingTalkNotifierConfig notifierConfig : notifierConfigs) {
if (this.notifierConfigs != null) {
for (DingTalkNotifierConfig notifierConfig : this.notifierConfigs) {
String robotId = notifierConfig.getRobotId();
if (id.equals(robotId)) {
newNotifierConfig.copy(notifierConfig);
}
}
}

notifierConfigsList.add(newNotifierConfig);
notifierConfigList.add(newNotifierConfig);
}

return notifierConfigsList;
return notifierConfigList;
}

/**
Expand Down Expand Up @@ -79,13 +76,6 @@ public boolean isApplicable(Class<? extends Job> jobType) {
return super.isApplicable(jobType);
}

/**
* 通知配置页面
*/
public DingTalkNotifierConfigDescriptor getDingTalkNotifierConfigDescriptor() {
return Jenkins.get().getDescriptorByType(DingTalkNotifierConfigDescriptor.class);
}

/**
* 默认的配置项列表
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,60 @@
xmlns:d="jelly:define"
xmlns:l="/lib/layout"
xmlns:t="/lib/hudson"
xmlns:f="/lib/form">
<j:set var="notifierConfigDescriptor"
value="${descriptor.getDingTalkNotifierConfigDescriptor()}"/>
xmlns:f="/lib/form"
xmlns:local="local">
<st:adjunct includes="lib.form.hetero-list.hetero-list"/>

<j:set var="notifierConfigs"
value="${instance == null ? descriptor.getDefaultNotifierConfigs() : instance.getNotifierConfigs()}"/>
<j:set var="checkedNotifierConfigs"
value="${instance.getCheckedNotifierConfigs()}"/>

<d:taglib uri="local">
<d:tag name="body">
<f:repeatableDeleteButton/>
<f:class-entry descriptor="${descriptor}"/>
<d:invokeBody/>
</d:tag>
</d:taglib>

<!-- <f:descriptorList title="钉钉机器人"-->
<!-- descriptors="配置机器人进行构建通知">-->
<f:entry title="钉钉机器人">
<f:repeatable
header=""
name="notifierConfigs"
noAddButton="true"
var="instance"
items="${notifierConfigs}">
<j:scope>
<j:set var="descriptor" value="${notifierConfigDescriptor}"/>
<st:include page="config.jelly" class="${descriptor.clazz}"/>
</j:scope>
</f:repeatable>
<div
class="jenkins-form-item hetero-list-container one-each">
<!-- display existing items -->
<j:forEach var="config"
items="${checkedNotifierConfigs}">
<j:set var="instance" value="${config}"/>
<j:set var="descriptor" value="${config.descriptor}"/>
<div class="repeated-chunk" name="notifierConfigs" title="${config.robotName}"
descriptorId="${config.robotId}">
<local:body title="${config.robotName}" instance="${config}">
<st:include from="${descriptor}"
page="${descriptor.configPage}" optional="true"/>
</local:body>
</div>
</j:forEach>
<div class="repeatable-insertion-point"/>
<div class="prototypes to-be-removed">
<j:forEach var="config" items="${notifierConfigs}" varStatus="loop">
<j:set var="instance" value="${config}" />
<j:set var="descriptor" value="${config.descriptor}"/>
<div name="notifierConfigs" title="${config.robotName}" descriptorId="${config.robotId}">
<local:body title="${config.robotName}">
<l:renderOnDemand tag="div" clazz="config-page" capture="descriptor,it,instance">
<l:ajax>
<st:include from="${descriptor}"
page="${descriptor.configPage}" optional="true"/>
</l:ajax>
</l:renderOnDemand>
</local:body>
</div>
</j:forEach>
</div>
<div>
<input type="button" value="添加机器人" class="hetero-list-add"
/>
</div>
</div>
</f:entry>
<!-- </f:descriptorList>-->

</j:jelly>
Original file line number Diff line number Diff line change
Expand Up @@ -5,43 +5,41 @@
<!-- 通知时机列表 -->
<j:set var="noticeOccasionTypes" value="${descriptor.getNoticeOccasionTypes()}"/>

<f:optionalBlock
title="${instance.getRobotName()}"
field="checked"
inline="true"
checked="${instance.isChecked()}">
<f:advanced>
<f:entry title="通知时机" field="noticeOccasions">
<j:forEach var="noticeOccasionTypeItem"
items="${noticeOccasionTypes}">
<j:scope>
<j:set var="name" value="${noticeOccasionTypeItem.name()}"/>
<j:set var="desc" value="${noticeOccasionTypeItem.getDesc()}"/>
<label>
<f:checkbox
json="${name}"
name="noticeOccasions"
checked="${instance.noticeOccasions.contains(name)}"
/>
${desc}
</label>
</j:scope>
</j:forEach>
</f:entry>
<f:entry title="通知人" field="at">
<f:checkbox title="atAll" field="atAll"/>
<f:textarea field="atMobile"/>
</f:entry>
<f:entry field="content" title="自定义内容">
<f:textarea/>
</f:entry>
</f:advanced>

<f:invisibleEntry>
<input type="hidden" name="robotId" value="${instance.getRobotId()}"/>
</f:invisibleEntry>
<f:invisibleEntry>
<input type="hidden" name="robotName" value="${instance.getRobotName()}"/>
</f:invisibleEntry>
</f:optionalBlock>
<f:entry title="${instance.getRobotName()}">
<f:advanced>
<f:entry title="通知时机" field="noticeOccasions">
<j:forEach var="noticeOccasionTypeItem"
items="${noticeOccasionTypes}">
<j:scope>
<j:set var="name" value="${noticeOccasionTypeItem.name()}"/>
<j:set var="desc" value="${noticeOccasionTypeItem.getDesc()}"/>
<label>
<f:checkbox
json="${name}"
name="noticeOccasions"
checked="${instance.noticeOccasions.contains(name)}"
/>
${desc}
</label>
</j:scope>
</j:forEach>
</f:entry>
<f:entry title="通知人" field="at">
<f:checkbox title="atAll" field="atAll"/>
<f:textarea field="atMobile"/>
</f:entry>
<f:entry field="content" title="自定义内容">
<f:textarea/>
</f:entry>
</f:advanced>
</f:entry>
<f:invisibleEntry>
<input type="hidden" name="robotId" value="${instance.getRobotId()}"/>
</f:invisibleEntry>
<f:invisibleEntry>
<input type="hidden" name="robotName" value="${instance.getRobotName()}"/>
</f:invisibleEntry>
<f:invisibleEntry>
<input type="hidden" name="checked" value="true"/>
</f:invisibleEntry>
</j:jelly>

0 comments on commit 6824a94

Please sign in to comment.