Package org.eurekastreams.web.client.ui.pages.start.gallery

Source Code of org.eurekastreams.web.client.ui.pages.start.gallery.GalleryContent

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

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.eurekastreams.server.action.request.gallery.GetGalleryItemsRequest;
import org.eurekastreams.server.domain.Page;
import org.eurekastreams.server.domain.PagedSet;
import org.eurekastreams.server.domain.Tab;
import org.eurekastreams.server.domain.TabGroupType;
import org.eurekastreams.server.domain.gadgetspec.GadgetMetaDataDTO;
import org.eurekastreams.server.search.modelview.PersonModelView.Role;
import org.eurekastreams.web.client.events.GalleryPageLoadedEvent;
import org.eurekastreams.web.client.events.GotGadgetMetaDataEvent;
import org.eurekastreams.web.client.events.HideNotificationEvent;
import org.eurekastreams.web.client.events.Observer;
import org.eurekastreams.web.client.events.ShowNotificationEvent;
import org.eurekastreams.web.client.events.ThemeChangedEvent;
import org.eurekastreams.web.client.events.UpdateHistoryEvent;
import org.eurekastreams.web.client.events.UpdatedHistoryParametersEvent;
import org.eurekastreams.web.client.events.UserLoggedInEvent;
import org.eurekastreams.web.client.events.data.AddTabFromGalleryTabTemplateResponseEvent;
import org.eurekastreams.web.client.events.data.GotGadgetDefinitionCategoriesResponseEvent;
import org.eurekastreams.web.client.events.data.GotGadgetDefinitionsResponseEvent;
import org.eurekastreams.web.client.events.data.GotGalleryTabTemplateCategoriesResponseEvent;
import org.eurekastreams.web.client.events.data.GotGalleryTabTemplateDTOResponseEvent;
import org.eurekastreams.web.client.events.data.GotStartPageTabsResponseEvent;
import org.eurekastreams.web.client.events.data.GotThemeDefinitionCategoriesResponseEvent;
import org.eurekastreams.web.client.events.data.GotThemeDefinitionsResponseEvent;
import org.eurekastreams.web.client.events.data.InsertedGadgetDefinitionResponseEvent;
import org.eurekastreams.web.client.events.data.InsertedGalleryTabTempalateResponseEvent;
import org.eurekastreams.web.client.events.data.InsertedThemeResponseEvent;
import org.eurekastreams.web.client.events.data.UpdatedGadgetDefinitionResponseEvent;
import org.eurekastreams.web.client.events.data.UpdatedGalleryTabTemplateResponseEvent;
import org.eurekastreams.web.client.events.data.UpdatedThemeResponseEvent;
import org.eurekastreams.web.client.history.CreateUrlRequest;
import org.eurekastreams.web.client.jsni.GadgetMetaDataFetcher;
import org.eurekastreams.web.client.jsni.WidgetJSNIFacadeImpl;
import org.eurekastreams.web.client.model.GadgetDefinitionCategoriesModel;
import org.eurekastreams.web.client.model.GadgetDefinitionModel;
import org.eurekastreams.web.client.model.GalleryTabTemplateCategoriesModel;
import org.eurekastreams.web.client.model.GalleryTabTemplateModel;
import org.eurekastreams.web.client.model.StartTabsModel;
import org.eurekastreams.web.client.model.ThemeDefinitionCategoriesModel;
import org.eurekastreams.web.client.model.ThemeModel;
import org.eurekastreams.web.client.ui.Session;
import org.eurekastreams.web.client.ui.common.Pager;
import org.eurekastreams.web.client.ui.common.SettingsPanel;
import org.eurekastreams.web.client.ui.common.form.FormBuilder;
import org.eurekastreams.web.client.ui.common.form.FormBuilder.Method;
import org.eurekastreams.web.client.ui.common.form.elements.BasicDropDownFormElement;
import org.eurekastreams.web.client.ui.common.form.elements.BasicTextBoxFormElement;
import org.eurekastreams.web.client.ui.common.form.elements.ValueOnlyFormElement;
import org.eurekastreams.web.client.ui.common.notifier.Notification;
import org.eurekastreams.web.client.ui.common.notifier.UINotifier;
import org.eurekastreams.web.client.ui.common.pagedlist.GadgetMetaDataRenderer;
import org.eurekastreams.web.client.ui.common.pagedlist.GalleryTabTemplateDTORenderer;
import org.eurekastreams.web.client.ui.common.pagedlist.PagedListPanel;
import org.eurekastreams.web.client.ui.common.pagedlist.SingleColumnPagedListRenderer;
import org.eurekastreams.web.client.ui.common.pagedlist.ThemeRenderer;
import org.eurekastreams.web.client.ui.common.tabs.SimpleTab;
import org.eurekastreams.web.client.ui.common.tabs.TabContainerPanel;
import org.eurekastreams.web.client.ui.pages.master.MasterComposite;
import org.eurekastreams.web.client.ui.pages.master.StaticResourceBundle;

