Sort of working

This commit is contained in:
Andreas Svanberg 2024-05-14 14:07:20 +02:00
parent f8d65d4821
commit 55ee3581f1
6 changed files with 192 additions and 15 deletions
core
pom.xml
src/main/java/se/su/dsv/scipro/springdata/serviceimpls
pom.xml
view

@ -87,6 +87,10 @@
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
</dependency>
<dependency>
<groupId>jakarta.transaction</groupId>
<artifactId>jakarta.transaction-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>

@ -43,6 +43,7 @@ public class UserProfileServiceImpl extends AbstractServiceImpl<UserProfile, Lon
}
@Override
@jakarta.transaction.Transactional
public void setSelectedRole(User user, Roles role) {
UserProfile profile = findByUser(user);
profile.setSelectedRole(role);

13
pom.xml

@ -98,14 +98,11 @@
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>6.1.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>6.1.4</version>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.2.5</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<!-- Servlet API, needed for compilation. -->

@ -99,6 +99,14 @@
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- Servlet API, needed for compilation. -->
<dependency>

@ -1,22 +1,61 @@
import com.google.common.eventbus.EventBus;
import jakarta.inject.Named;
import jakarta.inject.Provider;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.orm.jpa.LocalEntityManagerFactoryBean;
import org.springframework.orm.jpa.SharedEntityManagerCreator;
import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
import se.su.dsv.scipro.SciProApplication;
import se.su.dsv.scipro.daisyExternal.http.DaisyAPI;
import se.su.dsv.scipro.daisyExternal.http.DaisyAPIImpl;
import se.su.dsv.scipro.file.FileService;
import se.su.dsv.scipro.finalseminar.AuthorRepository;
import se.su.dsv.scipro.finalseminar.FinalSeminarActiveParticipationRepository;
import se.su.dsv.scipro.finalseminar.FinalSeminarOppositionRepo;
import se.su.dsv.scipro.finalseminar.FinalSeminarRepository;
import se.su.dsv.scipro.finalseminar.FinalSeminarService;
import se.su.dsv.scipro.finalseminar.FinalSeminarServiceImpl;
import se.su.dsv.scipro.finalseminar.FinalSeminarSettingsService;
import se.su.dsv.scipro.finalseminar.FinalSeminarSettingsServiceImpl;
import se.su.dsv.scipro.gdpr.Reporter;
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.notifications.NotificationService;
import se.su.dsv.scipro.notifications.NotificationServiceImpl;
import se.su.dsv.scipro.profiles.CurrentProfile;
import se.su.dsv.scipro.project.ProjectRepo;
import se.su.dsv.scipro.project.ProjectRepoImpl;
import se.su.dsv.scipro.project.ProjectService;
import se.su.dsv.scipro.project.ProjectServiceImpl;
import se.su.dsv.scipro.report.OppositionReportService;
import se.su.dsv.scipro.report.OppositionReportServiceImpl;
import se.su.dsv.scipro.reviewing.RoughDraftApprovalService;
import se.su.dsv.scipro.springdata.serviceimpls.UserProfileServiceImpl;
import se.su.dsv.scipro.springdata.services.UserProfileService;
import se.su.dsv.scipro.system.FooterAddressRepo;
import se.su.dsv.scipro.system.FooterAddressRepoImpl;
import se.su.dsv.scipro.system.FooterLinkRepo;
import se.su.dsv.scipro.system.FooterLinkRepoImpl;
import se.su.dsv.scipro.system.FooterLinkService;
import se.su.dsv.scipro.system.FooterLinkServiceImpl;
import se.su.dsv.scipro.system.Lifecycle;
import se.su.dsv.scipro.system.ResearchArea;
import se.su.dsv.scipro.system.User;
@ -24,10 +63,9 @@ import se.su.dsv.scipro.system.UserImportService;
import se.su.dsv.scipro.system.UserService;
import se.su.dsv.scipro.system.UserServiceImpl;
import java.io.IOException;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.nio.file.Path;
import java.time.Clock;
import java.util.List;
import java.util.Optional;
import java.util.Set;
@ -40,10 +78,13 @@ public class ApplicationBootstrap implements WebApplicationInitializer {
// preserve cookies when using Jersey which will use the logged in session cookie from
// Daisy API thus drastically speeding up the batch jobs
CookieHandler.setDefault(new CookieManager());
AnnotationConfigWebApplicationContext webApplicationContext = new AnnotationConfigWebApplicationContext();
webApplicationContext.setServletContext(servletContext);
webApplicationContext.register(SciProApplication.class);
webApplicationContext.register(CurrentProfile.class);
webApplicationContext.register(Config.class);
webApplicationContext.scan("se.su.dsv.scipro.api");
webApplicationContext.refresh();
servletContext.addListener(new ContextLoaderListener(webApplicationContext));
@ -60,9 +101,13 @@ public class ApplicationBootstrap implements WebApplicationInitializer {
servletContext.addFilter("wicket-filter", filter)
.addMappingForUrlPatterns(null, true, "/*");
servletContext.addServlet("spring-web", new DispatcherServlet(webApplicationContext))
.addMapping("/api/*");
}
@Configuration
@EnableTransactionManagement
public static class Config {
@Bean
@Named("profile")
@ -92,14 +137,16 @@ public class ApplicationBootstrap implements WebApplicationInitializer {
@Bean
@Singleton
public EntityManagerFactory entityManagerFactory() {
System.out.println("Creating EntityManagerFactory");
return Persistence.createEntityManagerFactory("defaultPersistenceUnit");
public LocalEntityManagerFactoryBean entityManagerFactory() {
LocalEntityManagerFactoryBean localEntityManagerFactoryBean = new LocalEntityManagerFactoryBean();
localEntityManagerFactoryBean.setPersistenceUnitName("defaultPersistenceUnit");
localEntityManagerFactoryBean.setBootstrapExecutor(new SimpleAsyncTaskExecutor());
return localEntityManagerFactoryBean;
}
@Bean
public EntityManager entityManager(EntityManagerFactory entityManagerFactory) {
return entityManagerFactory.createEntityManager();
return SharedEntityManagerCreator.createSharedEntityManager(entityManagerFactory);
}
@Bean
@ -107,6 +154,11 @@ public class ApplicationBootstrap implements WebApplicationInitializer {
return new UserServiceImpl(entityManagerProvider);
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
return new org.springframework.orm.jpa.JpaTransactionManager(entityManagerFactory);
}
@Bean
public UserImportService importService() {
return new UserImportService() {
@ -130,5 +182,91 @@ public class ApplicationBootstrap implements WebApplicationInitializer {
}
};
}
@Bean
public UserProfileService userProfileService(Provider<EntityManager> em) {
return new UserProfileServiceImpl(em);
}
@Bean
public NotificationService notificationService(Provider<EntityManager> em) {
return new NotificationServiceImpl(em);
}
@Bean
public FooterLinkService footerLinkService(FooterLinkRepo repository) {
return new FooterLinkServiceImpl(repository);
}
@Bean
public FooterLinkRepo footerLinkRepo(Provider<EntityManager> em) {
return new FooterLinkRepoImpl(em);
}
@Bean
public FooterAddressRepo footerAddressRepo(Provider<EntityManager> em) {
return new FooterAddressRepoImpl(em);
}
@Bean
public ProjectService projectService(Provider<EntityManager> em, ProjectRepo projectRepo, Clock clock,
EventBus eventBus) {
return new ProjectServiceImpl(projectRepo, clock, eventBus, em);
}
@Bean
public ProjectRepo projectRepo(Provider<EntityManager> em) {
return new ProjectRepoImpl(em);
}
@Bean
public Clock clock() {
return Clock.systemDefaultZone();
}
@Bean
public EventBus eventBus() {
return new EventBus();
}
@Bean
public FinalSeminarService finalSeminarService(Provider<EntityManager> em, EventBus eventBus, Clock clock) {
AuthorRepository authorRepository = null;
FileService fileService = null;
FinalSeminarOppositionRepo finalSeminarOppositionRepository = null;
FinalSeminarActiveParticipationRepository finalSeminarActiveParticipantRepository = null;
FinalSeminarRepository finalSeminarRepository = null;
RoughDraftApprovalService roughDraftApprovalService = null;
return new FinalSeminarServiceImpl(em, eventBus, authorRepository, fileService, finalSeminarOppositionRepository, finalSeminarActiveParticipantRepository, finalSeminarRepository, clock, roughDraftApprovalService);
}
@Bean
public FinalSeminarSettingsService finalSeminarSettingsService(Provider<EntityManager> em) {
return new FinalSeminarSettingsServiceImpl(em);
}
@Bean
public NonWorkDayPeriodService nonWorkDayPeriodService(Provider<EntityManager> em) {
return new NonWorkDayPeriodServiceImpl(em);
}
@Bean
public DaysService daysService(NonWorkDayPeriodService nonWorkDays) {
return new DaysServiceImpl(nonWorkDays);
}
@Bean
public OppositionReportService oppositionReportService(Provider<EntityManager> em) {
return new OppositionReportServiceImpl(null, null, null, null);
}
@Bean
public DaisyAPI daisyAPI(
@Value("${daisy.api.url}") String baseUrl,
@Value("${daisy.api.username}") String username,
@Value("${daisy.api.password}") String password)
{
return new DaisyAPIImpl(baseUrl, username, password);
}
}
}

@ -0,0 +1,29 @@
package se.su.dsv.scipro.api;
import jakarta.inject.Inject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.system.UserService;
import java.util.Optional;
@RestController
public class ApiController {
private final UserService userService;
@Inject
public ApiController(UserService userService) {
this.userService = userService;
}
@GetMapping("/hello-world")
public String helloWorld(@RequestParam(value = "username", required = false) String username) {
String name = Optional.ofNullable(username)
.map(userService::findByUsername)
.map(User::getFullName)
.orElse("World");
return "Hello, " + name + "!";
}
}