Skip to content

Commit 3378786

Browse files
committed
Checkin daily
1 parent 419a12a commit 3378786

3 files changed

Lines changed: 41 additions & 11 deletions

File tree

project-management/src/main/java/life/qbic/projectmanagement/application/api/AsyncProjectServiceImpl.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import life.qbic.projectmanagement.application.api.fair.DigitalObject;
2121
import life.qbic.projectmanagement.application.api.fair.DigitalObjectFactory;
2222
import life.qbic.projectmanagement.application.api.fair.ResearchProject;
23+
import life.qbic.projectmanagement.application.api.template.TemplateService;
24+
import life.qbic.projectmanagement.application.authorization.ReactiveSecurityContextUtils;
2325
import life.qbic.projectmanagement.application.sample.SampleInformationService;
2426
import life.qbic.projectmanagement.application.sample.SamplePreview;
2527
import life.qbic.projectmanagement.domain.model.experiment.ExperimentId;
@@ -58,14 +60,20 @@ public class AsyncProjectServiceImpl implements AsyncProjectService {
5860
private final Scheduler scheduler;
5961
private final SampleInformationService sampleInfoService;
6062
private final DigitalObjectFactory digitalObjectFactory;
63+
private final TemplateService templateService;
6164

62-
public AsyncProjectServiceImpl(@Autowired ProjectInformationService projectService,
65+
public AsyncProjectServiceImpl(
66+
@Autowired ProjectInformationService projectService,
6367
@Autowired SampleInformationService sampleInfoService,
64-
@Autowired Scheduler scheduler, @Autowired DigitalObjectFactory digitalObjectFactory) {
68+
@Autowired Scheduler scheduler,
69+
@Autowired DigitalObjectFactory digitalObjectFactory,
70+
@Autowired TemplateService templateService
71+
) {
6572
this.projectService = Objects.requireNonNull(projectService);
6673
this.sampleInfoService = Objects.requireNonNull(sampleInfoService);
6774
this.scheduler = Objects.requireNonNull(scheduler);
6875
this.digitalObjectFactory = Objects.requireNonNull(digitalObjectFactory);
76+
this.templateService = Objects.requireNonNull(templateService);
6977
}
7078

7179
private static Retry defaultRetryStrategy() {
@@ -239,8 +247,12 @@ public Mono<Sample> findSample(String projectId, String sampleId) {
239247
@Override
240248
public Mono<DigitalObject> sampleRegistrationTemplate(String projectId, String experimentId,
241249
MimeType mimeType) {
242-
243-
throw new RuntimeException("not implemented");
250+
SecurityContext securityContext = SecurityContextHolder.getContext();
251+
return ReactiveSecurityContextUtils.applySecurityContext(Mono.fromCallable(
252+
() -> templateService.sampleRegistrationTemplate(projectId, experimentId, mimeType)))
253+
.subscribeOn(scheduler)
254+
.transform(original -> ReactiveSecurityContextUtils.writeSecurityContext(original,
255+
securityContext));
244256
}
245257

246258
@Override

project-management/src/main/java/life/qbic/projectmanagement/application/api/template/TemplateService.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package life.qbic.projectmanagement.application.api.template;
22

33
import java.util.Arrays;
4-
import java.util.List;
54
import java.util.Objects;
65
import life.qbic.projectmanagement.application.api.AsyncProjectService.UnsupportedMimeTypeException;
76
import life.qbic.projectmanagement.application.api.fair.DigitalObject;
7+
import life.qbic.projectmanagement.application.api.template.TemplateProvider.SampleRegistration;
88
import life.qbic.projectmanagement.application.confounding.ConfoundingVariableService;
99
import life.qbic.projectmanagement.application.confounding.ConfoundingVariableService.ConfoundingVariableInformation;
1010
import life.qbic.projectmanagement.application.confounding.ConfoundingVariableService.ExperimentReference;
@@ -91,11 +91,18 @@ private DigitalObject generateSampleRegistrationTemplate(String projectId, Strin
9191
var analytes = experiment.getAnalytes().stream().map(PropertyConversion::toString).toList();
9292
var analysisMethods = Arrays.stream(AnalysisMethod.values()).map(AnalysisMethod::abbreviation)
9393
.toList();
94-
List<ConfoundingVariableInformation> confoundingVariables = confVariableService.listConfoundingVariablesForExperiment(
94+
var confoundingVariables = confVariableService.listConfoundingVariablesForExperiment(
9595
projectId, new ExperimentReference(experimentId)).stream()
9696
.map(it -> new ConfoundingVariableInformation(it.id(), it.variableName()))
9797
.toList();
98-
return null;
98+
return templateProvider.getTemplate(new SampleRegistration(
99+
analysisMethods,
100+
conditions,
101+
analytes,
102+
species,
103+
specimen,
104+
confoundingVariables
105+
));
99106
}
100107

101108
private boolean isSupportedMimeType(MimeType mimeType) {
@@ -104,6 +111,7 @@ private boolean isSupportedMimeType(MimeType mimeType) {
104111

105112

106113
static class NoSuchExperimentException extends RuntimeException {
114+
107115
public NoSuchExperimentException() {
108116
super();
109117
}

project-management/src/test/groovy/life/qbic/projectmanagement/application/api/AsyncProjectServiceImplTest.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import life.qbic.projectmanagement.application.api.AsyncProjectService.ProjectDesign;
1212
import life.qbic.projectmanagement.application.api.AsyncProjectService.ProjectUpdateRequest;
1313
import life.qbic.projectmanagement.application.api.fair.DigitalObjectFactory;
14+
import life.qbic.projectmanagement.application.api.template.TemplateService;
1415
import life.qbic.projectmanagement.application.sample.SampleInformationService;
1516
import org.junit.jupiter.api.AfterEach;
1617
import org.junit.jupiter.api.BeforeEach;
@@ -25,6 +26,7 @@ class AsyncProjectServiceImplTest {
2526
ProjectInformationService projectServiceMock = mock(ProjectInformationService.class);
2627
SampleInformationService sampleServiceMock = mock(SampleInformationService.class);
2728
DigitalObjectFactory digitalObjectFactory = mock(DigitalObjectFactory.class);
29+
TemplateService templateService = mock(TemplateService.class);
2830

2931
@BeforeEach
3032
void setUp() {
@@ -41,9 +43,13 @@ void afterEach() {
4143
@DisplayName("Test that the update completes for ProjectDesign")
4244
void updateProjectDesignCompletes() {
4345

44-
AsyncProjectServiceImpl underTest = new AsyncProjectServiceImpl(projectServiceMock,
46+
AsyncProjectServiceImpl underTest = new AsyncProjectServiceImpl(
47+
projectServiceMock,
4548
sampleServiceMock,
46-
Schedulers.boundedElastic(), digitalObjectFactory);
49+
Schedulers.boundedElastic(),
50+
digitalObjectFactory,
51+
templateService
52+
);
4753

4854
String projectId = UUID.randomUUID().toString();
4955
ProjectDesign requestBody = new ProjectDesign("neq title", "new objective");
@@ -72,9 +78,13 @@ void updateProjectDesignCompletes() {
7278
@DisplayName("Test that the update retries for ProjectDesign")
7379
void updateProjectDesignRepeats() {
7480

75-
AsyncProjectServiceImpl underTest = new AsyncProjectServiceImpl(projectServiceMock,
81+
AsyncProjectServiceImpl underTest = new AsyncProjectServiceImpl(
82+
projectServiceMock,
7683
sampleServiceMock,
77-
Schedulers.boundedElastic(), digitalObjectFactory);
84+
Schedulers.boundedElastic(),
85+
digitalObjectFactory,
86+
templateService
87+
);
7888

7989
String projectId = UUID.randomUUID().toString();
8090
ProjectDesign requestBody = new ProjectDesign("new title", "new objective");

0 commit comments

Comments
 (0)