| // Copyright (C) 2018 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 static com.google.common.base.Preconditions.checkState; | |
| import com.google.auto.value.AutoValue; | |
| import com.google.common.base.CharMatcher; | |
| import com.google.common.collect.ImmutableMap; | |
| import java.util.Map; | |
| /** Describes a requirement to submit a change. */ | |
| @AutoValue | |
| @AutoValue.CopyAnnotations | |
| public abstract class SubmitRequirement { | |
| private static final CharMatcher TYPE_MATCHER = | |
| CharMatcher.inRange('a', 'z') | |
| .or(CharMatcher.inRange('A', 'Z')) | |
| .or(CharMatcher.inRange('0', '9')) | |
| .or(CharMatcher.anyOf("-_")); | |
| @AutoValue.Builder | |
| public abstract static class Builder { | |
| public abstract Builder setType(String value); | |
| public abstract Builder setFallbackText(String value); | |
| public Builder setData(Map<String, String> value) { | |
| return setData(ImmutableMap.copyOf(value)); | |
| } | |
| public Builder addCustomValue(String key, String value) { | |
| dataBuilder().put(key, value); | |
| return this; | |
| } | |
| public SubmitRequirement build() { | |
| SubmitRequirement requirement = autoBuild(); | |
| checkState( | |
| validateType(requirement.type()), | |
| "SubmitRequirement's type contains non alphanumerical symbols."); | |
| return requirement; | |
| } | |
| abstract Builder setData(ImmutableMap<String, String> value); | |
| abstract ImmutableMap.Builder<String, String> dataBuilder(); | |
| abstract SubmitRequirement autoBuild(); | |
| } | |
| public abstract String fallbackText(); | |
| public abstract String type(); | |
| public abstract ImmutableMap<String, String> data(); | |
| public static Builder builder() { | |
| return new AutoValue_SubmitRequirement.Builder(); | |
| } | |
| private static boolean validateType(String type) { | |
| return TYPE_MATCHER.matchesAllOf(type); | |
| } | |
| } |