James Moger
2012-10-18 b0e164283fee6f993589cce849ba1fc7d294e89d
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.
@@ -43,6 +47,8 @@
   public static final String ADMIN_ROLE = "#admin";
   
   public static final String FORK_ROLE = "#fork";
   public static final String CREATE_ROLE = "#create";
   public static final String NOT_FEDERATED_ROLE = "#notfederated";
   
@@ -307,4 +313,74 @@
         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 final AccessPermission [] NEWPERMISSIONS = { VIEW, CLONE, PUSH, CREATE, DELETE, REWIND };
      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 {
   }
}