@Override public void invokeDeleteById(Object id) { delegate.invokeDeleteById(id); }
@Override @SuppressWarnings("unchecked") public <T> Optional<T> invokeFindById(Object id) { return lookup.isPresent() // ? (Optional<T>) lookup.flatMap(it -> it.lookupEntity(id)) // : delegate.invokeFindById(id); }
@Override public Optional<Object> invokeQueryMethod(Method method, MultiValueMap<String, ? extends Object> parameters, Pageable pageable, Sort sort) { return delegate.invokeQueryMethod(method, parameters, pageable, sort); }
@Override public <T> T invokeSave(T object) { return delegate.invokeSave(object); } }
/** * <code>DELETE /{repository}/{id}</code> - Deletes the entity backing the item resource. * * @param resourceInformation * @param id * @param eTag * @return * @throws ResourceNotFoundException * @throws HttpRequestMethodNotSupportedException * @throws ETagDoesntMatchException */ @RequestMapping(value = BASE_MAPPING + "/{id}", method = RequestMethod.DELETE) public ResponseEntity<?> deleteItemResource(RootResourceInformation resourceInformation, @BackendId Serializable id, ETag eTag) throws ResourceNotFoundException, HttpRequestMethodNotSupportedException { resourceInformation.verifySupportedMethod(HttpMethod.DELETE, ResourceType.ITEM); RepositoryInvoker invoker = resourceInformation.getInvoker(); Optional<Object> domainObj = invoker.invokeFindById(id); return domainObj.map(it -> { PersistentEntity<?, ?> entity = resourceInformation.getPersistentEntity(); eTag.verify(entity, it); publisher.publishEvent(new BeforeDeleteEvent(it)); invoker.invokeDeleteById(entity.getIdentifierAccessor(it).getIdentifier()); publisher.publishEvent(new AfterDeleteEvent(it)); return new ResponseEntity<Object>(HttpStatus.NO_CONTENT); }).orElseThrow(() -> new ResourceNotFoundException()); }
@Override public Iterable<Object> invokeFindAll(Pageable pageable) { return delegate.invokeFindAll(pageable); }
@Override public boolean hasSaveMethod() { return delegate.hasSaveMethod(); }
@Override public boolean hasDeleteMethod() { return delegate.hasDeleteMethod(); }
@Override public boolean hasFindOneMethod() { return delegate.hasFindOneMethod(); }
@Override public boolean hasFindAllMethod() { return delegate.hasFindAllMethod(); }
Object result = repoRequest.getInvoker().invokeSave(prop.accessor.getBean()); publisher.publishEvent(new AfterLinkDeleteEvent(result, it));
/** * <code>DELETE /{repository}/{id}</code> - Deletes the entity backing the item resource. * * @param resourceInformation * @param id * @param eTag * @return * @throws ResourceNotFoundException * @throws HttpRequestMethodNotSupportedException * @throws ETagDoesntMatchException */ @RequestMapping(value = BASE_MAPPING + "/{id}", method = RequestMethod.DELETE) public ResponseEntity<?> deleteItemResource(RootResourceInformation resourceInformation, @BackendId Serializable id, ETag eTag) throws ResourceNotFoundException, HttpRequestMethodNotSupportedException { resourceInformation.verifySupportedMethod(HttpMethod.DELETE, ResourceType.ITEM); RepositoryInvoker invoker = resourceInformation.getInvoker(); Optional<Object> domainObj = invoker.invokeFindById(id); return domainObj.map(it -> { PersistentEntity<?, ?> entity = resourceInformation.getPersistentEntity(); eTag.verify(entity, it); publisher.publishEvent(new BeforeDeleteEvent(it)); invoker.invokeDeleteById(entity.getIdentifierAccessor(it).getIdentifier()); publisher.publishEvent(new AfterDeleteEvent(it)); return new ResponseEntity<Object>(HttpStatus.NO_CONTENT); }).orElseThrow(() -> new ResourceNotFoundException()); }
@Override public Iterable<Object> invokeFindAll(Sort sort) { return delegate.invokeFindAll(sort); }
@Override public boolean hasSaveMethod() { return delegate.hasSaveMethod(); }
@Override public boolean hasDeleteMethod() { return delegate.hasDeleteMethod(); }
@Override public boolean hasFindOneMethod() { return delegate.hasFindOneMethod(); }
@Override public boolean hasFindAllMethod() { return delegate.hasFindAllMethod(); }
@Override public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { Object id = p.getCurrentToken().isNumeric() ? p.getValueAsLong() : p.getValueAsString(); return invoker.invokeFindById(id).orElse(null); } }
/** * Triggers the creation of the domain object and renders it into the response if needed. * * @param domainObject * @param invoker * @return */ private ResponseEntity<ResourceSupport> createAndReturn(Object domainObject, RepositoryInvoker invoker, PersistentEntityResourceAssembler assembler, boolean returnBody) { publisher.publishEvent(new BeforeCreateEvent(domainObject)); Object savedObject = invoker.invokeSave(domainObject); publisher.publishEvent(new AfterCreateEvent(savedObject)); Optional<PersistentEntityResource> resource = Optional .ofNullable(returnBody ? assembler.toFullResource(savedObject) : null); HttpHeaders headers = headersPreparer.prepareHeaders(resource); addLocationHeader(headers, assembler, savedObject); return ControllerUtils.toResponseEntity(HttpStatus.CREATED, headers, resource); }
/** * @param invoker * @param request * @param method * @param pageable * @return */ private Optional<Object> executeQueryMethod(final RepositoryInvoker invoker, @RequestParam MultiValueMap<String, Object> parameters, Method method, DefaultedPageable pageable, Sort sort, PersistentEntityResourceAssembler assembler) { MultiValueMap<String, Object> result = new LinkedMultiValueMap<String, Object>(parameters); MethodParameters methodParameters = new MethodParameters(method, new AnnotationAttribute(Param.class)); List<MethodParameter> parameterList = methodParameters.getParameters(); List<TypeInformation<?>> parameterTypeInformations = ClassTypeInformation.from(method.getDeclaringClass()) .getParameterTypes(method); for (Entry<String, List<Object>> entry : parameters.entrySet()) { MethodParameter parameter = methodParameters.getParameter(entry.getKey()); if (parameter == null) { continue; } int parameterIndex = parameterList.indexOf(parameter); TypeInformation<?> domainType = parameterTypeInformations.get(parameterIndex).getActualType(); ResourceMetadata metadata = mappings.getMetadataFor(domainType.getType()); if (metadata != null && metadata.isExported()) { result.put(parameter.getParameterName(), prepareUris(entry.getValue())); } } return invoker.invokeQueryMethod(method, result, pageable.getPageable(), sort); }