Merged CMIS063 to HEAD

15327: 0.62 final update: Add feed links as per spec
  15334: 0.62 final update: queries working again.
  15350: 0.62 final update: query via GET
  15362: 0.62 final update: query uri template and query result set feed as per 0.62
  15434: Fix decoding issue retrieving query string of request.
  15441: 0.62 final updates: fixes to allow CMIS Fileshare browsing

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@17231 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
David Caruana
2009-10-29 16:27:40 +00:00
parent c9facc3e78
commit e90b63f20b
44 changed files with 599 additions and 288 deletions

View File

@@ -62,7 +62,7 @@ public class CMISQueryReader implements FormatReader<String>
*/
public String getSourceMimetype()
{
return CMISConstants.MIMETYPE_QUERY;
return CMISConstants.MIMETYPE_CMIS_QUERY;
}
/* (non-Javadoc)

View File

@@ -40,6 +40,7 @@ import org.alfresco.cmis.CMISResultSet;
import org.alfresco.cmis.CMISServices;
import org.alfresco.cmis.CMISTypeDefinition;
import org.alfresco.cmis.CMISTypesFilterEnum;
import org.alfresco.cmis.CMISQueryOptions.CMISQueryMode;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.repo.jscript.Association;
import org.alfresco.repo.jscript.BaseScopableProcessorExtension;
@@ -84,6 +85,7 @@ public class CMISScript extends BaseScopableProcessorExtension
public static final String ARG_MAJOR_VERSION = "majorVersion";
public static final String ARG_MAX_ITEMS = "maxItems";
public static final String ARG_OFFSET = "offset";
public static final String ARG_QUERY_STATEMENT = "q";
public static final String ARG_REMOVE_FROM = "removeFrom";
public static final String ARG_RELATIONSHIP_TYPE = "relationshipType";
public static final String ARG_REPOSITORY_ID = "repositoryId";
@@ -554,6 +556,7 @@ public class CMISScript extends BaseScopableProcessorExtension
public PagedResults query(String statement, Page page)
{
CMISQueryOptions options = new CMISQueryOptions(statement, cmisService.getDefaultRootStoreRef());
options.setQueryMode(CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS);
options.setSkipCount(page.getNumber());
options.setMaxItems(page.getSize());
CMISResultSet resultSet = cmisQueryService.query(options);

View File

@@ -231,7 +231,7 @@ public class CMISTemplateResultSet implements Serializable
public String getColumnType(String colName)
{
CMISResultSetColumn col = resultSet.getMetaData().getColumn(colName);
return col == null ? null : col.getCMISDataType().name();
return col == null ? null : col.getCMISDataType().getLabel();
}
/**

View File

@@ -273,7 +273,7 @@ public class CMISCustomTypeTest extends BaseCMISWebScriptTest
queryReq = queryReq.replace("${PAGESIZE}", "5");
// issue structured query
Response queryRes = sendRequest(new PostRequest(queryHREF.toString(), queryReq, CMISConstants.MIMETYPE_QUERY), 200);
Response queryRes = sendRequest(new PostRequest(queryHREF.toString(), queryReq, CMISConstants.MIMETYPE_CMIS_QUERY), 200);
assertNotNull(queryRes);
Feed queryFeed = getAbdera().parseFeed(new StringReader(queryRes.getContentAsString()), null);
assertNotNull(queryFeed);

View File

@@ -1274,13 +1274,13 @@ public class CMISTest extends BaseCMISWebScriptTest
{
{
// meta data only query against folder
String query = "SELECT * FROM Folder " +
"WHERE ObjectId = '" + testFolderObject.getObjectId().getStringValue() + "'";
String query = "SELECT * FROM cmis:folder " +
"WHERE cmis:ObjectId = '" + testFolderObject.getObjectId().getStringValue() + "'";
String queryReq = queryDoc.replace("${STATEMENT}", query);
queryReq = queryReq.replace("${SKIPCOUNT}", "0");
queryReq = queryReq.replace("${PAGESIZE}", "5");
queryReq = queryReq.replace("${MAXITEMS}", "5");
Response queryRes = sendRequest(new PostRequest(queryHREF.toString(), queryReq, CMISConstants.MIMETYPE_QUERY), 200);
Response queryRes = sendRequest(new PostRequest(queryHREF.toString(), queryReq, CMISConstants.MIMETYPE_CMIS_QUERY), 200);
assertNotNull(queryRes);
Feed queryFeed = getAbdera().parseFeed(new StringReader(queryRes.getContentAsString()), null);
assertNotNull(queryFeed);
@@ -1294,14 +1294,14 @@ public class CMISTest extends BaseCMISWebScriptTest
{
// meta data only query against document
String query = "SELECT * FROM Document " +
String query = "SELECT * FROM cmis:document " +
"WHERE IN_FOLDER('" + testFolderObject.getObjectId().getStringValue() + "') " +
"AND Name = 'apple1'";
"AND cmis:Name = 'apple1'";
String queryReq = queryDoc.replace("${STATEMENT}", query);
queryReq = queryReq.replace("${SKIPCOUNT}", "0");
queryReq = queryReq.replace("${PAGESIZE}", "5");
queryReq = queryReq.replace("${MAXITEMS}", "5");
Response queryRes = sendRequest(new PostRequest(queryHREF.toString(), queryReq, CMISConstants.MIMETYPE_QUERY), 200);
Response queryRes = sendRequest(new PostRequest(queryHREF.toString(), queryReq, CMISConstants.MIMETYPE_CMIS_QUERY), 200);
assertNotNull(queryRes);
Feed queryFeed = getAbdera().parseFeed(new StringReader(queryRes.getContentAsString()), null);
assertNotNull(queryFeed);
@@ -1317,13 +1317,13 @@ public class CMISTest extends BaseCMISWebScriptTest
if (queryCapability.equals("fulltextonly") || queryCapability.equals("bothseperate") || queryCapability.equals("bothcombined"))
{
// full text only query
String query = "SELECT ObjectId, ObjectTypeId, Name FROM Document " +
String query = "SELECT cmis:ObjectId, cmis:ObjectTypeId, cmis:Name FROM cmis:document " +
"WHERE CONTAINS('" + doc2name + "')";
String queryReq = queryDoc.replace("${STATEMENT}", query);
queryReq = queryReq.replace("${SKIPCOUNT}", "0");
queryReq = queryReq.replace("${PAGESIZE}", "5");
queryReq = queryReq.replace("${MAXITEMS}", "5");
Response queryRes = sendRequest(new PostRequest(queryHREF.toString(), queryReq, CMISConstants.MIMETYPE_QUERY), 200);
Response queryRes = sendRequest(new PostRequest(queryHREF.toString(), queryReq, CMISConstants.MIMETYPE_CMIS_QUERY), 200);
assertNotNull(queryRes);
Feed queryFeed = getAbdera().parseFeed(new StringReader(queryRes.getContentAsString()), null);
assertNotNull(queryFeed);
@@ -1338,15 +1338,15 @@ public class CMISTest extends BaseCMISWebScriptTest
if (queryCapability.equals("bothcombined"))
{
// combined meta data and full text
String query = "SELECT ObjectId, ObjectTypeId, Name FROM Document " +
String query = "SELECT cmis:ObjectId, cmis:ObjectTypeId, cmis:Name FROM cmis:document " +
"WHERE IN_FOLDER('" + testFolderObject.getObjectId().getStringValue() + "') " +
"AND Name = 'apple1' " +
"AND cmis:Name = 'apple1' " +
"AND CONTAINS('apple1')";
String queryReq = queryDoc.replace("${STATEMENT}", query);
queryReq = queryReq.replace("${SKIPCOUNT}", "0");
queryReq = queryReq.replace("${PAGESIZE}", "5");
queryReq = queryReq.replace("${MAXITEMS}", "5");
Response queryRes = sendRequest(new PostRequest(queryHREF.toString(), queryReq, CMISConstants.MIMETYPE_QUERY), 200);
Response queryRes = sendRequest(new PostRequest(queryHREF.toString(), queryReq, CMISConstants.MIMETYPE_CMIS_QUERY), 200);
assertNotNull(queryRes);
Feed queryFeed = getAbdera().parseFeed(new StringReader(queryRes.getContentAsString()), null);
assertNotNull(queryFeed);
@@ -1386,26 +1386,52 @@ public class CMISTest extends BaseCMISWebScriptTest
// 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().getStringValue() + "')";
String query = "SELECT cmis:ObjectId, cmis:ObjectTypeId, cmis:Name FROM cmis:document " + "WHERE IN_FOLDER('" + testFolderObject.getObjectId().getStringValue() + "')";
String queryReq = queryDoc.replace("${STATEMENT}", query);
queryReq = queryReq.replace("${SKIPCOUNT}", "0");
queryReq = queryReq.replace("${MAXITEMS}", "4");
// issue query
Response queryRes = sendRequest(new PostRequest(queryHREF.toString(), queryReq, CMISConstants.MIMETYPE_CMIS_QUERY), 200);
assertNotNull(queryRes);
// retrieve entries for first page
Feed queryFeed = getAbdera().parseFeed(new StringReader(queryRes.getContentAsString()), null);
assertNotNull(queryFeed);
for (int page = 0; page < 4; page++)
int page = 0;
Link nextLink = null;
do
{
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, CMISConstants.MIMETYPE_QUERY), 200);
assertNotNull(queryRes);
Feed queryFeed = getAbdera().parseFeed(new StringReader(queryRes.getContentAsString()), null);
assertNotNull(queryFeed);
assertEquals(page < 3 ? 4 : 3, queryFeed.getEntries().size());
page++;
assertEquals(page < 4 ? 4 : 3, queryFeed.getEntries().size());
// mark entries as read
for (Entry entry : queryFeed.getEntries())
{
docIds.remove(entry.getId());
}
// next page
nextLink = queryFeed.getLink("next");
if (page == 4)
{
assertNull(nextLink);
}
else
{
assertNotNull(nextLink);
}
if (nextLink != null)
{
queryFeed = getFeed(nextLink.getHref());
assertNotNull(queryFeed);
}
}
while (nextLink != null);
assertEquals(4, page);
assertEquals(0, docIds.size());
}
@@ -1444,15 +1470,15 @@ public class CMISTest extends BaseCMISWebScriptTest
{
// construct structured query
String query = "SELECT * FROM Document " +
String query = "SELECT * FROM cmis:document " +
"WHERE IN_FOLDER('" + testFolderObject.getObjectId().getStringValue() + "') ";
String queryReq = queryDoc.replace("${STATEMENT}", query);
queryReq = queryReq.replace("${INCLUDEALLOWABLEACTIONS}", "true");
queryReq = queryReq.replace("${SKIPCOUNT}", "0");
queryReq = queryReq.replace("${PAGESIZE}", "5");
queryReq = queryReq.replace("${MAXITEMS}", "5");
// issue structured query
Response queryRes = sendRequest(new PostRequest(queryHREF.toString(), queryReq, CMISConstants.MIMETYPE_QUERY), 200);
Response queryRes = sendRequest(new PostRequest(queryHREF.toString(), queryReq, CMISConstants.MIMETYPE_CMIS_QUERY), 200);
assertNotNull(queryRes);
Feed queryFeed = getAbdera().parseFeed(new StringReader(queryRes.getContentAsString()), null);
assertNotNull(queryFeed);

View File

@@ -1,5 +1,5 @@
<cmis:query xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200901" >
<cmis:statement><![CDATA[${STATEMENT}]]></cmis:statement>
<cmis:skipCount>${SKIPCOUNT}</cmis:skipCount>
<cmis:pageSize>${PAGESIZE}</cmis:pageSize>
<cmis:maxItems>${MAXITEMS}</cmis:maxItems>
</cmis:query>

View File

@@ -1,6 +1,6 @@
<cmis:query xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200901" >
<cmis:statement><![CDATA[${STATEMENT}]]></cmis:statement>
<cmis:returnAllowableActions>${INCLUDEALLOWABLEACTIONS}</cmis:returnAllowableActions>
<cmis:includeAllowableActions>${INCLUDEALLOWABLEACTIONS}</cmis:includeAllowableActions>
<cmis:skipCount>${SKIPCOUNT}</cmis:skipCount>
<cmis:pageSize>${PAGESIZE}</cmis:pageSize>
<cmis:maxItems>${MAXITEMS}</cmis:maxItems>
</cmis:query>

View File

@@ -152,10 +152,6 @@ public class Paging
* skipCount => row number start index
* maxItems => size of page
*
* - header values
* CMIS-skipCount => row number start index
* CMIS-maxItems => size of page
*
* @param args request args
* @return page (if pageNumber driven) or window (if skipCount driven)
*/
@@ -253,7 +249,7 @@ public class Paging
*/
public Page createUnlimitedPage()
{
return new Page(PageType.PAGE, zeroBasedPage, zeroBasedPage ? 0 : 1, 0);
return new Page(PageType.PAGE, zeroBasedPage, zeroBasedPage ? 0 : 1, -1);
}
/**