Page.java
package com.tradecloud.domain.helper;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;
import java.util.List;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Page")
public class Page<T> {
@XmlElement(name = "Result")
private List<T> results = new ArrayList<T>();
@XmlElement(name = "PageSize")
private int pageSize = 0;
@XmlElement(name = "PageNumber")
private int pageNumber = 0;
@XmlElement(name = "LastPageNumber")
private int lastPageNumber = 0;
@XmlElement(name = "TotalPages")
private int totalPages = 0;
public Page() {
}
/**
* The List is meant to be the page of a larger set. So results.size ==
* pageSize.
*/
public Page(List<T> results, int pageNumber, int pageSize, int totalPages) {
this.results = results;
this.pageNumber = pageNumber;
this.pageSize = pageSize;
}
/**
* @deprecated This Constructor is a Does bad Paging its more like a
* Splitter than a page. Useful where you want to page a list!.
* Rather use @link #Page(Criteria query, int pageNumber, int
* pageSize)
* <p>
* This call is a bit bad because the list is kept in tact, and
* totalPages is calced from it's size .. list of size 25,
* pageSize 10, will give totalPages 3
*/
@Deprecated
public Page(List<T> results, int pageNumber, int pageSize) {
this.results = results;
this.pageNumber = pageNumber;
this.pageSize = pageSize;
lastPageNumber = new Double(Math.floor(results.size() / this.pageSize)).intValue();
totalPages = new Double(Math.ceil(new Double(results.size()) / new Double(this.pageSize))).intValue();
if (pageNumber == -1 || pageNumber > lastPageNumber) {
this.pageNumber = lastPageNumber;
}
if (results.size() > 0) {
int startIndex = this.pageNumber * this.pageSize;
int endIndex = (startIndex + pageSize);
endIndex = endIndex > results.size() ? results.size() : endIndex;
this.results = results.subList(startIndex, endIndex);
}
}
public boolean isNextPage() {
return results.size() > pageSize;
}
public boolean isPreviousPage() {
return pageNumber > 0;
}
public List<T> getList() {
return isNextPage() ? results.subList(0, pageSize) : results;
}
public int getPageNumber() {
return pageNumber;
}
public int getLastPageNumber() {
return lastPageNumber;
}
public int getTotalPages() {
return totalPages;
}
public int getPageSize() {
return pageSize;
}
}