import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.RootPanel;

/**
* The content page for the gallery.
*
*/
public class GalleryContent extends SettingsPanel
{
    /**
     * The tab container.
     */
    private TabContainerPanel portalPage;

    /**
     * JSNI Facade.
     */
    WidgetJSNIFacadeImpl jsniFacade = new WidgetJSNIFacadeImpl();

    /**
     * The panel.
     */
    static FlowPanel panel = new FlowPanel();

    /**
     * JSNI Facade.
     */
    private WidgetJSNIFacadeImpl jSNIFacade = new WidgetJSNIFacadeImpl();

    /**
     * Gadget tab.
     */
    private PagedListPanel gadgetTab = null;
    /**
     * Theme tab.
     */
    private PagedListPanel themeTab = null;

    /**
     * tabTemplate tab.
     */
    private PagedListPanel tabTemplateTab = null;

    /**
     * Gadget from index.
     */
    private int gadgetsFrom = 0;
    /**
     * Gadget to index.
     */
    private int gadgetsTo = 0;
    /**
     * Gadget total number.
     */
    private int gadgetsTotal = 0;

    /**
     * Add Gadget button.
     */
    private Hyperlink addGadget = new Hyperlink("Add App", Session.getInstance().generateUrl(
            new CreateUrlRequest("action", "newApp", false)));

    /**
     * Add theme button.
     */
    private Hyperlink addTheme = new Hyperlink("Add Theme", Session.getInstance().generateUrl(
            new CreateUrlRequest("action", "newTheme", false)));

    /**
     * Add tabTemplate button.
     */
    private Hyperlink addTab = new Hyperlink("Add Tab", Session.getInstance().generateUrl(
            new CreateUrlRequest("action", "newTab", false)));

    /**
     * Container for the gallery tabs.
     */
    private FlowPanel galleryPortalContainer = new FlowPanel();
    /**
     * Container for the add/edit panels.
     */
    private FlowPanel galleryAddOrEditContainer = new FlowPanel();

    /**
     * Start page tabs.
     */
    private Map<String, String> startPageTabsDropDownValues = new HashMap<String, String>();;

    /**
     * Default constructor.
     *
     */
    public GalleryContent()
    {
        super(panel, "Configure");

        this.clearContentPanel();
        RootPanel.get().addStyleName(StaticResourceBundle.INSTANCE.coreCss().gallery());
        panel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().galleryMaster());

        addGadget.addStyleName(StaticResourceBundle.INSTANCE.coreCss().addGadget());
        addGadget.setVisible(false);
        addTheme.addStyleName(StaticResourceBundle.INSTANCE.coreCss().addTheme());
        addTheme.setVisible(false);
        addTab.addStyleName(StaticResourceBundle.INSTANCE.coreCss().addTab());
        addTab.setVisible(false);

        panel.add(galleryPortalContainer);
        panel.add(galleryAddOrEditContainer);

        if (Session.getInstance().getCurrentPersonRoles().contains(Role.SYSTEM_ADMIN))
        {
            galleryPortalContainer.add(addGadget);
            galleryPortalContainer.add(addTheme);
            galleryPortalContainer.add(addTab);
        }

        gadgetTab = new PagedListPanel("gadgets", new SingleColumnPagedListRenderer());
        themeTab = new PagedListPanel("themes", new SingleColumnPagedListRenderer());
        tabTemplateTab = new PagedListPanel("tabs", new SingleColumnPagedListRenderer());

        portalPage = new TabContainerPanel("galleryTab");

        // setup the params to set when the tab is activated
        Map<String, String> gadgetTabParams = new HashMap<String, String>();
        gadgetTabParams.put(PagedListPanel.URL_PARAM_LIST_ID, "gadgets");
        gadgetTabParams.put(Pager.URL_PARAM_START_INDEX, "0");

        SimpleTab gadgetSimpleTab = new SimpleTab("Apps", gadgetTab);
        gadgetSimpleTab.setParamsToSet(gadgetTabParams);
        gadgetSimpleTab.setParamsToClear(Pager.URL_PARAM_END_INDEX);
        portalPage.addTab(gadgetSimpleTab);

