/* * Copyright (c) 2009-2010 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.settings; import java.util.HashMap; import java.util.LinkedList; import java.util.List; 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.gadgetspec.GadgetMetaDataDTO; import org.eurekastreams.web.client.events.GotGadgetMetaDataEvent; import org.eurekastreams.web.client.events.Observer; import org.eurekastreams.web.client.events.ShowNotificationEvent; import org.eurekastreams.web.client.events.UpdateHistoryEvent; import org.eurekastreams.web.client.events.UpdatedHistoryParametersEvent; import org.eurekastreams.web.client.events.data.DeletedPluginDefinitionResponseEvent; import org.eurekastreams.web.client.events.data.GotPluginDefinitionModelResponseEvent; import org.eurekastreams.web.client.events.data.InsertedPluginDefinitionResponseEvent; 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.PluginDefinitionModel; import org.eurekastreams.web.client.ui.Session; 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.pagedlist.PagedListPanel; import org.eurekastreams.web.client.ui.common.pagedlist.PluginMetaDataRenderer; 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; /** * Stream plugins panel. */ public class StreamPluginsPanel extends FlowPanel { /** * JSNI Facade. */ WidgetJSNIFacadeImpl jsniFacade = new WidgetJSNIFacadeImpl(); /** * The panel. */ private FlowPanel panel = new FlowPanel(); /** * Gadget tab. */ private PagedListPanel pluginTab = null; /** * Gadget from index. */ private int pluginsFrom = 0; /** * Gadget to index. */ private int pluginsTo = 0; /** * Gadget total number. */ private int pluginsTotal = 0; /** * Add Gadget button. */ private Hyperlink addPlugin; /** * Container for the gallery tabs. */ private FlowPanel galleryPortalContainer = new FlowPanel(); /** * Container for the add/edit panels. */ private FlowPanel galleryAddOrEditContainer = new FlowPanel(); /** * Stream plugins panel. */ public StreamPluginsPanel() { this.clear(); HashMap<String, String> params = new HashMap<String, String>(); params.put("tab", "Plugins"); params.put("action", "newPlugin"); addPlugin = new Hyperlink("Add Plugin", Session.getInstance().generateUrl(new CreateUrlRequest(params))); RootPanel.get().addStyleName(StaticResourceBundle.INSTANCE.coreCss().gallery()); panel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().galleryMaster()); panel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().pluginsMaster()); galleryAddOrEditContainer.addStyleName(StaticResourceBundle.INSTANCE.coreCss().settingsTab()); this.add(panel); addPlugin.addStyleName(StaticResourceBundle.INSTANCE.coreCss().addGadget()); panel.add(galleryPortalContainer); panel.add(galleryAddOrEditContainer); galleryPortalContainer.add(addPlugin); // Calling this gadgets so it works with a GadgetMetaDataRenderer. Do NOT change to plugins. pluginTab = new PagedListPanel("gadgets"); galleryPortalContainer.add(pluginTab); pluginTab.addSet("All", PluginDefinitionModel.getInstance(), new PluginMetaDataRenderer(), new GetGalleryItemsRequest("recent", "", 0, 0)); pluginTab.addSet("Internet Services", PluginDefinitionModel.getInstance(), new PluginMetaDataRenderer(), new GetGalleryItemsRequest("recent", "Internet Services", 0, 0)); Session.getInstance().getEventBus().addObserver(GotGadgetMetaDataEvent.class, new Observer<GotGadgetMetaDataEvent>() { public void update(final GotGadgetMetaDataEvent event) { pluginTab.render(new PagedSet<GadgetMetaDataDTO>(pluginsFrom, pluginsTo, pluginsTotal, event .getMetadata()), "There are no plugins in this category."); } }); Session.getInstance().getEventBus().addObserver(GotPluginDefinitionModelResponseEvent.class, new Observer<GotPluginDefinitionModelResponseEvent>() { public void update(final GotPluginDefinitionModelResponseEvent event) { pluginsFrom = event.getResponse().getFromIndex(); pluginsTo = event.getResponse().getToIndex(); pluginsTotal = event.getResponse().getTotal(); if (pluginsTotal == 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(InsertedPluginDefinitionResponseEvent.class, new Observer<InsertedPluginDefinitionResponseEvent>() { public void update(final InsertedPluginDefinitionResponseEvent arg1) { Session.getInstance().getEventBus().notifyObservers( new UpdateHistoryEvent(new CreateUrlRequest(Page.SETTINGS, "tab", "Plugins"))); pluginTab.reload(); Session.getInstance().getEventBus() .notifyObservers( new ShowNotificationEvent(new Notification( "Stream Plugin has been successfully added"))); } }); Session.getInstance().getEventBus().addObserver(DeletedPluginDefinitionResponseEvent.class, new Observer<DeletedPluginDefinitionResponseEvent>() { public void update(final DeletedPluginDefinitionResponseEvent arg1) { Session.getInstance().getEventBus().notifyObservers( new ShowNotificationEvent(new Notification( "Stream Plugin has been successfully deleted"))); } }); Session.getInstance().getEventBus().addObserver(UpdatedHistoryParametersEvent.class, new Observer<UpdatedHistoryParametersEvent>() { public void update(final UpdatedHistoryParametersEvent event) { if (event.getParameters().get("action").equals("newPlugin")) { galleryPortalContainer.setVisible(false); galleryAddOrEditContainer.setVisible(true); galleryAddOrEditContainer.clear(); String defaultCategory = null; String defaultUrl = ""; String id = ""; FormBuilder form = new FormBuilder("Submit a Plugin", PluginDefinitionModel.getInstance(), Method.INSERT); form.turnOffChangeCheck(); form.setOnCancelHistoryToken(Session.getInstance().generateUrl( new CreateUrlRequest(Page.SETTINGS, "tab", "Plugins"))); form.addFormElement(new ValueOnlyFormElement("id", id)); form.addWidget(new HTML( "<span 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.</span>")); form.addFormDivider(); List<String> categories = new LinkedList<String>(); categories.add("Internet Services"); form.addFormElement(new BasicDropDownFormElement("Category", "category", categories, defaultCategory, "", true)); form.addFormDivider(); form.addFormElement(new BasicTextBoxFormElement("Plugin XML:", "url", defaultUrl, "Enter the link to the xml file", true)); form.addFormDivider(); galleryAddOrEditContainer.add(form); } else { galleryAddOrEditContainer.setVisible(false); galleryPortalContainer.setVisible(true); addPlugin.setVisible(true); } } }, true); } }