/*************************************************************************** * 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.cms.documents; import java.util.GregorianCalendar; import java.util.List; import javax.jcr.Node; import javax.jcr.PathNotFoundException; import javax.jcr.RepositoryException; import org.exoplatform.services.jcr.ext.app.SessionProviderService; import org.exoplatform.services.jcr.ext.common.SessionProvider; import org.exoplatform.services.wcm.BaseWCMTestCase; /** * Created by The eXo Platform SARL Author : Phan Trong Lam * lamptdev@gmail.com * Oct 6, 2009 */ public class TestDocumentTypeService extends BaseWCMTestCase { private final static String NT_UNSTRUCTURED = "nt:unstructured"; private final static String NT_FILE = "nt:file"; private final static String JCR_MINE_TYPE = "jcr:mimeType"; private final static String JCR_LAST_MODIFIED = "jcr:lastModified"; private final static String JCR_DATA = "jcr:data"; private final static String NT_RESOURCE = "nt:resource"; private DocumentTypeService documentTypeService_; public void setUp() throws Exception { super.setUp(); documentTypeService_ = (DocumentTypeService) container.getComponentInstanceOfType(DocumentTypeService.class); applySystemSession(); init(); } public void tearDown() throws Exception { clear(); session.save(); session.logout(); super.tearDown(); } /** * Execute test for getAllSupportedType method * Input : dms-document-type-configuration.xml * Expect: Get list of all supported types include Video, Images. * @throws Exception */ public void testAllSupportedType() throws Exception { List<String> resultList = documentTypeService_.getAllSupportedType(); assertEquals(1, resultList.size()); // Content } /** * Execute test for getAllDocumentsByKindOfDocumentType method. * Input : Video supported type * Expect: Get list of mime types of Video supported type. * @throws Exception */ public void testAllDocumentsByKindOfDocumentType() throws Exception { Node rootNode = session.getRootNode(); Node documentNode = getDocument(rootNode, "document"); addDocumentFile(documentNode, "testaudio01", "audio/mp3"); addDocumentFile(documentNode, "videomp302", "video/mp3"); addDocumentFile(documentNode, "One night at museum", "video/mpeg"); addDocumentFile(documentNode, "Black dahlia", "video/mpeg"); addDocumentFile(documentNode, "image01", "image/gif"); addDocumentFile(documentNode, "image02", "image/jpeg"); addDocumentFile(documentNode, "image03", "image/png"); addDocumentFile(documentNode, "image04", "image/tiff"); documentNode.getSession().save(); String supportedType = "Video"; List<Node> resultList = documentTypeService_ .getAllDocumentsByDocumentType(supportedType, COLLABORATION_WS, createSessionProvider()); assertEquals(2, resultList.size()); } /** * Test method getAllDocumentsByType * Input : image type * Expect: Get list of nodes in which jcr:mimeType properties are image/gif types. * @throws Exception */ public void testAllDocumentsByType() throws Exception { Node rootNode = session.getRootNode(); Node documentNode = getDocument(rootNode, "document"); addDocumentFile(documentNode, "testaudio01", "audio/mp3"); addDocumentFile(documentNode, "testaudio02", "audio/mp3"); addDocumentFile(documentNode, "image01", "image/gif"); addDocumentFile(documentNode, "image02", "image/gif"); addDocumentFile(documentNode, "image03", "image/gif"); addDocumentFile(documentNode, "text01", "text/plain"); documentNode.getSession().save(); List<Node> resultList = documentTypeService_.getAllDocumentsByType(COLLABORATION_WS, createSessionProvider(), "image/gif"); assertNotNull(resultList); assertEquals(3, resultList.size()); } /** * Test method getAllDocumentsByType * Input : image, audio, text types. * Expect: Get list of nodes in which include jcr:mimeType properties are image/gif, * audio/mp3, text/plain types. * @throws Exception */ public void testAllDocumentsByTypes() throws Exception { String[] mimeTypes = { "image/gif", "audio/mp3" }; Node rootNode = session.getRootNode(); Node documentNode = getDocument(rootNode, "document"); addDocumentFile(documentNode, "testaudio01", "audio/mp3"); addDocumentFile(documentNode, "testaudio02", "audio/mp3"); addDocumentFile(documentNode, "image01", "image/gif"); addDocumentFile(documentNode, "image02", "image/gif"); addDocumentFile(documentNode, "image03", "image/gif"); addDocumentFile(documentNode, "text01", "text/plain"); documentNode.getSession().save(); List<Node> resultList = documentTypeService_.getAllDocumentsByType(COLLABORATION_WS, createSessionProvider(), mimeTypes); assertEquals(5, resultList.size()); } /** * Test method getAllDocumentsByUser * Input : audio, text types and root user name. * Expect: Get list of nodes in which jcr:mimeType properties are audio/mp3, text/plain and * exo:owner is root * @throws Exception */ public void testAllDocumentsByUser01() throws Exception { String[] mimeTypes = { "audio/mp3", "text/plain" }; Node rootNode = session.getRootNode(); Node documentNode = getDocument(rootNode, "document"); Node testaudio01 = addDocumentFile(documentNode, "testaudio01", "audio/mp3"); Node testaudio02 = addDocumentFile(documentNode, "testaudio02", "audio/mp3"); Node image01 = addDocumentFile(documentNode, "image01", "image/gif"); Node image02 = addDocumentFile(documentNode, "image02", "image/gif"); Node image03 = addDocumentFile(documentNode, "image03", "image/gif"); Node text = addDocumentFile(documentNode, "text", "text/plain"); documentNode.getSession().save(); String username = "__system"; List<Node> resultList = documentTypeService_.getAllDocumentsByUser(COLLABORATION_WS, createSessionProvider(), mimeTypes, username); assertTrue(resultList.contains(testaudio01)); assertTrue(resultList.contains(testaudio02)); assertFalse(resultList.contains(image01)); assertFalse(resultList.contains(image02)); assertFalse(resultList.contains(image03)); assertTrue(resultList.contains(text)); } /** * Test method getAllDocumentsByUser * Input : audio, text types and jame user name. * Expect: Get an empty list of nodes. * @throws Exception */ public void testAllDocumentsByUser02() throws Exception { String[] mimeTypes = { "audio/mp3", "text/plain" }; Node rootNode = session.getRootNode(); Node documentNode = getDocument(rootNode, "document"); addDocumentFile(documentNode, "testaudio01", "audio/mp3"); addDocumentFile(documentNode, "testaudio02", "audio/mp3"); addDocumentFile(documentNode, "image01", "image/gif"); addDocumentFile(documentNode, "image02", "image/gif"); addDocumentFile(documentNode, "image03", "image/gif"); addDocumentFile(documentNode, "text", "text/plain"); documentNode.getSession().save(); String username = "jame"; List<Node> resultList = documentTypeService_.getAllDocumentsByUser(COLLABORATION_WS, createSessionProvider(), mimeTypes, username); assertEquals(0, resultList.size()); } /** * Test AllDocumentByContentsType with content type is not content * * Expect: empty list of nodes. * @throws Exception */ public void testGetAllDocumentByContentsTypeIsNoneContent() throws Exception { Node rootNode = session.getRootNode(); Node documentNode = getDocument(rootNode, "document"); addDocumentFile(documentNode, "testaudio01", "audio/mp3"); addDocumentFile(documentNode, "testaudio02", "audio/mp3"); addDocumentFile(documentNode, "image01", "image/gif"); addDocumentFile(documentNode, "image02", "image/gif"); addDocumentFile(documentNode, "image03", "image/gif"); addDocumentFile(documentNode, "text", "text/plain"); documentNode.getSession().save(); String documentType = "NoneContent"; List<Node> resultList = documentTypeService_.getAllDocumentByContentsType(documentType, COLLABORATION_WS, sessionProvider, null); assertEquals(null, resultList); } /** * Test AllDocumentByContentsType with content type is content * * Expect: nodes that are content * @throws Exception */ public void testGetAllDocumentByContentsTypeIsContent() throws Exception { Node rootNode = session.getRootNode(); Node documentNode = getDocument(rootNode, "document"); Node testaudio01 = addDocumentFile(documentNode, "testaudio01", "audio/mp3"); Node testaudio02 = addDocumentFile(documentNode, "testaudio02", "audio/mp3"); Node image01 = addDocumentFile(documentNode, "image01", "image/gif"); Node image02 = addDocumentFile(documentNode, "image02", "image/gif"); Node image03 = addDocumentFile(documentNode, "image03", "image/gif"); Node text = addDocumentFile(documentNode, "text", "text/plain"); documentNode.getSession().save(); String documentType = "Content"; List<Node> resultList = documentTypeService_.getAllDocumentByContentsType(documentType, COLLABORATION_WS, sessionProvider, null); assertTrue(resultList.contains(testaudio01)); assertTrue(resultList.contains(testaudio02)); assertTrue(resultList.contains(image01)); assertTrue(resultList.contains(image02)); assertTrue(resultList.contains(image03)); assertTrue(resultList.contains(text)); } /** * Test AllDocumentByContentsType with content type is content and have specific owner * * Expect: nodes that are content and have specific owner * @throws Exception */ public void testGetAllDocumentByContentsTypeAndOwner() throws Exception { Node rootNode = session.getRootNode(); Node documentNode = getDocument(rootNode, "document"); addDocumentFile(documentNode, "testaudio01", "audio/mp3"); addDocumentFile(documentNode, "testaudio02", "audio/mp3"); addDocumentFile(documentNode, "image01", "image/gif"); addDocumentFile(documentNode, "image02", "image/gif"); addDocumentFile(documentNode, "image03", "image/gif"); addDocumentFile(documentNode, "text", "text/plain"); documentNode.getSession().save(); String documentType = "Content"; List<Node> resultList = documentTypeService_.getAllDocumentByContentsType(documentType, COLLABORATION_WS, sessionProvider, "john"); assertEquals(0, resultList.size()); } private SessionProvider createSessionProvider() { SessionProviderService sessionProviderService = (SessionProviderService) container .getComponentInstanceOfType(SessionProviderService.class); return sessionProviderService.getSystemSessionProvider(null); } /** * @throws Exception */ private void init() throws Exception { // 1. Get a rootNode from session Node rootNode = session.getRootNode(); // 2. Create basic tree nodes and it's properties rootNode.addNode("document", NT_UNSTRUCTURED); session.save(); } /** * @throws Exception */ private void clear() throws Exception { // 1. Get a rootNode from session Node rootNode = session.getRootNode(); // 2. Get and delete test nodes Node documentNode = rootNode.getNode("document"); documentNode.remove(); session.save(); } /** * @param currentNode * @param testName * @param mimeTypeValue * @return newly created node * @throws Exception */ private Node addDocumentFile(Node currentNode, String testName, String mimeTypeValue) throws Exception { Node documentNode = currentNode.addNode(testName, NT_FILE); Node subNode = documentNode.addNode("jcr:content", NT_RESOURCE); subNode.setProperty(JCR_MINE_TYPE, mimeTypeValue); subNode.setProperty(JCR_DATA, ""); subNode.setProperty(JCR_LAST_MODIFIED, new GregorianCalendar()); return documentNode; } /** * @param parentNode * @param documentName * @return * @throws PathNotFoundException * @throws RepositoryException */ private Node getDocument(Node parentNode, String documentName) throws PathNotFoundException, RepositoryException { try { return parentNode.getNode(documentName); } catch(PathNotFoundException e) { return parentNode.addNode(documentName); } } }