com.servoy.j2db.server.headlessclient.dataui.ServoyAjaxPagingNavigator.java Source code

Java tutorial

Introduction

Here is the source code for com.servoy.j2db.server.headlessclient.dataui.ServoyAjaxPagingNavigator.java

Source

/*
 This file belongs to the Servoy development and deployment environment, Copyright (C) 1997-2010 Servoy BV
    
 This program is free software; you can redistribute it and/or modify it under
 the terms of the GNU Affero General Public License as published by the Free
 Software Foundation; either version 3 of the License, or (at your option) any
 later version.
    
 This program is distributed in the hope that it will be useful, but WITHOUT
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
    
 You should have received a copy of the GNU Affero General Public License along
 with this program; if not, see http://www.gnu.org/licenses or write to the Free
 Software Foundation,Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
 */
package com.servoy.j2db.server.headlessclient.dataui;

import org.apache.wicket.AbortException;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.Page;
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.ajax.markup.html.navigation.paging.AjaxPagingNavigator;
import org.apache.wicket.markup.html.link.Link;
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.PagingNavigation;
import org.apache.wicket.markup.repeater.AbstractRepeater;

import com.servoy.j2db.server.headlessclient.TabIndexHelper;

/**
 *  The ajax enabled {@link PagingNavigation} for the {@link WebCellBasedView} 
 * 
 * @author jcompagner
 */
public class ServoyAjaxPagingNavigator extends AjaxPagingNavigator implements ISupportWebTabSeq {
    private static final long serialVersionUID = 1L;

    private int tabIndex;

    /**
     * @param id
     * @param pageable
     */
    public ServoyAjaxPagingNavigator(String id, IPageable pageable) {
        super(id, pageable);
    }

    public void setTabSequenceIndex(int i) {
        this.tabIndex = i;
    }

    /**
     * @see wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator#newPagingNavigationIncrementLink(java.lang.String, wicket.markup.html.navigation.paging.IPageable, int)
     */
    @Override
    protected Link newPagingNavigationIncrementLink(String id, IPageable pageable, int increment) {
        Link rez = new AjaxPagingNavigationIncrementLink(id, pageable, increment) {
            private static final long serialVersionUID = 1L;

            /**
             * @see wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigationIncrementLink#onClick(wicket.ajax.AjaxRequestTarget)
             */
            @Override
            public void onClick(AjaxRequestTarget target) {
                super.onClick(target);
                Page page = findPage();
                if (page != null) {
                    WebEventExecutor.generateResponse(target, page);
                } else
                    throw new AbortException();
            }
        };
        TabIndexHelper.setUpTabIndexAttributeModifier(rez, tabIndex);
        return rez;
    }

    /**
     * @see org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator#newPagingNavigationLink(java.lang.String, org.apache.wicket.markup.html.navigation.paging.IPageable, int)
     */
    @Override
    protected Link newPagingNavigationLink(String id, IPageable pageable, int pageNumber) {
        Link rez = new ServoyAjaxPagingNavigationLink(id, pageable, pageNumber);
        TabIndexHelper.setUpTabIndexAttributeModifier(rez, tabIndex);
        return rez;
    }

    /**
     * @see wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator#newNavigation(wicket.markup.html.navigation.paging.IPageable, wicket.markup.html.navigation.paging.IPagingLabelProvider)
     */
    @Override
    protected PagingNavigation newNavigation(IPageable pageable, IPagingLabelProvider labelProvider) {
        return new AjaxPagingNavigation("navigation", pageable, labelProvider) {
            private static final long serialVersionUID = 1L;

            /**
             * @see wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigation#newPagingNavigationLink(java.lang.String, wicket.markup.html.navigation.paging.IPageable, int)
             */
            @Override
            protected Link newPagingNavigationLink(String id, IPageable pageable, int pageIndex) {
                Link rez = new ServoyAjaxPagingNavigationLink(id, pageable, pageIndex);
                TabIndexHelper.setUpTabIndexAttributeModifier(rez, tabIndex);
                return rez;
            }
        };
    }

    /**
     * @author jcompagner
     *
     */
    private final class ServoyAjaxPagingNavigationLink extends AjaxPagingNavigationLink {
        private static final long serialVersionUID = 1L;

        /**
         * @param id
         * @param pageable
         * @param pageNumber
         */
        private ServoyAjaxPagingNavigationLink(String id, IPageable pageable, int pageNumber) {
            super(id, pageable, pageNumber);
        }

        /**
         * @see wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigationLink#onClick(wicket.ajax.AjaxRequestTarget)
         */
        @Override
        public void onClick(AjaxRequestTarget target) {
            super.onClick(target);
            Page page = findPage();
            if (page != null) {
                WebEventExecutor.generateResponse(target, page);
            } else
                throw new AbortException();
        }
    }

    @Override
    protected void onAjaxEvent(AjaxRequestTarget target) {
        // update the container (parent) of the pageable, this assumes that
        // the pageable is a component, and that it is a child of a web
        // markup container.

        Component container = ((Component) getPageable());
        // no need for a nullcheck as there is bound to be a non-repeater
        // somewhere higher in the hierarchy
        while (container instanceof AbstractRepeater) {
            container = container.getParent();
        }

        Component pageableComp = container;
        while (!(container instanceof WebCellBasedView)) {
            container = container.getParent();
        }
        target.addComponent(container != null ? container : pageableComp);

        // in case the navigator is not contained by the container, we have
        // to add it to the response
        if (((MarkupContainer) container).contains(this, true) == false) {
            target.addComponent(this);
        }
    }
}