Merge "Fix the CURRENT report filter"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/GetVerifications.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/GetVerifications.java
index e900a3a..275e8ca 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/GetVerifications.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/server/GetVerifications.java
@@ -14,6 +14,7 @@
package com.googlesource.gerrit.plugins.verifystatus.server;
+import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gerrit.extensions.restapi.RestReadView;
import com.google.gerrit.server.change.RevisionResource;
@@ -28,7 +29,6 @@
import org.kohsuke.args4j.Option;
import java.io.IOException;
-import java.sql.Timestamp;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@@ -57,6 +57,47 @@
this.filter = filter.toUpperCase();
}
+ private VerificationInfo createVerificationInfo(PatchSetVerification v) {
+ VerificationInfo info = new VerificationInfo();
+ info.value = v.getValue();
+ info.abstain = v.getAbstain();
+ info.url = v.getUrl();
+ info.name = v.getName();
+ info.reporter = v.getReporter();
+ info.comment = v.getComment();
+ info.granted = v.getGranted();
+ info.category = v.getCategory();
+ info.duration = v.getDuration();
+ return info;
+ }
+
+ private void sortJobs(List<PatchSetVerification> jobs, String order) {
+ if (order.equals("REPORTER")) {
+ // sort the jobs list by reporter(A-Z)/Name(A-Z)/Granted(Z-A)
+ Collections.sort(jobs, new Comparator<PatchSetVerification>() {
+ @Override
+ public int compare(PatchSetVerification a, PatchSetVerification b) {
+ return new CompareToBuilder()
+ .append(a.getReporter(),b.getReporter())
+ .append(a.getName(), b.getName())
+ .append(b.getGranted(),a.getGranted())
+ .toComparison();
+ }
+ });
+ } else if (order.equals("NAME")) {
+ // sort the jobs list by Name(A-Z)/Granted(Z-A)
+ Collections.sort(jobs, new Comparator<PatchSetVerification>() {
+ @Override
+ public int compare(PatchSetVerification a, PatchSetVerification b) {
+ return new CompareToBuilder()
+ .append(a.getName(),b.getName())
+ .append(b.getGranted(),a.getGranted())
+ .toComparison();
+ }
+ });
+ }
+ }
+
@Override
public Map<String, VerificationInfo> apply(RevisionResource rsrc)
throws IOException, OrmException {
@@ -64,89 +105,54 @@
try (CiDb db = schemaFactory.open()) {
ResultSet<PatchSetVerification> rs =
db.patchSetVerifications().byPatchSet(rsrc.getPatchSet().getId());
- List<PatchSetVerification> jobs = rs.toList();
+ List<PatchSetVerification> result = rs.toList();
+ List<PatchSetVerification> jobs = Lists.newLinkedList();
+
+ // filter jobs
+ boolean isSorted = false;
+ if (filter != null && !filter.isEmpty()) {
+ if (filter.equals("CURRENT") ) {
+ // logic to get current jobs assumes list is sorted by reporter
+ sortJobs(result, "REPORTER");
+ isSorted = true;
+ String prevReporter = "";
+ String prevName = "";
+ for (PatchSetVerification v : result) {
+ String reporter = v.getReporter();
+ String jobName = v.getName();
+ if (!reporter.equals(prevReporter)) {
+ jobs.add(v);
+ } else if (!jobName.equals(prevName)) {
+ jobs.add(v);
+ }
+ prevReporter = reporter;
+ prevName = jobName;
+ }
+ } else if (filter.equals("FAILED") ) {
+ for (PatchSetVerification v : result) {
+ if (v.getValue() < 0) {
+ jobs.add(v);
+ }
+ }
+ } else {
+ // assume no filtering for an invalid filter option
+ jobs.addAll(result);
+ }
+ } else {
+ jobs.addAll(result);
+ }
+
+ // sort jobs
if (sort != null && !sort.isEmpty()) {
- // sort the jobs list by reporter (ascending) then reported date (descending)
- if (sort.equals("REPORTER")) {
- Collections.sort(jobs, new Comparator<PatchSetVerification>() {
- @Override
- public int compare(PatchSetVerification a, PatchSetVerification b) {
- return new CompareToBuilder()
- .append(a.getReporter(),b.getReporter())
- .append(b.getGranted(),a.getGranted())
- .toComparison();
- }
- });
+ if (sort.equals("REPORTER") && !isSorted) {
+ sortJobs(jobs, "REPORTER");
} else if (sort.equals("NAME")) {
- // sort the jobs list by name (ascending) then reported date (descending)
- Collections.sort(jobs, new Comparator<PatchSetVerification>() {
- @Override
- public int compare(PatchSetVerification a, PatchSetVerification b) {
- return new CompareToBuilder()
- .append(a.getName(),b.getName())
- .append(b.getGranted(),a.getGranted())
- .toComparison();
- }
- });
+ sortJobs(jobs, "NAME");
}
}
- if (filter != null && !filter.isEmpty()) {
- if (filter.equals("CURRENT") ) {
- Map<String, Timestamp> reported = Maps.newHashMap();
- for (PatchSetVerification v : jobs) {
- if (!reported.containsKey(v.getReporter())) {
- reported.put(v.getReporter(), v.getGranted());
- }
- }
- for (PatchSetVerification v : jobs) {
- Timestamp ts = v.getGranted();
- if (reported.values().contains(ts)) {
- VerificationInfo info = new VerificationInfo();
- info.value = v.getValue();
- info.abstain = v.getAbstain();
- info.url = v.getUrl();
- info.name = v.getName();
- info.reporter = v.getReporter();
- info.comment = v.getComment();
- info.granted = v.getGranted();
- info.category = v.getCategory();
- info.duration = v.getDuration();
- out.put(v.getJobId().get(), info);
- }
- }
- } else if (filter.equals("FAILED") ) {
- for (PatchSetVerification v : jobs) {
- if (v.getValue() < 0) {
- VerificationInfo info = new VerificationInfo();
- info.value = v.getValue();
- info.abstain = v.getAbstain();
- info.url = v.getUrl();
- info.name = v.getName();
- info.reporter = v.getReporter();
- info.comment = v.getComment();
- info.granted = v.getGranted();
- info.category = v.getCategory();
- info.duration = v.getDuration();
- out.put(v.getJobId().get(), info);
- }
- }
- }
- } else {
- // show all reports
- for (PatchSetVerification v : jobs) {
- VerificationInfo info = new VerificationInfo();
- info.value = v.getValue();
- info.abstain = v.getAbstain();
- info.url = v.getUrl();
- info.name = v.getName();
- info.reporter = v.getReporter();
- info.comment = v.getComment();
- info.granted = v.getGranted();
- info.category = v.getCategory();
- info.duration = v.getDuration();
- out.put(v.getJobId().get(), info);
- }
+ for (PatchSetVerification v : jobs) {
+ out.put(v.getJobId().get(), createVerificationInfo(v));
}
}
return out;