package org.restler.spring.data.methods; import com.google.common.collect.ImmutableMultimap; import org.restler.client.Call; import org.restler.client.RestlerException; import org.restler.http.HttpCall; import org.restler.http.HttpMethod; import org.restler.spring.data.calls.ConvertToPageCallEnhancer; import org.restler.spring.data.util.ArrayListType; import org.restler.spring.data.util.PageType; import org.springframework.data.domain.Pageable; import org.springframework.data.repository.PagingAndSortingRepository; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.net.URI; public class FindAllPageableRepositoryMethod extends DefaultRepositoryMethod { private static final Method findAllMethod; static { try { findAllMethod = PagingAndSortingRepository.class.getMethod("findAll", Pageable.class); } catch (NoSuchMethodException e) { throw new RestlerException("Can't find CrudRepository.findAll method.", e); } } @Override protected Call getCall(URI uri, Class<?> declaringClass, Object[] args) { Type itemType = getRepositoryType(declaringClass).getActualTypeArguments()[0]; Call httpCall = new HttpCall(uri, HttpMethod.GET, null, ImmutableMultimap.of("Content-Type", "application/json"), new ArrayListType(itemType)); return new ConvertToPageCallEnhancer.ConvertToPageCall(httpCall, new PageType(itemType)); } @Override protected String getPathPart(Object[] args) { Pageable page = (Pageable) args[0]; return "?page=" + page.getPageNumber() + "&size=" + page.getPageSize() + "&sort=" + page.getSort().toString().replace(": ", ","); } @Override public boolean isRepositoryMethod(Method method) { return findAllMethod.equals(method); } }