James Moger
2012-11-02 ba6150d1712d5f5986e72333831940a46316aab3
src/com/gitblit/models/RegistrantAccessPermission.java
@@ -63,18 +63,67 @@
   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());
      }
   }