        // setup the params to set when the tab is activated
        Map<String, String> themeTabParams = new HashMap<String, String>();
        themeTabParams.put(PagedListPanel.URL_PARAM_LIST_ID, "themes");
        themeTabParams.put(Pager.URL_PARAM_START_INDEX, "0");

        SimpleTab themeSimpleTab = new SimpleTab("Themes", themeTab);
        themeSimpleTab.setParamsToSet(themeTabParams);
        themeSimpleTab.setParamsToClear(Pager.URL_PARAM_START_INDEX, Pager.URL_PARAM_END_INDEX);
        portalPage.addTab(themeSimpleTab);

        // setup the params to set when the tab is activated
        Map<String, String> tabTemplateTabParams = new HashMap<String, String>();
        tabTemplateTabParams.put(PagedListPanel.URL_PARAM_LIST_ID, "tabs");
        tabTemplateTabParams.put(Pager.URL_PARAM_START_INDEX, "0");

        SimpleTab tabSimpleTab = new SimpleTab("Tabs", tabTemplateTab);
        tabSimpleTab.setParamsToSet(tabTemplateTabParams);
        tabSimpleTab.setParamsToClear(Pager.URL_PARAM_START_INDEX, Pager.URL_PARAM_END_INDEX);
        portalPage.addTab(tabSimpleTab);

        galleryPortalContainer.add(portalPage);
        portalPage.init();

        setUpEvents();

