Skip to content

Commit 896bce7

Browse files
committed
Merge branch 'release-4.x.x' into TASK-7545
2 parents 8eaa657 + 5758464 commit 896bce7

7 files changed

Lines changed: 132 additions & 46 deletions

File tree

opencga-app/app/misc/clients/r_client_generator.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,19 @@ def __init__(self, server_url, output_dir):
1818
'Studies': 'Study',
1919
'Files': 'File',
2020
'Jobs': 'Job',
21-
'Workflows': 'Workflow',
2221
'Samples': 'Sample',
2322
'Individuals': 'Individual',
2423
'Families': 'Family',
2524
'Cohorts': 'Cohort',
2625
'Disease Panels': 'Panel',
26+
'Notes': 'Note',
27+
'Workflows': 'Workflow',
2728
'Analysis - Alignment': 'Alignment',
2829
'Analysis - Variant': 'Variant',
2930
'Analysis - Clinical': 'Clinical',
3031
'Operations - Variant Storage': 'Operation',
3132
'Meta': 'Meta',
32-
'CVDB': 'CVDB',
33+
'Analysis - CVDB': 'CVDB',
3334
'GA4GH': 'GA4GH',
3435
'Admin': 'Admin'
3536
}

opencga-app/app/misc/clients/rest_client_generator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def __init__(self, rest_api_file, output_dir):
5555
'Analysis - Clinical': 'ClinicalAnalysis',
5656
'Operations - Variant Storage': 'VariantOperation',
5757
'Meta': 'Meta',
58-
'CVDB': 'CVDB',
58+
'Analysis - CVDB': 'CVDB',
5959
'GA4GH': 'GA4GH',
6060
'Admin': 'Admin'
6161
}

opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/IndividualMongoDBAdaptor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1322,6 +1322,8 @@ private MongoDBIterator<Document> getMongoCursor(ClientSession clientSession, Qu
13221322
}
13231323

13241324
qOptions = removeInnerProjections(qOptions, QueryParams.SAMPLES.key());
1325+
qOptions = removeInnerProjections(qOptions, QueryParams.FATHER.key());
1326+
qOptions = removeInnerProjections(qOptions, QueryParams.MOTHER.key());
13251327
qOptions = removeAnnotationProjectionOptions(qOptions);
13261328

13271329
// FIXME we should be able to remove this now safely

opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/iterators/IndividualCatalogMongoDBIterator.java

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ public class IndividualCatalogMongoDBIterator<E> extends AnnotableCatalogMongoDB
5151
private QueryOptions sampleQueryOptions;
5252

5353
private IndividualMongoDBAdaptor individualDBAdaptor;
54+
private QueryOptions fatherQueryOptions;
55+
private QueryOptions motherQueryOptions;
5456
private Queue<Document> individualListBuffer;
5557

