All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.data.web.PageableHandlerMethodArgumentResolverCustom Maven / Gradle / Ivy

package org.springframework.data.web;

import java.util.Iterator;

import org.springframework.core.MethodParameter;
import org.springframework.core.Ordered;
import org.springframework.data.domain.OffsetRequest;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.util.Assert;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.ModelAndViewContainer;

public class PageableHandlerMethodArgumentResolverCustom extends PageableHandlerMethodArgumentResolver implements Ordered {
  private static final String DEFAULT_NEXT_PARAMETER = "next";
  private static final String DEFAULT_PREV_PARAMETER = "prev";

  private static final String DEFAULT_ALL_PARAMETER = "all";

  static final Order DEFAULT_ORDER = new Order(Direction.DESC, "id");
  private Order fallbackOrder = DEFAULT_ORDER;
  private String nextParameterName = DEFAULT_NEXT_PARAMETER;
  private String prevParameterName = DEFAULT_PREV_PARAMETER;
  private String allParameterName = DEFAULT_ALL_PARAMETER;

  private int order = 0;

  public PageableHandlerMethodArgumentResolverCustom(SortHandlerMethodArgumentResolver sortResolver) {
    super(sortResolver);
    setFallbackPageable(new PageRequest(0, 10, new org.springframework.data.domain.Sort(this.fallbackOrder)));
    setMaxPageSize(Integer.MAX_VALUE);
  }

  public void setFallbackOrder(Order order) {
    Assert.notNull(order, "Order must not be null!");
    this.fallbackOrder = order;
  }

  public void setNextParameterName(String nextParameterName) {
    Assert.hasText(nextParameterName, "Next parameter name must not be null or empty!");
    this.nextParameterName = nextParameterName;
  }

  public void setPrevParameterName(String prevParameterName) {
    Assert.hasText(prevParameterName, "Prev parameter name must not be null or empty!");
    this.prevParameterName = prevParameterName;
  }

  public void setAllParameterName(String allParameterName) {
    Assert.hasText(allParameterName, "All parameter name must not be null or empty!");
    this.allParameterName = allParameterName;
  }

  /**
   * 
   * StringUtils.hasText(next) && (direction = Direction.fromStringOrNull(next)) == null && StringUtils.hasText(prev) && (direction = Direction.fromStringOrNull(prev)) == null
   * 
*/ @Override public Pageable resolveArgument(MethodParameter methodParameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { Pageable pageable = super.resolveArgument(methodParameter, mavContainer, webRequest, binderFactory); if (pageable == null) { return null; } if (webRequest.getParameter(getParameterNameToUse(this.allParameterName, methodParameter)) != null) { return new PageRequest(0, Integer.MAX_VALUE, pageable.getSort()); } String nextString = webRequest.getParameter(getParameterNameToUse(this.nextParameterName, methodParameter)); String prevString = webRequest.getParameter(getParameterNameToUse(this.prevParameterName, methodParameter)); if ((nextString == null && prevString == null) || (nextString != null && prevString != null)) { return new OffsetRequest(pageable.getPageNumber(), pageable.getPageSize(), pageable.getSort(), getPageParameterName(), getSizeParameterName(), this.nextParameterName, this.prevParameterName); } Iterator iterator; Order result = (pageable.getSort() != null && (iterator = pageable.getSort().iterator()) != null && iterator.hasNext() && (result = iterator.next()).getProperty().equals(this.fallbackOrder.getProperty()) && !iterator.hasNext()) ? result : null; if (result == null) { return new OffsetRequest(pageable.getPageNumber(), pageable.getPageSize(), pageable.getSort(), getPageParameterName(), getSizeParameterName(), this.nextParameterName, this.prevParameterName); } int id = nextString == null ? -pageable.getPageNumber() : pageable.getPageNumber(); return new OffsetRequest(0, pageable.getPageSize(), pageable.getSort(), getPageParameterName(), getSizeParameterName(), this.nextParameterName, this.prevParameterName, result.getDirection(), id); } public void setOrder(int order) { this.order = order; } @Override public int getOrder() { return order; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy