public List<QueryResult<IndividualAclEntry>> getAcls(String studyStr, List<String> individualList, String member, boolean silent, String sessionId) throws CatalogException { List<QueryResult<IndividualAclEntry>> individualAclList = new ArrayList<>(individualList.size()); for (String individual : individualList) { try { MyResource<Individual> resource = getUid(individual, studyStr, sessionId); QueryResult<IndividualAclEntry> allIndividualAcls; if (StringUtils.isNotEmpty(member)) { allIndividualAcls = authorizationManager.getIndividualAcl(resource.getStudy().getUid(), resource.getResource().getUid(), resource.getUser(), member); } else { allIndividualAcls = authorizationManager.getAllIndividualAcls(resource.getStudy().getUid(), resource.getResource().getUid(), resource.getUser()); } allIndividualAcls.setId(individual); individualAclList.add(allIndividualAcls); } catch (CatalogException e) { if (silent) { individualAclList.add(new QueryResult<>(individual, 0, 0, 0, "", e.toString(), new ArrayList<>(0))); } else { throw e; } } } return individualAclList; }
@Override public Document convertToStorageType(Individual object, List<VariableSet> variableSetList) { Document document = super.convertToStorageType(object, variableSetList); document.remove(IndividualDBAdaptor.QueryParams.ANNOTATION_SETS.key()); document.put("uid", object.getUid()); document.put("studyUid", object.getStudyUid()); Document father = (Document) document.get("father"); long fatherId = father != null ? (father.getInteger("uid") == 0 ? -1L : father.getInteger("uid").longValue()) : -1L; document.put("father", fatherId > 0 ? new Document("uid", fatherId) : new Document()); Document mother = (Document) document.get("mother"); long motherId = mother != null ? (mother.getInteger("uid") == 0 ? -1L : mother.getInteger("uid").longValue()) : -1L; document.put("mother", motherId > 0 ? new Document("uid", motherId) : new Document()); validateSamplesToUpdate(document); return document; }
/*** * Checks whether the sample id corresponds to any Individual and if it is parent of any other individual. * @param id Sample id that will be checked. * @throws CatalogDBException when the sample is parent of other individual. */ @Deprecated public void checkSampleIsParentOfFamily(int id) throws CatalogDBException { Sample sample = get(id, new QueryOptions()).first(); if (sample.getIndividual().getUid() > 0) { Query query = new Query(IndividualDBAdaptor.QueryParams.FATHER_UID.key(), sample.getIndividual().getUid()) .append(IndividualDBAdaptor.QueryParams.MOTHER_UID.key(), sample.getIndividual().getUid()); Long count = dbAdaptorFactory.getCatalogIndividualDBAdaptor().count(query).first(); if (count > 0) { throw CatalogDBException.sampleIdIsParentOfOtherIndividual(id); } } }
QueryResult<Individual> unsafeUpdate(Study study, Individual individual, ObjectMap parameters, QueryOptions options, String userId) throws CatalogException { try { ParamUtils.checkAllParametersExist(parameters.keySet().iterator(), (a) -> IndividualDBAdaptor.UpdateParams.getParam(a) != null); } catch (CatalogParameterException e) { throw new CatalogException("Could not update: " + e.getMessage(), e); } MyResource<Individual> resource = new MyResource<>(userId, study, individual); List<VariableSet> variableSetList = checkUpdateAnnotationsAndExtractVariableSets(resource, parameters, options, individualDBAdaptor); if (options.getBoolean(Constants.INCREMENT_VERSION)) { // We do need to get the current release to properly create a new version options.put(Constants.CURRENT_RELEASE, studyManager.getCurrentRelease(study, userId)); } QueryResult<Individual> queryResult = individualDBAdaptor.update(individual.getUid(), parameters, variableSetList, options); auditManager.recordUpdate(AuditRecord.Resource.individual, individual.getUid(), userId, parameters, null, null); return queryResult; }
@Test public void testModifyIndividualNegativeFatherId() 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(); Individual individual = catalogIndividualDBAdaptor.update(individualId, new ObjectMap(IndividualDBAdaptor.QueryParams.FATHER_UID.key(), -1), QueryOptions.empty()).first(); assertEquals(-1, individual.getFather().getUid()); }
@Ignore @Test public void testModifyIndividualExistingName() 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(); catalogIndividualDBAdaptor.insert(studyId, new Individual("in2", "in2", IndividualProperty.Sex.UNKNOWN, "", null, 1, Collections.emptyList(), null), null).first().getUid(); thrown.expect(CatalogDBException.class); catalogIndividualDBAdaptor.update(individualId, new ObjectMap("name", "in2"), QueryOptions.empty()); }
private void createMissingIndividual(Individual individual, Map<String, Individual> individualMap, Study study, String sessionId) throws CatalogException { if (individual == null || individual.getUid() > 0) { return; } if (individual.getFather() != null && StringUtils.isNotEmpty(individual.getFather().getId())) { createMissingIndividual(individual.getFather(), individualMap, study, sessionId); individual.setFather(individualMap.get(individual.getFather().getId())); } if (individual.getMother() != null && StringUtils.isNotEmpty(individual.getMother().getId())) { createMissingIndividual(individual.getMother(), individualMap, study, sessionId); individual.setMother(individualMap.get(individual.getMother().getId())); } QueryResult<Individual> individualQueryResult = catalogManager.getIndividualManager().create(study.getFqn(), individual, QueryOptions.empty(), sessionId); if (individualQueryResult.getNumResults() == 0) { throw new CatalogException("Unexpected error when trying to create individual " + individual.getId()); } individualMap.put(individual.getId(), individualQueryResult.first()); }
@Test public void testModifyIndividualBadGender() 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(); thrown.expect(CatalogDBException.class); catalogIndividualDBAdaptor.update(individualId, new ObjectMap("sex", "bad sex"), QueryOptions.empty()); }
@Test public void testModifyIndividualBadFatherId() 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(); thrown.expect(CatalogDBException.class); catalogIndividualDBAdaptor.update(individualId, new ObjectMap("fatherId", 4000), QueryOptions.empty()); }
@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); }
proband.setUid(resource.getResource().getUid());
@Test public void testNativeGet() throws Exception { long studyId = user4.getProjects().get(0).getStudies().get(0).getUid(); Individual individual = new Individual("in1", "An Individual", IndividualProperty.Sex.MALE, "", new Individual .Population(), 1, Collections.emptyList(), null); individual = catalogIndividualDBAdaptor.insert(studyId, individual, null).first(); Individual individual2 = new Individual("in2", "Another Individual", IndividualProperty.Sex.FEMALE, "", new Individual .Population(), 1, Collections.emptyList(), null); individual2 = catalogIndividualDBAdaptor.insert(studyId, individual2, null).first(); List<QueryResult> queryResults = catalogIndividualDBAdaptor.nativeGet(Arrays.asList( new Query(IndividualDBAdaptor.QueryParams.UID.key(), individual.getUid()), new Query(IndividualDBAdaptor.QueryParams.UID.key(), individual2.getUid())), new QueryOptions()); assertEquals(2, queryResults.size()); // Individual List<Document> results = queryResults.get(0).getResult(); assertEquals(1, results.size()); assertEquals("MALE", results.get(0).get("sex")); // Individual2 results = queryResults.get(1).getResult(); assertEquals(1, results.size()); assertEquals("FEMALE", results.get(0).get("sex")); } }
@Test public void testGetStudyIdByIndividualId() throws Exception { long studyId = user3.getProjects().get(0).getStudies().get(0).getUid(); long individualId = catalogIndividualDBAdaptor.insert(studyId, new Individual().setStatus(new Status()), null).first().getUid(); long studyIdByIndividualId = catalogIndividualDBAdaptor.getStudyId(individualId); assertEquals(studyId, studyIdByIndividualId); }
@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()); }
@Test public void testAvoidDuplicatedSamples() throws CatalogDBException { long studyId = user3.getProjects().get(0).getStudies().get(0).getUid(); Sample sample1 = catalogDBAdaptor.getCatalogSampleDBAdaptor().insert(studyId, new Sample().setId("sample1").setStatus(new Status()), QueryOptions.empty()).first(); Sample sample2 = catalogDBAdaptor.getCatalogSampleDBAdaptor().insert(studyId, new Sample().setId("sample2").setStatus(new Status()), QueryOptions.empty()).first(); Individual individual = new Individual() .setName("in2") .setStatus(new Status()) .setSamples(Arrays.asList(sample1, sample1, sample2, new Sample().setUid(-1).setStatus(new Status()))); Individual individualStored = catalogIndividualDBAdaptor.insert(studyId, individual, null).first(); assertEquals(2, individualStored.getSamples().size()); assertTrue(individualStored.getSamples().stream().map(Sample::getUid).collect(Collectors.toSet()).containsAll(Arrays.asList( sample1.getUid(), sample2.getUid()))); // Update samples ObjectMap params = new ObjectMap(IndividualDBAdaptor.QueryParams.SAMPLES.key(), individual.getSamples()); Individual update = catalogIndividualDBAdaptor.update(individualStored.getUid(), params, QueryOptions.empty()).first(); assertEquals(2, update.getSamples().size()); assertTrue(update.getSamples().stream().map(Sample::getUid).collect(Collectors.toSet()).containsAll(Arrays.asList(sample1.getUid(), sample2.getUid()))); }
@Test public void createClinicalAnalysisNoFamilyTest() throws CatalogException { QueryResult<ClinicalAnalysis> dummyEnvironment = createDummyEnvironment(false); assertEquals(1, dummyEnvironment.getNumResults()); assertEquals(0, dummyEnvironment.first().getInterpretations().size()); assertEquals(catalogManager.getIndividualManager().getUid("child1", STUDY, sessionIdUser).getResource().getUid(), dummyEnvironment.first().getProband().getUid()); assertEquals(1, dummyEnvironment.first().getProband().getSamples().size()); assertEquals(catalogManager.getSampleManager().getUid("sample2", STUDY, sessionIdUser).getResource().getUid(), dummyEnvironment.first().getProband().getSamples().get(0).getUid()); }
private void validateFamilyAndProband(ClinicalAnalysis clinicalAnalysis, Study study, String sessionId) throws CatalogException { if (clinicalAnalysis.getFamily() != null && StringUtils.isNotEmpty(clinicalAnalysis.getFamily().getId())) { MyResource<Family> familyResource = catalogManager.getFamilyManager().getUid(clinicalAnalysis.getFamily().getId(), study.getFqn(), sessionId); clinicalAnalysis.setFamily(familyResource.getResource()); // Check the proband is an actual member of the family Query query = new Query() .append(FamilyDBAdaptor.QueryParams.UID.key(), familyResource.getResource().getUid()) .append(FamilyDBAdaptor.QueryParams.MEMBER_UID.key(), clinicalAnalysis.getProband().getUid()); QueryResult<Family> count = catalogManager.getFamilyManager().count(study.getFqn(), query, sessionId); if (count.getNumTotalResults() == 0) { throw new CatalogException("The member " + clinicalAnalysis.getProband().getId() + " does not belong to the family " + clinicalAnalysis.getFamily().getId()); } } }
@Test public void updateSubjectsNoFamilyTest() throws CatalogException { createDummyEnvironment(false); ObjectMap params = new ObjectMap(ClinicalAnalysisDBAdaptor.QueryParams.PROBAND.key(), new Individual().setId("child1").setSamples(Arrays.asList(new Sample().setId("sample2")))); QueryResult<ClinicalAnalysis> updateResult = catalogManager.getClinicalAnalysisManager().update(STUDY, "analysis", params, QueryOptions.empty(), sessionIdUser); assertEquals(1, updateResult.getNumResults()); assertEquals(0, updateResult.first().getInterpretations().size()); assertEquals(catalogManager.getIndividualManager().getUid("child1", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getProband().getUid()); assertEquals(1, updateResult.first().getProband().getSamples().size()); assertEquals(catalogManager.getSampleManager().getUid("sample2", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getProband().getSamples().get(0).getUid()); }
@Test public void updateSubjectsAndFamilyTest() throws CatalogException { createDummyEnvironment(false); ObjectMap params = new ObjectMap() .append(ClinicalAnalysisDBAdaptor.QueryParams.PROBAND.key(), new Individual().setId("child1").setSamples(Arrays.asList(new Sample().setId("sample2")))) .append(ClinicalAnalysisDBAdaptor.QueryParams.FAMILY.key(), new Family().setId("family")); QueryResult<ClinicalAnalysis> updateResult = catalogManager.getClinicalAnalysisManager().update(STUDY, "analysis", params, QueryOptions.empty(), sessionIdUser); assertEquals(1, updateResult.getNumResults()); assertEquals(0, updateResult.first().getInterpretations().size()); assertEquals(catalogManager.getFamilyManager().getUid("family", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getFamily().getUid()); assertEquals(catalogManager.getIndividualManager().getUid("child1", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getProband().getUid()); assertEquals(1, updateResult.first().getProband().getSamples().size()); assertEquals(catalogManager.getSampleManager().getUid("sample2", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getProband().getSamples().get(0).getUid()); }