diff --git a/core/src/main/java/se/su/dsv/scipro/checklist/ChecklistAnswerServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/checklist/ChecklistAnswerServiceImpl.java index 1e1893ccda..20a612c25f 100644 --- a/core/src/main/java/se/su/dsv/scipro/checklist/ChecklistAnswerServiceImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/checklist/ChecklistAnswerServiceImpl.java @@ -9,7 +9,7 @@ import jakarta.persistence.EntityManager; public class ChecklistAnswerServiceImpl extends AbstractServiceImpl<ChecklistAnswer, Long> implements ChecklistAnswerService { @Inject - protected ChecklistAnswerServiceImpl(Provider<EntityManager> em) { + public ChecklistAnswerServiceImpl(Provider<EntityManager> em) { super(em, ChecklistAnswer.class, QChecklistAnswer.checklistAnswer); } } diff --git a/core/src/main/java/se/su/dsv/scipro/file/FileReferenceRepository.java b/core/src/main/java/se/su/dsv/scipro/file/FileReferenceRepository.java index a942b50e60..3264448133 100644 --- a/core/src/main/java/se/su/dsv/scipro/file/FileReferenceRepository.java +++ b/core/src/main/java/se/su/dsv/scipro/file/FileReferenceRepository.java @@ -1,6 +1,6 @@ package se.su.dsv.scipro.file; -interface FileReferenceRepository { +public interface FileReferenceRepository { FileReference create(FileReference fileReference); void delete(FileReference fileReference); diff --git a/core/src/main/java/se/su/dsv/scipro/file/FileReferenceRepositoryImpl.java b/core/src/main/java/se/su/dsv/scipro/file/FileReferenceRepositoryImpl.java index 365a37b3ba..25e00cf450 100644 --- a/core/src/main/java/se/su/dsv/scipro/file/FileReferenceRepositoryImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/file/FileReferenceRepositoryImpl.java @@ -7,10 +7,10 @@ import jakarta.inject.Inject; import jakarta.inject.Provider; import jakarta.persistence.EntityManager; -class FileReferenceRepositoryImpl extends AbstractRepository implements FileReferenceRepository { +public class FileReferenceRepositoryImpl extends AbstractRepository implements FileReferenceRepository { @Inject - FileReferenceRepositoryImpl(final Provider<EntityManager> em) { + public FileReferenceRepositoryImpl(final Provider<EntityManager> em) { super(em); } diff --git a/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarRepositoryImpl.java b/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarRepositoryImpl.java index 34d92285b8..40e72964a7 100644 --- a/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarRepositoryImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarRepositoryImpl.java @@ -9,7 +9,7 @@ import jakarta.inject.Provider; public class FinalSeminarRepositoryImpl extends AbstractRepository implements FinalSeminarRepository { @Inject - protected FinalSeminarRepositoryImpl(Provider<EntityManager> em) { + public FinalSeminarRepositoryImpl(Provider<EntityManager> em) { super(em); } diff --git a/core/src/main/java/se/su/dsv/scipro/peer/CommentServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/peer/CommentServiceImpl.java index db26096621..63723ecf16 100644 --- a/core/src/main/java/se/su/dsv/scipro/peer/CommentServiceImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/peer/CommentServiceImpl.java @@ -10,7 +10,7 @@ import java.util.List; public class CommentServiceImpl extends AbstractServiceImpl<Comment, Long> implements CommentService { @Inject - protected CommentServiceImpl(Provider<EntityManager> em) { + public CommentServiceImpl(Provider<EntityManager> em) { super(em, Comment.class, QComment.comment1); } diff --git a/core/src/main/java/se/su/dsv/scipro/plagiarism/urkund/UrkundApiImpl.java b/core/src/main/java/se/su/dsv/scipro/plagiarism/urkund/UrkundApiImpl.java index 774dfdda3a..5a5f58f929 100644 --- a/core/src/main/java/se/su/dsv/scipro/plagiarism/urkund/UrkundApiImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/plagiarism/urkund/UrkundApiImpl.java @@ -36,7 +36,7 @@ public class UrkundApiImpl implements UrkundApi { private final FileService fileService; @Inject - UrkundApiImpl(final UrkundSettingsRepository urkundSettingsRepository, FileService fileService) { + public UrkundApiImpl(final UrkundSettingsRepository urkundSettingsRepository, FileService fileService) { this.urkundSettingsRepository = urkundSettingsRepository; this.fileService = fileService; objectMapper = new ObjectMapper(); diff --git a/core/src/main/java/se/su/dsv/scipro/project/ProjectPeopleStatisticsServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/project/ProjectPeopleStatisticsServiceImpl.java index 9a2862ae63..ada1db066b 100644 --- a/core/src/main/java/se/su/dsv/scipro/project/ProjectPeopleStatisticsServiceImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/project/ProjectPeopleStatisticsServiceImpl.java @@ -10,7 +10,7 @@ import jakarta.persistence.EntityManager; public class ProjectPeopleStatisticsServiceImpl extends AbstractServiceImpl<Project, Long> implements ProjectPeopleStatisticsService { @Inject - protected ProjectPeopleStatisticsServiceImpl(Provider<EntityManager> em) { + public ProjectPeopleStatisticsServiceImpl(Provider<EntityManager> em) { super(em, Project.class, QProject.project); } diff --git a/core/src/main/java/se/su/dsv/scipro/reflection/ReflectionServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/reflection/ReflectionServiceImpl.java index e3c60a5e10..bdc36bc904 100644 --- a/core/src/main/java/se/su/dsv/scipro/reflection/ReflectionServiceImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/reflection/ReflectionServiceImpl.java @@ -9,12 +9,12 @@ import se.su.dsv.scipro.system.User; import jakarta.inject.Inject; -class ReflectionServiceImpl implements ReflectionService { +public class ReflectionServiceImpl implements ReflectionService { private final AuthorRepository authorRepository; private final FinalSeminarService finalSeminarService; @Inject - ReflectionServiceImpl(AuthorRepository authorRepository, FinalSeminarService finalSeminarService) { + public ReflectionServiceImpl(AuthorRepository authorRepository, FinalSeminarService finalSeminarService) { this.authorRepository = authorRepository; this.finalSeminarService = finalSeminarService; } diff --git a/core/src/main/java/se/su/dsv/scipro/reviewing/ProjectFinalSeminarStatisticsServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/reviewing/ProjectFinalSeminarStatisticsServiceImpl.java index 018b255f9b..1e2d5c81c6 100644 --- a/core/src/main/java/se/su/dsv/scipro/reviewing/ProjectFinalSeminarStatisticsServiceImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/reviewing/ProjectFinalSeminarStatisticsServiceImpl.java @@ -27,7 +27,7 @@ import static com.querydsl.core.types.dsl.Expressions.anyOf; public class ProjectFinalSeminarStatisticsServiceImpl extends AbstractServiceImpl<Project, Long> implements ProjectFinalSeminarStatisticsService { @Inject - protected ProjectFinalSeminarStatisticsServiceImpl(Provider<EntityManager> em) { + public ProjectFinalSeminarStatisticsServiceImpl(Provider<EntityManager> em) { super(em, Project.class, QProject.project); } diff --git a/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerCapacityServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerCapacityServiceImpl.java index d36b452d03..35a69d8516 100644 --- a/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerCapacityServiceImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerCapacityServiceImpl.java @@ -25,7 +25,7 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Stream; -class ReviewerCapacityServiceImpl implements ReviewerCapacityService, ReviewerAssignmentService { +public class ReviewerCapacityServiceImpl implements ReviewerCapacityService, ReviewerAssignmentService { private final ReviewerTargetRepository reviewerTargetRepository; private final DecisionRepository decisionRepository; private final UserService userService; @@ -33,7 +33,7 @@ class ReviewerCapacityServiceImpl implements ReviewerCapacityService, ReviewerAs private final EventBus eventBus; @Inject - ReviewerCapacityServiceImpl( + public ReviewerCapacityServiceImpl( ReviewerTargetRepository reviewerTargetRepository, DecisionRepository decisionRepository, UserService userService, diff --git a/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerDeadlineSettingsRepository.java b/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerDeadlineSettingsRepository.java index 0094b9e7dc..e95b191bb8 100644 --- a/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerDeadlineSettingsRepository.java +++ b/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerDeadlineSettingsRepository.java @@ -1,6 +1,6 @@ package se.su.dsv.scipro.reviewing; -interface ReviewerDeadlineSettingsRepository { +public interface ReviewerDeadlineSettingsRepository { ReviewerDeadlineSettings findOne(long instanceId); ReviewerDeadlineSettings save(ReviewerDeadlineSettings entity); diff --git a/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerDeadlineSettingsRepositoryImpl.java b/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerDeadlineSettingsRepositoryImpl.java index bcaf1e434e..6839c0cac5 100644 --- a/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerDeadlineSettingsRepositoryImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerDeadlineSettingsRepositoryImpl.java @@ -6,12 +6,12 @@ import se.su.dsv.scipro.system.AbstractRepository; import jakarta.inject.Inject; import jakarta.inject.Provider; -class ReviewerDeadlineSettingsRepositoryImpl +public class ReviewerDeadlineSettingsRepositoryImpl extends AbstractRepository implements ReviewerDeadlineSettingsRepository { @Inject - ReviewerDeadlineSettingsRepositoryImpl(Provider<EntityManager> em) { + public ReviewerDeadlineSettingsRepositoryImpl(Provider<EntityManager> em) { super(em); } 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 12860dcade..e26b4761ca 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 @@ -5,32 +5,139 @@ import jakarta.inject.Provider; import jakarta.persistence.EntityManager; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.FilterType; +import se.su.dsv.scipro.CurrentUserFromWicketSession; import se.su.dsv.scipro.FileSystemStore; +import se.su.dsv.scipro.activityplan.ActivityPlanFacade; +import se.su.dsv.scipro.activityplan.ActivityPlanFacadeImpl; +import se.su.dsv.scipro.activityplan.ActivityPlanServiceImpl; +import se.su.dsv.scipro.activityplan.ActivityPlanTemplateServiceImpl; +import se.su.dsv.scipro.activityplan.ActivityServiceImpl; +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.daisyExternal.http.DaisyAPIImpl; +import se.su.dsv.scipro.date.DateServiceImpl; +import se.su.dsv.scipro.file.FileDescriptionRepo; +import se.su.dsv.scipro.file.FileReferenceRepository; +import se.su.dsv.scipro.file.FileService; +import se.su.dsv.scipro.file.FileServiceImpl; import se.su.dsv.scipro.file.FileStore; -import se.su.dsv.scipro.forum.AbstractThreadRepository; -import se.su.dsv.scipro.forum.AbstractThreadRepositoryImpl; +import se.su.dsv.scipro.file.ProjectFileRepository; +import se.su.dsv.scipro.file.ProjectFileService; +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.FinalSeminarOppositionRepo; +import se.su.dsv.scipro.finalseminar.FinalSeminarOppositionServiceImpl; +import se.su.dsv.scipro.finalseminar.FinalSeminarRepository; +import se.su.dsv.scipro.finalseminar.FinalSeminarRespondentServiceImpl; +import se.su.dsv.scipro.finalseminar.FinalSeminarServiceImpl; +import se.su.dsv.scipro.finalseminar.FinalSeminarSettingsServiceImpl; +import se.su.dsv.scipro.finalthesis.FinalThesisService; +import se.su.dsv.scipro.finalthesis.FinalThesisServiceImpl; +import se.su.dsv.scipro.firstmeeting.FirstMeetingServiceImpl; +import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsService; +import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsServiceImpl; import se.su.dsv.scipro.grading.GradingHistory; import se.su.dsv.scipro.grading.GradingHistoryEventRepository; import se.su.dsv.scipro.grading.GradingServiceImpl; +import se.su.dsv.scipro.grading.ThesisSubmissionHistoryService; +import se.su.dsv.scipro.group.GroupServiceImpl; +import se.su.dsv.scipro.mail.MailEventService; +import se.su.dsv.scipro.mail.MailEventServiceImpl; +import se.su.dsv.scipro.match.ApplicationPeriodProjectTypeServiceImpl; +import se.su.dsv.scipro.match.ApplicationPeriodService; +import se.su.dsv.scipro.match.ApplicationPeriodServiceImpl; +import se.su.dsv.scipro.match.FirstMeetingRepository; +import se.su.dsv.scipro.match.IdeaRepository; +import se.su.dsv.scipro.match.IdeaService; +import se.su.dsv.scipro.match.IdeaServiceImpl; +import se.su.dsv.scipro.match.KeywordServiceImpl; +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.TargetRepository; +import se.su.dsv.scipro.match.TargetServiceImpl; +import se.su.dsv.scipro.milestones.service.impl.MilestonePhaseTemplateServiceImpl; +import se.su.dsv.scipro.milestones.service.impl.MilestoneServiceImpl; +import se.su.dsv.scipro.misc.DaysService; +import se.su.dsv.scipro.misc.DaysServiceImpl; +import se.su.dsv.scipro.nonworkperiod.NonWorkDayPeriodService; +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.NotificationServiceImpl; +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; +import se.su.dsv.scipro.notifications.settings.service.DeliveryConfigurationServiceImpl; +import se.su.dsv.scipro.notifications.settings.service.ReceiverConfigurationService; +import se.su.dsv.scipro.notifications.settings.service.ReceiverConfigurationServiceImpl; import se.su.dsv.scipro.oauth.OAuthSettings; +import se.su.dsv.scipro.peer.CommentServiceImpl; +import se.su.dsv.scipro.peer.PeerRequestServiceImpl; +import se.su.dsv.scipro.peer.PeerReviewRepository; +import se.su.dsv.scipro.peer.PeerReviewServiceImpl; +import se.su.dsv.scipro.plagiarism.PlagiarismControl; +import se.su.dsv.scipro.plagiarism.PlagiarismControlImpl; +import se.su.dsv.scipro.plagiarism.PlagiarismRequestRepository; +import se.su.dsv.scipro.plagiarism.urkund.UrkundApi; +import se.su.dsv.scipro.plagiarism.urkund.UrkundApiImpl; +import se.su.dsv.scipro.plagiarism.urkund.UrkundServiceImpl; +import se.su.dsv.scipro.plagiarism.urkund.UrkundSettingsRepository; +import se.su.dsv.scipro.plagiarism.urkund.UrkundSubmissionRepository; +import se.su.dsv.scipro.project.ProjectPeopleStatisticsServiceImpl; +import se.su.dsv.scipro.project.ProjectRepo; +import se.su.dsv.scipro.project.ProjectService; +import se.su.dsv.scipro.project.ProjectServiceImpl; +import se.su.dsv.scipro.projectpartner.ProjectPartnerServiceImpl; +import se.su.dsv.scipro.reflection.ReflectionService; +import se.su.dsv.scipro.reflection.ReflectionServiceImpl; +import se.su.dsv.scipro.report.GradingReportService; +import se.su.dsv.scipro.report.GradingReportServiceImpl; +import se.su.dsv.scipro.report.GradingReportTemplateRepo; +import se.su.dsv.scipro.report.OppositionReportRepo; +import se.su.dsv.scipro.report.OppositionReportServiceImpl; +import se.su.dsv.scipro.report.ReportServiceImpl; +import se.su.dsv.scipro.reviewing.DecisionRepository; +import se.su.dsv.scipro.reviewing.FinalSeminarApprovalServiceImpl; +import se.su.dsv.scipro.reviewing.ProjectFinalSeminarStatisticsServiceImpl; +import se.su.dsv.scipro.reviewing.ReviewerCapacityServiceImpl; +import se.su.dsv.scipro.reviewing.ReviewerDeadlineSettingsRepository; +import se.su.dsv.scipro.reviewing.ReviewerDeadlineSettingsService; +import se.su.dsv.scipro.reviewing.ReviewerDeadlineSettingsServiceImpl; +import se.su.dsv.scipro.reviewing.ReviewerTargetRepository; +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.springdata.serviceimpls.SupervisorServiceImpl; +import se.su.dsv.scipro.springdata.serviceimpls.UnitServiceImpl; +import se.su.dsv.scipro.springdata.serviceimpls.UserProfileServiceImpl; +import se.su.dsv.scipro.springdata.services.UserProfileService; import se.su.dsv.scipro.sukat.LDAP; import se.su.dsv.scipro.sukat.Sukat; +import se.su.dsv.scipro.survey.QuestionRepository; +import se.su.dsv.scipro.survey.SurveyRepository; +import se.su.dsv.scipro.survey.SurveyServiceImpl; +import se.su.dsv.scipro.system.CurrentUser; +import se.su.dsv.scipro.system.EventServiceImpl; +import se.su.dsv.scipro.system.FooterLinkRepo; +import se.su.dsv.scipro.system.FooterLinkServiceImpl; +import se.su.dsv.scipro.system.ProjectTypeServiceImpl; +import se.su.dsv.scipro.system.ResearchAreaServiceImpl; +import se.su.dsv.scipro.system.UserNameServiceImpl; +import se.su.dsv.scipro.system.UserService; +import se.su.dsv.scipro.system.UserServiceImpl; +import se.su.dsv.scipro.thesislink.ExternalLinkServiceImpl; +import se.su.dsv.scipro.workerthreads.WorkerDataServiceImpl; import java.time.Clock; @Configuration -@ComponentScan( - basePackages = "se.su.dsv.scipro", - includeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*Impl$"), - excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = { - ".*Abstract.*", - ".*[Dd]aisy.*", - ".*GradingServiceImpl" - })) public class CoreConfig { @Bean public EventBus eventBus() { @@ -62,12 +169,6 @@ public class CoreConfig { return new OAuthSettings(uri, redirectUri, clientId, clientSecret); } - @Bean - // weird name, both abstract and impl - public AbstractThreadRepository abstractThreadRepository(Provider<EntityManager> em) { - return new AbstractThreadRepositoryImpl(em); - } - @Bean public Sukat sukat() { return new LDAP(); @@ -86,4 +187,497 @@ public class CoreConfig { public GradingServiceImpl gradingService(@Value("${service.grading.url}") final String url) { return new GradingServiceImpl(url); } + + @Bean + public FinalSeminarApprovalServiceImpl finalSeminarApprovalService( + Provider<EntityManager> em, + FileService fileDescriptionService, + EventBus eventBus, + DaysService daysService, + ReviewerDeadlineSettingsService reviewerDeadlineSettingsService) + { + return new FinalSeminarApprovalServiceImpl(em, fileDescriptionService, eventBus, daysService, reviewerDeadlineSettingsService); + } + + @Bean + public RoughDraftApprovalServiceImpl roughDraftApprovalService( + Provider<EntityManager> em, + FileService fileDescriptionService, + EventBus eventBus, + DaysService daysService, + ReviewerDeadlineSettingsService reviewerDeadlineSettingsService) + { + return new RoughDraftApprovalServiceImpl(em, eventBus, fileDescriptionService, daysService, reviewerDeadlineSettingsService); + } + + @Bean + public ActivityPlanServiceImpl activityPlanService(Provider<EntityManager> em) { + return new ActivityPlanServiceImpl(em); + } + + @Bean + public ActivityPlanTemplateServiceImpl activityPlanTemplateService(Provider<EntityManager> em) { + return new ActivityPlanTemplateServiceImpl(em); + } + + @Bean + public ActivityServiceImpl activityService(Provider<EntityManager> em) { + return new ActivityServiceImpl(em); + } + + @Bean + public ActivityPlanFacadeImpl activityPlanFacade( + EventBus eventBus, + ProjectFileService projectFileService, + ChecklistTemplateService checklistTemplateService, + DaysService daysService, + FileService fileService + ) + { + return new ActivityPlanFacadeImpl(eventBus, projectFileService, checklistTemplateService, daysService, + fileService); + } + + @Bean + public ApplicationPeriodProjectTypeServiceImpl applicationPeriodProjectTypeService(Provider<EntityManager> em) { + return new ApplicationPeriodProjectTypeServiceImpl(em); + } + + @Bean + public ApplicationPeriodServiceImpl applicationPeriodService(Provider<EntityManager> em, Clock clock) { + return new ApplicationPeriodServiceImpl(em, clock); + } + + @Bean + public ChecklistAnswerServiceImpl checklistAnswerService(Provider<EntityManager> em) { + return new ChecklistAnswerServiceImpl(em); + } + + @Bean + public ChecklistServiceImpl checklistService(Provider<EntityManager> em) { + return new ChecklistServiceImpl(em); + } + + @Bean + public ChecklistTemplateServiceImpl checklistTemplateService(Provider<EntityManager> em) { + return new ChecklistTemplateServiceImpl(em); + } + + @Bean + public CommentServiceImpl commentService(Provider<EntityManager> em) { + return new CommentServiceImpl(em); + } + + @Bean + public DateServiceImpl dateService() { + return new DateServiceImpl(); + } + + @Bean + public DaysServiceImpl daysService(NonWorkDayPeriodService nonWorkDayPeriodService) { + return new DaysServiceImpl(nonWorkDayPeriodService); + } + + @Bean + public DeliveryConfigurationServiceImpl deliveryConfigurationService( + Provider<EntityManager> em, + UserProfileService userProfileService) + { + return new DeliveryConfigurationServiceImpl(em, userProfileService); + } + + @Bean + public EventServiceImpl eventService(Provider<EntityManager> em) { + return new EventServiceImpl(em); + } + + @Bean + public ExternalLinkServiceImpl externalLinkService(Provider<EntityManager> em) { + return new ExternalLinkServiceImpl(em); + } + + @Bean + public FileServiceImpl fileService( + Provider<EntityManager> em, + FileStore fileStore, + FileReferenceRepository fileReferenceRepository, + FileDescriptionRepo fileDescriptionRepository) + { + return new FileServiceImpl(em, fileReferenceRepository, fileDescriptionRepository, fileStore); + } + + @Bean + public FinalSeminarActiveParticipationServiceImpl finalSeminarActiveParticipationService(Provider<EntityManager> em) { + return new FinalSeminarActiveParticipationServiceImpl(em); + } + + @Bean + public FinalSeminarOppositionServiceImpl finalSeminarOppositionService(Provider<EntityManager> em) { + return new FinalSeminarOppositionServiceImpl(em); + } + + @Bean + public FinalSeminarRespondentServiceImpl finalSeminarRespondentService(Provider<EntityManager> em) { + return new FinalSeminarRespondentServiceImpl(em); + } + + @Bean + public FinalSeminarServiceImpl finalSeminarService( + Provider<EntityManager> em, + EventBus eventBus, + FileService fileService, + AuthorRepository authorRepository, + FinalSeminarOppositionRepo finalSeminarOppositionRepository, + FinalSeminarActiveParticipationRepository finalSeminarActiveParticipationRepository, + FinalSeminarRepository finalSeminarRepository, + Clock clock, + RoughDraftApprovalService roughDraftApprovalService) + { + return new FinalSeminarServiceImpl( + em, + eventBus, + authorRepository, + fileService, + finalSeminarOppositionRepository, + finalSeminarActiveParticipationRepository, + finalSeminarRepository, + clock, + roughDraftApprovalService); + } + + @Bean + public FinalSeminarSettingsServiceImpl finalSeminarSettingsService(Provider<EntityManager> em) { + return new FinalSeminarSettingsServiceImpl(em); + } + + @Bean + public FinalThesisServiceImpl finalThesisService( + Provider<EntityManager> em, + NotificationController notification, + ProjectFileService projectFile, + FileService fileService, + EventBus eventBus, + PlagiarismControl plagiarismControl, + GradingReportService gradingReportService) + { + return new FinalThesisServiceImpl(em, notification, projectFile, + fileService, eventBus, plagiarismControl, gradingReportService); + } + + @Bean + public FirstMeetingServiceImpl firstMeetingService( + Provider<EntityManager> em, + ActivityPlanFacade activityPlanFacade) + { + return new FirstMeetingServiceImpl(em, activityPlanFacade); + } + + @Bean + public FooterLinkServiceImpl footerLinkService(FooterLinkRepo footerLinkRepository) { + return new FooterLinkServiceImpl(footerLinkRepository); + } + + @Bean + public GeneralSystemSettingsServiceImpl generalSystemSettingsService(Provider<EntityManager> em) { + return new GeneralSystemSettingsServiceImpl(em); + } + + @Bean + public GradingReportServiceImpl gradingReportService( + Provider<EntityManager> em, + EventBus eventBus, + ThesisSubmissionHistoryService thesisSubmissionHistoryService, + Clock clock) + { + return new GradingReportServiceImpl(em, eventBus, thesisSubmissionHistoryService, clock); + } + + @Bean + public GroupServiceImpl groupService(Provider<EntityManager> em) { + return new GroupServiceImpl(em); + } + + @Bean + public IdeaServiceImpl ideaService( + Provider<EntityManager> em, + ApplicationPeriodService applicationPeriodService, + FirstMeetingRepository firstMeetingRepository, + NotificationController notificationController, + ProjectService projectService, + GeneralSystemSettingsService generalSystemSettingsService, + TargetRepository targetRepository, + IdeaRepository ideaRepository, + Clock clock) + { + return new IdeaServiceImpl(em, applicationPeriodService, firstMeetingRepository, notificationController, + projectService, generalSystemSettingsService, targetRepository, ideaRepository, clock); + } + + @Bean + public KeywordServiceImpl keywordService(Provider<EntityManager> em) { + return new KeywordServiceImpl(em); + } + + @Bean + public MailEventServiceImpl mailEventService(Provider<EntityManager> em) { + return new MailEventServiceImpl(em); + } + + @Bean + public MatchServiceImpl matchService(Provider<EntityManager> em) { + return new MatchServiceImpl(em); + } + + @Bean + public MilestonePhaseTemplateServiceImpl milestonePhaseTemplateService(Provider<EntityManager> em) { + return new MilestonePhaseTemplateServiceImpl(em); + } + + @Bean + public MilestoneServiceImpl milestoneService( + Provider<EntityManager> em, + NotificationController notificationController) + { + return new MilestoneServiceImpl(notificationController, em); + } + + @Bean + public NonWorkDayPeriodServiceImpl nonWorkDayPeriodService(Provider<EntityManager> em) { + return new NonWorkDayPeriodServiceImpl(em); + } + + @Bean + public NoteServiceImpl noteService(Provider<EntityManager> em) { + return new NoteServiceImpl(em); + } + + @Bean + public NotificationServiceImpl notificationService(Provider<EntityManager> em) { + return new NotificationServiceImpl(em); + } + + @Bean + public OppositionReportServiceImpl oppositionReportService( + OppositionReportRepo oppositionReportRepository, + GradingReportTemplateRepo gradingReportTemplateRepository, + FileService fileService, + FinalSeminarOppositionRepo finalSeminarOppositionRepository) + { + return new OppositionReportServiceImpl(oppositionReportRepository, gradingReportTemplateRepository, + fileService, finalSeminarOppositionRepository); + } + + @Bean + public PeerRequestServiceImpl peerRequestService( + Provider<EntityManager> em, + EventBus eventBus, + FileService fileService) + { + return new PeerRequestServiceImpl(em, eventBus, fileService); + } + + @Bean + public PeerReviewServiceImpl peerReviewService( + Provider<EntityManager> em, + PeerReviewRepository peerReviewRepository) + { + return new PeerReviewServiceImpl(em, peerReviewRepository); + } + + @Bean + public PlagiarismControlImpl plagiarismControl( + FileService fileService, + PlagiarismRequestRepository plagiarismRequestRepository, + UrkundSubmissionRepository urkundSubmissionRepository) + { + return new PlagiarismControlImpl(plagiarismRequestRepository, urkundSubmissionRepository, fileService); + } + + @Bean + public PreliminaryMatchServiceImpl preliminaryMatchService(Provider<EntityManager> em, IdeaService ideaService) { + return new PreliminaryMatchServiceImpl(em, ideaService); + } + + @Bean + public ProgramServiceImpl programService(Provider<EntityManager> em) { + return new ProgramServiceImpl(em); + } + + @Bean + public ProjectFileServiceImpl projectFileService( + FileService fileService, + ProjectFileRepository projectFileRepository) + { + return new ProjectFileServiceImpl(fileService, projectFileRepository); + } + + @Bean + public ProjectFinalSeminarStatisticsServiceImpl projectFinalSeminarStatisticsService(Provider<EntityManager> em) { + return new ProjectFinalSeminarStatisticsServiceImpl(em); + } + + @Bean + public ProjectPartnerServiceImpl projectPartnerService(Provider<EntityManager> em) { + return new ProjectPartnerServiceImpl(em); + } + + @Bean + public ProjectPeopleStatisticsServiceImpl projectPeopleStatisticsService(Provider<EntityManager> em) { + return new ProjectPeopleStatisticsServiceImpl(em); + } + + @Bean + public ProjectServiceImpl projectService( + Provider<EntityManager> em, + EventBus eventBus, + ProjectRepo projectRepo, + Clock clock) + { + return new ProjectServiceImpl(projectRepo, clock, eventBus, em); + } + + @Bean + public ProjectTypeServiceImpl projectTypeService(Provider<EntityManager> em) { + return new ProjectTypeServiceImpl(em); + } + + @Bean + public ReflectionServiceImpl reflectionService( + AuthorRepository authorRepository, + FinalSeminarServiceImpl finalSeminarService) + { + return new ReflectionServiceImpl(authorRepository, finalSeminarService); + } + + @Bean + public ReceiverConfigurationServiceImpl receiverConfigurationService(Provider<EntityManager> em) { + return new ReceiverConfigurationServiceImpl(em); + } + + @Bean + public ReportServiceImpl reportService(Provider<EntityManager> em, FileService fileService) { + return new ReportServiceImpl(em, fileService); + } + + @Bean + public ResearchAreaServiceImpl researchAreaService(Provider<EntityManager> em) { + return new ResearchAreaServiceImpl(em); + } + + @Bean + public ReviewingServiceImpl reviewingService( + Provider<EntityManager> em, + EventBus eventBus, + FileService fileService) + { + return new ReviewingServiceImpl(em, fileService, eventBus); + } + + @Bean + public ReviewerCapacityServiceImpl reviewerCapacityService( + ReviewerTargetRepository reviewerTargetRepository, + DecisionRepository decisionRepository, + UserService userService, + ProjectService projectService, + EventBus eventBus) + { + return new ReviewerCapacityServiceImpl(reviewerTargetRepository, decisionRepository, userService, + projectService, eventBus); + } + + @Bean + public ReviewerDeadlineSettingsServiceImpl reviewerDeadlineSettingsService( + ReviewerDeadlineSettingsRepository reviewerDeadlineSettingsRepository) + { + return new ReviewerDeadlineSettingsServiceImpl(reviewerDeadlineSettingsRepository); + } + + @Bean + public SupervisorServiceImpl supervisorService(Provider<EntityManager> em) { + return new SupervisorServiceImpl(em); + } + + @Bean + public SurveyServiceImpl surveyService( + SurveyRepository surveyRepository, + QuestionRepository questionRepository, + FinalThesisService finalThesisService, + GeneralSystemSettingsService generalSystemSettingsService, + ReflectionService reflectionService) + { + return new SurveyServiceImpl(surveyRepository, questionRepository, finalThesisService, + generalSystemSettingsService, reflectionService); + } + + @Bean + public TargetServiceImpl targetService(Provider<EntityManager> em, IdeaService ideaService) { + return new TargetServiceImpl(em, ideaService); + } + + @Bean + public UnitServiceImpl unitService(Provider<EntityManager> em) { + return new UnitServiceImpl(em); + } + + @Bean + public UrkundApiImpl urkundApi( + UrkundSettingsRepository urkundSettingsRepository, + FileService fileService) + { + return new UrkundApiImpl(urkundSettingsRepository, fileService); + } + + @Bean + public UrkundServiceImpl urkundService( + UrkundApi urkundApi, + UrkundSubmissionRepository urkundSubmissionRepository, + Sukat sukat, + FileService fileService) + { + return new UrkundServiceImpl(urkundApi, urkundSubmissionRepository, sukat, fileService); + } + + @Bean + public UserNameServiceImpl userNameService(Provider<EntityManager> em) { + return new UserNameServiceImpl(em); + } + + @Bean + public UserProfileServiceImpl userProfileService(Provider<EntityManager> em) { + return new UserProfileServiceImpl(em); + } + + @Bean + public UserServiceImpl userService(Provider<EntityManager> em) { + return new UserServiceImpl(em); + } + + @Bean + public WorkerDataServiceImpl workerDataService(Provider<EntityManager> em) { + return new WorkerDataServiceImpl(em); + } + + @Bean + public NotificationControllerImpl notificationController( + NotificationServiceImpl notificationService, + NotificationMailFormatter notificationMailFormatter, + MailEventService mailEventService, + ReceiverConfigurationService receiverConfigurationService, + DeliveryConfigurationService deliveryConfigurationService, + Provider<CurrentUser> currentUserProvider) + { + return new NotificationControllerImpl(notificationService, + notificationMailFormatter, + mailEventService, receiverConfigurationService, deliveryConfigurationService, currentUserProvider); + } + + @Bean + public NotificationMailFormatterImpl notificationMailFormatter() { + return new NotificationMailFormatterImpl(); + } + + @Bean + public CurrentUserFromWicketSession currentUserFromWicketSession() { + return new CurrentUserFromWicketSession(); + } } diff --git a/war/src/main/java/se/su/dsv/scipro/war/Main.java b/war/src/main/java/se/su/dsv/scipro/war/Main.java index ca339abb8b..705dff06b5 100644 --- a/war/src/main/java/se/su/dsv/scipro/war/Main.java +++ b/war/src/main/java/se/su/dsv/scipro/war/Main.java @@ -24,6 +24,7 @@ import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter; import se.su.dsv.scipro.SciProApplication; import se.su.dsv.scipro.profiles.CurrentProfile; import se.su.dsv.scipro.system.AggregateUserSearch; +import se.su.dsv.scipro.system.Lifecycle; import se.su.dsv.scipro.system.ResearchArea; import se.su.dsv.scipro.system.User; import se.su.dsv.scipro.system.UserImportService; @@ -37,7 +38,7 @@ import java.util.Set; @SpringBootApplication @EntityScan("se.su.dsv.scipro") -@Import({CoreConfig.class, ApiConfig.class, WorkerConfig.class, MailConfig.class}) +@Import({CoreConfig.class, ApiConfig.class, WorkerConfig.class, MailConfig.class, RepositoryConfiguration.class}) public class Main extends SpringBootServletInitializer implements ServletContainerInitializer { @Override public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException { @@ -127,6 +128,24 @@ public class Main extends SpringBootServletInitializer implements ServletContain }; } + /** + * Exists because Spring refuses to inject a collection of beans if there are no beans of that type. + */ + @Bean + public Lifecycle dummyLifecycle() { + return new Lifecycle() { + @Override + public void start() { + // do nothing + } + + @Override + public void stop() { + // do nothing + } + }; + } + @Bean public UserSearchService aggregateSearchService( Set<UserSearchProvider> userSearchProviders, 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 new file mode 100644 index 0000000000..4caeafdf9a --- /dev/null +++ b/war/src/main/java/se/su/dsv/scipro/war/RepositoryConfiguration.java @@ -0,0 +1,249 @@ +package se.su.dsv.scipro.war; + +import jakarta.inject.Provider; +import jakarta.persistence.EntityManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import se.su.dsv.scipro.checklist.ChecklistCategoryRepoImpl; +import se.su.dsv.scipro.checklist.ChecklistQuestionRepoImpl; +import se.su.dsv.scipro.file.FileDescriptionRepoImpl; +import se.su.dsv.scipro.file.FileReferenceRepositoryImpl; +import se.su.dsv.scipro.file.ProjectFileRepositoryImpl; +import se.su.dsv.scipro.finalseminar.AuthorRepositoryImpl; +import se.su.dsv.scipro.finalseminar.FinalSeminarActiveParticipationRepositoryImpl; +import se.su.dsv.scipro.finalseminar.FinalSeminarOppositionRepoImpl; +import se.su.dsv.scipro.finalseminar.FinalSeminarRepositoryImpl; +import se.su.dsv.scipro.forum.AbstractThreadRepositoryImpl; +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.grading.GradingHistoryEventRepositoryImpl; +import se.su.dsv.scipro.integration.activityfinalseminar.ActivityFinalSeminarRepositoryImpl; +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.PeerRequestRepositoryImpl; +import se.su.dsv.scipro.peer.PeerReviewRepositoryImpl; +import se.su.dsv.scipro.plagiarism.PlagiarismRequestRepositoryImpl; +import se.su.dsv.scipro.plagiarism.urkund.UrkundSettingsRepositoryImpl; +import se.su.dsv.scipro.plagiarism.urkund.UrkundSubmissionRepositoryImpl; +import se.su.dsv.scipro.project.ProjectRepoImpl; +import se.su.dsv.scipro.projectpartner.ProjectPartnerRepositoryImpl; +import se.su.dsv.scipro.report.GradingReportTemplateRepoImpl; +import se.su.dsv.scipro.report.OppositionReportRepoImpl; +import se.su.dsv.scipro.reviewing.DecisionRepositoryImpl; +import se.su.dsv.scipro.reviewing.ReviewerDeadlineSettingsRepositoryImpl; +import se.su.dsv.scipro.reviewing.ReviewerTargetRepositoryImpl; +import se.su.dsv.scipro.reviewing.ReviewerThreadRepositoryImpl; +import se.su.dsv.scipro.survey.QuestionRepositoryImpl; +import se.su.dsv.scipro.survey.SurveyRepositoryImpl; +import se.su.dsv.scipro.system.FooterAddressRepoImpl; +import se.su.dsv.scipro.system.FooterLinkRepoImpl; +import se.su.dsv.scipro.system.PasswordRepoImpl; +import se.su.dsv.scipro.system.UserRepoImpl; + +@Configuration +public class RepositoryConfiguration { + @Bean + public GradingHistoryEventRepositoryImpl gradingHistoryEventRepository(Provider<EntityManager> em) { + return new GradingHistoryEventRepositoryImpl(em); + } + + @Bean + public AbstractThreadRepositoryImpl abstractThreadRepository(Provider<EntityManager> em) { + return new AbstractThreadRepositoryImpl(em); + } + + @Bean + public ActivityFinalSeminarRepositoryImpl activityFinalSeminarRepository(Provider<EntityManager> em) { + return new ActivityFinalSeminarRepositoryImpl(em); + } + + @Bean + public AuthorRepositoryImpl authorRepository(Provider<EntityManager> em) { + return new AuthorRepositoryImpl(em); + } + + @Bean + public ChecklistCategoryRepoImpl checklistCategoryRepo(Provider<EntityManager> em) { + return new ChecklistCategoryRepoImpl(em); + } + + @Bean + public ChecklistQuestionRepoImpl checklistQuestionRepo(Provider<EntityManager> em) { + return new ChecklistQuestionRepoImpl(em); + } + + @Bean + public CommentThreadRepoImpl commentThreadRepo(Provider<EntityManager> em) { + return new CommentThreadRepoImpl(em); + } + + @Bean + public DecisionRepositoryImpl decisionRepository(Provider<EntityManager> em) { + return new DecisionRepositoryImpl(em); + } + + @Bean + public FileDescriptionRepoImpl fileDescriptionRepo(Provider<EntityManager> em) { + return new FileDescriptionRepoImpl(em); + } + + @Bean + public FinalSeminarActiveParticipationRepositoryImpl finalSeminarActiveParticipationRepository(Provider<EntityManager> em) { + return new FinalSeminarActiveParticipationRepositoryImpl(em); + } + + @Bean + public FinalSeminarRepositoryImpl finalSeminarRepository(Provider<EntityManager> em) { + return new FinalSeminarRepositoryImpl(em); + } + + @Bean + public FileReferenceRepositoryImpl fileReferenceRepository(Provider<EntityManager> em) { + return new FileReferenceRepositoryImpl(em); + } + + @Bean + public FinalSeminarOppositionRepoImpl finalSeminarOppositionRepo(Provider<EntityManager> em) { + return new FinalSeminarOppositionRepoImpl(em); + } + + @Bean + public FirstMeetingRepositoryImpl firstMeetingRepository(Provider<EntityManager> em) { + return new FirstMeetingRepositoryImpl(em); + } + + @Bean + public FooterAddressRepoImpl footerAddressRepo(Provider<EntityManager> em) { + return new FooterAddressRepoImpl(em); + } + + @Bean + public FooterLinkRepoImpl footerLinkRepo(Provider<EntityManager> em) { + return new FooterLinkRepoImpl(em); + } + + @Bean + public ForumPostReadStateRepositoryImpl forumPostReadStateRepository(Provider<EntityManager> em) { + return new ForumPostReadStateRepositoryImpl(em); + } + + @Bean + public ForumPostRepositoryImpl forumPostRepository(Provider<EntityManager> em) { + return new ForumPostRepositoryImpl(em); + } + + @Bean + public GradingReportTemplateRepoImpl gradingReportTemplateRepo(Provider<EntityManager> em) { + return new GradingReportTemplateRepoImpl(em); + } + + @Bean + public GroupThreadRepositoryImpl groupThreadRepository(Provider<EntityManager> em) { + return new GroupThreadRepositoryImpl(em); + } + + @Bean + public IdeaRepositoryImpl ideaRepository(Provider<EntityManager> em) { + return new IdeaRepositoryImpl(em); + } + + @Bean + public MilestoneActivityTemplateRepositoryImpl milestoneActivityTemplateRepository(Provider<EntityManager> em) { + return new MilestoneActivityTemplateRepositoryImpl(em); + } + + @Bean + public OppositionReportRepoImpl oppositionReportRepo(Provider<EntityManager> em) { + return new OppositionReportRepoImpl(em); + } + + @Bean + public PasswordRepoImpl passwordRepo(Provider<EntityManager> em) { + return new PasswordRepoImpl(em); + } + + @Bean + public PeerRequestRepositoryImpl peerRequestRepository(Provider<EntityManager> em) { + return new PeerRequestRepositoryImpl(em); + } + + @Bean + public PeerReviewRepositoryImpl peerReviewRepository(Provider<EntityManager> em) { + return new PeerReviewRepositoryImpl(em); + } + + @Bean + public ProjectPartnerRepositoryImpl projectPartnerRepository(Provider<EntityManager> em) { + return new ProjectPartnerRepositoryImpl(em); + } + + @Bean + public ProjectRepoImpl projectRepo(Provider<EntityManager> em) { + return new ProjectRepoImpl(em); + } + + @Bean + public ProjectThreadRepositoryImpl projectThreadRepository(Provider<EntityManager> em) { + return new ProjectThreadRepositoryImpl(em); + } + + @Bean + public QuestionRepositoryImpl questionRepository(Provider<EntityManager> em) { + return new QuestionRepositoryImpl(em); + } + + @Bean + public ReviewerDeadlineSettingsRepositoryImpl reviewerDeadlineSettingsRepository(Provider<EntityManager> em) { + return new ReviewerDeadlineSettingsRepositoryImpl(em); + } + + @Bean + public ReviewerTargetRepositoryImpl reviewerTargetRepository(Provider<EntityManager> em) { + return new ReviewerTargetRepositoryImpl(em); + } + + @Bean + public ReviewerThreadRepositoryImpl reviewerThreadRepository(Provider<EntityManager> em) { + return new ReviewerThreadRepositoryImpl(em); + } + + @Bean + public SurveyRepositoryImpl surveyRepository(Provider<EntityManager> em) { + return new SurveyRepositoryImpl(em); + } + + @Bean + public TargetRepositoryImpl targetRepository(Provider<EntityManager> em) { + return new TargetRepositoryImpl(em); + } + + @Bean + public UrkundSettingsRepositoryImpl urkundSettingsRepository(Provider<EntityManager> em) { + return new UrkundSettingsRepositoryImpl(em); + } + + @Bean + public UrkundSubmissionRepositoryImpl urkundSubmissionRepository(Provider<EntityManager> em) { + return new UrkundSubmissionRepositoryImpl(em); + } + + @Bean + public UserRepoImpl userRepo(Provider<EntityManager> em) { + return new UserRepoImpl(em); + } + + @Bean + public PlagiarismRequestRepositoryImpl plagiarismRequestRepository(Provider<EntityManager> em) { + return new PlagiarismRequestRepositoryImpl(em); + } + + @Bean + public ProjectFileRepositoryImpl projectFileRepository(Provider<EntityManager> em) { + return new ProjectFileRepositoryImpl(em); + } +} diff --git a/war/src/main/java/se/su/dsv/scipro/war/WorkerConfig.java b/war/src/main/java/se/su/dsv/scipro/war/WorkerConfig.java index 400fc754a7..6aab83115e 100644 --- a/war/src/main/java/se/su/dsv/scipro/war/WorkerConfig.java +++ b/war/src/main/java/se/su/dsv/scipro/war/WorkerConfig.java @@ -1,44 +1,57 @@ package se.su.dsv.scipro.war; +import com.google.common.eventbus.EventBus; import jakarta.inject.Provider; +import jakarta.persistence.EntityManagerFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.FilterType; +import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Scope; import org.springframework.transaction.PlatformTransactionManager; import se.su.dsv.scipro.file.FileService; +import se.su.dsv.scipro.finalseminar.FinalSeminarService; +import se.su.dsv.scipro.firstmeeting.FirstMeetingService; +import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsService; +import se.su.dsv.scipro.mail.MailEventService; import se.su.dsv.scipro.mail.MailEventWorker; +import se.su.dsv.scipro.mail.Mailer; import se.su.dsv.scipro.match.AllowAllIdeaCreationJudge; +import se.su.dsv.scipro.match.ApplicationPeriodService; import se.su.dsv.scipro.match.IdeaCreationJudge; +import se.su.dsv.scipro.match.IdeaService; +import se.su.dsv.scipro.misc.DaysService; import se.su.dsv.scipro.plagiarism.PlagiarismRequestRepository; import se.su.dsv.scipro.plagiarism.PlagiarismSubmitter; import se.su.dsv.scipro.plagiarism.urkund.StatusPollingWorker; +import se.su.dsv.scipro.plagiarism.urkund.UrkundApi; import se.su.dsv.scipro.plagiarism.urkund.UrkundService; import se.su.dsv.scipro.plagiarism.urkund.UrkundSettings; import se.su.dsv.scipro.plagiarism.urkund.UrkundSettingsRepository; +import se.su.dsv.scipro.plagiarism.urkund.UrkundSubmissionRepository; +import se.su.dsv.scipro.project.ProjectService; +import se.su.dsv.scipro.projectpartner.ProjectPartnerRepository; import se.su.dsv.scipro.projectpartner.RemoveFulfilledPartnerAdsWorker; +import se.su.dsv.scipro.reviewing.MyReviewService; import se.su.dsv.scipro.reviewing.ReviewerDecisionReminderWorker; +import se.su.dsv.scipro.sukat.Sukat; import se.su.dsv.scipro.workerthreads.GradeFinalSeminarParticipantReminderWorker; import se.su.dsv.scipro.workerthreads.IdeaExportWorker; import se.su.dsv.scipro.workerthreads.ManualMatchRemindWorker; import se.su.dsv.scipro.workerthreads.NotificationCompilationWorker; import se.su.dsv.scipro.workerthreads.Scheduler; +import se.su.dsv.scipro.workerthreads.SchedulerImpl; import se.su.dsv.scipro.workerthreads.TemporaryWorkerScheduler; import se.su.dsv.scipro.workerthreads.ThesisUploadDeadlineWorker; import se.su.dsv.scipro.workerthreads.ThesisUploadReminderWorker; import se.su.dsv.scipro.workerthreads.WorkerTransactionManager; +import java.time.Clock; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @Configuration -@ComponentScan( - basePackages = "se.su.dsv.scipro", - includeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*Worker$"), - excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*[Dd]aisy.*") -) +@Import(WorkerConfig.Workers.class) public class WorkerConfig { private static final int NUMBER_OF_WORKER_THREADS = 4; @@ -47,6 +60,14 @@ public class WorkerConfig { return Executors.newScheduledThreadPool(NUMBER_OF_WORKER_THREADS); } + @Bean + public SchedulerImpl scheduler( + ScheduledExecutorService scheduledExecutorService, + EntityManagerFactory entityManagerFactory) + { + return new SchedulerImpl(scheduledExecutorService, entityManagerFactory); + } + @Bean public TemporaryWorkerScheduler temporaryWorkerScheduler( Scheduler scheduler, @@ -91,4 +112,92 @@ public class WorkerConfig { public WorkerTransactionManager workerTransactionManager(PlatformTransactionManager platformTransactionManager) { return new SpringManagedWorkerTransactions(platformTransactionManager); } + + @Configuration + public static class Workers { + @Bean + public MailEventWorker mailEventWorker( + MailEventService mailEventService, + GeneralSystemSettingsService generalSystemSettingsService, + Mailer mailer) + { + return new MailEventWorker(mailEventService, generalSystemSettingsService, mailer); + } + + @Bean + public NotificationCompilationWorker notificationCompilationWorker() { + return new NotificationCompilationWorker(); + } + + @Bean + public IdeaExportWorker ideaExportWorker( + IdeaService ideaService, + MailEventService mailEventService, + ProjectService projectService, + IdeaCreationJudge ideaCreationJudge, + EventBus eventBus, + FirstMeetingService firstMeetingService) + { + return new IdeaExportWorker(ideaService, mailEventService, projectService, ideaCreationJudge, eventBus, + firstMeetingService); + } + + @Bean + public ThesisUploadReminderWorker thesisUploadReminderWorker() { + return new ThesisUploadReminderWorker(); + } + + @Bean + public ThesisUploadDeadlineWorker thesisUploadDeadlineWorker() { + return new ThesisUploadDeadlineWorker(); + } + + @Bean + public ManualMatchRemindWorker manualMatchRemindWorker( + ApplicationPeriodService applicationPeriodService, + MailEventService mailEventService, + GeneralSystemSettingsService generalSystemSettingsService, + IdeaService ideaService, + Clock clock) + { + return new ManualMatchRemindWorker(applicationPeriodService, mailEventService, generalSystemSettingsService, + ideaService, clock); + } + + @Bean + public ReviewerDecisionReminderWorker reviewerDecisionReminderWorker( + MyReviewService myReviewService, + DaysService daysService, + MailEventService mailEventService) + { + return new ReviewerDecisionReminderWorker(myReviewService, daysService, mailEventService); + } + + @Bean + public StatusPollingWorker statusPollingWorker( + UrkundSubmissionRepository urkundSubmissionRepository, + UrkundApi urkundApi, + Provider<UrkundSettings> urkundSettingsProvider, + Sukat sukat) + { + return new StatusPollingWorker(urkundSubmissionRepository, urkundApi, urkundSettingsProvider, sukat); + } + + @Bean + public RemoveFulfilledPartnerAdsWorker removeFulfilledPartnerAdsWorker( + IdeaService ideaService, + ProjectPartnerRepository projectPartnerRepository) + { + return new RemoveFulfilledPartnerAdsWorker(ideaService, projectPartnerRepository); + } + + @Bean + public GradeFinalSeminarParticipantReminderWorker gradeFinalSeminarParticipantReminderWorker( + MailEventService mailEventService, + GeneralSystemSettingsService generalSystemSettingsService, + FinalSeminarService finalSeminarService) + { + return new GradeFinalSeminarParticipantReminderWorker(finalSeminarService, mailEventService, generalSystemSettingsService); + } + } }