/* * Copyright (C) 2003-2007 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.services.cms.views.impl; import org.exoplatform.container.component.BaseComponentPlugin; import org.exoplatform.container.configuration.ConfigurationManager; import org.exoplatform.container.xml.InitParams; import org.exoplatform.container.xml.ObjectParameter; import org.exoplatform.container.xml.ValueParam; import org.exoplatform.services.cms.BasePath; import org.exoplatform.services.cms.impl.DMSConfiguration; import org.exoplatform.services.cms.impl.DMSRepositoryConfiguration; import org.exoplatform.services.cms.impl.Utils; import org.exoplatform.services.cms.templates.TemplateService; import org.exoplatform.services.cms.views.TemplateConfig; import org.exoplatform.services.cms.views.ViewConfig; import org.exoplatform.services.cms.views.ViewConfig.Tab; import org.exoplatform.services.jcr.RepositoryService; import org.exoplatform.services.jcr.core.ManageableRepository; import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator; import org.exoplatform.services.wcm.utils.WCMCoreUtils; import javax.jcr.Node; import javax.jcr.Session; import java.io.InputStream; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class ManageViewPlugin extends BaseComponentPlugin { private static String ECM_EXPLORER_TEMPLATE = "ecmExplorerTemplate" ; public static final String EDITED_CONFIGURED_VIEWS = "EditedConfiguredViews"; public static final String EDITED_CONFIGURED_VIEWS_TEMPLATES = "EditedConfiguredViewsTemplate"; private InitParams params_ ; private RepositoryService repositoryService_ ; private NodeHierarchyCreator nodeHierarchyCreator_ ; private ConfigurationManager cservice_ ; private boolean autoCreateInNewRepository_ = false ; private String predefinedViewsLocation_ = "war:/conf/dms/artifacts"; private DMSConfiguration dmsConfiguration_; private TemplateService templateService; private Set<String> configuredTemplate_; private Set<String> configuredViews_; public ManageViewPlugin(RepositoryService repositoryService, InitParams params, ConfigurationManager cservice, NodeHierarchyCreator nodeHierarchyCreator, DMSConfiguration dmsConfiguration) throws Exception { params_ = params ; repositoryService_ = repositoryService ; nodeHierarchyCreator_ = nodeHierarchyCreator ; cservice_ = cservice ; ValueParam autoInitParam = params.getValueParam("autoCreateInNewRepository") ; if(autoInitParam !=null) { autoCreateInNewRepository_ = Boolean.parseBoolean(autoInitParam.getValue()) ; } ValueParam predefinedViewLocation = params.getValueParam("predefinedViewsLocation"); if(predefinedViewLocation != null) { predefinedViewsLocation_ = predefinedViewLocation.getValue(); } dmsConfiguration_ = dmsConfiguration; templateService = WCMCoreUtils.getService(TemplateService.class); } public void init() throws Exception { if(autoCreateInNewRepository_) { importPredefineViews() ; return ; } return; } private void importPredefineViews() throws Exception { configuredTemplate_ = new HashSet<String>(); configuredViews_ = new HashSet<String>(); Iterator<ObjectParameter> it = params_.getObjectParamIterator() ; String viewsPath = nodeHierarchyCreator_.getJcrPath(BasePath.CMS_VIEWS_PATH); String templatesPath = nodeHierarchyCreator_.getJcrPath(BasePath.CMS_VIEWTEMPLATES_PATH); String warViewPath = predefinedViewsLocation_ + templatesPath.substring(templatesPath.lastIndexOf("exo:ecm") + 7) ; ManageableRepository manageableRepository = repositoryService_.getCurrentRepository(); DMSRepositoryConfiguration dmsRepoConfig = dmsConfiguration_.getConfig(); Session session = manageableRepository.getSystemSession(dmsRepoConfig.getSystemWorkspace()) ; ViewConfig viewObject = null ; TemplateConfig templateObject = null ; Node viewHomeNode = (Node)session.getItem(viewsPath) ; while(it.hasNext()) { Object object = it.next().getObject(); if(object instanceof ViewConfig) { viewObject = (ViewConfig)object ; String viewNodeName = viewObject.getName(); configuredViews_.add(viewNodeName); if(viewHomeNode.hasNode(viewNodeName) || Utils.getAllEditedConfiguredData( this.getClass().getSimpleName(), EDITED_CONFIGURED_VIEWS, true).contains(viewNodeName)) continue ; Node viewNode = addView(viewHomeNode,viewNodeName,viewObject.getPermissions(), viewObject.isHideExplorerPanel(), viewObject.getTemplate()) ; for(Tab tab:viewObject.getTabList()) { addTab(viewNode,tab.getTabName(),tab.getButtons()) ; } }else if(object instanceof TemplateConfig) { templateObject = (TemplateConfig) object; addTemplate(templateObject,session,warViewPath); configuredTemplate_.add(templateObject.getName()); } } session.save(); session.logout(); } private Node addView(Node viewManager, String viewName, String permissions, boolean hideExplorerPanel, String template) throws Exception { Node contentNode = viewManager.addNode(viewName, "exo:view"); contentNode.setProperty("exo:accessPermissions", permissions); contentNode.setProperty("exo:template", template); if(contentNode.hasProperty("exo:hideExplorerPanel")) { contentNode.setProperty("exo:hideExplorerPanel", hideExplorerPanel); } viewManager.save() ; return contentNode ; } private void addTab(Node view, String tabName, String buttons) throws Exception { Node tab ; if(view.hasNode(tabName)){ tab = view.getNode(tabName) ; }else { tab = view.addNode(tabName, "exo:tab"); } tab.setProperty("exo:buttons", buttons); view.save() ; } private void addTemplate(TemplateConfig tempObject, Session session, String warViewPath) throws Exception { String type = tempObject.getTemplateType() ; String alias = "" ; if(type.equals(ECM_EXPLORER_TEMPLATE)) { alias = BasePath.ECM_EXPLORER_TEMPLATES ; } String templateHomePath = nodeHierarchyCreator_.getJcrPath(alias) ; Node templateHomeNode = (Node)session.getItem(templateHomePath) ; String templateName = tempObject.getName() ; if(templateHomeNode.hasNode(templateName) || Utils.getAllEditedConfiguredData( this.getClass().getSimpleName(), EDITED_CONFIGURED_VIEWS_TEMPLATES, true).contains(templateName)) return; String warPath = warViewPath + tempObject.getWarPath() ; InputStream in = cservice_.getInputStream(warPath) ; templateService.createTemplate(templateHomeNode, templateName, templateName, in, new String[] {"*"}); } public Set<String> getConfiguredTemplates() { return configuredTemplate_; } public Set<String> getConfiguredViews() { return configuredViews_; } }