Enable creating an API using Spring Web (#5)
SciPro will have to provide information to the upcoming student portal. Wicket does not have the ability to serve JSON in the usual REST way and is only able to serve HTML. The most common way to write JSON over HTTP API:s in Java is using Spring Web, but currently SciPro uses Guice for dependency injection rather than Spring which makes adding Spring Web a bit more tricky. This pull request attempts to solve this by doing the following; * Replacing Guice with Spring * Adding a new API module that uses Spring Web * Turning the entire system into a standard Spring Boot web application The hope is that these changes will bring the following benefits; * Harmonize our web stack (Daisy uses Spring and the new lecture hall system is full Spring Boot) * Enable easy development of a traditional JSON over HTTP API * Ease future recruitment by using the most common Java web frameworks Reviewed-on: #5 Reviewed-by: niat8586 <nico@dsv.su.se> Co-authored-by: Andreas Svanberg <andreass@dsv.su.se> Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
This commit is contained in:
parent
ad77085356
commit
ccac2c1cf8
.gitignoreGetToken.javaREADME.md
api
core
pom.xml
src/main/java
modules
se/su/dsv/scipro
CoreConfig.javaDataInitializer.javaRepositoryConfiguration.java
activityplan
checklist
ChecklistAnswerServiceImpl.javaChecklistCategoryRepo.javaChecklistQuestionRepo.javaChecklistServiceImpl.javaChecklistTemplateServiceImpl.java
daisyExternal
events
file
FileDescriptionRepo.javaFileModule.javaFileReferenceRepository.javaFileReferenceRepositoryImpl.javaFileServiceImpl.javaProjectFileServiceImpl.java
finalseminar
FinalSeminarOppositionRepo.javaFinalSeminarRepositoryImpl.javaFinalSeminarServiceImpl.javaFinalSeminarSettingsServiceImpl.javaFinalSeminarUploadControllerImpl.java
finalthesis
firstmeeting
forum
BasicForumServiceImpl.javaForumModule.javaForumPostReadStateRepository.javaForumPostReadStateRepositoryImpl.javaForumPostRepository.javaGroupForumServiceImpl.javaGroupThreadRepository.javaProjectForumServiceImpl.javaProjectThreadRepository.java
notifications
gdpr
generalsystemsettings
grading
GradingHistoryEventRepositoryImpl.javaGradingModule.javaNationalSubjectCategoryRepositoryImpl.javaPublicationMetadataRepository.javaPublicationMetadataRepositoryImpl.javaPublicationMetadataServiceImpl.java
integration
activityfinalseminar
activityforum
mail
match
AllowAllIdeaCreationJudge.javaApplicationPeriodServiceImpl.javaFirstMeetingRepository.javaIdeaServiceImpl.javaKeywordServiceImpl.javaMatchModule.javaProgramServiceImpl.java
milestones
notifications
NotificationControllerImpl.javaNotificationModule.javaNotificationServiceImpl.java
interfaces/impl
settings/service
oauth
peer
CommentServiceImpl.javaCommentThreadRepo.javaCommentThreadServiceImpl.javaPeerModule.javaPeerPortalImpl.javaPeerRequestRepository.javaPeerRequestServiceImpl.java
plagiarism
profiles
project
projectpartner
reflection
report
GradingReportServiceImpl.javaGradingReportTemplateRepoImpl.javaOppositionReportServiceImpl.javaReportServiceImpl.java
reviewing
2
.gitignore
vendored
2
.gitignore
vendored
@ -23,3 +23,5 @@ view/target
|
||||
*.log
|
||||
fitnesse/target/
|
||||
daisy-integration/target/
|
||||
war/target/
|
||||
api/target/
|
||||
|
101
GetToken.java
Normal file
101
GetToken.java
Normal file
@ -0,0 +1,101 @@
|
||||
import com.sun.net.httpserver.HttpExchange;
|
||||
import com.sun.net.httpserver.HttpServer;
|
||||
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.datatransfer.StringSelection;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.net.Authenticator;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.PasswordAuthentication;
|
||||
import java.net.URI;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.Duration;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class GetToken {
|
||||
public static void main(String[] args) throws IOException {
|
||||
URI baseUri = URI.create("http://localhost:59733");
|
||||
String clientId = "get-token";
|
||||
String clientSecret = "get-token-secret";
|
||||
|
||||
System.out.println("Browse to " + baseUri.resolve("authorize?response_type=code&client_id=" + clientId));
|
||||
|
||||
HttpClient httpClient = HttpClient.newBuilder()
|
||||
.authenticator(new Authenticator() {
|
||||
@Override
|
||||
protected PasswordAuthentication getPasswordAuthentication() {
|
||||
return new PasswordAuthentication(clientId, clientSecret.toCharArray());
|
||||
}
|
||||
})
|
||||
.build();
|
||||
|
||||
HttpServer httpServer = HttpServer.create();
|
||||
httpServer.bind(new InetSocketAddress(59732), 0);
|
||||
|
||||
Thread thread = Thread.currentThread();
|
||||
|
||||
httpServer.createContext("/", exchange -> {
|
||||
exchange.sendResponseHeaders(200, 0);
|
||||
try (OutputStream responseBody = exchange.getResponseBody()) {
|
||||
responseBody.write("All done, close tab".getBytes(StandardCharsets.UTF_8));
|
||||
}
|
||||
|
||||
Map<String, List<String>> queryParams = getQueryParams(exchange);
|
||||
String code = queryParams.get("code").get(0);
|
||||
HttpRequest httpRequest = HttpRequest.newBuilder()
|
||||
.uri(baseUri.resolve("exchange"))
|
||||
.header("Content-Type", "application/x-www-form-urlencoded")
|
||||
.POST(HttpRequest.BodyPublishers.ofString("grant_type=authorization_code&code=" + code))
|
||||
.build();
|
||||
try {
|
||||
HttpResponse<String> response = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
|
||||
System.out.println(response.body());
|
||||
|
||||
// Try to copy the access token to the clipboard
|
||||
Matcher matcher = Pattern.compile("access_token\":\"([^\"]+)\"")
|
||||
.matcher(response.body());
|
||||
if (matcher.find()) {
|
||||
StringSelection clipboardData = new StringSelection(matcher.group(1));
|
||||
Toolkit.getDefaultToolkit()
|
||||
.getSystemClipboard()
|
||||
.setContents(clipboardData, clipboardData);
|
||||
try { Thread.sleep(1_000L); } catch (InterruptedException e) { }
|
||||
System.out.println("Access token copied to clipboard (probably)");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
thread.interrupt();
|
||||
}
|
||||
});
|
||||
|
||||
httpServer.start();
|
||||
try {
|
||||
Thread.sleep(Duration.ofMinutes(1L).toMillis());
|
||||
System.out.println("No authorization within one minute, exiting.");
|
||||
System.exit(1);
|
||||
} catch (InterruptedException ignored) {
|
||||
// expected
|
||||
}
|
||||
httpServer.stop(0);
|
||||
}
|
||||
|
||||
private static Map<String, List<String>> getQueryParams(final HttpExchange exchange) {
|
||||
String query = exchange.getRequestURI()
|
||||
.getQuery();
|
||||
return Arrays.stream(query.split("&"))
|
||||
.map(s -> s.split("="))
|
||||
.collect(Collectors.groupingBy(
|
||||
split -> split[0],
|
||||
Collectors.mapping(split -> split[1], Collectors.toList())));
|
||||
}
|
||||
}
|
13
README.md
Normal file
13
README.md
Normal file
@ -0,0 +1,13 @@
|
||||
## Working with the API
|
||||
The API is protected by OAuth 2 acting as a [resource server](https://www.oauth.com/oauth2-servers/the-resource-server/)
|
||||
verifying tokens using [token introspection](https://datatracker.ietf.org/doc/html/rfc7662).
|
||||
|
||||
When developing it uses a locally running instance of an
|
||||
[authorization server](https://datatracker.ietf.org/doc/html/rfc6749#section-1.1)
|
||||
that is run inside [Docker](https://www.docker.com). It can be started with `docker compose -f docker-compose.yml up`.
|
||||
Since there is no frontend to interact with the authorization server there's a helper script in
|
||||
[GetToken.java](GetToken.java) that can be run directly with `java GetToken.java` to run through the authorization flow
|
||||
and get an access token.
|
||||
|
||||
Once the token has been obtained go to the [Swagger UI](http://localhost:8080/api/swagger) to interact with the API.
|
||||
Click the "Authorize" button in the top right and paste the access token to log in.
|
25
api/pom.xml
Normal file
25
api/pom.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>se.su.dsv.scipro</groupId>
|
||||
<artifactId>SciPro</artifactId>
|
||||
<version>0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>api</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>se.su.dsv.scipro</groupId>
|
||||
<artifactId>core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-webmvc</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
29
api/src/main/java/se/su/dsv/scipro/api/ApiController.java
Normal file
29
api/src/main/java/se/su/dsv/scipro/api/ApiController.java
Normal file
@ -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 + "!";
|
||||
}
|
||||
}
|
28
core/pom.xml
28
core/pom.xml
@ -12,14 +12,6 @@
|
||||
<artifactId>core</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.google.inject</groupId>
|
||||
<artifactId>guice</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-persist</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
@ -62,12 +54,9 @@
|
||||
<groupId>org.glassfish.jersey.inject</groupId>
|
||||
<artifactId>jersey-hk2</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!--Database stuff-->
|
||||
<dependency>
|
||||
<groupId>org.hsqldb</groupId>
|
||||
<artifactId>hsqldb</artifactId>
|
||||
<scope>test</scope>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!--QueryDSL-->
|
||||
@ -87,10 +76,19 @@
|
||||
<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>
|
||||
<scope>runtime</scope>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hsqldb</groupId>
|
||||
<artifactId>hsqldb</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<!--Additional stuff-->
|
||||
@ -130,8 +128,6 @@
|
||||
<version>4.0.5</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
@ -1,160 +0,0 @@
|
||||
package modules;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.multibindings.Multibinder;
|
||||
import com.google.inject.multibindings.OptionalBinder;
|
||||
import se.su.dsv.scipro.activityplan.*;
|
||||
import se.su.dsv.scipro.checklist.*;
|
||||
import se.su.dsv.scipro.date.DateService;
|
||||
import se.su.dsv.scipro.date.DateServiceImpl;
|
||||
import se.su.dsv.scipro.events.EventModule;
|
||||
import se.su.dsv.scipro.finalseminar.*;
|
||||
import se.su.dsv.scipro.finalthesis.FinalThesisService;
|
||||
import se.su.dsv.scipro.finalthesis.FinalThesisServiceImpl;
|
||||
import se.su.dsv.scipro.finalthesis.PublishingConsentService;
|
||||
import se.su.dsv.scipro.finalthesis.PublishingConsentUnavailable;
|
||||
import se.su.dsv.scipro.firstmeeting.FirstMeetingService;
|
||||
import se.su.dsv.scipro.firstmeeting.FirstMeetingServiceImpl;
|
||||
import se.su.dsv.scipro.forum.ForumModule;
|
||||
import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsService;
|
||||
import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsServiceImpl;
|
||||
import se.su.dsv.scipro.group.GroupFacade;
|
||||
import se.su.dsv.scipro.group.GroupFacadeImpl;
|
||||
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.ActivityFinalSeminarRepositoryImpl;
|
||||
import se.su.dsv.scipro.integration.activityforum.ActivityThreadRepository;
|
||||
import se.su.dsv.scipro.integration.activityforum.ActivityThreadRepositoryImpl;
|
||||
import se.su.dsv.scipro.mail.MailModule;
|
||||
import se.su.dsv.scipro.match.ApplicationPeriodFacade;
|
||||
import se.su.dsv.scipro.match.ApplicationPeriodFacadeImpl;
|
||||
import se.su.dsv.scipro.match.MatchModule;
|
||||
import se.su.dsv.scipro.milestones.service.*;
|
||||
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;
|
||||
import se.su.dsv.scipro.milestones.service.impl.MilestoneStatisticsServiceImpl;
|
||||
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.NoteService;
|
||||
import se.su.dsv.scipro.notes.NoteServiceImpl;
|
||||
import se.su.dsv.scipro.notifications.NotificationModule;
|
||||
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.peer.*;
|
||||
import se.su.dsv.scipro.plagiarism.*;
|
||||
import se.su.dsv.scipro.project.ProjectNoteService;
|
||||
import se.su.dsv.scipro.project.ProjectPeopleStatisticsService;
|
||||
import se.su.dsv.scipro.project.ProjectPeopleStatisticsServiceImpl;
|
||||
import se.su.dsv.scipro.project.ProjectService;
|
||||
import se.su.dsv.scipro.project.ProjectServiceImpl;
|
||||
import se.su.dsv.scipro.projectpartner.ProjectPartnerRepository;
|
||||
import se.su.dsv.scipro.projectpartner.ProjectPartnerRepositoryImpl;
|
||||
import se.su.dsv.scipro.projectpartner.ProjectPartnerService;
|
||||
import se.su.dsv.scipro.projectpartner.ProjectPartnerServiceImpl;
|
||||
import se.su.dsv.scipro.reflection.ReflectionModule;
|
||||
import se.su.dsv.scipro.report.*;
|
||||
import se.su.dsv.scipro.reviewing.ProjectFinalSeminarStatisticsService;
|
||||
import se.su.dsv.scipro.reviewing.ProjectFinalSeminarStatisticsServiceImpl;
|
||||
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.SupervisorService;
|
||||
import se.su.dsv.scipro.springdata.services.UnitService;
|
||||
import se.su.dsv.scipro.springdata.services.UserProfileService;
|
||||
import se.su.dsv.scipro.system.*;
|
||||
import se.su.dsv.scipro.thesislink.ExternalLinkService;
|
||||
import se.su.dsv.scipro.thesislink.ExternalLinkServiceImpl;
|
||||
|
||||
public class CoreModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
install(new RepositoryModule());
|
||||
bind(FooterLinkService.class).to(FooterLinkServiceImpl.class);
|
||||
bind(ActivityThreadRepository.class).to(ActivityThreadRepositoryImpl.class);
|
||||
bind(ActivityFinalSeminarRepository.class).to(ActivityFinalSeminarRepositoryImpl.class);
|
||||
bind(UserService.class).to(UserServiceImpl.class);
|
||||
bind(MergeService.class).to(MergeServiceImpl.class);
|
||||
bind(PasswordService.class).to(PasswordServiceImpl.class);
|
||||
bind(GeneralSystemSettingsService.class).to(GeneralSystemSettingsServiceImpl.class);
|
||||
bind(ProjectTypeService.class).to(ProjectTypeServiceImpl.class);
|
||||
bind(UnitService.class).to(UnitServiceImpl.class);
|
||||
bind(ResearchAreaService.class).to(ResearchAreaServiceImpl.class);
|
||||
bind(DateService.class).to(DateServiceImpl.class);
|
||||
bind(ActivityPlanFacade.class).to(ActivityPlanFacadeImpl.class);
|
||||
bind(ProjectService.class).to(ProjectServiceImpl.class);
|
||||
bind(ProjectFinalSeminarStatisticsService.class).to(ProjectFinalSeminarStatisticsServiceImpl.class);
|
||||
bind(ProjectPeopleStatisticsService.class).to(ProjectPeopleStatisticsServiceImpl.class);
|
||||
bind(DeliveryConfigurationService.class).to(DeliveryConfigurationServiceImpl.class);
|
||||
bind(ReceiverConfigurationService.class).to(ReceiverConfigurationServiceImpl.class);
|
||||
bind(ActivityService.class).to(ActivityServiceImpl.class);
|
||||
bind(ActivityPlanService.class).to(ActivityPlanServiceImpl.class);
|
||||
bind(ActivityPlanTemplateService.class).to(ActivityPlanTemplateServiceImpl.class);
|
||||
bind(ChecklistService.class).to(ChecklistServiceImpl.class);
|
||||
bind(UserProfileService.class).to(UserProfileServiceImpl.class);
|
||||
bind(FinalSeminarService.class).to(FinalSeminarServiceImpl.class);
|
||||
bind(FinalSeminarSettingsService.class).to(FinalSeminarSettingsServiceImpl.class);
|
||||
bind(SupervisorService.class).to(SupervisorServiceImpl.class);
|
||||
bind(DaysService.class).to(DaysServiceImpl.class);
|
||||
bind(NonWorkDayPeriodService.class).to(NonWorkDayPeriodServiceImpl.class);
|
||||
bind(FinalSeminarOppositionService.class).to(FinalSeminarOppositionServiceImpl.class);
|
||||
bind(AuthorRepository.class).to(AuthorRepositoryImpl.class);
|
||||
bind(OppositionReportService.class).to(OppositionReportServiceImpl.class);
|
||||
bind(ApplicationPeriodFacade.class).to(ApplicationPeriodFacadeImpl.class);
|
||||
bind(GroupFacade.class).to(GroupFacadeImpl.class);
|
||||
bind(ExternalLinkService.class).to(ExternalLinkServiceImpl.class);
|
||||
bind(PeerRequestService.class).to(PeerRequestServiceImpl.class);
|
||||
bind(PeerReviewService.class).to(PeerReviewServiceImpl.class);
|
||||
bind(MilestoneActivityTemplateService.class).to(MilestoneActivityTemplateServiceImpl.class);
|
||||
bind(FinalThesisService.class).to(FinalThesisServiceImpl.class);
|
||||
OptionalBinder.newOptionalBinder(binder(), PublishingConsentService.class)
|
||||
.setDefault().to(PublishingConsentUnavailable.class);
|
||||
bind(ChecklistTemplateService.class).to(ChecklistTemplateServiceImpl.class);
|
||||
bind(PeerPortal.class).to(PeerPortalImpl.class);
|
||||
bind(FinalSeminarRespondentService.class).to(FinalSeminarRespondentServiceImpl.class);
|
||||
bind(ProjectPartnerService.class).to(ProjectPartnerServiceImpl.class);
|
||||
bind(GradingReportService.class).to(GradingReportServiceImpl.class);
|
||||
bind(GradeCalculatorService.class).to(GradeCalculatorServiceImpl.class);
|
||||
bind(UserNameService.class).to(UserNameServiceImpl.class);
|
||||
bind(MileStoneService.class).to(MilestoneServiceImpl.class);
|
||||
bind(MilestoneStatisticsService.class).to(MilestoneStatisticsServiceImpl.class);
|
||||
bind(MilestonePhaseTemplateService.class).to(MilestonePhaseTemplateServiceImpl.class);
|
||||
bind(ReportService.class).to(ReportServiceImpl.class);
|
||||
bind(CommentThreadService.class).to(CommentThreadServiceImpl.class);
|
||||
bind(CommentService.class).to(CommentServiceImpl.class);
|
||||
bind(PerformReviewService.class).to(PeerPortalImpl.class);
|
||||
bind(EventService.class).to(EventServiceImpl.class);
|
||||
bind(ChecklistAnswerService.class).to(ChecklistAnswerServiceImpl.class);
|
||||
bind(FinalSeminarUploadController.class).to(FinalSeminarUploadControllerImpl.class);
|
||||
bind(FinalSeminarActiveParticipationService.class).to(FinalSeminarActiveParticipationServiceImpl.class);
|
||||
bind(ExternalResourceService.class).to(ExternalResourceServiceImpl.class);
|
||||
bind(GroupService.class).to(GroupServiceImpl.class);
|
||||
bind(NoteService.class).to(NoteServiceImpl.class);
|
||||
bind(MilestoneActivator.class).asEagerSingleton();
|
||||
bind(ActivateCompletedMilestonesOnNewProjects.class).asEagerSingleton();
|
||||
bind(FirstMeetingService.class).to(FirstMeetingServiceImpl.class);
|
||||
bind(FinalSeminarCreationSubscribers.class).asEagerSingleton();
|
||||
bind(ProjectPartnerRepository.class).to(ProjectPartnerRepositoryImpl.class);
|
||||
bind(ProjectNoteService.class).to(ProjectServiceImpl.class);
|
||||
|
||||
install(new PlagiarismModule());
|
||||
install(new NotificationModule());
|
||||
install(new ProfileModule());
|
||||
install(new EventModule());
|
||||
install(new MatchModule());
|
||||
install(new MailModule());
|
||||
install(new ForumModule());
|
||||
install(new ReflectionModule());
|
||||
|
||||
Multibinder.newSetBinder(binder(), UserImportService.class);
|
||||
bind(UserSearchService.class).to(AggregateUserSearch.class);
|
||||
Multibinder.newSetBinder(binder(), UserSearchProvider.class)
|
||||
.addBinding().to(LocalUserSearch.class);
|
||||
|
||||
}
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
package modules;
|
||||
|
||||
import com.google.inject.Key;
|
||||
import com.google.inject.PrivateModule;
|
||||
import com.google.inject.name.Names;
|
||||
import se.su.dsv.scipro.profiles.CurrentProfile;
|
||||
|
||||
public class ProfileModule extends PrivateModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
requireBinding(Key.get(String.class, Names.named("profile")));
|
||||
bind(CurrentProfile.class).asEagerSingleton();
|
||||
expose(CurrentProfile.class);
|
||||
}
|
||||
}
|
@ -1,66 +0,0 @@
|
||||
package modules;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import se.su.dsv.scipro.checklist.ChecklistCategoryRepo;
|
||||
import se.su.dsv.scipro.checklist.ChecklistCategoryRepoImpl;
|
||||
import se.su.dsv.scipro.checklist.ChecklistQuestionRepo;
|
||||
import se.su.dsv.scipro.checklist.ChecklistQuestionRepoImpl;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminarActiveParticipationRepository;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminarActiveParticipationRepositoryImpl;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminarOppositionRepo;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminarOppositionRepoImpl;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminarRepository;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminarRepositoryImpl;
|
||||
import se.su.dsv.scipro.milestones.MilestoneActivityTemplateRepository;
|
||||
import se.su.dsv.scipro.milestones.MilestoneActivityTemplateRepositoryImpl;
|
||||
import se.su.dsv.scipro.peer.CommentThreadRepo;
|
||||
import se.su.dsv.scipro.peer.CommentThreadRepoImpl;
|
||||
import se.su.dsv.scipro.peer.PeerRequestRepository;
|
||||
import se.su.dsv.scipro.peer.PeerRequestRepositoryImpl;
|
||||
import se.su.dsv.scipro.peer.PeerReviewRepository;
|
||||
import se.su.dsv.scipro.peer.PeerReviewRepositoryImpl;
|
||||
import se.su.dsv.scipro.project.ProjectRepo;
|
||||
import se.su.dsv.scipro.project.ProjectRepoImpl;
|
||||
import se.su.dsv.scipro.report.GradingReportTemplateRepo;
|
||||
import se.su.dsv.scipro.report.GradingReportTemplateRepoImpl;
|
||||
import se.su.dsv.scipro.report.OppositionReportRepo;
|
||||
import se.su.dsv.scipro.report.OppositionReportRepoImpl;
|
||||
import se.su.dsv.scipro.report.SupervisorGradingReportRepository;
|
||||
import se.su.dsv.scipro.report.SupervisorGradingReportRepositoryImpl;
|
||||
import se.su.dsv.scipro.reviewing.DecisionRepository;
|
||||
import se.su.dsv.scipro.reviewing.DecisionRepositoryImpl;
|
||||
import se.su.dsv.scipro.reviewing.ReviewerTargetRepository;
|
||||
import se.su.dsv.scipro.reviewing.ReviewerTargetRepositoryImpl;
|
||||
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.PasswordRepo;
|
||||
import se.su.dsv.scipro.system.PasswordRepoImpl;
|
||||
import se.su.dsv.scipro.system.UserRepo;
|
||||
import se.su.dsv.scipro.system.UserRepoImpl;
|
||||
|
||||
public class RepositoryModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(ChecklistQuestionRepo.class).to(ChecklistQuestionRepoImpl.class);
|
||||
bind(FinalSeminarOppositionRepo.class).to(FinalSeminarOppositionRepoImpl.class);
|
||||
bind(FinalSeminarActiveParticipationRepository.class).to(FinalSeminarActiveParticipationRepositoryImpl.class);
|
||||
bind(GradingReportTemplateRepo.class).to(GradingReportTemplateRepoImpl.class);
|
||||
bind(MilestoneActivityTemplateRepository.class).to(MilestoneActivityTemplateRepositoryImpl.class);
|
||||
bind(OppositionReportRepo.class).to(OppositionReportRepoImpl.class);
|
||||
bind(PasswordRepo.class).to(PasswordRepoImpl.class);
|
||||
bind(ProjectRepo.class).to(ProjectRepoImpl.class);
|
||||
bind(UserRepo.class).to(UserRepoImpl.class);
|
||||
bind(PeerReviewRepository.class).to(PeerReviewRepositoryImpl.class);
|
||||
bind(PeerRequestRepository.class).to(PeerRequestRepositoryImpl.class);
|
||||
bind(ChecklistCategoryRepo.class).to(ChecklistCategoryRepoImpl.class);
|
||||
bind(CommentThreadRepo.class).to(CommentThreadRepoImpl.class);
|
||||
bind(FooterLinkRepo.class).to(FooterLinkRepoImpl.class);
|
||||
bind(FooterAddressRepo.class).to(FooterAddressRepoImpl.class);
|
||||
bind(FinalSeminarRepository.class).to(FinalSeminarRepositoryImpl.class);
|
||||
bind(ReviewerTargetRepository.class).to(ReviewerTargetRepositoryImpl.class);
|
||||
bind(DecisionRepository.class).to(DecisionRepositoryImpl.class);
|
||||
bind(SupervisorGradingReportRepository.class).to(SupervisorGradingReportRepositoryImpl.class);
|
||||
}
|
||||
}
|
1012
core/src/main/java/se/su/dsv/scipro/CoreConfig.java
Normal file
1012
core/src/main/java/se/su/dsv/scipro/CoreConfig.java
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.checklist.ChecklistCategory;
|
||||
import se.su.dsv.scipro.match.ApplicationPeriod;
|
||||
import se.su.dsv.scipro.match.Keyword;
|
||||
|
285
core/src/main/java/se/su/dsv/scipro/RepositoryConfiguration.java
Normal file
285
core/src/main/java/se/su/dsv/scipro/RepositoryConfiguration.java
Normal file
@ -0,0 +1,285 @@
|
||||
package se.su.dsv.scipro;
|
||||
|
||||
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.forum.notifications.ForumNotificationRepositoryImpl;
|
||||
import se.su.dsv.scipro.grading.GradingHistoryEventRepositoryImpl;
|
||||
import se.su.dsv.scipro.grading.NationalSubjectCategoryRepositoryImpl;
|
||||
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.notifications.NotificationEventRepositoryImpl;
|
||||
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.report.SupervisorGradingReportRepositoryImpl;
|
||||
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(proxyBeanMethods = false)
|
||||
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 ActivityThreadRepositoryImpl activityThreadRepository(Provider<EntityManager> em) {
|
||||
return new ActivityThreadRepositoryImpl(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 ForumNotificationRepositoryImpl forumNotificationRepository(Provider<EntityManager> em) {
|
||||
return new ForumNotificationRepositoryImpl(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 NationalSubjectCategoryRepositoryImpl nationalSubjectCategoryRepository(Provider<EntityManager> em) {
|
||||
return new NationalSubjectCategoryRepositoryImpl(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 PublicationMetadataRepositoryImpl publicationMetadataRepository(Provider<EntityManager> em) {
|
||||
return new PublicationMetadataRepositoryImpl(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);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public NotificationEventRepositoryImpl notificationEventRepository(Provider<EntityManager> em) {
|
||||
return new NotificationEventRepositoryImpl(em);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public SupervisorGradingReportRepositoryImpl supervisorGradingReportRepository(Provider<EntityManager> em) {
|
||||
return new SupervisorGradingReportRepositoryImpl(em);
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package se.su.dsv.scipro.activityplan;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import se.su.dsv.scipro.system.Pageable;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.checklist;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.JpaRepository;
|
||||
import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.checklist;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.JpaRepository;
|
||||
import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.checklist;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.activityplan.QActivity;
|
||||
import se.su.dsv.scipro.activityplan.QActivityPlan;
|
||||
import se.su.dsv.scipro.project.Project;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.checklist;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import com.querydsl.core.types.dsl.BooleanExpression;
|
||||
import se.su.dsv.scipro.system.Pageable;
|
||||
import se.su.dsv.scipro.project.Project;
|
||||
|
@ -1,20 +0,0 @@
|
||||
package se.su.dsv.scipro.daisyExternal;
|
||||
|
||||
import com.google.inject.Key;
|
||||
import com.google.inject.PrivateModule;
|
||||
import com.google.inject.Scopes;
|
||||
import com.google.inject.name.Names;
|
||||
import se.su.dsv.scipro.daisyExternal.http.DaisyAPI;
|
||||
import se.su.dsv.scipro.daisyExternal.http.DaisyAPIImpl;
|
||||
|
||||
public class DaisyExternalModule extends PrivateModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
requireBinding(Key.get(String.class, Names.named("daisy.api.url")));
|
||||
requireBinding(Key.get(String.class, Names.named("daisy.api.username")));
|
||||
requireBinding(Key.get(String.class, Names.named("daisy.api.password")));
|
||||
|
||||
bind(DaisyAPI.class).to(DaisyAPIImpl.class).in(Scopes.SINGLETON);
|
||||
expose(DaisyAPI.class);
|
||||
}
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
package se.su.dsv.scipro.events;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.AbstractModule;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class EventModule extends AbstractModule {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(EventModule.class);
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(EventBus.class).toInstance(new EventBus((throwable, context) -> LOGGER.error("Could not dispatch event: " + context.getSubscriber() + " to " + context.getSubscriberMethod(), throwable)));
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.file;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.JpaRepository;
|
||||
import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
|
||||
|
||||
|
@ -1,16 +0,0 @@
|
||||
package se.su.dsv.scipro.file;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
|
||||
public class FileModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(FileService.class).to(FileServiceImpl.class);
|
||||
bind(ProjectFileService.class).to(ProjectFileServiceImpl.class);
|
||||
bind(ProjectFileRepository.class).to(ProjectFileRepositoryImpl.class);
|
||||
bind(FileReferenceRepository.class).to(FileReferenceRepositoryImpl.class);
|
||||
bind(FileDescriptionRepo.class).to(FileDescriptionRepoImpl.class);
|
||||
|
||||
requireBinding(FileStore.class);
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.file;
|
||||
|
||||
interface FileReferenceRepository {
|
||||
public interface FileReferenceRepository {
|
||||
FileReference create(FileReference fileReference);
|
||||
|
||||
void delete(FileReference fileReference);
|
||||
|
@ -1,16 +1,16 @@
|
||||
package se.su.dsv.scipro.file;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.AbstractRepository;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.file;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.AbstractServiceImpl;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.file;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.Pageable;
|
||||
import se.su.dsv.scipro.project.Project;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.finalseminar;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.JpaRepository;
|
||||
import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
|
||||
import se.su.dsv.scipro.system.ProjectType;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.finalseminar;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import se.su.dsv.scipro.system.AbstractRepository;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
package se.su.dsv.scipro.finalseminar;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import com.querydsl.core.BooleanBuilder;
|
||||
import com.querydsl.core.types.dsl.BooleanExpression;
|
||||
import jakarta.persistence.EntityManager;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.finalseminar;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.AbstractServiceImpl;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package se.su.dsv.scipro.finalseminar;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import se.su.dsv.scipro.file.*;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package se.su.dsv.scipro.finalthesis;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import com.querydsl.core.BooleanBuilder;
|
||||
import com.querydsl.core.types.Predicate;
|
||||
import jakarta.persistence.EntityManager;
|
||||
|
@ -1,11 +0,0 @@
|
||||
package se.su.dsv.scipro.firstmeeting;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import se.su.dsv.scipro.firstmeeting.FirstMeetingReminderWorker.FirstMeetingReminderWorkerSchedule;
|
||||
|
||||
public class FirstMeetingModule extends AbstractModule {
|
||||
@Override
|
||||
public void configure() {
|
||||
bind(FirstMeetingReminderWorkerSchedule.class).asEagerSingleton();
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package se.su.dsv.scipro.forum;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.file.FileReference;
|
||||
import se.su.dsv.scipro.file.FileService;
|
||||
import se.su.dsv.scipro.forum.dataobjects.ForumPost;
|
||||
|
@ -1,26 +0,0 @@
|
||||
package se.su.dsv.scipro.forum;
|
||||
|
||||
import com.google.inject.PrivateModule;
|
||||
|
||||
public class ForumModule extends PrivateModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(AbstractThreadRepository.class).to(AbstractThreadRepositoryImpl.class);
|
||||
bind(ForumPostReadStateRepository.class).to(ForumPostReadStateRepositoryImpl.class);
|
||||
bind(ForumPostRepository.class).to(ForumPostRepositoryImpl.class);
|
||||
bind(ProjectThreadRepository.class).to(ProjectThreadRepositoryImpl.class);
|
||||
bind(GroupThreadRepository.class).to(GroupThreadRepositoryImpl.class);
|
||||
|
||||
expose(ProjectThreadRepository.class);
|
||||
expose(GroupThreadRepository.class);
|
||||
|
||||
bind(ProjectForumService.class).to(ProjectForumServiceImpl.class);
|
||||
bind(GroupForumService.class).to(GroupForumServiceImpl.class);
|
||||
|
||||
expose(ProjectForumService.class);
|
||||
expose(GroupForumService.class);
|
||||
|
||||
bind(BasicForumService.class).to(BasicForumServiceImpl.class);
|
||||
expose(BasicForumService.class);
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.forum;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.JpaRepository;
|
||||
import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
|
||||
import se.su.dsv.scipro.forum.dataobjects.ForumPost;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.forum;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import jakarta.persistence.LockModeType;
|
||||
import se.su.dsv.scipro.forum.dataobjects.ForumPost;
|
||||
import se.su.dsv.scipro.forum.dataobjects.ForumPostReadState;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.forum;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.JpaRepository;
|
||||
import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
|
||||
import se.su.dsv.scipro.forum.dataobjects.ForumPost;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package se.su.dsv.scipro.forum;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.forum.dataobjects.ForumPost;
|
||||
import se.su.dsv.scipro.forum.dataobjects.ForumThread;
|
||||
import se.su.dsv.scipro.forum.dataobjects.GroupThread;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.forum;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.JpaRepository;
|
||||
import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
|
||||
import se.su.dsv.scipro.forum.dataobjects.GroupThread;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package se.su.dsv.scipro.forum;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.file.FileSource;
|
||||
import se.su.dsv.scipro.file.ProjectFileService;
|
||||
import se.su.dsv.scipro.forum.dataobjects.ForumPost;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.forum;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.JpaRepository;
|
||||
import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
|
||||
import se.su.dsv.scipro.forum.dataobjects.ProjectThread;
|
||||
|
@ -2,7 +2,7 @@ package se.su.dsv.scipro.forum.notifications;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.google.common.eventbus.Subscribe;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.forum.dataobjects.ForumPost;
|
||||
import se.su.dsv.scipro.forum.ForumPostReadEvent;
|
||||
import se.su.dsv.scipro.forum.NewGroupForumReplyEvent;
|
||||
|
@ -1,11 +0,0 @@
|
||||
package se.su.dsv.scipro.forum.notifications;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
|
||||
public class ForumNotificationsModule extends AbstractModule {
|
||||
@Override
|
||||
public void configure() {
|
||||
bind(ForumNotificationRepository.class).to(ForumNotificationRepositoryImpl.class);
|
||||
bind(ForumNotifications.class).asEagerSingleton();
|
||||
}
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
package se.su.dsv.scipro.gdpr;
|
||||
|
||||
import com.google.inject.PrivateModule;
|
||||
|
||||
public class GDPRModule extends PrivateModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(Reporter.class).to(ZipReporter.class);
|
||||
|
||||
expose(Reporter.class);
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.generalsystemsettings;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.AbstractServiceImpl;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.grading;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import se.su.dsv.scipro.project.Project;
|
||||
import se.su.dsv.scipro.system.AbstractRepository;
|
||||
|
@ -1,37 +0,0 @@
|
||||
package se.su.dsv.scipro.grading;
|
||||
|
||||
import com.google.inject.Key;
|
||||
import com.google.inject.PrivateModule;
|
||||
import com.google.inject.name.Names;
|
||||
import se.su.dsv.scipro.report.GradingReportServiceImpl;
|
||||
|
||||
public class GradingModule extends PrivateModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
requireBinding(Key.get(String.class, Names.named("service.grading.url")));
|
||||
bind(GradingService.class).to(GradingServiceImpl.class);
|
||||
|
||||
expose(GradingService.class);
|
||||
|
||||
bind(PublicationMetadataRepository.class).to(PublicationMetadataRepositoryImpl.class);
|
||||
bind(PublicationMetadataService.class).to(PublicationMetadataServiceImpl.class);
|
||||
expose(PublicationMetadataService.class);
|
||||
|
||||
bind(ExaminerTimelineService.class).to(GradingHistory.class);
|
||||
expose(ExaminerTimelineService.class);
|
||||
bind(GradingHistoryEventRepository.class).to(GradingHistoryEventRepositoryImpl.class);
|
||||
bind(ThesisRejectionHistoryService.class).to(GradingHistory.class);
|
||||
expose(ThesisRejectionHistoryService.class);
|
||||
bind(ThesisApprovedHistoryService.class).to(GradingHistory.class);
|
||||
expose(ThesisApprovedHistoryService.class);
|
||||
bind(ThesisSubmissionHistoryService.class).to(GradingHistory.class);
|
||||
expose(ThesisSubmissionHistoryService.class);
|
||||
|
||||
bind(NationalSubjectCategoryRepository.class).to(NationalSubjectCategoryRepositoryImpl.class);
|
||||
bind(NationalSubjectCategoryService.class).to(NationalSubjectCategoryServiceImpl.class);
|
||||
expose(NationalSubjectCategoryService.class);
|
||||
|
||||
bind(GradingReportTemplateService.class).to(GradingReportServiceImpl.class);
|
||||
expose(GradingReportTemplateService.class);
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.grading;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import se.su.dsv.scipro.system.AbstractRepository;
|
||||
|
||||
|
@ -2,7 +2,7 @@ package se.su.dsv.scipro.grading;
|
||||
|
||||
import se.su.dsv.scipro.project.Project;
|
||||
|
||||
interface PublicationMetadataRepository {
|
||||
public interface PublicationMetadataRepository {
|
||||
void save(PublicationMetadata publicationMetadata);
|
||||
|
||||
PublicationMetadata findByProject(Project project);
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.grading;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import se.su.dsv.scipro.project.Project;
|
||||
import se.su.dsv.scipro.system.AbstractRepository;
|
||||
@ -8,9 +8,9 @@ import se.su.dsv.scipro.system.AbstractRepository;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Provider;
|
||||
|
||||
class PublicationMetadataRepositoryImpl extends AbstractRepository implements PublicationMetadataRepository {
|
||||
public class PublicationMetadataRepositoryImpl extends AbstractRepository implements PublicationMetadataRepository {
|
||||
@Inject
|
||||
PublicationMetadataRepositoryImpl(Provider<EntityManager> em) {
|
||||
public PublicationMetadataRepositoryImpl(Provider<EntityManager> em) {
|
||||
super(em);
|
||||
}
|
||||
|
||||
|
@ -6,11 +6,11 @@ import se.su.dsv.scipro.system.Language;
|
||||
import jakarta.inject.Inject;
|
||||
import java.util.Objects;
|
||||
|
||||
class PublicationMetadataServiceImpl implements PublicationMetadataService {
|
||||
public class PublicationMetadataServiceImpl implements PublicationMetadataService {
|
||||
private final PublicationMetadataRepository publicationMetadataRepository;
|
||||
|
||||
@Inject
|
||||
PublicationMetadataServiceImpl(PublicationMetadataRepository publicationMetadataRepository) {
|
||||
public PublicationMetadataServiceImpl(PublicationMetadataRepository publicationMetadataRepository) {
|
||||
this.publicationMetadataRepository = publicationMetadataRepository;
|
||||
}
|
||||
|
||||
|
11
core/src/main/java/se/su/dsv/scipro/integration/activityfinalseminar/ActivityFinalSeminarModule.java
11
core/src/main/java/se/su/dsv/scipro/integration/activityfinalseminar/ActivityFinalSeminarModule.java
@ -1,11 +0,0 @@
|
||||
package se.su.dsv.scipro.integration.activityfinalseminar;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
|
||||
public class ActivityFinalSeminarModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(FinalSeminarActivityHandler.class).asEagerSingleton();
|
||||
bind(ActivityFinalSeminarRepository.class).to(ActivityFinalSeminarRepositoryImpl.class);
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.integration.activityfinalseminar;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.JpaRepository;
|
||||
import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminar;
|
||||
|
@ -1,11 +0,0 @@
|
||||
package se.su.dsv.scipro.integration.activityforum;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
|
||||
public class ActivityForumModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(PostActivityUploadToForum.class).asEagerSingleton();
|
||||
bind(ActivityThreadRepository.class).to(ActivityThreadRepositoryImpl.class);
|
||||
}
|
||||
}
|
@ -6,7 +6,7 @@ import se.su.dsv.scipro.file.FileDescription;
|
||||
import java.util.Arrays;
|
||||
import java.util.UUID;
|
||||
|
||||
class PrintingMailer implements Mailer {
|
||||
public class PrintingMailer implements Mailer {
|
||||
@Override
|
||||
public MailResult mail(final String fromName, final String fromEmail, final String[] recipients, final String subject, final String message, final FileDescription attachment) {
|
||||
return new MailResult() {
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.match;
|
||||
|
||||
class AllowAllIdeaCreationJudge implements IdeaCreationJudge {
|
||||
public class AllowAllIdeaCreationJudge implements IdeaCreationJudge {
|
||||
@Override
|
||||
public Decision ruling(Idea idea) {
|
||||
return Decision.allowed();
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.match;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import com.querydsl.core.types.dsl.BooleanExpression;
|
||||
import com.querydsl.core.types.dsl.Expressions;
|
||||
import se.su.dsv.scipro.system.PageRequest;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.match;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.JpaRepository;
|
||||
import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.match;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import com.querydsl.core.BooleanBuilder;
|
||||
import com.querydsl.core.types.Predicate;
|
||||
import com.querydsl.core.types.dsl.BooleanExpression;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.match;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import com.querydsl.core.types.dsl.BooleanExpression;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -1,26 +0,0 @@
|
||||
package se.su.dsv.scipro.match;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.multibindings.OptionalBinder;
|
||||
|
||||
public class MatchModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
OptionalBinder.newOptionalBinder(binder(), IdeaCreationJudge.class)
|
||||
.setDefault().to(AllowAllIdeaCreationJudge.class);
|
||||
bind(ProjectStartNotifier.class).asEagerSingleton();
|
||||
bind(AddActivityPlanOnProjectStart.class).asEagerSingleton();
|
||||
bind(ApplicationPeriodService.class).to(ApplicationPeriodServiceImpl.class);
|
||||
bind(IdeaService.class).to(IdeaServiceImpl.class);
|
||||
bind(FirstMeetingRepository.class).to(FirstMeetingRepositoryImpl.class);
|
||||
bind(KeywordService.class).to(KeywordServiceImpl.class);
|
||||
bind(MatchService.class).to(MatchServiceImpl.class);
|
||||
bind(ProgramService.class).to(ProgramServiceImpl.class);
|
||||
bind(MatchFollowUpService.class).to(MatchFollowUpServiceImpl.class);
|
||||
bind(TargetService.class).to(TargetServiceImpl.class);
|
||||
bind(ApplicationPeriodProjectTypeService.class).to(ApplicationPeriodProjectTypeServiceImpl.class);
|
||||
bind(PreliminaryMatchService.class).to(PreliminaryMatchServiceImpl.class);
|
||||
bind(IdeaRepository.class).to(IdeaRepositoryImpl.class);
|
||||
bind(TargetRepository.class).to(TargetRepositoryImpl.class);
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.match;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import com.querydsl.core.types.dsl.BooleanExpression;
|
||||
import se.su.dsv.scipro.system.PageRequest;
|
||||
import se.su.dsv.scipro.system.Sort;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.milestones;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.JpaRepository;
|
||||
import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
|
||||
import se.su.dsv.scipro.milestones.dataobjects.MilestoneActivityTemplate;
|
||||
|
2
core/src/main/java/se/su/dsv/scipro/milestones/service/impl/MilestonePhaseTemplateServiceImpl.java
2
core/src/main/java/se/su/dsv/scipro/milestones/service/impl/MilestonePhaseTemplateServiceImpl.java
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.milestones.service.impl;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.Sort;
|
||||
import se.su.dsv.scipro.milestones.dataobjects.MilestonePhaseTemplate;
|
||||
import se.su.dsv.scipro.milestones.dataobjects.QMilestonePhaseTemplate;
|
||||
|
@ -1,6 +1,5 @@
|
||||
package se.su.dsv.scipro.notifications;
|
||||
|
||||
import com.google.inject.ProvisionException;
|
||||
import se.su.dsv.scipro.data.dataobjects.Member;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminar;
|
||||
import se.su.dsv.scipro.group.Group;
|
||||
@ -94,7 +93,7 @@ public class NotificationControllerImpl implements NotificationController {
|
||||
try {
|
||||
return currentUserProvider.get().get();
|
||||
}
|
||||
catch (ProvisionException ignored) {
|
||||
catch (RuntimeException ignored) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -1,28 +0,0 @@
|
||||
package se.su.dsv.scipro.notifications;
|
||||
|
||||
import com.google.inject.PrivateModule;
|
||||
import se.su.dsv.scipro.notifications.interfaces.NotificationMailFormatter;
|
||||
import se.su.dsv.scipro.notifications.interfaces.impl.NotificationMailFormatterImpl;
|
||||
|
||||
public class NotificationModule extends PrivateModule {
|
||||
|
||||
public static final String NOTIFICATION_RELATIVE_PAGE_URL = "notification";
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(Notifications.class).asEagerSingleton();
|
||||
|
||||
bind(NotificationService.class).to(NotificationServiceImpl.class);
|
||||
expose(NotificationService.class);
|
||||
|
||||
bind(NotificationEventRepository.class).to(NotificationEventRepositoryImpl.class);
|
||||
bind(NotificationEventService.class).to(NotificationEventServiceImpl.class);
|
||||
expose(NotificationEventService.class);
|
||||
|
||||
bind(NotificationMailFormatter.class).to(NotificationMailFormatterImpl.class);
|
||||
expose(NotificationMailFormatter.class);
|
||||
bind(NotificationController.class).to(NotificationControllerImpl.class);
|
||||
expose(NotificationController.class);
|
||||
}
|
||||
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.notifications;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import com.querydsl.core.BooleanBuilder;
|
||||
import com.querydsl.core.types.Predicate;
|
||||
import se.su.dsv.scipro.system.Pageable;
|
||||
|
3
core/src/main/java/se/su/dsv/scipro/notifications/interfaces/impl/NotificationMailFormatterImpl.java
3
core/src/main/java/se/su/dsv/scipro/notifications/interfaces/impl/NotificationMailFormatterImpl.java
@ -8,7 +8,6 @@ import se.su.dsv.scipro.finalseminar.FinalSeminar;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminarService;
|
||||
import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettings;
|
||||
import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsService;
|
||||
import se.su.dsv.scipro.notifications.NotificationModule;
|
||||
import se.su.dsv.scipro.notifications.dataobject.*;
|
||||
import se.su.dsv.scipro.notifications.interfaces.NotificationMailFormatter;
|
||||
import se.su.dsv.scipro.project.Project;
|
||||
@ -158,7 +157,7 @@ public class NotificationMailFormatterImpl implements NotificationMailFormatter
|
||||
private String getAbsoluteURL(final Notification notification) {
|
||||
final String baseUrl = systemSettingsService.getGeneralSystemSettingsInstance().getSciproURL();
|
||||
long id = notification.getNotificationEvent().getId();
|
||||
return baseUrl + "/" + NotificationModule.NOTIFICATION_RELATIVE_PAGE_URL + "?id=" + id;
|
||||
return baseUrl + "/" + "notification" + "?id=" + id;
|
||||
}
|
||||
|
||||
String makeProperty(Object... parts) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.notifications.settings.service;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.notifications.dataobject.Notification;
|
||||
import se.su.dsv.scipro.notifications.dataobject.Notification.Type;
|
||||
import se.su.dsv.scipro.notifications.settings.entities.DeliveryConfiguration;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.notifications.settings.service;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.data.dataobjects.Member;
|
||||
import se.su.dsv.scipro.notifications.dataobject.Notification;
|
||||
import se.su.dsv.scipro.notifications.settings.entities.QReceiverConfiguration;
|
||||
|
@ -1,25 +0,0 @@
|
||||
package se.su.dsv.scipro.oauth;
|
||||
|
||||
import com.google.inject.PrivateModule;
|
||||
import com.google.inject.Provides;
|
||||
|
||||
import jakarta.inject.Named;
|
||||
|
||||
public class OAuthModule extends PrivateModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(OAuthService.class).to(OAuthServiceImpl.class);
|
||||
|
||||
expose(OAuthService.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
OAuthSettings settings(
|
||||
@Named("oauth.uri") String uri,
|
||||
@Named("oauth.redirectUri") String redirectUri,
|
||||
@Named("oauth.clientId") String clientId,
|
||||
@Named("oauth.clientSecret") String clientSecret)
|
||||
{
|
||||
return new OAuthSettings(uri, redirectUri, clientId, clientSecret);
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package se.su.dsv.scipro.oauth;
|
||||
|
||||
record OAuthSettings(String uri, String redirectUri, String clientId, String clientSecret) {
|
||||
public record OAuthSettings(String uri, String redirectUri, String clientId, String clientSecret) {
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.peer;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.JpaRepository;
|
||||
import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.peer;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
|
||||
|
@ -1,13 +0,0 @@
|
||||
package se.su.dsv.scipro.peer;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.multibindings.Multibinder;
|
||||
import se.su.dsv.scipro.system.Lifecycle;
|
||||
|
||||
public class PeerModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
Multibinder.newSetBinder(binder(), Lifecycle.class)
|
||||
.addBinding().to(PeerWorkerSchedules.class);
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package se.su.dsv.scipro.peer;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import se.su.dsv.scipro.file.FileReference;
|
||||
@ -152,7 +152,7 @@ public class PeerPortalImpl implements PeerPortal, PerformReviewService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(ignore = {TooShortCommentException.class, MissingAnswerException.class})
|
||||
@Transactional(dontRollbackOn = {TooShortCommentException.class, MissingAnswerException.class})
|
||||
public void submit(PeerReview review, Optional<FileUpload> upload) {
|
||||
review.submit();
|
||||
final Optional<FileReference> fileDescription = storePeerReviewFileUpload(upload);
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.peer;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.JpaRepository;
|
||||
import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
package se.su.dsv.scipro.peer;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import com.querydsl.core.BooleanBuilder;
|
||||
import com.querydsl.core.types.dsl.BooleanExpression;
|
||||
import se.su.dsv.scipro.system.Pageable;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.plagiarism;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.file.FileDescription;
|
||||
import se.su.dsv.scipro.file.FileReference;
|
||||
import se.su.dsv.scipro.file.FileService;
|
||||
|
@ -1,11 +0,0 @@
|
||||
package se.su.dsv.scipro.plagiarism;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
|
||||
public class PlagiarismModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(PlagiarismControl.class).to(PlagiarismControlImpl.class);
|
||||
bind(PlagiarismRequestRepository.class).to(PlagiarismRequestRepositoryImpl.class);
|
||||
}
|
||||
}
|
@ -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();
|
||||
|
@ -1,26 +0,0 @@
|
||||
package se.su.dsv.scipro.plagiarism.urkund;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Provides;
|
||||
import com.google.inject.Scopes;
|
||||
import se.su.dsv.scipro.sukat.Sukat;
|
||||
|
||||
import jakarta.persistence.EntityManager;
|
||||
|
||||
public class UrkundModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(UrkundService.class).to(UrkundServiceImpl.class);
|
||||
bind(UrkundSubmissionRepository.class).to(UrkundSubmissionRepositoryImpl.class);
|
||||
bind(UrkundApi.class).to(UrkundApiImpl.class).in(Scopes.SINGLETON);
|
||||
bind(UrkundSettingsRepository.class).to(UrkundSettingsRepositoryImpl.class);
|
||||
|
||||
requireBinding(EntityManager.class);
|
||||
requireBinding(Sukat.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
public UrkundSettings urkundSettings(UrkundSettingsRepository urkundSettingsRepository) {
|
||||
return urkundSettingsRepository.getSettings();
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.plagiarism.urkund;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.file.FileDescription;
|
||||
import se.su.dsv.scipro.file.FileReference;
|
||||
import se.su.dsv.scipro.file.FileService;
|
||||
|
@ -1,14 +1,10 @@
|
||||
package se.su.dsv.scipro.profiles;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Named;
|
||||
|
||||
public class CurrentProfile {
|
||||
|
||||
private String currentProfileString;
|
||||
|
||||
@Inject
|
||||
public void setCurrentProfileString(@Named("profile") String currentProfileString) {
|
||||
public void setCurrentProfileString(String currentProfileString) {
|
||||
this.currentProfileString = currentProfileString;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.project;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.JpaRepository;
|
||||
import se.su.dsv.scipro.system.QueryDslPredicateExecutor;
|
||||
import se.su.dsv.scipro.system.User;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.project;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.GenericRepo;
|
||||
import se.su.dsv.scipro.system.User;
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
package se.su.dsv.scipro.project;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import com.querydsl.core.BooleanBuilder;
|
||||
import com.querydsl.core.types.Predicate;
|
||||
import com.querydsl.core.types.dsl.BooleanExpression;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.projectpartner;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.system.AbstractRepository;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.projectpartner;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import com.querydsl.core.types.dsl.Expressions;
|
||||
import com.querydsl.jpa.JPAExpressions;
|
||||
import se.su.dsv.scipro.system.Pageable;
|
||||
|
@ -1,13 +0,0 @@
|
||||
package se.su.dsv.scipro.reflection;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import se.su.dsv.scipro.finalseminar.AuthorRepository;
|
||||
|
||||
public class ReflectionModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
requireBinding(AuthorRepository.class);
|
||||
|
||||
bind(ReflectionService.class).to(ReflectionServiceImpl.class);
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.reflection;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.finalseminar.AuthorRepository;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminarService;
|
||||
import se.su.dsv.scipro.project.Author;
|
||||
@ -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;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package se.su.dsv.scipro.report;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminarOpposition;
|
||||
import se.su.dsv.scipro.grading.GradingBasis;
|
||||
import se.su.dsv.scipro.grading.GradingReportTemplateService;
|
||||
@ -133,6 +133,7 @@ public class GradingReportServiceImpl implements GradingReportTemplateService, G
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public List<SupervisorGradingReport> getSupervisorGradingReports(Project project) {
|
||||
List<SupervisorGradingReport> gradingReports = new ArrayList<>();
|
||||
for (User user : project.getProjectParticipants()) {
|
||||
|
@ -1,8 +1,8 @@
|
||||
package se.su.dsv.scipro.report;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import com.querydsl.jpa.JPAExpressions;
|
||||
import com.querydsl.jpa.JPQLQuery;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.grading.GradingReportTemplateUpdate;
|
||||
import se.su.dsv.scipro.project.Project;
|
||||
import se.su.dsv.scipro.system.GenericRepo;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package se.su.dsv.scipro.report;
|
||||
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.file.FileReference;
|
||||
import se.su.dsv.scipro.file.FileService;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminarOpposition;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package se.su.dsv.scipro.report;
|
||||
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.file.FileReference;
|
||||
import se.su.dsv.scipro.file.FileService;
|
||||
import se.su.dsv.scipro.file.FileUpload;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package se.su.dsv.scipro.reviewing;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import jakarta.transaction.Transactional;
|
||||
import se.su.dsv.scipro.file.FileReference;
|
||||
import se.su.dsv.scipro.file.FileService;
|
||||
import se.su.dsv.scipro.file.FileUpload;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user