package mock.controllers.api.pagination; import com.github.aesteve.vertx.nubes.annotations.Controller; import com.github.aesteve.vertx.nubes.annotations.mixins.ContentType; import com.github.aesteve.vertx.nubes.annotations.params.Param; import com.github.aesteve.vertx.nubes.annotations.routing.http.GET; import com.github.aesteve.vertx.nubes.context.PaginationContext; import com.github.aesteve.vertx.nubes.marshallers.Payload; import io.vertx.core.http.HttpServerResponse; import mock.domains.Dog; import java.util.ArrayList; import java.util.List; @Controller("/pagination/") @ContentType("application/json") public class PaginationTestController { /** * Not paginated. Doesn't matter we use pagination on other methods */ @GET("notPaginated") public void notPaginated(HttpServerResponse response) { response.end(); } /** * Paginated, with one single result * A warning should be logged but should not fail */ @GET("paginationContextAvailable") public void paginationContextAvailable(PaginationContext pageContext, Payload<Dog> payload) { payload.set(new Dog("Milou", "Fox terrier")); } /** * Paginated, sends as many results as specified in "nbResults" query parameter */ @GET("sendResults") public void sendResults(@Param("nbResults") Integer nbResults, PaginationContext pageContext, Payload<List<Dog>> payload) { List<Dog> dogs = new ArrayList<>(nbResults); for (int i = 0; i < nbResults; i++) { dogs.add(new Dog("My name is dog number " + i + " I wish I have a real name :'( ", "Border collie")); } // User will have to truncate it's data (especially set a Limit on the database query for example) pageContext.setNbItems(nbResults); payload.set(dogs.subList(pageContext.firstItemInPage(), pageContext.lastItemInPage())); } }