/** * See Interface for functional description. * * @param parameters filter as CQL query * @return Returns the XML representation of the resource-list. * @throws InvalidSearchQueryException thrown if the given search query could not be translated * into a SQL query * @throws SystemException e. * @see de.escidoc.core.sm.business.interfaces .AggregationDefinitionHandlerInterface * #retrieveAggregationDefinitions(java.util.Map) */ @Override public String retrieveAggregationDefinitions(final Map<String, String[]> parameters) throws InvalidSearchQueryException, SystemException { final String result; final SRURequestParameters params = new DbRequestParameters(parameters); final String query = params.getQuery(); final int limit = params.getMaximumRecords(); final int offset = params.getStartRecord(); if (params.isExplain()) { final Map<String, Object> values = new HashMap<String, Object>(); values.put("PROPERTY_NAMES", new AggregationDefinitionFilter(null).getPropertyNames()); result = ExplainXmlProvider.getInstance().getExplainAggregationDefinitionXml(values); } else if (limit == 0) { result = renderer.renderAggregationDefinitions( new ArrayList<AggregationDefinition>(0), params.getRecordPacking()); } else { // get all scope ids from database final List<String> scopeIds = scopesDao.retrieveScopeIds(); Collection<String> filteredScopeIds = null; if (scopeIds != null && !scopeIds.isEmpty()) { // get scope-ids filtered by user-privileges filteredScopeIds = filterUtility.filterRetrievePrivilege(Constants.SCOPE_OBJECT_TYPE, scopeIds); } Collection<AggregationDefinition> aggregationDefinitions = null; if (filteredScopeIds != null && !filteredScopeIds.isEmpty()) { // get aggregation-definitions as XML aggregationDefinitions = dao.retrieveAggregationDefinitions(filteredScopeIds, query, offset, limit); } result = renderer.renderAggregationDefinitions(aggregationDefinitions, params.getRecordPacking()); } return result; }