package fr.openwide.maven.artifact.notifier.web.application.common.component.navigation; import org.apache.wicket.markup.html.link.AbstractLink; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.navigation.paging.IPageable; import org.apache.wicket.markup.html.navigation.paging.IPagingLabelProvider; import org.apache.wicket.request.mapper.parameter.PageParameters; import com.google.common.primitives.Ints; import fr.openwide.core.wicket.more.markup.html.navigation.paging.BootstrapPagingNavigation; import fr.openwide.core.wicket.more.markup.html.navigation.paging.HideablePagingNavigator; import fr.openwide.maven.artifact.notifier.web.application.navigation.util.LinkUtils; public class HideableBookmarkablePagingNavigator extends HideablePagingNavigator { private static final long serialVersionUID = -7800388489760885324L; public static final String PAGE_NUMBER_PARAMETER = LinkUtils.PAGE_NUMBER_PARAMETER; public HideableBookmarkablePagingNavigator(String id, IPageable pageable, int viewSize) { super(id, pageable, viewSize); } public HideableBookmarkablePagingNavigator(String id, IPageable pageable, IPagingLabelProvider labelProvider, int viewSize) { super(id, pageable, labelProvider, viewSize); } public HideableBookmarkablePagingNavigator(String id, IPageable pageable, IPagingLabelProvider labelProvider) { super(id, pageable, labelProvider); } public HideableBookmarkablePagingNavigator(String id, IPageable pageable) { super(id, pageable); } @Override protected AbstractLink newPagingNavigationLink(String id, IPageable pageable, int pageNumber) { PageParameters parameters = new PageParameters(getPage().getPageParameters()); parameters.set(PAGE_NUMBER_PARAMETER, cullPageNumber(pageNumber)); return new BookmarkablePageLink<Void>(id, getPage().getClass(), parameters); } @Override protected BootstrapPagingNavigation newNavigation(final String id, final IPageable pageable, final IPagingLabelProvider labelProvider) { return new BootstrapPagingNavigation(id, pageable, labelProvider) { private static final long serialVersionUID = 1L; @Override protected AbstractLink newPagingNavigationLink(String id, IPageable pageable, long pageIndex) { return HideableBookmarkablePagingNavigator.this.newPagingNavigationLink(id, pageable, Ints.checkedCast(pageIndex)); } }; } private long cullPageNumber(int pageNumber) { long idx = pageNumber; if (idx < 0) { idx = getPageable().getPageCount() + idx; } if (idx > (getPageable().getPageCount() - 1)) { idx = getPageable().getPageCount() - 1; } if (idx < 0) { idx = 0; } return idx; } }