Index: src/main/resources/hudson/plugins/sectioned_view/ListViewSection/config.jelly =================================================================== --- src/main/resources/hudson/plugins/sectioned_view/ListViewSection/config.jelly (revision 37273) +++ src/main/resources/hudson/plugins/sectioned_view/ListViewSection/config.jelly (working copy) @@ -27,6 +27,16 @@ + + + + + + + Index: src/main/java/hudson/plugins/sectioned_view/ListViewSection.java =================================================================== --- src/main/java/hudson/plugins/sectioned_view/ListViewSection.java (revision 37273) +++ src/main/java/hudson/plugins/sectioned_view/ListViewSection.java (working copy) @@ -5,6 +5,7 @@ import hudson.model.Descriptor; import hudson.model.Hudson; import hudson.model.Saveable; +import hudson.model.TopLevelItem; import hudson.model.Descriptor.FormException; import hudson.util.DescribableList; import hudson.views.BuildButtonColumn; @@ -14,11 +15,13 @@ import hudson.views.LastSuccessColumn; import hudson.views.ListViewColumn; import hudson.views.StatusColumn; +import hudson.views.ViewJobFilter; import hudson.views.WeatherColumn; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.logging.Level; @@ -32,6 +35,7 @@ public class ListViewSection extends SectionedViewSection { private DescribableList> columns; + private DescribableList> jobFilters; @DataBoundConstructor public ListViewSection(String name, Width width, Positioning alignment) { @@ -41,7 +45,29 @@ public Iterable getColumns() { return columns; } + + public Iterable getJobFilters() { + return jobFilters; + } + public boolean hasJobFilterExtensions() { + return !ViewJobFilter.all().isEmpty(); + } + + @Override + public Collection getItems() { + Collection itemsCollection = super.getItems(); + List items = new ArrayList(itemsCollection); + // check the filters + Iterable jobFilters = getJobFilters(); + List allItems = Hudson.getInstance().getItems(); + for (ViewJobFilter jobFilter: jobFilters) { + items = jobFilter.filter(items, allItems, null); + } + return items; + } + + public static List getDefaultColumns() { ArrayList r = new ArrayList(); DescriptorExtensionList> all = ListViewColumn.all(); @@ -75,6 +101,14 @@ } catch (IOException e) { throw new FormException("Error rebuilding list of columns.", e, "columns"); } + if (section.jobFilters == null) { + section.jobFilters = new DescribableList>(Saveable.NOOP); + } + try { + section.jobFilters.rebuildHetero(req, formData, ViewJobFilter.all(), "jobFilters"); + } catch (IOException e) { + throw new FormException("Error rebuilding list of view job filters.", e, "jobFilters"); + } return section; }