James Moger
2012-11-23 d8a0f1e6e9d2420be31200cf0554336e84eec843
src/com/gitblit/models/RegistrantAccessPermission.java
@@ -35,29 +35,95 @@
   public AccessPermission permission;
   public RegistrantType registrantType;
   public PermissionType permissionType;
   public boolean isEditable;
   public boolean mutable;
   public String source;
   public RegistrantAccessPermission() {
   }
   public RegistrantAccessPermission(RegistrantType registrantType) {
      this.registrantType = registrantType;
      this.permissionType = PermissionType.EXPLICIT;
      this.isEditable = true;
      this.mutable = true;
   }
   
   public RegistrantAccessPermission(String registrant, AccessPermission permission, PermissionType permissionType, RegistrantType registrantType, boolean isEditable) {
   public RegistrantAccessPermission(String registrant, AccessPermission permission, PermissionType permissionType, RegistrantType registrantType, String source, boolean mutable) {
      this.registrant = registrant;
      this.permission = permission;
      this.permissionType = permissionType;
      this.registrantType = registrantType;
      this.isEditable = isEditable;
      this.source = source;
      this.mutable = mutable;
   }
   public boolean isAdmin() {
      return PermissionType.ADMINISTRATOR.equals(permissionType);
   }
   public boolean isOwner() {
      return PermissionType.OWNER.equals(permissionType);
   }
   public boolean isExplicit() {
      return PermissionType.EXPLICIT.equals(permissionType);
   }
   public boolean isRegex() {
      return PermissionType.REGEX.equals(permissionType);
   }
   public boolean isTeam() {
      return PermissionType.TEAM.equals(permissionType);
   }
   public boolean isMissing() {
      return PermissionType.MISSING.equals(permissionType);
   }
   public int getScore() {
      switch (registrantType) {
      case REPOSITORY:
         if (isAdmin()) {
            return 0;
         }
         if (isOwner()) {
            return 1;
         }
         if (isExplicit()) {
            return 2;
         }
         if (isRegex()) {
            return 3;
         }
         if (isTeam()) {
            return 4;
         }
      default:
         return 0;
      }
   }
   
   @Override
   public int compareTo(RegistrantAccessPermission p) {
      switch (registrantType) {
      case REPOSITORY:
         // repository permissions are sorted in score order
         // to convey the order in which permissions are tested
         int score1 = getScore();
         int score2 = p.getScore();
         if (score1 <= 2 && score2 <= 2) {
            // group admin, owner, and explicit together
            return StringUtils.compareRepositoryNames(registrant, p.registrant);
         }
         if (score1 < score2) {
            return -1;
         } else if (score2 < score1) {
            return 1;
         }
         return StringUtils.compareRepositoryNames(registrant, p.registrant);
      default:
         return registrant.toLowerCase().compareTo(p.registrant.toLowerCase());
         // user and team permissions are string sorted
         return registrant.toLowerCase().compareTo(p.registrant.toLowerCase());
      }
   }