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

de.digitalcollections.model.list.paging.PageRequest Maven / Gradle / Ivy

package de.digitalcollections.model.list.paging;

import de.digitalcollections.model.list.ListRequest;
import de.digitalcollections.model.list.filtering.Filtering;
import de.digitalcollections.model.list.sorting.Direction;
import de.digitalcollections.model.list.sorting.Order;
import de.digitalcollections.model.list.sorting.Sorting;
import java.util.List;

/**
 * Container for paging, sorting, filtering and searching params:
 *
 * 
    *
  • pageNumber: which page to be returned *
  • pageSize: how many items on one page *
  • sorting: container for sorting order of result list *
  • filtering: container for filter criterias of result list *
  • searchTerm: searchTerm term for simple query term to be searched for *
*/ public class PageRequest extends ListRequest { public static Builder builder() { return new Builder(); } private int pageNumber; private int pageSize; public PageRequest() { super(); init(); } /** * Creates a new {@link PageRequest}. Pages are zero indexed, thus providing 0 for {@code page} * will return the first page. * * @param pageNumber zero-based page index. * @param pageSize the size of the page to be returned. */ public PageRequest(int pageNumber, int pageSize) { this(pageNumber, pageSize, null, null, null); } /** * Creates a new {@link PageRequest} with sorting parameters applied. * * @param pageNumber zero-based page index. * @param pageSize the size of the page to be returned. * @param direction the direction of the {@link Sorting} to be specified, can be {@literal null}. * @param properties the properties to sorting by, must not be {@literal null} or empty. */ public PageRequest(int pageNumber, int pageSize, Direction direction, String... properties) { this(pageNumber, pageSize, new Sorting(direction, properties), null, null); } public PageRequest(int pageNumber, int pageSize, Sorting sorting) { this(pageNumber, pageSize, sorting, null, null); } public PageRequest(int pageNumber, int pageSize, Sorting sorting, Filtering filtering) { this(pageNumber, pageSize, sorting, filtering, null); } public PageRequest(String searchTerm, int pageNumber, int pageSize) { this(pageNumber, pageSize, null, null, searchTerm); } public PageRequest(String searchTerm, int pageNumber, int pageSize, Sorting sorting) { this(pageNumber, pageSize, sorting, null, searchTerm); } /** * Creates a new {@link PageRequest} with sorting parameters applied. * * @param pageNumber zero-based page index, must not be less than zero. * @param pageSize the size of the page to be returned, must not be less than one. * @param sorting can be {@literal null} * @param filtering contains list of filter criterias * @param searchTerm searchTerm term for simple query term to be searched for */ public PageRequest( int pageNumber, int pageSize, Sorting sorting, Filtering filtering, String searchTerm) { super(sorting, filtering, searchTerm); init(); if (pageNumber < 0) { throw new IllegalArgumentException("Page index must not be less than zero!"); } if (pageSize < 1) { throw new IllegalArgumentException("Page size must not be less than one!"); } this.pageNumber = pageNumber; this.pageSize = pageSize; } public PageRequest(int pageNumber, int pageSize, List sortBy) { this(pageNumber, pageSize); if (sortBy != null) { Sorting sorting = new Sorting(sortBy); setSorting(sorting); } } @Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (!(obj instanceof PageRequest)) { return false; } PageRequest that = (PageRequest) obj; boolean searchTermEqual = (this.searchTerm == null ? that.searchTerm == null : this.searchTerm.equals(that.searchTerm)); boolean filterEqual = (this.filtering == null ? that.filtering == null : this.filtering.equals(that.filtering)); boolean sortEqual = (this.sorting == null ? that.sorting == null : this.sorting.equals(that.sorting)); boolean othersEqual = (this.pageNumber == that.pageNumber && this.pageSize == that.pageSize); return searchTermEqual && filterEqual && othersEqual && sortEqual; } /** * @return the {@link PageRequest} requesting the first page */ public PageRequest first() { return new PageRequest(0, getPageSize(), getSorting(), getFiltering(), getSearchTerm()); } /** * @return the offset to be taken according to the underlying page and page size. */ public int getOffset() { return pageNumber * pageSize; } /** * @return the page to be returned. */ public int getPageNumber() { return pageNumber; } /** * @return the number of items of that page */ public int getPageSize() { return pageSize; } /** * @return the search term to be searched for */ /** * Returns whether there's a previous {@link PageRequest} we can access from the current one. Will * return {@literal false} in case the current {@link PageRequest} already refers to the first * page. * * @return whether there's a previous PageRequest */ public boolean hasPrevious() { return pageNumber > 0; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + pageNumber; result = prime * result + pageSize; return 31 * result + (null == sorting ? 0 : sorting.hashCode()) + (null == filtering ? 0 : filtering.hashCode()); } @Override protected void init() { super.init(); } /** * @return the {@link PageRequest} requesting the next page */ public PageRequest next() { return new PageRequest( getPageNumber() + 1, getPageSize(), getSorting(), getFiltering(), getSearchTerm()); } /** * Returns the {@link PageResponse} requesting the previous page. * * @return the PageResponse requesting the previous page */ public PageRequest previous() { return getPageNumber() == 0 ? this : new PageRequest( getPageNumber() - 1, getPageSize(), getSorting(), getFiltering(), getSearchTerm()); } /** * @return the previous {@link PageRequest} or the first {@link PageRequest} if the current one * already is the first one */ public PageRequest previousOrFirst() { return hasPrevious() ? previous() : first(); } /** * @param pageNumber the page to be returned */ public void setPageNumber(int pageNumber) { this.pageNumber = pageNumber; } /** * @param pageSize the number of items of that page */ public void setPageSize(int pageSize) { this.pageSize = pageSize; } @Override public String toString() { return String.format( "Page request [number: %d, size %d, sorting: %s, filtering: %s, searchTerm: %s]", getPageNumber(), getPageSize(), sorting == null ? null : sorting.toString(), filtering == null ? null : filtering.toString(), searchTerm == null ? null : searchTerm); } public static class Builder { private Filtering filtering; private int pageNumber; private int pageSize; private String searchTerm; private Sorting sorting; public PageRequest build() { return new PageRequest(pageNumber, pageSize, sorting, filtering, searchTerm); } public Builder filtering(Filtering filtering) { this.filtering = filtering; return this; } public Builder pageNumber(int pageNumber) { this.pageNumber = pageNumber; return this; } public Builder pageSize(int pageSize) { this.pageSize = pageSize; return this; } public Builder searchTerm(String searchTerm) { this.searchTerm = searchTerm; return this; } public Builder sorting(Sorting sorting) { this.sorting = sorting; return this; } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy