/** * Returns the {@link PersistentPropertyAccessor} for the underlying content bean. * * @return */ public PersistentPropertyAccessor getPropertyAccessor() { return entity.getPropertyAccessor(getContent()); }
/** * Returns the default headers to be returned for the given {@link PersistentEntityResource}. Will set {@link ETag} * and {@code Last-Modified} headers if applicable. * * @param resource can be {@literal null}. * @return */ public HttpHeaders prepareHeaders(Optional<PersistentEntityResource> resource) { return resource// .map(it -> prepareHeaders(it.getPersistentEntity(), it.getContent()))// .orElseGet(() -> new HttpHeaders()); }
/** * Creates a new {@link ETag} for the given {@link PersistentEntityResource}. * * @param resource must not be {@literal null}. * @return */ public static ETag from(PersistentEntityResource resource) { Assert.notNull(resource, "PersistentEntityResource must not be null!"); return from(resource.getPersistentEntity(), resource.getContent()); }
@Override public PersistentEntityResource process(PersistentEntityResource resource) { Object content = resource.getContent(); if (null == content) { return resource; } Class<?> domainType = content.getClass(); for (DomainTypeResourceProcessor rp : resourceProcessors) { if (isAssignable(domainType, rp.domainType)) { rp.resourceProcessor.process(resource); } } return resource; }
@Override public void serialize(final PersistentEntityResource resource, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonGenerationException { LOG.debug("Serializing PersistentEntity {}.", resource.getPersistentEntity()); Object content = resource.getContent(); if (hasScalarSerializer(content, provider)) { provider.defaultSerializeValue(content, jgen); return; } Links links = getLinks(resource); if (TargetAware.class.isInstance(content)) { TargetAware targetAware = (TargetAware) content; provider.defaultSerializeValue(new ProjectionResource(targetAware, links), jgen); return; } Resource<Object> resourceToRender = new Resource<Object>(resource.getContent(), links) { @JsonUnwrapped public Iterable<?> getEmbedded() { return resource.getEmbeddeds(); } }; provider.defaultSerializeValue(resourceToRender, jgen); }
/** * <code>POST /{repository}</code> - Creates a new entity instances from the collection resource. * * @param resourceInformation * @param payload * @param assembler * @param acceptHeader * @return * @throws HttpRequestMethodNotSupportedException */ @ResponseBody @RequestMapping(value = BASE_MAPPING, method = RequestMethod.POST) public ResponseEntity<ResourceSupport> postCollectionResource(RootResourceInformation resourceInformation, PersistentEntityResource payload, PersistentEntityResourceAssembler assembler, @RequestHeader(value = ACCEPT_HEADER, required = false) String acceptHeader) throws HttpRequestMethodNotSupportedException { resourceInformation.verifySupportedMethod(HttpMethod.POST, ResourceType.COLLECTION); return createAndReturn(payload.getContent(), resourceInformation.getInvoker(), assembler, config.returnBodyOnCreate(acceptHeader)); }
private Links getLinks(PersistentEntityResource resource) { Object source = getLinkSource(resource.getContent()); return resource.isNested() ? collector.getLinksForNested(source, resource.getLinks()) : collector.getLinksFor(source, resource.getLinks()); }
/** * <code>PATCH /{repository}/{id}</code> - Updates an existing entity or creates one at exactly that place. * * @param resourceInformation * @param payload * @param id * @param assembler * @param eTag, * @param acceptHeader * @return * @throws HttpRequestMethodNotSupportedException * @throws ResourceNotFoundException * @throws ETagDoesntMatchException */ @RequestMapping(value = BASE_MAPPING + "/{id}", method = RequestMethod.PATCH) public ResponseEntity<ResourceSupport> patchItemResource(RootResourceInformation resourceInformation, PersistentEntityResource payload, @BackendId Serializable id, PersistentEntityResourceAssembler assembler, ETag eTag, @RequestHeader(value = ACCEPT_HEADER, required = false) String acceptHeader) throws HttpRequestMethodNotSupportedException, ResourceNotFoundException { resourceInformation.verifySupportedMethod(HttpMethod.PATCH, ResourceType.ITEM); Object domainObject = payload.getContent(); eTag.verify(resourceInformation.getPersistentEntity(), domainObject); return saveAndReturn(domainObject, resourceInformation.getInvoker(), PATCH, assembler, config.returnBodyOnUpdate(acceptHeader)); }
/** * <code>PUT /{repository}/{id}</code> - Updates an existing entity or creates one at exactly that place. * * @param resourceInformation * @param payload * @param id * @param assembler * @param eTag * @param acceptHeader * @return * @throws HttpRequestMethodNotSupportedException */ @RequestMapping(value = BASE_MAPPING + "/{id}", method = RequestMethod.PUT) public ResponseEntity<? extends ResourceSupport> putItemResource(RootResourceInformation resourceInformation, PersistentEntityResource payload, @BackendId Serializable id, PersistentEntityResourceAssembler assembler, ETag eTag, @RequestHeader(value = ACCEPT_HEADER, required = false) String acceptHeader) throws HttpRequestMethodNotSupportedException { resourceInformation.verifySupportedMethod(HttpMethod.PUT, ResourceType.ITEM); if (payload.isNew()) { resourceInformation.verifyPutForCreation(); } RepositoryInvoker invoker = resourceInformation.getInvoker(); Object objectToSave = payload.getContent(); eTag.verify(resourceInformation.getPersistentEntity(), objectToSave); return payload.isNew() ? createAndReturn(objectToSave, invoker, assembler, config.returnBodyOnCreate(acceptHeader)) : saveAndReturn(objectToSave, invoker, PUT, assembler, config.returnBodyOnUpdate(acceptHeader)); }
/** * Returns the {@link PersistentPropertyAccessor} for the underlying content bean. * * @return */ public PersistentPropertyAccessor getPropertyAccessor() { return entity.getPropertyAccessor(getContent()); }
/** * Returns the default headers to be returned for the given {@link PersistentEntityResource}. Will set {@link ETag} * and {@code Last-Modified} headers if applicable. * * @param resource can be {@literal null}. * @return */ public HttpHeaders prepareHeaders(Optional<PersistentEntityResource> resource) { return resource// .map(it -> prepareHeaders(it.getPersistentEntity(), it.getContent()))// .orElseGet(() -> new HttpHeaders()); }
/** * Creates a new {@link ETag} for the given {@link PersistentEntityResource}. * * @param resource must not be {@literal null}. * @return */ public static ETag from(PersistentEntityResource resource) { Assert.notNull(resource, "PersistentEntityResource must not be null!"); return from(resource.getPersistentEntity(), resource.getContent()); }
@Override public PersistentEntityResource process(PersistentEntityResource resource) { Object content = resource.getContent(); if (null == content) { return resource; } Class<?> domainType = content.getClass(); for (DomainTypeResourceProcessor rp : resourceProcessors) { if (isAssignable(domainType, rp.domainType)) { rp.resourceProcessor.process(resource); } } return resource; }
@Override public void serialize(final PersistentEntityResource resource, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonGenerationException { LOG.debug("Serializing PersistentEntity {}.", resource.getPersistentEntity()); Object content = resource.getContent(); if (hasScalarSerializer(content, provider)) { provider.defaultSerializeValue(content, jgen); return; } Links links = getLinks(resource); if (TargetAware.class.isInstance(content)) { TargetAware targetAware = (TargetAware) content; provider.defaultSerializeValue(new ProjectionResource(targetAware, links), jgen); return; } Resource<Object> resourceToRender = new Resource<Object>(resource.getContent(), links) { @JsonUnwrapped public Iterable<?> getEmbedded() { return resource.getEmbeddeds(); } }; provider.defaultSerializeValue(resourceToRender, jgen); }
/** * <code>POST /{repository}</code> - Creates a new entity instances from the collection resource. * * @param resourceInformation * @param payload * @param assembler * @param acceptHeader * @return * @throws HttpRequestMethodNotSupportedException */ @ResponseBody @RequestMapping(value = BASE_MAPPING, method = RequestMethod.POST) public ResponseEntity<ResourceSupport> postCollectionResource(RootResourceInformation resourceInformation, PersistentEntityResource payload, PersistentEntityResourceAssembler assembler, @RequestHeader(value = ACCEPT_HEADER, required = false) String acceptHeader) throws HttpRequestMethodNotSupportedException { resourceInformation.verifySupportedMethod(HttpMethod.POST, ResourceType.COLLECTION); return createAndReturn(payload.getContent(), resourceInformation.getInvoker(), assembler, config.returnBodyOnCreate(acceptHeader)); }
private Links getLinks(PersistentEntityResource resource) { Object source = getLinkSource(resource.getContent()); return resource.isNested() ? collector.getLinksForNested(source, resource.getLinks()) : collector.getLinksFor(source, resource.getLinks()); }
/** * <code>PATCH /{repository}/{id}</code> - Updates an existing entity or creates one at exactly that place. * * @param resourceInformation * @param payload * @param id * @param assembler * @param eTag, * @param acceptHeader * @return * @throws HttpRequestMethodNotSupportedException * @throws ResourceNotFoundException * @throws ETagDoesntMatchException */ @RequestMapping(value = BASE_MAPPING + "/{id}", method = RequestMethod.PATCH) public ResponseEntity<ResourceSupport> patchItemResource(RootResourceInformation resourceInformation, PersistentEntityResource payload, @BackendId Serializable id, PersistentEntityResourceAssembler assembler, ETag eTag, @RequestHeader(value = ACCEPT_HEADER, required = false) String acceptHeader) throws HttpRequestMethodNotSupportedException, ResourceNotFoundException { resourceInformation.verifySupportedMethod(HttpMethod.PATCH, ResourceType.ITEM); Object domainObject = payload.getContent(); eTag.verify(resourceInformation.getPersistentEntity(), domainObject); return saveAndReturn(domainObject, resourceInformation.getInvoker(), PATCH, assembler, config.returnBodyOnUpdate(acceptHeader)); }
/** * <code>PUT /{repository}/{id}</code> - Updates an existing entity or creates one at exactly that place. * * @param resourceInformation * @param payload * @param id * @param assembler * @param eTag * @param acceptHeader * @return * @throws HttpRequestMethodNotSupportedException */ @RequestMapping(value = BASE_MAPPING + "/{id}", method = RequestMethod.PUT) public ResponseEntity<? extends ResourceSupport> putItemResource(RootResourceInformation resourceInformation, PersistentEntityResource payload, @BackendId Serializable id, PersistentEntityResourceAssembler assembler, ETag eTag, @RequestHeader(value = ACCEPT_HEADER, required = false) String acceptHeader) throws HttpRequestMethodNotSupportedException { resourceInformation.verifySupportedMethod(HttpMethod.PUT, ResourceType.ITEM); if (payload.isNew()) { resourceInformation.verifyPutForCreation(); } RepositoryInvoker invoker = resourceInformation.getInvoker(); Object objectToSave = payload.getContent(); eTag.verify(resourceInformation.getPersistentEntity(), objectToSave); return payload.isNew() ? createAndReturn(objectToSave, invoker, assembler, config.returnBodyOnCreate(acceptHeader)) : saveAndReturn(objectToSave, invoker, PUT, assembler, config.returnBodyOnUpdate(acceptHeader)); }