/* * Copyright (c) 2010-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.common.stream.filters.group; import org.eurekastreams.server.domain.EntityType; import org.eurekastreams.server.domain.stream.GroupStreamDTO; import org.eurekastreams.server.domain.stream.StreamFilter; import org.eurekastreams.web.client.events.ChangeShowStreamRecipientEvent; import org.eurekastreams.web.client.events.Observer; import org.eurekastreams.web.client.events.StreamRequestEvent; import org.eurekastreams.web.client.events.SwitchedToActivityDetailViewEvent; import org.eurekastreams.web.client.events.SwitchedToGroupStreamEvent; 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.common.stream.StreamJsonRequestFactory; import org.eurekastreams.web.client.ui.common.stream.filters.FilterPanel; import org.eurekastreams.web.client.ui.common.stream.renderers.ShowRecipient; 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.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.InlineLabel; import com.google.gwt.user.client.ui.Label; /** * Group stream panel. * */ public class GroupStreamPanel extends Composite implements FilterPanel { /** * The view associated with it. */ private GroupStreamDTO group; /** * Label Container. */ private final FlowPanel labelContainer; /** * Label. */ private final Label label; /** * The move handle. */ private final Label moveHandle; /** * Renderer. */ private final GroupStreamRenderer renderer; /** * Switch hangled. */ private Boolean switchHandled = true; /** * Default constructor. * * @param inGroup * the group to render. * @param inRenderer * the renderer for this panel */ public GroupStreamPanel(final GroupStreamDTO inGroup, final GroupStreamRenderer inRenderer) { renderer = inRenderer; FocusPanel container = new FocusPanel(); container.addStyleName(StaticResourceBundle.INSTANCE.coreCss().filter()); FlowPanel panel = new FlowPanel(); labelContainer = new FlowPanel(); labelContainer.addStyleName(StaticResourceBundle.INSTANCE.coreCss().filterLabel()); label = new Label(inGroup.getName()); labelContainer.add(label); group = inGroup; panel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().streamListItem()); container.addClickHandler(new ClickHandler() { public void onClick(final ClickEvent event) { updateHistory(); } }); panel.add(labelContainer); InlineLabel seperator = new InlineLabel(); seperator.addStyleName(StaticResourceBundle.INSTANCE.coreCss().filterSeperator()); panel.add(seperator); seperator.addClickHandler(new ClickHandler() { public void onClick(final ClickEvent event) { updateHistory(); } }); moveHandle = new Label("move"); moveHandle.addStyleName(StaticResourceBundle.INSTANCE.coreCss().moveHandle()); panel.add(moveHandle); Session.getInstance().getEventBus().addObserver(SwitchedToActivityDetailViewEvent.class, new Observer<SwitchedToActivityDetailViewEvent>() { public void update(final SwitchedToActivityDetailViewEvent arg1) { unActivate(); } }); Session.getInstance().getEventBus().addObserver(StreamRequestEvent.class, new Observer<StreamRequestEvent>() { public void update(final StreamRequestEvent arg1) { if (switchHandled) { unActivate(); } switchHandled = true; } }); container.add(panel); initWidget(container); } /** * Set view. * * @param inView * the view. */ public void setFilter(final StreamFilter inView) { group = (GroupStreamDTO) inView; label.setText(group.getName()); } /** * Get item id. * * @return the item id. */ public Long getItemId() { return group.getId(); } /** * Get the move handle. * * @return the move handle. */ public Label getMoveHandle() { return moveHandle; } /** * Activates the view item. */ public void activate() { switchHandled = false; this.addStyleName(StaticResourceBundle.INSTANCE.coreCss().active()); String jsonRequest = StreamJsonRequestFactory.addRecipient(EntityType.GROUP, group.getShortName(), StreamJsonRequestFactory.getEmptyRequest()).toString(); Session.getInstance().getEventBus().notifyObservers(new StreamRequestEvent(group.getName(), jsonRequest)); Session.getInstance().getEventBus() .notifyObservers(new ChangeShowStreamRecipientEvent(ShowRecipient.FOREIGN_ONLY)); Session.getInstance().getEventBus().notifyObservers(new SwitchedToGroupStreamEvent(group)); } /** * Unactivates the view item. */ public void unActivate() { this.removeStyleName(StaticResourceBundle.INSTANCE.coreCss().active()); } /** * Returns the filter. * * @return the filter. */ public StreamFilter getFilter() { return group; } /** * Update the history. */ public void updateHistory() { Session.getInstance().getEventBus().notifyObservers( new UpdateHistoryEvent(new CreateUrlRequest(renderer.getFilterHistoryToken(), String.valueOf(group .getId()), true))); } }