mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
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:
@@ -62,7 +62,7 @@ public class CMISQueryReader implements FormatReader<String>
|
||||
*/
|
||||
public String getSourceMimetype()
|
||||
{
|
||||
return CMISConstants.MIMETYPE_QUERY;
|
||||
return CMISConstants.MIMETYPE_CMIS_QUERY;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@@ -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);
|
||||
|
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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>
|
||||
|
@@ -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>
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user