| // Copyright (C) 2008 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.gerrit.common.data; |
| |
| import com.google.gerrit.reviewdb.ApprovalCategory; |
| import com.google.gerrit.reviewdb.ApprovalCategoryValue; |
| import com.google.gerrit.reviewdb.PatchSetApproval; |
| |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.Comparator; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| public class ApprovalType { |
| protected ApprovalCategory category; |
| protected List<ApprovalCategoryValue> values; |
| protected short maxNegative; |
| protected short maxPositive; |
| |
| private transient Map<Short, ApprovalCategoryValue> byValue; |
| |
| protected ApprovalType() { |
| } |
| |
| public ApprovalType(final ApprovalCategory ac, |
| final List<ApprovalCategoryValue> valueList) { |
| category = ac; |
| values = new ArrayList<ApprovalCategoryValue>(valueList); |
| Collections.sort(values, new Comparator<ApprovalCategoryValue>() { |
| public int compare(ApprovalCategoryValue o1, ApprovalCategoryValue o2) { |
| return o1.getValue() - o2.getValue(); |
| } |
| }); |
| |
| maxNegative = Short.MIN_VALUE; |
| maxPositive = Short.MAX_VALUE; |
| if (values.size() > 0) { |
| if (values.get(0).getValue() < 0) { |
| maxNegative = values.get(0).getValue(); |
| } |
| if (values.get(values.size() - 1).getValue() > 0) { |
| maxPositive = values.get(values.size() - 1).getValue(); |
| } |
| } |
| } |
| |
| public ApprovalCategory getCategory() { |
| return category; |
| } |
| |
| public List<ApprovalCategoryValue> getValues() { |
| return values; |
| } |
| |
| public ApprovalCategoryValue getMin() { |
| if (values.isEmpty()) { |
| return null; |
| } |
| return values.get(0); |
| } |
| |
| public ApprovalCategoryValue getMax() { |
| if (values.isEmpty()) { |
| return null; |
| } |
| final ApprovalCategoryValue v = values.get(values.size() - 1); |
| return v.getValue() > 0 ? v : null; |
| } |
| |
| public boolean isMaxNegative(final PatchSetApproval ca) { |
| return maxNegative == ca.getValue(); |
| } |
| |
| public boolean isMaxPositive(final PatchSetApproval ca) { |
| return maxPositive == ca.getValue(); |
| } |
| |
| public ApprovalCategoryValue getValue(final short value) { |
| initByValue(); |
| return byValue.get(value); |
| } |
| |
| public ApprovalCategoryValue getValue(final PatchSetApproval ca) { |
| initByValue(); |
| return byValue.get(ca.getValue()); |
| } |
| |
| private void initByValue() { |
| if (byValue == null) { |
| byValue = new HashMap<Short, ApprovalCategoryValue>(); |
| for (final ApprovalCategoryValue acv : values) { |
| byValue.put(acv.getValue(), acv); |
| } |
| } |
| } |
| } |