summaryrefslogtreecommitdiffstats
path: root/gerrit-common/src/main/java/com/google/gerrit/common/data/AccessSection.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-common/src/main/java/com/google/gerrit/common/data/AccessSection.java')
-rw-r--r--gerrit-common/src/main/java/com/google/gerrit/common/data/AccessSection.java121
1 files changed, 121 insertions, 0 deletions
diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/data/AccessSection.java b/gerrit-common/src/main/java/com/google/gerrit/common/data/AccessSection.java
new file mode 100644
index 0000000000..cd64b0abd0
--- /dev/null
+++ b/gerrit-common/src/main/java/com/google/gerrit/common/data/AccessSection.java
@@ -0,0 +1,121 @@
+// Copyright (C) 2010 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.client.Project;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/** Portion of a {@link Project} describing access rules. */
+public class AccessSection extends RefConfigSection implements
+ Comparable<AccessSection> {
+ /** Special name given to the global capabilities; not a valid reference. */
+ public static final String GLOBAL_CAPABILITIES = "GLOBAL_CAPABILITIES";
+
+ protected List<Permission> permissions;
+
+ protected AccessSection() {
+ }
+
+ public AccessSection(String refPattern) {
+ super(refPattern);
+ }
+
+ public List<Permission> getPermissions() {
+ if (permissions == null) {
+ permissions = new ArrayList<Permission>();
+ }
+ return permissions;
+ }
+
+ public void setPermissions(List<Permission> list) {
+ Set<String> names = new HashSet<String>();
+ for (Permission p : list) {
+ if (!names.add(p.getName().toLowerCase())) {
+ throw new IllegalArgumentException();
+ }
+ }
+
+ permissions = list;
+ }
+
+ public Permission getPermission(String name) {
+ return getPermission(name, false);
+ }
+
+ public Permission getPermission(String name, boolean create) {
+ for (Permission p : getPermissions()) {
+ if (p.getName().equalsIgnoreCase(name)) {
+ return p;
+ }
+ }
+
+ if (create) {
+ Permission p = new Permission(name);
+ permissions.add(p);
+ return p;
+ } else {
+ return null;
+ }
+ }
+
+ public void remove(Permission permission) {
+ if (permission != null) {
+ removePermission(permission.getName());
+ }
+ }
+
+ public void removePermission(String name) {
+ if (permissions != null) {
+ for (Iterator<Permission> itr = permissions.iterator(); itr.hasNext();) {
+ if (name.equalsIgnoreCase(itr.next().getName())) {
+ itr.remove();
+ }
+ }
+ }
+ }
+
+ public void mergeFrom(AccessSection section) {
+ for (Permission src : section.getPermissions()) {
+ Permission dst = getPermission(src.getName());
+ if (dst != null) {
+ dst.mergeFrom(src);
+ } else {
+ permissions.add(src);
+ }
+ }
+ }
+
+ @Override
+ public int compareTo(AccessSection o) {
+ return comparePattern().compareTo(o.comparePattern());
+ }
+
+ private String comparePattern() {
+ if (getName().startsWith(REGEX_PREFIX)) {
+ return getName().substring(REGEX_PREFIX.length());
+ }
+ return getName();
+ }
+
+ @Override
+ public String toString() {
+ return "AccessSection[" + getName() + "]";
+ }
+}