/* * 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.common.stream; import java.util.HashMap; import org.eurekastreams.server.domain.EntityType; import org.eurekastreams.web.client.history.CreateUrlRequest; import org.eurekastreams.web.client.jsni.WidgetJSNIFacadeImpl; import org.eurekastreams.web.client.model.BaseActivitySubscriptionModel; import org.eurekastreams.web.client.model.GadgetModel; import org.eurekastreams.web.client.model.StreamBookmarksModel; import org.eurekastreams.web.client.model.requests.AddGadgetToStartPageRequest; import org.eurekastreams.web.client.ui.Session; import org.eurekastreams.web.client.ui.common.dialog.BaseDialogContent; 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.CheckBox; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.Widget; /** * Dialog content for creating or editing a stream view. */ public class FollowDialogContent extends BaseDialogContent { /** * Stream to URL transformer. * */ private static final StreamToUrlTransformer STREAM_URL_TRANSFORMER = new StreamToUrlTransformer(); /** * Container flow panel. */ private final FlowPanel container = new FlowPanel(); /** * Main flow panel. */ private final FlowPanel body = new FlowPanel(); /** * Tips flow panel. */ private final FlowPanel tips = new FlowPanel(); /** Subscribe to all posts button. */ private RadioButton subscribeAllButton; /** Subscribe to coord-only posts button. */ private RadioButton subscribeCoordButton; /** * Default constructor. * * @param inStreamName * the stream name. * @param streamRequest * the stream request. * @param inStreamId * the stream id. * @param inSubscribeModel * Model for subscribing to activity on the stream. * @param inEntityUniqueId * Unique ID of entity owning the stream. * @param streamType * Type of entity of the stream. */ public FollowDialogContent(final String inStreamName, final String streamRequest, final Long inStreamId, final EntityType streamType, final BaseActivitySubscriptionModel inSubscribeModel, final String inEntityUniqueId) { Label saveButton = new Label(""); Label closeButton = new Label("No Thanks"); closeButton.addClickHandler(new ClickHandler() { public void onClick(final ClickEvent event) { close(); } }); body.add(new Label("You are now following the:")); Label streamTitle = new Label(inStreamName + " Stream"); streamTitle.addStyleName(StaticResourceBundle.INSTANCE.coreCss().title()); body.add(streamTitle); body.add(new Label("Below are additional ways to subscribe:")); FlowPanel options = new FlowPanel(); options.addStyleName(StaticResourceBundle.INSTANCE.coreCss().followDialogOptions()); final CheckBox addToStartPage = new CheckBox("Add this Stream to my Start Page"); final CheckBox bookmarkStream = new CheckBox("Bookmark this stream"); final CheckBox notifyViaEmail = new CheckBox("Notify me via Email"); saveButton.addClickHandler(new ClickHandler() { public void onClick(final ClickEvent event) { if (addToStartPage.getValue()) { // For the app's location, use the current URL minus a few parameters we know we don't want. (They // are used by other lists, but get left in the URL when switching tabs.) // We don't build the URL from the stream id, since that doesn't take search terms into account. HashMap<String, String> params = new HashMap<String, String>(); params.put("listId", null); params.put("listFilter", null); params.put("listSort", null); params.put("startIndex", null); params.put("endIndex", null); String url = Session.getInstance().generateUrl(new CreateUrlRequest(params)); String prefs = "{\"streamQuery\":" + WidgetJSNIFacadeImpl.makeJsonString(STREAM_URL_TRANSFORMER.getUrl(null, streamRequest)) + ",\"gadgetTitle\":" + WidgetJSNIFacadeImpl.makeJsonString(inStreamName) + ",\"streamLocation\":" + WidgetJSNIFacadeImpl.makeJsonString(url) + "}"; GadgetModel.getInstance().insert( new AddGadgetToStartPageRequest("{d7a58391-5375-4c76-b5fc-a431c42a7555}", null, STREAM_URL_TRANSFORMER.getUrl(null, prefs))); } if (bookmarkStream.getValue()) { StreamBookmarksModel.getInstance().insert(inStreamId); } if (notifyViaEmail.getValue()) { inSubscribeModel.update(inEntityUniqueId, true, EntityType.GROUP == streamType ? subscribeCoordButton.getValue() : false); } close(); } }); options.add(addToStartPage); options.add(bookmarkStream); if (EntityType.GROUP == streamType) { Panel panel = new FlowPanel(); panel.add(notifyViaEmail); subscribeAllButton = new RadioButton("whichPosts", "All posts to this stream"); subscribeAllButton.setValue(true); subscribeAllButton.setEnabled(false); subscribeCoordButton = new RadioButton("whichPosts", "Only posts from coordinators of this stream"); subscribeCoordButton.setEnabled(false); panel.add(subscribeAllButton); panel.add(subscribeCoordButton); options.add(panel); notifyViaEmail.addClickHandler(new ClickHandler() { public void onClick(final ClickEvent inEvent) { boolean checked = notifyViaEmail.getValue(); subscribeAllButton.setEnabled(checked); subscribeCoordButton.setEnabled(checked); } }); } else { options.add(notifyViaEmail); } body.add(options); FlowPanel buttonPanel = new FlowPanel(); buttonPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().followDialogButtonPanel()); saveButton.addStyleName(StaticResourceBundle.INSTANCE.coreCss().saveChangesButton()); buttonPanel.add(saveButton); buttonPanel.add(closeButton); body.add(buttonPanel); container.add(body); Label tipsTitle = new Label("Tips"); tips.add(tipsTitle); tips.add(new Label("These options allow you to have control over how to access the activity of this stream.")); tips.add(new Label( "Don't worry, these selections are not permanent. You can always change them in the future.")); container.add(tips); body.addStyleName(StaticResourceBundle.INSTANCE.coreCss().followDialogBody()); tips.addStyleName(StaticResourceBundle.INSTANCE.coreCss().followDialogTips()); } /** * Gets the body panel. * * @return the body. */ public Widget getBody() { return container; } /** * Gets the CSS name. * * @return the class. */ @Override public String getCssName() { return StaticResourceBundle.INSTANCE.coreCss().followDialog(); } /** * Gets the title. * * @return the title. */ public String getTitle() { return "Subscribe"; } }