5658
private Logger logger;
@@ -76,6 +78,8 @@ public IndividualCatalogMongoDBIterator(MongoDBIterator<Document> mongoCursor, C
7678
this.sampleQueryOptions = createSampleQueryOptions();
7779

7880
this.individualDBAdaptor = dbAdaptorFactory.getCatalogIndividualDBAdaptor();
81+
this.fatherQueryOptions = createInnerQueryOptionsForVersionedEntity(options, IndividualDBAdaptor.QueryParams.FATHER.key(), true);
82+
this.motherQueryOptions = createInnerQueryOptionsForVersionedEntity(options, IndividualDBAdaptor.QueryParams.MOTHER.key(), true);
7983

8084
this.individualListBuffer = new LinkedList<>();
8185
this.logger = LoggerFactory.getLogger(IndividualCatalogMongoDBIterator.class);
@@ -108,7 +112,8 @@ public boolean hasNext() {
108112

109113
private void fetchNextBatch() {
110114
Set<String> sampleVersions = new HashSet<>();
111-
Map<Long, List<Document>> individualMap = new HashMap<>();
115+
Map<Long, List<Document>> fatherMap = new HashMap<>();
116+
Map<Long, List<Document>> motherMap = new HashMap<>();
112117

113118
// Get next BUFFER_SIZE documents
114119
int counter = 0;
@@ -140,47 +145,14 @@ private void fetchNextBatch() {
140145
if (!options.getBoolean(NATIVE_QUERY)) {
141146
// Extract father and mother uids
142147
Document father = (Document) individualDocument.get(IndividualDBAdaptor.QueryParams.FATHER.key());
143-
addParentToMap(individualMap, father);
148+
addParentToMap(fatherMap, father);
144149
Document mother = (Document) individualDocument.get(IndividualDBAdaptor.QueryParams.MOTHER.key());
145-
addParentToMap(individualMap, mother);
150+
addParentToMap(motherMap, mother);
146151
}
147152
}
148153

149-
if (!individualMap.isEmpty()) {
150-
// Obtain the parents
151-
152-
Query query = new Query(SampleDBAdaptor.QueryParams.UID.key(), individualMap.keySet());
153-
QueryOptions queryOptions = new QueryOptions()
154-
.append(NATIVE_QUERY, true)
155-
.append(QueryOptions.INCLUDE, Arrays.asList(
156-
IndividualDBAdaptor.QueryParams.ID.key(), IndividualDBAdaptor.QueryParams.VERSION.key(),
157-
IndividualDBAdaptor.QueryParams.UID.key()));
158-
159-
try {
160-
DataResult<Document> individualDataResult;
161-
if (user != null) {
162-
query.put(IndividualDBAdaptor.QueryParams.STUDY_UID.key(), studyUid);
163-
individualDataResult = individualDBAdaptor.nativeGet(clientSession, studyUid, query, queryOptions, user);
164-
} else {
165-
individualDataResult = individualDBAdaptor.nativeGet(clientSession, query, queryOptions);
166-
}
167-
168-
for (Document individual : individualDataResult.getResults()) {
169-
List<Document> parentList =
170-
individualMap.get(((Number) individual.get(IndividualDBAdaptor.QueryParams.UID.key())).longValue());
171-
for (Document parentDocument : parentList) {
172-
parentDocument.put(IndividualDBAdaptor.QueryParams.ID.key(),
173-
individual.getString(IndividualDBAdaptor.QueryParams.ID.key()));
174-
parentDocument.put(IndividualDBAdaptor.QueryParams.VERSION.key(),
175-
individual.getInteger(IndividualDBAdaptor.QueryParams.VERSION.key()));
176-
}
177-
}
178-
179-
} catch (CatalogDBException | CatalogAuthorizationException | CatalogParameterException e) {
180-
logger.warn("Could not obtain the parents associated to the individuals: {}", e.getMessage(), e);
181-
}
182-
183-
}
154+
obtainParentInformation(fatherMap, fatherQueryOptions);
155+
obtainParentInformation(motherMap, motherQueryOptions);
184156

185157
if (!sampleVersions.isEmpty()) {
186158
// Obtain all those samples
@@ -237,6 +209,33 @@ private void fetchNextBatch() {
237209
}
238210
}
239211

212+
private void obtainParentInformation(Map<Long, List<Document>> parentMap, QueryOptions queryOptions) {
213+
if (!parentMap.isEmpty()) {
214+
// Obtain the parents
215+
Query query = new Query(IndividualDBAdaptor.QueryParams.UID.key(), parentMap.keySet());
216+
217+
try {
218+
DataResult<Document> individualDataResult;
219+
if (user != null) {
220+
query.put(IndividualDBAdaptor.QueryParams.STUDY_UID.key(), studyUid);
221+
individualDataResult = individualDBAdaptor.nativeGet(clientSession, studyUid, query, queryOptions, user);
222+
} else {
223+
individualDataResult = individualDBAdaptor.nativeGet(clientSession, query, queryOptions);
224+
}
225+
226+
for (Document individual : individualDataResult.getResults()) {
227+
List<Document> parentList =
228+
parentMap.get(((Number) individual.get(IndividualDBAdaptor.QueryParams.UID.key())).longValue());
229+
for (Document parentDocument : parentList) {
230+
parentDocument.putAll(individual);
231+
}
232+
}
233+
} catch (CatalogDBException | CatalogAuthorizationException | CatalogParameterException e) {
234+
logger.warn("Could not obtain the parents associated to the individuals: {}", e.getMessage(), e);
235+
}
236+
}
237+
}
238+
240239
private void addParentToMap(Map<Long, List<Document>> individualMap, Document parent) {
241240
if (parent != null && parent.size() > 0) {
242241
long uid = ((Number) parent.get("uid")).longValue();

opencga-catalog/src/test/java/org/opencb/opencga/catalog/db/mongodb/ProjectMongoDBAdaptorTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.opencb.opencga.core.models.project.Project;
3333
import org.opencb.opencga.core.models.project.ProjectInternal;
3434
import org.opencb.opencga.core.models.study.Study;
35+
import org.opencb.opencga.core.models.study.StudyInternal;
3536
import org.opencb.opencga.core.response.OpenCGAResult;
3637
import org.opencb.opencga.core.testclassification.duration.MediumTests;
3738

@@ -143,7 +144,7 @@ public void renameProjectTest() throws CatalogException {
143144
catalogIOManager.createProject(organizationId, Long.toString(p1.getUid()));
144145

145146
// Add study
146-
catalogStudyDBAdaptor.insert(p1, new Study().setId("study").setFqn(FqnUtils.buildFqn(organizationId, "myp1", "study")), null);
147+
catalogStudyDBAdaptor.insert(p1, new Study().setInternal(new StudyInternal()).setId("study").setFqn(FqnUtils.buildFqn(organizationId, "myp1", "study")), null);
147148

148149
catalogProjectDBAdaptor.update(p1.getUid(), new ObjectMap(ProjectDBAdaptor.QueryParams.ID.key(), "newpmp"), QueryOptions.empty());
149150
Project project = getProject("newpmp");

opencga-catalog/src/test/java/org/opencb/opencga/catalog/db/mongodb/StudyMongoDBAdaptorTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,7 @@
2626
import org.opencb.opencga.catalog.utils.ParamUtils;
2727
import org.opencb.opencga.core.api.ParamConstants;
2828
import org.opencb.opencga.core.models.project.Project;
29-
import org.opencb.opencga.core.models.study.Group;
30-
import org.opencb.opencga.core.models.study.Study;
31-
import org.opencb.opencga.core.models.study.Variable;
32-
import org.opencb.opencga.core.models.study.VariableSet;
29+
import org.opencb.opencga.core.models.study.*;
3330
import org.opencb.opencga.core.response.OpenCGAResult;
3431
import org.opencb.opencga.core.testclassification.duration.MediumTests;
3532

@@ -59,6 +56,7 @@ public void updateDiskUsage() throws Exception {
5956
private Study getMinimalStudyInstance(String projectId, String id) {
6057
return new Study()
6158
.setId(id)
59+
.setInternal(new StudyInternal())
6260
.setFqn(FqnUtils.buildFqn(organizationId, projectId, id));
6361
}
6462

opencga-catalog/src/test/java/org/opencb/opencga/catalog/managers/IndividualManagerTest.java

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,91 @@ public void changeIndividualIdTest2() throws CatalogException {
435435
}
436436
}
437437

438+
@Test
439+
public void fatherMotherOptionsTest() throws CatalogException {
440+
Individual individual = new Individual()
441+
.setId("father")
442+
.setName("father");
443+
catalogManager.getIndividualManager().create(studyFqn, individual, Collections.emptyList(), QueryOptions.empty(), ownerToken);
444+
445+
individual = new Individual()
446+
.setId("mother")
447+
.setName("mother");
448+
catalogManager.getIndividualManager().create(studyFqn, individual, Collections.emptyList(), QueryOptions.empty(), ownerToken);
449+
450+
individual = new Individual().setId("brother")
451+
.setName("brother")
452+
.setFather(new Individual().setId("father"))
453+
.setMother(new Individual().setId("mother"));
454+
catalogManager.getIndividualManager().create(studyFqn, individual, Collections.emptyList(), QueryOptions.empty(), ownerToken);
455+
456+
individual = new Individual().setId("sister")
457+
.setName("sister")
458+
.setFather(new Individual().setId("father"))
459+
.setMother(new Individual().setId("mother"));
460+
catalogManager.getIndividualManager().create(studyFqn, individual, Collections.emptyList(), QueryOptions.empty(), ownerToken);
461+
462+
OpenCGAResult<Individual> result = catalogManager.getIndividualManager().get(studyFqn, Arrays.asList("brother", "sister"),
463+
QueryOptions.empty(), ownerToken);
464+
assertEquals(2, result.getNumResults());
465+
for (Individual tIndividual : result.getResults()) {
466+
assertTrue("brother".equals(tIndividual.getId()) || "sister".equals(tIndividual.getId()));
467+
assertNotNull(tIndividual.getFather());
468+
assertNotNull(tIndividual.getMother());
469+
assertEquals("father", tIndividual.getFather().getId());
470+
assertEquals("father", tIndividual.getFather().getName());
471+
assertEquals("mother", tIndividual.getMother().getId());
472+
assertEquals("mother", tIndividual.getMother().getName());
473+
}
474+
475+
QueryOptions options = new QueryOptions(QueryOptions.INCLUDE, Arrays.asList(IndividualDBAdaptor.QueryParams.NAME.key(),
476+
IndividualDBAdaptor.QueryParams.FATHER.key() + "." + IndividualDBAdaptor.QueryParams.ID.key(),
477+
IndividualDBAdaptor.QueryParams.FATHER.key() + "." + IndividualDBAdaptor.QueryParams.NAME.key(),
478+
IndividualDBAdaptor.QueryParams.MOTHER.key() + "." + IndividualDBAdaptor.QueryParams.ID.key()));
479+
result = catalogManager.getIndividualManager().get(studyFqn, Arrays.asList("brother", "sister"), options, ownerToken);
480+
assertEquals(2, result.getNumResults());
481+
for (Individual tIndividual : result.getResults()) {
482+
assertTrue("brother".equals(tIndividual.getId()) || "sister".equals(tIndividual.getId()));
483+
assertTrue("brother".equals(tIndividual.getName()) || "sister".equals(tIndividual.getName()));
484+
assertNotNull(tIndividual.getFather());
485+
assertNotNull(tIndividual.getMother());
486+
assertEquals("father", tIndividual.getFather().getId());
487+
assertEquals("father", tIndividual.getFather().getName());
488+
assertEquals("mother", tIndividual.getMother().getId());
489+
assertNull(tIndividual.getMother().getName());
490+
}
491+
492+
options = new QueryOptions(QueryOptions.INCLUDE, Arrays.asList(
493+
IndividualDBAdaptor.QueryParams.FATHER.key() + "." + IndividualDBAdaptor.QueryParams.ID.key(),
494+
IndividualDBAdaptor.QueryParams.MOTHER.key() + "." + IndividualDBAdaptor.QueryParams.ID.key(),
495+
IndividualDBAdaptor.QueryParams.MOTHER.key() + "." + IndividualDBAdaptor.QueryParams.NAME.key()));
496+
result = catalogManager.getIndividualManager().get(studyFqn, Arrays.asList("brother", "sister"), options, ownerToken);
497+
assertEquals(2, result.getNumResults());
498+
for (Individual tIndividual : result.getResults()) {
499+
assertTrue("brother".equals(tIndividual.getId()) || "sister".equals(tIndividual.getId()));
500+
assertNull(tIndividual.getName());
501+
assertNotNull(tIndividual.getFather());
502+
assertNotNull(tIndividual.getMother());
503+
assertEquals("father", tIndividual.getFather().getId());
504+
assertNull(tIndividual.getFather().getName());
505+
assertEquals("mother", tIndividual.getMother().getId());
506+
assertEquals("mother", tIndividual.getMother().getName());
507+
}
508+
509+
options = new QueryOptions(QueryOptions.INCLUDE, Collections.singletonList(IndividualDBAdaptor.QueryParams.FATHER.key()
510+
+ "." + IndividualDBAdaptor.QueryParams.ID.key()));
511+
result = catalogManager.getIndividualManager().get(studyFqn, Arrays.asList("brother", "sister"), options, ownerToken);
512+
assertEquals(2, result.getNumResults());
513+
for (Individual tIndividual : result.getResults()) {
514+
assertTrue("brother".equals(tIndividual.getId()) || "sister".equals(tIndividual.getId()));
515+
assertNull(tIndividual.getName());
516+
assertNotNull(tIndividual.getFather());
517+
assertNull(tIndividual.getMother());
518+
assertEquals("father", tIndividual.getFather().getId());
519+
assertNull(tIndividual.getFather().getName());
520+
}
521+
}
522+
438523
@Test
439524
public void testUpdateWithLockedClinicalAnalysis() throws CatalogException {
440525
Sample sample = new Sample().setId("sample1");

0 commit comments

Comments
 (0)