All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uk.co.crystalmark.wicket.components.BootstrapPagingNavigator Maven / Gradle / Ivy

The newest version!
package uk.co.crystalmark.wicket.components;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigation;
import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigationIncrementLink;
import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigationLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.markup.html.list.LoopItem;
import org.apache.wicket.markup.html.navigation.paging.IPageable;
import org.apache.wicket.markup.html.navigation.paging.PagingNavigation;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.data.DataView;

public abstract class BootstrapPagingNavigator extends Panel {

    private static final long serialVersionUID = 1L;

    public static final String NAVIGATION_ID = "navigation";

    private static final int VIEW_SIZE = 5;

    private PagingNavigation pagingNavigation;
    private final DataView dataView;
    private WebMarkupContainer pagingLinksContainer;

    public BootstrapPagingNavigator(final String id, final DataView dataView) {
        super(id);
        this.dataView = dataView;

        addContainerWithPagingLinks();
    }

    @Override
    public boolean isVisible() {
        return dataView != null && dataView.getItemCount() > 0;
    }

    private void addContainerWithPagingLinks() {

        pagingLinksContainer = new WebMarkupContainer("pagingLinksContainer") {
            private static final long serialVersionUID = 1L;

            @Override
            public boolean isVisible() {
                return dataView.getPageCount() > 0;
            }
        };

        pagingNavigation = newNavigation(dataView);
        pagingLinksContainer.add(pagingNavigation);

        // Add additional page links
        pagingLinksContainer.add(newPagingNavigationLink("first", dataView, 0));
        pagingLinksContainer.add(newPagingNavigationIncrementLink("prev", dataView, -1));
        pagingLinksContainer.add(newPagingNavigationIncrementLink("next", dataView, 1));
        pagingLinksContainer.add(newPagingNavigationLink("last", dataView, -1));

        add(pagingLinksContainer);
    }

    protected PagingNavigation newNavigation(final IPageable pageable) {
        return new AjaxPagingNavigation(NAVIGATION_ID, pageable) {
            private static final long serialVersionUID = 1L;

            @Override
            protected void populateItem(final LoopItem loopItem) {
                // Get the index of page this link shall point to
                final long pageIndex = getStartIndex() + loopItem.getIndex();

                // Add a page link pointing to the page
                final AjaxPagingNavigationLink link = new AjaxPagingNavigationLink("pageLink", pageable, pageIndex) {
                    private static final long serialVersionUID = 1L;

                    @Override
                    public void onClick(final AjaxRequestTarget target) {
                        super.onClick(target);
                        BootstrapPagingNavigator.this.onClick(target);
                    }

                };
                link.setAutoEnable(false);
                loopItem.add(link);

                // Add a page number label to the list which is enclosed by the link
                String label = "";
                if (labelProvider != null) {
                    label = labelProvider.getPageLabel(pageIndex);
                } else {
                    label = String.valueOf(pageIndex + 1);
                }
                link.add(new Label("pageNumber", label));
                long index = pageable.getCurrentPage();
                if (index == pageIndex) {
                    loopItem.add(new AttributeAppender("class", "active"));
                }
            }

            @Override
            public int getViewSize() {
                return VIEW_SIZE;
            }

        };
    }

    protected AbstractLink newPagingNavigationIncrementLink(final String id, final IPageable pageable, final int increment) {
        return new AjaxPagingNavigationIncrementLink(id, pageable, increment) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(final AjaxRequestTarget target) {
                super.onClick(target);
                BootstrapPagingNavigator.this.onClick(target);
            }

        }.setAutoEnable(false);
    }

    protected AbstractLink newPagingNavigationLink(final String id, final IPageable pageable, final int pageNumber) {
        return new AjaxPagingNavigationIncrementLink(id, pageable, pageNumber) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(final AjaxRequestTarget target) {
                super.onClick(target);
                BootstrapPagingNavigator.this.onClick(target);
            }

        }.setAutoEnable(false);
    }

    public final PagingNavigation getPagingNavigation() {
        return pagingNavigation;
    }

    public abstract void onClick(AjaxRequestTarget target);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy