in tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISheet.java [477:542]
public void performPaging(final PageActionEvent pageEvent) {
int first;
if (LOG.isDebugEnabled()) {
LOG.debug("action = '" + pageEvent.getAction().name() + "'");
}
ScrollPosition scrollPosition = getState().getScrollPosition();
scrollPosition.setTop(0);
switch (pageEvent.getAction()) {
case first:
first = 0;
break;
case prev:
first = getFirst() - getRows();
first = Math.max(first, 0);
scrollPosition.setTop(Integer.MAX_VALUE);
break;
case next:
if (hasRowCount()) {
first = getFirst() + getRows();
first = first > getRowCount() ? getFirstRowIndexOfLastPage() : first;
} else {
if (isAtEnd()) {
first = getFirst();
} else {
first = getFirst() + getRows();
}
}
break;
case last:
first = getFirstRowIndexOfLastPage();
break;
case toRow:
case lazy:
first = pageEvent.getValue() - 1;
if (hasRowCount() && first > getFirstRowIndexOfLastPage()) {
first = getFirstRowIndexOfLastPage();
} else if (first < 0) {
first = 0;
}
break;
case toPage:
final int pageIndex = pageEvent.getValue() - 1;
first = pageIndex * getRows();
if (hasRowCount() && first > getFirstRowIndexOfLastPage()) {
first = getFirstRowIndexOfLastPage();
} else if (first < 0) {
first = 0;
}
break;
default:
// may not happen
first = -1;
}
final ValueExpression expression = getValueExpression(Attributes.first.getName());
if (expression != null) {
expression.setValue(getFacesContext().getELContext(), first);
} else {
setFirst(first);
}
getState().setFirst(first);
}