Search in sources :

Example 16 with RepositoryEntryMembership

use of org.olat.repository.model.RepositoryEntryMembership in project openolat by klemens.

the class AbstractMemberListController method updateTableModel.

protected List<MemberView> updateTableModel(SearchMembersParams params) {
    // course membership
    boolean managedMembersRepo = RepositoryEntryManagedFlag.isManaged(repoEntry, RepositoryEntryManagedFlag.membersmanagement);
    List<RepositoryEntryMembership> repoMemberships = repoEntry == null ? Collections.<RepositoryEntryMembership>emptyList() : repositoryManager.getRepositoryEntryMembership(repoEntry);
    // groups membership
    List<BusinessGroup> groups = repoEntry == null ? Collections.singletonList(businessGroup) : businessGroupService.findBusinessGroups(null, repoEntry, 0, -1);
    List<Long> groupKeys = new ArrayList<Long>();
    Map<Long, BusinessGroupShort> keyToGroupMap = new HashMap<>();
    for (BusinessGroup group : groups) {
        groupKeys.add(group.getKey());
        keyToGroupMap.put(group.getKey(), group);
    }
    List<BusinessGroupMembership> memberships = groups.isEmpty() ? Collections.<BusinessGroupMembership>emptyList() : businessGroupService.getBusinessGroupsMembership(groups);
    // get identities
    Set<Long> identityKeys = new HashSet<>();
    for (RepositoryEntryMembership membership : repoMemberships) {
        identityKeys.add(membership.getIdentityKey());
    }
    for (BusinessGroupMembership membership : memberships) {
        identityKeys.add(membership.getIdentityKey());
    }
    List<Identity> identities;
    if (identityKeys.isEmpty()) {
        identities = new ArrayList<>(0);
    } else {
        identities = filterIdentities(params, identityKeys);
    }
    Map<Long, MemberView> keyToMemberMap = new HashMap<>();
    List<MemberView> memberList = new ArrayList<>();
    Locale locale = getLocale();
    // reservations
    if (params.isPending()) {
        List<OLATResource> resourcesForReservations = new ArrayList<>();
        if (repoEntry != null) {
            resourcesForReservations.add(repoEntry.getOlatResource());
        }
        for (BusinessGroup group : groups) {
            resourcesForReservations.add(group.getResource());
        }
        List<ResourceReservation> reservations = acService.getReservations(resourcesForReservations);
        List<Long> pendingIdentityKeys = new ArrayList<>(reservations.size());
        for (ResourceReservation reservation : reservations) {
            pendingIdentityKeys.add(reservation.getIdentity().getKey());
        }
        if (StringHelper.containsNonWhitespace(params.getSearchString()) || StringHelper.containsNonWhitespace(params.getLogin()) || (params.getUserPropertiesSearch() != null && !params.getUserPropertiesSearch().isEmpty())) {
            List<Identity> pendingIdentities = filterIdentities(params, pendingIdentityKeys);
            pendingIdentityKeys.retainAll(PersistenceHelper.toKeys(pendingIdentities));
        }
        for (ResourceReservation reservation : reservations) {
            Identity identity = reservation.getIdentity();
            if (pendingIdentityKeys.contains(identity.getKey())) {
                MemberView member = new MemberView(identity, userPropertyHandlers, locale);
                member.getMembership().setPending(true);
                memberList.add(member);
                forgeLinks(member);
                keyToMemberMap.put(identity.getKey(), member);
            }
        }
    }
    Long me = getIdentity().getKey();
    Set<Long> loadStatus = new HashSet<>();
    for (Identity identity : identities) {
        MemberView member = new MemberView(identity, userPropertyHandlers, locale);
        if (chatEnabled) {
            if (identity.getKey().equals(me)) {
                member.setOnlineStatus("me");
            } else if (sessionManager.isOnline(identity.getKey())) {
                loadStatus.add(identity.getKey());
            } else {
                member.setOnlineStatus(Presence.unavailable.name());
            }
        }
        memberList.add(member);
        forgeLinks(member);
        keyToMemberMap.put(identity.getKey(), member);
    }
    if (loadStatus.size() > 0) {
        List<Long> statusToLoadList = new ArrayList<>(loadStatus);
        Map<Long, String> statusMap = imService.getBuddyStatus(statusToLoadList);
        for (Long toLoad : statusToLoadList) {
            String status = statusMap.get(toLoad);
            MemberView member = keyToMemberMap.get(toLoad);
            if (status == null) {
                member.setOnlineStatus(Presence.available.name());
            } else {
                member.setOnlineStatus(status);
            }
        }
    }
    for (BusinessGroupMembership membership : memberships) {
        Long identityKey = membership.getIdentityKey();
        MemberView memberView = keyToMemberMap.get(identityKey);
        if (memberView != null) {
            memberView.setFirstTime(membership.getCreationDate());
            memberView.setLastTime(membership.getLastModified());
            if (membership.isOwner()) {
                memberView.getMembership().setGroupTutor(true);
            }
            if (membership.isParticipant()) {
                memberView.getMembership().setGroupParticipant(true);
            }
            if (membership.isWaiting()) {
                memberView.getMembership().setGroupWaiting(true);
            }
            Long groupKey = membership.getGroupKey();
            BusinessGroupShort group = keyToGroupMap.get(groupKey);
            memberView.addGroup(group);
        }
    }
    for (RepositoryEntryMembership membership : repoMemberships) {
        Long identityKey = membership.getIdentityKey();
        MemberView memberView = keyToMemberMap.get(identityKey);
        if (memberView != null) {
            memberView.setFirstTime(membership.getCreationDate());
            memberView.setLastTime(membership.getLastModified());
            memberView.getMembership().setManagedMembersRepo(managedMembersRepo);
            if (membership.isOwner()) {
                memberView.getMembership().setRepoOwner(true);
            }
            if (membership.isCoach()) {
                memberView.getMembership().setRepoTutor(true);
            }
            if (membership.isParticipant()) {
                memberView.getMembership().setRepoParticipant(true);
            }
        }
    }
    if (repoEntry != null) {
        Map<Long, Date> lastLaunchDates = userInfosMgr.getRecentLaunchDates(repoEntry.getOlatResource());
        for (MemberView memberView : keyToMemberMap.values()) {
            Long identityKey = memberView.getIdentityKey();
            Date date = lastLaunchDates.get(identityKey);
            memberView.setLastTime(date);
        }
    }
    // the order of the filter is important
    filterByRoles(memberList, params);
    filterByOrigin(memberList, params);
    memberListModel.setObjects(memberList);
    membersTable.reset(true, true, true);
    return memberList;
}
Also used : Locale(java.util.Locale) BusinessGroupMembership(org.olat.group.BusinessGroupMembership) RepositoryEntryMembership(org.olat.repository.model.RepositoryEntryMembership) HashMap(java.util.HashMap) ResourceReservation(org.olat.resource.accesscontrol.ResourceReservation) ArrayList(java.util.ArrayList) Identity(org.olat.core.id.Identity) BusinessGroupShort(org.olat.group.BusinessGroupShort) HashSet(java.util.HashSet) BusinessGroup(org.olat.group.BusinessGroup) OLATResource(org.olat.resource.OLATResource) Date(java.util.Date)

Aggregations

RepositoryEntryMembership (org.olat.repository.model.RepositoryEntryMembership)16 ArrayList (java.util.ArrayList)12 HashMap (java.util.HashMap)12 Identity (org.olat.core.id.Identity)10 BusinessGroupMembership (org.olat.group.BusinessGroupMembership)8 HashSet (java.util.HashSet)6 BusinessGroup (org.olat.group.BusinessGroup)6 Date (java.util.Date)4 List (java.util.List)4 BusinessGroupShort (org.olat.group.BusinessGroupShort)4 RepositoryEntry (org.olat.repository.RepositoryEntry)4 Locale (java.util.Locale)2 Test (org.junit.Test)2 MediaResource (org.olat.core.gui.media.MediaResource)2 Translator (org.olat.core.gui.translator.Translator)2 AssessmentData (org.olat.course.nodes.cl.model.AssessmentData)2 Checkbox (org.olat.course.nodes.cl.model.Checkbox)2 UserCourseEnvironmentImpl (org.olat.course.run.userview.UserCourseEnvironmentImpl)2 BGRepositoryEntryRelation (org.olat.group.model.BGRepositoryEntryRelation)2 OLATResource (org.olat.resource.OLATResource)2