package fr.openwide.core.wicket.more.markup.html.navigation.paging;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.markup.html.navigation.paging.IPageable;
import org.apache.wicket.markup.html.navigation.paging.IPagingLabelProvider;
import org.apache.wicket.markup.html.navigation.paging.PagingNavigationLink;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.ResourceModel;
public class HideablePagingNavigator extends Panel {
private static final long serialVersionUID = 1L;
private static final int DEFAULT_VIEW_SIZE = 11;
private BootstrapPagingNavigation pagingNavigation;
private final IPageable pageable;
private final IPagingLabelProvider labelProvider;
private int viewSize;
private AbstractLink first;
private AbstractLink last;
public HideablePagingNavigator(String id, IPageable pageable) {
this(id, pageable, null);
}
public HideablePagingNavigator(final String id, final IPageable pageable, int viewSize) {
this(id, pageable, null, viewSize);
}
public HideablePagingNavigator(final String id, final IPageable pageable, final IPagingLabelProvider labelProvider) {
this(id, pageable, labelProvider, -1);
}
public HideablePagingNavigator(final String id, final IPageable pageable, final IPagingLabelProvider labelProvider, int viewSize) {
super(id);
this.pageable = pageable;
this.labelProvider = labelProvider;
if (viewSize > 0) {
this.viewSize = viewSize;
} else {
this.viewSize = DEFAULT_VIEW_SIZE;
}
}
public final IPageable getPageable() {
return pageable;
}
@Override
protected void onInitialize() {
super.onInitialize();
// Get the navigation bar and add it to the hierarchy
pagingNavigation = newNavigation("navigation", pageable, labelProvider);
pagingNavigation.setViewSize(viewSize);
add(pagingNavigation);
// Add additional page links
first = newPagingNavigationLink("first", pageable, 0);
first.add(new AttributeModifier("title", new ResourceModel("PagingNavigator.first")));
add(first);
last = newPagingNavigationLink("last", pageable, -1);
last.add(new AttributeModifier("title", new ResourceModel("PagingNavigator.last")));
add(last);
}
@Override
protected void onConfigure() {
super.onConfigure();
IPageable pageable = getPageable();
setVisible(pageable.getPageCount() > 1);
}
@Override
protected void onBeforeRender() {
super.onBeforeRender();
first.setVisible(!pagingNavigation.isBeginning());
last.setVisible(!pagingNavigation.isEnding());
}
protected AbstractLink newPagingNavigationLink(String id, IPageable pageable, int pageNumber) {
return new PagingNavigationLink<Void>(id, pageable, pageNumber);
}
protected BootstrapPagingNavigation newNavigation(final String id, final IPageable pageable,
final IPagingLabelProvider labelProvider) {
return new BootstrapPagingNavigation(id, pageable, labelProvider);
}
}