mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-10-01 14:41:46 +00:00
[feature/MNT-24127-EndpointToCalculateFolderSize] Updated endpoints flow to calculate and retrieve folder size details
This commit is contained in:
@@ -61,7 +61,7 @@ public class SizeDetailsImpl implements SizeDetails
|
|||||||
private NodeService nodeService;
|
private NodeService nodeService;
|
||||||
private PermissionService permissionService;
|
private PermissionService permissionService;
|
||||||
private ActionService actionService;
|
private ActionService actionService;
|
||||||
private SimpleCache<Serializable,Object> simpleCache;
|
private SimpleCache<Serializable,Map<String, Object>> simpleCache;
|
||||||
private int defaultItems;
|
private int defaultItems;
|
||||||
|
|
||||||
public void setNodes(Nodes nodes)
|
public void setNodes(Nodes nodes)
|
||||||
@@ -84,7 +84,7 @@ public class SizeDetailsImpl implements SizeDetails
|
|||||||
this.actionService = actionService;
|
this.actionService = actionService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSimpleCache(SimpleCache<Serializable, Object> simpleCache)
|
public void setSimpleCache(SimpleCache<Serializable, Map<String, Object>> simpleCache)
|
||||||
{
|
{
|
||||||
this.simpleCache = simpleCache;
|
this.simpleCache = simpleCache;
|
||||||
}
|
}
|
||||||
@@ -117,13 +117,13 @@ public class SizeDetailsImpl implements SizeDetails
|
|||||||
}
|
}
|
||||||
|
|
||||||
LOG.debug("Executing NodeSizeActionExecuter from calculateNodeSize method");
|
LOG.debug("Executing NodeSizeActionExecuter from calculateNodeSize method");
|
||||||
return executorResultToSizeDetails((Map<String, Object>)simpleCache.get(nodeRef.getId()));
|
return executorResultToSizeDetails(simpleCache.get(nodeRef.getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executing Action Asynchronously.
|
* Executing Action Asynchronously.
|
||||||
*/
|
*/
|
||||||
private void executeAction(NodeRef nodeRef, int defaultItems, SimpleCache<Serializable, Object> simpleCache)
|
private void executeAction(NodeRef nodeRef, int defaultItems, SimpleCache<Serializable, Map<String, Object>> simpleCache)
|
||||||
{
|
{
|
||||||
Map<String, Object > currentStatus = new HashMap<>();
|
Map<String, Object > currentStatus = new HashMap<>();
|
||||||
currentStatus.put(STATUS,IN_PROGRESS);
|
currentStatus.put(STATUS,IN_PROGRESS);
|
||||||
|
@@ -40,6 +40,7 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
@@ -63,7 +64,7 @@ public class SizeDetailsImplTest extends AbstractBaseApiTest
|
|||||||
NodeService nodeService = mock(NodeService.class);
|
NodeService nodeService = mock(NodeService.class);
|
||||||
PermissionService permissionService = mock(PermissionService.class);
|
PermissionService permissionService = mock(PermissionService.class);
|
||||||
ActionService actionService = mock(ActionService.class);
|
ActionService actionService = mock(ActionService.class);
|
||||||
SimpleCache<Serializable, Object> simpleCache = mock(SimpleCache.class);
|
SimpleCache<Serializable, Map<String, Object>> simpleCache = mock(SimpleCache.class);
|
||||||
|
|
||||||
sizeDetailsImpl.setNodes(nodes);
|
sizeDetailsImpl.setNodes(nodes);
|
||||||
sizeDetailsImpl.setNodeService(nodeService);
|
sizeDetailsImpl.setNodeService(nodeService);
|
||||||
@@ -82,7 +83,6 @@ public class SizeDetailsImplTest extends AbstractBaseApiTest
|
|||||||
String fileName = "content.txt";
|
String fileName = "content.txt";
|
||||||
String folder0Name = "f0-testParentFolder-"+RUNID;
|
String folder0Name = "f0-testParentFolder-"+RUNID;
|
||||||
String parentFolder = createFolder(tDocLibNodeId, folder0Name,null).getId();
|
String parentFolder = createFolder(tDocLibNodeId, folder0Name,null).getId();
|
||||||
NodeRef nodeRef = new NodeRef("protocol", "identifier", parentFolder);
|
|
||||||
|
|
||||||
Document d1 = new Document();
|
Document d1 = new Document();
|
||||||
d1.setIsFolder(false);
|
d1.setIsFolder(false);
|
||||||
@@ -93,7 +93,6 @@ public class SizeDetailsImplTest extends AbstractBaseApiTest
|
|||||||
d1.setCreatedByUser(userInfo);
|
d1.setCreatedByUser(userInfo);
|
||||||
d1.setModifiedByUser(userInfo);
|
d1.setModifiedByUser(userInfo);
|
||||||
|
|
||||||
when(nodes.validateNode(parentFolder)).thenReturn(nodeRef);
|
|
||||||
NodeSizeDetails nodeSizeDetails = sizeDetailsImpl.calculateNodeSize(parentFolder);
|
NodeSizeDetails nodeSizeDetails = sizeDetailsImpl.calculateNodeSize(parentFolder);
|
||||||
assertNull("After executing POST/request-size-details first time, it will provide null with 202 status code",nodeSizeDetails);
|
assertNull("After executing POST/request-size-details first time, it will provide null with 202 status code",nodeSizeDetails);
|
||||||
}
|
}
|
||||||
|
@@ -34,6 +34,9 @@ import org.alfresco.rest.api.tests.client.data.Document;
|
|||||||
import org.alfresco.rest.api.tests.client.data.Node;
|
import org.alfresco.rest.api.tests.client.data.Node;
|
||||||
import org.alfresco.rest.api.tests.client.data.UserInfo;
|
import org.alfresco.rest.api.tests.client.data.UserInfo;
|
||||||
import org.alfresco.rest.api.tests.util.RestApiUtil;
|
import org.alfresco.rest.api.tests.util.RestApiUtil;
|
||||||
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
|
import org.alfresco.service.cmr.repository.StoreRef;
|
||||||
|
import org.alfresco.service.cmr.security.PermissionService;
|
||||||
import org.alfresco.service.cmr.site.SiteVisibility;
|
import org.alfresco.service.cmr.site.SiteVisibility;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -44,6 +47,7 @@ import org.junit.runners.JUnit4;
|
|||||||
import org.junit.runners.MethodSorters;
|
import org.junit.runners.MethodSorters;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -52,9 +56,7 @@ import java.util.Map;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static org.alfresco.rest.api.tests.util.RestApiUtil.toJsonAsStringNonNull;
|
import static org.alfresco.rest.api.tests.util.RestApiUtil.toJsonAsStringNonNull;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.*;
|
||||||
import static org.junit.Assert.assertNotNull;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* V1 REST API tests for calculating and retrieving Folder size.
|
* V1 REST API tests for calculating and retrieving Folder size.
|
||||||
@@ -67,6 +69,9 @@ public class NodeSizeDetailsTest extends AbstractBaseApiTest
|
|||||||
|
|
||||||
private Site userOneN1Site;
|
private Site userOneN1Site;
|
||||||
private String folderId;
|
private String folderId;
|
||||||
|
private ApplicationContext applicationContext;
|
||||||
|
|
||||||
|
private PermissionService permissionService;
|
||||||
|
|
||||||
// Method to create content info
|
// Method to create content info
|
||||||
private ContentInfo createContentInfo()
|
private ContentInfo createContentInfo()
|
||||||
@@ -107,6 +112,7 @@ public class NodeSizeDetailsTest extends AbstractBaseApiTest
|
|||||||
// Create a folder within the site document's library.
|
// Create a folder within the site document's library.
|
||||||
String folderName = "folder" + System.currentTimeMillis();
|
String folderName = "folder" + System.currentTimeMillis();
|
||||||
folderId = addToDocumentLibrary(userOneN1Site, folderName, TYPE_CM_FOLDER);
|
folderId = addToDocumentLibrary(userOneN1Site, folderName, TYPE_CM_FOLDER);
|
||||||
|
permissionService = applicationContext.getBean("permissionService", PermissionService.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -124,15 +130,7 @@ public class NodeSizeDetailsTest extends AbstractBaseApiTest
|
|||||||
// Perform POST request
|
// Perform POST request
|
||||||
HttpResponse postResponse = post(getCalculateFolderSizeUrl(folderId), toJsonAsStringNonNull(params), 202);
|
HttpResponse postResponse = post(getCalculateFolderSizeUrl(folderId), toJsonAsStringNonNull(params), 202);
|
||||||
|
|
||||||
// Validate response and parsed document
|
assertNull("After executing POST/request-size-details first time, it will provide null with 202 status code",postResponse.getJsonResponse());
|
||||||
assertNotNull("Response should not be null", postResponse);
|
|
||||||
|
|
||||||
String jsonResponse = String.valueOf(postResponse.getJsonResponse());
|
|
||||||
assertNotNull("JSON response should not be null", jsonResponse);
|
|
||||||
|
|
||||||
// Parse JSON response
|
|
||||||
Object document = RestApiUtil.parseRestApiEntry(postResponse.getJsonResponse(), Object.class);
|
|
||||||
assertNotNull("Parsed document should not be null", document);
|
|
||||||
|
|
||||||
HttpResponse getResponse = post(getCalculateFolderSizeUrl(folderId), toJsonAsStringNonNull(params), 200);
|
HttpResponse getResponse = post(getCalculateFolderSizeUrl(folderId), toJsonAsStringNonNull(params), 200);
|
||||||
|
|
||||||
@@ -181,15 +179,7 @@ public class NodeSizeDetailsTest extends AbstractBaseApiTest
|
|||||||
// Perform POST request
|
// Perform POST request
|
||||||
HttpResponse postResponse = post(getCalculateFolderSizeUrl(parentFolder), toJsonAsStringNonNull(params), 202);
|
HttpResponse postResponse = post(getCalculateFolderSizeUrl(parentFolder), toJsonAsStringNonNull(params), 202);
|
||||||
|
|
||||||
// Validate response and parsed document
|
assertNull("After executing POST/request-size-details first time, it will provide null with 202 status code",postResponse.getJsonResponse());
|
||||||
assertNotNull("Response should not be null", postResponse);
|
|
||||||
|
|
||||||
String jsonResponse = String.valueOf(postResponse.getJsonResponse());
|
|
||||||
assertNotNull("JSON response should not be null", jsonResponse);
|
|
||||||
|
|
||||||
// Parse JSON response
|
|
||||||
Object document = RestApiUtil.parseRestApiEntry(postResponse.getJsonResponse(), Object.class);
|
|
||||||
assertNotNull("Parsed document should not be null", document);
|
|
||||||
|
|
||||||
HttpResponse getResponse = post(getCalculateFolderSizeUrl(parentFolder), toJsonAsStringNonNull(params), 200);
|
HttpResponse getResponse = post(getCalculateFolderSizeUrl(parentFolder), toJsonAsStringNonNull(params), 200);
|
||||||
|
|
||||||
@@ -209,26 +199,32 @@ public class NodeSizeDetailsTest extends AbstractBaseApiTest
|
|||||||
@Test
|
@Test
|
||||||
public void testHTTPStatus() throws Exception
|
public void testHTTPStatus() throws Exception
|
||||||
{
|
{
|
||||||
|
// Prepare parameters
|
||||||
|
Map<String, String> params = new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
setRequestContext(null);
|
setRequestContext(null);
|
||||||
delete(getCalculateFolderSizeUrl(folderId), folderId, null, 401);
|
delete(getCalculateFolderSizeUrl(folderId), folderId, null, 401);
|
||||||
|
|
||||||
setRequestContext(user1);
|
setRequestContext(user1);
|
||||||
NodeTarget tgt = new NodeTarget();
|
NodeRef folderIdRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folderId);
|
||||||
tgt.setTargetParentId(folderId);
|
params.put("nodeId", folderIdRef.getId());
|
||||||
HttpResponse response = post(getCalculateFolderSizeUrl(UUID.randomUUID().toString()), toJsonAsStringNonNull(tgt), null, 404);
|
params.put("maxItems", "1000");
|
||||||
|
permissionService.setPermission(folderIdRef, user1, PermissionService.ASPECTS, true);
|
||||||
|
HttpResponse response = post(getCalculateFolderSizeUrl(folderIdRef.getId()), toJsonAsStringNonNull(params), null, 403);
|
||||||
assertNotNull(response);
|
assertNotNull(response);
|
||||||
|
|
||||||
// Create a folder within the site document's library.
|
// Create a folder within the site document's library.
|
||||||
String folderName = "nestedFolder" + System.currentTimeMillis();
|
String folderName = "nestedFolder" + System.currentTimeMillis();
|
||||||
String nestedFolderId = addToDocumentLibrary(userOneN1Site, folderName, TYPE_CM_CONTENT);
|
String nestedFolderId = addToDocumentLibrary(userOneN1Site, folderName, TYPE_CM_CONTENT);
|
||||||
// Prepare parameters
|
|
||||||
Map<String, String> params = new HashMap<>();
|
params = new HashMap<>();
|
||||||
params.put("nodeId", nestedFolderId);
|
params.put("nodeId", folderIdRef.getId());
|
||||||
params.put("maxItems", "100");
|
params.put("maxItems", "1000");
|
||||||
|
|
||||||
// Perform POST request
|
// Perform POST request
|
||||||
response = post(getCalculateFolderSizeUrl(nestedFolderId), toJsonAsStringNonNull(params), 422);
|
HttpResponse responseForInvalidNode = post(getCalculateFolderSizeUrl(nestedFolderId), toJsonAsStringNonNull(params), 422);
|
||||||
assertNotNull(response);
|
assertNotNull(responseForInvalidNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
|
@@ -67,7 +67,7 @@ public class NodeSizeDetailsActionExecutor extends ActionExecuterAbstractBase
|
|||||||
private static final String FIELD_FACET = "content.size";
|
private static final String FIELD_FACET = "content.size";
|
||||||
private static final String FACET_QUERY = "content.size:[0 TO "+Integer.MAX_VALUE+"] \"label\": \"large\",\"group\":\"Size\"";
|
private static final String FACET_QUERY = "content.size:[0 TO "+Integer.MAX_VALUE+"] \"label\": \"large\",\"group\":\"Size\"";
|
||||||
private SearchService searchService;
|
private SearchService searchService;
|
||||||
private SimpleCache<Serializable,Object> simpleCache;
|
private SimpleCache<Serializable, Map<String, Object>> simpleCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the search service
|
* Set the search service
|
||||||
@@ -84,7 +84,7 @@ public class NodeSizeDetailsActionExecutor extends ActionExecuterAbstractBase
|
|||||||
*
|
*
|
||||||
* @param simpleCache the cache service
|
* @param simpleCache the cache service
|
||||||
*/
|
*/
|
||||||
public void setSimpleCache(SimpleCache<Serializable, Object> simpleCache)
|
public void setSimpleCache(SimpleCache<Serializable, Map<String, Object>> simpleCache)
|
||||||
{
|
{
|
||||||
this.simpleCache = simpleCache;
|
this.simpleCache = simpleCache;
|
||||||
}
|
}
|
||||||
|
@@ -65,7 +65,7 @@ public class NodeSizeDetailsActionExecutorTest extends BaseSpringTest
|
|||||||
*
|
*
|
||||||
* @param simpleCache the cache service
|
* @param simpleCache the cache service
|
||||||
*/
|
*/
|
||||||
private SimpleCache<Serializable,Object> simpleCache;
|
private SimpleCache<Serializable, Map<String,Object>> simpleCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called at the begining of all tests.
|
* Called at the begining of all tests.
|
||||||
@@ -95,7 +95,7 @@ public class NodeSizeDetailsActionExecutorTest extends BaseSpringTest
|
|||||||
// Get the executer instance.
|
// Get the executer instance.
|
||||||
this.executer = (NodeSizeDetailsActionExecutor)this.applicationContext.getBean(NodeSizeDetailsActionExecutor.NAME);
|
this.executer = (NodeSizeDetailsActionExecutor)this.applicationContext.getBean(NodeSizeDetailsActionExecutor.NAME);
|
||||||
|
|
||||||
simpleCache = (SimpleCache<Serializable, Object>) this.applicationContext.getBean("folderSizeSharedCache");
|
simpleCache = (SimpleCache<Serializable, Map<String,Object>>) this.applicationContext.getBean("folderSizeSharedCache");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user