fixComplexQueryParam(QueryParams.ATTRIBUTES.key(), queryCopy); fixComplexQueryParam(QueryParams.BATTRIBUTES.key(), queryCopy); fixComplexQueryParam(QueryParams.NATTRIBUTES.key(), queryCopy); QueryParams queryParam = QueryParams.getParam(entry.getKey()) != null ? QueryParams.getParam(entry.getKey()) : QueryParams.getParam(key); if (queryParam == null) { if (Constants.ALL_VERSIONS.equals(entry.getKey())) { switch (queryParam) { case UID: addAutoOrQuery(PRIVATE_UID, queryParam.key(), queryCopy, queryParam.type(), andBsonList); break; case STUDY_UID: addAutoOrQuery(PRIVATE_STUDY_ID, queryParam.key(), queryCopy, queryParam.type(), andBsonList); break; case ATTRIBUTES: addAutoOrQuery(entry.getKey(), entry.getKey(), queryCopy, queryParam.type(), andBsonList); break; case BATTRIBUTES: String mongoKey = entry.getKey().replace(QueryParams.BATTRIBUTES.key(), QueryParams.ATTRIBUTES.key()); addAutoOrQuery(mongoKey, entry.getKey(), queryCopy, queryParam.type(), andBsonList); break; case NATTRIBUTES: mongoKey = entry.getKey().replace(QueryParams.NATTRIBUTES.key(), QueryParams.ATTRIBUTES.key()); addAutoOrQuery(mongoKey, entry.getKey(), queryCopy, queryParam.type(), andBsonList); break; case SNAPSHOT: addAutoOrQuery(RELEASE_FROM_VERSION, queryParam.key(), queryCopy, queryParam.type(), andBsonList);
.append(PanelDBAdaptor.QueryParams.UID.key(), panel.getUid()) .append(PanelDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()) .append(Constants.ALL_VERSIONS, true); ObjectMap updateParams = new ObjectMap() .append(PanelDBAdaptor.QueryParams.STATUS_NAME.key(), Status.DELETED) .append(PanelDBAdaptor.QueryParams.ID.key(), panel.getDiseasePanel().getName() + suffixName); QueryResult<Long> update = panelDBAdaptor.update(updateQuery, updateParams, QueryOptions.empty()); if (update.first() > 0) {
.append(QueryParams.ID.key(), parameters.get(QueryParams.ID.key())) .append(QueryParams.STUDY_UID.key(), studyId); QueryResult<Long> count = count(tmpQuery); if (count.getResult().get(0) > 0) { throw new CatalogDBException("Cannot update the " + QueryParams.ID.key() + ". Panel " + parameters.get(QueryParams.ID.key()) + " already exists."); panelParameters.put(QueryParams.STATUS_DATE.key(), TimeUtils.getTime()); panelParameters.put(QueryParams.MODIFICATION_DATE.key(), time); panelParameters.put(PRIVATE_MODIFICATION_DATE, date);
panelQuery.put(PanelDBAdaptor.QueryParams.ID.key(), panelId); panelQuery.put(PanelDBAdaptor.QueryParams.VERSION.key(), panelVersion); QueryResult<Panel> panelResult = catalogManager.getPanelManager().get(studyStr, panelQuery, QueryOptions.empty(), sessionId); Panel diseasePanel = panelResult.first();
.append(QueryParams.VERSION.key(), document.getInteger(QueryParams.VERSION.key())) .append(PRIVATE_UID, document.getLong(PRIVATE_UID)); QueryResult<UpdateResult> updateResult = panelCollection.update(queryDocument, new Document("$set", updateOldVersion), document.put(LAST_OF_VERSION, true); document.put(RELEASE_FROM_VERSION, Arrays.asList(release)); document.put(QueryParams.VERSION.key(), document.getInteger(QueryParams.VERSION.key()) + 1);
@Override public void checkPanelPermission(long studyId, long panelId, String userId, PanelAclEntry.PanelPermissions permission) throws CatalogException { Query query = new Query() .append(PanelDBAdaptor.QueryParams.UID.key(), panelId) .append(PanelDBAdaptor.QueryParams.STUDY_UID.key(), studyId); StudyAclEntry.StudyPermissions studyPermission; switch (permission) { case VIEW: studyPermission = StudyAclEntry.StudyPermissions.VIEW_PANELS; break; case UPDATE: studyPermission = StudyAclEntry.StudyPermissions.WRITE_PANELS; break; case DELETE: studyPermission = StudyAclEntry.StudyPermissions.DELETE_PANELS; break; default: throw new CatalogAuthorizationException("Permission " + permission.toString() + " not found"); } if (checkUserPermission(userId, query, studyPermission, panelDBAdaptor)) { return; } throw CatalogAuthorizationException.deny(userId, permission.toString(), "Panel", panelId, null); }
@Override Panel smartResolutor(long studyUid, String entry, String user) throws CatalogException { Query query = new Query(PanelDBAdaptor.QueryParams.STUDY_UID.key(), studyUid); 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(), user); if (panelQueryResult.getNumResults() == 0) { panelQueryResult = panelDBAdaptor.get(query, QueryOptions.empty()); if (panelQueryResult.getNumResults() == 0) { throw new CatalogException("Panel " + entry + " not found"); } else { throw new CatalogAuthorizationException("Permission denied. " + user + " is not allowed to see the panel " + entry); } } else if (panelQueryResult.getNumResults() > 1) { throw new CatalogException("More than one panel found based on " + entry); } else { return panelQueryResult.first(); } }
@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_PANELS : studyPermissions); // Get the study document Query studyQuery = new Query(StudyDBAdaptor.QueryParams.UID.key(), query.getLong(QueryParams.STUDY_UID.key())); QueryResult queryResult = dbAdaptorFactory.getCatalogStudyDBAdaptor().nativeGet(studyQuery, QueryOptions.empty()); if (queryResult.getNumResults() == 0) { throw new CatalogDBException("Study " + query.getLong(QueryParams.STUDY_UID.key()) + " not found"); } // Get the document query needed to check the permissions as well Document queryForAuthorisedEntries = getQueryForAuthorisedEntries((Document) queryResult.first(), user, studyPermission.name(), studyPermission.getPanelPermission().name(), Entity.PANEL.name()); Bson bson = parseQuery(query, false, queryForAuthorisedEntries); logger.debug("Panel count: query : {}, dbTime: {}", bson.toBsonDocument(Document.class, MongoClient.getDefaultCodecRegistry())); return panelCollection.count(bson); }
@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<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 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 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> 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); }