package fi.otavanopisto.muikku.plugins.timed.notifications; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.List; import javax.enterprise.context.Dependent; import javax.enterprise.inject.Any; import javax.enterprise.inject.Instance; import javax.inject.Inject; import fi.otavanopisto.muikku.model.users.EnvironmentRoleArchetype; import fi.otavanopisto.muikku.plugins.timed.notifications.dao.NoPassedCoursesNotificationDAO; import fi.otavanopisto.muikku.plugins.timed.notifications.model.NoPassedCoursesNotification; import fi.otavanopisto.muikku.schooldata.GradingController; import fi.otavanopisto.muikku.schooldata.SchoolDataBridgeSessionController; import fi.otavanopisto.muikku.schooldata.SchoolDataIdentifier; import fi.otavanopisto.muikku.search.SearchProvider; import fi.otavanopisto.muikku.search.SearchResult; @Dependent public class NoPassedCoursesNotificationController { @Inject @Any private Instance<SearchProvider> searchProviders; @Inject private NoPassedCoursesNotificationDAO noPassedCoursesNotificationDAO; @Inject private GradingController gradingController; @Inject private SchoolDataBridgeSessionController schoolDataBridgeSessionController; public SearchResult searchActiveStudentIds(Collection<Long> groups, int firstResult, int maxResults, List<SchoolDataIdentifier> excludeSchoolDataIdentifiers, Date startedStudiesBefore){ SearchProvider searchProvider = getProvider("elastic-search"); return searchProvider.searchUsers( null, null, Collections.singleton(EnvironmentRoleArchetype.STUDENT), groups, null, null, false, // include inactive true, // include hidden true, // only default users firstResult, maxResults, Collections.singleton("id"), excludeSchoolDataIdentifiers, startedStudiesBefore); } public Long countPassedCoursesByStudentIdentifierSince(SchoolDataIdentifier studentIdentifier, Date since) { schoolDataBridgeSessionController.startSystemSession(); try { return gradingController.countStudentWorkspaceAssessments(studentIdentifier, since, null, true); } finally { schoolDataBridgeSessionController.endSystemSession(); } } public NoPassedCoursesNotification createNoPassedCoursesNotification(SchoolDataIdentifier studentIdentifier){ return noPassedCoursesNotificationDAO.create(studentIdentifier.toId(), new Date()); } public List<SchoolDataIdentifier> listNotifiedSchoolDataIdentifiersAfter(Date date) { List<SchoolDataIdentifier> results = new ArrayList<>(); List<NoPassedCoursesNotification> noPassedCoursesNotifications = noPassedCoursesNotificationDAO.listByDateAfter(date); for (NoPassedCoursesNotification noPassedCoursesNotification : noPassedCoursesNotifications) { results.add(SchoolDataIdentifier.fromId(noPassedCoursesNotification.getStudentIdentifier())); } return results; } private SearchProvider getProvider(String name) { for (SearchProvider searchProvider : searchProviders) { if (name.equals(searchProvider.getName())) { return searchProvider; } } return null; } }