/*
* Copyright (c) 2009-2011 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.pages.stream;
import org.eurekastreams.server.domain.stream.StreamScope;
import org.eurekastreams.server.domain.stream.StreamScope.ScopeType;
import org.eurekastreams.web.client.events.Observer;
import org.eurekastreams.web.client.events.StreamPageLoadedEvent;
import org.eurekastreams.web.client.events.StreamViewsLoadedEvent;
import org.eurekastreams.web.client.events.UpdatedHistoryParametersEvent;
import org.eurekastreams.web.client.events.UserLoggedInEvent;
import org.eurekastreams.web.client.events.data.GotCurrentUserCustomStreamsResponseEvent;
import org.eurekastreams.web.client.events.data.GotCurrentUserGroupStreamsResponseEvent;
import org.eurekastreams.web.client.model.AllPopularHashTagsModel;
import org.eurekastreams.web.client.model.CustomStreamModel;
import org.eurekastreams.web.client.model.GroupStreamListModel;
import org.eurekastreams.web.client.ui.Session;
import org.eurekastreams.web.client.ui.common.stream.StreamPanel;
import org.eurekastreams.web.client.ui.common.stream.filters.FilterListPanel;
import org.eurekastreams.web.client.ui.common.stream.filters.group.GroupStreamRenderer;
import org.eurekastreams.web.client.ui.common.stream.filters.list.CustomStreamRenderer;
import org.eurekastreams.web.client.ui.common.stream.renderers.ShowRecipient;
import org.eurekastreams.web.client.ui.pages.master.StaticResourceBundle;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
/**
* Page for Stream.
*
*/
public class StreamContent extends Composite
{
/**
* The div where the stream lives.
*/
private final FlowPanel streamPanel = new FlowPanel();
/**
* The main panel.
*/
private FlowPanel panel = null;
/**
* The stream view.
*/
private StreamPanel streamView = null;
/**
* The filters div.
*/
private final FlowPanel filters = new FlowPanel();
/**
* Error label.
*/
Label errorLabel = new Label("You must be logged in to view this page.");
/**
* Select the first view.
*/
private Boolean selectFirstView = false;
/**
* List container.
*/
private final FlowPanel listContainer = new FlowPanel();
/**
* Group container.
*/
private final FlowPanel groupContainer = new FlowPanel();
/**
* The stream view list panel.
*/
private FilterListPanel streamViewListWidget = null;
/**
* Default constructor.
*
*/
public StreamContent()
{
panel = new FlowPanel();
initWidget(panel);
filters.addStyleName(StaticResourceBundle.INSTANCE.coreCss().filters());
errorLabel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().formErrorBox());
errorLabel.setVisible(false);
streamView = new StreamPanel(ShowRecipient.ALL);
streamPanel.add(streamView);
RootPanel.get().addStyleName(StaticResourceBundle.INSTANCE.coreCss().stream());
panel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().streamPageContainer());
streamPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().streamContainer());
Session.getInstance().getEventBus().addObserver(UserLoggedInEvent.class, new Observer<UserLoggedInEvent>()
{
public void update(final UserLoggedInEvent event)
{
Session.getInstance().getEventBus().notifyObservers(StreamPageLoadedEvent.getEvent());
}
});
Session.getInstance().getEventBus().addObserver(UpdatedHistoryParametersEvent.class,
new Observer<UpdatedHistoryParametersEvent>()
{
public void update(final UpdatedHistoryParametersEvent event)
{
if (event.getParameters().get("streamId") == null
&& event.getParameters().get("activityId") == null
&& event.getParameters().get("groupId") == null)
{
selectFirstView = true;
if (null != streamViewListWidget)
{
streamViewListWidget.activateFilter(streamViewListWidget.getViews().get(0));
}
}
}
}, true);
Session.getInstance().getEventBus().addObserver(GotCurrentUserCustomStreamsResponseEvent.class,
new Observer<GotCurrentUserCustomStreamsResponseEvent>()
{
public void update(final GotCurrentUserCustomStreamsResponseEvent event)
{
streamViewListWidget = new FilterListPanel(event.getResponse().getStreamFilters(),
event
.getResponse().getHiddenLineIndex(), new CustomStreamRenderer(), false);
listContainer.add(streamViewListWidget);
if (selectFirstView)
{
streamViewListWidget.activateFilter(event.getResponse().getStreamFilters().get(0));
}
Session.getInstance().getEventBus().notifyObservers(
new StreamViewsLoadedEvent(event.getResponse().getStreamFilters()));
streamView.setStreamScope(new StreamScope(ScopeType.PERSON, Session.getInstance()
.getCurrentPerson().getAccountId()), true);
}
});
Session.getInstance().getEventBus().addObserver(GotCurrentUserGroupStreamsResponseEvent.class,
new Observer<GotCurrentUserGroupStreamsResponseEvent>()
{
public void update(final GotCurrentUserGroupStreamsResponseEvent event)
{
FilterListPanel viewListWidget = new FilterListPanel(event.getResponse().getStreamFilters(),
event.getResponse().getHiddenLineIndex(), new GroupStreamRenderer(), true);
groupContainer.add(viewListWidget);
}
});
filters.add(listContainer);
filters.add(new HTML("<br />"));
filters.add(groupContainer);
panel.add(errorLabel);
panel.add(filters);
panel.add(streamPanel);
DeferredCommand.addCommand(new Command()
{
public void execute()
{
Session.getInstance().getActionProcessor().setQueueRequests(true);
CustomStreamModel.getInstance().fetch(null, true);
GroupStreamListModel.getInstance().fetch(null, false);
AllPopularHashTagsModel.getInstance().fetch(null, true);
Session.getInstance().getActionProcessor().setQueueRequests(false);
Session.getInstance().getActionProcessor().fireQueuedRequests();
}
});
}
}