Skip to content

Commit 07ece40

Browse files
authored
Merge pull request #656 from overture-stack/rc/4.2.3
Release Candidate 4.2.3
2 parents 00d7e69 + c924b47 commit 07ece40

37 files changed

+525
-163
lines changed

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<groupId>bio.overture</groupId>
2222
<artifactId>song</artifactId>
2323
<packaging>pom</packaging>
24-
<version>4.2.2</version>
24+
<version>4.2.3</version>
2525
<modules>
2626
<module>song-core</module>
2727
<module>song-java-sdk</module>

song-client/pom.xml

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<parent>
1919
<artifactId>song</artifactId>
2020
<groupId>bio.overture</groupId>
21-
<version>4.2.2</version>
21+
<version>4.2.3</version>
2222
</parent>
2323
<modelVersion>4.0.0</modelVersion>
2424

@@ -35,12 +35,12 @@
3535
<dependency>
3636
<groupId>bio.overture</groupId>
3737
<artifactId>song-java-sdk</artifactId>
38-
<version>4.2.2</version>
38+
<version>4.2.3</version>
3939
</dependency>
4040
<dependency>
4141
<groupId>bio.overture</groupId>
4242
<artifactId>song-core</artifactId>
43-
<version>4.2.2</version>
43+
<version>4.2.3</version>
4444
</dependency>
4545

4646
<!-- CLI -->

song-core/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<parent>
2020
<artifactId>song</artifactId>
2121
<groupId>bio.overture</groupId>
22-
<version>4.2.2</version>
22+
<version>4.2.3</version>
2323
</parent>
2424
<modelVersion>4.0.0</modelVersion>
2525

song-java-sdk/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<parent>
1919
<artifactId>song</artifactId>
2020
<groupId>bio.overture</groupId>
21-
<version>4.2.2</version>
21+
<version>4.2.3</version>
2222
</parent>
2323
<modelVersion>4.0.0</modelVersion>
2424

song-server/pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<parent>
2020
<artifactId>song</artifactId>
2121
<groupId>bio.overture</groupId>
22-
<version>4.2.2</version>
22+
<version>4.2.3</version>
2323
</parent>
2424
<modelVersion>4.0.0</modelVersion>
2525

@@ -37,7 +37,7 @@
3737
<dependency>
3838
<groupId>bio.overture</groupId>
3939
<artifactId>song-core</artifactId>
40-
<version>4.2.2</version>
40+
<version>4.2.3</version>
4141
</dependency>
4242

4343
<!-- Spring -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package bio.overture.song.server.config;
2+
3+
import org.springframework.context.annotation.Configuration;
4+
import org.springframework.context.annotation.Profile;
5+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
6+
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
7+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
8+
9+
@Profile("noSecurityDev")
10+
@Configuration
11+
@EnableWebSecurity
12+
public class NoSecurityConfig extends WebSecurityConfigurerAdapter {
13+
@Override
14+
protected void configure(HttpSecurity http) throws Exception {
15+
http.authorizeRequests().antMatchers("/").permitAll();
16+
}
17+
}

song-server/src/main/java/bio/overture/song/server/controller/AnalysisController.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@
2525
import bio.overture.song.server.model.analysis.Analysis;
2626
import bio.overture.song.server.model.entity.FileEntity;
2727
import bio.overture.song.server.repository.search.IdSearchRequest;
28-
import bio.overture.song.server.service.AnalysisService;
28+
import bio.overture.song.server.service.analysis.AnalysisService;
2929
import com.fasterxml.jackson.databind.JsonNode;
3030
import com.google.common.collect.ImmutableSet;
3131
import io.swagger.annotations.Api;
3232
import io.swagger.annotations.ApiOperation;
3333
import io.swagger.annotations.ApiParam;
3434
import java.util.List;
35-
import lombok.RequiredArgsConstructor;
35+
import lombok.NonNull;
3636
import lombok.SneakyThrows;
3737
import lombok.val;
3838
import org.springframework.beans.factory.annotation.Autowired;
@@ -50,7 +50,6 @@
5050
import org.springframework.web.bind.annotation.RestController;
5151

