PaginationView.java 3.37 KB
package fi.insomnia.bortal.web.cdiview;

import java.util.List;

import javax.faces.model.ListDataModel;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;

public abstract class PaginationView<T extends ModelInterface> extends GenericCDIView implements IPaginationView {

	private static final long serialVersionUID = -1226554409762987631L;
	// protected Integer page = 0;
	// protected Integer pagesize = 20;
	private SearchQuery searchQuery = new SearchQuery();
	protected Long resultcount = 0L;
	private Long pagecount = 0L;

	// protected String sort;
	// protected String search;
	private List<T> results;
	private ListDataModel<T> resultdatamodel;
	private static Logger logger = LoggerFactory.getLogger(PaginationView.class);

	// public abstract void initView();

	public void setResult(SearchResult<T> products) {
		setResultcount(products.getResultcount());
		setResults(products.getResults());
	}

	public String addToPage(Integer count) {
		pagechangeCallback();
		getSearchQuery().addPage(count);

		if (getSearchQuery().getPage() >= pagecount) {
			getSearchQuery().setPage(pagecount.intValue() - 1);
		}
		return null;
	}

	protected void pagechangeCallback() {
		// logger.info("NOT Overriden pagechange callback");
		results = null;
		resultdatamodel = null;
	}

	public String gotoFirstpage() {
		// logger.info("Setting page to first page");
		pagechangeCallback();
		getSearchQuery().setPage(0);
		return null;
	}

	public String gotoLastpage() {
		// logger.info("Setting page to last page");
		pagechangeCallback();
		getSearchQuery().setPage(pagecount.intValue() - 1);
		return null;

	}

	public ListDataModel<T> getResultdatamodel() {
		if (resultdatamodel == null) {
			resultdatamodel = new ListDataModel<T>(results);
		}
		return resultdatamodel;
	}

	@Override
	public Integer getPage() {
		return getSearchQuery().getPage();
	}

	public void setPage(Integer page) {
		getSearchQuery().setPage(page);
	}

	@Override
	public Integer getPagesize() {
		return getSearchQuery().getPagesize();
	}

	public void setPagesize(Integer pagesize) {
		getSearchQuery().setPagesize(pagesize);
	}

	@Override
	public Long getResultcount() {
		return resultcount;
	}

	public void setResultcount(Long resultcount) {
		this.resultcount = resultcount;
		pagecount = ((resultcount + getSearchQuery().getPagesize() - 1) / getSearchQuery().getPagesize());
	}

	@Override
	public Long getPagecount() {
		return pagecount;
	}

	public void setPagecount(Long pagecount) {
		this.pagecount = pagecount;
	}

	public String getSort() {
		return getSearchQuery().getSort();
	}

	public void setSort(String sort) {
		getSearchQuery().setSort(sort);
	}

	public String getSearch() {
		return getSearchQuery().getSearch();
	}

	public void setSearch(String search) {
		getSearchQuery().setSearch(search);
	}

	public String newSearch() {
		logger.info("Setting new Search for pagination..");
		setPage(0);
		setResults(null);
		resultdatamodel = null;
		return null;
	}

	public List<T> getResults() {
		return results;
	}

	public void setResults(List<T> results) {
		this.results = results;
		resultdatamodel = null;
	}

	public SearchQuery getSearchQuery() {
		return searchQuery;
	}

	public void setSearchQuery(SearchQuery searchQuery) {
		this.searchQuery = searchQuery;
	}

}