Package org.eurekastreams.web.client.ui.pages.master

Source Code of org.eurekastreams.web.client.ui.pages.master.MasterComposite

/*
* 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.master;

import java.util.HashSet;
import java.util.List;

import org.eurekastreams.commons.client.ActionProcessor;
import org.eurekastreams.server.domain.AvatarUrlGenerator;
import org.eurekastreams.server.domain.Page;
import org.eurekastreams.server.domain.SystemSettings;
import org.eurekastreams.server.domain.TutorialVideoDTO;
import org.eurekastreams.server.search.modelview.PersonModelView;
import org.eurekastreams.web.client.events.EventBus;
import org.eurekastreams.web.client.events.GetTutorialVideoResponseEvent;
import org.eurekastreams.web.client.events.Observer;
import org.eurekastreams.web.client.events.SetBannerEvent;
import org.eurekastreams.web.client.events.SwitchedHistoryViewEvent;
import org.eurekastreams.web.client.events.UpdateRawHistoryEvent;
import org.eurekastreams.web.client.events.data.GotSystemSettingsResponseEvent;
import org.eurekastreams.web.client.jsni.WidgetJSNIFacadeImpl;
import org.eurekastreams.web.client.model.SystemSettingsModel;
import org.eurekastreams.web.client.model.TutorialVideoModel;
import org.eurekastreams.web.client.ui.Session;
import org.eurekastreams.web.client.ui.common.FooterComposite;
import org.eurekastreams.web.client.ui.common.HeaderComposite;
import org.eurekastreams.web.client.ui.common.dialog.Dialog;
import org.eurekastreams.web.client.ui.common.dialog.optoutvideo.OptOutableVideoDialogContent;
import org.eurekastreams.web.client.ui.common.notifier.UINotifier;

import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;

/**
* A "Master" page, has a header and a footer and content.
*/
public class MasterComposite extends Composite
{
    /**
     * Panel to use.
     */
    FlowPanel panel;

    /**
     * The header panel.
     */
    FlowPanel headerPanel = new FlowPanel();

    /**
     * The Site Labing panel.
     */
    FlowPanel siteLabelingContainer = new FlowPanel();

    /**
     * The site Labing Text.
     */
    String siteLabelingText = "";
    /**
     * The footer panel.
     */
    FooterComposite footerPanel = new FooterComposite();

    /**
     * The content panel.
     */
    FlowPanel contentPanel = new FlowPanel();

    /**
     * Wraps the content panel.
     */
    FlowPanel mainContents = new FlowPanel();

    /**
     * The actino processor to use.
     */
    private final ActionProcessor actionProcessor;

    /**
     * The composite representing the content.
     */
    Composite contentComposite;

    /**
     * The header panel.
     */
    private final HeaderComposite header = new HeaderComposite();

    /**
     * Banner.
     */
    private final BannerPanel banner = new BannerPanel();

    /**
     * Notifier.
     */
    UINotifier notifier = new UINotifier();

    /**
     * Page factory.
     */
    private final PageFactory factory = new PageFactory();

    /**
     * Tracks page we are currently on.
     */
    private Page currentPage;

    /**
     * List of the currentViews.
     */
    private List<String> currentViews;

    /**
     * Have any pages been loaded (prevents an infinite loop for IE only start page refreshing.).
     */
    private boolean pageHasBeenLoaded = false;

    /**
     * Default constructor.
     *
     */
    public MasterComposite()
    {
        actionProcessor = Session.getInstance().getActionProcessor();

        panel = new FlowPanel();
        panel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().main());

        headerPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().headerContainer());

        siteLabelingContainer.addStyleName(StaticResourceBundle.INSTANCE.coreCss().siteLabeling());

        notifier.addStyleName(StaticResourceBundle.INSTANCE.coreCss().masterNotifier());
        panel.add(notifier);

        panel.add(headerPanel);

        mainContents.addStyleName(StaticResourceBundle.INSTANCE.coreCss().mainContents());
        mainContents.add(siteLabelingContainer);
        mainContents.add(contentPanel);
        contentPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().content());
        panel.add(mainContents);

        initWidget(panel);

        Session.getInstance().getEventBus().addObserver(GetTutorialVideoResponseEvent.class,
                new Observer<GetTutorialVideoResponseEvent>()
                {
            public void update(final GetTutorialVideoResponseEvent event)
            {
                HashSet<TutorialVideoDTO> tutVids = event.getResponse();
                PersonModelView currentPerson = Session.getInstance().getCurrentPerson();

                for (TutorialVideoDTO vid : tutVids)
                {
                    if (vid.getPage() == currentPage)
                    {
                        if (currentPage == Page.PEOPLE
                                && !(currentViews.contains(currentPerson.getAccountId())))
                        {
                            // if you are on the person profile tab but it's not you then don't show this
                            // dialog.
                            break;
                        }
                        if (!(currentPerson.getOptOutVideos().contains(vid.getEntityId())))
                        {
                            final Integer videoWidth = vid.getVideoWidth() != null ? vid.getVideoWidth()
                                    : OptOutableVideoDialogContent.DEFAULT_VIDEO_WIDTH;

                            OptOutableVideoDialogContent dialogContent = new OptOutableVideoDialogContent(vid);
                            Dialog dialog = new Dialog(dialogContent)
                            {
                                {
                                    getPopupPanel().setModal(true);
                                }

                                @Override
                                public void center()
                                {
                                    getPopupPanel().setWidth(
                                            videoWidth + OptOutableVideoDialogContent.CONTENT_WIDTH
                                            + OptOutableVideoDialogContent.MARGIN_OFFSET + "px");
                                    super.center();
                                    getPopupPanel().setPopupPosition(getPopupPanel().getAbsoluteLeft(),
                                            OptOutableVideoDialogContent.DIALOG_HEIGHT_OFFSET);
                                }
                            };
                            dialog.showUncentered();
                        }
                        break;
                    }
                }
            }
                });

        Session.getInstance().getEventBus().addObserver(SwitchedHistoryViewEvent.class,
                new Observer<SwitchedHistoryViewEvent>()
                {
            public void update(final SwitchedHistoryViewEvent event)
            {
                mainContents.remove(banner);
                notifier.setVisible(false);
                contentPanel.clear();
                String redirect = factory.createPage(event.getPage(), event.getViews(), contentPanel);
                currentPage = event.getPage();
                currentViews = event.getViews();
                pageHasBeenLoaded = true;
                if (redirect == null)
                {
                    TutorialVideoModel.getInstance().fetch(null, true);
                }
                else
                {
                    EventBus.getInstance().notifyObservers(new UpdateRawHistoryEvent(redirect));
                }
            }
                });

        Session.getInstance().getEventBus().addObserver(SetBannerEvent.class, new Observer<SetBannerEvent>()
                {
            public void update(final SetBannerEvent event)
            {
                mainContents.insert(banner, 1);

                // Banner exists and should override the banner the theme is supplying. (i.e. profile page.)
                if (event.getBannerableEntity() != null)
                {
                    AvatarUrlGenerator urlGen = new AvatarUrlGenerator(null);
                    new WidgetJSNIFacadeImpl()
                    .setBanner(urlGen.getBannerUrl(event.getBannerableEntity().getBannerId()));
                }
                // Start page, the bannerable entity is null, just clear out the banner value
                // to let the theme take over again.
                else
                {
                    new WidgetJSNIFacadeImpl().clearBanner(false);
                }
            }

                });
    }

    /**
     * Get the user agent (for detecting IE7).
     *
     * @return the user agent.
     */
    public static native String getUserAgent()
    /*-{
        return navigator.userAgent.toLowerCase();
    }-*/;

    /**
     * Render header and footer.
     *
     */
    public void renderHeaderAndFooter()
    {
        PersonModelView person = Session.getInstance().getCurrentPerson();

        headerPanel.clear();
        headerPanel.add(getHeaderComposite(person));
    }

    /**
     * Get the header composite.
     *
     * @param viewer
     *            the user.
     * @return the header composite.
     */
    HeaderComposite getHeaderComposite(final PersonModelView viewer)
    {
        panel.add(footerPanel);
        header.render(viewer);

        Session.getInstance().getEventBus().addObserver(GotSystemSettingsResponseEvent.class,
                new Observer<GotSystemSettingsResponseEvent>()
                {
            public void update(final GotSystemSettingsResponseEvent event)
            {
                final SystemSettings settings = event.getResponse();

                setSiteLabelTemplate(settings.getHeaderTemplate(), settings.getSiteLabel());
                footerPanel.setSiteLabelTemplate(settings.getFooterTemplate(), settings.getSiteLabel());
                banner.getElement().setInnerHTML(settings.getBannerTemplate());
            }
                });

        SystemSettingsModel.getInstance().fetch(null, true);

        return header;
    }

    /**
     * Sets Site labeling.
     *
     * @param inTemplate
     *            HTML template content to insert in the footer.
     * @param inSiteLabel
     *            The text for Site Labeling.
     */
    public void setSiteLabelTemplate(final String inTemplate, final String inSiteLabel)
    {
        String siteLabel = inSiteLabel == null ? "" : inSiteLabel;
        String template = inTemplate.replace("%SITELABEL%", siteLabel);
        siteLabelingContainer.getElement().setInnerHTML(template);
    }
}
TOP

Related Classes of org.eurekastreams.web.client.ui.pages.master.MasterComposite

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.