/*
* 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());
}
}
}