/***************************************************************************
* Copyright (C) 2003-2009 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.ecm.dms.taxonomy;
import java.util.ArrayList;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import org.apache.commons.lang.StringUtils;
import org.exoplatform.container.xml.InitParams;
import org.exoplatform.services.cms.impl.DMSConfiguration;
import org.exoplatform.services.cms.link.LinkManager;
import org.exoplatform.services.cms.taxonomy.impl.TaxonomyServiceImpl;
import org.exoplatform.services.jcr.RepositoryService;
import org.exoplatform.services.jcr.ext.app.SessionProviderService;
import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator;
/**
* Created by The eXo Platform SARL
* Author : Dang Van Minh
* minh.dang@exoplatform.com
* Mar 16, 2011
* 6:05:28 PM
*/
public class MockTaxonomyService extends TaxonomyServiceImpl {
private RepositoryService repositoryService_;
private final String SQL_QUERY = "Select * from exo:taxonomyLink where jcr:path like '$0/%' and exo:uuid = '$1' "
+ "order by exo:dateCreated DESC";
private SessionProviderService providerService_;
public MockTaxonomyService(InitParams initParams, SessionProviderService providerService,
NodeHierarchyCreator nodeHierarchyCreator, RepositoryService repoService,
LinkManager linkManager, DMSConfiguration dmsConfiguration) throws Exception {
super(initParams, providerService, nodeHierarchyCreator, repoService, linkManager, dmsConfiguration);
repositoryService_ = repoService;
providerService_ = providerService;
}
public boolean hasCategories(Node node, String taxonomyName, boolean system) throws RepositoryException {
List<Node> listCate = getCategories(node, taxonomyName, system);
if (listCate != null && listCate.size() > 0)
return true;
return false;
}
public List<Node> getAllCategories(Node node, boolean system) throws RepositoryException {
List<Node> listCategories = new ArrayList<Node>();
List<Node> allTrees = getAllTaxonomyTrees(system);
for (Node tree : allTrees) {
List<Node> categories = getCategories(node, tree.getName(), system);
for (Node category : categories) listCategories.add(category);
}
return listCategories;
}
public List<Node> getCategories(Node node, String taxonomyName, boolean system) throws RepositoryException {
List<Node> listCate = new ArrayList<Node>();
Session session = null;
try {
if (node.isNodeType("mix:referenceable")) {
Node rootNodeTaxonomy = getTaxonomyTree(taxonomyName, system);
if (rootNodeTaxonomy != null) {
String sql = null;
sql = StringUtils.replace(SQL_QUERY, "$0", rootNodeTaxonomy.getPath());
sql = StringUtils.replace(sql, "$1", node.getUUID());
session = providerService_.getSystemSessionProvider(null)
.getSession(rootNodeTaxonomy.getSession()
.getWorkspace()
.getName(),
repositoryService_.getCurrentRepository());
QueryManager queryManager = session.getWorkspace().getQueryManager();
Query query = queryManager.createQuery(sql, Query.SQL);
QueryResult result = query.execute();
NodeIterator iterate = result.getNodes();
while (iterate.hasNext()) {
Node parentCate = iterate.nextNode().getParent();
listCate.add(parentCate);
}
}
}
} catch (Exception e) {
throw new RepositoryException(e);
}
return listCate;
}
}