diff options
Diffstat (limited to 'orkweb/src/net/sf/oreka/tapestry/TablePaging.java')
-rw-r--r-- | orkweb/src/net/sf/oreka/tapestry/TablePaging.java | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/orkweb/src/net/sf/oreka/tapestry/TablePaging.java b/orkweb/src/net/sf/oreka/tapestry/TablePaging.java new file mode 100644 index 0000000..e401543 --- /dev/null +++ b/orkweb/src/net/sf/oreka/tapestry/TablePaging.java @@ -0,0 +1,106 @@ +/* + * Oreka -- A media capture and retrieval platform + * + * Copyright (C) 2005, orecx LLC + * + * http://www.orecx.com + * + * This program is free software, distributed under the terms of + * the GNU General Public License. + * Please refer to http://www.gnu.org/copyleft/gpl.html + * + */ + +/** + * + */ +package net.sf.oreka.tapestry; + +import java.util.*; +import org.apache.log4j.*; +import org.apache.tapestry.*; + + +public abstract class TablePaging extends BaseComponent { + + static Logger logger = Logger.getLogger(TablePaging.class); + + public abstract TableState getTableState(); + public abstract void setTableState(TableState state); + + Integer sliderPosition; + + public void firstPageAction(IRequestCycle cycle) { + getTableState().setNumResults(0); + setTableState(getTableState()); // persist ! + } + + public void previousPageAction(IRequestCycle cycle) { + TableState ps = getTableState(); + if ( (ps.getCurrentOffset() - ps.getResultsPerPage()) >= 0 ) { + ps.setCurrentOffset(ps.getCurrentOffset() - ps.getResultsPerPage()); + } + setTableState(getTableState()); // persist ! + } + + public void nextPageAction(IRequestCycle cycle) { + //logger.log(Level.INFO, "before:" + getPagingState().getCurrentPage()); + //getPagingState().setCurrentPage(getPagingState().getCurrentPage()+1); + //logger.log(Level.INFO, "after:" + getPagingState().getCurrentPage()); + + TableState ps = getTableState(); + if ( (ps.getCurrentOffset() + ps.getResultsPerPage()) < ps.getNumResults() ) { + ps.setCurrentOffset(ps.getCurrentOffset() + ps.getResultsPerPage()); + } + setTableState(getTableState()); // persist ! + } + + public void lastPageAction(IRequestCycle cycle) { + + TableState ps = getTableState(); + double numPages = (double)ps.getNumResults() / ps.getResultsPerPage(); + numPages = java.lang.Math.ceil(numPages); + //int numWholePages = ps.getNumResults() / ps.getResultsPerPage(); + //int remainder = ps.getNumResults() % ps.getResultsPerPage(); + //int lastPageOffset = 0; + //if (remainder > 0) { + // lastPageOffset = numWholePages * ps.getResultsPerPage(); + //} + //else if (numWholePages > 0){ + // lastPageOffset = (numWholePages - 1) * ps.getResultsPerPage(); + //} + int lastPageOffset = 0; + if (numPages >= 1) { + lastPageOffset = (int)(numPages-1) * ps.getResultsPerPage(); + } + ps.setCurrentOffset(lastPageOffset); + setTableState(getTableState()); // persist ! + } + + public void sliderClickAction(IRequestCycle cycle) { + + Object[] parameters = cycle.getServiceParameters(); + Integer sliderPosition = (Integer)parameters[0]; + + TableState ts = getTableState(); + ts.setSliderPosition(sliderPosition); + double newOffset = ((double)ts.getNumResults() / getSliderPositions().size()) * sliderPosition.intValue(); + ts.setCurrentOffset((int)newOffset); + logger.log(Level.INFO, "Slider: pos:" + sliderPosition.intValue() + " offset:" + newOffset); + setTableState(getTableState()); // persist ! + } + + /** + * @return Returns the sliderPositions. + */ + public List getSliderPositions() { + + ArrayList sliderPositions = new ArrayList(); + int numPositions = java.lang.Math.min(getTableState().getNumPages(), 20); + for(int i=0;i<numPositions;i++) { + sliderPositions.add(new Integer(i)); + } + return sliderPositions; + } + +} |