Re-organized Spring configuration files

This commit is contained in:
Andreas Svanberg 2024-06-10 13:21:38 +02:00
parent 67b596753a
commit e7023e627c
3 changed files with 90 additions and 70 deletions
war/src/main/java/se/su/dsv/scipro/war

@ -3,14 +3,11 @@ 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;
import se.su.dsv.scipro.activityplan.ActivityPlanServiceImpl;
@ -20,10 +17,8 @@ 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.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;
@ -215,16 +210,6 @@ public class CoreConfig {
return new EventBus();
}
@Bean
public FileStore fileStore() {
return new FileSystemStore();
}
@Bean
public Clock clock() {
return Clock.systemDefaultZone();
}
@Bean
public GradingHistory gradingHistory(GradingHistoryEventRepository gradingHistoryEventRepository) {
return new GradingHistory(gradingHistoryEventRepository);
@ -923,22 +908,6 @@ public class CoreConfig {
return new NotificationMailFormatterImpl();
}
@Bean
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,
@ -972,15 +941,6 @@ public class CoreConfig {
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();

@ -5,23 +5,20 @@ import jakarta.persistence.EntityManagerFactory;
import jakarta.servlet.ServletContainerInitializer;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.protocol.http.WicketFilter;
import org.apache.wicket.spring.injection.annot.SpringComponentInjector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.orm.jpa.EntityManagerFactoryBuilderCustomizer;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.orm.jpa.SharedEntityManagerCreator;
import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter;
import se.su.dsv.scipro.SciProApplication;
import se.su.dsv.scipro.CurrentUserFromWicketSession;
import se.su.dsv.scipro.FileSystemStore;
import se.su.dsv.scipro.file.FileStore;
import se.su.dsv.scipro.profiles.CurrentProfile;
import se.su.dsv.scipro.system.AggregateUserSearch;
import se.su.dsv.scipro.system.Lifecycle;
@ -32,6 +29,7 @@ import se.su.dsv.scipro.system.UserSearchProvider;
import se.su.dsv.scipro.system.UserSearchService;
import se.su.dsv.scipro.system.UserService;
import java.time.Clock;
import java.util.List;
import java.util.Optional;
import java.util.ServiceLoader;
@ -39,7 +37,14 @@ import java.util.Set;
@SpringBootApplication(proxyBeanMethods = false)
@EntityScan("se.su.dsv.scipro")
@Import({CoreConfig.class, ApiConfig.class, WorkerConfig.class, MailConfig.class, RepositoryConfiguration.class})
@Import({
CoreConfig.class,
ApiConfig.class,
WorkerConfig.class,
MailConfig.class,
RepositoryConfiguration.class,
WicketConfiguration.class
})
public class Main extends SpringBootServletInitializer implements ServletContainerInitializer {
@Override
public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException {
@ -66,29 +71,6 @@ public class Main extends SpringBootServletInitializer implements ServletContain
return new OpenEntityManagerInViewFilter();
}
@Bean
public FilterRegistrationBean<WicketFilter> wicket(
WebApplication webApplication,
ApplicationContext applicationContext)
{
webApplication.getComponentInstantiationListeners()
.add(new SpringComponentInjector(webApplication, applicationContext));
WicketFilter filter = new WicketFilter(webApplication);
filter.setFilterPath("");
FilterRegistrationBean<WicketFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(filter);
registration.addUrlPatterns("/*");
registration.setMatchAfter(true);
return registration;
}
@Bean
public WebApplication webApplication(CurrentProfile currentProfile) {
return new SciProApplication(currentProfile);
}
@Bean
public CurrentProfile currentProfile(@Value("${profile}" ) String profile) {
CurrentProfile currentProfile = new CurrentProfile();
@ -96,6 +78,21 @@ public class Main extends SpringBootServletInitializer implements ServletContain
return currentProfile;
}
@Bean
public CurrentUserFromWicketSession currentUserFromWicketSession() {
return new CurrentUserFromWicketSession();
}
@Bean
public FileStore fileStore() {
return new FileSystemStore();
}
@Bean
public Clock clock() {
return Clock.systemDefaultZone();
}
/**
* Allow injecting of {@link EntityManager} directly instead of {@link EntityManagerFactory}
*/

@ -0,0 +1,63 @@
package se.su.dsv.scipro.war;
import com.google.common.eventbus.EventBus;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.protocol.http.WicketFilter;
import org.apache.wicket.spring.injection.annot.SpringComponentInjector;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import se.su.dsv.scipro.SciProApplication;
import se.su.dsv.scipro.crosscutting.ForwardPhase2Feedback;
import se.su.dsv.scipro.crosscutting.ReviewingNotifications;
import se.su.dsv.scipro.forum.ProjectForumService;
import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsService;
import se.su.dsv.scipro.notifications.NotificationController;
import se.su.dsv.scipro.profiles.CurrentProfile;
@Configuration
public class WicketConfiguration {
@Bean
public FilterRegistrationBean<WicketFilter> wicket(
WebApplication webApplication,
ApplicationContext applicationContext)
{
webApplication.getComponentInstantiationListeners()
.add(new SpringComponentInjector(webApplication, applicationContext));
WicketFilter filter = new WicketFilter(webApplication);
filter.setFilterPath("");
FilterRegistrationBean<WicketFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(filter);
registration.addUrlPatterns("/*");
registration.setMatchAfter(true);
return registration;
}
@Bean
public WebApplication webApplication(CurrentProfile currentProfile) {
return new SciProApplication(currentProfile);
}
@Bean
public ReviewingNotifications reviewingNotifications(
EventBus eventBus,
NotificationController notificationController,
GeneralSystemSettingsService generalSystemSettingsService,
WebApplication webApplication)
{
return new ReviewingNotifications(eventBus, notificationController, generalSystemSettingsService,
webApplication);
}
@Bean
public ForwardPhase2Feedback forwardPhase2Feedback(
EventBus eventBus,
WebApplication webApplication,
ProjectForumService projectForumService)
{
return new ForwardPhase2Feedback(webApplication, projectForumService, eventBus);
}
}