package com.smartcodeltd.jenkinsci.plugins.buildmonitor.order; import hudson.model.AbstractProject; import java.util.Comparator; import java.util.List; public class ByEstimatedDuration implements Comparator<AbstractProject<?, ?>> { @Override public int compare(AbstractProject<?, ?> a, AbstractProject<?,?> b) { return compareEstimatedDuration(a, b); } /** * Returns a sum of the estimated duration for a project and all upstream projects * * @param project * @return time */ private long getTotalEstimatedDuration(AbstractProject<?, ?> project) { long time = project.getEstimatedDuration(); if(!project.getUpstreamProjects().isEmpty()) { List<AbstractProject> upStreamProjects = project.getUpstreamProjects(); for (int i = 0; i < upStreamProjects.size(); i++) { time += getTotalEstimatedDuration((AbstractProject<?, ?>)upStreamProjects.get(i)); } } return time; } private int compareEstimatedDuration(AbstractProject<?, ?> a, AbstractProject<?, ?> b) { if(getTotalEstimatedDuration(a) < getTotalEstimatedDuration(b)) { return -1; } else if (getTotalEstimatedDuration(a) > getTotalEstimatedDuration(b)) { return 1; } else { return 0; } } }