Class GroupStorageManager

All Implemented Interfaces:
GroupProvider, Provider, GroupLookupProvider

public class GroupStorageManager extends AbstractStorageManager<GroupStorageProvider,GroupStorageProviderModel> implements GroupProvider
  • Constructor Details

    • GroupStorageManager

      public GroupStorageManager(KeycloakSession session)
  • Method Details

    • getGroupById

      public GroupModel getGroupById(RealmModel realm, String id)
      Description copied from interface: GroupLookupProvider
      Returns a group from the given realm with the corresponding id
      Specified by:
      getGroupById in interface GroupLookupProvider
      Parameters:
      realm - Realm.
      id - Id.
      Returns:
      GroupModel with the corresponding id.
    • getGroupByName

      public GroupModel getGroupByName(RealmModel realm, GroupModel parent, String name)
      Description copied from interface: GroupLookupProvider
      Returns a group from the given realm with the corresponding name and parent
      Specified by:
      getGroupByName in interface GroupLookupProvider
      Parameters:
      realm - Realm.
      parent - parent Group. If null top level groups are searched
      name - name.
      Returns:
      GroupModel with the corresponding name.
    • searchGroupsByAttributes

      public Stream<GroupModel> searchGroupsByAttributes(RealmModel realm, Map<String,String> attributes, Integer firstResult, Integer maxResults)
      Description copied from interface: GroupLookupProvider
      Returns the groups filtered by attribute names and attribute values for the given realm.
      Specified by:
      searchGroupsByAttributes in interface GroupLookupProvider
      Parameters:
      realm - Realm.
      attributes - name-value pairs that are compared to group attributes.
      firstResult - First result to return. Ignored if negative or null.
      maxResults - Maximum number of results to return. Ignored if negative or null.
      Returns:
      Stream of groups with attributes matching all searched attributes. Never returns null.
    • searchForGroupByNameStream

      public Stream<GroupModel> searchForGroupByNameStream(RealmModel realm, String search, Boolean exact, Integer firstResult, Integer maxResults)
      Obtaining groups from an external client storage is time-bounded. In case the external group storage isn't available at least groups from a local storage are returned. For this purpose the DefaultKeycloakSessionFactory.getClientStorageProviderTimeout() property is used. Default value is 3000 milliseconds and it's configurable. See DefaultKeycloakSessionFactory for details.
      Specified by:
      searchForGroupByNameStream in interface GroupLookupProvider
      Parameters:
      realm - Realm.
      search - Case sensitive searched string.
      exact - Boolean which defines whether search param should be matched exactly.
      firstResult - First result to return. Ignored if negative or null.
      maxResults - Maximum number of results to return. Ignored if negative or null.
      Returns:
      Stream of root groups that have the given string in their name themself or a group in their child-collection has. The returned hierarchy contains siblings that do not necessarily have a matching name. Never returns null.
    • getGroupsStream

      public Stream<GroupModel> getGroupsStream(RealmModel realm)
      Description copied from interface: GroupProvider
      Returns groups for the given realm.
      Specified by:
      getGroupsStream in interface GroupProvider
      Parameters:
      realm - Realm.
      Returns:
      Stream of groups in the Realm.
    • getGroupsStream

      public Stream<GroupModel> getGroupsStream(RealmModel realm, Stream<String> ids, String search, Integer first, Integer max)
      Description copied from interface: GroupProvider
      Returns a paginated stream of groups with given ids and given search value in group names.
      Specified by:
      getGroupsStream in interface GroupProvider
      Parameters:
      realm - Realm.
      ids - Stream of ids.
      search - Case insensitive string which will be searched for. Ignored if null.
      first - Index of the first result to return. Ignored if negative or null.
      max - Maximum number of results to return. Ignored if negative or null.
      Returns:
      Stream of desired groups. Never returns null.
    • getGroupsCount

      public Long getGroupsCount(RealmModel realm, Boolean onlyTopGroups)
      Description copied from interface: GroupProvider
      Returns a number of groups/top level groups (i.e. groups without parent group) for the given realm.
      Specified by:
      getGroupsCount in interface GroupProvider
      Parameters:
      realm - Realm.
      onlyTopGroups - When true the function returns a count of top level groups only.
      Returns:
      Number of groups/top level groups.
    • getGroupsCountByNameContaining

      public Long getGroupsCountByNameContaining(RealmModel realm, String search)
      Description copied from interface: GroupProvider
      Returns the number of top level groups containing groups with the given string in name for the given realm.
      Specified by:
      getGroupsCountByNameContaining in interface GroupProvider
      Parameters:
      realm - Realm.
      search - Case insensitive string which will be searched for.
      Returns:
      Number of groups with the given string in its name.
    • getGroupsByRoleStream

      public Stream<GroupModel> getGroupsByRoleStream(RealmModel realm, RoleModel role, Integer firstResult, Integer maxResults)
      Description copied from interface: GroupProvider
      Returns groups with the given role in the given realm.
      Specified by:
      getGroupsByRoleStream in interface GroupProvider
      Parameters:
      realm - Realm.
      role - Role.
      firstResult - First result to return. Ignored if negative or null.
      maxResults - Maximum number of results to return. Ignored if negative or null.
      Returns:
      Stream of groups with the given role. Never returns null.
    • getTopLevelGroupsStream

      public Stream<GroupModel> getTopLevelGroupsStream(RealmModel realm, String search, Boolean exact, Integer firstResult, Integer maxResults)
      Description copied from interface: GroupProvider
      Returns top level groups (i.e. groups without parent group) for the given realm.
      Specified by:
      getTopLevelGroupsStream in interface GroupProvider
      Parameters:
      realm - Realm.
      search - The name that should be matched
      firstResult - First result to return. Ignored if negative or null.
      maxResults - Maximum number of results to return. Ignored if negative or null.
      Returns:
      Stream of top level groups in the realm. Never returns null.
    • createGroup

      public GroupModel createGroup(RealmModel realm, String id, GroupModel.Type type, String name, GroupModel toParent)
      Description copied from interface: GroupProvider
      Creates a new group with the given name, id, name and parent to the given realm.
      Specified by:
      createGroup in interface GroupProvider
      Parameters:
      realm - Realm.
      id - Id, will be generated if null.
      type - the group type. if not set, defaults to GroupModel.Type.REALM
      name - Name.
      toParent - Parent group, or null if the group is top level group
      Returns:
      Model of the created group
    • removeGroup

      public boolean removeGroup(RealmModel realm, GroupModel group)
      Description copied from interface: GroupProvider
      Removes the given group for the given realm.
      Specified by:
      removeGroup in interface GroupProvider
      Parameters:
      realm - Realm.
      group - Group.
      Returns:
      true if the group was removed, false if group doesn't exist or doesn't belong to the given realm
    • moveGroup

      public void moveGroup(RealmModel realm, GroupModel group, GroupModel toParent)
      Description copied from interface: GroupProvider
      This method is used for moving groups in group structure, for example:
      • making an existing child group child group of some other group,
      • setting a top level group (i.e. group without parent group) child of some group,
      • making a child group top level group (i.e. removing its parent group).
        Specified by:
        moveGroup in interface GroupProvider
        Parameters:
        realm - Realm owning this group.
        group - Group to update.
        toParent - New parent group, or null if we are moving the group to top level group.
      • addTopLevelGroup

        public void addTopLevelGroup(RealmModel realm, GroupModel subGroup)
        Description copied from interface: GroupProvider
        Removes parent group for the given group in the given realm.
        Specified by:
        addTopLevelGroup in interface GroupProvider
        Parameters:
        realm - Realm.
        subGroup - Group.
      • preRemove

        public void preRemove(RealmModel realm)
        Description copied from interface: GroupProvider
        Called when a realm is removed. Should remove all groups that belong to the realm.
        Specified by:
        preRemove in interface GroupProvider
        Parameters:
        realm - a reference to the realm
      • close

        public void close()
        Specified by:
        close in interface Provider