/** * 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.platform.gadgets.services; import java.util.ArrayList; import java.util.List; import org.exoplatform.application.gadget.Gadget; import org.exoplatform.application.gadget.GadgetRegistryService; import org.exoplatform.application.registry.ApplicationCategory; import org.exoplatform.application.registry.ApplicationRegistryService; import org.exoplatform.container.PortalContainer; import org.exoplatform.container.component.RequestLifeCycle; import org.exoplatform.container.xml.InitParams; import org.exoplatform.portal.config.UserACL; import org.exoplatform.portal.config.model.ApplicationType; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import org.picocontainer.Startable; /** * @author <a href="mailto:anouar.chattouna@exoplatform.com">Anouar * Chattouna</a> * @version $Revision$ */ public class PopulateGadgetRegisryService implements Startable { private static final String DEFAULT_GADGETS_CATEGORY_NAME = "Gadgets"; private static String CATEGORY_NAME; private static String GADGETS_CATEGORY_ACCESS_PERMISSION; private static final Log LOG = ExoLogger.getExoLogger(PopulateGadgetRegisryService.class); private GadgetRegistryService gadgetRegistryService = null; private ApplicationRegistryService applicationRegistryService = null; private List<Gadget> gadgets; public PopulateGadgetRegisryService(GadgetRegistryService gadgetRegistryService, ApplicationRegistryService applicationRegistryService, InitParams initParams) { CATEGORY_NAME = initParams.getValueParam("gadgetsCategoryName").getValue(); if (CATEGORY_NAME == null) { CATEGORY_NAME = DEFAULT_GADGETS_CATEGORY_NAME; LOG.warn("Failed to retrieve " + initParams.getValueParam("gadgetsCategoryName").getName() + " init param. Default category name will be used: " + DEFAULT_GADGETS_CATEGORY_NAME); } GADGETS_CATEGORY_ACCESS_PERMISSION = initParams.getValueParam("gadgetsCategoryAccessPermission").getValue(); if (GADGETS_CATEGORY_ACCESS_PERMISSION == null) { GADGETS_CATEGORY_ACCESS_PERMISSION = UserACL.EVERYONE; LOG.warn("Failed to retrieve " + initParams.getValueParam("gadgetsCategoryAccessPermission").getName() + " init param. Default access permission will be used: " + UserACL.EVERYONE); } gadgets = initParams.getObjectParamValues(Gadget.class); this.gadgetRegistryService = gadgetRegistryService; this.applicationRegistryService = applicationRegistryService; } /** * Saves the gadget read from configuration file in the appropriate * application category. */ public void start() { for (Gadget gadget : gadgets) { RequestLifeCycle.begin(PortalContainer.getInstance()); try { // save the gadget via the GadgetRegistryService // check if the gadget was saved elsewhere if (gadgetRegistryService.getGadget(gadget.getName()) == null) { gadgetRegistryService.saveGadget(gadget); } ArrayList<String> permissions = new ArrayList<String>(); String[] permissionEntry = GADGETS_CATEGORY_ACCESS_PERMISSION.split(","); for (String entry : permissionEntry) { permissions.add(entry); } // creates the registry application org.exoplatform.application.registry.Application registryApplication = new org.exoplatform.application.registry.Application(); registryApplication.setApplicationName(gadget.getName()); registryApplication.setType(ApplicationType.GADGET); registryApplication.setDisplayName(gadget.getTitle()); registryApplication.setContentId(gadget.getName()); String description = (gadget.getDescription() == null || gadget.getDescription().length() < 1) ? gadget.getName() : gadget.getDescription(); registryApplication.setDescription(description); registryApplication.setAccessPermissions(permissions); registryApplication.setCategoryName(CATEGORY_NAME); if (applicationRegistryService.getApplicationCategory(CATEGORY_NAME) == null) { // creates the application category ApplicationCategory category = new ApplicationCategory(); category.setName(CATEGORY_NAME); category.setDisplayName(CATEGORY_NAME); category.setDescription(CATEGORY_NAME); category.setAccessPermissions(permissions); applicationRegistryService.save(category, registryApplication); } else { applicationRegistryService.save(applicationRegistryService.getApplicationCategory(CATEGORY_NAME), registryApplication); } } catch (Exception e) { LOG.error("Error while saving gadget: " + gadget.getName() + " with " + CATEGORY_NAME + " application category. ", e); throw new RuntimeException(e); } finally { RequestLifeCycle.end(); } } } public void stop() {} }