package hudson.plugins.view.dashboard.builds;
import hudson.Extension;
import hudson.model.Descriptor;
import hudson.model.Hudson;
import hudson.model.Job;
import hudson.model.Run;
import hudson.model.TopLevelItem;
import hudson.plugins.view.dashboard.DashboardPortlet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.kohsuke.stapler.DataBoundConstructor;
public class LatestBuilds extends DashboardPortlet{
/**
* Number of latest builds which will be displayed on the screen
*/
private int numBuilds = 10;
@DataBoundConstructor
public LatestBuilds(String name, int numBuilds) {
super(name);
this.numBuilds = numBuilds;
}
public int getNumBuilds() {
return numBuilds <= 0 ? 10 : numBuilds;
}
/**
* Last <code>N_LATEST_BUILDS</code> builds
*
*/
public List<Run> getFinishedBuilds() {
Collection<TopLevelItem> jobs = Hudson.getInstance().getItems();
List<Run> allBuilds = new ArrayList<Run>();
for (TopLevelItem job : jobs) {
if (job instanceof Job) {
if (getDashboard().HasItem(job)) {
List<Run> builds = ((Job) job).getBuilds();
allBuilds.addAll(builds);
}
}
}
Collections.sort(allBuilds, Run.ORDER_BY_DATE);
List<Run> recentBuilds = new ArrayList<Run>();
if(allBuilds.size() < getNumBuilds())
recentBuilds = allBuilds;
else
recentBuilds = allBuilds.subList(0,getNumBuilds());
return recentBuilds;
}
@Extension
public static class DescriptorImpl extends Descriptor<DashboardPortlet> {
@Override
public String getDisplayName() {
return "Last builds";
}
}
}