Package org.eurekastreams.web.client.ui.common

Source Code of org.eurekastreams.web.client.ui.common.Pager

/*
* Copyright (c) 2010 Lockheed Martin Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.eurekastreams.web.client.ui.common;

import java.util.HashMap;

import org.eurekastreams.web.client.events.Observer;
import org.eurekastreams.web.client.events.PagerUpdatedEvent;
import org.eurekastreams.web.client.events.UpdateHistoryEvent;
import org.eurekastreams.web.client.history.CreateUrlRequest;
import org.eurekastreams.web.client.ui.Session;
import org.eurekastreams.web.client.ui.pages.master.StaticResourceBundle;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;

/**
* Pager control. To use this control, subscribe to the PagerUpdatedEvent and access the start and end indexes and
* refresh your data.
*
*/
public class Pager extends FlowPanel
{
    /** Name of URL parameter for start index. */
    public static final String URL_PARAM_START_INDEX = "startIndex";

    /** Name of URL parameter for end index. */
    public static final String URL_PARAM_END_INDEX = "endIndex";

    /**
     * The pager id allows us to have multiple of these pagers on the screen that can all update each other but not
     * other pagers that remain unaffected.
     */
    private String pagerId = "pager";
    /**
     * Default page size.
     */
    private static final Integer DEFAULT_PAGE_SIZE = 10;
    /**
     * Default total.
     */
    private static final Integer DEFAULT_TOTAL = DEFAULT_PAGE_SIZE + 1;
    /**
     * Start index.
     */
    private Integer startIndex = 0;
    /**
     * End index.
     */
    private Integer endIndex = 9;
    /**
     * Page size.
     */
    private Integer pageSize = DEFAULT_PAGE_SIZE;
    /**
     * The total. Set to 11 temporarily until we find out how many we have.
     */
    private Integer total = DEFAULT_TOTAL;

    /**
     * Total label.
     */
    private final Label totalLabel = new Label("");

    /**
     * The back page button.
     */
    private final Anchor prev = new Anchor("previous");
    /**
     * The forward page button.
     */
    private final Anchor next = new Anchor("next");

    /**
     * Default constructor.
     *
     * @param inPagerId
     *            the pager id.
     * @param showPageButtons
     *            show page buttons.
     */
    public Pager(final String inPagerId, final boolean showPageButtons)
    {
        pagerId = inPagerId;
        this.addStyleName(StaticResourceBundle.INSTANCE.coreCss().pagerContainer());
        final Pager thisBuffered = this;

        if (showPageButtons)
        {
            this.add(next);
            next.addStyleName(StaticResourceBundle.INSTANCE.coreCss().pagerForward());
            next.addClickHandler(new ClickHandler()
            {
                public void onClick(final ClickEvent event)
                {
                    if (endIndex + 1 < total)
                    {
                        startIndex += pageSize;
                        endIndex += pageSize;
                        Session.getInstance().getEventBus().notifyObservers(new PagerUpdatedEvent(thisBuffered));

                        HashMap<String, String> params = new HashMap<String, String>();
                        params.put(URL_PARAM_START_INDEX, startIndex.toString());
                        params.put(URL_PARAM_END_INDEX, endIndex.toString());

                        Session.getInstance().getEventBus().notifyObservers(
                                new UpdateHistoryEvent(new CreateUrlRequest(params, false)));
                    }
                }
            });

            this.add(prev);
            prev.addStyleName(StaticResourceBundle.INSTANCE.coreCss().pagerBackward());
            prev.addClickHandler(new ClickHandler()
            {
                public void onClick(final ClickEvent event)
                {
                    if (startIndex - pageSize >= 0)
                    {
                        startIndex -= pageSize;
                        endIndex -= pageSize;
                        Session.getInstance().getEventBus().notifyObservers(new PagerUpdatedEvent(thisBuffered));

                        HashMap<String, String> params = new HashMap<String, String>();
                        params.put(URL_PARAM_START_INDEX, startIndex.toString());
                        params.put(URL_PARAM_END_INDEX, endIndex.toString());

                        Session.getInstance().getEventBus().notifyObservers(
                                new UpdateHistoryEvent(new CreateUrlRequest(params, false)));
                    }
                }
            });
        }

        this.add(totalLabel);
        totalLabel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().pagerRange());

