public StudyAclEntry(String member, ObjectMap permissions) { super(member, EnumSet.noneOf(StudyPermissions.class)); EnumSet<StudyPermissions> aux = EnumSet.allOf(StudyPermissions.class); for (StudyPermissions permission : aux) { if (permissions.containsKey(permission.name()) && permissions.getBoolean(permission.name())) { this.permissions.add(permission); } } }
@Override public QueryResult<Long> count(final Query query, final String user, final StudyAclEntry.StudyPermissions studyPermissions) throws CatalogDBException, CatalogAuthorizationException { filterOutDeleted(query); StudyAclEntry.StudyPermissions studyPermission = (studyPermissions == null ? StudyAclEntry.StudyPermissions.VIEW_COHORTS : studyPermissions); // Get the study document Document studyDocument = getStudyDocument(query); // Get the document query needed to check the permissions as well Document queryForAuthorisedEntries = getQueryForAuthorisedEntries(studyDocument, user, studyPermission.name(), studyPermission.getCohortPermission().name(), Entity.COHORT.name()); Bson bson = parseQuery(query, false, queryForAuthorisedEntries); logger.debug("Cohort count: query : {}, dbTime: {}", bson.toBsonDocument(Document.class, MongoClient.getDefaultCodecRegistry())); return cohortCollection.count(bson); }
@Override public QueryResult groupBy(Query query, String field, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { Document studyDocument = getStudyDocument(query); Document queryForAuthorisedEntries; if (containsAnnotationQuery(query)) { queryForAuthorisedEntries = getQueryForAuthorisedEntries(studyDocument, user, StudyAclEntry.StudyPermissions.VIEW_SAMPLE_ANNOTATIONS.name(), SampleAclEntry.SamplePermissions.VIEW_ANNOTATIONS.name(), Entity.SAMPLE.name()); } else { queryForAuthorisedEntries = getQueryForAuthorisedEntries(studyDocument, user, StudyAclEntry.StudyPermissions.VIEW_SAMPLES.name(), SampleAclEntry.SamplePermissions.VIEW.name(), Entity.SAMPLE.name()); } filterOutDeleted(query); Bson bsonQuery = parseQuery(query, false, queryForAuthorisedEntries); return groupBy(sampleCollection, bsonQuery, field, QueryParams.ID.key(), options); }
@Override public DBIterator nativeIterator(Query query, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { QueryOptions queryOptions = options != null ? new QueryOptions(options) : new QueryOptions(); queryOptions.put(NATIVE_QUERY, true); Document studyDocument = getStudyDocument(query); MongoCursor<Document> mongoCursor = getMongoCursor(query, queryOptions, studyDocument, user); Function<Document, Document> iteratorFilter = (d) -> filterAnnotationSets(studyDocument, d, user, StudyAclEntry.StudyPermissions.VIEW_SAMPLE_ANNOTATIONS.name(), SampleAclEntry.SamplePermissions.VIEW_ANNOTATIONS.name()); return new SampleMongoDBIterator<>(mongoCursor, null, iteratorFilter, dbAdaptorFactory.getCatalogIndividualDBAdaptor(), query.getLong(PRIVATE_STUDY_ID), user, options); }
@Override public DBIterator nativeIterator(Query query, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { QueryOptions queryOptions = options != null ? new QueryOptions(options) : new QueryOptions(); queryOptions.put(NATIVE_QUERY, true); Document studyDocument = getStudyDocument(query); MongoCursor<Document> mongoCursor = getMongoCursor(query, queryOptions, studyDocument, user); Function<Document, Document> iteratorFilter = (d) -> filterAnnotationSets(studyDocument, d, user, StudyAclEntry.StudyPermissions.VIEW_FILE_ANNOTATIONS.name(), FileAclEntry.FilePermissions.VIEW_ANNOTATIONS.name()); return new FileMongoDBIterator<>(mongoCursor, null, iteratorFilter, dbAdaptorFactory.getCatalogSampleDBAdaptor(), query.getLong(PRIVATE_STUDY_ID), user, options); }
@Override public DBIterator nativeIterator(Query query, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { QueryOptions queryOptions = options != null ? new QueryOptions(options) : new QueryOptions(); queryOptions.put(NATIVE_QUERY, true); Document studyDocument = getStudyDocument(query); MongoCursor<Document> mongoCursor = getMongoCursor(query, queryOptions, studyDocument, user); Function<Document, Document> iteratorFilter = (d) -> filterAnnotationSets(studyDocument, d, user, StudyAclEntry.StudyPermissions.VIEW_INDIVIDUAL_ANNOTATIONS.name(), IndividualAclEntry.IndividualPermissions.VIEW_ANNOTATIONS.name()); return new IndividualMongoDBIterator(mongoCursor, null, iteratorFilter, dbAdaptorFactory, query.getLong(PRIVATE_STUDY_ID), user, options); }
@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_PANELS.name(), PanelAclEntry.PanelPermissions.VIEW.name(), Entity.PANEL.name()); filterOutDeleted(query); Bson bsonQuery = parseQuery(query, false, queryForAuthorisedEntries); return groupBy(panelCollection, bsonQuery, fields, QueryParams.ID.key(), options); }
@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_JOBS.name(), JobAclEntry.JobPermissions.VIEW.name(), Entity.JOB.name()); filterOutDeleted(query); Bson bsonQuery = parseQuery(query, false, queryForAuthorisedEntries); return groupBy(jobCollection, bsonQuery, fields, QueryParams.NAME.key(), options); }
@Override public QueryResult groupBy(Query query, String field, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { Document studyDocument = getStudyDocument(query); Document queryForAuthorisedEntries = getQueryForAuthorisedEntries(studyDocument, user, StudyAclEntry.StudyPermissions.VIEW_PANELS.name(), PanelAclEntry.PanelPermissions.VIEW.name(), Entity.PANEL.name()); filterOutDeleted(query); Bson bsonQuery = parseQuery(query, false, queryForAuthorisedEntries); return groupBy(panelCollection, bsonQuery, field, QueryParams.ID.key(), options); }
@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 boolean hasStudyPermission(long studyId, String user, StudyAclEntry.StudyPermissions permission) throws CatalogDBException { Query query = new Query(QueryParams.UID.key(), studyId); QueryResult queryResult = nativeGet(query, QueryOptions.empty()); if (queryResult.getNumResults() == 0) { throw new CatalogDBException("Study " + studyId + " not found"); } return checkStudyPermission((Document) queryResult.first(), user, permission.name()); }
@Override public DBIterator<Family> iterator(Query query, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { Document studyDocument = getStudyDocument(query); MongoCursor<Document> mongoCursor = getMongoCursor(query, options, studyDocument, user); Function<Document, Document> iteratorFilter = (d) -> filterAnnotationSets(studyDocument, d, user, StudyAclEntry.StudyPermissions.VIEW_FAMILY_ANNOTATIONS.name(), FamilyAclEntry.FamilyPermissions.VIEW_ANNOTATIONS.name()); return new FamilyMongoDBIterator<>(mongoCursor, familyConverter, iteratorFilter, dbAdaptorFactory.getCatalogIndividualDBAdaptor(), query.getLong(PRIVATE_STUDY_ID), user, options); }
@Override public QueryResult groupBy(Query query, String field, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { Document studyDocument = getStudyDocument(query); Document queryForAuthorisedEntries = getQueryForAuthorisedEntries(studyDocument, user, StudyAclEntry.StudyPermissions.VIEW_JOBS.name(), JobAclEntry.JobPermissions.VIEW.name(), Entity.JOB.name()); filterOutDeleted(query); Bson bsonQuery = parseQuery(query, false, queryForAuthorisedEntries); return groupBy(jobCollection, bsonQuery, field, QueryParams.NAME.key(), options); }
@Override public DBIterator nativeIterator(Query query, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { QueryOptions queryOptions = options != null ? new QueryOptions(options) : new QueryOptions(); queryOptions.put(NATIVE_QUERY, true); Document studyDocument = getStudyDocument(query); MongoCursor<Document> mongoCursor = getMongoCursor(query, queryOptions, studyDocument, user); Function<Document, Document> iteratorFilter = (d) -> filterAnnotationSets(studyDocument, d, user, StudyAclEntry.StudyPermissions.VIEW_COHORT_ANNOTATIONS.name(), CohortAclEntry.CohortPermissions.VIEW_ANNOTATIONS.name()); return new CohortMongoDBIterator(mongoCursor, null, iteratorFilter, dbAdaptorFactory.getCatalogSampleDBAdaptor(), query.getLong(PRIVATE_STUDY_ID), user, options); }
@Override public DBIterator<Cohort> iterator(Query query, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { Document studyDocument = getStudyDocument(query); MongoCursor<Document> mongoCursor = getMongoCursor(query, options, studyDocument, user); Function<Document, Document> iteratorFilter = (d) -> filterAnnotationSets(studyDocument, d, user, StudyAclEntry.StudyPermissions.VIEW_COHORT_ANNOTATIONS.name(), CohortAclEntry.CohortPermissions.VIEW_ANNOTATIONS.name()); return new CohortMongoDBIterator<>(mongoCursor, cohortConverter, iteratorFilter, dbAdaptorFactory.getCatalogSampleDBAdaptor(), query.getLong(PRIVATE_STUDY_ID), user, options); }
@Override public DBIterator<File> iterator(Query query, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { Document studyDocument = getStudyDocument(query); MongoCursor<Document> mongoCursor = getMongoCursor(query, options, studyDocument, user); Function<Document, Document> iteratorFilter = (d) -> filterAnnotationSets(studyDocument, d, user, StudyAclEntry.StudyPermissions.VIEW_FILE_ANNOTATIONS.name(), FileAclEntry.FilePermissions.VIEW_ANNOTATIONS.name()); return new FileMongoDBIterator<>(mongoCursor, fileConverter, iteratorFilter, dbAdaptorFactory.getCatalogSampleDBAdaptor(), query.getLong(PRIVATE_STUDY_ID), user, options); }
@Override public DBIterator<Sample> iterator(Query query, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { Document studyDocument = getStudyDocument(query); MongoCursor<Document> mongoCursor = getMongoCursor(query, options, studyDocument, user); Function<Document, Document> iteratorFilter = (d) -> filterAnnotationSets(studyDocument, d, user, StudyAclEntry.StudyPermissions.VIEW_SAMPLE_ANNOTATIONS.name(), SampleAclEntry.SamplePermissions.VIEW_ANNOTATIONS.name()); return new SampleMongoDBIterator<>(mongoCursor, sampleConverter, iteratorFilter, dbAdaptorFactory.getCatalogIndividualDBAdaptor(), query.getLong(PRIVATE_STUDY_ID), user, options); }
@Override public QueryResult groupBy(Query query, String field, 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, field, QueryParams.ID.key(), options); }
@Override public DBIterator nativeIterator(Query query, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { QueryOptions queryOptions = options != null ? new QueryOptions(options) : new QueryOptions(); queryOptions.put(NATIVE_QUERY, true); Document studyDocument = getStudyDocument(query); MongoCursor<Document> mongoCursor = getMongoCursor(query, queryOptions, studyDocument, user); Function<Document, Document> iteratorFilter = (d) -> filterAnnotationSets(studyDocument, d, user, StudyAclEntry.StudyPermissions.VIEW_FAMILY_ANNOTATIONS.name(), FamilyAclEntry.FamilyPermissions.VIEW_ANNOTATIONS.name()); return new FamilyMongoDBIterator(mongoCursor, null, iteratorFilter, dbAdaptorFactory.getCatalogIndividualDBAdaptor(), query.getLong(PRIVATE_STUDY_ID), user, options); }
@Override public DBIterator<Individual> iterator(Query query, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { Document studyDocument = getStudyDocument(query); MongoCursor<Document> mongoCursor = getMongoCursor(query, options, studyDocument, user); Function<Document, Document> iteratorFilter = (d) -> filterAnnotationSets(studyDocument, d, user, StudyAclEntry.StudyPermissions.VIEW_INDIVIDUAL_ANNOTATIONS.name(), IndividualAclEntry.IndividualPermissions.VIEW_ANNOTATIONS.name()); return new IndividualMongoDBIterator<>(mongoCursor, individualConverter, iteratorFilter, dbAdaptorFactory, query.getLong(PRIVATE_STUDY_ID), user, options); }