io.katharsis.dispatcher.controller.collection.CollectionGet Maven / Gradle / Ivy
package io.katharsis.dispatcher.controller.collection;
import io.katharsis.dispatcher.controller.HttpMethod;
import io.katharsis.dispatcher.controller.resource.ResourceIncludeField;
import io.katharsis.queryParams.QueryParams;
import io.katharsis.repository.RepositoryMethodParameterProvider;
import io.katharsis.request.dto.RequestBody;
import io.katharsis.request.path.JsonPath;
import io.katharsis.request.path.ResourcePath;
import io.katharsis.resource.exception.ResourceNotFoundException;
import io.katharsis.resource.include.IncludeLookupSetter;
import io.katharsis.resource.registry.RegistryEntry;
import io.katharsis.resource.registry.ResourceRegistry;
import io.katharsis.resource.registry.responseRepository.ResourceRepositoryAdapter;
import io.katharsis.response.BaseResponseContext;
import io.katharsis.response.CollectionResponseContext;
import io.katharsis.response.JsonApiResponse;
import io.katharsis.utils.parser.TypeParser;
import java.io.Serializable;
public class CollectionGet extends ResourceIncludeField {
public CollectionGet(ResourceRegistry resourceRegistry, TypeParser typeParser, IncludeLookupSetter fieldSetter) {
super(resourceRegistry, typeParser, fieldSetter);
}
/**
* 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);
}
@Override
@SuppressWarnings("unchecked")
public BaseResponseContext handle(JsonPath jsonPath, QueryParams queryParams, RepositoryMethodParameterProvider
parameterProvider, RequestBody requestBody) {
String resourceName = jsonPath.getElementName();
RegistryEntry registryEntry = resourceRegistry.getEntry(resourceName);
if (registryEntry == null) {
throw new ResourceNotFoundException(resourceName);
}
JsonApiResponse response;
ResourceRepositoryAdapter resourceRepository = registryEntry.getResourceRepository(parameterProvider);
if (jsonPath.getIds() == null || jsonPath.getIds().getIds().isEmpty()) {
response = resourceRepository.findAll(queryParams);
} else {
Class idType = (Class)registryEntry
.getResourceInformation().getIdField().getType();
Iterable parsedIds = typeParser.parse((Iterable) jsonPath.getIds().getIds(),
idType);
response = resourceRepository.findAll(parsedIds, queryParams);
}
includeFieldSetter.setIncludedElements(resourceName, response, queryParams, parameterProvider);
return new CollectionResponseContext(response, jsonPath, queryParams);
}
}