private Query getIndividualQueryFields(Query query) { Query retQuery = new Query(); for (Map.Entry<String, Object> entry : query.entrySet()) { if (entry.getKey().startsWith("individual.")) { retQuery.append(entry.getKey().replace("individual.", ""), entry.getValue()); } else if (entry.getKey().startsWith("individual")) { retQuery.append(entry.getKey().replace("individual", IndividualDBAdaptor.QueryParams.ID.key()), entry.getValue()); } else if (QueryParams.STUDY_UID.key().equals(entry.getKey())) { retQuery.append(entry.getKey(), entry.getValue()); } } return retQuery; }
private void fixQueryObject(Study study, Query query, String sessionId) throws CatalogException { // The individuals introduced could be either ids or names. As so, we should use the smart resolutor to do this. if (StringUtils.isNotEmpty(query.getString(SampleDBAdaptor.QueryParams.INDIVIDUAL.key()))) { MyResources<Individual> resource = catalogManager.getIndividualManager().getUids( query.getAsStringList(SampleDBAdaptor.QueryParams.INDIVIDUAL.key()), study.getFqn(), sessionId); query.put(SampleDBAdaptor.QueryParams.INDIVIDUAL_UID.key(), resource.getResourceList().stream().map(Individual::getUid) .collect(Collectors.toList())); query.remove(SampleDBAdaptor.QueryParams.INDIVIDUAL.key()); } }
@Override public void updateProjectRelease(long studyId, int release) throws CatalogDBException { Query query = new Query() .append(QueryParams.STUDY_UID.key(), studyId) .append(QueryParams.SNAPSHOT.key(), release - 1); Bson bson = parseQuery(query, false); Document update = new Document() .append("$addToSet", new Document(RELEASE_FROM_VERSION, release)); QueryOptions queryOptions = new QueryOptions("multi", true); sampleCollection.update(bson, update, queryOptions); }
@Test public void testUpdateSampleStats() throws CatalogException { catalogManager.getSampleManager().create(studyFqn, new Sample().setId("HG007"), null, sessionIdUser); QueryResult<Sample> update = catalogManager.getSampleManager().update(studyFqn, "HG007", new ObjectMap (SampleDBAdaptor.QueryParams.STATS.key(), new ObjectMap("one", "two")), new QueryOptions(), sessionIdUser); assertEquals(1, update.first().getStats().size()); assertTrue(update.first().getStats().containsKey("one")); assertEquals("two", update.first().getStats().get("one")); update = catalogManager.getSampleManager().update(studyFqn, "HG007", new ObjectMap(SampleDBAdaptor.QueryParams.STATS.key(), new ObjectMap("two", "three")), new QueryOptions(), sessionIdUser); assertEquals(2, update.first().getStats().size()); }
private Document getStudyDocument(Query query) throws CatalogDBException { // Get the study document Query studyQuery = new Query(StudyDBAdaptor.QueryParams.UID.key(), query.getLong(QueryParams.STUDY_UID.key())); QueryResult<Document> queryResult = dbAdaptorFactory.getCatalogStudyDBAdaptor().nativeGet(studyQuery, QueryOptions.empty()); if (queryResult.getNumResults() == 0) { throw new CatalogDBException("Study " + query.getLong(QueryParams.STUDY_UID.key()) + " not found"); } return queryResult.first(); }
@Test public void parseSampleAnnotationQuery() throws Exception { Query query = CatalogUtils.parseSampleAnnotationQuery("age>20;" + SampleDBAdaptor.QueryParams.PHENOTYPES.key() + "=hpo:123,hpo:456;" + SampleDBAdaptor.QueryParams.ID.key() + "=smith", SampleDBAdaptor.QueryParams::getParam); assertEquals(3, query.size()); assertTrue(query.containsKey(SampleDBAdaptor.QueryParams.ID.key())); assertEquals("=smith", query.getString(SampleDBAdaptor.QueryParams.ID.key())); assertTrue(query.containsKey(SampleDBAdaptor.QueryParams.ANNOTATION.key())); assertEquals("annotation.age>20", query.getString(SampleDBAdaptor.QueryParams.ANNOTATION.key())); assertTrue(query.containsKey(SampleDBAdaptor.QueryParams.PHENOTYPES.key())); assertEquals("=hpo:123,hpo:456", query.getString(SampleDBAdaptor.QueryParams.PHENOTYPES.key())); }
@Test public void testModifySampleBadIndividual() throws CatalogException { String sampleId1 = catalogManager.getSampleManager().create(studyFqn, "SAMPLE_1", "", "", null, false, null, new HashMap<>(), null, new QueryOptions(), sessionIdUser).first().getId(); thrown.expect(CatalogException.class); thrown.expectMessage("not found"); catalogManager.getSampleManager() .update(studyFqn, sampleId1, new ObjectMap(SampleDBAdaptor.QueryParams.INDIVIDUAL.key(), "ind"), null, sessionIdUser); }
@Test public void testDeleteSampleFromIndexedFile() throws Exception { QueryOptions queryOptions = new QueryOptions(VariantStorageEngine.Options.ANNOTATE.key(), false) .append(VariantStorageEngine.Options.CALCULATE_STATS.key(), false); File inputFile = getFile(0); indexFile(inputFile, queryOptions, outputId); Query query = new Query(SampleDBAdaptor.QueryParams.ID.key(), inputFile.getSamples().get(100).getId()); WriteResult delete = catalogManager.getSampleManager().delete(studyFqn, query, null, sessionId); assertEquals(1, delete.getNumMatches()); assertTrue(delete.getFailed().get(0).getMessage().contains("Sample associated to the files")); }
@Override public QueryResult<Sample> getAllInStudy(long studyId, QueryOptions options) throws CatalogDBException { long startTime = startQuery(); Query query = new Query(QueryParams.STUDY_UID.key(), studyId); return endQuery("Get all files", startTime, get(query, options).getResult()); }
@Test public void testDeleteAnnotationSet() throws CatalogException { catalogManager.getSampleManager().removeAnnotationSet(studyFqn, s_1, "annot1", QueryOptions.empty(), sessionIdUser); QueryResult<Sample> sampleQueryResult = catalogManager.getSampleManager().get(studyFqn, s_1, new QueryOptions(QueryOptions.INCLUDE, SampleDBAdaptor.QueryParams.ANNOTATION_SETS.key()), sessionIdUser); assertEquals(0, sampleQueryResult.first().getAnnotationSets().size()); }
@Override public Document convertToStorageType(Sample object, List<VariableSet> variableSetList) { Document document = super.convertToStorageType(object, variableSetList); document.remove(SampleDBAdaptor.QueryParams.ANNOTATION_SETS.key()); document.put("uid", object.getUid()); document.put("studyUid", object.getStudyUid()); document.put("individual", new Document()); return document; }
@Override public QueryResult<Sample> get(long sampleId, QueryOptions options) throws CatalogDBException { checkId(sampleId); Query query = new Query(QueryParams.UID.key(), sampleId).append(QueryParams.STATUS_NAME.key(), "!=" + Status.DELETED) .append(QueryParams.STUDY_UID.key(), getStudyId(sampleId)); return get(query, options); }
@Override public Document convertToStorageType(File file, List<VariableSet> variableSetList) { Document document = super.convertToStorageType(file, variableSetList); document.remove(SampleDBAdaptor.QueryParams.ANNOTATION_SETS.key()); document.put("uid", file.getUid()); document.put("studyUid", file.getStudyUid()); long jobId = file.getJob() != null ? (file.getJob().getUid() == 0 ? -1L : file.getJob().getUid()) : -1L; document.put("job", new Document("uid", jobId)); document.put("samples", convertSamples(file.getSamples())); document.put(FileMongoDBAdaptor.REVERSE_NAME, StringUtils.reverse(file.getName())); return document; }
@Override public QueryResult groupBy(Query query, List<String> fields, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { Document studyDocument = getStudyDocument(query); Document queryForAuthorisedEntries = getQueryForAuthorisedEntries(studyDocument, user, StudyAclEntry.StudyPermissions.VIEW_CLINICAL_ANALYSIS.name(), ClinicalAnalysisAclEntry.ClinicalAnalysisPermissions.VIEW.name(), Entity.CLINICAL_ANALYSIS.name()); filterOutDeleted(query); Bson bsonQuery = parseQuery(query, false, queryForAuthorisedEntries); return groupBy(clinicalCollection, bsonQuery, fields, SampleDBAdaptor.QueryParams.ID.key(), options); }
@Override public QueryResult<Long> restore(Query query, QueryOptions queryOptions) throws CatalogDBException { long startTime = startQuery(); query.put(QueryParams.STATUS_NAME.key(), Status.DELETED); return endQuery("Restore samples", startTime, setStatus(query, Status.READY)); }
@Override public void delete(long id) throws CatalogDBException { Query query = new Query(QueryParams.UID.key(), id); delete(query); }
@Override public DBIterator<Sample> iterator(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); query.append(SampleDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); return sampleDBAdaptor.iterator(query, options, userId); }
@Test public void testModifySample() throws CatalogException { String sampleId1 = catalogManager.getSampleManager() .create(studyFqn, new Sample().setId("SAMPLE_1"), new QueryOptions(), sessionIdUser).first().getId(); String individualId = catalogManager.getIndividualManager().create(studyFqn, new Individual().setId("Individual1"), new QueryOptions(), sessionIdUser).first().getId(); Sample sample = catalogManager.getSampleManager() .update(studyFqn, sampleId1, new ObjectMap(SampleDBAdaptor.QueryParams.INDIVIDUAL.key(), individualId), new QueryOptions("lazy", false), sessionIdUser).first(); assertEquals(individualId, ((Individual) sample.getAttributes().get("individual")).getId()); }
private void fillStudy(String studyId, VariantStudyMetadata studyMetadata) throws CatalogException { QueryOptions options = new QueryOptions(QueryOptions.INCLUDE, SampleDBAdaptor.QueryParams.DESCRIPTION.key()); // Just add file description Study study = catalogManager.getStudyManager().get(studyId, options, sessionId).first(); studyMetadata.setDescription(study.getDescription()); }