Merged HEAD (5.2) to 5.2.N (5.2.1)

126484 jkaabimofrad: Merged FILE-FOLDER-API (5.2.0) to HEAD (5.2)
      122595 jvonka: Nodes (FileFolder) API - add "permanent" option to delete node (to optionally bypass archive/trashcan)
      RA-837, RA-642


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@126828 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Ancuta Morarasu
2016-05-11 11:42:04 +00:00
parent c5dcb1659f
commit 8a9bbe855b
4 changed files with 63 additions and 14 deletions

View File

@@ -103,8 +103,10 @@ public interface Nodes
* Delete the given node. Note: will cascade delete for a folder.
*
* @param nodeId String id of node (folder or document)
* @param parameters the {@link Parameters} object to get the parameters passed into the request
* - permanent (default false)
*/
void deleteNode(String nodeId);
void deleteNode(String nodeId, Parameters parameters);
/**
* Create node - folder or (empty) file.

View File

@@ -144,6 +144,7 @@ public class NodesImpl implements Nodes
private final static String PARAM_RELATIVE_PATH = "relativePath";
private final static String PARAM_AUTO_RENAME = "autoRename";
private final static String PARAM_PERMANENT = "permanent";
private final static String PARAM_SELECT_PROPERTIES = "properties";
private final static String PARAM_SELECT_PATH = "path";
@@ -1134,9 +1135,19 @@ public class NodesImpl implements Nodes
}
@Override
public void deleteNode(String nodeId)
public void deleteNode(String nodeId, Parameters parameters)
{
NodeRef nodeRef = validateNode(nodeId);
// default false (if not provided)
boolean permanentDelete = Boolean.valueOf(parameters.getParameter(PARAM_PERMANENT));
if (permanentDelete == true)
{
// Set as temporary to delete node instead of archiving.
nodeService.addAspect(nodeRef, ContentModel.ASPECT_TEMPORARY, null);
}
fileFolderService.delete(nodeRef);
}

View File

@@ -127,7 +127,7 @@ public class NodesEntityResource implements
@WebApiDescription(title = "Delete Node", description="Delete the file or folder with id 'nodeId'. Folder will cascade delete")
public void delete(String nodeId, Parameters parameters)
{
nodes.deleteNode(nodeId);
nodes.deleteNode(nodeId, parameters);
}
@Operation("copy")

View File

@@ -26,10 +26,13 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import junit.framework.Assert;
import org.alfresco.model.ContentModel;
import org.alfresco.model.ForumModel;
import org.alfresco.repo.content.ContentLimitProvider.SimpleFixedLimitProvider;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.node.archive.NodeArchiveService;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.rest.api.Nodes;
@@ -58,6 +61,7 @@ import org.alfresco.rest.api.tests.util.MultiPartBuilder.MultiPartRequest;
import org.alfresco.rest.api.tests.util.RestApiUtil;
import org.alfresco.rest.framework.jacksonextensions.JacksonHelper;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
@@ -123,6 +127,9 @@ public class NodeApiTest extends AbstractBaseApiTest
protected JacksonUtil jacksonUtil;
protected PermissionService permissionService;
protected NodeArchiveService nodeArchiveService;
protected NodeService nodeService;
@Before
public void setup() throws Exception
@@ -132,6 +139,10 @@ public class NodeApiTest extends AbstractBaseApiTest
jacksonUtil = new JacksonUtil(applicationContext.getBean("jsonHelper", JacksonHelper.class));
permissionService = applicationContext.getBean("permissionService", PermissionService.class);
// TODO replace with future V1 REST API for Trashcan
nodeArchiveService = applicationContext.getBean("nodeArchiveService", NodeArchiveService.class);
nodeService = applicationContext.getBean("nodeService", NodeService.class);
user1 = createUser("user1" + System.currentTimeMillis());
user2 = createUser("user2" + System.currentTimeMillis());
// We just need to clean the on-premise-users,
@@ -1010,32 +1021,49 @@ public class NodeApiTest extends AbstractBaseApiTest
{
AuthenticationUtil.setFullyAuthenticatedUser(user1);
long runId = System.currentTimeMillis();
String myNodeId = getMyNodeId(user1);
NodeRef myFilesNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, myNodeId);
String content1 = "content" + System.currentTimeMillis() + "_1";
NodeRef content1Ref = repoService.createDocument(myFilesNodeRef, content1, "The quick brown fox jumps over the lazy dog.");
NodeRef content1Ref = repoService.createDocument(myFilesNodeRef,
"content" + runId + "_1", "The quick brown fox jumps over the lazy dog.");
String content1Id = content1Ref.getId();
// delete file
delete("nodes", user1, content1Ref.getId(), 204);
assertTrue(existsArchiveNode(content1Id));
// -ve test
delete("nodes", user1, content1Ref.getId(), 404);
String folder1 = "folder" + System.currentTimeMillis() + "_1";
String folder1Ref = createFolder(user1, myNodeId, folder1).getId();
String folder1Id = createFolder(user1, myNodeId, "folder " + runId + "_1").getId();
String folder2Id = createFolder(user1, folder1Id, "folder " + runId + "_2").getId();
String folder2 = "folder" + System.currentTimeMillis() + "_2";
String folder2Ref = createFolder(user1, folder1Ref, folder2).getId();
String content2 = "content" + System.currentTimeMillis() + "_2";
NodeRef content2Ref = repoService.createDocument(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folder2Ref), content2, "The quick brown fox jumps over the lazy dog.");
NodeRef content2Ref = repoService.createDocument(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folder2Id),
"content " + runId + "_2", "The quick brown fox jumps over the lazy dog.");
String content2Id = content2Ref.getId();
// cascade delete folder
delete("nodes", user1, folder1Ref, 204);
delete("nodes", user1, folder1Id, 204);
assertTrue(existsArchiveNode(folder1Id));
assertTrue(existsArchiveNode(folder2Id));
assertTrue(existsArchiveNode(content2Id));
String folder3Id = createFolder(user1, myNodeId, "folder " + runId + "_3").getId();
String folder4Id = createFolder(user1, folder3Id, "folder " + runId + "_4").getId();
// bypass trashcan
Map<String, String> params = Collections.singletonMap("permanent", "true");
delete("nodes", user1, folder3Id, params, 204);
assertFalse(existsArchiveNode(folder3Id));
assertFalse(existsArchiveNode(folder4Id));
// -ve test
delete("nodes", user1, folder2Ref, 404);
delete("nodes", user1, folder2Id, 404);
delete("nodes", user1, content2Ref.getId(), 404);
// -ve test
@@ -1043,6 +1071,14 @@ public class NodeApiTest extends AbstractBaseApiTest
delete("nodes", user1, rootNodeId, 403);
}
private boolean existsArchiveNode(String nodeId)
{
// TODO replace with calls to future V1 REST API for Trashcan
NodeRef originalNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId);
NodeRef archiveNodeRef = nodeArchiveService.getArchivedNode(originalNodeRef);
return nodeService.exists(archiveNodeRef);
}
/**
* Tests move (file or folder)
* <p>POST:</p>