private List<String> getSamplesFromIndividuals(MyResources<Individual> resource) throws CatalogDBException { // Look for all the samples belonging to the individual Query query = new Query() .append(IndividualDBAdaptor.QueryParams.STUDY_UID.key(), resource.getStudy().getUid()) .append(IndividualDBAdaptor.QueryParams.UID.key(), resource.getResourceList().stream().map(Individual::getUid) .collect(Collectors.toList())); QueryResult<Individual> individualQueryResult = individualDBAdaptor.get(query, new QueryOptions(QueryOptions.INCLUDE, IndividualDBAdaptor.QueryParams.SAMPLES.key())); List<String> sampleIds = new ArrayList<>(); for (Individual individual : individualQueryResult.getResult()) { sampleIds.addAll(individual.getSamples().stream().map(Sample::getId).collect(Collectors.toList())); } return sampleIds; }
QueryOptions options = new QueryOptions(QueryOptions.INCLUDE, Arrays.asList( IndividualDBAdaptor.QueryParams.SAMPLES.key(), IndividualDBAdaptor.QueryParams.UID.key())); QueryResult<Individual> queryResult = individualDBAdaptor.get(query, options); if (queryResult.getNumResults() > 0) {
@Test public void testGetIndividualNoExists() throws Exception { long studyId = user3.getProjects().get(0).getStudies().get(0).getUid(); Individual individual = new Individual("in1", "An Individual", IndividualProperty.Sex.MALE, "", new Individual .Population(), 1, Collections.emptyList(), null); catalogIndividualDBAdaptor.insert(studyId, individual, null).first(); catalogIndividualDBAdaptor.get(individual.getUid(), null).first(); thrown.expect(CatalogDBException.class); //Id not found catalogIndividualDBAdaptor.get(9999, null); }
@Test public void testModifyIndividual() throws Exception { long studyId = user3.getProjects().get(0).getStudies().get(0).getUid(); long individualId = catalogIndividualDBAdaptor.insert(studyId, new Individual("in1", "in1", IndividualProperty.Sex .UNKNOWN, "", null, 1, Collections.emptyList(), null), null).first().getUid(); ObjectMap params = new ObjectMap("sex", "MALE"); catalogIndividualDBAdaptor.update(individualId, params, QueryOptions.empty()); Individual individual = catalogIndividualDBAdaptor.get(individualId, null).first(); assertEquals(IndividualProperty.Sex.MALE, individual.getSex()); }
@Test public void testGetIndividual() throws Exception { long studyId = user3.getProjects().get(0).getStudies().get(0).getUid(); Individual individual = new Individual("an_individual", "An Individual", IndividualProperty.Sex.MALE, "", new Individual.Population(), 1, Collections.emptyList(), null); individual = catalogIndividualDBAdaptor.insert(studyId, individual, null).first(); Individual individual2 = catalogIndividualDBAdaptor.get(individual.getUid(), null).first(); assertEquals(individual.toString(), individual2.toString()); }
.append(IndividualDBAdaptor.QueryParams.SAMPLE_UIDS.key(), sample.getUid()) .append(IndividualDBAdaptor.QueryParams.STUDY_UID.key(), studyId); QueryResult<Individual> individualQueryResult = individualDBAdaptor.get(query, new QueryOptions(QueryOptions.INCLUDE, Arrays.asList(IndividualDBAdaptor.QueryParams.UID.key(), IndividualDBAdaptor.QueryParams.ID.key()))); if (individualQueryResult.getNumResults() > 0) {
@Override Individual smartResolutor(long studyUid, String entry, String user) throws CatalogException { Query query = new Query() .append(IndividualDBAdaptor.QueryParams.STUDY_UID.key(), studyUid); if (UUIDUtils.isOpenCGAUUID(entry)) { query.put(IndividualDBAdaptor.QueryParams.UUID.key(), entry); } else { query.put(IndividualDBAdaptor.QueryParams.ID.key(), entry); } QueryOptions options = new QueryOptions(QueryOptions.INCLUDE, Arrays.asList( IndividualDBAdaptor.QueryParams.UUID.key(), IndividualDBAdaptor.QueryParams.UID.key(), IndividualDBAdaptor.QueryParams.STUDY_UID.key(), IndividualDBAdaptor.QueryParams.ID.key(), IndividualDBAdaptor.QueryParams.RELEASE.key(), IndividualDBAdaptor.QueryParams.VERSION.key(), IndividualDBAdaptor.QueryParams.STATUS.key(), IndividualDBAdaptor.QueryParams.FATHER.key(), IndividualDBAdaptor.QueryParams.MOTHER.key(), IndividualDBAdaptor.QueryParams.MULTIPLES.key(), IndividualDBAdaptor.QueryParams.SEX.key())); QueryResult<Individual> individualQueryResult = individualDBAdaptor.get(query, options, user); if (individualQueryResult.getNumResults() == 0) { individualQueryResult = individualDBAdaptor.get(query, options); if (individualQueryResult.getNumResults() == 0) { throw new CatalogException("Individual " + entry + " not found"); } else { throw new CatalogAuthorizationException("Permission denied. " + user + " is not allowed to see the individual " + entry); } } else if (individualQueryResult.getNumResults() > 1) { throw new CatalogException("More than one individual found based on " + entry); } else { return individualQueryResult.first(); } }
.append(IndividualDBAdaptor.QueryParams.ID.key(), StringUtils.join(siblingList, ",")); QueryOptions queryOptions = new QueryOptions(QueryOptions.INCLUDE, IndividualDBAdaptor.QueryParams.UID.key()); QueryResult<Individual> individualQueryResult = individualDBAdaptor.get(query, queryOptions); if (individualQueryResult.getNumResults() < siblingList.size()) { int missing = siblingList.size() - individualQueryResult.getNumResults();
@Override public QueryResult<Individual> search(String studyStr, Query query, QueryOptions options, String sessionId) throws CatalogException { query = ParamUtils.defaultObject(query, Query::new); options = ParamUtils.defaultObject(options, QueryOptions::new); String userId = userManager.getUserId(sessionId); Study study = catalogManager.getStudyManager().resolveId(studyStr, userId, new QueryOptions(QueryOptions.INCLUDE, StudyDBAdaptor.QueryParams.VARIABLE_SET.key())); Query finalQuery = new Query(query); try { fixQuery(study, finalQuery, sessionId); } catch (CatalogException e) { // Any of mother, father or sample ids or names do not exist or were not found return new QueryResult<>("Get"); } // Fix query if it contains any annotation AnnotationUtils.fixQueryAnnotationSearch(study, finalQuery); AnnotationUtils.fixQueryOptionAnnotation(options); finalQuery.append(IndividualDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); QueryResult<Individual> queryResult = individualDBAdaptor.get(finalQuery, options, userId); // authorizationManager.filterIndividuals(userId, studyId, queryResultAux.getResult()); return queryResult; }
.append(IndividualDBAdaptor.QueryParams.SAMPLE_UIDS.key(), sample.getUid()) .append(IndividualDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); QueryResult<Individual> individualQueryResult = individualDBAdaptor.get(auxQuery, QueryOptions.empty()); if (individualQueryResult.getNumResults() > 0) { if (individualQueryResult.getNumResults() > 1) {
@Test public void testGetAllIndividuals() throws Exception { long studyId = user3.getProjects().get(0).getStudies().get(0).getUid(); catalogIndividualDBAdaptor.insert(studyId, new Individual("ind_1", "ind_1", IndividualProperty.Sex.MALE, "", new Individual.Population(), 1, Collections.emptyList(), null), null); catalogIndividualDBAdaptor.insert(studyId, new Individual("ind_2", "ind_2", IndividualProperty.Sex.FEMALE, "", new Individual.Population(), 1, Collections.emptyList(), null), null); Individual father = catalogIndividualDBAdaptor.insert(studyId, new Individual("ind_3", "ind_3", IndividualProperty.Sex .MALE, "", new Individual.Population(), 1, Collections.emptyList(), null), null).first(); Individual mother = catalogIndividualDBAdaptor.insert(studyId, new Individual("ind_4", "ind_4", IndividualProperty.Sex .FEMALE, "", new Individual.Population(), 1, Collections.emptyList(), null), null).first(); catalogIndividualDBAdaptor.insert(studyId, new Individual("ind_5", "ind_5", father, mother, null, null, IndividualProperty.Sex.MALE, IndividualProperty.KaryotypicSex.XY, "", new Individual.Population(), null, null, null, null, true, 1, Collections.emptyList(), null, null), null); catalogIndividualDBAdaptor.insert(studyId, new Individual("ind_6", "ind_6", IndividualProperty.Sex.FEMALE, "", new Individual.Population(), 1, Collections.emptyList(), null), null); QueryResult<Individual> result; result = catalogIndividualDBAdaptor.get(new Query(IndividualDBAdaptor.QueryParams.ID.key(), "~ind_[1-3]").append(IndividualDBAdaptor.QueryParams.STUDY_UID.key(), studyId), new QueryOptions()); assertEquals(3, result.getNumResults()); result = catalogIndividualDBAdaptor.get(new Query(IndividualDBAdaptor.QueryParams.SEX.key(), IndividualProperty.Sex.FEMALE).append(IndividualDBAdaptor.QueryParams.STUDY_UID.key(), studyId), new QueryOptions()); assertEquals(3, result.getNumResults()); result = catalogIndividualDBAdaptor.get(new Query(IndividualDBAdaptor.QueryParams.FATHER_UID.key(), ">0") .append(IndividualDBAdaptor.QueryParams.STUDY_UID.key(), studyId), new QueryOptions()); assertEquals(1, result.getNumResults()); }
@Override public QueryResult<Individual> get(String studyStr, Query query, QueryOptions options, String sessionId) throws CatalogException { query = ParamUtils.defaultObject(query, Query::new); options = ParamUtils.defaultObject(options, QueryOptions::new); String userId = userManager.getUserId(sessionId); Study study = studyManager.resolveId(studyStr, userId, new QueryOptions(QueryOptions.INCLUDE, StudyDBAdaptor.QueryParams.VARIABLE_SET.key())); // Fix query if it contains any annotation AnnotationUtils.fixQueryAnnotationSearch(study, query); AnnotationUtils.fixQueryOptionAnnotation(options); fixQuery(study, query, sessionId); query.append(IndividualDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); QueryResult<Individual> individualQueryResult = individualDBAdaptor.get(query, options, userId); if (individualQueryResult.getNumResults() == 0 && query.containsKey(IndividualDBAdaptor.QueryParams.UID.key())) { List<Long> idList = query.getAsLongList(IndividualDBAdaptor.QueryParams.UID.key()); for (Long myId : idList) { authorizationManager.checkIndividualPermission(study.getUid(), myId, userId, IndividualAclEntry.IndividualPermissions.VIEW); } } return individualQueryResult; }
QueryOptions indOptions = new QueryOptions(QueryOptions.INCLUDE, Arrays.asList( IndividualDBAdaptor.QueryParams.UID.key(), IndividualDBAdaptor.QueryParams.SAMPLES.key())); QueryResult<Individual> individualQueryResult = individualDBAdaptor.get(query, indOptions);