diff --git a/war/src/main/java/se/su/dsv/scipro/war/CoreConfig.java b/war/src/main/java/se/su/dsv/scipro/war/CoreConfig.java index de0b76037f..d6c35f2c4b 100644 --- a/war/src/main/java/se/su/dsv/scipro/war/CoreConfig.java +++ b/war/src/main/java/se/su/dsv/scipro/war/CoreConfig.java @@ -3,11 +3,13 @@ package se.su.dsv.scipro.war; import com.google.common.eventbus.EventBus; import jakarta.inject.Provider; import jakarta.persistence.EntityManager; +import org.apache.wicket.protocol.http.WebApplication; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import se.su.dsv.scipro.CurrentUserFromWicketSession; +import se.su.dsv.scipro.DataInitializer; import se.su.dsv.scipro.FileSystemStore; import se.su.dsv.scipro.activityplan.ActivityPlanFacade; import se.su.dsv.scipro.activityplan.ActivityPlanFacadeImpl; @@ -18,6 +20,11 @@ import se.su.dsv.scipro.checklist.ChecklistAnswerServiceImpl; import se.su.dsv.scipro.checklist.ChecklistServiceImpl; import se.su.dsv.scipro.checklist.ChecklistTemplateService; import se.su.dsv.scipro.checklist.ChecklistTemplateServiceImpl; +import se.su.dsv.scipro.crosscutting.ForwardPhase2Feedback; +import se.su.dsv.scipro.crosscutting.ReviewerAssignedDeadline; +import se.su.dsv.scipro.crosscutting.ReviewerAssignedNotifications; +import se.su.dsv.scipro.crosscutting.ReviewerSupportMailer; +import se.su.dsv.scipro.crosscutting.ReviewingNotifications; import se.su.dsv.scipro.daisyExternal.http.DaisyAPIImpl; import se.su.dsv.scipro.date.DateServiceImpl; import se.su.dsv.scipro.file.FileDescriptionRepo; @@ -31,6 +38,7 @@ import se.su.dsv.scipro.file.ProjectFileServiceImpl; import se.su.dsv.scipro.finalseminar.AuthorRepository; import se.su.dsv.scipro.finalseminar.FinalSeminarActiveParticipationRepository; import se.su.dsv.scipro.finalseminar.FinalSeminarActiveParticipationServiceImpl; +import se.su.dsv.scipro.finalseminar.FinalSeminarCreationSubscribers; import se.su.dsv.scipro.finalseminar.FinalSeminarOppositionRepo; import se.su.dsv.scipro.finalseminar.FinalSeminarOppositionServiceImpl; import se.su.dsv.scipro.finalseminar.FinalSeminarRepository; @@ -56,6 +64,8 @@ import se.su.dsv.scipro.forum.GroupThreadRepository; import se.su.dsv.scipro.forum.ProjectForumService; import se.su.dsv.scipro.forum.ProjectForumServiceImpl; import se.su.dsv.scipro.forum.ProjectThreadRepository; +import se.su.dsv.scipro.forum.notifications.ForumNotificationRepository; +import se.su.dsv.scipro.forum.notifications.ForumNotifications; import se.su.dsv.scipro.gdpr.ZipReporter; import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsService; import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsServiceImpl; @@ -69,8 +79,13 @@ import se.su.dsv.scipro.grading.PublicationMetadataServiceImpl; import se.su.dsv.scipro.grading.ThesisSubmissionHistoryService; import se.su.dsv.scipro.group.GroupService; import se.su.dsv.scipro.group.GroupServiceImpl; +import se.su.dsv.scipro.integration.activityfinalseminar.ActivityFinalSeminarRepository; +import se.su.dsv.scipro.integration.activityfinalseminar.FinalSeminarActivityHandler; +import se.su.dsv.scipro.integration.activityforum.ActivityThreadRepository; +import se.su.dsv.scipro.integration.activityforum.PostActivityUploadToForum; import se.su.dsv.scipro.mail.MailEventService; import se.su.dsv.scipro.mail.MailEventServiceImpl; +import se.su.dsv.scipro.match.AddActivityPlanOnProjectStart; import se.su.dsv.scipro.match.ApplicationPeriodFacadeImpl; import se.su.dsv.scipro.match.ApplicationPeriodProjectTypeServiceImpl; import se.su.dsv.scipro.match.ApplicationPeriodService; @@ -84,9 +99,12 @@ import se.su.dsv.scipro.match.MatchFollowUpServiceImpl; import se.su.dsv.scipro.match.MatchServiceImpl; import se.su.dsv.scipro.match.PreliminaryMatchServiceImpl; import se.su.dsv.scipro.match.ProgramServiceImpl; +import se.su.dsv.scipro.match.ProjectStartNotifier; import se.su.dsv.scipro.match.TargetRepository; import se.su.dsv.scipro.match.TargetServiceImpl; import se.su.dsv.scipro.milestones.MilestoneActivityTemplateRepository; +import se.su.dsv.scipro.milestones.service.ActivateCompletedMilestonesOnNewProjects; +import se.su.dsv.scipro.milestones.service.MilestoneActivityTemplateService; import se.su.dsv.scipro.milestones.service.impl.MilestoneActivityTemplateServiceImpl; import se.su.dsv.scipro.milestones.service.impl.MilestonePhaseTemplateServiceImpl; import se.su.dsv.scipro.milestones.service.impl.MilestoneServiceImpl; @@ -98,7 +116,9 @@ import se.su.dsv.scipro.nonworkperiod.NonWorkDayPeriodServiceImpl; import se.su.dsv.scipro.notes.NoteServiceImpl; import se.su.dsv.scipro.notifications.NotificationController; import se.su.dsv.scipro.notifications.NotificationControllerImpl; +import se.su.dsv.scipro.notifications.NotificationService; import se.su.dsv.scipro.notifications.NotificationServiceImpl; +import se.su.dsv.scipro.notifications.Notifications; import se.su.dsv.scipro.notifications.interfaces.NotificationMailFormatter; import se.su.dsv.scipro.notifications.interfaces.impl.NotificationMailFormatterImpl; import se.su.dsv.scipro.notifications.settings.service.DeliveryConfigurationService; @@ -153,6 +173,9 @@ import se.su.dsv.scipro.reviewing.ReviewerThreadRepository; import se.su.dsv.scipro.reviewing.ReviewingServiceImpl; import se.su.dsv.scipro.reviewing.RoughDraftApprovalService; import se.su.dsv.scipro.reviewing.RoughDraftApprovalServiceImpl; +import se.su.dsv.scipro.security.auth.AuthenticationProvider; +import se.su.dsv.scipro.security.auth.AuthenticationServiceImpl; +import se.su.dsv.scipro.security.auth.LocalAuthentication; import se.su.dsv.scipro.springdata.serviceimpls.SupervisorServiceImpl; import se.su.dsv.scipro.springdata.serviceimpls.UnitServiceImpl; import se.su.dsv.scipro.springdata.serviceimpls.UserProfileServiceImpl; @@ -168,6 +191,9 @@ import se.su.dsv.scipro.system.ExternalResourceServiceImpl; import se.su.dsv.scipro.system.FooterLinkRepo; import se.su.dsv.scipro.system.FooterLinkServiceImpl; import se.su.dsv.scipro.system.LocalUserSearch; +import se.su.dsv.scipro.system.PasswordRepo; +import se.su.dsv.scipro.system.PasswordService; +import se.su.dsv.scipro.system.PasswordServiceImpl; import se.su.dsv.scipro.system.ProjectTypeServiceImpl; import se.su.dsv.scipro.system.ResearchAreaServiceImpl; import se.su.dsv.scipro.system.UserNameServiceImpl; @@ -178,6 +204,7 @@ import se.su.dsv.scipro.thesislink.ExternalLinkServiceImpl; import se.su.dsv.scipro.workerthreads.WorkerDataServiceImpl; import java.time.Clock; +import java.util.Set; @Configuration(proxyBeanMethods = false) public class CoreConfig { @@ -300,6 +327,19 @@ public class CoreConfig { return new ApplicationPeriodServiceImpl(em, clock); } + @Bean + public AuthenticationServiceImpl authenticationService(Set<AuthenticationProvider> authenticationProviders) { + return new AuthenticationServiceImpl(authenticationProviders); + } + + @Bean + public LocalAuthentication localAuthentication( + UserService userService, + PasswordService passwordService) + { + return new LocalAuthentication(userService, passwordService); + } + @Bean public BasicForumServiceImpl basicForumService( ForumPostRepository forumPostRepository, @@ -593,6 +633,11 @@ public class CoreConfig { fileService, finalSeminarOppositionRepository); } + @Bean + public PasswordServiceImpl passwordService(PasswordRepo passwordRepo) { + return new PasswordServiceImpl(passwordRepo); + } + @Bean public PeerPortalImpl peerPortal( FileService fileService, @@ -880,4 +925,135 @@ public class CoreConfig { public CurrentUserFromWicketSession currentUserFromWicketSession() { return new CurrentUserFromWicketSession(); } + + @Bean + public ReviewingNotifications reviewingNotifications( + EventBus eventBus, + NotificationController notificationController, + GeneralSystemSettingsService generalSystemSettingsService, + WebApplication webApplication) + { + return new ReviewingNotifications(eventBus, notificationController, generalSystemSettingsService, + webApplication); + } + + @Bean + public ReviewerSupportMailer reviewerSupportMailer( + EventBus eventBus, + GeneralSystemSettingsService generalSystemSettingsService, + MailEventService mailEventService) + { + return new ReviewerSupportMailer(eventBus, mailEventService, generalSystemSettingsService); + } + + @Bean + public ReviewerAssignedNotifications reviewerAssignedNotifications( + EventBus eventBus, + NotificationController notificationController, + RoughDraftApprovalService roughDraftApprovalService, + FinalSeminarApprovalService finalSeminarApprovalService) + { + return new ReviewerAssignedNotifications(roughDraftApprovalService, + finalSeminarApprovalService, notificationController, eventBus); + } + + @Bean + public ReviewerAssignedDeadline reviewerAssignedDeadline( + EventBus eventBus, + ReviewerDeadlineSettingsService reviewerDeadlineSettingsService, + RoughDraftApprovalService roughDraftApprovalService, + FinalSeminarApprovalService finalSeminarApprovalService, + DaysService daysService, + Clock clock) + { + return new ReviewerAssignedDeadline(roughDraftApprovalService, finalSeminarApprovalService, + reviewerDeadlineSettingsService, daysService, eventBus, clock); + } + + @Bean + public ForwardPhase2Feedback forwardPhase2Feedback( + EventBus eventBus, + WebApplication webApplication, + ProjectForumService projectForumService) + { + return new ForwardPhase2Feedback(webApplication, projectForumService, eventBus); + } + + @Bean + public DataInitializer dataInitializer() { + return new DataInitializer(); + } + + @Bean + public FinalSeminarActivityHandler finalSeminarActivityHandler( + ActivityPlanFacade activityPlanFacade, + ActivityFinalSeminarRepository activityFinalSeminarRepository, + EventBus eventBus) + { + return new FinalSeminarActivityHandler(activityPlanFacade, activityFinalSeminarRepository, eventBus); + } + + @Bean + public PostActivityUploadToForum postActivityUploadToForum( + EventBus eventBus, + ProjectForumService projectForumService, + ActivityThreadRepository activityThreadRepository) + { + return new PostActivityUploadToForum(projectForumService, activityThreadRepository, eventBus); + } + + @Bean + public ForumNotifications forumNotifications( + EventBus eventBus, + NotificationController notificationController, + ForumNotificationRepository forumNotificationRepository, + NotificationService notificationService) + { + return new ForumNotifications(eventBus, notificationController, forumNotificationRepository, + notificationService); + } + + @Bean + public ActivateCompletedMilestonesOnNewProjects activateCompletedMilestonesOnNewProjects( + EventBus eventBus, + MilestoneServiceImpl milestoneService, + PeerReviewService peerReviewService, + MilestoneActivityTemplateService milestoneActivityTemplateService, + FinalSeminarService finalSeminarService) + { + return new ActivateCompletedMilestonesOnNewProjects(peerReviewService, milestoneActivityTemplateService, + milestoneService, eventBus, finalSeminarService); + } + + @Bean + public FinalSeminarCreationSubscribers finalSeminarCreationSubscribers( + EventBus eventBus, + FinalSeminarServiceImpl finalSeminarService, + NotificationController notificationController, + AuthorRepository authorRepository) + { + return new FinalSeminarCreationSubscribers(authorRepository, finalSeminarService, notificationController, eventBus); + } + + @Bean + public ProjectStartNotifier projectStartNotifier(EventBus eventBus, NotificationController notificationController) { + return new ProjectStartNotifier(eventBus, notificationController); + } + + @Bean + public AddActivityPlanOnProjectStart addActivityPlanOnProjectStart( + ActivityPlanFacade activityPlanFacade, + EventBus eventBus) + { + return new AddActivityPlanOnProjectStart(activityPlanFacade, eventBus); + } + + @Bean + public Notifications notifications( + EventBus eventBus, + NotificationController notificationController, + NotificationService notificationService) + { + return new Notifications(notificationController, notificationService, eventBus); + } } diff --git a/war/src/main/java/se/su/dsv/scipro/war/RepositoryConfiguration.java b/war/src/main/java/se/su/dsv/scipro/war/RepositoryConfiguration.java index f984765ff8..bcde25f2ae 100644 --- a/war/src/main/java/se/su/dsv/scipro/war/RepositoryConfiguration.java +++ b/war/src/main/java/se/su/dsv/scipro/war/RepositoryConfiguration.java @@ -18,20 +18,19 @@ import se.su.dsv.scipro.forum.ForumPostReadStateRepositoryImpl; import se.su.dsv.scipro.forum.ForumPostRepositoryImpl; import se.su.dsv.scipro.forum.GroupThreadRepositoryImpl; import se.su.dsv.scipro.forum.ProjectThreadRepositoryImpl; +import se.su.dsv.scipro.forum.notifications.ForumNotificationRepositoryImpl; import se.su.dsv.scipro.grading.GradingHistoryEventRepositoryImpl; import se.su.dsv.scipro.grading.NationalSubjectCategoryRepositoryImpl; -import se.su.dsv.scipro.grading.PublicationMetadataRepository; import se.su.dsv.scipro.grading.PublicationMetadataRepositoryImpl; import se.su.dsv.scipro.integration.activityfinalseminar.ActivityFinalSeminarRepositoryImpl; +import se.su.dsv.scipro.integration.activityforum.ActivityThreadRepositoryImpl; import se.su.dsv.scipro.match.FirstMeetingRepositoryImpl; import se.su.dsv.scipro.match.IdeaRepositoryImpl; import se.su.dsv.scipro.match.TargetRepositoryImpl; import se.su.dsv.scipro.milestones.MilestoneActivityTemplateRepositoryImpl; import se.su.dsv.scipro.peer.CommentThreadRepoImpl; -import se.su.dsv.scipro.peer.PeerPortalImpl; import se.su.dsv.scipro.peer.PeerRequestRepositoryImpl; import se.su.dsv.scipro.peer.PeerReviewRepositoryImpl; -import se.su.dsv.scipro.peer.PerformReviewService; import se.su.dsv.scipro.plagiarism.PlagiarismRequestRepositoryImpl; import se.su.dsv.scipro.plagiarism.urkund.UrkundSettingsRepositoryImpl; import se.su.dsv.scipro.plagiarism.urkund.UrkundSubmissionRepositoryImpl; @@ -67,6 +66,11 @@ public class RepositoryConfiguration { return new ActivityFinalSeminarRepositoryImpl(em); } + @Bean + public ActivityThreadRepositoryImpl activityThreadRepository(Provider<EntityManager> em) { + return new ActivityThreadRepositoryImpl(em); + } + @Bean public AuthorRepositoryImpl authorRepository(Provider<EntityManager> em) { return new AuthorRepositoryImpl(em); @@ -132,6 +136,11 @@ public class RepositoryConfiguration { return new FooterLinkRepoImpl(em); } + @Bean + public ForumNotificationRepositoryImpl forumNotificationRepository(Provider<EntityManager> em) { + return new ForumNotificationRepositoryImpl(em); + } + @Bean public ForumPostReadStateRepositoryImpl forumPostReadStateRepository(Provider<EntityManager> em) { return new ForumPostReadStateRepositoryImpl(em);