package com.smartcodeltd.jenkinsci.plugins.buildmonitor.order;
import hudson.model.Job;
import hudson.model.Result;
import hudson.model.Run;
import java.util.Comparator;
public class ByStatus implements Comparator<Job<?, ?>> {
@Override
public int compare(Job<?, ?> a, Job<?, ?> b) {
return bothProjectsHaveBuildHistory(a, b)
? compareRecentlyCompletedBuilds(a, b)
: compareProjects(a, b);
}
// --
private boolean bothProjectsHaveBuildHistory(Job<?, ?> a, Job<?, ?> b) {
return a.getLastCompletedBuild() != null && b.getLastCompletedBuild() != null;
}
private int compareProjects(Job<?, ?> a, Job<?, ?> b) {
Run<?, ?> recentBuildOfA = a.getLastCompletedBuild();
Run<?, ?> recentBuildOfB = b.getLastCompletedBuild();
if (recentBuildOfA == null && recentBuildOfB != null) {
return -1;
} else if (recentBuildOfA != null && recentBuildOfB == null) {
return 1;
} else {
return 0;
}
}
private int compareRecentlyCompletedBuilds(Job<?, ?> a, Job<?, ?> b) {
Result lastResultOfA = a.getLastCompletedBuild().getResult();
Result lastResultOfB = b.getLastCompletedBuild().getResult();
if (lastResultOfA.isWorseThan(lastResultOfB)) {
return -1;
} else if (lastResultOfA.isBetterThan(lastResultOfB)) {
return 1;
} else {
return 0;
}
}
}