PageParameters.java

  1. package no.nav.data.common.rest;

  2. import io.swagger.v3.oas.annotations.media.Schema;
  3. import lombok.AllArgsConstructor;
  4. import lombok.Data;
  5. import lombok.NoArgsConstructor;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.data.domain.PageRequest;
  8. import org.springframework.data.domain.Pageable;
  9. import org.springframework.data.domain.Sort;

  10. @Slf4j
  11. @Data
  12. @AllArgsConstructor
  13. @NoArgsConstructor
  14. public class PageParameters {

  15.     @Schema(defaultValue = "0", minimum = "0")
  16.     private int pageNumber = 0;
  17.     @Schema(defaultValue = "20", minimum = "1", maximum = "250")
  18.     private int pageSize = 20;

  19.     public Pageable createIdSortedPage() {
  20.         validate();
  21.         return PageRequest.of(pageNumber, pageSize, Sort.by("id"));
  22.     }

  23.     public Pageable createSortedPageByFieldDescending(String fieldName) {
  24.         validate();
  25.         return PageRequest.of(pageNumber, pageSize, Sort.by(fieldName).descending());
  26.     }

  27.     private void validate() {
  28.         if (pageNumber < 0) {
  29.             log.warn("invalid pageNumber {}, setting to 0", pageNumber);
  30.             pageNumber = 0;
  31.         }
  32.         if (pageSize < 1) {
  33.             log.warn("invalid pageSize {}, setting to 1", pageSize);
  34.             pageSize = 1;
  35.         }
  36.         if (pageSize > 250) {
  37.             log.warn("invalid pageSize {}, setting to 250", pageSize);
  38.             pageSize = 250;
  39.         }
  40.     }
  41. }