package br.com.citframework.integracao.core;
import java.io.Serializable;
import br.com.citframework.util.Assert;
/**
* Implementa��o b�sica de {@link Pageable}
*
* @author bruno.ribeiro - <a href="mailto:bruno.ribeiro@centrait.com.br">bruno.ribeiro@centrait.com.br</a>
* @since 01/10/2014
* @see <a href="http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/PageRequest.html">org.springframework.data.domain.PageRequest</a>
*/
public class PageRequest implements Pageable, Serializable {
private static final long serialVersionUID = -5059751141333468480L;
private final int page;
private final int size;
/**
* Cria uma nova {@link PageRequest}. P�ginas s�o iniciadas de zero, ent�o informando {@code 0} for {@code page} ir� retornar a primeira p�gina
*
* @param page
* baseado em zero (ou seja, inicia em 0) �ndice
* @param size
* tamanho da p�gina a ser retornado
*/
public PageRequest(final int page, final int size) {
Assert.isTrue(page >= 0, "Page index must not be less than zero!");
Assert.isTrue(size >= 1, "Page size must not be less than one!");
this.page = page;
this.size = size;
}
@Override
public Pageable next() {
return new PageRequest(this.getPageNumber() + 1, this.getPageSize());
}
@Override
public Pageable previous() {
return this.getPageNumber() == 0 ? this : new PageRequest(this.getPageNumber() - 1, this.getPageSize());
}
@Override
public Pageable first() {
return new PageRequest(0, this.getPageSize());
}
@Override
public int getPageSize() {
return size;
}
@Override
public int getPageNumber() {
return page;
}
@Override
public int getOffset() {
return page * size;
}
@Override
public boolean hasPrevious() {
return page > 0;
}
@Override
public Pageable previousOrFirst() {
return this.hasPrevious() ? this.previous() : this.first();
}
@Override
public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof PageRequest)) {
return false;
}
final PageRequest that = (PageRequest) obj;
return page == that.page && size == that.size;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + page;
result = prime * result + size;
return result;
}
@Override
public String toString() {
return String.format("Page request [number: %d, size %d]", this.getPageNumber(), this.getPageSize());
}
}