Parent apex class with generic methods for Standardsetcontroller pagination.
/*****************************************************************************************************************
* Name : UTIL_ParentSetController
* @author : ####
* @date : 21/04/2016
* @group : Reusable class
* @description : Virtual class with reusable methods using standardsetcontroller
******************************************************************************************************************/
public virtual class UTIL_ParentSetController {
private ApexPages.StandardSetController controller;
private String baseQuery;
public String nameSearchFld {get; set;}
//** constructor
public UTIL_ParentSetController(String baseQuery) {
this.baseQuery = baseQuery;
query();
}
//** query methods
protected void query() {
// construct the query string
String queryString = baseQuery + ' ' + getWhereClause() + ' ' + getSortClause() + ' limit 10000';
System.debug('queryString: ' + queryString);
// save pageSize
Integer pageSize = this.pageSize;
// reboot standard set controller
controller = new ApexPages.StandardSetController(Database.getQueryLocator(queryString));
// reset pageSize
this.pageSize = pageSize;
}
//** search methods
public PageReference search() {
query();
// return to same page
return null;
}
// override to construct dynamic SOQL where clause
public virtual String getWhereClause() {
if (nameSearchFld != null && nameSearchFld.trim() != ''){
return 'where Name like :nameSearchFld ';
}
else{
return '';
}
}
//** sort methods
public String sortColumn {
get {
if (sortColumn == null){
sortColumn = '';
}
return sortColumn;
}
set {
if (sortColumn != value){
sortAsc = false;
}
sortColumn = value;
}
}
public Boolean sortAsc {
get {
if (sortAsc == null){
sortAsc = false;
}
return sortAsc;
}
set;
}
public PageReference sort() {
sortAsc = !sortAsc;
query();
// return to same page
return null;
}
protected virtual String getSortClause() {
if (sortColumn == '') return '';
else return ' order by ' + sortColumn + (sortAsc ? ' asc ' : ' desc ') + ' nulls last';
}
//** pageable methods
// get records on current page
protected List<SObject> getRecords() {
return controller.getRecords();
}
public void first() {
controller.first();
}
public void previous() {
controller.previous();
}
public void next() {
controller.next();
}
public void last() {
controller.last();
}
public Boolean getHasPrevious() {
return controller.getHasPrevious();
}
public Boolean getHasNext() {
return controller.getHasNext();
}
public Integer getResultSize() {
return controller.getResultSize();
}
public Integer getPageCount() {
Integer resultSize = getResultSize();
Integer oddRecordCount = Math.mod(resultSize, pageSize);
return ((resultSize - oddRecordCount) / pageSize) + (oddRecordCount > 0 ? 1 : 0);
}
public Integer getPageNumber() {
return controller.getPageNumber();
}
public void setPageNumber(Integer pageNumber) {
controller.setPageNumber(pageNumber);
}
public Integer pageSize {
get {
if (controller != null){
pageSize = controller.getPageSize();
}
else{
// default pagesize
pageSize = 20;
}
return pageSize;
}
set {
pageSize = value;
controller.setPageSize(pageSize);
}
}
public Boolean getRenderResults() {
return (getResultSize() > 0);
}
//** update methods
public virtual PageReference save() {
return controller.save();
}
public virtual PageReference cancel() {
return controller.cancel();
}
//** pass reference to UTIL_ParentSetController component
public UTIL_ParentSetController getController () {
return this;
}
}