public static AccessControl parseAccessControl(String str) {
   String[] parts = str.split(":");
   String type = "other";
   String name = "";
   String access = "-";
   if (parts.length > 3) {
     throw new IllegalArgumentException("Don't know how to parse " + str + " into an ACL value");
   } else if (parts.length == 1) {
     type = "other";
     name = "";
     access = parts[0];
   } else if (parts.length == 2) {
     type = "user";
     name = parts[0];
     access = parts[1];
   } else if (parts.length == 3) {
     type = parts[0];
     name = parts[1];
     access = parts[2];
   }
   AccessControl ret = new AccessControl();
   ret.set_type(parseACLType(type));
   ret.set_name(name);
   ret.set_access(parseAccess(access));
   return ret;
 }
 private void fixACLsForUser(List<AccessControl> acls, String user, int mask) {
   boolean foundUserACL = false;
   for (AccessControl control : acls) {
     if (control.get_type() == AccessControlType.USER && control.get_name().equals(user)) {
       int currentAccess = control.get_access();
       if ((currentAccess & mask) != mask) {
         control.set_access(currentAccess | mask);
       }
       foundUserACL = true;
       break;
     }
   }
   if (!foundUserACL) {
     AccessControl userACL = new AccessControl();
     userACL.set_type(AccessControlType.USER);
     userACL.set_name(user);
     userACL.set_access(mask);
     acls.add(userACL);
   }
 }