package org.jboss.seam.wiki.core.action;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.web.RequestParameter;
import org.jboss.seam.ScopeType;
import org.jboss.seam.core.Events;
import java.io.Serializable;
@Name("pager")
@Scope(ScopeType.PAGE)
@AutoCreate
public class Pager implements Serializable {
private String pagerEventName = "Pager";
private Long numOfRecords = 0l;
private Integer page = 0;
private Long pageSize = 15l;
public Pager() {}
public Pager(Long pageSize) {
this.pageSize = pageSize;
}
public Pager(String pagerEventName) {
this.pagerEventName = pagerEventName;
}
public Pager(String pagerEventName, Long pageSize) {
this.pagerEventName = pagerEventName;
this.pageSize = pageSize;
}
public Long getNumOfRecords() {
return numOfRecords;
}
public void setNumOfRecords(Long numOfRecords) {
this.numOfRecords = numOfRecords;
}
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
if (page != null) this.page = page;
}
public Long getPageSize() {
return pageSize;
}
@RequestParameter
public void setPageSize(Long pageSize) {
if (pageSize != null) this.pageSize = pageSize;
}
public int getNextPage() {
return page + 1;
}
public int getPreviousPage() {
return page - 1;
}
public int getFirstPage() {
return 0;
}
public long getFirstRecord() {
return page * pageSize + 1;
}
public long getLastRecord() {
return (page * pageSize + pageSize) > numOfRecords
? numOfRecords
: page * pageSize + pageSize;
}
public long getNextRecord() {
return page * pageSize;
}
public long getLastPage() {
long lastPage = (numOfRecords / pageSize);
if (numOfRecords % pageSize == 0) lastPage--;
return lastPage;
}
public boolean isNextPageAvailable() {
return numOfRecords > ((page * pageSize) + pageSize);
}
public boolean isPreviousPageAvailable() {
return numOfRecords != null && page > 0;
}
public int getQueryFirstResult() {
return new Long(getPage() * getPageSize()).intValue();
}
public int getQueryMaxResults() {
return new Long(getPageSize()).intValue();
}
public boolean isSeveralPages() {
return getNumOfRecords() != 0 && getNumOfRecords() > getPageSize();
}
public void setFirstPage() {
setPage(getFirstPage());
Events.instance().raiseEvent(pagerEventName + "pageChanged");
}
public void setPreviousPage() {
setPage(getPreviousPage());
Events.instance().raiseEvent(pagerEventName + ".pageChanged");
}
public void setNextPage() {
setPage(getNextPage());
Events.instance().raiseEvent(pagerEventName + ".pageChanged");
}
public void setLastPage() {
setPage(new Long(getLastPage()).intValue());
Events.instance().raiseEvent(pagerEventName + ".pageChanged");
}
public String toString() {
return "Pager - Records: " + getNumOfRecords() + " Page size: " + getPageSize();
}
}