/** * 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; }
@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); } }
String idString = jsonPath.getIds().getIds().get(0);
@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); }
/** * {@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); }
@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 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); }
RepositoryMethodParameterProvider parameterProvider, Document requestBody) { String resourceName = jsonPath.getResourceName(); PathIds resourceIds = jsonPath.getIds(); RegistryEntry registryEntry = resourceRegistry.getEntry(resourceName);
RepositoryMethodParameterProvider parameterProvider, Document requestBody) { String resourceEndpointName = jsonPath.getResourceName(); PathIds resourceIds = jsonPath.getIds(); RegistryEntry endpointRegistryEntry = resourceRegistry.getEntry(resourceEndpointName);