5252
@RestController
53-
@RequiredArgsConstructor
5453
@RequestMapping("/studies/{studyId}/analysis")
5554
@Api(
5655
tags = "Analysis",
@@ -71,7 +70,12 @@ public class AnalysisController {
7170
+ "}";
7271

7372
/** Dependencies */
74-
@Autowired private final AnalysisService analysisService;
73+
private final AnalysisService analysisService;
74+
75+
@Autowired
76+
public AnalysisController(@NonNull AnalysisService analysisService) {
77+
this.analysisService = analysisService;
78+
}
7579

7680
@ApiOperation(
7781
value = "GetAnalysesForStudy",

song-server/src/main/java/bio/overture/song/server/controller/analysisType/AnalysisTypeController.java

-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ public AnalysisType getAnalysisTypeVersion(
8686
@ApiParam(
8787
value = "Optionally, retrieve a specific version of the analysisType",
8888
type = "integer",
89-
defaultValue = "false",
9089
required = false)
9190
@RequestParam(value = "version", required = false)
9291
Integer version) {

song-server/src/main/java/bio/overture/song/server/kafka/AnalysisMessage.java

+12-1
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,24 @@
2121
import static lombok.AccessLevel.PRIVATE;
2222

2323
import bio.overture.song.core.model.enums.AnalysisStates;
24+
import com.fasterxml.jackson.annotation.JsonCreator;
25+
import com.fasterxml.jackson.annotation.JsonProperty;
26+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
27+
import lombok.AccessLevel;
28+
import lombok.AllArgsConstructor;
29+
import lombok.Builder;
30+
import lombok.NoArgsConstructor;
2431
import lombok.NonNull;
2532
import lombok.RequiredArgsConstructor;
2633
import lombok.Value;
2734

2835
@Value
29-
@RequiredArgsConstructor(access = PRIVATE)
36+
//Note: although the AllArgs and NoArgs combination below seems odd,
37+
// it allows Jackson to deserialize to an immutable object without using any additional annotations.
38+
@AllArgsConstructor
39+
@NoArgsConstructor(force = true, access = PRIVATE)
3040
public class AnalysisMessage {
41+
3142
@NonNull private final String analysisId;
3243
@NonNull private final String studyId;
3344
@NonNull private final String state;

song-server/src/main/java/bio/overture/song/server/service/DonorService.java

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import bio.overture.song.server.model.entity.Donor;
3232
import bio.overture.song.server.model.entity.composites.DonorWithSpecimens;
3333
import bio.overture.song.server.repository.DonorRepository;
34+
import bio.overture.song.server.service.InfoService.DonorInfoService;
3435
import bio.overture.song.server.service.id.IdService;
3536
import java.util.ArrayList;
3637
import java.util.List;

song-server/src/main/java/bio/overture/song/server/service/ExportService.java

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import bio.overture.song.server.model.entity.FileEntity;
3535
import bio.overture.song.server.model.entity.Sample;
3636
import bio.overture.song.server.model.entity.Specimen;
37+
import bio.overture.song.server.service.analysis.AnalysisService;
3738
import com.fasterxml.jackson.annotation.JsonInclude;
3839
import com.fasterxml.jackson.databind.JsonNode;
3940
import com.google.common.collect.ImmutableList;

song-server/src/main/java/bio/overture/song/server/service/FileModificationService.java

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import bio.overture.song.core.model.enums.FileUpdateTypes;
3636
import bio.overture.song.server.converter.FileConverter;
3737
import bio.overture.song.server.model.entity.FileEntity;
38+
import bio.overture.song.server.service.analysis.AnalysisService;
3839
import javax.transaction.Transactional;
3940
import lombok.NonNull;
4041
import lombok.val;

song-server/src/main/java/bio/overture/song/server/service/FileService.java

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import bio.overture.song.server.converter.FileConverter;
2828
import bio.overture.song.server.model.entity.FileEntity;
2929
import bio.overture.song.server.repository.FileRepository;
30+
import bio.overture.song.server.service.InfoService.FileInfoService;
3031
import bio.overture.song.server.service.id.IdService;
3132
import java.util.List;
3233
import java.util.Optional;

song-server/src/main/java/bio/overture/song/server/service/InfoService.java

+31-46
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444

4545
@Service
4646
@RequiredArgsConstructor
47-
abstract class InfoService {
47+
public abstract class InfoService {
4848

4949
private final InfoTypes type;
5050
private final InfoRepository infoRepository;
@@ -119,60 +119,45 @@ private List<Info> findInfo(@NonNull Set<String> ids) {
119119
val searchRequest = ids.stream().map(this::buildPK).collect(toList());
120120
return infoRepository.findAllByInfoPKIn(searchRequest);
121121
}
122-
}
123122

124-
@Service
125-
class StudyInfoService extends InfoService {
126-
@Autowired
127-
StudyInfoService(InfoRepository repo) {
128-
super(InfoTypes.STUDY, repo);
123+
@Service
124+
public static class StudyInfoService extends InfoService {
125+
@Autowired
126+
StudyInfoService(InfoRepository repo) {
127+
super(InfoTypes.STUDY, repo);
128+
}
129129
}
130-
}
131130

132-
@Service
133-
class DonorInfoService extends InfoService {
134-
@Autowired
135-
DonorInfoService(InfoRepository repo) {
136-
super(InfoTypes.DONOR, repo);
131+
@Service
132+
public static class DonorInfoService extends InfoService {
133+
@Autowired
134+
DonorInfoService(InfoRepository repo) {
135+
super(InfoTypes.DONOR, repo);
136+
}
137137
}
138-
}
139138

140-
@Service
141-
class SpecimenInfoService extends InfoService {
142-
@Autowired
143-
SpecimenInfoService(InfoRepository repo) {
144-
super(InfoTypes.SPECIMEN, repo);
139+
@Service
140+
public static class SpecimenInfoService extends InfoService {
141+
@Autowired
142+
SpecimenInfoService(InfoRepository repo) {
143+
super(InfoTypes.SPECIMEN, repo);
144+
}
145145
}
146-
}
147146

148-
@Service
149-
class SampleInfoService extends InfoService {
150-
@Autowired
151-
SampleInfoService(InfoRepository repo) {
152-
super(InfoTypes.SAMPLE, repo);
147+
@Service
148+
public static class SampleInfoService extends InfoService {
149+
@Autowired
150+
SampleInfoService(InfoRepository repo) {
151+
super(InfoTypes.SAMPLE, repo);
152+
}
153153
}
154-
}
155154

156-
@Service
157-
class FileInfoService extends InfoService {
158-
@Autowired
159-
FileInfoService(InfoRepository repo) {
160-
super(InfoTypes.FILE, repo);
161-
}
162-
}
163-
164-
@Service
165-
class VariantCallInfoService extends InfoService {
166-
@Autowired
167-
VariantCallInfoService(InfoRepository repo) {
168-
super(InfoTypes.VARIANT_CALL, repo);
155+
@Service
156+
public static class FileInfoService extends InfoService {
157+
@Autowired
158+
FileInfoService(InfoRepository repo) {
159+
super(InfoTypes.FILE, repo);
160+
}
169161
}
170-
}
171162

172-
@Service
173-
class SequencingReadInfoService extends InfoService {
174-
@Autowired
175-
SequencingReadInfoService(InfoRepository repo) {
176-
super(SEQUENCING_READ, repo);
177-
}
178163
}

song-server/src/main/java/bio/overture/song/server/service/SampleService.java

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import bio.overture.song.server.model.entity.Sample;
3333
import bio.overture.song.server.repository.BusinessKeyRepository;
3434
import bio.overture.song.server.repository.SampleRepository;
35+
import bio.overture.song.server.service.InfoService.SampleInfoService;
3536
import bio.overture.song.server.service.id.IdService;
3637
import java.util.List;
3738
import javax.transaction.Transactional;

song-server/src/main/java/bio/overture/song/server/service/SpecimenService.java

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import bio.overture.song.server.model.entity.composites.SpecimenWithSamples;
3333
import bio.overture.song.server.repository.BusinessKeyRepository;
3434
import bio.overture.song.server.repository.SpecimenRepository;
35+
import bio.overture.song.server.service.InfoService.SpecimenInfoService;
3536
import bio.overture.song.server.service.id.IdService;
3637
import java.util.ArrayList;
3738
import java.util.List;

song-server/src/main/java/bio/overture/song/server/service/StudyService.java

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import bio.overture.song.server.model.entity.Study;
2727
import bio.overture.song.server.repository.StudyRepository;
28+
import bio.overture.song.server.service.InfoService.StudyInfoService;
2829
import java.util.List;
2930
import javax.transaction.Transactional;
3031
import lombok.NonNull;

song-server/src/main/java/bio/overture/song/server/service/SubmitService.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030
import bio.overture.song.core.model.AnalysisTypeId;
3131
import bio.overture.song.core.model.SubmitResponse;
3232
import bio.overture.song.server.model.dto.Payload;
33+
import bio.overture.song.server.service.analysis.AnalysisService;
3334
import com.fasterxml.jackson.databind.JsonNode;
3435
import java.io.IOException;
35-
import javax.transaction.Transactional;
3636
import lombok.NonNull;
3737
import lombok.SneakyThrows;
3838
import lombok.extern.slf4j.Slf4j;
@@ -58,7 +58,6 @@ public SubmitService(
5858
this.studyService = studyService;
5959
}
6060

61-
@Transactional
6261
public SubmitResponse submit(@NonNull String studyId, String payloadString) {
6362
// Check study exists
6463
studyService.checkStudyExist(studyId);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package bio.overture.song.server.service.analysis;
2+
3+
import bio.overture.song.core.model.enums.AnalysisStates;
4+
import bio.overture.song.server.model.analysis.Analysis;
5+
import bio.overture.song.server.model.dto.Payload;
6+
import bio.overture.song.server.model.entity.FileEntity;
7+
import bio.overture.song.server.model.entity.composites.CompositeEntity;
8+
import bio.overture.song.server.repository.search.IdSearchRequest;
9+
import com.fasterxml.jackson.databind.JsonNode;
10+
import java.util.Collection;
11+
import java.util.List;
12+
import java.util.Set;
13+
import lombok.NonNull;
14+
import org.springframework.http.ResponseEntity;
15+
16+
public interface AnalysisService {
17+
18+
String create(String studyId, Payload payload);
19+
20+
void updateAnalysis(String studyId, String analysisId, JsonNode updateAnalysisRequest);
21+
22+
List<Analysis> getAnalysis(String studyId, Set<String> analysisStates);
23+
24+
List<Analysis> idSearch(String studyId, IdSearchRequest request);
25+
26+
boolean isAnalysisExist(String id);
27+
28+
void checkAnalysisExists(String id);
29+
30+
void checkAnalysisAndStudyRelated(String studyId, String id);
31+
32+
List<Analysis> unsecuredDeepReads(Collection<String> ids);
33+
34+
Analysis unsecuredDeepRead(String id);
35+
36+
List<FileEntity> unsecuredReadFiles(String id);
37+
38+
ResponseEntity<String> publish(String studyId, String id, boolean ignoreUndefinedMd5);
39+
40+
ResponseEntity<String> unpublish(String studyId, String id);
41+
42+
ResponseEntity<String> suppress(String studyId, String id);
43+
44+
List<CompositeEntity> readSamples(String id);
45+
46+
AnalysisStates readState(String id);
47+
48+
default List<FileEntity> securedReadFiles(@NonNull String studyId, String id) {
49+
checkAnalysisAndStudyRelated(studyId, id);
50+
return unsecuredReadFiles(id);
51+
}
52+
53+
/**
54+
* Securely reads an analysis WITH all of its files, samples and info, and verifies the input
55+
* studyId is related to the requested analysisId
56+
*/
57+
default Analysis securedDeepRead(@NonNull String studyId, String id) {
58+
checkAnalysisAndStudyRelated(studyId, id);
59+
return unsecuredDeepRead(id);
60+
}
61+
}

0 commit comments

Comments
 (0)