        StartTabsModel.getInstance().fetch(null, true);
        GadgetDefinitionCategoriesModel.getInstance().fetch(null, true);
        ThemeDefinitionCategoriesModel.getInstance().fetch(null, true);
        GalleryTabTemplateCategoriesModel.getInstance().fetch(null, true);
    }

    /**
     * Set up all events.
     */
    private void setUpEvents()
    {
        Session.getInstance().getEventBus().addObserver(GotGadgetMetaDataEvent.class,
                new Observer<GotGadgetMetaDataEvent>()
                {
                    public void update(final GotGadgetMetaDataEvent event)
                    {
                        gadgetTab.render(new PagedSet<GadgetMetaDataDTO>(gadgetsFrom, gadgetsTo, gadgetsTotal, event
                                .getMetadata()), "There are no apps in this category.");
                    }
                });

        Session.getInstance().getEventBus().addObserver(GotGadgetDefinitionsResponseEvent.class,
                new Observer<GotGadgetDefinitionsResponseEvent>()
                {
                    public void update(final GotGadgetDefinitionsResponseEvent event)
                    {
                        gadgetsFrom = event.getResponse().getFromIndex();
                        gadgetsTo = event.getResponse().getToIndex();
                        gadgetsTotal = event.getResponse().getTotal();

                        if (gadgetsTotal == 0)
                        {
                            Session.getInstance().getEventBus().notifyObservers(
                                    new GotGadgetMetaDataEvent(new LinkedList<GadgetMetaDataDTO>()));
                        }
                        else
                        {
                            GadgetMetaDataFetcher fetcher = // \n
                            new GadgetMetaDataFetcher(event.getResponse().getPagedSet());
                            fetcher.fetchMetaData();
                        }
                    }
                });

        Session.getInstance().getEventBus().addObserver(GotGadgetDefinitionCategoriesResponseEvent.class,
                new Observer<GotGadgetDefinitionCategoriesResponseEvent>()
                {
                    public void update(final GotGadgetDefinitionCategoriesResponseEvent event)
                    {
                        gadgetTab.addSet("All", GadgetDefinitionModel.getInstance(), new GadgetMetaDataRenderer(),
                                new GetGalleryItemsRequest("recent", "", 0, 0), "Recent");
                        gadgetTab.addSet("All", GadgetDefinitionModel.getInstance(), new GadgetMetaDataRenderer(),
                                new GetGalleryItemsRequest("popularity", "", 0, 0), "Popular");

                        for (String category : event.getResponse())
                        {
                            gadgetTab.addSet(category, GadgetDefinitionModel.getInstance(),
                                    new GadgetMetaDataRenderer(), new GetGalleryItemsRequest("recent", category, 0, 0),
                                    "Recent");
                            gadgetTab.addSet(category, GadgetDefinitionModel.getInstance(),
                                    new GadgetMetaDataRenderer(), new GetGalleryItemsRequest("popularity", category, 0,
                                            0), "Popular");
                        }

                        Session.getInstance().getEventBus().removeObserver(
                                GotGadgetDefinitionCategoriesResponseEvent.class, this);
                    }
                });

        Session.getInstance().getEventBus().addObserver(GotGadgetDefinitionCategoriesResponseEvent.class,
                new Observer<GotGadgetDefinitionCategoriesResponseEvent>()
                {
                    public void update(final GotGadgetDefinitionCategoriesResponseEvent event)
                    {
                        if (Session.getInstance().getParameterValue("action").equals("newApp")
                                || Session.getInstance().getParameterValue("action").equals("editApp"))
                        {
                            renderCreateOrEditGadget(event.getResponse());
                        }
                    }
                });

        Session.getInstance().getEventBus().addObserver(GotThemeDefinitionsResponseEvent.class,
                new Observer<GotThemeDefinitionsResponseEvent>()
                {
                    public void update(final GotThemeDefinitionsResponseEvent event)
                    {
                        themeTab.render(event.getResponse(), "There are no themes in this category.");
                    }
                });

        Session.getInstance().getEventBus().addObserver(GotThemeDefinitionCategoriesResponseEvent.class,
                new Observer<GotThemeDefinitionCategoriesResponseEvent>()
                {
                    public void update(final GotThemeDefinitionCategoriesResponseEvent event)
                    {
                        themeTab.addSet("All", ThemeModel.getInstance(), new ThemeRenderer(),
                                new GetGalleryItemsRequest("recent", "", 0, 0), "Recent");
                        themeTab.addSet("All", ThemeModel.getInstance(), new ThemeRenderer(),
                                new GetGalleryItemsRequest("popularity", "", 0, 0), "Popular");

                        for (String category : event.getResponse())
                        {
                            themeTab.addSet(category, ThemeModel.getInstance(), new ThemeRenderer(),
                                    new GetGalleryItemsRequest("recent", category, 0, 0), "Recent");
                            themeTab.addSet(category, ThemeModel.getInstance(), new ThemeRenderer(),
                                    new GetGalleryItemsRequest("popularity", category, 0, 0), "Popular");
                        }

                        Session.getInstance().getEventBus().removeObserver(
                                GotThemeDefinitionCategoriesResponseEvent.class, this);

                    }
                });

        Session.getInstance().getEventBus().addObserver(GotThemeDefinitionCategoriesResponseEvent.class,
                new Observer<GotThemeDefinitionCategoriesResponseEvent>()
                {
                    public void update(final GotThemeDefinitionCategoriesResponseEvent event)
                    {
                        if (Session.getInstance().getParameterValue("action").equals("newTheme")
                                || Session.getInstance().getParameterValue("action").equals("editTheme"))
                        {
                            renderCreateOrEditTheme(event.getResponse());
                        }
                    }
                });

        Session.getInstance().getEventBus().addObserver(ThemeChangedEvent.getEvent(), new Observer<ThemeChangedEvent>()
        {
            public void update(final ThemeChangedEvent arg1)
            {
                String text = "Theme has been applied";

                // since a refresh happens in IE7 when navigating to the start page, show the notification
                // by passing in a notification url parameter
                if (MasterComposite.getUserAgent().contains("msie 7"))
                {
                    Map<String, String> parameters = new HashMap<String, String>();
                    parameters.put(UINotifier.NOTIFICATION_PARAM, text);

                    Session.getInstance().getEventBus().notifyObservers(
                            new UpdateHistoryEvent(new CreateUrlRequest(Page.START, "", parameters)));
                }
                // otherwise, throw the notification event as normal
                else
                {
                    Session.getInstance().getEventBus().notifyObservers(
                            new UpdateHistoryEvent(new CreateUrlRequest(Page.START)));

                    Session.getInstance().getEventBus().notifyObservers(
                            new ShowNotificationEvent(new Notification(text)));
                }
            }
        });

        setupGalleryTabTemplateEvents();

        Session.getInstance().getEventBus().addObserver(UserLoggedInEvent.class, new Observer<UserLoggedInEvent>()
        {
            public void update(final UserLoggedInEvent event)
            {
                Session.getInstance().getEventBus().notifyObservers(GalleryPageLoadedEvent.getEvent());
            }
        });

        final HashMap<String, String> gadgetParams = new HashMap<String, String>();
        gadgetParams.put("tab", Session.getInstance().getParameterValue("tab"));
        gadgetParams.put("galleryTab", "Apps");

        final HashMap<String, String> themeParams = new HashMap<String, String>();
        themeParams.put("tab", Session.getInstance().getParameterValue("tab"));
        themeParams.put("galleryTab", "Themes");

        Session.getInstance().getEventBus().addObserver(InsertedGadgetDefinitionResponseEvent.class,
                new Observer<InsertedGadgetDefinitionResponseEvent>()
                {
                    public void update(final InsertedGadgetDefinitionResponseEvent arg1)
                    {
                        Session.getInstance().getEventBus().notifyObservers(
                                new UpdateHistoryEvent(new CreateUrlRequest(Page.GALLERY, gadgetParams)));
                        gadgetTab.reload();
                        Session.getInstance().getEventBus().notifyObservers(
                                new ShowNotificationEvent(new Notification("Your app has been successfully added")));
                    }
                });

        Session.getInstance().getEventBus().addObserver(UpdatedGadgetDefinitionResponseEvent.class,
                new Observer<UpdatedGadgetDefinitionResponseEvent>()
                {
                    public void update(final UpdatedGadgetDefinitionResponseEvent arg1)
                    {
                        Session.getInstance().getEventBus().notifyObservers(
                                new UpdateHistoryEvent(new CreateUrlRequest(Page.GALLERY, gadgetParams)));
                        gadgetTab.reload();
                        Session.getInstance().getEventBus().notifyObservers(
                                new ShowNotificationEvent(new Notification("Your app has been successfully saved")));
                    }
                });

        Session.getInstance().getEventBus().addObserver(InsertedThemeResponseEvent.class,
                new Observer<InsertedThemeResponseEvent>()
                {
                    public void update(final InsertedThemeResponseEvent arg1)
                    {
                        Session.getInstance().getEventBus().notifyObservers(
                                new UpdateHistoryEvent(new CreateUrlRequest(Page.GALLERY, themeParams)));
                        themeTab.reload();
                        Session.getInstance().getEventBus().notifyObservers(
                                new ShowNotificationEvent(new Notification("Your theme has been successfully added")));
                    }

                });
        Session.getInstance().getEventBus().addObserver(UpdatedThemeResponseEvent.class,
                new Observer<UpdatedThemeResponseEvent>()
                {
                    public void update(final UpdatedThemeResponseEvent arg1)
                    {
                        Session.getInstance().getEventBus().notifyObservers(
                                new UpdateHistoryEvent(new CreateUrlRequest(Page.GALLERY, themeParams)));
                        themeTab.reload();
                        Session.getInstance().getEventBus().notifyObservers(
                                new ShowNotificationEvent(new Notification("Your theme has been successfully saved")));
                    }
                });

        Session.getInstance().getEventBus().addObserver(GotStartPageTabsResponseEvent.class,
                new Observer<GotStartPageTabsResponseEvent>()
                {
                    public void update(final GotStartPageTabsResponseEvent event)
                    {
                        onGotStartTabs(event);
                    }
                });
    }

    /**
     * More event setup.
     */
    private void setupGalleryTabTemplateEvents()
    {
        Session.getInstance().getEventBus().addObserver(GotGalleryTabTemplateDTOResponseEvent.class,
                new Observer<GotGalleryTabTemplateDTOResponseEvent>()
                {
                    public void update(final GotGalleryTabTemplateDTOResponseEvent event)
                    {
                        tabTemplateTab.render(event.getResponse(), "There are no tabs in this category.");
                    }
                });

        Session.getInstance().getEventBus().addObserver(GotGalleryTabTemplateCategoriesResponseEvent.class,
                new Observer<GotGalleryTabTemplateCategoriesResponseEvent>()
                {
                    public void update(final GotGalleryTabTemplateCategoriesResponseEvent event)
                    {
                        tabTemplateTab.addSet("All", GalleryTabTemplateModel.getInstance(),
                                new GalleryTabTemplateDTORenderer(), new GetGalleryItemsRequest("recent", "", 0, 0),
                                "Recent");
                        tabTemplateTab.addSet("All", GalleryTabTemplateModel.getInstance(),
                                new GalleryTabTemplateDTORenderer(),
                                new GetGalleryItemsRequest("popularity", "", 0, 0), "Popular");

                        for (String category : event.getResponse())
                        {
                            tabTemplateTab.addSet(category, GalleryTabTemplateModel.getInstance(),
                                    new GalleryTabTemplateDTORenderer(), new GetGalleryItemsRequest("recent", category,
                                            0, 0), "Recent");
                            tabTemplateTab.addSet(category, GalleryTabTemplateModel.getInstance(),
                                    new GalleryTabTemplateDTORenderer(), new GetGalleryItemsRequest("popularity",
                                            category, 0, 0), "Popular");
                        }

                        Session.getInstance().getEventBus().removeObserver(
                                GotGalleryTabTemplateCategoriesResponseEvent.class, this);

                    }
                });

        Session.getInstance().getEventBus().addObserver(GotGalleryTabTemplateCategoriesResponseEvent.class,
                new Observer<GotGalleryTabTemplateCategoriesResponseEvent>()
                {
                    public void update(final GotGalleryTabTemplateCategoriesResponseEvent event)
                    {
                        if (Session.getInstance().getParameterValue("action").equals("newTab")
                                || Session.getInstance().getParameterValue("action").equals("editTab"))
                        {
                            renderCreateOrEditGalleryTabTemplate(event.getResponse());
                        }
                    }
                });

        final HashMap<String, String> tabParams = new HashMap<String, String>();
        tabParams.put("tab", Session.getInstance().getParameterValue("tab"));
        tabParams.put("galleryTab", "Tabs");

        Session.getInstance().getEventBus().addObserver(InsertedGalleryTabTempalateResponseEvent.class,
                new Observer<InsertedGalleryTabTempalateResponseEvent>()
                {
                    public void update(final InsertedGalleryTabTempalateResponseEvent arg1)
                    {
                        Session.getInstance().getEventBus().notifyObservers(
                                new UpdateHistoryEvent(new CreateUrlRequest(Page.GALLERY, tabParams)));
                        tabTemplateTab.reload();
                        Session.getInstance().getEventBus().notifyObservers(
                                new ShowNotificationEvent(new Notification("Your tab has been successfully added")));
                    }
                });

        Session.getInstance().getEventBus().addObserver(UpdatedGalleryTabTemplateResponseEvent.class,
                new Observer<UpdatedGalleryTabTemplateResponseEvent>()
                {
                    public void update(final UpdatedGalleryTabTemplateResponseEvent arg1)
                    {
                        Session.getInstance().getEventBus().notifyObservers(
                                new UpdateHistoryEvent(new CreateUrlRequest(Page.GALLERY, tabParams)));
                        tabTemplateTab.reload();
                        Session.getInstance().getEventBus().notifyObservers(
                                new ShowNotificationEvent(new Notification("Your tab has been successfully saved")));
                    }
                });

        Session.getInstance().getEventBus().addObserver(AddTabFromGalleryTabTemplateResponseEvent.class,
                new Observer<AddTabFromGalleryTabTemplateResponseEvent>()
                {
                    public void update(final AddTabFromGalleryTabTemplateResponseEvent arg1)
                    {
                        String text = "Tab has been applied";

                        // since a refresh happens in IE7 when navigating to the start page, show the notification
                        // by passing in a notification url parameter
                        if (MasterComposite.getUserAgent().contains("msie 7"))
                        {
                            Map<String, String> parameters = new HashMap<String, String>();
                            parameters.put(UINotifier.NOTIFICATION_PARAM, text);

                            Session.getInstance().getEventBus().notifyObservers(
                                    new UpdateHistoryEvent(new CreateUrlRequest(Page.START, "", parameters)));
                        }
                        // otherwise, throw the notification event as normal
                        else
                        {
                            Session.getInstance().getEventBus().notifyObservers(
                                    new UpdateHistoryEvent(new CreateUrlRequest(Page.START)));

                            Session.getInstance().getEventBus().notifyObservers(
                                    new ShowNotificationEvent(new Notification(text)));
                        }
                    }
                });
    }

    /**
     * What happens after we get the start tabs (for the theme).
     *
     * @param event
     *            the event.
     */
    private void onGotStartTabs(final GotStartPageTabsResponseEvent event)
    {
        setStartTabDropdownValues(event.getResponse().getTabs(TabGroupType.START));

        // Apply the theme.
        if (event.getResponse().getTheme() != null)
        {
            jSNIFacade.setCSS(event.getResponse().getTheme().getCssFile());
        }
        else
        {
            // default theme
            jSNIFacade.setCSS("/themes/green_hills.css");
        }
        Session.getInstance().getEventBus().addObserver(UpdatedHistoryParametersEvent.class,
                new Observer<UpdatedHistoryParametersEvent>()
                {

                    public void update(final UpdatedHistoryParametersEvent event)
                    {
                        if (event.getParameters().get("action").equals("newTheme")
                                || event.getParameters().get("action").equals("editTheme"))
                        {
                            if (Session.getInstance().getCurrentPersonRoles().contains(Role.SYSTEM_ADMIN))
                            {
                                galleryPortalContainer.setVisible(false);
                                galleryAddOrEditContainer.setVisible(true);
                                galleryAddOrEditContainer.clear();

                                ThemeDefinitionCategoriesModel.getInstance().fetch(null, true);
                            }
                        }
                        else if (event.getParameters().get("action").equals("editApp")
                                || event.getParameters().get("action").equals("newApp"))
                        {
                            if (Session.getInstance().getCurrentPersonRoles().contains(Role.SYSTEM_ADMIN))
                            {
                                galleryPortalContainer.setVisible(false);
                                galleryAddOrEditContainer.setVisible(true);
                                galleryAddOrEditContainer.clear();

                                GadgetDefinitionCategoriesModel.getInstance().fetch(null, true);
                            }
                        }
                        else if (event.getParameters().get("action").equals("editTab")
                                || event.getParameters().get("action").equals("newTab"))
                        {
                            if (Session.getInstance().getCurrentPersonRoles().contains(Role.SYSTEM_ADMIN))
                            {
                                galleryPortalContainer.setVisible(false);
                                galleryAddOrEditContainer.setVisible(true);
                                galleryAddOrEditContainer.clear();

                                GalleryTabTemplateCategoriesModel.getInstance().fetch(null, true);
                            }
                        }
                        else
                        {
                            galleryAddOrEditContainer.setVisible(false);
                            galleryPortalContainer.setVisible(true);

                            setPreviousPage(new CreateUrlRequest(Page.START, "tab", Session.getInstance()
                                    .getParameterValue("tab")), "< Return to Start Page");
                            Session.getInstance().getEventBus().notifyObservers(new HideNotificationEvent());
                            setPageTitle("Configure");

                            if (Session.getInstance().getCurrentPersonRoles().contains(Role.SYSTEM_ADMIN))
                            {
                                addGadget.setVisible(Session.getInstance().getParameterValue("galleryTab").equals(
                                        "Apps"));
                                addTheme.setVisible(Session.getInstance().getParameterValue("galleryTab").equals(
                                        "Themes"));
                                addTab.setVisible(Session.getInstance().getParameterValue("galleryTab").equals("Tabs"));
                            }
                        }
                    }

                }, true);
    }

    /**
     * Render the create or edit screen for a theme.
     *
     * @param categories
     *            the params from the history token.
     */
    private void renderCreateOrEditGalleryTabTemplate(final LinkedList<String> categories)
    {
        String defaultCategory = null;
        String defaultDescription = null;
        String id = "";

        Map<String, String> urlParams = new HashMap<String, String>();
        urlParams.put("tab", Session.getInstance().getParameterValue("tab"));
        urlParams.put("galleryTab", "Tabs");

        this.setPreviousPage(new CreateUrlRequest(Page.GALLERY, urlParams), "< Return to Configure Page");

        String title = "Add Tab";
        FormBuilder.Method method = Method.INSERT;
        String tabDropDownInstructions = "";

        if (Session.getInstance().getParameterValue("action").equals("editTab"))
        {
            title = "Edit Tab";
            method = Method.UPDATE;

            defaultCategory = Session.getInstance().getParameterValue("category");
            id = Session.getInstance().getParameterValue("id");
            defaultDescription = Session.getInstance().getParameterValue("description");
            tabDropDownInstructions = "If no tab is selected, original tab will be maintained.";
        }

        this.setPageTitle(title);
        FormBuilder form = new FormBuilder("", GalleryTabTemplateModel.getInstance(), method);

        if (method.equals(Method.UPDATE))
        {
            form.setSubmitButtonClass(StaticResourceBundle.INSTANCE.coreCss().formUpdateButton());
        }

        form.setOnCancelHistoryToken(Session.getInstance().generateUrl(new CreateUrlRequest(Page.GALLERY, urlParams)));
        form.addFormElement(new ValueOnlyFormElement("id", id));
        form.addWidget(new HTML("<em class='gallery-upload-note'><strong>Please Note:</strong><br />"
                + "When users add your tab from the gallery they will be making a copy of the tab. "
                + "Updates you make to the tab will not be reflected for users who have previously add it."));
        form.addFormDivider();

        form.addFormElement(new BasicDropDownFormElement("Tabs", "tab", startPageTabsDropDownValues, "-1",
                tabDropDownInstructions, method == Method.INSERT));
        form.addFormDivider();

        form
                .addFormElement(new BasicDropDownFormElement("Category", "category", categories, defaultCategory, "",
                        true));

        form.addFormDivider();

        form.addFormElement(new BasicTextBoxFormElement("Description:", "description", defaultDescription, "", true));

        form.addFormDivider();

        galleryAddOrEditContainer.clear();
        galleryAddOrEditContainer.add(form);
    }

    /**
     * Render the create or edit screen for a theme.
     *
     * @param categories
     *            the params from the history token.
     */
    private void renderCreateOrEditTheme(final LinkedList<String> categories)
    {
        String defaultCategory = null;
        String defaultUrl = "";
        String id = "";

        Map<String, String> urlParams = new HashMap<String, String>();
        urlParams.put("tab", Session.getInstance().getParameterValue("tab"));
        urlParams.put("galleryTab", "Themes");

        this.setPreviousPage(new CreateUrlRequest(Page.GALLERY, urlParams), "< Return to Configure Page");

        String title = "Add Theme";
        FormBuilder.Method method = Method.INSERT;

        if (Session.getInstance().getParameterValue("action").equals("editTheme"))
        {
            title = "Edit Theme";
            method = Method.UPDATE;
            defaultUrl = Session.getInstance().getParameterValue("url");

            defaultCategory = Session.getInstance().getParameterValue("category");
            id = Session.getInstance().getParameterValue("id");
        }

        this.setPageTitle(title);
        FormBuilder form = new FormBuilder("", ThemeModel.getInstance(), method);

        if (method.equals(Method.UPDATE))
        {
            form.setSubmitButtonClass(StaticResourceBundle.INSTANCE.coreCss().formUpdateButton());
        }

        form.setOnCancelHistoryToken(Session.getInstance().generateUrl(new CreateUrlRequest(Page.GALLERY, urlParams)));
        form.addFormElement(new ValueOnlyFormElement("id", id));
        form.addWidget(new HTML("<em class='gallery-upload-note'><strong>Please Note:</strong><br />"
                + "Please be sure your XML file includes the "
                + "<a href='http://docs.eurekastreams.org/Technical-Specification/1.1/Theme%20Format.html' "
                + "target='_blank'>required fields</a>. "
                + "You will not be able to upload the XML without the required fields."));
        form.addFormDivider();

        form
                .addFormElement(new BasicDropDownFormElement("Category", "category", categories, defaultCategory, "",
                        true));

        form.addFormDivider();

        form.addFormElement(new BasicTextBoxFormElement("Theme XML:", "url", defaultUrl,
                "Enter the link to the xml file", true));

        form.addFormDivider();

        galleryAddOrEditContainer.clear();
        galleryAddOrEditContainer.add(form);
    }

    /**
     * Render the create or edit screen for a gadget.
     *
     * @param categories
     *            the params from the history token.
     */
    private void renderCreateOrEditGadget(final LinkedList<String> categories)
    {

        String defaultCategory = null;
        String defaultUrl = "";
        String id = "";

        Map<String, String> urlParams = new HashMap<String, String>();
        urlParams.put("tab", Session.getInstance().getParameterValue("tab"));
        urlParams.put("galleryTab", "Apps");

        this.setPreviousPage(new CreateUrlRequest(Page.GALLERY, urlParams), "< Return to Configure Page");

        String title = "Add App";
        FormBuilder.Method method = Method.INSERT;

        if (Session.getInstance().getParameterValue("action").equals("editApp"))
        {
            title = "Edit App";
            method = Method.UPDATE;
            defaultUrl = Session.getInstance().getParameterValue("url");

            defaultCategory = Session.getInstance().getParameterValue("category");
            id = Session.getInstance().getParameterValue("id");
        }

        this.setPageTitle(title);
        FormBuilder form = new FormBuilder("", GadgetDefinitionModel.getInstance(), method);

        if (method.equals(Method.UPDATE))
        {
            form.setSubmitButtonClass(StaticResourceBundle.INSTANCE.coreCss().formUpdateButton());
        }

        form.setOnCancelHistoryToken(Session.getInstance().generateUrl(new CreateUrlRequest(Page.GALLERY, urlParams)));
        form.addFormElement(new ValueOnlyFormElement("id", id));
        form.addWidget(new HTML("<em class='gallery-upload-note'><strong>Please Note:</strong><br />"
                + "Please be sure your XML file includes the required fields. You will not be able to upload the XML "
                + "without the required fields."));
        form.addFormDivider();

        form
                .addFormElement(new BasicDropDownFormElement("Category", "category", categories, defaultCategory, "",
                        true));

        form.addFormDivider();

        form.addFormElement(new BasicTextBoxFormElement("App XML:", "url", defaultUrl,
                "Enter the link to the xml file", true));

        form.addFormDivider();

        galleryAddOrEditContainer.clear();
        galleryAddOrEditContainer.add(form);
    }

    /**
     * Set the values for start page tab drop down.
     *
     * @param inStartPageTabs
     *            List of start page tabs.
     */
    private void setStartTabDropdownValues(final List<Tab> inStartPageTabs)
    {
        startPageTabsDropDownValues.clear();
        startPageTabsDropDownValues.put("-1", "select tab...");

        for (Tab t : inStartPageTabs)
        {
            startPageTabsDropDownValues.put(String.valueOf(t.getId()), t.getTabName());
        }
    }

}
TOP

Related Classes of org.eurekastreams.web.client.ui.pages.start.gallery.GalleryContent

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.