From 7392633a25381a0c2de3d281e4bd3098344464e6 Mon Sep 17 00:00:00 2001 From: Kevin Marete Date: Wed, 18 Feb 2026 18:43:32 -0500 Subject: [PATCH 1/3] Update models --- .../DatasetRegistrationSchemaV1.java | 33 +++++++++++++++++++ .../DatasetRegistrationSchemaV1Builder.java | 1 + .../builder/SchemaFromStudy.java | 2 ++ .../http/models/elastic_search/StudyTerm.java | 9 +++++ 4 files changed, 45 insertions(+) diff --git a/src/main/java/org/broadinstitute/consent/http/models/dataset_registration_v1/DatasetRegistrationSchemaV1.java b/src/main/java/org/broadinstitute/consent/http/models/dataset_registration_v1/DatasetRegistrationSchemaV1.java index 690b3c29a..781381df9 100644 --- a/src/main/java/org/broadinstitute/consent/http/models/dataset_registration_v1/DatasetRegistrationSchemaV1.java +++ b/src/main/java/org/broadinstitute/consent/http/models/dataset_registration_v1/DatasetRegistrationSchemaV1.java @@ -35,6 +35,7 @@ "dataSubmitterUserId", "dataCustodianEmail", "publicVisibility", + "throughBioId", "nihAnvilUse", "submittingToAnvil", "dbGaPPhsID", @@ -121,6 +122,11 @@ public class DatasetRegistrationSchemaV1 { @JsonPropertyDescription("Public Visibility of this study") private Boolean publicVisibility; + /** Through.bio Identifier */ + @JsonProperty("throughBioId") + @JsonPropertyDescription("Through.bio Identifier") + private String throughBioId; + /** NIH Anvil Use (Required) */ @JsonProperty("nihAnvilUse") @JsonPropertyDescription("NIH Anvil Use") @@ -409,6 +415,18 @@ public void setPublicVisibility(Boolean publicVisibility) { this.publicVisibility = publicVisibility; } + /** Through.bio Identifier */ + @JsonProperty("throughBioId") + public String getThroughBioId() { + return throughBioId; + } + + /** Through.bio Identifier */ + @JsonProperty("throughBioId") + public void setThroughBioId(String throughBioId) { + this.throughBioId = throughBioId; + } + /** NIH Anvil Use (Required) */ @JsonProperty("nihAnvilUse") public DatasetRegistrationSchemaV1.NihAnvilUse getNihAnvilUse() { @@ -833,6 +851,10 @@ public String toString() { sb.append('='); sb.append(((this.publicVisibility == null) ? "" : this.publicVisibility)); sb.append(','); + sb.append("throughBioId"); + sb.append('='); + sb.append(((this.throughBioId == null) ? "" : this.throughBioId)); + sb.append(','); sb.append("nihAnvilUse"); sb.append('='); sb.append(((this.nihAnvilUse == null) ? "" : this.nihAnvilUse)); @@ -1011,6 +1033,7 @@ public int hashCode() { + ((this.dataSubmitterUserId == null) ? 0 : this.dataSubmitterUserId.hashCode())); result = ((result * 31) + ((this.publicVisibility == null) ? 0 : this.publicVisibility.hashCode())); + result = ((result * 31) + ((this.throughBioId == null) ? 0 : this.throughBioId.hashCode())); result = ((result * 31) + ((this.dataCustodianEmail == null) ? 0 : this.dataCustodianEmail.hashCode())); @@ -1184,6 +1207,16 @@ public boolean equals(Object other) { .publicVisibility .equals( rhs.publicVisibility)))) + && ((this + .throughBioId + == rhs.throughBioId) + || ((this + .throughBioId + != null) + && this + .throughBioId + .equals( + rhs.throughBioId))) && ((this .dataCustodianEmail == rhs.dataCustodianEmail) diff --git a/src/main/java/org/broadinstitute/consent/http/models/dataset_registration_v1/builder/DatasetRegistrationSchemaV1Builder.java b/src/main/java/org/broadinstitute/consent/http/models/dataset_registration_v1/builder/DatasetRegistrationSchemaV1Builder.java index 8f1bab268..6900f1cd4 100644 --- a/src/main/java/org/broadinstitute/consent/http/models/dataset_registration_v1/builder/DatasetRegistrationSchemaV1Builder.java +++ b/src/main/java/org/broadinstitute/consent/http/models/dataset_registration_v1/builder/DatasetRegistrationSchemaV1Builder.java @@ -73,6 +73,7 @@ public class DatasetRegistrationSchemaV1Builder { public static final String url = "url"; public static final String numberOfParticipants = "numberOfParticipants"; public static final String fileTypes = "fileTypes"; + public static final String throughBioId = "throughBioId"; public DatasetRegistrationSchemaV1 build(Study study, List datasets) { DatasetRegistrationSchemaV1 schema = new SchemaFromStudy().build(study); diff --git a/src/main/java/org/broadinstitute/consent/http/models/dataset_registration_v1/builder/SchemaFromStudy.java b/src/main/java/org/broadinstitute/consent/http/models/dataset_registration_v1/builder/SchemaFromStudy.java index 0b4684304..a84e6cd3c 100644 --- a/src/main/java/org/broadinstitute/consent/http/models/dataset_registration_v1/builder/SchemaFromStudy.java +++ b/src/main/java/org/broadinstitute/consent/http/models/dataset_registration_v1/builder/SchemaFromStudy.java @@ -30,6 +30,7 @@ import static org.broadinstitute.consent.http.models.dataset_registration_v1.builder.DatasetRegistrationSchemaV1Builder.species; import static org.broadinstitute.consent.http.models.dataset_registration_v1.builder.DatasetRegistrationSchemaV1Builder.studyType; import static org.broadinstitute.consent.http.models.dataset_registration_v1.builder.DatasetRegistrationSchemaV1Builder.submittingToAnvil; +import static org.broadinstitute.consent.http.models.dataset_registration_v1.builder.DatasetRegistrationSchemaV1Builder.throughBioId; import com.google.gson.JsonArray; import com.google.gson.JsonElement; @@ -70,6 +71,7 @@ public DatasetRegistrationSchemaV1 build(Study study) { schemaV1.setDataCustodianEmail( findListStringPropValue(study.getProperties(), dataCustodianEmail)); schemaV1.setPublicVisibility(study.getPublicVisibility()); + schemaV1.setThroughBioId(findStringPropValue(study.getProperties(), throughBioId)); String nihAnvilUseVal = findStringPropValue(study.getProperties(), nihAnvilUse); if (Objects.nonNull(nihAnvilUseVal)) { schemaV1.setNihAnvilUse(NihAnvilUse.fromValue(nihAnvilUseVal)); diff --git a/src/main/java/org/broadinstitute/consent/http/models/elastic_search/StudyTerm.java b/src/main/java/org/broadinstitute/consent/http/models/elastic_search/StudyTerm.java index 815175c05..912a0d1d9 100644 --- a/src/main/java/org/broadinstitute/consent/http/models/elastic_search/StudyTerm.java +++ b/src/main/java/org/broadinstitute/consent/http/models/elastic_search/StudyTerm.java @@ -16,6 +16,7 @@ public class StudyTerm { private Integer dataSubmitterId; private List dataCustodianEmail; private Boolean publicVisibility; + private String throughBioId; private List dataTypes; private Map assets; private Map data; @@ -108,6 +109,14 @@ public void setPublicVisibility(Boolean publicVisibility) { this.publicVisibility = publicVisibility; } + public String getThroughBioId() { + return throughBioId; + } + + public void setThroughBioId(String throughBioId) { + this.throughBioId = throughBioId; + } + public List getDataTypes() { return dataTypes; } From 46ed8e87449cde6d2eef279d3d87489ee8f42e09 Mon Sep 17 00:00:00 2001 From: Kevin Marete Date: Wed, 18 Feb 2026 18:43:38 -0500 Subject: [PATCH 2/3] Update services --- .../consent/http/service/DatasetRegistrationService.java | 4 ++++ .../consent/http/service/ElasticSearchService.java | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/main/java/org/broadinstitute/consent/http/service/DatasetRegistrationService.java b/src/main/java/org/broadinstitute/consent/http/service/DatasetRegistrationService.java index b6379267f..5c70ce5dd 100644 --- a/src/main/java/org/broadinstitute/consent/http/service/DatasetRegistrationService.java +++ b/src/main/java/org/broadinstitute/consent/http/service/DatasetRegistrationService.java @@ -611,6 +611,10 @@ Optional extract(DatasetRegistrationSchemaV1 registration) { } return null; }), + new StudyPropertyExtractor( + "throughBioId", + PropertyType.String, + DatasetRegistrationSchemaV1::getThroughBioId), new StudyPropertyExtractor( "nihAnvilUse", PropertyType.String, DatasetRegistrationSchemaV1::getNihAnvilUse), new StudyPropertyExtractor( diff --git a/src/main/java/org/broadinstitute/consent/http/service/ElasticSearchService.java b/src/main/java/org/broadinstitute/consent/http/service/ElasticSearchService.java index c2ec9cb66..5d27ce338 100644 --- a/src/main/java/org/broadinstitute/consent/http/service/ElasticSearchService.java +++ b/src/main/java/org/broadinstitute/consent/http/service/ElasticSearchService.java @@ -262,6 +262,9 @@ public StudyTerm toStudyTerm(Study study) { term.setPiName(study.getPiName()); term.setPublicVisibility(study.getPublicVisibility()); + findStudyProperty(study.getProperties(), "throughBioId") + .ifPresent(prop -> term.setThroughBioId(prop.getValue().toString())); + findStudyProperty(study.getProperties(), "dbGaPPhsID") .ifPresent(prop -> term.setPhsId(prop.getValue().toString())); From 633c9e7aa2dcf5ce3f6fd4d93f2318cba62df62e Mon Sep 17 00:00:00 2001 From: Kevin Marete Date: Wed, 18 Feb 2026 18:43:51 -0500 Subject: [PATCH 3/3] Update tests --- .../models/DatasetRegistrationSchemaV1BuilderTest.java | 4 ++++ .../consent/http/service/ElasticSearchServiceTest.java | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/broadinstitute/consent/http/models/DatasetRegistrationSchemaV1BuilderTest.java b/src/test/java/org/broadinstitute/consent/http/models/DatasetRegistrationSchemaV1BuilderTest.java index 2de3d581a..9a31ba63c 100644 --- a/src/test/java/org/broadinstitute/consent/http/models/DatasetRegistrationSchemaV1BuilderTest.java +++ b/src/test/java/org/broadinstitute/consent/http/models/DatasetRegistrationSchemaV1BuilderTest.java @@ -34,6 +34,7 @@ import static org.broadinstitute.consent.http.models.dataset_registration_v1.builder.DatasetRegistrationSchemaV1Builder.species; import static org.broadinstitute.consent.http.models.dataset_registration_v1.builder.DatasetRegistrationSchemaV1Builder.studyType; import static org.broadinstitute.consent.http.models.dataset_registration_v1.builder.DatasetRegistrationSchemaV1Builder.submittingToAnvil; +import static org.broadinstitute.consent.http.models.dataset_registration_v1.builder.DatasetRegistrationSchemaV1Builder.throughBioId; import static org.broadinstitute.consent.http.models.dataset_registration_v1.builder.DatasetRegistrationSchemaV1Builder.url; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -99,6 +100,7 @@ void testBuildSchemaWithStudyProps() { assertNotNull(schemaV1.getDataSubmitterUserId()); assertNotNull(schemaV1.getDataCustodianEmail()); assertNotNull(schemaV1.getPublicVisibility()); + assertNotNull(schemaV1.getThroughBioId()); assertNotNull(schemaV1.getNihAnvilUse()); assertNotNull(schemaV1.getSubmittingToAnvil()); assertNotNull(schemaV1.getDbGaPPhsID()); @@ -360,6 +362,8 @@ private void addAllStudyProperties(Study study) { study.getStudyId(), AlternativeDataSharingPlanAccessManagement.OPEN_ACCESS.value(), PropertyType.String)); + study.addProperty( + createStudyProperty(throughBioId, study.getStudyId(), randomString(), PropertyType.String)); } private String randomString() { diff --git a/src/test/java/org/broadinstitute/consent/http/service/ElasticSearchServiceTest.java b/src/test/java/org/broadinstitute/consent/http/service/ElasticSearchServiceTest.java index 3b87e0f3f..f256378f6 100644 --- a/src/test/java/org/broadinstitute/consent/http/service/ElasticSearchServiceTest.java +++ b/src/test/java/org/broadinstitute/consent/http/service/ElasticSearchServiceTest.java @@ -241,7 +241,8 @@ private DatasetRecord createDatasetRecord() { createStudyProperty("dbGaPPhsID", PropertyType.String), createStudyProperty("phenotypeIndication", PropertyType.String), createStudyProperty("species", PropertyType.String), - createStudyProperty("dataCustodianEmail", PropertyType.Json)); + createStudyProperty("dataCustodianEmail", PropertyType.Json), + createStudyProperty("throughBioId", PropertyType.String)); Dataset dataset = createDataset(user, updateUser, new DataUse(), dac); dataset.setProperties( Set.of( @@ -347,6 +348,11 @@ void testToDatasetTerm_StudyInfo() { assertEquals(custodianProp.get().getValue().toString(), termCustodians); assertEquals(datasetRecord.study.getPublicVisibility(), term.getStudy().getPublicVisibility()); assertEquals(datasetRecord.study.getDataTypes(), term.getStudy().getDataTypes()); + Optional throughBioIdProp = + datasetRecord.study.getProperties().stream() + .filter(p -> p.getKey().equals("throughBioId")) + .findFirst(); + assertTrue(throughBioIdProp.isPresent()); } @ParameterizedTest