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)
121438 jvonka: FileFolder API - support "relativePath" when listing children, eg. /nodes/{parentId}/children?relativePath=f1/f2 - also add tests both for list children & get node info - TODO investigate/fix RA-755 RA-672, RA-753 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@126407 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -129,7 +129,7 @@ public class NodesImpl implements Nodes
|
|||||||
DOCUMENT, FOLDER
|
DOCUMENT, FOLDER
|
||||||
}
|
}
|
||||||
|
|
||||||
private final static String PARAM_RELATIVE_PATH = "relativePath"; // TODO wip
|
private final static String PARAM_RELATIVE_PATH = "relativePath";
|
||||||
|
|
||||||
private final static String PARAM_SELECT_PROPERTIES = "properties";
|
private final static String PARAM_SELECT_PROPERTIES = "properties";
|
||||||
private final static String PARAM_SELECT_PATH = "path";
|
private final static String PARAM_SELECT_PATH = "path";
|
||||||
@@ -842,7 +842,8 @@ public class NodesImpl implements Nodes
|
|||||||
|
|
||||||
public CollectionWithPagingInfo<Node> listChildren(String parentFolderNodeId, Parameters parameters)
|
public CollectionWithPagingInfo<Node> listChildren(String parentFolderNodeId, Parameters parameters)
|
||||||
{
|
{
|
||||||
final NodeRef parentNodeRef = validateOrLookupNode(parentFolderNodeId, null);
|
String path = parameters.getParameter(PARAM_RELATIVE_PATH);
|
||||||
|
final NodeRef parentNodeRef = validateOrLookupNode(parentFolderNodeId, path);
|
||||||
|
|
||||||
final List<String> selectParam = parameters.getSelectedProperties();
|
final List<String> selectParam = parameters.getSelectedProperties();
|
||||||
|
|
||||||
|
@@ -330,15 +330,15 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
|
|
||||||
Map<String,Object> props = new HashMap<>(1);
|
Map<String,Object> props = new HashMap<>(1);
|
||||||
props.put("cm:title", "This is folder 1");
|
props.put("cm:title", "This is folder 1");
|
||||||
String folder1 = "folder" + System.currentTimeMillis() + "_1";
|
String folder1 = "folder " + System.currentTimeMillis() + " 1";
|
||||||
String folder1_Id = createFolder(user1, myNodeId, folder1, props).getId();
|
String folder1_Id = createFolder(user1, myNodeId, folder1, props).getId();
|
||||||
|
|
||||||
props = new HashMap<>(1);
|
props = new HashMap<>(1);
|
||||||
props.put("cm:title", "This is folder 2");
|
props.put("cm:title", "This is folder 2");
|
||||||
String folder2 = "folder" + System.currentTimeMillis() + "_2";
|
String folder2 = "folder " + System.currentTimeMillis() + " 2";
|
||||||
String folder2_Id = createFolder(user1, myNodeId, folder2, props).getId();
|
String folder2_Id = createFolder(user1, myNodeId, folder2, props).getId();
|
||||||
|
|
||||||
String content1 = "content" + System.currentTimeMillis() + "_1";
|
String content1 = "content" + System.currentTimeMillis() + " 1";
|
||||||
NodeRef contentNodeRef = repoService.createDocument(myFilesNodeRef, content1, "The quick brown fox jumps over the lazy dog.");
|
NodeRef contentNodeRef = repoService.createDocument(myFilesNodeRef, content1, "The quick brown fox jumps over the lazy dog.");
|
||||||
repoService.getNodeService().setProperty(contentNodeRef, ContentModel.PROP_OWNER, user1);
|
repoService.getNodeService().setProperty(contentNodeRef, ContentModel.PROP_OWNER, user1);
|
||||||
repoService.getNodeService().setProperty(contentNodeRef, ContentModel.PROP_LAST_THUMBNAIL_MODIFICATION_DATA,
|
repoService.getNodeService().setProperty(contentNodeRef, ContentModel.PROP_LAST_THUMBNAIL_MODIFICATION_DATA,
|
||||||
@@ -448,6 +448,18 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
assertFalse(nodes.get(0).getIsFolder());
|
assertFalse(nodes.get(0).getIsFolder());
|
||||||
assertTrue(contentIds.contains(nodes.get(0).getId()));
|
assertTrue(contentIds.contains(nodes.get(0).getId()));
|
||||||
|
|
||||||
|
// get node info via relativePath
|
||||||
|
|
||||||
|
params = Collections.singletonMap("relativePath", folder1);
|
||||||
|
response = getSingle(NodesEntityResource.class, user1, Nodes.PATH_MY, params, 200);
|
||||||
|
Folder folderResp = jacksonUtil.parseEntry(response.getJsonResponse(), Folder.class);
|
||||||
|
assertEquals(folder1_Id, folderResp.getId());
|
||||||
|
|
||||||
|
params = Collections.singletonMap("relativePath", "User Homes/"+user1+"/"+folder2);
|
||||||
|
response = getSingle(NodesEntityResource.class, user1, Nodes.PATH_ROOT, params, 200);
|
||||||
|
folderResp = jacksonUtil.parseEntry(response.getJsonResponse(), Folder.class);
|
||||||
|
assertEquals(folder2_Id, folderResp.getId());
|
||||||
|
|
||||||
// -ve test - Invalid QName (Namespace prefix cm... is not mapped to a namespace URI) for the orderBy parameter.
|
// -ve test - Invalid QName (Namespace prefix cm... is not mapped to a namespace URI) for the orderBy parameter.
|
||||||
orderBy = Collections.singletonMap("orderBy", "isFolder DESC,cm" + System.currentTimeMillis() + ":modified DESC");
|
orderBy = Collections.singletonMap("orderBy", "isFolder DESC,cm" + System.currentTimeMillis() + ":modified DESC");
|
||||||
getAll(getChildrenUrl(myFilesNodeRef), user1, paging, orderBy, 400);
|
getAll(getChildrenUrl(myFilesNodeRef), user1, paging, orderBy, 400);
|
||||||
@@ -460,9 +472,12 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
// -ve test - list folder children for unknown node should return 404
|
// -ve test - list folder children for unknown node should return 404
|
||||||
getAll(getChildrenUrl(UUID.randomUUID().toString()), user1, paging, 404);
|
getAll(getChildrenUrl(UUID.randomUUID().toString()), user1, paging, 404);
|
||||||
|
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(user2);
|
|
||||||
// -ve test - user2 tries to access user1's home folder
|
// -ve test - user2 tries to access user1's home folder
|
||||||
|
AuthenticationUtil.setFullyAuthenticatedUser(user2);
|
||||||
getAll(getChildrenUrl(myFilesNodeRef), user2, paging, 403);
|
getAll(getChildrenUrl(myFilesNodeRef), user2, paging, 403);
|
||||||
|
|
||||||
|
params = Collections.singletonMap("relativePath", "User Homes/"+user1+"/unknown");
|
||||||
|
getSingle(NodesEntityResource.class, user1, Nodes.PATH_ROOT, params, 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -577,7 +592,7 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
NodeRef folderB_Ref = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folderB_Id);
|
NodeRef folderB_Ref = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folderB_Id);
|
||||||
|
|
||||||
// /Company Home/User Homes/user<timestamp>/folder<timestamp>_A/folder<timestamp>_B/content<timestamp>
|
// /Company Home/User Homes/user<timestamp>/folder<timestamp>_A/folder<timestamp>_B/content<timestamp>
|
||||||
String contentName = "content" + System.currentTimeMillis();
|
String contentName = "content " + System.currentTimeMillis();
|
||||||
NodeRef contentNodeRef = repoService.createDocument(folderB_Ref, contentName, "The quick brown fox jumps over the lazy dog.");
|
NodeRef contentNodeRef = repoService.createDocument(folderB_Ref, contentName, "The quick brown fox jumps over the lazy dog.");
|
||||||
|
|
||||||
// Add property
|
// Add property
|
||||||
@@ -587,18 +602,19 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
// get node info
|
// get node info
|
||||||
response = getSingle(NodesEntityResource.class, user1, contentNodeRef.getId(), null, 200);
|
response = getSingle(NodesEntityResource.class, user1, contentNodeRef.getId(), null, 200);
|
||||||
Document documentResp = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
|
Document documentResp = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
|
||||||
|
String content_Id = documentResp.getId();
|
||||||
|
|
||||||
// Expected result ...
|
// Expected result ...
|
||||||
UserInfo expectedUser = new UserInfo(user1, user1+" "+user1);
|
UserInfo expectedUser = new UserInfo(user1, user1+" "+user1);
|
||||||
|
|
||||||
Document d1 = new Document();
|
Document d1 = new Document();
|
||||||
d1.setId(documentResp.getId());
|
d1.setId(content_Id);
|
||||||
d1.setParentId(folderB_Id);
|
d1.setParentId(folderB_Id);
|
||||||
d1.setName(contentName);
|
d1.setName(contentName);
|
||||||
d1.setNodeType("cm:content");
|
d1.setNodeType("cm:content");
|
||||||
ContentInfo ci = new ContentInfo();
|
ContentInfo ci = new ContentInfo();
|
||||||
|
|
||||||
// TODO fix me !!
|
// TODO fix me !! (is this an issue with repoService.createDocument ?)
|
||||||
//ci.setMimeType("text/plain");
|
//ci.setMimeType("text/plain");
|
||||||
//ci.setMimeTypeName("Plain Text");
|
//ci.setMimeTypeName("Plain Text");
|
||||||
ci.setMimeType("application/octet-stream");
|
ci.setMimeType("application/octet-stream");
|
||||||
@@ -637,6 +653,28 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
d1.setPath(expectedPath);
|
d1.setPath(expectedPath);
|
||||||
|
|
||||||
d1.expected(documentResp);
|
d1.expected(documentResp);
|
||||||
|
|
||||||
|
// get node info via relativePath
|
||||||
|
|
||||||
|
params = Collections.singletonMap("relativePath", "/"+folderA+"/"+folderB);
|
||||||
|
response = getSingle(NodesEntityResource.class, user1, Nodes.PATH_MY, params, 200);
|
||||||
|
Folder folderResp = jacksonUtil.parseEntry(response.getJsonResponse(), Folder.class);
|
||||||
|
assertEquals(folderB_Id, folderResp.getId());
|
||||||
|
|
||||||
|
params = Collections.singletonMap("relativePath", folderA+"/"+folderB+"/"+contentName);
|
||||||
|
response = getSingle(NodesEntityResource.class, user1, Nodes.PATH_MY, params, 200);
|
||||||
|
documentResp = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
|
||||||
|
assertEquals(content_Id, documentResp.getId());
|
||||||
|
|
||||||
|
// -ve test - get info for unknown node should return 404
|
||||||
|
getSingle(NodesEntityResource.class, user1, UUID.randomUUID().toString(), null, 404);
|
||||||
|
|
||||||
|
// -ve test - user2 tries to get node info about user1's home folder
|
||||||
|
AuthenticationUtil.setFullyAuthenticatedUser(user2);
|
||||||
|
getSingle(NodesEntityResource.class, user2, myFilesNodeId, null, 403);
|
||||||
|
|
||||||
|
params = Collections.singletonMap("relativePath", folderA+"/unknown");
|
||||||
|
getSingle(NodesEntityResource.class, user1, Nodes.PATH_MY, params, 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user