@Override public Collection<GroupDO> getSortedGroups() { final Collection<GroupDO> allGroups = getUserGroupCache().getAllGroups(); TreeSet<GroupDO> sortedGroups = new TreeSet<GroupDO>(groupsComparator); final PFUserDO loggedInUser = ThreadLocalUserContext.getUser(); for (final GroupDO group : allGroups) { if (group.isDeleted() == false && groupDao.hasSelectAccess(loggedInUser, group, false) == true) { sortedGroups.add(group); } } return sortedGroups; }
/** * Get all given gid numbers of all ProjectForge groups including any deleted group and get the next highest and free * number. The number is 1000 if no gid number (with a value greater than 999) is found. */ public int getNextFreeGidNumber() { final UserGroupCache userGroupCache = TenantRegistryMap.getInstance().getTenantRegistry().getUserGroupCache(); final Collection<GroupDO> allGroups = userGroupCache.getAllGroups(); int currentMaxNumber = 999; for (final GroupDO group : allGroups) { final LdapGroupValues ldapGroupValues = groupDOConverter.readLdapGroupValues(group.getLdapValues()); if (ldapGroupValues == null) { continue; } if (ldapGroupValues.getGidNumber() != null && ldapGroupValues.getGidNumber().intValue() > currentMaxNumber) { currentMaxNumber = ldapGroupValues.getGidNumber(); } } return currentMaxNumber + 1; }
/** * For preventing double gidNumbers. * * @param currentGroup * @param gidNumber * @return Returns true if any group (also deleted group) other than the given group has the given gidNumber, * otherwise false. */ public boolean isGivenNumberFree(final GroupDO currentGroup, final int gidNumber) { final UserGroupCache userGroupCache = TenantRegistryMap.getInstance().getTenantRegistry().getUserGroupCache(); final Collection<GroupDO> allGroups = userGroupCache.getAllGroups(); for (final GroupDO group : allGroups) { final LdapGroupValues ldapGroupValues = groupDOConverter.readLdapGroupValues(group.getLdapValues()); if (ObjectUtils.equals(group.getId(), currentGroup.getId()) == true) { // The current group may have the given gidNumber already, so ignore this entry. continue; } if (ldapGroupValues != null && ldapGroupValues.getGidNumber() != null && ldapGroupValues.getGidNumber().intValue() == gidNumber) { // Number isn't free. log.info("The gidNumber (posix account) '" + gidNumber + "' is already occupied by group: " + group); return false; } } return true; }