package io.katharsis.resource.registry.responseRepository; import io.katharsis.queryParams.QueryParams; import io.katharsis.repository.ResourceRepository; import io.katharsis.repository.annotated.AnnotatedResourceRepositoryAdapter; import io.katharsis.response.JsonApiResponse; import java.io.Serializable; /** * A repository adapter for resource repository. */ @SuppressWarnings("unchecked") public class ResourceRepositoryAdapter<T, ID extends Serializable> extends ResponseRepository { private final Object resourceRepository; private final boolean isAnnotated; public ResourceRepositoryAdapter(Object resourceRepository) { this.resourceRepository = resourceRepository; this.isAnnotated = resourceRepository instanceof AnnotatedResourceRepositoryAdapter; } public JsonApiResponse findOne(ID id, QueryParams queryParams) { Object resource; if (isAnnotated) { resource = ((AnnotatedResourceRepositoryAdapter) resourceRepository).findOne(id, queryParams); } else { resource = ((ResourceRepository) resourceRepository).findOne(id, queryParams); } return getResponse(resourceRepository, resource, queryParams); } public JsonApiResponse findAll(QueryParams queryParams) { Object resources; if (isAnnotated) { resources = ((AnnotatedResourceRepositoryAdapter) resourceRepository).findAll(queryParams); } else { resources = ((ResourceRepository) resourceRepository).findAll(queryParams); } return getResponse(resourceRepository, resources, queryParams); } public JsonApiResponse findAll(Iterable ids, QueryParams queryParams) { Object resources; if (isAnnotated) { resources = ((AnnotatedResourceRepositoryAdapter) resourceRepository).findAll(ids, queryParams); } else { resources = ((ResourceRepository) resourceRepository).findAll(ids, queryParams); } return getResponse(resourceRepository, resources, queryParams); } public <S extends T> JsonApiResponse save(S entity, QueryParams queryParams) { Object resource; if (isAnnotated) { resource = ((AnnotatedResourceRepositoryAdapter) resourceRepository).save(entity); } else { resource = ((ResourceRepository) resourceRepository).save(entity); } return getResponse(resourceRepository, resource, queryParams); } public JsonApiResponse delete(ID id, QueryParams queryParams) { if (isAnnotated) { ((AnnotatedResourceRepositoryAdapter) resourceRepository).delete(id, queryParams); } else { ((ResourceRepository) resourceRepository).delete(id); } return new JsonApiResponse(); } }