@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); familyCollection.update(bson, update, queryOptions); }
@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 = catalogManager.getUserManager().getUserId(sessionId); Study study = catalogManager.getStudyManager().resolveId(studyStr, userId); fixQueryObject(query, study, sessionId); // Add study id to the query query.put(FamilyDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); QueryResult queryResult = clinicalDBAdaptor.groupBy(query, fields, options, userId); return ParamUtils.defaultObject(queryResult, QueryResult::new); }
@Test public void includeMemberIdOnly() throws CatalogException { createDummyFamily("family"); QueryOptions options = new QueryOptions(QueryOptions.INCLUDE, FamilyDBAdaptor.QueryParams.MEMBERS.key() + "." + IndividualDBAdaptor.QueryParams.ID.key()); QueryResult<Family> family = familyManager.get(STUDY, "family", options, sessionIdUser); for (Individual individual : family.first().getMembers()) { assertTrue(StringUtils.isNotEmpty(individual.getId())); assertTrue(StringUtils.isEmpty(individual.getName())); assertTrue(StringUtils.isEmpty(individual.getCreationDate())); } }
public QueryResult<Family> search(String studyStr, Query query, QueryOptions options, String sessionId) throws CatalogException { query = ParamUtils.defaultObject(query, Query::new); options = ParamUtils.defaultObject(options, QueryOptions::new); String userId = catalogManager.getUserManager().getUserId(sessionId); Study study = studyManager.resolveId(studyStr, userId, new QueryOptions(QueryOptions.INCLUDE, StudyDBAdaptor.QueryParams.VARIABLE_SET.key())); Query finalQuery = new Query(query); // Fix query if it contains any annotation AnnotationUtils.fixQueryAnnotationSearch(study, finalQuery); AnnotationUtils.fixQueryOptionAnnotation(options); fixQueryObject(study, finalQuery, sessionId); finalQuery.append(FamilyDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); QueryResult<Family> queryResult = familyDBAdaptor.get(finalQuery, options, userId); // addMemberInformation(queryResult, study.getUid(), sessionId); return queryResult; }
private Boolean indexFamily(CatalogSolrManager catalogSolrManager, Study study) throws CatalogException, IOException { Query query = new Query() .append(FamilyDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()) .append(FamilyDBAdaptor.QueryParams.STATUS_NAME.key(), Constants.ALL_STATUS); QueryOptions familyQueryOptions = new QueryOptions() .append(QueryOptions.INCLUDE, Arrays.asList(FamilyDBAdaptor.QueryParams.ID.key(), FamilyDBAdaptor.QueryParams.CREATION_DATE.key(), FamilyDBAdaptor.QueryParams.STATUS.key(), FamilyDBAdaptor.QueryParams.MEMBER_UID.key(), FamilyDBAdaptor.QueryParams.RELEASE.key(), FamilyDBAdaptor.QueryParams.VERSION.key(), FamilyDBAdaptor.QueryParams.ANNOTATION_SETS.key(), FamilyDBAdaptor.QueryParams.PHENOTYPES.key(), FamilyDBAdaptor.QueryParams.EXPECTED_SIZE.key())) .append(DBAdaptor.INCLUDE_ACLS, true) .append(Constants.FLATTENED_ANNOTATIONS, true); catalogSolrManager.insertCatalogCollection(this.familyDBAdaptor.iterator(query, familyQueryOptions), new CatalogFamilyToSolrFamilyConverter(study), CatalogSolrManager.FAMILY_SOLR_COLLECTION); return true; }
private void validateFamilyAndProband(ClinicalAnalysis clinicalAnalysis, Study study, String sessionId) throws CatalogException { if (clinicalAnalysis.getFamily() != null && StringUtils.isNotEmpty(clinicalAnalysis.getFamily().getId())) { MyResource<Family> familyResource = catalogManager.getFamilyManager().getUid(clinicalAnalysis.getFamily().getId(), study.getFqn(), sessionId); clinicalAnalysis.setFamily(familyResource.getResource()); // Check the proband is an actual member of the family Query query = new Query() .append(FamilyDBAdaptor.QueryParams.UID.key(), familyResource.getResource().getUid()) .append(FamilyDBAdaptor.QueryParams.MEMBER_UID.key(), clinicalAnalysis.getProband().getUid()); QueryResult<Family> count = catalogManager.getFamilyManager().count(study.getFqn(), query, sessionId); if (count.getNumTotalResults() == 0) { throw new CatalogException("The member " + clinicalAnalysis.getProband().getId() + " does not belong to the family " + clinicalAnalysis.getFamily().getId()); } } }
@Override public QueryResult<Family> update(long id, ObjectMap parameters, List<VariableSet> variableSetList, QueryOptions queryOptions) throws CatalogDBException { long startTime = startQuery(); QueryResult<Long> update = update(new Query(QueryParams.UID.key(), id), parameters, variableSetList, queryOptions); if (update.getNumTotalResults() != 1 && parameters.size() > 0 && !(parameters.size() <= 2 && (parameters.containsKey(QueryParams.ANNOTATION_SETS.key()) || parameters.containsKey(AnnotationSetManager.ANNOTATIONS)))) { throw new CatalogDBException("Could not update family with id " + id); } Query query = new Query() .append(QueryParams.UID.key(), id) .append(QueryParams.STUDY_UID.key(), getStudyId(id)) .append(QueryParams.STATUS_NAME.key(), "!=EMPTY"); return endQuery("Update family", startTime, get(query, queryOptions)); }
public void validateFamilyToUpdate(Document document) { Document family = (Document) document.get(ClinicalAnalysisDBAdaptor.QueryParams.FAMILY.key()); if (family != null) { // Store the uid as a long value family.put("uid", getLongValue(family, "uid")); family.remove("studyUid"); // Check if family contains members List<Document> members = (List<Document>) family.get(FamilyDBAdaptor.QueryParams.MEMBERS.key()); if (ListUtils.isNotEmpty(members)) { for (Document member : members) { validateProbandToUpdate(member); } } } }
@Override public QueryResult<Family> restore(long id, QueryOptions queryOptions) throws CatalogDBException { long startTime = startQuery(); checkId(id); // Check if the family is active Query query = new Query(QueryParams.UID.key(), id) .append(QueryParams.STATUS_NAME.key(), Status.DELETED); if (count(query).first() == 0) { throw new CatalogDBException("The family {" + id + "} is not deleted"); } // Change the status of the family to deleted setStatus(id, Status.READY); query = new Query(QueryParams.UID.key(), id); return endQuery("Restore family", startTime, get(query, null)); }
public QueryResult<Family> count(String studyStr, Query query, String sessionId) throws CatalogException { query = ParamUtils.defaultObject(query, Query::new); String userId = catalogManager.getUserManager().getUserId(sessionId); Study study = studyManager.resolveId(studyStr, userId, new QueryOptions(QueryOptions.INCLUDE, StudyDBAdaptor.QueryParams.VARIABLE_SET.key())); Query finalQuery = new Query(query); // Fix query if it contains any annotation AnnotationUtils.fixQueryAnnotationSearch(study, finalQuery); fixQueryObject(study, finalQuery, sessionId); finalQuery.append(FamilyDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); QueryResult<Long> queryResultAux = familyDBAdaptor.count(finalQuery, userId, StudyAclEntry.StudyPermissions.VIEW_FAMILIES); return new QueryResult<>("count", queryResultAux.getDbTime(), 0, queryResultAux.first(), queryResultAux.getWarningMsg(), queryResultAux.getErrorMsg(), Collections.emptyList()); }
private QueryResult<Family> setStatus(long familyId, String status) throws CatalogDBException { return update(familyId, new ObjectMap(QueryParams.STATUS_NAME.key(), status), QueryOptions.empty()); }
default boolean exists(long familyId) throws CatalogDBException { return count(new Query(QueryParams.UID.key(), familyId)).first() > 0; }
@Test public void updateFamilyMissingPhenotype() throws JsonProcessingException, CatalogException { QueryResult<Family> originalFamily = createDummyFamily("Martinez-Martinez"); Phenotype phenotype1 = new Phenotype("dis1", "New name", "New source"); Family family = new Family(); family.setPhenotypes(Arrays.asList(phenotype1)); ObjectMapper jsonObjectMapper = catalogManagerResource.generateNewObjectMapper(); ObjectMap params = new ObjectMap(jsonObjectMapper.writeValueAsString(family)); params = new ObjectMap(FamilyDBAdaptor.QueryParams.PHENOTYPES.key(), params.get(FamilyDBAdaptor.QueryParams.PHENOTYPES.key())); thrown.expect(CatalogException.class); thrown.expectMessage("not present in any member of the family"); familyManager.update(STUDY, originalFamily.first().getName(), params, QueryOptions.empty(), sessionIdUser); }
private QueryResult<Long> setStatus(Query query, String status) throws CatalogDBException { return update(query, new ObjectMap(QueryParams.STATUS_NAME.key(), status), QueryOptions.empty()); }
@Override public QueryResult<Family> get(long familyId, QueryOptions options) throws CatalogDBException { checkId(familyId); Query query = new Query(QueryParams.UID.key(), familyId).append(QueryParams.STATUS_NAME.key(), "!=" + Status.DELETED) .append(QueryParams.STUDY_UID.key(), getStudyId(familyId)); return get(query, 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 families", startTime, setStatus(query, Status.READY)); }
@Override public void delete(long id) throws CatalogDBException { Query query = new Query(QueryParams.UID.key(), id); delete(query); }
private Document getStudyDocument(Query query) throws CatalogDBException { // Get the study document Query studyQuery = new Query() .append(StudyDBAdaptor.QueryParams.UID.key(), query.getLong(FamilyDBAdaptor.QueryParams.STUDY_UID.key())); QueryResult<Document> queryResult = dbAdaptorFactory.getCatalogStudyDBAdaptor().nativeGet(studyQuery, QueryOptions.empty()); if (queryResult.getNumResults() == 0) { throw new CatalogDBException("Study " + query.getLong(FamilyDBAdaptor.QueryParams.STUDY_UID.key()) + " not found"); } return queryResult.first(); } }
@Override public Document convertToStorageType(Family object, List<VariableSet> variableSetList) { Document document = super.convertToStorageType(object, variableSetList); document.remove(FamilyDBAdaptor.QueryParams.ANNOTATION_SETS.key()); document.put("uid", object.getUid()); document.put("studyUid", object.getStudyUid()); validateDocumentToUpdate(document); return document; }