This component is used for navigating through records in cases where the results set is huge and records are displayed as set of records of some predefined size.
Features
- Easy navigation of records
- User can configure the no of records per page
Features
- Easy navigation of records
- User can configure the no of records per page
public class PageNavigator {
int min =1, max,total , recSize;
/**
* This is the constructor
* @param sRecSize the numer of records to display in a page.
*/
public PageNavigator(int sRecSize)
{
this.recSize = sRecSize;
this.max= sRecSize;
}
/**
* function to decrement the records set when the 'Next' button is clicked
*/
public void changeNextValue()
{
if(total==0)
return;
max=max+recSize;
min =max-(recSize-1);
if (max >= total)
{
max=total;
min=(max/recSize)*recSize +1;
}
if(min>total)
{
min =max-(recSize-1);
}
}
/**
* function to decrement the records set when the 'Prev' button is clicked
*/
public void changePrevValue() {
int test = max;
if(total==0) return;
max=max-recSize;
min=min-recSize;
if (min< 0)
{
min=1;
}
if(test%recSize !=0 )
{
max=test-(test%recSize);
}
if(max >total )
max=total;
if( max <=0 ) max=recSize;
if( total <recSize )
max=total;
}
/**
* function to get the first set of records or the First page
*/
public void changeToFirstPage()
{
if(total==0) { min=max=0;return; }
min = 1 ;
max=recSize;
if (total<= recSize && total >0)
{
max=total;
}
}
/**
* function to get the last set of records or the Last page
*/
public void changeToLastPage()
{
if(total==0) { min=max=0;return; }
max=total;
int pageNo = total/recSize;
min = pageNo*recSize +1 ;
if (total<= recSize)
{
min=1;
}
}
/**
* Retrieve the total count of records based on the parameters.Function gets the generated query and updates the value of variable 'total' to the number of records.
*
* @param selectStmt List the colums to be retrieved from table.
* @param tableName List the table to select the value from.
* @param isWhereClausePresent Determin if a Where clause exist for the query.
* @param WhereClause The dynamically constructed query string to append to the where clause
*
*/
public void getTotalCount(String selectStmt,String tableName , boolean isWhereClausePresent,String WhereClause)
{
if(isWhereClausePresent)
{
String query = "select "+selectStmt+ " from "+tableName +"Where " +WhereClause;
}
else
{
String query = "select "+selectStmt+ " from "+tableName + "";
}
//Run the query and get the total count
if(total<recSize && total>0)
{
min = 1;
max= total;
}
if(total==0) min =0;max =0;
}
/**
* Retrieve records based on the parameters . Function executes the generated query and retrieve the results
*
* @param selectStmt List the colums to be retrieved from table.
* @param tableName List the table to select the value from.
* @param isWhereClausePresent Determin if a Where clause exist for the query.
* @param WhereClause The dynamically constructed query string to append to the where clause
*
*
*/
public void getRecordSet(String selectStmt,String tableName , boolean isWhereClausePresent,String WhereClause)
{
if(isWhereClausePresent)
{
String query = "SELECT * FROM (select " +selectStmt +",ROWNUM ROWIDX from " +tableName+ " WHERE "+WhereClause +" ) WHERE ROWIDX >=" +min+" AND ROWIDX <="+max;
}
else
{
String query = "SELECT * FROM (select " +selectStmt +",ROWNUM ROWIDX from " +tableName+ " ) WHERE ROWIDX >=" +min+" AND ROWIDX <="+max;
}
}
/**
* Determine which navation to take from any of these : 'First','Prev','Next','Last'
*
* @param buttonType determine which page to navigate to.
*
*/
public void buttonAction(int buttonType)
{
switch (buttonType)
{
case 1: changeToFirstPage();getRecordSet("*" ,"testTable" , true , "age>30"); break;
case 2: changePrevValue();getRecordSet("*" ,"testTable" , true , "age>30"); break;
case 3: changeNextValue();getRecordSet("*" ,"testTable" , true , "age>30"); break;
case 4: changeToLastPage();getRecordSet("*" ,"testTable" , true , "age>30"); break;
}
}
/*
* The number of records to display in a page can be made configurable.
*
*/
public static void main(String[] args) {
int pageSize =100; //used to set the records per page
PageNavigator pageNavigator = new PageNavigator(pageSize);
pageNavigator.getTotalCount("*" ,"userdetails" , true , "age>30"); //Specify the fileds to be selected , the table and the where Clause if any.
pageNavigator.getRecordSet("*" ,"testTable" , true , "age>30");
//The navigation First ,Prev , Next ,Last can be some actions/ button /links in the page
pageNavigator.buttonAction(3); //Calling Next to return next set of records
}
}