/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.paging.Paging;
/**
* Output of paging for website tables.
*/
public class WebPaging {
/**
* The paging.
*/
private final Paging _paging;
/**
* The URI.
*/
private final UriInfo _uriInfo;
/**
* Creates an instance.
* @param paging the paging to display, not null
* @param uriInfo the URI, not null
*/
public WebPaging(Paging paging, UriInfo uriInfo) {
ArgumentChecker.notNull(paging, "Paging must not be null");
ArgumentChecker.notNull(uriInfo, "UriInfo must not be null");
_paging = paging;
_uriInfo = uriInfo;
}
//-------------------------------------------------------------------------
/**
* Gets the first item, using a zero-based index.
*
* @return the first item index, zero-based
*/
public int getFirstItem() {
return _paging.getFirstItem();
}
/**
* Gets the page size, which is the number of items requested.
* <p>
* This is zero if no data was requested.
*
* @return the number of items in the page, zero or greater
*/
public int getPagingSize() {
return _paging.getPagingSize();
}
/**
* Gets the total number of items.
*
* @return the number of items, zero or greater
*/
public int getTotalItems() {
return _paging.getTotalItems();
}
//-------------------------------------------------------------------------
/**
* Gets the first item, using a one-based index.
*
* @return the first item number, one-based
*/
public int getFirstItemOneBased() {
return _paging.getFirstItemOneBased();
}
/**
* Gets the last item exclusive, using a zero-based index.
*
* @return the last item index, exclusive, zero-based
*/
public int getLastItem() {
return _paging.getLastItem();
}
/**
* Gets the last item inclusive, using a one-based index.
*
* @return the last item number, inclusive, one-based
*/
public int getLastItemOneBased() {
return _paging.getLastItemOneBased();
}
//-------------------------------------------------------------------------
/**
* Gets the current page number, one-based, when viewed as traditional paging.
* <p>
* If the request was for index-based paging rather than traditional paging
* then the result of this method will be the effective page of the first item.
*
* @return the current page, one or greater
*/
public int getPageNumber() {
return _paging.getPageNumber();
}
/**
* Gets the total number of pages, one-based, when viewed as traditional paging.
*
* @return the number of pages, one or greater
* @throws ArithmeticException if a paging request of NONE was used
*/
public int getTotalPages() {
return _paging.getTotalPages();
}
//-------------------------------------------------------------------------
/**
* Checks if there is a previous page.
*
* @return true if there is a previous page
*/
public boolean isPreviousPageExists() {
return (getPageNumber() > 1);
}
/**
* Checks if there is a next page.
*
* @return true if there is a next page
*/
public boolean isNextPageExists() {
return (getPageNumber() < getTotalPages());
}
/**
* Gets an object representing the first page.
*
* @return the first page, not null
*/
public WebPagingPage getFirstPage() {
return new WebPagingPage(1);
}
/**
* Gets an object representing the first page.
*
* @return the last page, not null
*/
public WebPagingPage getLastPage() {
return new WebPagingPage(getTotalPages());
}
/**
* Gets an object representing the previous page.
*
* @return the previous page, not null
*/
public WebPagingPage getPreviousPage() {
int page = getPageNumber();
return (page > 1 ? new WebPagingPage(page - 1) : null);
}
/**
* Gets an object representing the next page.
*
* @return the next page, not null
*/
public WebPagingPage getNextPage() {
int page = getPageNumber();
return (page < getTotalPages() ? new WebPagingPage(page + 1) : null);
}
/**
* Gets the paging items, excluding the first and last pages.
*
* @return the paging item list, not null
*/
public List<WebPagingPage> getPagesIncludeLast() {
int basePage = getPageNumber();
List<WebPagingPage> list = new ArrayList<WebPagingPage>();
for (int i = basePage - 3; i <= basePage + 3; i++) {
if (i < 1 || i > getTotalPages()) {
continue;
}
list.add(new WebPagingPage(i));
}
return list;
}
/**
* Gets the paging items, excluding the last page.
*
* @return the paging item list, not null
*/
public List<WebPagingPage> getPagesExcludeLast() {
int basePage = getPageNumber();
List<WebPagingPage> list = new ArrayList<WebPagingPage>();
for (int i = basePage - 3; i <= basePage + 3; i++) {
if (i < 1 || i >= getTotalPages()) {
continue;
}
list.add(new WebPagingPage(i));
}
return list;
}
/**
* Gets the paging items, excluding the last page.
*
* @return the paging item list, not null
*/
public List<WebPagingPage> getPagesExcludeFirstLast() {
int basePage = getPageNumber();
List<WebPagingPage> list = new ArrayList<WebPagingPage>();
for (int i = basePage - 3; i <= basePage + 3; i++) {
if (i <= 1 || i >= getTotalPages()) {
continue;
}
list.add(new WebPagingPage(i));
}
return list;
}
/**
* Gets the standard paging items.
*
* @return the paging item list, not null
*/
public List<WebPagingPage> getPagesStandard() {
int basePage = getPageNumber();
List<WebPagingPage> list = new ArrayList<WebPagingPage>();
list.add(new WebPagingPage(1));
for (int i = basePage - 3; i <= basePage + 3; i++) {
if (i <= 1 || i >= getTotalPages()) {
continue;
}
list.add(new WebPagingPage(i));
}
if (getTotalPages() > 1) {
list.add(new WebPagingPage(getTotalPages()));
}
return list;
}
//-------------------------------------------------------------------------
/**
* A page within the paging.
*/
public final class WebPagingPage {
/**
* The page number.
*/
private final int _page;
/**
* Creates an instance.
*/
WebPagingPage(int page) {
_page = page;
}
/**
* Gets the page number.
*
* @return the page number, not null
*/
public int getPageNumber() {
return _page;
}
/**
* Checks if this page is the current page.
*
* @return the page, not null
*/
public boolean isCurrentPage() {
return _page == WebPaging.this.getPageNumber();
}
/**
* Gets the URI for the page.
*
* @return the URI, not null
*/
public URI getUri() {
UriBuilder builder = _uriInfo.getRequestUriBuilder();
builder.replaceQueryParam("pgNum", _page);
return builder.build();
}
}
}