package hudson.plugins.view.dashboard; import hudson.DescriptorExtensionList; import hudson.ExtensionPoint; import hudson.model.Describable; import hudson.model.Descriptor; import hudson.model.Hudson; import hudson.model.ModelObject; import hudson.model.ParameterDefinition; import hudson.model.TopLevelItem; import org.kohsuke.stapler.Stapler; import org.kohsuke.stapler.StaplerRequest; import java.util.Comparator; /** * Report that can summarize project data across multiple projects and display * the resulting data. * * @author Peter Hayes */ public abstract class DashboardPortlet implements ModelObject, Describable<DashboardPortlet>, ExtensionPoint { private static int counter = 0; private String id; private String name; public DashboardPortlet(String name) { counter++; this.id = "dashboard_portlet_" + counter; this.name = name; } public String getId() { return id; } public String getName() { return name; } public Dashboard getDashboard() { // TODO Can the dashboard instance be a field on this class -- parent? StaplerRequest req = Stapler.getCurrentRequest(); return req.findAncestorObject(Dashboard.class); } public String getDisplayName() { return getName(); } public String getUrl() { return "portlet/"+getId()+'/'; } /** * Support accessing jobs available via view through portlets */ public TopLevelItem getJob(String name) { return getDashboard().getJob(name); } /** * {@inheritDoc} */ public Descriptor<DashboardPortlet> getDescriptor() { return (Descriptor<DashboardPortlet>) Hudson.getInstance().getDescriptor(getClass()); } /** * Returns all the registered {@link ParameterDefinition} descriptors. */ public static DescriptorExtensionList<DashboardPortlet, Descriptor<DashboardPortlet>> all() { return Hudson.getInstance().getDescriptorList(DashboardPortlet.class); } public static Comparator getComparator() { return new Comparator<Dashboard>() { public int compare(Dashboard p1, Dashboard p2) { return p1.getDescription().compareTo(p2.getDescription()); } }; } }