package hudson.plugins.sectioned_view; import hudson.DescriptorExtensionList; import hudson.Extension; import hudson.model.Descriptor; import hudson.model.Hudson; import hudson.model.Saveable; import hudson.model.Descriptor.FormException; import hudson.util.DescribableList; import hudson.views.BuildButtonColumn; import hudson.views.JobColumn; import hudson.views.LastDurationColumn; import hudson.views.LastFailureColumn; import hudson.views.LastSuccessColumn; import hudson.views.ListViewColumn; import hudson.views.StatusColumn; import hudson.views.WeatherColumn; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import net.sf.json.JSONObject; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.StaplerRequest; public class ListViewSection extends SectionedViewSection { private DescribableList<ListViewColumn, Descriptor<ListViewColumn>> columns; @DataBoundConstructor public ListViewSection(String name, Width width, Positioning alignment) { super(name, width, alignment); } public Iterable<ListViewColumn> getColumns() { return columns; } public static List<ListViewColumn> getDefaultColumns() { ArrayList<ListViewColumn> r = new ArrayList<ListViewColumn>(); DescriptorExtensionList<ListViewColumn, Descriptor<ListViewColumn>> all = ListViewColumn.all(); for (Class<? extends ListViewColumn> d: DEFAULT_COLUMNS) { Descriptor<ListViewColumn> des = all.find(d); if (des != null) { try { r.add(des.newInstance(null, null)); } catch (FormException e) { LOGGER.log(Level.WARNING, "Failed to instantiate "+des.clazz,e); } } } return Collections.unmodifiableList(r); } @Extension public static final class DescriptorImpl extends SectionedViewSectionDescriptor { @Override public SectionedViewSection newInstance(StaplerRequest req, JSONObject formData) throws FormException { ListViewSection section = (ListViewSection) super.newInstance(req, formData); if (section.columns == null) { section.columns = new DescribableList<ListViewColumn,Descriptor<ListViewColumn>>(Saveable.NOOP); } section.columns.rebuildHetero(req, formData, Hudson.getInstance().getDescriptorList(ListViewColumn.class), "columns"); return section; } @Override public String getDisplayName() { return "List View Section"; } } private static final Logger LOGGER = Logger.getLogger(ListViewSection.class.getName()); /** * Traditional column layout before the {@link ListViewColumn} becomes extensible. */ private static final List<Class<? extends ListViewColumn>> DEFAULT_COLUMNS = Arrays.asList( StatusColumn.class, WeatherColumn.class, JobColumn.class, LastSuccessColumn.class, LastFailureColumn.class, LastDurationColumn.class, BuildButtonColumn.class ); }