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.StudyTimeNotificationDAO; import fi.otavanopisto.muikku.plugins.timed.notifications.model.StudyTimeNotification; import fi.otavanopisto.muikku.schooldata.SchoolDataIdentifier; import fi.otavanopisto.muikku.search.SearchProvider; import fi.otavanopisto.muikku.search.SearchResult; @Dependent public class StudyTimeLeftNotificationController { @Inject @Any private Instance<SearchProvider> searchProviders; @Inject private StudyTimeNotificationDAO studyTimeNotificationDAO; public SearchResult searchActiveStudentIds(Collection<Long> groups, int firstResult, int maxResults, List<SchoolDataIdentifier> excludeSchoolDataIdentifiers, Date studyTimeEndsBefore){ SearchProvider searchProvider = getProvider("elastic-search"); return searchProvider.searchUsers(null, null, Collections.singleton(EnvironmentRoleArchetype.STUDENT), groups, null, null, false, true, true, firstResult, maxResults, Collections.singleton("id"), excludeSchoolDataIdentifiers, null, studyTimeEndsBefore); } public List<SchoolDataIdentifier> listNotifiedSchoolDataIdentifiersAfter(Date date){ List<SchoolDataIdentifier> results = new ArrayList<>(); List<StudyTimeNotification> studyTimeNotifications = studyTimeNotificationDAO.listByDateAfter(date); for (StudyTimeNotification studyTimeNotification : studyTimeNotifications) { results.add(SchoolDataIdentifier.fromId(studyTimeNotification.getStudentIdentifier())); } return results; } public StudyTimeNotification createStudyTimeNotification(SchoolDataIdentifier studentIdentifier){ return studyTimeNotificationDAO.create(studentIdentifier.toId(), new Date()); } private SearchProvider getProvider(String name) { for (SearchProvider searchProvider : searchProviders) { if (name.equals(searchProvider.getName())) { return searchProvider; } } return null; } }