/*
* 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.folksonomy.impl;
import org.exoplatform.container.component.BaseComponentPlugin;
import org.exoplatform.container.xml.InitParams;
import org.exoplatform.container.xml.ObjectParameter;
import org.exoplatform.services.cms.BasePath;
import org.exoplatform.services.cms.folksonomy.impl.TagStyleConfig.HtmlTagStyle;
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.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.util.Iterator;
import java.util.List;
public class TagStylePlugin extends BaseComponentPlugin{
final private static String EXO_TAG_STYLE = "exo:tagStyle" ;
final private static String TAG_RATE_PROP = "exo:styleRange" ;
final private static String HTML_STYLE_PROP = "exo:htmlStyle" ;
private InitParams params_ ;
private RepositoryService repositoryService_ ;
private NodeHierarchyCreator nodeHierarchyCreator_ ;
public TagStylePlugin(InitParams params, RepositoryService repoService,
NodeHierarchyCreator nodeHierarchyCreator) throws Exception {
params_ = params ;
repositoryService_ = repoService ;
nodeHierarchyCreator_ = nodeHierarchyCreator ;
}
/**
* Init tag style nodes in repository.
*/
@SuppressWarnings("unchecked")
public void init() throws Exception {
Iterator<ObjectParameter> it = params_.getObjectParamIterator() ;
TagStyleConfig tagConfig ;
Session session = null;
while(it.hasNext()) {
tagConfig = (TagStyleConfig)it.next().getObject() ;
if(tagConfig.getAutoCreatedInNewRepository()) {
session = getSession();
addTag(session, tagConfig) ;
session.logout();
} else {
session = getSession();
addTag(session, tagConfig) ;
session.logout();
}
}
}
/**
* Init tag style nodes in specific repository.
*/
@SuppressWarnings("unchecked")
public void init(String repository) throws Exception {
Iterator<ObjectParameter> it = params_.getObjectParamIterator() ;
TagStyleConfig tagConfig ;
Session session ;
while(it.hasNext()) {
tagConfig = (TagStyleConfig)it.next().getObject() ;
if(tagConfig.getAutoCreatedInNewRepository() || repository.equals(tagConfig.getRepository())) {
session = getSession();
addTag(session, tagConfig) ;
session.logout();
}
}
}
/**
* Method addTag will set value of HTML_STYLE_PROP property and value of TAG_RATE_PROP property
* for tag style node.
*/
private void addTag(Session session, TagStyleConfig tagConfig) throws Exception {
String exoTagStylePath = nodeHierarchyCreator_.getJcrPath(BasePath.EXO_NEW_TAG_STYLE_PATH) ;
Node exoTagStyleHomeNode = (Node)session.getItem(exoTagStylePath) ;
List<HtmlTagStyle> htmlStyle4Tag = tagConfig.getTagStyleList() ;
for(HtmlTagStyle style: htmlStyle4Tag) {
if(Utils.getAllEditedConfiguredData(
"TagStyle", "EditedConfiguredTagStyle", true).contains(style.getName())) continue;
Node tagStyleNode = Utils.makePath(exoTagStyleHomeNode,"/"+style.getName(),EXO_TAG_STYLE) ;
tagStyleNode.setProperty(TAG_RATE_PROP,style.getTagRate()) ;
tagStyleNode.setProperty(HTML_STYLE_PROP,style.getHtmlStyle()) ;
}
exoTagStyleHomeNode.save() ;
session.save() ;
}
/**
* Get session in system workspace from current repository name
* @return Session
* @throws Exception
*/
private Session getSession() throws Exception{
ManageableRepository manageableRepository = repositoryService_.getCurrentRepository();
DMSConfiguration dmsConfiguration = WCMCoreUtils.getService(DMSConfiguration.class);
DMSRepositoryConfiguration dmsRepoConfig = dmsConfiguration.getConfig();
return manageableRepository.getSystemSession(dmsRepoConfig.getSystemWorkspace());
}
}