/** @inheritDoc */
  public List getUnassignedMembersInRole(final String siteContext, final Role role) {
    List siteMembers = getSiteMembersInRole(siteContext, role);

    // Get all userUids of all users in sections
    List<String> sectionedUserUids = new ArrayList<String>();
    List sections = getSections(siteContext);
    for (Iterator sectionIter = sections.iterator(); sectionIter.hasNext(); ) {
      CourseSection section = (CourseSection) sectionIter.next();
      List sectionUsers = securityService.unlockUsers(getLock(role), section.getUuid());
      for (Iterator userIter = sectionUsers.iterator(); userIter.hasNext(); ) {
        org.sakaiproject.user.api.User user = (org.sakaiproject.user.api.User) userIter.next();
        sectionedUserUids.add(user.getId());
      }
    }

    // Now generate the list of unsectioned enrollments by subtracting the two collections
    // Since the APIs return different kinds of objects, we need to iterate
    List<ParticipationRecord> unsectionedMembers = new ArrayList<ParticipationRecord>();
    for (Iterator iter = siteMembers.iterator(); iter.hasNext(); ) {
      ParticipationRecord record = (ParticipationRecord) iter.next();
      if (!sectionedUserUids.contains(record.getUser().getUserUid())) {
        unsectionedMembers.add(record);
      }
    }
    return unsectionedMembers;
  }
 private List getSiteInstructors(String siteContext) {
   Course course = getCourse(siteContext);
   if (course == null) {
     return new ArrayList();
   }
   List sakaiMembers =
       securityService.unlockUsers(SectionAwareness.INSTRUCTOR_MARKER, course.getUuid());
   List<InstructorRecordImpl> membersList = new ArrayList<InstructorRecordImpl>();
   for (Iterator iter = sakaiMembers.iterator(); iter.hasNext(); ) {
     org.sakaiproject.user.api.User sakaiUser = (org.sakaiproject.user.api.User) iter.next();
     User user = SakaiUtil.convertUser(sakaiUser);
     if (user != null) {
       InstructorRecordImpl record = new InstructorRecordImpl(course, user);
       membersList.add(record);
     }
   }
   return membersList;
 }
  private List getSiteTeachingAssistants(String siteContext) {
    Course course = getCourse(siteContext);
    if (course == null) {
      return new ArrayList();
    }
    List sakaiMembers = securityService.unlockUsers(SectionAwareness.TA_MARKER, course.getUuid());
    if (log.isDebugEnabled()) log.debug("Site TAs size = " + sakaiMembers.size());

    List<TeachingAssistantRecordImpl> membersList = new ArrayList<TeachingAssistantRecordImpl>();
    for (Iterator iter = sakaiMembers.iterator(); iter.hasNext(); ) {
      org.sakaiproject.user.api.User sakaiUser = (org.sakaiproject.user.api.User) iter.next();
      User user = SakaiUtil.convertUser(sakaiUser);
      if (user != null) {
        TeachingAssistantRecordImpl record = new TeachingAssistantRecordImpl(course, user);
        membersList.add(record);
      }
    }
    return membersList;
  }
 private List getSiteEnrollments(String siteContext) {
   Course course = getCourse(siteContext);
   if (course == null) {
     log.error("Could not find course site " + siteContext);
     return new ArrayList();
   }
   List sakaiMembers =
       securityService.unlockUsers(SectionAwareness.STUDENT_MARKER, course.getUuid());
   if (log.isDebugEnabled()) log.debug("Site students size = " + sakaiMembers.size());
   List<EnrollmentRecordImpl> membersList = new ArrayList<EnrollmentRecordImpl>();
   for (Iterator iter = sakaiMembers.iterator(); iter.hasNext(); ) {
     org.sakaiproject.user.api.User sakaiUser = (org.sakaiproject.user.api.User) iter.next();
     User user = SakaiUtil.convertUser(sakaiUser);
     if (user != null) {
       EnrollmentRecordImpl record = new EnrollmentRecordImpl(course, null, user);
       membersList.add(record);
     }
   }
   return membersList;
 }