        refreshState();

        Session.getInstance().getEventBus().addObserver(PagerUpdatedEvent.class, new Observer<PagerUpdatedEvent>()
        {
            public void update(final PagerUpdatedEvent event)
            {
                if (event.getPager().getPagerId().equals(pagerId))
                {
                    endIndex = event.getPager().getEndIndex();
                    total = event.getPager().total;
                    startIndex = event.getPager().getStartIndex();

                    refreshState();
                }
            }
        });
    }

    /**
     * Reset the pager.
     */
    public void reset()
    {
        startIndex = 0;
        endIndex = 9;
        //total = DEFAULT_TOTAL;
        Session.getInstance().getEventBus().notifyObservers(new PagerUpdatedEvent(this));
    }

    /**
     * Refresh the state of the pager.
     */
    private void refreshState()
    {
        if (total <= pageSize)
        {
            next.setVisible(false);
            prev.setVisible(false);
        }
        else
        {
            next.setVisible(true);
            prev.setVisible(true);

            if (endIndex + 1 < total)
            {
                next.removeStyleName(StaticResourceBundle.INSTANCE.coreCss().pagerForwardDisabled());
            }
            else
            {
                next.addStyleName(StaticResourceBundle.INSTANCE.coreCss().pagerForwardDisabled());
            }

            if (startIndex != 0)
            {
                prev.removeStyleName(StaticResourceBundle.INSTANCE.coreCss().pagerBackwardDisabled());
            }
            else
            {
                prev.addStyleName(StaticResourceBundle.INSTANCE.coreCss().pagerBackwardDisabled());
            }
        }

        Integer toIndex = endIndex + 1;

        if (total < toIndex)
        {
            toIndex = total;
        }

        String rangeText = total == 0 ? "0 - 0 of 0" : (startIndex + 1) + " - " + toIndex + " of " + total;
        totalLabel.setText(rangeText);
    }

    /**
     * Set the page size. Default is 10.
     *
     * @param inPageSize
     *            page size.
     */
    public void setPageSize(final Integer inPageSize)
    {
        pageSize = inPageSize;
        endIndex = pageSize - 1;
        Session.getInstance().getEventBus().notifyObservers(new PagerUpdatedEvent(this));
    }

    /**
     * Set the total.
     *
     * @param inTotal
     *            the total.
     */
    public void setTotal(final Integer inTotal)
    {
        total = inTotal;
        Session.getInstance().getEventBus().notifyObservers(new PagerUpdatedEvent(this));

    }

    /**
     * Get the start index.
     *
     * @return the start index.
     */
    public Integer getStartIndex()
    {
        return startIndex;
    }

    /**
     * Set the startIndex.
     *
     * @param inStartIndex
     *            the startIndex.
     */
    public void setStartIndex(final Integer inStartIndex)
    {
        startIndex = inStartIndex;
    }

    /**
     * Get the end index.
     *
     * @return the end index.
     */
    public Integer getEndIndex()
    {
        return endIndex;
    }

    /**
     * Set the endIndex.
     *
     * @param inEndIndex
     *          the endIndex.
     */
    public void setEndIndex(final Integer inEndIndex)
    {
        endIndex = inEndIndex;
    }

    /**
     * Get the pager id.
     *
     * @return the pager id.
     */
    public String getPagerId()
    {
        return pagerId;
    }

    /**
     * @return the page size.
     */
    public Integer getPageSize()
    {
        return pageSize;
    }
}
TOP

Related Classes of org.eurekastreams.web.client.ui.common.Pager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.