/** * Creates a path using the provided JsonPath structure. * * @param jsonPath JsonPath structure to be parsed * @return String representing structure provided in the input */ public static String buildPath(JsonPath jsonPath) { List<String> urlParts = new LinkedList<>(); JsonPath currentJsonPath = jsonPath; String pathPart; do { if (currentJsonPath instanceof RelationshipsPath) { pathPart = RELATIONSHIP_MARK + SEPARATOR + currentJsonPath.getElementName(); } else if (currentJsonPath instanceof FieldPath) { pathPart = currentJsonPath.getElementName(); } else { pathPart = currentJsonPath.getElementName(); if (currentJsonPath.getIds() != null) { pathPart += SEPARATOR + mergeIds(currentJsonPath.getIds()); } } urlParts.add(pathPart); currentJsonPath = currentJsonPath.getParentResource(); } while (currentJsonPath != null); Collections.reverse(urlParts); return SEPARATOR + StringUtils.join(SEPARATOR, urlParts) + SEPARATOR; }
protected AbstractQueryParamsParserContext(ResourceRegistry resourceRegistry, JsonPath path) { resourceInformation = resourceRegistry.getEntry(path.getResourceName()).getResourceInformation(); }
@Override public boolean isAcceptable(JsonPath jsonPath, String requestType) { return !jsonPath.isCollection() && FieldPath.class.equals(jsonPath.getClass()) && HttpMethod.GET.name().equals(requestType); }
@Override public Response handle(JsonPath jsonPath, QueryAdapter queryAdapter, RepositoryMethodParameterProvider parameterProvider, Document requestBody) { String resourceName = jsonPath.getResourceName(); PathIds resourceIds = jsonPath.getIds(); RegistryEntry registryEntry = resourceRegistry.getEntry(resourceName); Serializable castedResourceId = getResourceId(resourceIds, registryEntry); String elementName = jsonPath.getElementName(); ResourceField relationshipField = registryEntry.getResourceInformation().findRelationshipFieldByName(elementName); if (relationshipField == null) { throw new ResourceFieldNotFoundException(elementName); } Class<?> baseRelationshipFieldClass = relationshipField.getType(); Class<?> relationshipFieldClass = Generics.getResourceClass(relationshipField.getGenericType(), baseRelationshipFieldClass); RelationshipRepositoryAdapter relationshipRepositoryForClass = registryEntry .getRelationshipRepositoryForClass(relationshipFieldClass, parameterProvider); JsonApiResponse entities; if (Iterable.class.isAssignableFrom(baseRelationshipFieldClass)) { entities = relationshipRepositoryForClass.findManyTargets(castedResourceId, relationshipField, queryAdapter); } else { entities = relationshipRepositoryForClass.findOneTarget(castedResourceId, relationshipField, queryAdapter); } Document responseDocument = documentMapper.toDocument(entities, queryAdapter, parameterProvider); return new Response(responseDocument, 200); }
currentJsonPath.setIds(pathIds); currentJsonPath.setChildResource(actionPath); currentJsonPath = actionPath; previousJsonPath.setChildResource(currentJsonPath); currentJsonPath.setParentResource(previousJsonPath);
@Override @SuppressWarnings("unchecked") public Response handle(JsonPath jsonPath, QueryAdapter queryAdapter, RepositoryMethodParameterProvider parameterProvider, Document requestBody) { String resourceName = jsonPath.getElementName(); RegistryEntry registryEntry = resourceRegistry.getEntry(resourceName); if (registryEntry == null) { throw new ResourceNotFoundException(resourceName); } Document responseDocument; ResourceRepositoryAdapter resourceRepository = registryEntry.getResourceRepository(parameterProvider); JsonApiResponse entities; if (jsonPath.getIds() == null || jsonPath.getIds().getIds().isEmpty()) { entities = resourceRepository.findAll(queryAdapter); } else { Class<? extends Serializable> idType = (Class<? extends Serializable>)registryEntry .getResourceInformation().getIdField().getType(); Iterable<? extends Serializable> parsedIds = typeParser.parse((Iterable<String>) jsonPath.getIds().getIds(), idType); entities = resourceRepository.findAll(parsedIds, queryAdapter); } responseDocument = documentMapper.toDocument(entities, queryAdapter, parameterProvider); return new Response(responseDocument, 200); } }
private ResourceInformation getRequestedResource(JsonPath jsonPath) { ResourceRegistry resourceRegistry = moduleRegistry.getResourceRegistry(); RegistryEntry registryEntry = resourceRegistry.getEntry(jsonPath.getResourceName()); if (registryEntry == null) { throw new RepositoryNotFoundException(jsonPath.getResourceName()); } String elementName = jsonPath.getElementName(); if (elementName != null && !elementName.equals(jsonPath.getResourceName())) { ResourceField relationshipField = registryEntry.getResourceInformation().findRelationshipFieldByName(elementName); if (relationshipField == null) { throw new ResourceFieldNotFoundException(elementName); } String oppositeResourceType = relationshipField.getOppositeResourceType(); return resourceRegistry.getEntry(oppositeResourceType).getResourceInformation(); }else { return registryEntry.getResourceInformation(); } }
RepositoryMethodParameterProvider parameterProvider, Document requestDocument) { String resourceEndpointName = jsonPath.getResourceName(); RegistryEntry endpointRegistryEntry = resourceRegistry.getEntry(resourceEndpointName); if (endpointRegistryEntry == null) { String idString = jsonPath.getIds().getIds().get(0);
private JsonPath getNonResourcePath(JsonPath previousJsonPath, String elementName, boolean relationshipMark) { String previousElementName = previousJsonPath.getElementName(); RegistryEntry previousEntry = resourceRegistry.getEntry(previousElementName); ResourceInformation resourceInformation = previousEntry.getResourceInformation(); List<ResourceField> resourceFields = resourceInformation.getRelationshipFields(); for (ResourceField field : resourceFields) { if (field.getJsonName().equals(elementName)) { if (relationshipMark) { return new RelationshipsPath(elementName); } else { return new FieldPath(elementName); } } } //TODO: Throw different exception? element name can be null.. throw new ResourceFieldNotFoundException(elementName); }
@Override public Response handle(JsonPath jsonPath, QueryAdapter queryAdapter, RepositoryMethodParameterProvider parameterProvider, Document requestBody) { String resourceName = jsonPath.getResourceName(); PathIds resourceIds = jsonPath.getIds(); RegistryEntry registryEntry = resourceRegistry.getEntry(resourceName); Serializable castedResourceId = getResourceId(resourceIds, registryEntry); String elementName = jsonPath.getElementName(); ResourceField relationshipField = registryEntry.getResourceInformation().findRelationshipFieldByName(elementName); if (relationshipField == null) { throw new ResourceFieldNotFoundException(elementName); } Class<?> baseRelationshipFieldClass = relationshipField.getType(); Class<?> relationshipFieldClass = Generics.getResourceClass(relationshipField.getGenericType(), baseRelationshipFieldClass); RelationshipRepositoryAdapter relationshipRepositoryForClass = registryEntry.getRelationshipRepositoryForClass(relationshipFieldClass, parameterProvider); JsonApiResponse entities; if (Iterable.class.isAssignableFrom(baseRelationshipFieldClass)) { entities = relationshipRepositoryForClass.findManyTargets(castedResourceId, relationshipField, queryAdapter); } else { entities = relationshipRepositoryForClass.findOneTarget(castedResourceId, relationshipField, queryAdapter); } Document responseDocument = documentMapper.toDocument(entities, queryAdapter, parameterProvider); // FIXME related vs self // return explicit { data : null } if values found if (!responseDocument.getData().isPresent()) { responseDocument.setData(Nullable.nullValue()); } return new Response(responseDocument, 200); }
@Override public Response handle(JsonPath jsonPath, QueryAdapter queryAdapter, RepositoryMethodParameterProvider parameterProvider, Document requestBody) { String resourceName = jsonPath.getElementName(); PathIds resourceIds = jsonPath.getIds(); RegistryEntry registryEntry = resourceRegistry.getEntry(resourceName); if (registryEntry == null) { //TODO: Add JsonPath toString and provide to exception? throw new ResourceNotFoundException(resourceName); } for (String id : resourceIds.getIds()) { @SuppressWarnings("unchecked") Class<? extends Serializable> idClass = (Class<? extends Serializable>) registryEntry .getResourceInformation() .getIdField() .getType(); Serializable castedId = registryEntry.getResourceInformation().parseIdString(id); //noinspection unchecked registryEntry.getResourceRepository(parameterProvider).delete(castedId, queryAdapter); } return new Response(null, 204); } }
@Override public final Response handle(JsonPath jsonPath, QueryAdapter queryAdapter, RepositoryMethodParameterProvider parameterProvider, Document requestBody) { String resourceName = jsonPath.getResourceName(); PathIds resourceIds = jsonPath.getIds(); RegistryEntry registryEntry = resourceRegistry.getEntry(resourceName); .getElementName()); if (relationshipField == null) { throw new ResourceFieldNotFoundException(jsonPath.getElementName());
/** * {@inheritDoc} * * Passes the request to controller method. */ @Override public Response handle(JsonPath jsonPath, QueryAdapter queryAdapter, RepositoryMethodParameterProvider parameterProvider, Document requestBody) { String resourceName = jsonPath.getElementName(); PathIds resourceIds = jsonPath.getIds(); RegistryEntry registryEntry = resourceRegistry.getEntry(resourceName); if (registryEntry == null) { throw new ResourceNotFoundException(resourceName); } String id = resourceIds.getIds().get(0); @SuppressWarnings("unchecked") Class<? extends Serializable> idClass = (Class<? extends Serializable>) registryEntry.getResourceInformation().getIdField().getType(); Serializable castedId = typeParser.parse(id, idClass); ResourceRepositoryAdapter resourceRepository = registryEntry.getResourceRepository(parameterProvider); JsonApiResponse entities = resourceRepository.findOne(castedId, queryAdapter); Document responseDocument = documentMapper.toDocument(entities, queryAdapter); // return explicit { data : null } if values found if(!responseDocument.getData().isPresent()){ responseDocument.setData(Nullable.nullValue()); } return new Response(responseDocument, 200); }
/** * {@inheritDoc} * * Checks if requested resource method is acceptable - is a DELETE request for a resource. */ @Override public boolean isAcceptable(JsonPath jsonPath, String requestType) { return !jsonPath.isCollection() && jsonPath instanceof ResourcePath && HttpMethod.DELETE.name().equals(requestType); }
@Override public Response handle(JsonPath jsonPath, QueryAdapter queryAdapter, RepositoryMethodParameterProvider parameterProvider, Document document){ String resourceEndpointName = jsonPath.getResourceName(); RegistryEntry endpointRegistryEntry = resourceRegistry.getEntry(resourceEndpointName); if (endpointRegistryEntry == null) {
@Override public Response handle(JsonPath jsonPath, QueryAdapter queryAdapter, RepositoryMethodParameterProvider parameterProvider, Document requestBody) { String resourceEndpointName = jsonPath.getResourceName(); PathIds resourceIds = jsonPath.getIds(); RegistryEntry endpointRegistryEntry = resourceRegistry.getEntry(resourceEndpointName); .findRelationshipFieldByName(jsonPath.getElementName()); if (relationshipField == null) { throw new ResourceFieldNotFoundException(jsonPath.getElementName());
@Override public boolean isAcceptable(JsonPath jsonPath, String requestType) { return !jsonPath.isCollection() && jsonPath instanceof ResourcePath && HttpMethod.PATCH.name().equals(requestType); }
/** * Check if it is a GET request for a collection of resources. */ @Override public boolean isAcceptable(JsonPath jsonPath, String requestType) { return jsonPath.isCollection() && jsonPath instanceof ResourcePath && HttpMethod.GET.name().equals(requestType); }
/** * {@inheritDoc} * <p> * Check if it is a POST request for a resource. */ @Override public boolean isAcceptable(JsonPath jsonPath, String requestType) { return jsonPath.isCollection() && jsonPath instanceof ResourcePath && HttpMethod.POST.name() .equals(requestType); }
/** * {@inheritDoc} * * Checks if requested resource method is acceptable - is a GET request for * a resource. */ @Override public boolean isAcceptable(JsonPath jsonPath, String requestType) { return !jsonPath.isCollection() && jsonPath instanceof ResourcePath && HttpMethod.GET.name().equals(requestType); }