blob: dd8dd03d4e145521cb3dabdedfba369c288b1109 [file] [log] [blame]
/* $Id$ */
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.manifoldcf.agents.output.cmisoutput.tests;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import org.apache.chemistry.opencmis.client.api.Document;
import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.client.api.ItemIterable;
import org.apache.chemistry.opencmis.client.api.QueryResult;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.client.api.SessionFactory;
import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.SessionParameter;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.enums.BindingType;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumBaseObjectTypeIds;
import org.apache.commons.lang.StringUtils;
import org.apache.manifoldcf.agents.output.cmisoutput.CmisOutputConfig;
import org.apache.manifoldcf.core.interfaces.Configuration;
import org.apache.manifoldcf.core.interfaces.ConfigurationNode;
import org.apache.manifoldcf.core.interfaces.ManifoldCFException;
import org.apache.manifoldcf.crawler.connectors.cmis.CmisConfig;
import org.apache.manifoldcf.crawler.system.ManifoldCF;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* @author Piergiorgio Lucidi
*/
public class APISanityHSQLDBIT extends BaseITHSQLDB {
private Session cmisSourceClientSession = null;
private Session cmisTargetClientSession = null;
private static final String CMIS_QUERY_TARGET_DEFAULT_VALUE = "SELECT * FROM cmis:folder WHERE cmis:name='Target'";
private Session getCmisSourceClientSession(){
// default factory implementation
SessionFactory factory = SessionFactoryImpl.newInstance();
Map<String, String> parameters = new HashMap<String, String>();
// user credentials
parameters.put(SessionParameter.USER, BaseITSanityTestUtils.SOURCE_USERNAME_VALUE);
parameters.put(SessionParameter.PASSWORD, BaseITSanityTestUtils.SOURCE_PASSWORD_VALUE);
// connection settings
String endpoint =
BaseITSanityTestUtils.SOURCE_PROTOCOL_VALUE + "://" +
BaseITSanityTestUtils.SOURCE_SERVER_VALUE + ":" +
BaseITSanityTestUtils.SOURCE_PORT_VALUE +
BaseITSanityTestUtils.SOURCE_PATH_VALUE;
parameters.put(SessionParameter.ATOMPUB_URL, endpoint);
parameters.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
// create session
return factory.getRepositories(parameters).get(0).createSession();
}
private Session getCmisTargetClientSession(){
// default factory implementation
SessionFactory factory = SessionFactoryImpl.newInstance();
Map<String, String> parameters = new HashMap<String, String>();
// user credentials
parameters.put(SessionParameter.USER, BaseITSanityTestUtils.TARGET_USERNAME_VALUE);
parameters.put(SessionParameter.PASSWORD, BaseITSanityTestUtils.TARGET_PASSWORD_VALUE);
// connection settings
String endpoint =
BaseITSanityTestUtils.TARGET_PROTOCOL_VALUE + "://" +
BaseITSanityTestUtils.TARGET_SERVER_VALUE + ":" +
BaseITSanityTestUtils.TARGET_PORT_VALUE +
BaseITSanityTestUtils.TARGET_PATH_VALUE;
parameters.put(SessionParameter.ATOMPUB_URL, endpoint);
parameters.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
// create session
return factory.getRepositories(parameters).get(0).createSession();
}
private Folder getTestFolder(Session session) {
Folder testFolder = null;
ItemIterable<QueryResult> results = session.query(CmisOutputConfig.CMIS_QUERY_DEFAULT_VALUE, false);
for (QueryResult result : results) {
String folderId = result.getPropertyById(PropertyIds.OBJECT_ID).getFirstValue().toString();
testFolder = (Folder)session.getObject(folderId);
}
return testFolder;
}
private void createNewDocument(Folder folder, String name) throws IOException{
// properties
// (minimal set: name and object type id)
Map<String, Object> contentProperties = new HashMap<String, Object>();
contentProperties.put(PropertyIds.OBJECT_TYPE_ID, EnumBaseObjectTypeIds.CMIS_DOCUMENT.value());
contentProperties.put(PropertyIds.NAME, name);
// content
String contentString = "CMIS Testdata "+name;
byte[] content = contentString.getBytes(StandardCharsets.UTF_8);
InputStream stream = new ByteArrayInputStream(content);
ContentStream contentStream = new ContentStreamImpl(name, new BigInteger(content), "text/plain", stream);
// create a major version
folder.createDocument(contentProperties, contentStream, null);
stream.close();
}
@Before
public void createTestArea()
throws Exception
{
try
{
cmisSourceClientSession = getCmisSourceClientSession();
cmisTargetClientSession = getCmisTargetClientSession();
//creating a new folder
Folder newSourceRepoFolder = createTestFolderInTheSource(cmisSourceClientSession);
String name = StringUtils.EMPTY;
for(int i=1; i<=2; i++){
name = "testdata" + String.valueOf(i) + ".txt";
createNewDocument(newSourceRepoFolder, name);
}
//Creating the target folder in the target repo
createTestFolderInTheTarget(cmisTargetClientSession);
}
catch (Exception e)
{
e.printStackTrace();
throw e;
}
}
private Folder createTestFolderInTheSource(Session session) {
Folder root = session.getRootFolder();
ItemIterable<QueryResult> results = session.query(CmisOutputConfig.CMIS_QUERY_DEFAULT_VALUE, false);
for (QueryResult result : results) {
String repositoryId = cmisSourceClientSession.getRepositoryInfo().getId();
String folderId = result.getPropertyById(PropertyIds.OBJECT_ID).getFirstValue().toString();
cmisSourceClientSession.getBinding().getObjectService().deleteTree(repositoryId, folderId, true, null, false, null);
}
Map<String, Object> folderProperties = new HashMap<String, Object>();
folderProperties.put(PropertyIds.OBJECT_TYPE_ID, EnumBaseObjectTypeIds.CMIS_FOLDER.value());
folderProperties.put(PropertyIds.NAME, "Apache ManifoldCF");
//Creating sample contents on the source repo
Folder newFolder = root.createFolder(folderProperties);
return newFolder;
}
private Folder createTestFolderInTheTarget(Session session) {
Folder root = session.getRootFolder();
ItemIterable<QueryResult> results = session.query(CMIS_QUERY_TARGET_DEFAULT_VALUE, false);
for (QueryResult result : results) {
String repositoryId = cmisSourceClientSession.getRepositoryInfo().getId();
String folderId = result.getPropertyById(PropertyIds.OBJECT_ID).getFirstValue().toString();
cmisSourceClientSession.getBinding().getObjectService().deleteTree(repositoryId, folderId, true, null, false, null);
}
Map<String, Object> folderProperties = new HashMap<String, Object>();
folderProperties.put(PropertyIds.OBJECT_TYPE_ID, EnumBaseObjectTypeIds.CMIS_FOLDER.value());
folderProperties.put(PropertyIds.NAME, "Target");
//Creating sample contents on the source repo
Folder newFolder = root.createFolder(folderProperties);
return newFolder;
}
@After
public void removeTestArea()
throws Exception
{
// we don't need to remove anything from the CMIS In-Memory Server, each bootstrap will create a new repo from scratch
}
@Test
public void sanityCheck()
throws Exception
{
try
{
int i;
// Create a basic file system connection, and save it.
ConfigurationNode connectionObject;
ConfigurationNode child;
Configuration requestObject;
Configuration result;
connectionObject = new ConfigurationNode("repositoryconnection");
child = new ConfigurationNode("name");
child.setValue("CMIS Connection");
connectionObject.addChild(connectionObject.getChildCount(),child);
child = new ConfigurationNode("class_name");
child.setValue("org.apache.manifoldcf.crawler.connectors.cmis.CmisRepositoryConnector");
connectionObject.addChild(connectionObject.getChildCount(),child);
child = new ConfigurationNode("description");
child.setValue("CMIS Connection - Source repo of the content migration");
connectionObject.addChild(connectionObject.getChildCount(),child);
child = new ConfigurationNode("max_connections");
child.setValue("10");
connectionObject.addChild(connectionObject.getChildCount(),child);
child = new ConfigurationNode("configuration");
//CMIS Repository Connector parameters
//binding
ConfigurationNode cmisBindingNode = new ConfigurationNode("_PARAMETER_");
cmisBindingNode.setAttribute("name", CmisConfig.BINDING_PARAM);
cmisBindingNode.setValue(BaseITSanityTestUtils.SOURCE_BINDING_VALUE);
child.addChild(child.getChildCount(), cmisBindingNode);
//username
ConfigurationNode cmisUsernameNode = new ConfigurationNode("_PARAMETER_");
cmisUsernameNode.setAttribute("name", CmisConfig.USERNAME_PARAM);
cmisUsernameNode.setValue(BaseITSanityTestUtils.SOURCE_USERNAME_VALUE);
child.addChild(child.getChildCount(), cmisUsernameNode);
//password
ConfigurationNode cmisPasswordNode = new ConfigurationNode("_PARAMETER_");
cmisPasswordNode.setAttribute("name", CmisConfig.PASSWORD_PARAM);
cmisPasswordNode.setValue(BaseITSanityTestUtils.SOURCE_PASSWORD_VALUE);
child.addChild(child.getChildCount(), cmisPasswordNode);
//protocol
ConfigurationNode cmisProtocolNode = new ConfigurationNode("_PARAMETER_");
cmisProtocolNode.setAttribute("name", CmisConfig.PROTOCOL_PARAM);
cmisProtocolNode.setValue(BaseITSanityTestUtils.SOURCE_PROTOCOL_VALUE);
child.addChild(child.getChildCount(), cmisProtocolNode);
//server
ConfigurationNode cmisServerNode = new ConfigurationNode("_PARAMETER_");
cmisServerNode.setAttribute("name", CmisConfig.SERVER_PARAM);
cmisServerNode.setValue(BaseITSanityTestUtils.SOURCE_SERVER_VALUE);
child.addChild(child.getChildCount(), cmisServerNode);
//port
ConfigurationNode cmisPortNode = new ConfigurationNode("_PARAMETER_");
cmisPortNode.setAttribute("name", CmisConfig.PORT_PARAM);
cmisPortNode.setValue(BaseITSanityTestUtils.SOURCE_PORT_VALUE);
child.addChild(child.getChildCount(), cmisPortNode);
//path
ConfigurationNode cmisPathNode = new ConfigurationNode("_PARAMETER_");
cmisPathNode.setAttribute("name", CmisConfig.PATH_PARAM);
cmisPathNode.setValue(BaseITSanityTestUtils.SOURCE_PATH_VALUE);
child.addChild(child.getChildCount(), cmisPathNode);
connectionObject.addChild(connectionObject.getChildCount(),child);
requestObject = new Configuration();
requestObject.addChild(0,connectionObject);
result = performAPIPutOperationViaNodes("repositoryconnections/CMIS%20Connection",201,requestObject);
i = 0;
while (i < result.getChildCount())
{
ConfigurationNode resultNode = result.findChild(i++);
if (resultNode.getType().equals("error"))
throw new Exception(resultNode.getValue());
}
// Create a CMIS output connection, and save it.
connectionObject = new ConfigurationNode("outputconnection");
child = new ConfigurationNode("name");
child.setValue("CMIS Output Connection");
connectionObject.addChild(connectionObject.getChildCount(),child);
child = new ConfigurationNode("class_name");
child.setValue("org.apache.manifoldcf.agents.output.cmisoutput.CmisOutputConnector");
connectionObject.addChild(connectionObject.getChildCount(),child);
child = new ConfigurationNode("description");
child.setValue("CMIS Output Connection - Target repo of the content migration");
connectionObject.addChild(connectionObject.getChildCount(),child);
child = new ConfigurationNode("max_connections");
child.setValue("10");
connectionObject.addChild(connectionObject.getChildCount(),child);
child = new ConfigurationNode("configuration");
//binding
ConfigurationNode cmisOutputBindingNode = new ConfigurationNode("_PARAMETER_");
cmisOutputBindingNode.setAttribute("name", CmisOutputConfig.BINDING_PARAM);
cmisOutputBindingNode.setValue(BaseITSanityTestUtils.TARGET_BINDING_VALUE);
child.addChild(child.getChildCount(), cmisOutputBindingNode);
//username
ConfigurationNode cmisOutputUsernameNode = new ConfigurationNode("_PARAMETER_");
cmisOutputUsernameNode.setAttribute("name", CmisOutputConfig.USERNAME_PARAM);
cmisOutputUsernameNode.setValue(BaseITSanityTestUtils.TARGET_USERNAME_VALUE);
child.addChild(child.getChildCount(), cmisOutputUsernameNode);
//password
ConfigurationNode cmisOutputPasswordNode = new ConfigurationNode("_PARAMETER_");
cmisOutputPasswordNode.setAttribute("name", CmisOutputConfig.PASSWORD_PARAM);
cmisOutputPasswordNode.setValue(BaseITSanityTestUtils.TARGET_PASSWORD_VALUE);
child.addChild(child.getChildCount(), cmisOutputPasswordNode);
//protocol
ConfigurationNode cmisOutputProtocolNode = new ConfigurationNode("_PARAMETER_");
cmisOutputProtocolNode.setAttribute("name", CmisOutputConfig.PROTOCOL_PARAM);
cmisOutputProtocolNode.setValue(BaseITSanityTestUtils.TARGET_PROTOCOL_VALUE);
child.addChild(child.getChildCount(), cmisOutputProtocolNode);
//server
ConfigurationNode cmisOutputServerNode = new ConfigurationNode("_PARAMETER_");
cmisOutputServerNode.setAttribute("name", CmisOutputConfig.SERVER_PARAM);
cmisOutputServerNode.setValue(BaseITSanityTestUtils.TARGET_SERVER_VALUE);
child.addChild(child.getChildCount(), cmisOutputServerNode);
//port
ConfigurationNode cmisOutputPortNode = new ConfigurationNode("_PARAMETER_");
cmisOutputPortNode.setAttribute("name", CmisConfig.PORT_PARAM);
cmisOutputPortNode.setValue(BaseITSanityTestUtils.TARGET_PORT_VALUE);
child.addChild(child.getChildCount(), cmisOutputPortNode);
//path
ConfigurationNode cmisOutputPathNode = new ConfigurationNode("_PARAMETER_");
cmisOutputPathNode.setAttribute("name", CmisOutputConfig.PATH_PARAM);
cmisOutputPathNode.setValue(BaseITSanityTestUtils.TARGET_PATH_VALUE);
child.addChild(child.getChildCount(), cmisOutputPathNode);
//cmisQuery
ConfigurationNode cmisOutputCmisQueryNode = new ConfigurationNode("_PARAMETER_");
cmisOutputCmisQueryNode.setAttribute("name", CmisOutputConfig.CMIS_QUERY_PARAM);
cmisOutputCmisQueryNode.setValue(CMIS_QUERY_TARGET_DEFAULT_VALUE);
child.addChild(child.getChildCount(), cmisOutputCmisQueryNode);
//createTimestampTree
ConfigurationNode createTimestampTreeNode = new ConfigurationNode("_PARAMETER_");
createTimestampTreeNode.setAttribute("name", CmisOutputConfig.CREATE_TIMESTAMP_TREE_PARAM);
createTimestampTreeNode.setValue(CmisOutputConfig.CREATE_TIMESTAMP_TREE_DEFAULT_VALUE);
child.addChild(child.getChildCount(), createTimestampTreeNode);
//versioningState
ConfigurationNode versioningStateNode = new ConfigurationNode("_PARAMETER_");
versioningStateNode.setAttribute("name", CmisOutputConfig.VERSIONING_STATE_PARAM);
versioningStateNode.setValue(CmisOutputConfig.VERSIONING_STATE_DEFAULT_VALUE);
child.addChild(child.getChildCount(), versioningStateNode);
connectionObject.addChild(connectionObject.getChildCount(),child);
requestObject = new Configuration();
requestObject.addChild(0,connectionObject);
result = performAPIPutOperationViaNodes("outputconnections/CMIS%20Output%20Connection",201,requestObject);
i = 0;
while (i < result.getChildCount())
{
ConfigurationNode resultNode = result.findChild(i++);
if (resultNode.getType().equals("error"))
throw new Exception(resultNode.getValue());
}
// Create a job.
ConfigurationNode jobObject = new ConfigurationNode("job");
child = new ConfigurationNode("description");
child.setValue("Test Job");
jobObject.addChild(jobObject.getChildCount(),child);
child = new ConfigurationNode("repository_connection");
child.setValue("CMIS Connection");
jobObject.addChild(jobObject.getChildCount(),child);
// Revamped way of adding output connection
child = new ConfigurationNode("pipelinestage");
ConfigurationNode pipelineChild = new ConfigurationNode("stage_id");
pipelineChild.setValue("0");
child.addChild(child.getChildCount(),pipelineChild);
pipelineChild = new ConfigurationNode("stage_isoutput");
pipelineChild.setValue("true");
child.addChild(child.getChildCount(),pipelineChild);
pipelineChild = new ConfigurationNode("stage_connectionname");
pipelineChild.setValue("CMIS Output Connection");
child.addChild(child.getChildCount(),pipelineChild);
jobObject.addChild(jobObject.getChildCount(),child);
child = new ConfigurationNode("run_mode");
child.setValue("scan once");
jobObject.addChild(jobObject.getChildCount(),child);
child = new ConfigurationNode("start_mode");
child.setValue("manual");
jobObject.addChild(jobObject.getChildCount(),child);
child = new ConfigurationNode("hopcount_mode");
child.setValue("accurate");
jobObject.addChild(jobObject.getChildCount(),child);
child = new ConfigurationNode("document_specification");
//Job configuration
ConfigurationNode sn = new ConfigurationNode("startpoint");
sn.setAttribute(CmisOutputConfig.CMIS_QUERY_PARAM, CmisOutputConfig.CMIS_QUERY_DEFAULT_VALUE);
child.addChild(child.getChildCount(),sn);
jobObject.addChild(jobObject.getChildCount(),child);
requestObject = new Configuration();
requestObject.addChild(0,jobObject);
result = performAPIPostOperationViaNodes("jobs",201,requestObject);
String jobIDString = null;
i = 0;
while (i < result.getChildCount())
{
ConfigurationNode resultNode = result.findChild(i++);
if (resultNode.getType().equals("error"))
throw new Exception(resultNode.getValue());
else if (resultNode.getType().equals("job_id"))
jobIDString = resultNode.getValue();
}
if (jobIDString == null)
throw new Exception("Missing job_id from return!");
// Now, start the job, and wait until it completes.
startJob(jobIDString);
waitJobInactive(jobIDString, 240000L);
// Check to be sure we actually processed the right number of documents.
// The test data area has 3 documents and one directory, and we have to count the root directory too.
long count;
count = getJobDocumentsProcessed(jobIDString);
if (count != 3)
throw new ManifoldCFException("Wrong number of documents processed - expected 3, saw "+Long.valueOf(count).toString());
// Add a file and recrawl
Folder testFolder = getTestFolder(cmisSourceClientSession);
createNewDocument(testFolder, "testdata3.txt");
createNewDocument(testFolder, "testdata4.txt");
// Now, start the job, and wait until it completes.
startJob(jobIDString);
waitJobInactive(jobIDString, 240000L);
// The test data area has 4 documents and one directory, and we have to count the root directory too.
count = getJobDocumentsProcessed(jobIDString);
if (count != 5)
throw new ManifoldCFException("Wrong number of documents processed after add - expected 5, saw "+Long.valueOf(count).toString());
// Change a document, and recrawl
changeDocument(cmisSourceClientSession,"testdata1.txt","MODIFIED - CMIS Testdata - MODIFIED");
// Now, start the job, and wait until it completes.
startJob(jobIDString);
waitJobInactive(jobIDString, 240000L);
// The test data area has 4 documents and one directory, and we have to count the root directory too.
count = getJobDocumentsProcessed(jobIDString);
if (count != 5)
throw new ManifoldCFException("Wrong number of documents processed after change - expected 5, saw "+Long.valueOf(count).toString());
//Tests if there are 4 documents in the target repo
// Delete a content and recrawl
removeDocument(cmisSourceClientSession, "testdata1.txt");
// Now, start the job, and wait until it completes.
startJob(jobIDString);
waitJobInactive(jobIDString, 240000L);
// Check to be sure we actually processed the right number of documents.
// The test data area has 3 documents and one directory, and we have to count the root directory too.
count = getJobDocumentsProcessed(jobIDString);
if (count != 4)
throw new ManifoldCFException("Wrong number of documents processed after delete - expected 4, saw "+Long.valueOf(count).toString());
//Tests if there are 3 documents in the target repo
// Now, delete the job.
deleteJob(jobIDString);
waitJobDeleted(jobIDString, 240000L);
// Cleanup is automatic by the base class, so we can feel free to leave jobs and connections lying around.
}
catch (Exception e)
{
e.printStackTrace();
throw e;
}
}
protected void startJob(String jobIDString)
throws Exception
{
Configuration requestObject = new Configuration();
Configuration result = performAPIPutOperationViaNodes("start/"+jobIDString,201,requestObject);
int i = 0;
while (i < result.getChildCount())
{
ConfigurationNode resultNode = result.findChild(i++);
if (resultNode.getType().equals("error"))
throw new Exception(resultNode.getValue());
}
}
protected void deleteJob(String jobIDString)
throws Exception
{
Configuration result = performAPIDeleteOperationViaNodes("jobs/"+jobIDString,200);
int i = 0;
while (i < result.getChildCount())
{
ConfigurationNode resultNode = result.findChild(i++);
if (resultNode.getType().equals("error"))
throw new Exception(resultNode.getValue());
}
}
protected String getJobStatus(String jobIDString)
throws Exception
{
Configuration result = performAPIGetOperationViaNodes("jobstatuses/"+jobIDString,200);
String status = null;
int i = 0;
while (i < result.getChildCount())
{
ConfigurationNode resultNode = result.findChild(i++);
if (resultNode.getType().equals("error"))
throw new Exception(resultNode.getValue());
else if (resultNode.getType().equals("jobstatus"))
{
int j = 0;
while (j < resultNode.getChildCount())
{
ConfigurationNode childNode = resultNode.findChild(j++);
if (childNode.getType().equals("status"))
status = childNode.getValue();
}
}
}
return status;
}
protected long getJobDocumentsProcessed(String jobIDString)
throws Exception
{
Configuration result = performAPIGetOperationViaNodes("jobstatuses/"+jobIDString,200);
String documentsProcessed = null;
int i = 0;
while (i < result.getChildCount())
{
ConfigurationNode resultNode = result.findChild(i++);
if (resultNode.getType().equals("error"))
throw new Exception(resultNode.getValue());
else if (resultNode.getType().equals("jobstatus"))
{
int j = 0;
while (j < resultNode.getChildCount())
{
ConfigurationNode childNode = resultNode.findChild(j++);
if (childNode.getType().equals("documents_processed"))
documentsProcessed = childNode.getValue();
}
}
}
if (documentsProcessed == null)
throw new Exception("Expected a documents_processed field, didn't find it");
return Long.parseLong(documentsProcessed);
}
public void removeDocument(Session session, String name){
String cmisQuery = StringUtils.replace(BaseITSanityTestUtils.CMIS_TEST_QUERY_CHANGE_DOC, BaseITSanityTestUtils.REPLACER, name);
ItemIterable<QueryResult> results = session.query(cmisQuery, false);
String objectId = null;
for (QueryResult result : results) {
objectId = result.getPropertyById(PropertyIds.OBJECT_ID).getFirstValue().toString();
}
session.getObject(objectId).delete();
}
protected void waitJobInactive(String jobIDString, long maxTime)
throws Exception
{
long startTime = System.currentTimeMillis();
while (System.currentTimeMillis() < startTime + maxTime)
{
String status = getJobStatus(jobIDString);
if (status == null)
throw new Exception("No such job: '"+jobIDString+"'");
if (status.equals("not yet run"))
throw new Exception("Job was never started.");
if (status.equals("done"))
return;
if (status.equals("error"))
throw new Exception("Job reports error.");
ManifoldCF.sleep(1000L);
continue;
}
throw new ManifoldCFException("ManifoldCF did not terminate in the allotted time of "+Long.valueOf(maxTime).toString()+" milliseconds");
}
/**
* change the document content with the new one provided as an argument
* @param session
* @param name
* @param newContent
*/
public void changeDocument(Session session, String name, String newContent){
String cmisQuery = StringUtils.replace(BaseITSanityTestUtils.CMIS_TEST_QUERY_CHANGE_DOC, BaseITSanityTestUtils.REPLACER, name);
ItemIterable<QueryResult> results = session.query(cmisQuery, false);
String objectId = StringUtils.EMPTY;
for (QueryResult result : results) {
objectId = result.getPropertyById(PropertyIds.OBJECT_ID).getFirstValue().toString();
}
byte[] newContentByteArray = newContent.getBytes(StandardCharsets.UTF_8);
InputStream stream = new ByteArrayInputStream(newContentByteArray);
ContentStream contentStream = new ContentStreamImpl(name, new BigInteger(newContentByteArray), "text/plain", stream);
Document documentToUpdate = (Document) session.getObject(objectId);
documentToUpdate.setContentStream(contentStream, true);
}
protected void waitJobDeleted(String jobIDString, long maxTime)
throws Exception
{
long startTime = System.currentTimeMillis();
while (System.currentTimeMillis() < startTime + maxTime)
{
String status = getJobStatus(jobIDString);
if (status == null)
return;
ManifoldCF.sleep(1000L);
}
throw new ManifoldCFException("ManifoldCF did not delete in the allotted time of "+Long.valueOf(maxTime).toString()+" milliseconds");
}
}