blob: e09b51f71b0501df9023d41fd82e919726f76568 [file] [log] [blame]
// Copyright (C) 2016 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.reviewit.app;
import com.google.gerrit.extensions.client.ReviewerState;
import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.common.ApprovalInfo;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.common.LabelInfo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
public class ApprovalData {
public final Set<AccountInfo> reviewers;
public final Set<AccountInfo> ccs;
public final Map<String, LabelInfo> labels;
public final TreeMap<String, Map<Integer, ApprovalInfo>> approvalsByLabel;
public ApprovalData(ChangeInfo change) {
reviewers = new TreeSet<>(new AccountComparator());
ccs = new TreeSet<>(new AccountComparator());
if (change.reviewers != null) {
if (change.reviewers.containsKey(ReviewerState.REVIEWER)) {
reviewers.addAll(change.reviewers.get(ReviewerState.REVIEWER));
}
if (change.reviewers.containsKey(ReviewerState.CC)) {
ccs.addAll(change.reviewers.get(ReviewerState.CC));
}
}
labels = new TreeMap<>();
approvalsByLabel = new TreeMap<>();
for (Map.Entry<String, LabelInfo> label : change.labels.entrySet()) {
Map<Integer, ApprovalInfo> approvalsByAccount = new HashMap<>();
labels.put(label.getKey(), label.getValue());
approvalsByLabel.put(label.getKey(), approvalsByAccount);
List<ApprovalInfo> all = change.labels.get(label.getKey()).all;
if (all != null) {
for (ApprovalInfo approval : all) {
approvalsByAccount.put(approval._accountId, approval);
}
}
}
}
public boolean isMax(LabelInfo label, int value) {
Integer max = null;
for (String rangeValue : label.values.keySet()) {
Integer v = Integer.parseInt(rangeValue.trim());
if (max == null || v.intValue() > max.intValue()) {
max = v;
}
}
return max != null && max.equals(Integer.valueOf(value));
}
public boolean isMin(LabelInfo label, int value) {
Integer min = null;
for (String rangeValue : label.values.keySet()) {
Integer v = Integer.parseInt(rangeValue.trim());
if (min == null || v.intValue() < min.intValue()) {
min = v;
}
}
return min != null && min.equals(Integer.valueOf(value));
}
public SortedSet<AccountInfo> reviewersAndCcs() {
SortedSet<AccountInfo> result = new TreeSet<>(new AccountComparator());
result.addAll(reviewers);
result.addAll(ccs);
return result;
}
}