@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);
AnnotationUtils.fixQueryAnnotationSearch(study, userId, query, authorizationManager);
AnnotationUtils.fixQueryOptionAnnotation(options);
query.put(SampleDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid());
if (StringUtils.isNotEmpty(query.getString(SampleDBAdaptor.QueryParams.INDIVIDUAL.key()))) {
String individualStr = query.getString(SampleDBAdaptor.QueryParams.INDIVIDUAL.key());
if (NumberUtils.isCreatable(individualStr) && Long.parseLong(individualStr) <= 0) {
query.put(SampleDBAdaptor.QueryParams.INDIVIDUAL_UID.key(), -1);
} else {
MyResource resource = catalogManager.getIndividualManager().getUid(individualStr, studyStr, sessionId);
query.put(SampleDBAdaptor.QueryParams.INDIVIDUAL_UID.key(), resource.getResource().getUid());
}
query.remove(SampleDBAdaptor.QueryParams.INDIVIDUAL.key());
}
QueryResult queryResult = sampleDBAdaptor.groupBy(query, fields, options, userId);
return ParamUtils.defaultObject(queryResult, QueryResult::new);
}