diff --git a/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java b/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java index e4e557d4b7e02266004ddb3e29db030d6f505310..1af2eb150e8a14722c7b55f1a57f9830b0a951cf 100644 --- a/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java +++ b/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java @@ -79,7 +79,7 @@ public class MembersCourseNodeRunController extends BasicController { RepositoryEntry courseRepositoryEntry = courseEnv.getCourseGroupManager().getCourseEntry(); List<Identity> owners; - List<Identity> coaches = new ArrayList<>(); + List<Identity> coaches; List<Identity> participants = new ArrayList<>(); boolean showOwners = config.getBooleanSafe(MembersCourseNode.CONFIG_KEY_SHOWOWNER); @@ -105,8 +105,10 @@ public class MembersCourseNodeRunController extends BasicController { MembersCourseNode.CONFIG_KEY_COACHES_CUR_ELEMENT)) { CourseGroupManager cgm = courseEnv.getCourseGroupManager(); - MembersHelpers.addCoaches(config, cgm, businessGroupService, coaches); + coaches = MembersHelpers.getCoaches(config, cgm, businessGroupService); showCoaches = true; + } else { + coaches = Collections.emptyList(); } boolean showParticipants = false; @@ -115,8 +117,10 @@ public class MembersCourseNodeRunController extends BasicController { MembersCourseNode.CONFIG_KEY_PARTICIPANTS_CUR_ELEMENT)) { CourseGroupManager cgm = courseEnv.getCourseGroupManager(); - MembersHelpers.addParticipants(config, cgm, businessGroupService, participants); + participants = MembersHelpers.getParticipants(config, cgm, businessGroupService); showParticipants = true; + } else { + participants = Collections.emptyList(); } Map<Long,CurriculumMemberInfos> curriculumInfos = null; diff --git a/src/main/java/org/olat/course/nodes/members/MembersHelpers.java b/src/main/java/org/olat/course/nodes/members/MembersHelpers.java index cad47689d7d41d3a20f3d062204f283eda01c77d..a1fc4cb1d99c022f25c59c4dc36b35502eb16781 100644 --- a/src/main/java/org/olat/course/nodes/members/MembersHelpers.java +++ b/src/main/java/org/olat/course/nodes/members/MembersHelpers.java @@ -21,6 +21,7 @@ package org.olat.course.nodes.members; import java.util.ArrayList; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Set; @@ -44,17 +45,33 @@ public class MembersHelpers { private MembersHelpers() { // CANNOT CREATE } + + private static void deduplicateList(List<Identity> list) { + if(list == null || list.size() < 2) return; + + Set<Identity> deduplicates = new HashSet<>(); + for(Iterator<Identity> it=list.iterator(); it.hasNext(); ) { + Identity identity = it.next(); + if(deduplicates.contains(identity)) { + it.remove(); + } else { + deduplicates.add(identity); + } + } + } // ----------------------------------------------------- public static List<Identity> getOwners(RepositoryService repositoryService, RepositoryEntry courseRepositoryEntry) { - return repositoryService.getMembers(courseRepositoryEntry, RepositoryEntryRelationType.all, GroupRoles.owner.name()); + List<Identity> owners = repositoryService.getMembers(courseRepositoryEntry, RepositoryEntryRelationType.all, GroupRoles.owner.name()); + deduplicateList(owners); + return owners; } // ----------------------------------------------------- - public static void addCoaches(ModuleConfiguration moduleConfiguration, CourseGroupManager cgm, BusinessGroupService bgs, List<Identity> list) { - + public static List<Identity> getCoaches(ModuleConfiguration moduleConfiguration, CourseGroupManager cgm, BusinessGroupService bgs) { + List<Identity> list = new ArrayList<>(); if(moduleConfiguration.has(MembersCourseNode.CONFIG_KEY_COACHES_GROUP)) { String coachGroupNames = moduleConfiguration.getStringValue(MembersCourseNode.CONFIG_KEY_COACHES_GROUP); List<Long> coachGroupKeys = moduleConfiguration.getList(MembersCourseNode.CONFIG_KEY_COACHES_GROUP_ID, Long.class); @@ -84,28 +101,31 @@ public class MembersHelpers { if(moduleConfiguration.anyTrue(MembersCourseNode.CONFIG_KEY_COACHES_ALL)) { list.addAll(retrieveCoachesFromCourseGroups(cgm)); } + + deduplicateList(list); + return list; } - public static List<Identity> retrieveCoachesFromAreas(List<Long> areaKeys, CourseGroupManager cgm) { + private static List<Identity> retrieveCoachesFromAreas(List<Long> areaKeys, CourseGroupManager cgm) { List<Identity> coaches = cgm.getCoachesFromAreas(areaKeys); return new ArrayList<>(new HashSet<>(coaches)); } - public static List<Identity> retrieveCoachesFromCurriculumElements(List<Long> elementKeys, CourseGroupManager cgm) { + private static List<Identity> retrieveCoachesFromCurriculumElements(List<Long> elementKeys, CourseGroupManager cgm) { List<Identity> coaches = cgm.getCoachesFromCurriculumElements(elementKeys); return new ArrayList<>(new HashSet<>(coaches)); } - public static List<Identity> retrieveCoachesFromGroups(List<Long> groupKeys, CourseGroupManager cgm) { + private static List<Identity> retrieveCoachesFromGroups(List<Long> groupKeys, CourseGroupManager cgm) { return new ArrayList<>(new HashSet<>(cgm.getCoachesFromBusinessGroups(groupKeys))); } - public static List<Identity> retrieveCoachesFromCourse(CourseGroupManager cgm) { + private static List<Identity> retrieveCoachesFromCourse(CourseGroupManager cgm) { return cgm.getCoaches(); } - public static List<Identity> retrieveCoachesFromCourseGroups(CourseGroupManager cgm) { + private static List<Identity> retrieveCoachesFromCourseGroups(CourseGroupManager cgm) { Set<Identity> uniq = new HashSet<>(); uniq.addAll(cgm.getCoachesFromAreas()); uniq.addAll(cgm.getCoachesFromBusinessGroups()); @@ -115,7 +135,8 @@ public class MembersHelpers { // ----------------------------------------------------- - public static void addParticipants(ModuleConfiguration moduleConfiguration, CourseGroupManager cgm, BusinessGroupService bgs, List<Identity> list) { + public static List<Identity> getParticipants(ModuleConfiguration moduleConfiguration, CourseGroupManager cgm, BusinessGroupService bgs) { + List<Identity> list = new ArrayList<>(); if(moduleConfiguration.has(MembersCourseNode.CONFIG_KEY_PARTICIPANTS_GROUP)) { String participantGroupNames = moduleConfiguration.getStringValue(MembersCourseNode.CONFIG_KEY_PARTICIPANTS_GROUP); @@ -147,21 +168,23 @@ public class MembersHelpers { if(moduleConfiguration.anyTrue(MembersCourseNode.CONFIG_KEY_PARTICIPANTS_ALL)) { list.addAll(retrieveParticipantsFromCourseGroups(cgm)); } + deduplicateList(list); + return list; } - public static List<Identity> retrieveParticipantsFromAreas(List<Long> areaKeys, CourseGroupManager cgm) { + private static List<Identity> retrieveParticipantsFromAreas(List<Long> areaKeys, CourseGroupManager cgm) { return cgm.getParticipantsFromAreas(areaKeys); } - public static List<Identity> retrieveParticipantsFromGroups(List<Long> groupKeys, CourseGroupManager cgm) { + private static List<Identity> retrieveParticipantsFromGroups(List<Long> groupKeys, CourseGroupManager cgm) { return cgm.getParticipantsFromBusinessGroups(groupKeys); } - public static List<Identity> retrieveParticipantsFromCurriculumElements(List<Long> elementKeys, CourseGroupManager cgm) { + private static List<Identity> retrieveParticipantsFromCurriculumElements(List<Long> elementKeys, CourseGroupManager cgm) { return cgm.getParticipantsFromCurriculumElements(elementKeys); } - public static List<Identity> retrieveParticipantsFromCourse(CourseGroupManager cgm) { + private static List<Identity> retrieveParticipantsFromCourse(CourseGroupManager cgm) { return cgm.getParticipants(); } diff --git a/src/main/java/org/olat/course/nodes/members/MembersPeekViewController.java b/src/main/java/org/olat/course/nodes/members/MembersPeekViewController.java index e948a2fb90e1c4c118cb54c9ec3f7a78d159b5c3..7da1838091c1785a1094998f376eee8f4ba90f44 100644 --- a/src/main/java/org/olat/course/nodes/members/MembersPeekViewController.java +++ b/src/main/java/org/olat/course/nodes/members/MembersPeekViewController.java @@ -127,14 +127,18 @@ public class MembersPeekViewController extends BasicController { owners = new ArrayList<>(); } - List<Identity> coaches = new ArrayList<>(); + List<Identity> coaches; if(withCoaches) { - MembersHelpers.addCoaches(config, cgm, businessGroupService, coaches); + coaches = MembersHelpers.getCoaches(config, cgm, businessGroupService); + } else { + coaches = new ArrayList<>(); } - List<Identity> participants = new ArrayList<>(); + List<Identity> participants; if(withParticipants) { - MembersHelpers.addParticipants(config, cgm, businessGroupService, participants); + participants = MembersHelpers.getParticipants(config, cgm, businessGroupService); + } else { + participants = new ArrayList<>(); } MembersCourseNodeConfiguration nodeConfig = (MembersCourseNodeConfiguration)CourseNodeFactory.getInstance().getCourseNodeConfiguration("cmembers");