James Moger
2012-10-10 20714aee0d2d2a989d93d6065e081aed8ac85fbf
src/com/gitblit/Constants.java
@@ -15,6 +15,10 @@
 */
package com.gitblit;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
 * Constant values used by Gitblit.
@@ -309,4 +313,72 @@
         return null;
      }
   }
   /**
    * The access permissions available for a repository.
    */
   public static enum AccessPermission {
      NONE("N"), VIEW("V"), CLONE("R"), PUSH("RW"), CREATE("RWC"), DELETE("RWD"), REWIND("RW+");
      public static AccessPermission LEGACY = REWIND;
      public final String code;
      private AccessPermission(String code) {
         this.code = code;
      }
      public boolean atLeast(AccessPermission perm) {
         return ordinal() >= perm.ordinal();
      }
      public boolean exceeds(AccessPermission perm) {
         return ordinal() > perm.ordinal();
      }
      public String asRole(String repository) {
         return code + ":" + repository;
      }
      @Override
      public String toString() {
         return code;
      }
      public static AccessPermission permissionFromRole(String role) {
         String [] fields = role.split(":", 2);
         if (fields.length == 1) {
            // legacy/undefined assume full permissions
            return AccessPermission.LEGACY;
         } else {
            // code:repository
            return AccessPermission.fromCode(fields[0]);
         }
      }
      public static String repositoryFromRole(String role) {
         String [] fields = role.split(":", 2);
         if (fields.length == 1) {
            // legacy/undefined assume full permissions
            return role;
         } else {
            // code:repository
            return fields[1];
         }
      }
      public static AccessPermission fromCode(String code) {
         for (AccessPermission perm : values()) {
            if (perm.code.equalsIgnoreCase(code)) {
               return perm;
            }
         }
         return AccessPermission.NONE;
      }
   }
   @Documented
   @Retention(RetentionPolicy.RUNTIME)
   public @interface Unused {
   }
}