Package org.eurekastreams.web.client.ui.connect.support

Source Code of org.eurekastreams.web.client.ui.connect.support.StreamListPanel

/*
* Copyright (c) 2009-2012 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.connect.support;

import org.eurekastreams.server.domain.stream.ActivityDTO;
import org.eurekastreams.web.client.events.EventBus;
import org.eurekastreams.web.client.events.MessageStreamAppendEvent;
import org.eurekastreams.web.client.events.MessageStreamUpdateEvent;
import org.eurekastreams.web.client.events.Observer;
import org.eurekastreams.web.client.events.StreamRequestMoreEvent;
import org.eurekastreams.web.client.events.data.DeletedActivityResponseEvent;
import org.eurekastreams.web.client.ui.Session;
import org.eurekastreams.web.client.ui.common.pagedlist.ItemRenderer;
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.FlowPanel;
import com.google.gwt.user.client.ui.Label;

/**
* Stream list view.
*/
public class StreamListPanel extends FlowPanel
{
    /**
     * Number of activities in list: This is needed because there are two types of ways activities get into the list.
     * The first is a a bulk request which already has it's total of activities. However when deleting or adding
     * individual activities we need to add or subtract to this total to know if it is empty.
     */
    private int howManyInList = 0;

    /**
     * The item panel.
     */
    FlowPanel itemPanel;

    /**
     * More button.
     */
    Label moreButton;

    /**
     * Label for no results.
     */
    Label noResults;

    /**
     * Waiting spinner.
     */
    FlowPanel waitSpinner = new FlowPanel();

    /**
     * Error label.
     */
    Label errorLabel = new Label();

    /**
     * The item renderer.
     */
    private ItemRenderer<ActivityDTO> renderer;

    /**
     * Are we adding more? Or is this a new stream.
     */
    private boolean addingMore = false;

    /**
     * Constructor.
     *
     * @param inRenderer
     *            the item renderer.
     */
    public StreamListPanel(final ItemRenderer<ActivityDTO> inRenderer)
    {
        renderer = inRenderer;
        itemPanel = new FlowPanel();
        moreButton = new Label("View More");

        errorLabel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().formErrorBox());
        errorLabel.setVisible(false);

        noResults = new Label("No activity has been posted.");
        noResults.addStyleName(StaticResourceBundle.INSTANCE.coreCss().noResults());
        noResults.setVisible(false);

        moreButton.addStyleName(StaticResourceBundle.INSTANCE.coreCss().moreButton());
        moreButton.addStyleName(StaticResourceBundle.INSTANCE.coreCss().linkedLabel());
        moreButton.setVisible(false);

        waitSpinner.addStyleName(StaticResourceBundle.INSTANCE.coreCss().waitSpinner());

        this.add(itemPanel);
        this.add(errorLabel);
        this.add(waitSpinner);
        this.add(noResults);
        this.add(moreButton);

        final EventBus eventBus = Session.getInstance().getEventBus();

        eventBus.addObserver(MessageStreamUpdateEvent.class, new Observer<MessageStreamUpdateEvent>()
        {
            public void update(final MessageStreamUpdateEvent event)
            {
                if (!addingMore)
                {
                    itemPanel.clear();
                }

                addingMore = false;
                waitSpinner.setVisible(false);
                moreButton.setVisible(event.isMoreResults());
                errorLabel.setVisible(false);

                if (!event.getMessages().getPagedSet().isEmpty())
                {
                    howManyInList = event.getMessages().getPagedSet().size();

                    for (ActivityDTO item : event.getMessages().getPagedSet())
                    {
                        itemPanel.add(renderer.render(item));
                    }
                }
                else
                {
                    noResults.setText("This stream does not contain any activity.");
                    noResults.setVisible(true);
                    howManyInList = 0;
                }

            }
        });

        eventBus.addObserver(DeletedActivityResponseEvent.class, new Observer<DeletedActivityResponseEvent>()
        {
            public void update(final DeletedActivityResponseEvent event)
            {
                howManyInList--;

                if (howManyInList == 0)
                {
                    noResults.setText("No activity has been posted.");
                    noResults.setVisible(true);
                }
            }
        });

        eventBus.addObserver(MessageStreamAppendEvent.class, new Observer<MessageStreamAppendEvent>()
        {
            public void update(final MessageStreamAppendEvent event)
            {
                howManyInList++;
            }
        });

        moreButton.addClickHandler(new ClickHandler()
        {
            public void onClick(final ClickEvent arg0)
            {
                waitSpinner.setVisible(true);
                addingMore = true;
                eventBus.notifyObservers(new StreamRequestMoreEvent());
            }
        });
    }

    /**
     * Reinitializes the model.
     */
    public void reinitialize()
    {
        noResults.setVisible(false);
        itemPanel.clear();
        errorLabel.setVisible(false);
        waitSpinner.setVisible(true);
        moreButton.setVisible(false);
        noResults.setVisible(false);
    }

}
TOP

Related Classes of org.eurekastreams.web.client.ui.connect.support.StreamListPanel

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.