package teamcity.crowd.plugin.loginmodule; import com.google.common.base.Optional; import jetbrains.buildServer.groups.UserGroupManager; import java.util.Formatter; public class GroupNameToGroupKey { private final UserGroupManager userGroupManager; public GroupNameToGroupKey(UserGroupManager userGroupManager) { this.userGroupManager = userGroupManager; } //private final UserGroupManager groupManger; public Optional<String> transform(String groupName) { String sanitizedGroupName = groupName.toUpperCase().replaceAll(" ", "_").replaceAll("-", "_"); if (sanitizedGroupName.length() < 16) { return Optional.of( sanitizedGroupName ); } sanitizedGroupName = sanitizedGroupName.substring(0, 16); if ( userGroupManager.findUserGroupByKey(sanitizedGroupName) == null ) { return Optional.of( sanitizedGroupName ); } else { return findAlternative(sanitizedGroupName); } } private Optional<String> findAlternative(String sanitizedGroupName) { String prefix = sanitizedGroupName.substring(0,13); for ( int i = 0 ; i < 1000 ; i++ ) { String newName = prefix + String.format("%03d", i); if (userGroupManager.findUserGroupByKey(newName) == null) { return Optional.of( newName ); } } return Optional.absent(); } }