/** * Copyright (C) 2010 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.xcmis.spi.tck; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.xcmis.spi.BaseContentStream; import org.xcmis.spi.ChangeLogTokenHolder; import org.xcmis.spi.CmisConstants; import org.xcmis.spi.ItemsList; import org.xcmis.spi.RenditionFilter; import org.xcmis.spi.model.CapabilityACL; import org.xcmis.spi.model.CapabilityChanges; import org.xcmis.spi.model.CapabilityQuery; import org.xcmis.spi.model.CapabilityRendition; import org.xcmis.spi.model.CmisObject; import org.xcmis.spi.model.ContentStreamAllowed; import org.xcmis.spi.model.IncludeRelationships; import org.xcmis.spi.model.TypeDefinition; import org.xcmis.spi.utils.MimeType; import java.util.HashSet; import java.util.List; import java.util.Set; /** * 2.2.6 Discovery Services The Discovery Services (query) are used to search * for query-able objects within the Repository. * * @author <a href="mailto:alexey.zavizionov@exoplatform.com">Alexey * Zavizionov</a> * @version $Id$ */ public class DiscoveryTest extends BaseTest { private static String testRootFolderId; private static String name0 = "test query 000"; private static String name1 = "test query 001"; private static String name2 = "test query 002"; private static String document0; private static String document1; private static String document2; private static TypeDefinition documentType; @BeforeClass public static void start() throws Exception { testRootFolderId = createFolder(rootFolderID, CmisConstants.FOLDER, "discovery_testroot", null, null, null); documentType = connection.getTypeDefinition(CmisConstants.DOCUMENT); document0 = createDocument(testRootFolderId, // documentType.getId(), // name0, // documentType.getContentStreamAllowed() == ContentStreamAllowed.NOT_ALLOWED ? null : new BaseContentStream( "test query 000".getBytes(), "", new MimeType("text", "plain")), // null, // null, // null, // null); document1 = createDocument(testRootFolderId, // documentType.getId(), // name1, // documentType.getContentStreamAllowed() == ContentStreamAllowed.NOT_ALLOWED ? null : new BaseContentStream( "test query 001".getBytes(), "", new MimeType("text", "plain")), // null, // null, // null, // null); document2 = createDocument(testRootFolderId, // documentType.getId(), // name2, // documentType.getContentStreamAllowed() == ContentStreamAllowed.NOT_ALLOWED ? null : new BaseContentStream( "test query 002".getBytes(), "", new MimeType("text", "plain")), // null, // null, // null, // null); System.out.println("Running Discovery Service tests"); } @AfterClass public static void stop() throws Exception { if (testRootFolderId != null) { clear(testRootFolderId); } } /** * 2.2.6.1 query. * * Description: Executes a CMIS query statement against the contents of the * Repository. */ @Test public void testContentChanges() throws Exception { CapabilityChanges capabilityChanges = capabilities.getCapabilityChanges(); if (capabilityChanges == CapabilityChanges.NONE) { return; } TypeDefinition documentType = connection.getTypeDefinition(CmisConstants.DOCUMENT); createDocument(testRootFolderId, documentType.getId(), generateName(documentType, null), null, null, null, null, null); String logToken = connection.getStorage().getRepositoryInfo().getLatestChangeLogToken(); ChangeLogTokenHolder logTokenHolder = new ChangeLogTokenHolder(); logTokenHolder.setValue(logToken); ItemsList<CmisObject> changes = connection.getContentChanges(logTokenHolder, // capabilityChanges == CapabilityChanges.ALL || capabilityChanges == CapabilityChanges.PROPERTIES ? true : false, // null, // implementation specific set of properties isPoliciesSupported ? true : false, // capabilities.getCapabilityACL() != CapabilityACL.NONE ? true : false, // true, // -1); assertEquals(1, changes.getNumItems()); } /** * 2.2.6.1 query. * * Description: Executes a CMIS query statement against the contents of the * Repository. */ @Test public void testQuery() throws Exception { if (capabilities.getCapabilityQuery() == CapabilityQuery.NONE) { return; } String statement = null; if (documentType.getContentStreamAllowed() != ContentStreamAllowed.NOT_ALLOWED) { statement = "SELECT * FROM " + CmisConstants.DOCUMENT + " WHERE CONTAINS(\"test query 000\")"; } else { statement = "SELECT * FROM " + CmisConstants.DOCUMENT + " WHERE cmis:name='test query 000'"; } ItemsList<CmisObject> query = connection.query(statement, // capabilities.isCapabilityAllVersionsSearchable() ? true : false, // true, // isRelationshipsSupported ? IncludeRelationships.BOTH : IncludeRelationships.NONE, // true, // capabilities.getCapabilityRenditions() != CapabilityRendition.NONE ? RenditionFilter.ANY : RenditionFilter.NONE, // -1, // 0); assertNotNull(query); List<CmisObject> items = query.getItems(); assertEquals(1, items.size()); CmisObject item = items.get(0); assertNotNull(item); assertEquals(document0, item.getObjectInfo().getId()); } /** * 2.2.6.1 query. * * Description: Executes a CMIS query statement against the contents of the * Repository. */ @Test public void testQuery2() throws Exception { if (capabilities.getCapabilityQuery() == CapabilityQuery.NONE) { return; } String statement = null; if (documentType.getContentStreamAllowed() != ContentStreamAllowed.NOT_ALLOWED) { statement = "SELECT * FROM " + CmisConstants.DOCUMENT + " WHERE CONTAINS(\"test query\")"; } else { statement = "SELECT * FROM " + CmisConstants.DOCUMENT + " WHERE cmis:name LIKE 'test query%'"; } ItemsList<CmisObject> query = connection.query(statement, // capabilities.isCapabilityAllVersionsSearchable() ? true : false, // true, // isRelationshipsSupported ? IncludeRelationships.BOTH : IncludeRelationships.NONE, // true, // capabilities.getCapabilityRenditions() != CapabilityRendition.NONE ? RenditionFilter.ANY : RenditionFilter.NONE, // -1, // 0); assertNotNull(query); List<CmisObject> items = query.getItems(); assertEquals(3, items.size()); Set<String> ids = new HashSet<String>(3); for (CmisObject item : items) { ids.add(item.getObjectInfo().getId()); } assertTrue("Expected item " + document0 + " not found in result set. ", ids.contains(document0)); assertTrue("Expected item " + document1 + " not found in result set. ", ids.contains(document1)); assertTrue("Expected item " + document2 + " not found in result set. ", ids.contains(document2)); } }