Search in sources :

Example 1 with PatchRequestScope

use of com.yahoo.elide.jsonapi.extensions.PatchRequestScope in project elide by yahoo.

the class Elide method patch.

/**
 * Handle PATCH.
 *
 * @param baseUrlEndPoint base URL with prefix endpoint
 * @param contentType the content type
 * @param accept the accept
 * @param path the path
 * @param jsonApiDocument the json api document
 * @param queryParams the query params
 * @param requestHeaders the request headers
 * @param opaqueUser the opaque user
 * @param apiVersion the API version
 * @param requestId the request ID
 * @return Elide response object
 */
public ElideResponse patch(String baseUrlEndPoint, String contentType, String accept, String path, String jsonApiDocument, MultivaluedMap<String, String> queryParams, Map<String, List<String>> requestHeaders, User opaqueUser, String apiVersion, UUID requestId) {
    Handler<DataStoreTransaction, User, HandlerResult> handler;
    if (JsonApiPatch.isPatchExtension(contentType) && JsonApiPatch.isPatchExtension(accept)) {
        handler = (tx, user) -> {
            PatchRequestScope requestScope = new PatchRequestScope(baseUrlEndPoint, path, apiVersion, tx, user, requestId, queryParams, requestHeaders, elideSettings);
            try {
                Supplier<Pair<Integer, JsonNode>> responder = JsonApiPatch.processJsonPatch(dataStore, path, jsonApiDocument, requestScope);
                return new HandlerResult(requestScope, responder);
            } catch (RuntimeException e) {
                return new HandlerResult(requestScope, e);
            }
        };
    } else {
        handler = (tx, user) -> {
            JsonApiDocument jsonApiDoc = mapper.readJsonApiDocument(jsonApiDocument);
            RequestScope requestScope = new RequestScope(baseUrlEndPoint, path, apiVersion, jsonApiDoc, tx, user, queryParams, requestHeaders, requestId, elideSettings);
            requestScope.setEntityProjection(new EntityProjectionMaker(elideSettings.getDictionary(), requestScope).parsePath(path));
            BaseVisitor visitor = new PatchVisitor(requestScope);
            return visit(path, requestScope, visitor);
        };
    }
    return handleRequest(false, opaqueUser, dataStore::beginTransaction, requestId, handler);
}
Also used : PatchRequestScope(com.yahoo.elide.jsonapi.extensions.PatchRequestScope) User(com.yahoo.elide.core.security.User) JsonApiDocument(com.yahoo.elide.jsonapi.models.JsonApiDocument) PatchVisitor(com.yahoo.elide.jsonapi.parser.PatchVisitor) EntityProjectionMaker(com.yahoo.elide.jsonapi.EntityProjectionMaker) PatchRequestScope(com.yahoo.elide.jsonapi.extensions.PatchRequestScope) RequestScope(com.yahoo.elide.core.RequestScope) BaseVisitor(com.yahoo.elide.jsonapi.parser.BaseVisitor) DataStoreTransaction(com.yahoo.elide.core.datastore.DataStoreTransaction) Pair(org.apache.commons.lang3.tuple.Pair)

Example 2 with PatchRequestScope

use of com.yahoo.elide.jsonapi.extensions.PatchRequestScope in project elide by yahoo.

the class PersistentResourceTest method testPatchRequestScope.

@Test
public void testPatchRequestScope() {
    DataStoreTransaction tx = mock(DataStoreTransaction.class);
    PatchRequestScope parentScope = new PatchRequestScope(null, "/book", NO_VERSION, tx, new TestUser("1"), UUID.randomUUID(), null, Collections.emptyMap(), elideSettings);
    PatchRequestScope scope = new PatchRequestScope(parentScope.getPath(), parentScope.getJsonApiDocument(), parentScope);
    // verify wrap works
    assertEquals(parentScope.getUpdateStatusCode(), scope.getUpdateStatusCode());
    assertEquals(parentScope.getObjectEntityCache(), scope.getObjectEntityCache());
    Parent parent = newParent(7);
    PersistentResource<Parent> parentResource = new PersistentResource<>(parent, "1", scope);
    parentResource.updateAttribute("firstName", "foobar");
    ArgumentCaptor<Attribute> attributeArgument = ArgumentCaptor.forClass(Attribute.class);
    verify(tx, times(1)).setAttribute(eq(parent), attributeArgument.capture(), eq(scope));
    assertEquals(attributeArgument.getValue().getName(), "firstName");
    assertEquals(attributeArgument.getValue().getArguments().iterator().next().getValue(), "foobar");
}
Also used : PatchRequestScope(com.yahoo.elide.jsonapi.extensions.PatchRequestScope) Parent(example.Parent) Attribute(com.yahoo.elide.core.request.Attribute) DataStoreTransaction(com.yahoo.elide.core.datastore.DataStoreTransaction) TestUser(com.yahoo.elide.core.security.TestUser) Test(org.junit.jupiter.api.Test)

Aggregations

DataStoreTransaction (com.yahoo.elide.core.datastore.DataStoreTransaction)2 PatchRequestScope (com.yahoo.elide.jsonapi.extensions.PatchRequestScope)2 RequestScope (com.yahoo.elide.core.RequestScope)1 Attribute (com.yahoo.elide.core.request.Attribute)1 TestUser (com.yahoo.elide.core.security.TestUser)1 User (com.yahoo.elide.core.security.User)1 EntityProjectionMaker (com.yahoo.elide.jsonapi.EntityProjectionMaker)1 JsonApiDocument (com.yahoo.elide.jsonapi.models.JsonApiDocument)1 BaseVisitor (com.yahoo.elide.jsonapi.parser.BaseVisitor)1 PatchVisitor (com.yahoo.elide.jsonapi.parser.PatchVisitor)1 Parent (example.Parent)1 Pair (org.apache.commons.lang3.tuple.Pair)1 Test (org.junit.jupiter.api.Test)1