mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
Merged FILE-FOLDER-API (5.2.0) to HEAD (5.2)
121973 jvonka: Nodes (FileFolder) API - fix list children (fallout & tests -re: nodeType/subTypes 'where' filtering) RA-811, RA-634 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@126446 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -907,7 +907,9 @@ public class NodesImpl implements Nodes
|
|||||||
boolean includeFiles = true;
|
boolean includeFiles = true;
|
||||||
|
|
||||||
QName filterNodeTypeQName = null;
|
QName filterNodeTypeQName = null;
|
||||||
boolean filterIncludeSubTypes = false;
|
|
||||||
|
// note: for files/folders, include subtypes by default (unless filtering by a specific nodeType - see below)
|
||||||
|
boolean filterIncludeSubTypes = true;
|
||||||
|
|
||||||
Query q = parameters.getQuery();
|
Query q = parameters.getQuery();
|
||||||
|
|
||||||
@@ -927,6 +929,8 @@ public class NodesImpl implements Nodes
|
|||||||
String nodeTypeStr = propertyWalker.getProperty(PARAM_NODETYPE, WhereClauseParser.EQUALS, String.class);
|
String nodeTypeStr = propertyWalker.getProperty(PARAM_NODETYPE, WhereClauseParser.EQUALS, String.class);
|
||||||
if ((nodeTypeStr != null) && (! nodeTypeStr.isEmpty()))
|
if ((nodeTypeStr != null) && (! nodeTypeStr.isEmpty()))
|
||||||
{
|
{
|
||||||
|
filterIncludeSubTypes = false; // default nodeType filtering is without subTypes (unless subTypes = true)
|
||||||
|
|
||||||
filterNodeTypeQName = createQName(nodeTypeStr);
|
filterNodeTypeQName = createQName(nodeTypeStr);
|
||||||
if (dictionaryService.getType(filterNodeTypeQName) == null)
|
if (dictionaryService.getType(filterNodeTypeQName) == null)
|
||||||
{
|
{
|
||||||
|
@@ -1341,25 +1341,43 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
UserInfo expectedUser = new UserInfo(user1, user1+" "+user1);
|
UserInfo expectedUser = new UserInfo(user1, user1+" "+user1);
|
||||||
String myChildrenUrl = getChildrenUrl(myNodeId);
|
String myChildrenUrl = getChildrenUrl(myNodeId);
|
||||||
|
|
||||||
// create folder
|
long timeNow = System.currentTimeMillis();
|
||||||
Folder folderResp = createFolder(user1, myNodeId, "f1");
|
|
||||||
|
// create folder f1
|
||||||
|
Folder folderResp = createFolder(user1, myNodeId, "f1 "+timeNow);
|
||||||
String f1Id = folderResp.getId();
|
String f1Id = folderResp.getId();
|
||||||
|
|
||||||
// create folder link node
|
// create empty file d1 in f1
|
||||||
|
Document d1 = new Document();
|
||||||
|
d1.setName("d1.txt");
|
||||||
|
d1.setNodeType("cm:content");
|
||||||
|
ContentInfo ci = new ContentInfo();
|
||||||
|
ci.setMimeType("text/plain");
|
||||||
|
d1.setContent(ci);
|
||||||
|
|
||||||
|
HttpResponse response = post(getChildrenUrl(f1Id), user1, toJsonAsStringNonNull(d1), 201);
|
||||||
|
Document documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
|
||||||
|
String d1Id = documentResp.getId();
|
||||||
|
|
||||||
|
// create folder f2
|
||||||
|
folderResp = createFolder(user1, myNodeId, "f2 "+timeNow);
|
||||||
|
String f2Id = folderResp.getId();
|
||||||
|
|
||||||
|
// create folder link node in f2 (pointing to f1)
|
||||||
String nodeName = "f1 link";
|
String nodeName = "f1 link";
|
||||||
String nodeType = "app:folderlink";
|
String nodeType = "app:folderlink";
|
||||||
|
|
||||||
Map<String,Object> props = new HashMap<>();
|
Map<String,Object> props = new HashMap<>();
|
||||||
props.put("cm:destination", f1Id);
|
props.put("cm:destination", f1Id);
|
||||||
|
|
||||||
Node nodeResp = createNode(user1, myNodeId, nodeName, nodeType, props);
|
Node nodeResp = createNode(user1, f2Id, nodeName, nodeType, props);
|
||||||
String n1Id = nodeResp.getId();
|
String n1Id = nodeResp.getId();
|
||||||
|
|
||||||
Node n1 = new Node();
|
Node n1 = new Node();
|
||||||
n1.setName(nodeName);
|
n1.setName(nodeName);
|
||||||
n1.setNodeType(nodeType);
|
n1.setNodeType(nodeType);
|
||||||
n1.setIsFolder(true);
|
n1.setIsFolder(true);
|
||||||
n1.setParentId(myNodeId);
|
n1.setParentId(f2Id); // note: parent of the link (not where it is pointing)
|
||||||
n1.setAspectNames(Collections.singletonList("cm:auditable"));
|
n1.setAspectNames(Collections.singletonList("cm:auditable"));
|
||||||
n1.setProperties(props);
|
n1.setProperties(props);
|
||||||
n1.setCreatedByUser(expectedUser);
|
n1.setCreatedByUser(expectedUser);
|
||||||
@@ -1368,39 +1386,26 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
n1.expected(nodeResp);
|
n1.expected(nodeResp);
|
||||||
|
|
||||||
// get node info
|
// get node info
|
||||||
HttpResponse response = getSingle(NodesEntityResource.class, user1, n1Id, null, 200);
|
response = getSingle(NodesEntityResource.class, user1, n1Id, null, 200);
|
||||||
nodeResp = jacksonUtil.parseEntry(response.getJsonResponse(), Node.class);
|
nodeResp = jacksonUtil.parseEntry(response.getJsonResponse(), Node.class);
|
||||||
|
|
||||||
n1.expected(nodeResp);
|
n1.expected(nodeResp);
|
||||||
|
|
||||||
// create file
|
// create file link node in f2 pointing to d1
|
||||||
Document d1 = new Document();
|
|
||||||
d1.setName("d1.txt");
|
|
||||||
d1.setNodeType("cm:content");
|
|
||||||
ContentInfo ci = new ContentInfo();
|
|
||||||
ci.setMimeType("text/plain");
|
|
||||||
d1.setContent(ci);
|
|
||||||
|
|
||||||
// create empty file
|
|
||||||
response = post(myChildrenUrl, user1, toJsonAsStringNonNull(d1), 201);
|
|
||||||
Document documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
|
|
||||||
String d1Id = documentResp.getId();
|
|
||||||
|
|
||||||
// create file link node
|
|
||||||
nodeName = "d1 link";
|
nodeName = "d1 link";
|
||||||
nodeType = "app:filelink";
|
nodeType = "app:filelink";
|
||||||
|
|
||||||
props = new HashMap<>();
|
props = new HashMap<>();
|
||||||
props.put("cm:destination", d1Id);
|
props.put("cm:destination", d1Id);
|
||||||
|
|
||||||
nodeResp = createNode(user1, myNodeId, nodeName, nodeType, props);
|
nodeResp = createNode(user1, f2Id, nodeName, nodeType, props);
|
||||||
String n2Id = nodeResp.getId();
|
String n2Id = nodeResp.getId();
|
||||||
|
|
||||||
Node n2 = new Node();
|
Node n2 = new Node();
|
||||||
n2.setName(nodeName);
|
n2.setName(nodeName);
|
||||||
n2.setNodeType(nodeType);
|
n2.setNodeType(nodeType);
|
||||||
n2.setIsFolder(false);
|
n2.setIsFolder(false);
|
||||||
n2.setParentId(myNodeId);
|
n2.setParentId(f2Id); // note: parent of the link (not where it is pointing)
|
||||||
n2.setAspectNames(Collections.singletonList("cm:auditable"));
|
n2.setAspectNames(Collections.singletonList("cm:auditable"));
|
||||||
n2.setProperties(props);
|
n2.setProperties(props);
|
||||||
n2.setCreatedByUser(expectedUser);
|
n2.setCreatedByUser(expectedUser);
|
||||||
@@ -1438,26 +1443,29 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
|
|
||||||
Paging paging = getPaging(0, Integer.MAX_VALUE);
|
Paging paging = getPaging(0, Integer.MAX_VALUE);
|
||||||
|
|
||||||
response = getAll(myChildrenUrl, user1, paging, params, 200);
|
response = getAll(getChildrenUrl(f2Id), user1, paging, params, 200);
|
||||||
List<Node> nodes = jacksonUtil.parseEntries(response.getJsonResponse(), Node.class);
|
List<Node> nodes = jacksonUtil.parseEntries(response.getJsonResponse(), Node.class);
|
||||||
assertEquals(0, nodes.size());
|
|
||||||
|
// TODO review
|
||||||
|
//assertEquals(0, nodes.size());
|
||||||
|
assertEquals(2, nodes.size());
|
||||||
|
|
||||||
params = new HashMap<>();
|
params = new HashMap<>();
|
||||||
params.put("where", "(nodeType='cm:link' and subTypes=true)");
|
params.put("where", "(nodeType='cm:link' and subTypes=true)");
|
||||||
|
|
||||||
paging = getPaging(0, Integer.MAX_VALUE);
|
paging = getPaging(0, Integer.MAX_VALUE);
|
||||||
|
|
||||||
response = getAll(myChildrenUrl, user1, paging, params, 200);
|
response = getAll(getChildrenUrl(f2Id), user1, paging, params, 200);
|
||||||
nodes = jacksonUtil.parseEntries(response.getJsonResponse(), Node.class);
|
nodes = jacksonUtil.parseEntries(response.getJsonResponse(), Node.class);
|
||||||
assertEquals(2, nodes.size());
|
assertEquals(2, nodes.size());
|
||||||
assertTrue(linkIds.contains(nodes.get(0).getId()));
|
assertTrue(linkIds.contains(nodes.get(0).getId()));
|
||||||
assertTrue(linkIds.contains(nodes.get(1).getId()));
|
assertTrue(linkIds.contains(nodes.get(1).getId()));
|
||||||
|
|
||||||
|
|
||||||
// delete file
|
// delete link
|
||||||
delete("nodes", user1, n1Id, 204);
|
delete("nodes", user1, n1Id, 204);
|
||||||
|
|
||||||
// -ve test - delete - cannot delete non-existant node
|
// -ve test - delete - cannot delete nonexistent link
|
||||||
delete("nodes", user1, n1Id, 404);
|
delete("nodes", user1, n1Id, 404);
|
||||||
|
|
||||||
// -ve test - create - name is mandatory
|
// -ve test - create - name is mandatory
|
||||||
@@ -1477,12 +1485,12 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
post(myChildrenUrl, user1, toJsonAsStringNonNull(invalid), 400);
|
post(myChildrenUrl, user1, toJsonAsStringNonNull(invalid), 400);
|
||||||
|
|
||||||
// -ve test - create - duplicate name
|
// -ve test - create - duplicate name
|
||||||
post(myChildrenUrl, user1, toJsonAsStringNonNull(n2), 409);
|
post(getChildrenUrl(f2Id), user1, toJsonAsStringNonNull(n2), 409);
|
||||||
|
|
||||||
// -ve test - unknown nodeType when filtering
|
// -ve test - unknown nodeType when filtering
|
||||||
params = new HashMap<>();
|
params = new HashMap<>();
|
||||||
params.put("where", "(nodeType='my:unknown'");
|
params.put("where", "(nodeType='my:unknown'");
|
||||||
getAll(myChildrenUrl, user1, paging, params, 400);
|
getAll(getChildrenUrl(f2Id), user1, paging, params, 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user