CMIS: Query paging support in AtomPub binding

- exposes query service support for paging
- added testGetQueryPaging()

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@13452 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
David Caruana
2009-03-03 14:56:46 +00:00
parent b3ec745f99
commit 4683fe68de
4 changed files with 52 additions and 7 deletions

View File

@@ -455,7 +455,7 @@ public class CMISScript extends BaseScopableProcessorExtension
options.setSkipCount(page.getNumber());
options.setMaxItems(page.getSize());
CMISResultSet resultSet = cmisQueryService.query(options);
Cursor cursor = paging.createCursor(resultSet.getLength() + (resultSet.hasMore() ? 1 : 0) , page);
Cursor cursor = paging.createCursor(page.getNumber() + resultSet.getLength() + (resultSet.hasMore() ? 1 : 0) , page);
return paging.createPagedResult(resultSet, cursor);
}

View File

@@ -104,8 +104,8 @@ public class CMISTest extends BaseCMISWebScriptTest
// setRemoteServer(server);
// setArgsAsHeaders(false);
// setValidateResponse(false);
// setListener(new CMISTestListener(System.out));
// setTraceReqRes(true);
setListener(new CMISTestListener(System.out));
setTraceReqRes(true);
super.setUp();
}
@@ -1222,6 +1222,7 @@ public class CMISTest extends BaseCMISWebScriptTest
"WHERE IN_FOLDER('" + testFolderObject.getObjectId().getValue() + "') " +
"AND Name = 'apple1'";
String queryReq = queryDoc.replace("${STATEMENT}", query);
queryReq = queryReq.replace("${SKIPCOUNT}", "0");
queryReq = queryReq.replace("${PAGESIZE}", "5");
// issue structured query
@@ -1243,6 +1244,7 @@ public class CMISTest extends BaseCMISWebScriptTest
String query = "SELECT ObjectId, ObjectTypeId, Name FROM Document " +
"WHERE CONTAINS('" + doc2name + "')";
String queryReq = queryDoc.replace("${STATEMENT}", query);
queryReq = queryReq.replace("${SKIPCOUNT}", "0");
queryReq = queryReq.replace("${PAGESIZE}", "5");
// issue fulltext query
@@ -1266,6 +1268,7 @@ public class CMISTest extends BaseCMISWebScriptTest
"AND Name = 'apple1' " +
"AND CONTAINS('apple1')";
String queryReq = queryDoc.replace("${STATEMENT}", query);
queryReq = queryReq.replace("${SKIPCOUNT}", "0");
queryReq = queryReq.replace("${PAGESIZE}", "5");
// issue structured query
@@ -1282,6 +1285,51 @@ public class CMISTest extends BaseCMISWebScriptTest
}
}
public void testQueryPaging() throws Exception
{
// retrieve query collection
IRI queryHREF = getQueryCollection(getWorkspace(getRepository()));
// create multiple children
Set<IRI> docIds = new HashSet<IRI>();
Entry testFolder = createTestFolder("testQueryPaging");
Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN);
assertNotNull(childrenLink);
for (int i = 0; i < 15; i++)
{
Entry document = createDocument(childrenLink.getHref(), "testQueryPaging" + i);
assertNotNull(document);
docIds.add(document.getId());
}
assertEquals(15, docIds.size());
// query children
String queryDoc = loadString("/org/alfresco/repo/cmis/rest/test/query.cmisquery.xml");
CMISObject testFolderObject = testFolder.getExtension(CMISConstants.OBJECT);
String query = "SELECT ObjectId, ObjectTypeId, Name FROM Document " + "WHERE IN_FOLDER('" + testFolderObject.getObjectId().getValue() + "')";
for (int page = 0; page < 4; page++)
{
String queryReq = queryDoc.replace("${STATEMENT}", query);
queryReq = queryReq.replace("${SKIPCOUNT}", new Integer(page * 4).toString());
queryReq = queryReq.replace("${PAGESIZE}", "4");
Response queryRes = sendRequest(new PostRequest(queryHREF.toString(), queryReq.getBytes(), CMISConstants.MIMETYPE_QUERY), 200);
assertNotNull(queryRes);
Feed queryFeed = abdera.parseFeed(new StringReader(queryRes.getContentAsString()), null);
assertNotNull(queryFeed);
assertEquals(page < 3 ? 4 : 3, queryFeed.getEntries().size());
for (Entry entry : queryFeed.getEntries())
{
docIds.remove(entry.getId());
}
}
assertEquals(0, docIds.size());
}
// public void testUnfiled()
// {
// }

View File

@@ -1,4 +1,5 @@
<cmis:query xmlns:cmis="http://www.cmis.org/2008/05" >
<cmis:statement><![CDATA[${STATEMENT}]]></cmis:statement>
<cmis:skipCount>${SKIPCOUNT}</cmis:skipCount>
<cmis:pageSize>${PAGESIZE}</cmis:pageSize>
</cmis:query>

View File

@@ -1,4 +0,0 @@
<cmis:query xmlns:cmis="http://www.cmis.org/2008/05" >
<cmis:statement><![CDATA[${STATEMENT}]]></cmis:statement>
<cmis:pageSize>${PAGESIZE}</cmis:pageSize>
</cmis:query>