Skip to content

Commit 434ddf2

Browse files
authored
Merge pull request #866 from overture-stack/feature/schema_version_fix
Enable Version-Based File Type Validation for Analysis Submission
2 parents d8ce615 + 153461f commit 434ddf2

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

Diff for: song-server/src/main/java/bio/overture/song/server/repository/AnalysisSchemaRepository.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.Optional;
2323
import org.springframework.data.jpa.repository.JpaRepository;
2424
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
25+
import org.springframework.data.jpa.repository.Query;
2526

2627
public interface AnalysisSchemaRepository
2728
extends JpaRepository<AnalysisSchema, Integer>, JpaSpecificationExecutor<AnalysisSchema> {
@@ -32,5 +33,5 @@ public interface AnalysisSchemaRepository
3233

3334
Optional<AnalysisSchema> findByNameAndVersion(String name, Integer version);
3435

35-
List<AnalysisSchema> findByName(String name);
36+
List<AnalysisSchema> findAllByName(String name);
3637
}

Diff for: song-server/src/main/java/bio/overture/song/server/service/AnalysisTypeService.java

+22
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ public Schema getAnalysisTypeRegistrationSchema() {
9999
return analysisTypeRegistrationSchema;
100100
}
101101

102+
public List<AnalysisSchema> getAllAnalysisSchemas(String name) {
103+
return analysisSchemaRepository.findAllByName(name);
104+
}
105+
102106
public AnalysisType getAnalysisType(
103107
@NonNull String name, @Nullable Integer version, boolean unrenderedOnly) {
104108
val resolvedVersion = isNull(version) ? getLatestVersionNumber(name) : version;
@@ -265,6 +269,24 @@ private AnalysisType commitAnalysisType(
265269
if (options != null && CollectionUtils.isNotEmpty(options.getFileTypes())) {
266270
fileTypes = options.getFileTypes();
267271
}
272+
273+
// checking if file types is empty
274+
// if the version is new version of the schema , we are checking the previous version allowed file types
275+
// if it is new then it is empty
276+
if(fileTypes.isEmpty()){
277+
List<AnalysisSchema> analysisSchemaList = analysisSchemaRepository.findAllByName(analysisTypeName);
278+
279+
if(!analysisSchemaList.isEmpty()){
280+
Optional<AnalysisSchema> latestSchemaOptional = analysisSchemaList.stream()
281+
.filter(schema -> schema.getVersion() != null)
282+
.max(Comparator.comparingInt(AnalysisSchema::getVersion));
283+
284+
if(latestSchemaOptional.isPresent()){
285+
fileTypes = latestSchemaOptional.get().getFileTypes();
286+
}
287+
}
288+
}
289+
268290
val analysisSchema =
269291
AnalysisSchema.builder()
270292
.name(analysisTypeName)

Diff for: song-server/src/main/java/bio/overture/song/server/service/ValidationService.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,18 @@
3030

3131
import bio.overture.song.core.model.AnalysisTypeId;
3232
import bio.overture.song.core.model.FileData;
33+
import bio.overture.song.server.model.entity.AnalysisSchema;
3334
import bio.overture.song.server.model.enums.UploadStates;
3435
import bio.overture.song.server.repository.UploadRepository;
3536
import bio.overture.song.server.validation.SchemaValidator;
3637
import bio.overture.song.server.validation.ValidationResponse;
3738
import com.fasterxml.jackson.databind.JsonNode;
3839
import java.util.ArrayList;
3940
import java.util.List;
41+
import java.util.Objects;
4042
import java.util.Optional;
4143
import java.util.function.Supplier;
44+
import java.util.stream.Collectors;
4245
import lombok.NonNull;
4346
import lombok.SneakyThrows;
4447
import lombok.extern.slf4j.Slf4j;
@@ -96,7 +99,9 @@ public Optional<String> validate(@NonNull JsonNode payload) {
9699
fileTypes = analysisType.getOptions().getFileTypes();
97100
}
98101

99-
validateFileType(fileTypes, payload);
102+
if (!fileTypes.isEmpty()) {
103+
validateFileType(fileTypes, payload);
104+
}
100105

101106
val schema = buildSchema(analysisType.getSchema());
102107
validateWithSchema(schema, payload);

0 commit comments

Comments
 (0)