/** * Copyright (C) 2009 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.applicationregistry.webui.component; import java.util.ArrayList; import java.util.List; import org.exoplatform.application.gadget.Gadget; import org.exoplatform.application.gadget.GadgetRegistryService; import org.exoplatform.application.gadget.Source; import org.exoplatform.application.gadget.SourceStorage; import org.exoplatform.application.registry.Application; import org.exoplatform.application.registry.ApplicationCategory; import org.exoplatform.application.registry.ApplicationRegistryService; import org.exoplatform.commons.serialization.api.annotations.Serialized; import org.exoplatform.portal.config.model.ApplicationType; import org.exoplatform.portal.webui.application.GadgetUtil; import org.exoplatform.web.application.ApplicationMessage; import org.exoplatform.webui.application.WebuiRequestContext; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIApplication; import org.exoplatform.webui.core.UIContainer; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; /** * Created by The eXo Platform SAS Author : Pham Thanh Tung thanhtungty@gmail.com Aug 22, 2008 */ @ComponentConfig(template = "app:/groovy/applicationregistry/webui/component/UIGadgetInfo.gtmpl", events = { @EventConfig(listeners = UIGadgetInfo.RefreshActionListener.class), @EventConfig(listeners = UIGadgetInfo.EditActionListener.class), @EventConfig(listeners = UIGadgetInfo.ShowCategoriesActionListener.class) }) @Serialized public class UIGadgetInfo extends UIContainer { private static String CATEGORY_ID = "GadgetCategory"; private Gadget gadget_; public UIGadgetInfo() throws Exception { addChild(UICategorySelector.class, null, CATEGORY_ID); } public Gadget getGadget() { return gadget_; } public void setGadget(Gadget gadget) { gadget_ = gadget; } public String getViewUrl() { return GadgetUtil.reproduceUrl(gadget_.getUrl(), gadget_.isLocal()); } public String getEditUrl() { if (gadget_.isLocal()) return GadgetUtil.getEditPath(gadget_.getUrl()); return null; } public String getCategorieNames() throws Exception { ApplicationRegistryService appRegService = getApplicationComponent(ApplicationRegistryService.class); List<ApplicationCategory> allCategories = appRegService.getApplicationCategories(); List<String> nameList = new ArrayList<String>(); for (ApplicationCategory category : allCategories) { if (appRegService.getApplication(category.getName(), gadget_.getName()) != null) { nameList.add(category.getDisplayName(true)); } } StringBuffer names = new StringBuffer(""); for (String name : nameList) { names.append(name); if (!name.equals(nameList.get(nameList.size() - 1))) names.append(", "); } return names.toString(); } public static class RefreshActionListener extends EventListener<UIGadgetInfo> { public void execute(Event<UIGadgetInfo> event) throws Exception { UIGadgetInfo uiInfo = event.getSource(); WebuiRequestContext ctx = event.getRequestContext(); UIGadgetManagement uiManagement = uiInfo.getParent(); Gadget gadget = uiInfo.getGadget(); GadgetRegistryService service = uiInfo.getApplicationComponent(GadgetRegistryService.class); if (gadget == null || service.getGadget(gadget.getName()) == null) { UIApplication uiApp = ctx.getUIApplication(); uiApp.addMessage(new ApplicationMessage("UIGadgetInfo.msg.gadgetNotExist", null)); uiManagement.reload(); return; } service.saveGadget(GadgetUtil.toGadget(gadget.getName(), gadget.getUrl(), gadget.isLocal())); uiManagement.setSelectedGadget(gadget.getName()); ctx.addUIComponentToUpdateByAjax(uiManagement); } } public static class EditActionListener extends EventListener<UIGadgetInfo> { public void execute(Event<UIGadgetInfo> event) throws Exception { UIGadgetInfo uiInfo = event.getSource(); Gadget gadget = uiInfo.getGadget(); UIGadgetManagement uiManagement = uiInfo.getParent(); GadgetRegistryService service = uiInfo.getApplicationComponent(GadgetRegistryService.class); if (gadget == null || service.getGadget(gadget.getName()) == null) { UIApplication uiApp = event.getRequestContext().getUIApplication(); uiApp.addMessage(new ApplicationMessage("UIGadgetInfo.msg.gadgetNotExist", null)); uiManagement.reload(); return; } SourceStorage sourceStorage = uiManagement.getApplicationComponent(SourceStorage.class); UIGadgetEditor uiEditor = uiManagement.createUIComponent(UIGadgetEditor.class, null, null); String fileName = gadget.getName() + ".xml"; // get dir path of gadget String gadgetUrl = gadget.getUrl(); String[] gaggetUrlPart = gadgetUrl.split("/"); String dirPath = gaggetUrlPart[gaggetUrlPart.length - 2]; // String dirPath = gaggetUrlPart[gaggetUrlPart.length - 9]; // get gadget's source: path = dir path + file name Source source = sourceStorage.getSource(gadget); uiEditor.setSource(source); uiEditor.setGadgetName(gadget.getName()); uiEditor.setDirPath(dirPath); uiManagement.getChildren().clear(); uiManagement.addChild(uiEditor); event.getRequestContext().addUIComponentToUpdateByAjax(uiManagement); } } public static class ShowCategoriesActionListener extends EventListener<UIGadgetInfo> { @Override public void execute(Event<UIGadgetInfo> event) throws Exception { UIGadgetInfo gadgetInfo = event.getSource(); ApplicationRegistryService appRegService = gadgetInfo.getApplicationComponent(ApplicationRegistryService.class); List<ApplicationCategory> categories = appRegService.getApplicationCategories(); if (categories == null || categories.isEmpty()) { UIApplication uiApp = event.getRequestContext().getUIApplication(); uiApp.addMessage(new ApplicationMessage("UICategorySelector.msg.NoCategory", null)); return; } Gadget gadget = gadgetInfo.getGadget(); GadgetRegistryService service = gadgetInfo.getApplicationComponent(GadgetRegistryService.class); if (gadget == null || service.getGadget(gadget.getName()) == null) { UIApplication uiApp = event.getRequestContext().getUIApplication(); uiApp.addMessage(new ApplicationMessage("UIGadgetInfo.msg.gadgetNotExist", null)); UIGadgetManagement uiManagement = gadgetInfo.getParent(); uiManagement.reload(); return; } gadgetInfo.removeChild(UICategorySelector.class); UICategorySelector selector = gadgetInfo.addChild(UICategorySelector.class, null, CATEGORY_ID); Application app = new Application(); app.setApplicationName(gadget.getName()); app.setType(ApplicationType.GADGET); app.setDisplayName(gadget.getTitle()); app.setContentId(gadget.getName()); String description = (gadget.getDescription() == null || gadget.getDescription().length() < 1) ? gadget.getName() : gadget.getDescription(); app.setDescription(description); app.setAccessPermissions(new ArrayList<String>()); selector.setApplication(app); selector.setRendered(true); event.getRequestContext().addUIComponentToUpdateByAjax(event.getSource()); } } }