@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); panelCollection.update(bson, update, queryOptions); }
@Override public QueryResult<Long> update(Query query, ObjectMap parameters, QueryOptions queryOptions) throws CatalogDBException { long startTime = startQuery(); Document panelParameters = parseAndValidateUpdateParams(parameters, query); if (panelParameters.containsKey(QueryParams.STATUS_NAME.key())) { query.put(Constants.ALL_VERSIONS, true); QueryResult<UpdateResult> update = panelCollection.update(parseQuery(query, false), new Document("$set", panelParameters), new QueryOptions("multi", true)); return endQuery("Update panel", startTime, Arrays.asList(update.getNumTotalResults())); } if (queryOptions.getBoolean(Constants.INCREMENT_VERSION)) { createNewVersion(query); } if (!panelParameters.isEmpty()) { QueryResult<UpdateResult> update = panelCollection.update(parseQuery(query, false), new Document("$set", panelParameters), new QueryOptions("multi", true)); return endQuery("Update panel", startTime, Arrays.asList(update.getNumTotalResults())); } return endQuery("Update panel", startTime, new QueryResult<>()); }
@Override public QueryResult groupBy(@Nullable String studyStr, Query query, List<String> fields, QueryOptions options, String sessionId) throws CatalogException { query = ParamUtils.defaultObject(query, Query::new); options = ParamUtils.defaultObject(options, QueryOptions::new); if (fields == null || fields.size() == 0) { throw new CatalogException("Empty fields parameter."); } String userId = userManager.getUserId(sessionId); Study study = catalogManager.getStudyManager().resolveId(studyStr, userId); // Add study id to the query query.put(PanelDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); QueryResult queryResult = sampleDBAdaptor.groupBy(query, fields, options, userId); return ParamUtils.defaultObject(queryResult, QueryResult::new); }
@Override public QueryResult<Panel> count(String studyStr, Query query, String sessionId) throws CatalogException { query = ParamUtils.defaultObject(query, Query::new); QueryResult<Long> queryResultAux; if (studyStr.equals(INSTALLATION_PANELS)) { query.append(PanelDBAdaptor.QueryParams.STUDY_UID.key(), -1); // Here view permissions won't be checked queryResultAux = panelDBAdaptor.count(query); } else { String userId = userManager.getUserId(sessionId); long studyUid = catalogManager.getStudyManager().resolveId(studyStr, userId).getUid(); query.append(PanelDBAdaptor.QueryParams.STUDY_UID.key(), studyUid); // Here view permissions will be checked queryResultAux = panelDBAdaptor.count(query, userId, StudyAclEntry.StudyPermissions.VIEW_PANELS); } return new QueryResult<>("count", queryResultAux.getDbTime(), 0, queryResultAux.first(), queryResultAux.getWarningMsg(), queryResultAux.getErrorMsg(), Collections.emptyList()); }
@Override public QueryResult rank(String studyStr, Query query, String field, int numResults, boolean asc, String sessionId) throws CatalogException { query = ParamUtils.defaultObject(query, Query::new); ParamUtils.checkObj(field, "field"); ParamUtils.checkObj(sessionId, "sessionId"); String userId = userManager.getUserId(sessionId); Study study = catalogManager.getStudyManager().resolveId(studyStr, userId); authorizationManager.checkStudyPermission(study.getUid(), userId, StudyAclEntry.StudyPermissions.VIEW_PANELS); // TODO: In next release, we will have to check the count parameter from the queryOptions object. boolean count = true; query.append(PanelDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); QueryResult queryResult = null; if (count) { // We do not need to check for permissions when we show the count of files queryResult = panelDBAdaptor.rank(query, field, numResults, asc); } return ParamUtils.defaultObject(queryResult, QueryResult::new); }
@Override public QueryResult<Panel> get(String studyStr, Query query, QueryOptions options, String sessionId) throws CatalogException { String userId = userManager.getUserId(sessionId); long studyUid; if (studyStr.equals(INSTALLATION_PANELS)) { studyUid = -1; } else { studyUid = catalogManager.getStudyManager().resolveId(studyStr, userId).getUid(); } QueryResult<Panel> panelQueryResult = search(studyStr, query, options, sessionId); if (panelQueryResult.getNumResults() == 0 && query.containsKey(PanelDBAdaptor.QueryParams.UID.key())) { List<Long> panelIds = query.getAsLongList(PanelDBAdaptor.QueryParams.UID.key()); for (Long panelId : panelIds) { authorizationManager.checkPanelPermission(studyUid, panelId, userId, PanelAclEntry.PanelPermissions.VIEW); } } return panelQueryResult; }
private Panel getInstallationPanel(String entry) throws CatalogException { Query query = new Query(PanelDBAdaptor.QueryParams.STUDY_UID.key(), -1); if (UUIDUtils.isOpenCGAUUID(entry)) { query.put(PanelDBAdaptor.QueryParams.UUID.key(), entry); } else { query.put(PanelDBAdaptor.QueryParams.ID.key(), entry); } QueryResult<Panel> panelQueryResult = panelDBAdaptor.get(query, QueryOptions.empty()); if (panelQueryResult.getNumResults() == 0) { throw new CatalogException("Panel " + entry + " not found"); } else if (panelQueryResult.getNumResults() > 1) { throw new CatalogException("More than one panel found based on " + entry); } else { return panelQueryResult.first(); } }
@Override public QueryResult<Panel> search(String studyStr, Query query, QueryOptions options, String sessionId) throws CatalogException { query = ParamUtils.defaultObject(query, Query::new); options = ParamUtils.defaultObject(options, QueryOptions::new); if (INSTALLATION_PANELS.equals(studyStr)) { query.append(PanelDBAdaptor.QueryParams.STUDY_UID.key(), -1); // Here view permissions won't be checked return panelDBAdaptor.get(query, options); } else { String userId = userManager.getUserId(sessionId); long studyUid = catalogManager.getStudyManager().resolveId(studyStr, userId).getUid(); query.append(PanelDBAdaptor.QueryParams.STUDY_UID.key(), studyUid); // Here permissions will be checked return panelDBAdaptor.get(query, options, userId); } }
default boolean exists(long panelUid) throws CatalogDBException { return count(new Query(QueryParams.UID.key(), panelUid)).first() > 0; }
@Override public DBIterator<Panel> 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(PanelDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); return panelDBAdaptor.iterator(query, options, userId); }
@Override public QueryResult rank(Query query, String field, int numResults, boolean asc) throws CatalogDBException { filterOutDeleted(query); Bson bsonQuery = parseQuery(query, false); return rank(panelCollection, bsonQuery, field, QueryParams.ID.key(), numResults, asc); }
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(); }
@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, String field, QueryOptions options) throws CatalogDBException { filterOutDeleted(query); Bson bsonQuery = parseQuery(query, false); return groupBy(panelCollection, bsonQuery, field, QueryParams.ID.key(), options); }
@Override public QueryResult<Panel> get(long panelUid, QueryOptions options) throws CatalogDBException { checkUid(panelUid); Query query = new Query(QueryParams.UID.key(), panelUid).append(QueryParams.STATUS_NAME.key(), "!=" + Status.DELETED) .append(QueryParams.STUDY_UID.key(), getStudyId(panelUid)); return get(query, 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) throws CatalogDBException { filterOutDeleted(query); Bson bsonQuery = parseQuery(query, false); return groupBy(panelCollection, bsonQuery, fields, QueryParams.ID.key(), options); }
@Override public QueryResult<Panel> update(long id, ObjectMap parameters, QueryOptions queryOptions) throws CatalogDBException { long startTime = startQuery(); QueryResult<Long> update = update(new Query(QueryParams.UID.key(), id), parameters, queryOptions); if (update.getNumTotalResults() != 1) { throw new CatalogDBException("Could not update panel"); } Query query = new Query() .append(QueryParams.UID.key(), id) .append(QueryParams.STATUS_NAME.key(), "!=EMPTY"); return endQuery("Update panel", startTime, get(query, queryOptions)); }
@Override public void delete(long id) throws CatalogDBException { Query query = new Query(QueryParams.UID.key(), id); delete(query); }