package org.ow2.bonita;
/**
* Copyright (C) 2011 BonitaSoft S.A.
* BonitaSoft, 31 rue Gustave Eiffel - 38000 Grenoble
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2.0 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/>.
*/
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import junit.framework.TestCase;
import org.apache.commons.io.IOUtils;
import org.ow2.bonita.DocumentAlreadyExistsException;
import org.ow2.bonita.DocumentNotFoundException;
import org.ow2.bonita.DocumentationCreationException;
import org.ow2.bonita.FolderAlreadyExistsException;
import org.ow2.bonita.facade.uuid.ProcessDefinitionUUID;
import org.ow2.bonita.facade.uuid.ProcessInstanceUUID;
import org.ow2.bonita.services.CMISDocumentManager;
import org.ow2.bonita.services.Document;
import org.ow2.bonita.services.DocumentImpl;
import org.ow2.bonita.services.DocumentIndex;
import org.ow2.bonita.services.DocumentSearchBuilder;
import org.ow2.bonita.services.DocumentationManager;
import org.ow2.bonita.services.Folder;
import org.ow2.bonita.services.SearchResult;
/**
* @author Baptiste Mesta
*
*/
public class CMISDocumentManagerTest extends TestCase {
protected static DocumentationManager manager;
public static void setUpClass() {
}
public void setUp() {
System.out.println("Test running = " + getName());
String cmisRepositoryUrl = System.getProperty("cmisRepositoryUrl");
String cmisRepositoryId = System.getProperty("cmisRepositoryId");
String cmisUsername = System.getProperty("cmisUsername");
String cmisPassword = System.getProperty("cmisPassword");
if (cmisRepositoryUrl == null
|| "${cmisRepositoryUrl}".intern().equals(cmisRepositoryUrl)) {
throw new RuntimeException(
"setUp: you should set the system property 'cmisRepositoryUrl'");
}
if (cmisRepositoryId == null
|| "${cmisRepositoryId}".intern().equals(cmisRepositoryId)) {
throw new RuntimeException(
"setUp: you should set the system property 'cmisRepositoryId'");
}
if (cmisUsername == null
|| "${cmisUsername}".intern().equals(cmisUsername)) {
throw new RuntimeException(
"setUp: you should set the system property 'cmisUsername'");
}
if (cmisPassword == null
|| "${cmisPassword}".intern().equals(cmisPassword)) {
throw new RuntimeException(
"setUp: you should set the system property 'cmisPassword'");
}
System.out.println("\t cmisRepositoryUrl = " + cmisRepositoryUrl
+ ",\n\t repositoryId = " + cmisRepositoryId + ", userId = "
+ cmisUsername + ", password = " + cmisPassword);
manager = new CMISDocumentManager("ATOM", cmisRepositoryUrl,
cmisRepositoryId, true, cmisUsername, cmisPassword);
Folder rootFolder = manager.getRootFolder();
try {
manager.clear();
} catch (DocumentNotFoundException e) {
e.printStackTrace();
}
}
public void testCreateFolder() throws FolderAlreadyExistsException {
Folder folderId = manager.createFolder("testCreateFolder");
assertNotNull(folderId);
assertFalse("".equals(folderId.getId()));
}
public void testCreateTwoFolders() throws FolderAlreadyExistsException {
Folder folderId1 = manager.createFolder("testCreateFolder1");
Folder folderId2 = manager.createFolder("testCreateFolder2");
assertNotSame(folderId1, folderId2);
}
public void testCannotCreateTwoFolderWithSameNameAtSameLevel()
throws FolderAlreadyExistsException {
manager.createFolder("testCannotCreateTwoFolderWithSameNameAtSameLevel");
try {
manager
.createFolder("testCannotCreateTwoFolderWithSameNameAtSameLevel");
fail("must not be able to create 2 document with same name in same folder");
} catch (FolderAlreadyExistsException e) {
}
}
public void testCreateSubFolder() throws FolderAlreadyExistsException {
Folder folder1 = manager.createFolder("testCreateSubFolder");
Folder subFodler = manager.createFolder("subFolder", folder1.getId());
assertNotNull(subFodler);
assertEquals(subFodler, manager.getChildrenFolder(folder1.getId()).get(0));
}
public void testCreateSubFolderWithSameName()
throws FolderAlreadyExistsException {
Folder folder1 = manager.createFolder("testCreateSubFolderWithSameName");
Folder subFodler = manager.createFolder(
"testCreateSubFolderWithSameName", folder1.getId());
assertNotSame(folder1.getId(), subFodler.getId());
}
public void testFolderDoesNotExists() {
assertFalse(manager.folderExists("testFolder2"));
}
public void testFolderExists() throws FolderAlreadyExistsException {
manager.createFolder("testFolder");
assertTrue(manager.folderExists("testFolder"));
}
public void testFolderExistsWithParent() throws FolderAlreadyExistsException {
String parentId = manager.createFolder("testFolderExistsWithParent")
.getId();
manager.createFolder("childFolder", parentId);
assertTrue(manager.folderExists("childFolder", parentId));
}
public void testGetFolderUsingName() throws FolderAlreadyExistsException {
String folderName = "nameOfTheFolder";
Folder folder1 = manager.createFolder(folderName);
List<Folder> folders = manager.getFolders(folderName);
assertNotNull(folders);
assertEquals(1, folders.size());
assertEquals(folder1, folders.get(0));// TODO implements equals on folder
// object
}
public void testGetFolderUsingNameWithUnexistingFolder()
throws FolderAlreadyExistsException {
String folderName = "nameOfTheUnexistingFolder";
List<Folder> folders = manager.getFolders(folderName);
assertNotNull(folders);
assertEquals(0, folders.size());
}
public void testGetSubFolder() throws FolderAlreadyExistsException {
Folder folder1 = manager.createFolder("testGetSubFolder");
Folder subFolder = manager.createFolder("subFolder", folder1.getId());
List<Folder> subFolders = manager.getChildrenFolder(folder1.getId());
assertNotNull(subFolders);
assertEquals(1, subFolders.size());
assertEquals(subFolder, subFolders.get(0));
}
public void testNoDocumentInFolder() throws FolderAlreadyExistsException {
Folder folder1 = manager.createFolder("testGetDocument");
List<Document> documents = manager.getChildrenDocuments(folder1.getId());
assertEquals(0, documents.size());
}
// FIXME add test with document in root folder
public void testCreateDocument() throws Exception {
// String author = "john";
String docName = "theDoc";
Document doc = manager.createDocument(docName, new ProcessDefinitionUUID(
"a"), new ProcessInstanceUUID("b"));
assertNotNull(doc);
assertNotNull(doc.getId());
assertEquals(docName, doc.getName());
assertNotNull(doc.getCreationDate());
// assertEquals(doc.getCreationDate(),doc.getLastModificationDate());
// assertEquals(author,doc.getAuthor());
assertEquals(doc.getAuthor(), doc.getLastModifiedBy());
assertNotNull(doc.getVersionLabel());
assertNotNull(doc.getVersionSeriesId());
assertTrue(doc.isMajorVersion());
assertTrue(doc.isLatestVersion());
}
public void testCreateADocumentThatAlreadyExists() throws Exception {
String docName = "myDocument";
manager.createDocument(docName, new ProcessDefinitionUUID("a"),
new ProcessInstanceUUID("b"));
try {
manager.createDocument(docName, new ProcessDefinitionUUID("a"),
new ProcessInstanceUUID("b"));
fail("must throw a document already exists exception");
} catch (DocumentationCreationException e) {
}
}
// FIXME test on delete folder + delete document
public void testCreateDocumentWithContent() throws Exception {
byte[] contents = "The doc contents".getBytes();
String fileName = "testFile.txt";
// String author = "john";
String docName = "theDoc";
String contentMimeType = "kikoo/text";
ProcessDefinitionUUID definitionUUID = new ProcessDefinitionUUID("a");
ProcessInstanceUUID instanceUUID = new ProcessInstanceUUID("b");
Document doc = manager.createDocument(docName, definitionUUID,
instanceUUID, fileName, contentMimeType, contents);
assertNotNull(doc);
assertNotNull(doc.getId());
assertEquals(docName, doc.getName());
assertNotNull(doc.getCreationDate());
// assertEquals(doc.getCreationDate(), doc.getLastModificationDate());
// assertEquals(author, doc.getAuthor());
assertEquals(doc.getAuthor(), doc.getLastModifiedBy());
assertNotNull(doc.getVersionLabel());
assertNotNull(doc.getVersionSeriesId());
assertTrue(doc.isMajorVersion());
assertEquals(fileName, doc.getContentFileName());// FIXME
assertTrue(doc.isLatestVersion());
assertNotNull(doc.getContentFileName());
assertNotNull(doc.getContentMimeType());
assertTrue(0 <= doc.getContentSize());
assertEquals(contentMimeType, doc.getContentMimeType());// FIXME
assertEquals(contents.length, doc.getContentSize());
assertEquals(definitionUUID, doc.getProcessDefinitionUUID());
assertEquals(instanceUUID, doc.getProcessInstanceUUID());
assertEquals("The doc contents", new String(manager.getContent(doc)));
}
public void testCreateDocumentWithContentWithoutContentSize()
throws Exception {
byte[] contents = "The doc contents".getBytes();
String fileName = "testFile.txt";
String docName = "theDoc";
String contentMimeType = "kikoo/text";
Document doc = manager.createDocument(docName, new ProcessDefinitionUUID(
"myprocessxx"), new ProcessInstanceUUID("instancexx"), fileName,
contentMimeType, contents);
assertEquals(contents.length, doc.getContentSize());
assertEquals("The doc contents", new String(manager.getContent(doc)));
}
public void testCreateDocumentWithEmptyContent() throws Exception {
byte[] contents = new byte[1];
String fileName = "testFile.txt";
// String author = "john";
String docName = "theDoc";
String contentMimeType = "plain/text";
ProcessDefinitionUUID definitionUUID = new ProcessDefinitionUUID("a");
ProcessInstanceUUID instanceUUID = new ProcessInstanceUUID("b");
Document doc = manager.createDocument(docName, definitionUUID,
instanceUUID, fileName, contentMimeType, contents);
assertNotNull(doc);
assertNotNull(doc.getId());
assertEquals(docName, doc.getName());
assertNotNull(doc.getCreationDate());
// assertEquals(doc.getCreationDate(), doc.getLastModificationDate());
// assertEquals(author, doc.getAuthor());
assertEquals(doc.getAuthor(), doc.getLastModifiedBy());
assertNotNull(doc.getVersionLabel());
assertNotNull(doc.getVersionSeriesId());
assertTrue(doc.isMajorVersion());
assertTrue(doc.isLatestVersion());
assertEquals(fileName, doc.getContentFileName());// FIXME
assertNotNull(doc.getContentFileName());
assertNotNull(doc.getContentMimeType());
assertTrue(0 <= doc.getContentSize());
assertEquals(contentMimeType, doc.getContentMimeType());// FIXME
assertEquals(definitionUUID, doc.getProcessDefinitionUUID());
assertEquals(instanceUUID, doc.getProcessInstanceUUID());
assertEquals(contents.length, manager.getContent(doc).length);
}
public void testGetDocument() throws Exception {
Document doc = manager.createDocument("theDoc",
new ProcessDefinitionUUID("a"), new ProcessInstanceUUID("b"),
"testFile.txt", "plain/text", "The doc contents".getBytes());
Document document = manager.getDocument(doc.getId());
assertNotNull(document);
assertEquals(doc, document);
}
public void testDeleteAllVersionsOfDocumentById() throws Exception {
Document doc = manager.createDocument("theDoc",
new ProcessDefinitionUUID("a"), new ProcessInstanceUUID("b"),
"testFile.txt", "plain/text", "The doc contents".getBytes());
manager.deleteDocument(doc.getId(), true);
try {
manager.getDocument(doc.getId());
fail("should throw DocumentNotFoundException");
} catch (DocumentNotFoundException e) {
}
}
public void testCreateDocumentInSubFolder()
throws FolderAlreadyExistsException, DocumentationCreationException,
DocumentAlreadyExistsException {
Folder folder = manager.createFolder("testCreateDocumentInSubFolder");
Folder subFolder = manager.createFolder("subFolder", folder.getId());
Document doc = manager.createDocument("theDoc",
new ProcessDefinitionUUID("testCreateDocumentInSubFolder"),
new ProcessInstanceUUID("subFolder"), "testFile.txt", "plain/text",
"The doc contents".getBytes());
assertEquals(subFolder.getId(), doc.getParentFolderId());
}
public void testCreateNewVersionOfDocument()
throws FolderAlreadyExistsException, DocumentationCreationException,
DocumentAlreadyExistsException, DocumentNotFoundException {
byte[] contents = "The doc contents".getBytes();
String fileName = "testFile.txt";
String docName = "theDoc";
String contentMimeType = "plain/text";
Document doc = manager.createDocument(docName, new ProcessDefinitionUUID(
"a"), new ProcessInstanceUUID("b"), fileName, contentMimeType,
contents);
// String newAuthor = "james";
Document newDoc = manager.createVersion(doc.getId(), true,
"testFile2.txt", "plain/text", "The new doc contents".getBytes());
assertNotNull(newDoc);
assertEquals(doc.getName(), newDoc.getName());
// assertEquals("The doc contents", new String(manager.getContent(doc)));
// //not supported by xCmis
assertEquals("The new doc contents", new String(manager
.getContent(newDoc)));
assertEquals(doc.getAuthor(), newDoc.getAuthor());
// assertEquals(newAuthor, newDoc.getLastModifiedBy());
assertEquals("testFile2.txt", newDoc.getContentFileName());
assertEquals("plain/text", newDoc.getContentMimeType());
}
public void testCreateNewVersionOfDocumentWithSameName() throws Exception {
String fileName = "testFile.txt";
String docName = "theDoc";
String contentMimeType = "plain/text";
Document doc = manager.createDocument(docName, new ProcessDefinitionUUID(
"a"), new ProcessInstanceUUID("b"), fileName, contentMimeType,
"The doc contents".getBytes());
// String newAuthor = "james";
Document newDoc = manager.createVersion(doc.getId(), true,
"testFile2.txt", "plain/text", "The new doc contents".getBytes());
assertNotNull(newDoc);
assertEquals(doc.getName(), newDoc.getName());
assertEquals(doc.getAuthor(), newDoc.getAuthor());
// assertEquals(newAuthor, newDoc.getLastModifiedBy());
assertEquals("testFile2.txt", newDoc.getContentFileName());
assertEquals("plain/text", newDoc.getContentMimeType());
assertEquals("The new doc contents", new String(manager
.getContent(newDoc)));
}
public void testGetVersionsOfDocument()
throws DocumentationCreationException, DocumentAlreadyExistsException,
FolderAlreadyExistsException {
Folder folder = manager.createFolder("testGetOldVersionOfDocument");
String fileName = "testFile.txt";
String docName = "theDoc";
String contentMimeType = "plain/text";
Document doc = manager.createDocument(docName, folder.getId(), fileName,
contentMimeType, "The doc contents".getBytes());
Document newDoc = manager.createVersion(doc.getId(), true,
"testFile2.txt", "test/text", "The new doc contents".getBytes());
List<Document> versions = manager.getVersionsOfDocument(newDoc.getId());
// must
// be
// an
// id
assertEquals(2, versions.size());
assertEquals(newDoc, versions.get(0));
assertEquals(doc.getId(), versions.get(1).getId());
assertTrue(doNotCheckId(doc, versions.get(1)));
// test content
}
public void testSearchDocumentByName() throws FolderAlreadyExistsException,
DocumentationCreationException, DocumentAlreadyExistsException {
Folder folder = manager.createFolder("testSearchDocumentById");
Document doc1 = manager.createDocument("theDoc1", folder.getId(),
"testFile.txt", "plain/text", "The doc contents1".getBytes());
Document doc2 = manager.createDocument("theDoc2", folder.getId(),
"testFile.txt", "plain/text", "The doc contents2".getBytes());
Document doc3 = manager.createDocument("theDoc3", folder.getId(),
"testFile.txt", "plain/text", "The doc contents3".getBytes());
DocumentSearchBuilder searchBuilder = new DocumentSearchBuilder();
searchBuilder.criterion(DocumentIndex.NAME).equalsTo("theDoc2");
SearchResult searchResult = manager.search(searchBuilder, 0, 10);
assertEquals(1, searchResult.getCount());
List<Document> results = searchResult.getDocuments();
assertEquals(1, results.size());
assertEquals(doc2, results.get(0));
}
public void testSearchWithNoResults() throws FolderAlreadyExistsException,
DocumentationCreationException, DocumentAlreadyExistsException {
Folder folder = manager.createFolder("testSearchWithNoResults");
Document doc1 = manager.createDocument("theDoc1", folder.getId(),
"testFile.txt", "plain/text", "The doc contents1".getBytes());
Document doc2 = manager.createDocument("theDoc2", folder.getId(),
"testFile.txt", "plain/text", "The doc contents2".getBytes());
Document doc3 = manager.createDocument("theDoc3", folder.getId(),
"testFile.txt", "plain/text", "The doc contents3".getBytes());
DocumentSearchBuilder searchBuilder = new DocumentSearchBuilder();
searchBuilder.criterion(DocumentIndex.NAME).equalsTo("theDoc4");
SearchResult searchResult = manager.search(searchBuilder, 0, 10);
assertEquals(0, searchResult.getCount());
List<Document> results = searchResult.getDocuments();
assertEquals(0, results.size());
}
public void testSearchDocumentByCreationDate()
throws FolderAlreadyExistsException, DocumentationCreationException,
DocumentAlreadyExistsException, InterruptedException {
Folder folder = manager.createFolder("testSearchDocumentById");
Document doc1 = manager.createDocument("theDoc1", folder.getId(),
"testFile.txt", "plain/text", "The doc contents1".getBytes());
Thread.sleep(100);
Date date1 = new Date();
Thread.sleep(100);
Document doc2 = manager.createDocument("theDoc2", folder.getId(),
"testFile.txt", "plain/text", "The doc contents2".getBytes());
Thread.sleep(100);
Date date2 = new Date();
Thread.sleep(100);
Document doc3 = manager.createDocument("theDoc3", folder.getId(),
"testFile.txt", "plain/text", "The doc contents3".getBytes());
DocumentSearchBuilder searchBuilder = new DocumentSearchBuilder();
searchBuilder.criterion(DocumentIndex.CREATION_DATE)
.between(date1, date2);
SearchResult searchResult = manager.search(searchBuilder, 0, 10);
assertEquals(1, searchResult.getCount());
List<Document> results = searchResult.getDocuments();
assertEquals(1, results.size());
assertEquals(doc2, results.get(0));
}
public void testSearchDocumentByProcessDefUUID()
throws FolderAlreadyExistsException, DocumentationCreationException,
DocumentAlreadyExistsException, InterruptedException {
Folder folder = manager.createFolder("theProcessDefUUID");
Folder subFolder = manager.createFolder("theProcessInstUUID", folder
.getId());
Document doc1 = manager.createDocument("theDoc1", subFolder.getId(),
"testFile.txt", "plain/text", "The doc contents1".getBytes());
Document doc2 = manager.createDocument("theDoc2", subFolder.getId(),
"testFile.txt", "plain/text", "The doc contents2".getBytes());
Document doc3 = manager.createDocument("theDoc3", subFolder.getId(),
"testFile.txt", "plain/text", "The doc contents3".getBytes());
DocumentSearchBuilder searchBuilder = new DocumentSearchBuilder();
searchBuilder.criterion(DocumentIndex.PROCESS_DEFINITION_UUID).equalsTo(
"theProcessDefUUID");
SearchResult searchResult = manager.search(searchBuilder, 0, 10);
assertEquals(3, searchResult.getCount());
List<Document> results = searchResult.getDocuments();
assertEquals(3, results.size());
assertEquals(doc1, results.get(0));
assertEquals(doc2, results.get(1));
assertEquals(doc3, results.get(2));
}
public void testSearchDocumentByProcessInstUUID()
throws FolderAlreadyExistsException, DocumentationCreationException,
DocumentAlreadyExistsException, InterruptedException {
Folder folder = manager.createFolder("theProcessDefUUID");
Folder subFolder = manager.createFolder("theProcessInstUUID", folder
.getId());
Document doc1 = manager.createDocument("theDoc1", subFolder.getId(),
"testFile.txt", "plain/text", "The doc contents1".getBytes());
Document doc2 = manager.createDocument("theDoc2", subFolder.getId(),
"testFile.txt", "plain/text", "The doc contents2".getBytes());
Document doc3 = manager.createDocument("theDoc3", subFolder.getId(),
"testFile.txt", "plain/text", "The doc contents3".getBytes());
DocumentSearchBuilder searchBuilder = new DocumentSearchBuilder();
searchBuilder.criterion(DocumentIndex.PROCESS_INSTANCE_UUID).equalsTo(
"theProcessInstUUID");
SearchResult searchResult = manager.search(searchBuilder, 0, 10);
assertEquals(3, searchResult.getCount());
List<Document> results = searchResult.getDocuments();
assertEquals(3, results.size());
assertEquals(doc1, results.get(0));
assertEquals(doc2, results.get(1));
assertEquals(doc3, results.get(2));
}
// not supported with not modified authenticator
// public void testSearchDocumentByAuthor() throws
// FolderAlreadyExistsException, DocumentationCreationException,
// DocumentAlreadyExistsException, InterruptedException{
// //TODO login with john on bonita
// Folder folder = manager.createFolder("testSearchDocumentByAuthor");
// Document doc1 = manager.createDocument("theDoc1", folder.getId(),
// "testFile.txt", "plain/text",
// -1, "The doc contents1".getBytes());
// Document doc2 = manager.createDocument("theDoc2", folder.getId(),
// "testFile.txt", "plain/text",
// -1, "The doc contents2".getBytes());
// Document doc3 = manager.createDocument("theDoc3", folder.getId(),
// "testFile.txt", "plain/text",
// -1, "The doc contents3".getBytes());
// DocumentSearchBuilder searchBuilder = new DocumentSearchBuilder();
// searchBuilder.criterion(DocumentIndex.AUTHOR).equalsTo("john");
// SearchResult searchResult = manager.search(searchBuilder,0,10);
// assertEquals(3, searchResult.getCount());
// List<Document> results = searchResult.getDocuments();
// assertEquals(3, results.size());
// assertEquals(doc1, results.get(0));
// assertEquals(doc2, results.get(1));
// assertEquals(doc3, results.get(2));
// }
public void testSearchByProcessDefUUIDAndName()
throws FolderAlreadyExistsException, DocumentationCreationException,
DocumentAlreadyExistsException, InterruptedException {
Folder proc1Folder = manager.createFolder("proc1");
Folder proc1InstFolder = manager.createFolder("inst1", proc1Folder
.getId());
Folder proc2Folder = manager.createFolder("proc2");
Folder proc2InstFolder = manager.createFolder("inst1", proc2Folder
.getId());
manager.createDocument("theDoc1", proc1InstFolder.getId(),
"testFile.txt", "plain/text", "The doc contents11".getBytes());
manager.createDocument("theDoc2", proc1InstFolder.getId(),
"testFile.txt", "plain/text", "The doc contents12".getBytes());
manager.createDocument("theDoc1", proc2InstFolder.getId(),
"testFile.txt", "plain/text", "The doc contents21".getBytes());
Document doc22 = manager.createDocument("theDoc2", proc2InstFolder
.getId(), "testFile.txt", "plain/text", "The doc contents22"
.getBytes());
DocumentSearchBuilder searchBuilder = new DocumentSearchBuilder();
searchBuilder.criterion(DocumentIndex.PROCESS_DEFINITION_UUID).equalsTo(
"proc2").and().criterion(DocumentIndex.NAME).equalsTo("theDoc2");
SearchResult searchResult = manager.search(searchBuilder, 0, 10);
assertEquals(1, searchResult.getCount());
List<Document> results = searchResult.getDocuments();
assertEquals(1, results.size());
assertEquals(doc22, results.get(0));
}
public void testSearchOnLatestVersion() throws FolderAlreadyExistsException,
DocumentationCreationException, DocumentAlreadyExistsException,
InterruptedException {
Folder folder = manager.createFolder("latestVersion");
Document document = manager.createDocument("theDoc1", folder.getId(),
"testFile.txt", "plain/text", "The doc contents11".getBytes());
Document lastVersion = manager.createVersion(document.getId(), true);
DocumentSearchBuilder searchBuilder = new DocumentSearchBuilder();
searchBuilder.criterion(DocumentIndex.PROCESS_DEFINITION_UUID).equalsTo("latestVersion").latestVersion();
SearchResult searchResult = manager.search(searchBuilder, 0, 10);
assertEquals(1, searchResult.getCount()); // was:1
List<Document> results = searchResult.getDocuments();
assertEquals(1, results.size()); // was:1
assertEquals(lastVersion, results.get(0));
}
public void testSearchWithInClause() throws DocumentAlreadyExistsException,
DocumentationCreationException, FolderAlreadyExistsException {
Folder folder = manager.createFolder("theProcessDefUUID");
Folder subFolder = manager.createFolder("theProcessInstUUID", folder
.getId());
Document doc1 = manager.createDocument("theDoc1", subFolder.getId(),
"testFile.txt", "plain/text", "The doc contents1".getBytes());
Document doc2 = manager.createDocument("theDoc2", subFolder.getId(),
"testFile.txt", "plain/text", "The doc contents2".getBytes());
Document doc3 = manager.createDocument("theDoc3", subFolder.getId(),
"testFile.txt", "plain/text", "The doc contents3".getBytes());
DocumentSearchBuilder searchBuilder = new DocumentSearchBuilder();
searchBuilder.criterion(DocumentIndex.ID).in(
Arrays.asList(new String[] { doc1.getId(), doc3.getId() }));
SearchResult searchResult = manager.search(searchBuilder, 0, 10);
assertEquals(2, searchResult.getCount());
List<Document> results = searchResult.getDocuments();
assertEquals(2, results.size());
assertEquals(doc1, results.get(0));
assertEquals(doc3, results.get(1));
}
// not supported with not modified authenticator
// public void testSearchDocumentByAuthor() throws
// FolderAlreadyExistsException, DocumentationCreationException,
// DocumentAlreadyExistsException, InterruptedException{
// //TODO login with john on bonita
// Folder folder = manager.createFolder("testSearchDocumentByAuthor");
// Document doc1 = manager.createDocument("theDoc1", folder.getId(),
// "testFile.txt", "plain/text",
// -1, "The doc contents1".getBytes());
// Document doc2 = manager.createDocument("theDoc2", folder.getId(),
// "testFile.txt", "plain/text",
// -1, "The doc contents2".getBytes());
// Document doc3 = manager.createDocument("theDoc3", folder.getId(),
// "testFile.txt", "plain/text",
// -1, "The doc contents3".getBytes());
// DocumentSearchBuilder searchBuilder = new DocumentSearchBuilder();
// searchBuilder.criterion(DocumentIndex.AUTHOR).equalsTo("john");
// SearchResult searchResult = manager.search(searchBuilder,0,10);
// assertEquals(3, searchResult.getCount());
// List<Document> results = searchResult.getDocuments();
// assertEquals(3, results.size());
// assertEquals(doc1, results.get(0));
// assertEquals(doc2, results.get(1));
// assertEquals(doc3, results.get(2));
// }
// Not supported
// CMIS-277 Support of the search on versioned content
public void testSearchOnAllVersion() throws FolderAlreadyExistsException,
DocumentationCreationException, DocumentAlreadyExistsException,
InterruptedException {
Folder folder = manager.createFolder("allVersion");
Document document = manager.createDocument("theDoc1", folder.getId(),
"testFile.txt", "plain/text", "The doc contents11".getBytes());
Document lastVersion = manager.createVersion(document.getId(), true);
DocumentSearchBuilder searchBuilder = new DocumentSearchBuilder();
searchBuilder.criterion(DocumentIndex.PROCESS_DEFINITION_UUID).equalsTo(
"allVersion").allVersion();
SearchResult searchResult = manager.search(searchBuilder, 0, 10);
assertEquals(2, searchResult.getCount());
List<Document> results = searchResult.getDocuments();
assertEquals(2, results.size());
}
public void testCreationDate() throws DocumentAlreadyExistsException,
DocumentationCreationException, InterruptedException {
ProcessDefinitionUUID definitionUUID = new ProcessDefinitionUUID("plop1");
Document document = manager.createDocument("myDocument", definitionUUID,
new ProcessInstanceUUID(definitionUUID, 1));
Thread.sleep(10);
long now = new Date().getTime();
long docTime = document.getCreationDate().getTime();
assertTrue(docTime < now);
}
public void testUploadBigFile() throws DocumentAlreadyExistsException,
DocumentationCreationException, InterruptedException, IOException,
DocumentNotFoundException {
InputStream stream = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("CMIS-spec-v1.0.bar");
byte[] byteArray = IOUtils.toByteArray(stream);
stream.close();
ProcessDefinitionUUID definitionUUID = new ProcessDefinitionUUID(
"bigProcess");
int length = byteArray.length;
Document document = manager.createDocument("testUploadBigFile", definitionUUID,
new ProcessInstanceUUID(definitionUUID, 1),
"CMIS-spec-v1.0.bar", "octet/stream", byteArray);
assertNotNull(document);
byte[] content = manager.getContent(document);
assertNotNull(content);
assertEquals(length, content.length);
// remove
manager.deleteDocument(document.getId(), true);
}
public void testUploadBigFile2() throws DocumentAlreadyExistsException,
DocumentationCreationException, InterruptedException, IOException,
DocumentNotFoundException {
byte[] bytes = null;
// to create bytes array 62Mb size
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
for (int i = 0; i < 8192; i++) {
baos.write(43); // '+' char
}
byte[] bytesTemp = baos.toByteArray();
baos.reset();
for (int i = 0; i < 7600; i++) {
baos.write(bytesTemp);
}
bytes = baos.toByteArray();
} finally {
baos.close();
}
ProcessDefinitionUUID definitionUUID = new ProcessDefinitionUUID(
"bigProcess2");
int length = bytes.length;
Document document = manager.createDocument("testUploadBigFile2", definitionUUID,
new ProcessInstanceUUID(definitionUUID, 1), "testUploadBigFile2.txt",
"octet/stream", bytes);
assertNotNull(document);
byte[] content = manager.getContent(document);
assertNotNull(content);
assertEquals(length, content.length);
// remove
manager.deleteDocument(document.getId(), true);
}
// Not supported
// CMIS-509 Remove only one version of a document is not supported
public void testDeleteOnlyOneVersion()
throws DocumentAlreadyExistsException, DocumentationCreationException,
InterruptedException, IOException, DocumentNotFoundException {
byte[] contents = "The doc contents".getBytes();
String fileName = "testFile.txt";
String docName = "theDoc";
String contentMimeType = "plain/text";
long contentSize = contents.length;
Document doc1 = manager.createDocument(docName, new ProcessDefinitionUUID(
"c"), new ProcessInstanceUUID("d"), fileName, contentMimeType,
"The doc contents".getBytes());
// String newAuthor = "james";
Document doc2 = manager.createVersion(doc1.getId(), true,
"testFile2.txt", "plain/text", "The new doc contents2".getBytes());
Document doc3 = manager.createVersion(doc2.getId(), true,
"testFile3.txt", "plain/text", "The new doc contents3".getBytes());
Document doc4 = manager.createVersion(doc3.getId(), true,
"testFile4.txt", "plain/text", "The new doc contents4".getBytes());
List<Document> versionsOfDocument = manager.getVersionsOfDocument(doc2
.getId());
assertEquals(4, versionsOfDocument.size());
manager.deleteDocument(doc2.getId(), false);
assertEquals(3, manager.getVersionsOfDocument(doc3.getId()).size());
}
public void testSearchOnDocumentsInMultiplesFolders()
throws DocumentAlreadyExistsException, DocumentationCreationException,
DocumentationCreationException, DocumentNotFoundException {
ProcessDefinitionUUID definitionUUID = new ProcessDefinitionUUID(
"testSearchOnDocumentsInMultiplesFolders");
ProcessInstanceUUID instanceUUID = new ProcessInstanceUUID(
definitionUUID, 1);
ProcessDefinitionUUID otherDef = new ProcessDefinitionUUID("event");
ProcessInstanceUUID otherInst = new ProcessInstanceUUID(otherDef, 1);
Document document = manager.createDocument("emptyDoc1", definitionUUID,
instanceUUID);
manager.attachDocumentTo(otherDef, otherInst, document.getId());
DocumentSearchBuilder builder = new DocumentSearchBuilder();
builder.criterion(DocumentIndex.PROCESS_INSTANCE_UUID).equalsTo(
instanceUUID.getValue());
SearchResult search = manager.search(builder, 0, 5);
List<Document> documents = search.getDocuments();
assertEquals(1, search.getCount());
assertEquals(1, documents.size());
}
private boolean doNotCheckId(Document doc, Document obj) {
if (doc == obj)
return true;
if (obj == null)
return false;
if (doc.getClass() != obj.getClass())
return false;
DocumentImpl other = (DocumentImpl) obj;
if (doc.getAuthor() == null) {
if (other.getAuthor() != null)
return false;
} else if (!doc.getAuthor().equals(other.getAuthor()))
return false;
if (doc.getContentFileName() == null) {
if (other.getContentFileName() != null)
return false;
} else if (!doc.getContentFileName().equals(other.getContentFileName()))
return false;
if (doc.getContentMimeType() == null) {
if (other.getContentMimeType() != null)
return false;
} else if (!doc.getContentMimeType().equals(other.getContentMimeType()))
return false;
if (doc.getContentSize() != other.getContentSize())
return false;
if (doc.getCreationDate() == null) {
if (other.getCreationDate() != null)
return false;
} else if (!doc.getCreationDate().equals(other.getCreationDate()))// FIXME
return false;
if (doc.getParentFolderId() == null) {
if (other.getParentFolderId() != null)
return false;
} else if (!doc.getParentFolderId().equals(other.getParentFolderId()))
return false;
if (doc.getLastModificationDate() == null) {
if (other.getLastModificationDate() != null)
return false;
} else if (!doc.getLastModificationDate().equals(
other.getLastModificationDate()))
return false;
if (doc.getLastModifiedBy() == null) {
if (other.getLastModifiedBy() != null)
return false;
} else if (!doc.getLastModifiedBy().equals(other.getLastModifiedBy()))
return false;
if (doc.isLatestVersion() == other.isLatestVersion())
return false;
if (doc.isMajorVersion() != other.isMajorVersion())
return false;
if (doc.getName() == null) {
if (other.getName() != null)
return false;
} else if (!doc.getName().equals(other.getName()))
return false;
if (doc.getVersionLabel() == null) {
if (other.getVersionLabel() != null)
return false;
}// else if (!doc.getVersionLabel().equals(other.getVersionLabel()))
// return false;
if (doc.getVersionSeriesId() == null) {
if (other.getVersionSeriesId() != null)
return false;
} else if (!doc.getVersionSeriesId().equals(other.getVersionSeriesId()))
return false;
return true;
}
// public void testStress() throws DocumentAlreadyExistsException,
// DocumentationCreationException, InterruptedException {
// System.out.println("start");
// int nbFiles = 0;
// byte[] bytes =
// "fskqjsghnisrb,ùazel,f sdlkg,dlkgj aù dpfl;zaùfdskgdklmdslkngf dslkgn sdù akdgmqslgsd mskdgfd".getBytes();
// long max0 = 10;
// long max1 = 15;
// long max2 = 10;
// for (int i = 1; i <= max0; i++) {
// System.out.println("-==== p " + i + "/" + max0 + " ====-");
// ProcessDefinitionUUID pdef = new
// ProcessDefinitionUUID("procName",String.valueOf(i));
// for (int j = 1; j <= max1; j++) {
// ProcessInstanceUUID idef = new ProcessInstanceUUID(pdef, j);
// for (int k = 1; k <= max2; k++) {
// manager.createDocument("myDocument"+i+j+k, pdef, idef,
// "theFile"+i+j+k+".txt", "plain/text", bytes);
// nbFiles ++ ;
// }
// System.out.println("-==== " + nbFiles + " files ====-");
// }
// }
// }
}