提交 ea9a1265 编写于 作者: K kohsuke

Fixing the UI of builders to allow multiple entries (issue #37)


git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@7985 71c3de6d-444a-0410-be80-ed276b4c234a
上级 03a38acc
......@@ -280,11 +280,11 @@ public abstract class Descriptor<T extends Describable<T>> {
}
/**
* Finds a descriptor from a collection by its display name.
* Finds a descriptor from a collection by its class name.
*/
public static <T extends Descriptor> T find(Collection<? extends T> list, String displayName) {
public static <T extends Descriptor> T find(Collection<? extends T> list, String className) {
for (T d : list) {
if(d.getDisplayName().equals(displayName))
if(d.getClass().getName().equals(className))
return d;
}
return null;
......
......@@ -2,6 +2,7 @@ package hudson.model;
import hudson.CopyOnWrite;
import hudson.Util;
import hudson.StructuredForm;
import hudson.model.Descriptor.FormException;
import hudson.tasks.BuildStep;
import hudson.tasks.BuildWrapper;
......@@ -21,6 +22,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import java.util.Collections;
/**
* Buildable software project.
......@@ -71,6 +73,10 @@ public abstract class Project<P extends Project<P,B>,B extends Build<P,B>>
return Descriptor.toMap(builders);
}
public List<Builder> getBuildersList() {
return Collections.unmodifiableList(builders);
}
public Map<Descriptor<Publisher>,Publisher> getPublishers() {
return Descriptor.toMap(publishers);
}
......@@ -147,7 +153,8 @@ public abstract class Project<P extends Project<P,B>,B extends Build<P,B>>
req.setCharacterEncoding("UTF-8");
buildWrappers = buildDescribable(req, BuildWrappers.getFor(this), "wrapper");
builders = buildDescribable(req, BuildStepDescriptor.filter(BuildStep.BUILDERS, getClass()), "builder");
builders = Descriptor.newInstancesFromHeteroList(req,
StructuredForm.get(req), "builder", BuildStep.BUILDERS);
publishers = buildDescribable(req, BuildStepDescriptor.filter(BuildStep.PUBLISHERS, getClass()), "publisher");
updateTransientActions(); // to pick up transient actions from builder, publisher, etc.
}
......
......@@ -11,6 +11,9 @@
deleteCaption: caption of the 'delete' button.
targetType: the type for which descriptors will be configured.
default to ${it.class} (optional)
hasHeader: for each item, add a caption from descriptor.getDisplayName()
See Descriptor.newInstancesFromHeteroList for how to parse the submission.
-->
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
<j:set var="targetType" value="${h.defaulted(attrs.targetType,it.class)}"/>
......@@ -20,8 +23,11 @@
<j:set var="descriptor" value="${i.descriptor}" />
<j:set var="instance" value="${i}" />
<div name="${attrs.name}" class="repeated-chunk">
<input type="hidden" name="kind" value="${descriptor.displayName}" />
<input type="hidden" name="kind" value="${descriptor.class.name}" />
<table>
<j:if test="${attrs.hasHeader}">
<f:block><b>${descriptor.displayName}</b></f:block>
</j:if>
<st:include from="${descriptor}" page="${descriptor.configPage}" />
<f:block>
<div align="right">
......@@ -38,8 +44,11 @@
<j:set var="instance" value="${null}" />
<j:forEach var="descriptor" items="${attrs.descriptors}" varStatus="loop">
<div name="${attrs.name}" title="${descriptor.displayName}" tooltip="${descriptor.tooltip}">
<input type="hidden" name="kind" value="${descriptor.displayName}" />
<input type="hidden" name="kind" value="${descriptor.class.name}" />
<table>
<j:if test="${attrs.hasHeader}">
<f:block><b>${descriptor.displayName}</b></f:block>
</j:if>
<st:include from="${descriptor}" page="${descriptor.configPage}" />
<f:block>
<div align="right">
......
......@@ -3,8 +3,17 @@
-->
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:p="/lib/hudson/project">
<!-- build config pane -->
<f:descriptorList title="${%Build}"
<!--f:descriptorList title="${%Build}"
descriptors="${h.getBuilderDescriptors(it)}"
instances="${it.builders}"
varName="builder" />
varName="builder" /-->
<f:section title="${%Build}">
<f:block>
<f:hetero-list name="builder" hasHeader="true"
descriptors="${h.getBuilderDescriptors(it)}"
items="${it.buildersList}"
addCaption="${%Add build step}"/>
</f:block>
</f:section>
</j:jelly>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册