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()) || Constants.PRIVATE_ANNOTATION_PARAM_TYPES.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 PHENOTYPES: case DISORDERS:
finalQuery.append(FamilyDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); .append(FamilyDBAdaptor.QueryParams.MEMBER_UID.key(), individual.getUid()) .append(FamilyDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); QueryResult<Family> familyQueryResult = familyDBAdaptor.get(tmpQuery, new QueryOptions(QueryOptions.INCLUDE, Arrays.asList(FamilyDBAdaptor.QueryParams.UID.key(), FamilyDBAdaptor.QueryParams.ID.key(), FamilyDBAdaptor.QueryParams.MEMBERS.key()))); .append(FamilyDBAdaptor.QueryParams.UID.key(), family.getUid()) .append(FamilyDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()) .append(Constants.ALL_VERSIONS, true); ObjectMap familyUpdate = new ObjectMap()
if (parameters.containsKey(FamilyDBAdaptor.QueryParams.ANNOTATION_SETS.key())) { authorizationManager.checkFamilyPermission(resource.getStudy().getUid(), resource.getResource().getUid(), resource.getUser(), FamilyAclEntry.FamilyPermissions.WRITE_ANNOTATIONS); if ((parameters.size() == 1 && !parameters.containsKey(FamilyDBAdaptor.QueryParams.ANNOTATION_SETS.key())) || parameters.size() > 1) { authorizationManager.checkFamilyPermission(resource.getStudy().getUid(), resource.getResource().getUid(), resource.getUser(), .append(FamilyDBAdaptor.QueryParams.UID.key(), familyId) .append(FamilyDBAdaptor.QueryParams.STUDY_UID.key(), resource.getStudy().getUid()); QueryResult<Family> familyQueryResult = familyDBAdaptor.get(query, new QueryOptions()); if (familyQueryResult.getNumResults() == 0) { if (parameters.containsKey(FamilyDBAdaptor.QueryParams.ID.key())) { ParamUtils.checkAlias(parameters.getString(FamilyDBAdaptor.QueryParams.ID.key()), FamilyDBAdaptor.QueryParams.ID.key()); if (parameters.containsKey(FamilyDBAdaptor.QueryParams.PHENOTYPES.key()) || parameters.containsKey(FamilyDBAdaptor.QueryParams.DISORDERS.key()) || parameters.containsKey(FamilyDBAdaptor.QueryParams.MEMBERS.key())) { if (parameters.containsKey(FamilyDBAdaptor.QueryParams.MEMBERS.key())) { parameters.put(FamilyDBAdaptor.QueryParams.MEMBERS.key(), tmpParams.get(FamilyDBAdaptor.QueryParams.MEMBERS.key())); if (parameters.containsKey(FamilyDBAdaptor.QueryParams.PHENOTYPES.key())) { parameters.put(FamilyDBAdaptor.QueryParams.PHENOTYPES.key(), tmpParams.get(FamilyDBAdaptor.QueryParams.PHENOTYPES.key()));
Object members = familyDocument.get(FamilyMongoDBAdaptor.QueryParams.MEMBERS.key()); if (members != null && !options.getBoolean(NATIVE_QUERY)) { List<Document> memberList = (List<Document>) members; if (!memberList.isEmpty()) { memberList.forEach(s -> { String uid = String.valueOf(s.get(FamilyDBAdaptor.QueryParams.UID.key())); String version = String.valueOf(s.get(FamilyDBAdaptor.QueryParams.VERSION.key())); memberUidVersionMap.put(String.valueOf(member.get(FamilyDBAdaptor.QueryParams.UID.key())) + "__" + String.valueOf(member.get(FamilyDBAdaptor.QueryParams.VERSION.key())), member); memberUidMap.put(String.valueOf(member.get(FamilyDBAdaptor.QueryParams.UID.key())), member); List<Document> members = (List<Document>) family.get(FamilyMongoDBAdaptor.QueryParams.MEMBERS.key()); String uid = String.valueOf(s.get(FamilyDBAdaptor.QueryParams.UID.key())); String version = String.valueOf(s.get(FamilyDBAdaptor.QueryParams.VERSION.key())); String key = uid + "__" + version; family.put(FamilyMongoDBAdaptor.QueryParams.MEMBERS.key(), tmpMemberList); });
finalQuery.append(FamilyDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); .append(FamilyDBAdaptor.QueryParams.UID.key(), family.getUid()) .append(FamilyDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()) .append(Constants.ALL_VERSIONS, true); ObjectMap updateParams = new ObjectMap() .append(FamilyDBAdaptor.QueryParams.STATUS_NAME.key(), Status.DELETED) .append(FamilyDBAdaptor.QueryParams.ID.key(), family.getName() + suffixName); QueryResult<Long> update = familyDBAdaptor.update(updateQuery, updateParams, QueryOptions.empty()); if (update.first() > 0) {
study = studyManager.resolveId(studyStr, userId); finalQuery.append(FamilyDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid());
List<String> includeList = new ArrayList<>(); for (String include : currentIncludeList) { if (include.startsWith(FamilyDBAdaptor.QueryParams.MEMBERS.key() + ".")) { includeList.add(include.replace(FamilyDBAdaptor.QueryParams.MEMBERS.key() + ".", "")); List<String> excludeList = new ArrayList<>(); for (String exclude : currentExcludeList) { if (exclude.startsWith(FamilyDBAdaptor.QueryParams.MEMBERS.key() + ".")) { String replace = exclude.replace(FamilyDBAdaptor.QueryParams.MEMBERS.key() + ".", ""); if (!FamilyDBAdaptor.QueryParams.UID.key().equals(replace) && !FamilyDBAdaptor.QueryParams.VERSION.key().equals(replace)) { excludeList.add(replace);
final String[] acceptedParams = {QueryParams.NAME.key(), QueryParams.DESCRIPTION.key()}; filterStringParams(parameters, familyParameters, acceptedParams); final String[] acceptedMapParams = {QueryParams.ATTRIBUTES.key()}; filterMapParams(parameters, familyParameters, acceptedMapParams); final String[] acceptedObjectParams = {QueryParams.MEMBERS.key(), UpdateParams.PHENOTYPES.key(), UpdateParams.DISORDERS.key()}; filterObjectParams(parameters, familyParameters, acceptedObjectParams); final String[] acceptedIntParams = {QueryParams.EXPECTED_SIZE.key()}; filterIntParams(parameters, familyParameters, acceptedIntParams); if (parameters.containsKey(QueryParams.ID.key())) { .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 set name for family. A family with { name: '" + parameters.get(QueryParams.ID.key()) + "'} already exists."); familyParameters.put(QueryParams.ID.key(), parameters.get(QueryParams.ID.key())); if (parameters.containsKey(QueryParams.STATUS_NAME.key())) { familyParameters.put(QueryParams.STATUS_NAME.key(), parameters.get(QueryParams.STATUS_NAME.key())); familyParameters.put(QueryParams.STATUS_DATE.key(), TimeUtils.getTime()); familyParameters.put(QueryParams.MODIFICATION_DATE.key(), time); familyParameters.put(PRIVATE_MODIFICATION_DATE, date);
new QueryOptions(QueryOptions.EXCLUDE, FamilyDBAdaptor.QueryParams.MEMBERS.key()), token); assertEquals(1, familyQueryResult.getNumResults()); assertEquals(null, familyQueryResult.first().getMembers()); new QueryOptions(QueryOptions.INCLUDE, FamilyDBAdaptor.QueryParams.MEMBERS.key() + "." + IndividualDBAdaptor.QueryParams.NAME.key()), token);
new Query(FamilyDBAdaptor.QueryParams.ANNOTATION.key(), Constants.VARIABLE_SET + "=" + variableSetId), new QueryOptions()); if (cohorts.getNumResults() != 0) { String msg = "Can't delete VariableSetId, still in use as \"variableSetId\" of families : [";
.append(QueryParams.VERSION.key(), document.getInteger(QueryParams.VERSION.key())) .append(PRIVATE_UID, document.getLong(PRIVATE_UID)); QueryResult<UpdateResult> updateResult = familyCollection.update(queryDocument, new Document("$set", updateOldVersion), null); 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);
private void fixQueryObject(Study study, Query query, String sessionId) throws CatalogException { if (StringUtils.isNotEmpty(query.getString(FamilyDBAdaptor.QueryParams.MEMBERS.key())) && StringUtils.isNotEmpty(query.getString(IndividualDBAdaptor.QueryParams.SAMPLES.key()))) { throw new CatalogException("Cannot look for samples and members at the same time"); if (StringUtils.isNotEmpty(query.getString(FamilyDBAdaptor.QueryParams.MEMBERS.key()))) { try { MyResources<Individual> resource = catalogManager.getIndividualManager().getUids( query.getAsStringList(FamilyDBAdaptor.QueryParams.MEMBERS.key()), study.getFqn(), sessionId); query.put(FamilyDBAdaptor.QueryParams.MEMBER_UID.key(), resource.getResourceList().stream().map(Individual::getUid) .collect(Collectors.toList())); } catch (CatalogException e) { query.put(FamilyDBAdaptor.QueryParams.MEMBER_UID.key(), -1); query.remove(FamilyDBAdaptor.QueryParams.MEMBERS.key()); if (individualResult.getNumResults() == 0) { query.put(FamilyDBAdaptor.QueryParams.MEMBER_UID.key(), -1); } else { query.put(FamilyDBAdaptor.QueryParams.MEMBER_UID.key(), individualResult.getResult().stream().map(Individual::getUid).collect(Collectors.toList()));
if (familyParameters.containsKey(QueryParams.STATUS_NAME.key())) { query.put(Constants.ALL_VERSIONS, true); QueryResult<UpdateResult> update = familyCollection.update(parseQuery(query, false), updateAnnotationSets(query.getLong(QueryParams.UID.key(), -1L), parameters, variableSetList, queryOptions, true); return endQuery("Update family", startTime, Collections.singletonList(update.getNumTotalResults())); updateAnnotationSets(query.getLong(QueryParams.UID.key(), -1L), parameters, variableSetList, queryOptions, true); if (!familyParameters.isEmpty()) { QueryResult<UpdateResult> update = familyCollection.update(parseQuery(query, false),
@Override Family smartResolutor(long studyUid, String entry, String user) throws CatalogException { Query query = new Query() .append(FamilyDBAdaptor.QueryParams.STUDY_UID.key(), studyUid); if (UUIDUtils.isOpenCGAUUID(entry)) { query.put(FamilyDBAdaptor.QueryParams.UUID.key(), entry); } else { query.put(FamilyDBAdaptor.QueryParams.ID.key(), entry); } QueryOptions options = new QueryOptions(QueryOptions.INCLUDE, Arrays.asList( FamilyDBAdaptor.QueryParams.UUID.key(), FamilyDBAdaptor.QueryParams.UID.key(), FamilyDBAdaptor.QueryParams.STUDY_UID.key(), FamilyDBAdaptor.QueryParams.ID.key(), FamilyDBAdaptor.QueryParams.RELEASE.key(), FamilyDBAdaptor.QueryParams.VERSION.key(), FamilyDBAdaptor.QueryParams.STATUS.key())); QueryResult<Family> familyQueryResult = familyDBAdaptor.get(query, options, user); if (familyQueryResult.getNumResults() == 0) { familyQueryResult = familyDBAdaptor.get(query, options); if (familyQueryResult.getNumResults() == 0) { throw new CatalogException("Family " + entry + " not found"); } else { throw new CatalogAuthorizationException("Permission denied. " + user + " is not allowed to see the family " + entry); } } else if (familyQueryResult.getNumResults() > 1) { throw new CatalogException("More than one family found based on " + entry); } else { return familyQueryResult.first(); } }
private boolean excludeIndividuals(QueryOptions options) { if (options.containsKey(QueryOptions.INCLUDE)) { List<String> includeList = options.getAsStringList(QueryOptions.INCLUDE); for (String include : includeList) { if (include.startsWith(QueryParams.MEMBERS.key())) { // Individuals should be included return false; } } // Individuals are not included return true; } if (options.containsKey(QueryOptions.EXCLUDE)) { List<String> excludeList = options.getAsStringList(QueryOptions.EXCLUDE); for (String exclude : excludeList) { if (exclude.equals(QueryParams.MEMBERS.key())) { // Individuals should be excluded return true; } } // Individuals are included return false; } // Individuals are included by default return false; }
private void updateToLastIndividualVersions(Query query, ObjectMap parameters) throws CatalogDBException { if (parameters.containsKey(QueryParams.MEMBERS.key())) { throw new CatalogDBException("Invalid option: Cannot update to the last version of members and update to different members at " + "the same time."); } QueryOptions options = new QueryOptions(QueryOptions.INCLUDE, QueryParams.MEMBERS.key()); QueryResult<Family> queryResult = get(query, options); if (queryResult.getNumResults() == 0) { throw new CatalogDBException("Family not found."); } if (queryResult.getNumResults() > 1) { throw new CatalogDBException("Update to the last version of members in multiple families at once not supported."); } Family family = queryResult.first(); if (family.getMembers() == null || family.getMembers().isEmpty()) { // Nothing to do return; } List<Long> individualIds = family.getMembers().stream().map(Individual::getUid).collect(Collectors.toList()); Query individualQuery = new Query() .append(IndividualDBAdaptor.QueryParams.UID.key(), individualIds); options = new QueryOptions(QueryOptions.INCLUDE, Arrays.asList( IndividualDBAdaptor.QueryParams.UID.key(), IndividualDBAdaptor.QueryParams.VERSION.key() )); QueryResult<Individual> individualQueryResult = dbAdaptorFactory.getCatalogIndividualDBAdaptor().get(individualQuery, options); parameters.put(QueryParams.MEMBERS.key(), individualQueryResult.getResult()); }