diff options
Diffstat (limited to 'java/com/google/gerrit/common/data/SubmitRequirement.java')
-rw-r--r-- | java/com/google/gerrit/common/data/SubmitRequirement.java | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/java/com/google/gerrit/common/data/SubmitRequirement.java b/java/com/google/gerrit/common/data/SubmitRequirement.java new file mode 100644 index 0000000000..0c978ca539 --- /dev/null +++ b/java/com/google/gerrit/common/data/SubmitRequirement.java @@ -0,0 +1,79 @@ +// 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.annotations.GwtIncompatible; +import com.google.common.base.CharMatcher; +import com.google.common.collect.ImmutableMap; +import java.util.Map; + +/** Describes a requirement to submit a change. */ +@GwtIncompatible +@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); + } +} |