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; }
if (individualId != null && individualId == individual1.getUid()) { for (Sample sample : individual1.getSamples()) { currentSamples.put(sample.getUid(), sample.getVersion()); if (individual1.getSamples() != null) { for (Sample sample : individual1.getSamples()) { if (sampleIds.contains(sample.getUid())) { usedSamples.add(sample.getId());
Set<Long> familyProbandSamples = proband.getSamples().stream().map(Sample::getUid).collect(Collectors.toSet()); List<Long> probandSample = clinicalAnalysis.getProband().getSamples().stream().map(Sample::getUid).collect(Collectors.toList()); if (clinicalAnalysis.getFamily() != null && clinicalAnalysis.getFamily().getMembers() != null) { for (Individual member : clinicalAnalysis.getFamily().getMembers()) { if (member.getSamples() != null) { for (Sample sample : member.getSamples()) { sampleMap.put(sample.getId(), sample.getUid()); } else if (clinicalAnalysis.getProband() != null && clinicalAnalysis.getProband().getSamples() != null) { for (Sample sample : clinicalAnalysis.getProband().getSamples()) { sampleMap.put(sample.getId(), sample.getUid());
private void updateToLastSampleVersions(Query query, ObjectMap parameters, QueryOptions queryOptions) throws CatalogDBException { if (parameters.containsKey(QueryParams.SAMPLES.key())) { throw new CatalogDBException("Invalid option: Cannot update to the last version of samples and update to different samples at " + "the same time."); } QueryOptions options = new QueryOptions(QueryOptions.INCLUDE, QueryParams.SAMPLES.key()); QueryResult<Individual> queryResult = get(query, options); if (queryResult.getNumResults() == 0) { throw new CatalogDBException("Individual not found."); } if (queryResult.getNumResults() > 1) { throw new CatalogDBException("Update to the last version of samples in multiple individuals at once not supported."); } Individual individual = queryResult.first(); if (individual.getSamples() == null || individual.getSamples().isEmpty()) { // Nothing to do return; } List<Long> sampleIds = individual.getSamples().stream().map(Sample::getUid).collect(Collectors.toList()); Query sampleQuery = new Query() .append(SampleDBAdaptor.QueryParams.UID.key(), sampleIds); options = new QueryOptions(QueryOptions.INCLUDE, Arrays.asList( SampleDBAdaptor.QueryParams.UID.key(), SampleDBAdaptor.QueryParams.VERSION.key() )); QueryResult<Sample> sampleQueryResult = dbAdaptorFactory.getCatalogSampleDBAdaptor().get(sampleQuery, options); parameters.put(QueryParams.SAMPLES.key(), sampleQueryResult.getResult()); // Add SET action for samples queryOptions.putIfAbsent(Constants.ACTIONS, new HashMap<>()); queryOptions.getMap(Constants.ACTIONS).put(UpdateParams.SAMPLES.key(), SET); }
List<Sample> samples = member.getSamples(); finalMember.setSamples(individualQueryResult.first().getSamples()); if (ListUtils.isNotEmpty(finalMember.getSamples())) { Map<String, Sample> sampleMap = new HashMap<>(); for (Sample sample : finalMember.getSamples()) { sampleMap.put(sample.getId(), sample);
if (clinicalAnalysis.getProband() != null && clinicalAnalysis.getProband().getSamples() != null && !clinicalAnalysis.getProband().getSamples().isEmpty()) { samples.add(getClinicalAnalysis().getProband().getSamples().get(0).getId());
throw new CatalogException("Member " + selectedMember.getId() + " does not belong to family " + family.getId()); fullMember.setSamples(selectedMember.getSamples()); finalMembers.add(getFullValidatedMember(fullMember, study, sessionId));
sampleUids.addAll(individual.getSamples().stream().map(Sample::getUid).collect(Collectors.toSet())) );
assertEquals(2, search.getNumResults()); search.getResult().forEach(i -> { assertEquals(3, i.getSamples().size()); assertTrue(org.apache.commons.lang3.StringUtils.isNotEmpty(i.getSamples().get(0).getCreationDate())); if (i.getId().equals("individual1")) { assertTrue(Arrays.asList("sample1", "sample2", "sample3").containsAll( i.getSamples().stream().map(Sample::getId).collect(Collectors.toList()) )); } else { assertTrue(Arrays.asList("sample4", "sample5", "sample6").containsAll( i.getSamples().stream().map(Sample::getId).collect(Collectors.toList()) )); assertEquals(2, search.getNumResults()); search.getResult().forEach(i -> { assertEquals(3, i.getSamples().size()); assertTrue(org.apache.commons.lang3.StringUtils.isEmpty(i.getSamples().get(0).getCreationDate())); if (i.getId().equals("individual1")) { assertTrue(Arrays.asList("sample1", "sample2", "sample3").containsAll( i.getSamples().stream().map(Sample::getId).collect(Collectors.toList()) )); } else { assertTrue(Arrays.asList("sample4", "sample5", "sample6").containsAll( i.getSamples().stream().map(Sample::getId).collect(Collectors.toList()) )); assertEquals(2, search.getNumResults()); search.getResult().forEach(i -> { assertEquals(3, i.getSamples().size());
@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()))); }
individual.setAnnotationSets(ParamUtils.defaultObject(individual.getAnnotationSets(), Collections.emptyList())); individual.setAttributes(ParamUtils.defaultObject(individual.getAttributes(), Collections.emptyMap())); individual.setSamples(ParamUtils.defaultObject(individual.getSamples(), Collections.emptyList())); individual.setStatus(new Status()); individual.setCreationDate(TimeUtils.getTime()); if (individual.getSamples().size() > 0) { for (Sample sample : individual.getSamples()) { try { MyResource<Sample> resource = catalogManager.getSampleManager().getUid(sample.getId(), studyStr, sessionId);
@Test public void createClinicalAnalysisTest() throws CatalogException { QueryResult<ClinicalAnalysis> dummyEnvironment = createDummyEnvironment(true); assertEquals(1, dummyEnvironment.getNumResults()); assertEquals(0, dummyEnvironment.first().getInterpretations().size()); assertEquals("family", dummyEnvironment.first().getFamily().getId()); assertEquals(5, dummyEnvironment.first().getFamily().getMembers().size()); assertNotNull(dummyEnvironment.first().getProband()); assertEquals("child1", dummyEnvironment.first().getProband().getId()); assertEquals(1, dummyEnvironment.first().getProband().getSamples().size()); assertEquals("sample2", dummyEnvironment.first().getProband().getSamples().get(0).getId()); assertEquals(catalogManager.getSampleManager().getUid("sample2", STUDY, sessionIdUser).getResource().getUid(), dummyEnvironment.first().getProband().getSamples().get(0).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()); }
@Test public void testCreateSampleWithIndividual() throws CatalogException { String individualId = catalogManager.getIndividualManager().create(studyFqn, new Individual().setId("Individual1"), new QueryOptions(), sessionIdUser).first().getId(); String sampleId1 = catalogManager.getSampleManager().create(studyFqn, new Sample() .setId("SAMPLE_1") .setIndividual(new Individual().setId(individualId)), new QueryOptions(), sessionIdUser).first().getId(); QueryResult<Individual> individualQueryResult = catalogManager.getIndividualManager().get(studyFqn, individualId, QueryOptions.empty(), sessionIdUser); assertEquals(sampleId1, individualQueryResult.first().getSamples().get(0).getId()); // Create sample linking to individual based on the individual name String sampleId2 = catalogManager.getSampleManager().create(studyFqn, new Sample() .setId("SAMPLE_2") .setIndividual(new Individual().setId("Individual1")), new QueryOptions(), sessionIdUser).first().getId(); individualQueryResult = catalogManager.getIndividualManager().get(studyFqn, individualId, QueryOptions.empty(), sessionIdUser); assertEquals(2, individualQueryResult.first().getSamples().size()); assertTrue(individualQueryResult.first().getSamples().stream().map(Sample::getId).collect(Collectors.toSet()).containsAll( Arrays.asList(sampleId1, sampleId2) )); }
individualSolrModel.setNumSamples(individual.getSamples() != null ? individual.getSamples().size() : 0);
IndividualAclEntry.IndividualPermissions.UPDATE); List<Sample> sampleList = new ArrayList<>(individual.getSamples().size() - 1); for (Sample sample : individual.getSamples()) { if (sample.getUid() != resource.getResource().getUid()) { sampleList.add(sample); List<Sample> sampleList = new ArrayList<>(individual.getSamples().size() + 1); sampleList.addAll(individual.getSamples()); ObjectMap params = new ObjectMap(IndividualDBAdaptor.QueryParams.SAMPLES.key(), individual.getSamples()); try { individualDBAdaptor.update(individual.getUid(), params, QueryOptions.empty());
if (individualQueryResult.first().getSamples().size() > 0) { throw new CatalogDBException("The individual " + individualId + " cannot be deleted/removed because it is being referenced by " + count + " samples.");
List<Sample> sampleList = new ArrayList<>(individual.getSamples().size() + 1); sampleList.addAll(individual.getSamples()); sampleList.add(queryResult.first());
@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()); }