@RequestMapping(value = BASE_MAPPING + "/search", method = RequestMethod.GET) public ResponseEntity<?> filterEntities( DomainTypeAdministrationConfiguration domainTypeAdministrationConfiguration, RootResourceInformation repoRequest, PersistentEntityResourceAssembler assembler, WebRequest request, Pageable pageable, @PathVariable String scopeName) throws Exception { DynamicRepositoryInvoker repositoryInvoker = (DynamicRepositoryInvoker) repoRequest.getInvoker(); Set<FieldMetadata> listViewFields = domainTypeAdministrationConfiguration.getListViewFragment().getFields(); PersistentEntity<?, ?> persistentEntity = repoRequest.getPersistentEntity(); DynamicPersistentEntityResourceAssembler dynamicPersistentEntityResourceAssembler = DynamicPersistentEntityResourceAssembler.wrap(assembler, listViewFields, false); final ScopeMetadata scope = domainTypeAdministrationConfiguration.getScopes().getScope(scopeName); final Specification filterSpecification = specificationFromRequest(request, persistentEntity); if (isPredicateScope(scope)) { final PredicateScopeMetadata predicateScope = (PredicateScopeMetadata) scope; final Page page = findBySpecificationAndPredicate( repositoryInvoker, filterSpecification, predicateScope.predicate(), pageable); Object resources = resultToResources(page, dynamicPersistentEntityResourceAssembler); return new ResponseEntity<>(resources, HttpStatus.OK); } if (isSpecificationScope(scope)) { final Specification scopeSpecification = ((ScopeMetadataUtils.SpecificationScopeMetadata) scope).specification(); Page page = findItemsBySpecification( repositoryInvoker, and(scopeSpecification, filterSpecification), pageable); Object resources = resultToResources(page, dynamicPersistentEntityResourceAssembler); return new ResponseEntity<>(resources, HttpStatus.OK); } Page page = findItemsBySpecification(repositoryInvoker, filterSpecification, pageable); Object resources = resultToResources(page, dynamicPersistentEntityResourceAssembler); return new ResponseEntity<>(resources, HttpStatus.OK); }
@RequestMapping(value = BASE_MAPPING + "/search/count", method = RequestMethod.GET) public ResponseEntity<?> countItems( DomainTypeAdministrationConfiguration domainTypeAdministrationConfiguration, RootResourceInformation repoRequest, WebRequest request, @PathVariable String scopeName) { DynamicRepositoryInvoker repositoryInvoker = (DynamicRepositoryInvoker) repoRequest.getInvoker(); PersistentEntity<?, ?> persistentEntity = repoRequest.getPersistentEntity(); final ScopeMetadata scope = domainTypeAdministrationConfiguration.getScopes().getScope(scopeName); final Specification filterSpecification = specificationFromRequest(request, persistentEntity); if (isPredicateScope(scope)) { final PredicateScopeMetadata predicateScope = (PredicateScopeMetadata) scope; return new ResponseEntity<>( countItemsBySpecificationAndPredicate( repositoryInvoker, filterSpecification, predicateScope.predicate()), HttpStatus.OK); } if (isSpecificationScope(scope)) { final Specification scopeSpecification = ((ScopeMetadataUtils.SpecificationScopeMetadata) scope).specification(); return new ResponseEntity<>( countItemsBySpecification( repositoryInvoker, and(scopeSpecification, filterSpecification)), HttpStatus.OK); } return new ResponseEntity<>( countItemsBySpecification(repositoryInvoker, filterSpecification), HttpStatus.OK); }