mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-10-01 14:41:46 +00:00
[feature/MNT-24127-EndpointToCalculateFolderSize] Addressing review comments related to calculate and retrieve folder size details
This commit is contained in:
@@ -25,7 +25,7 @@
|
||||
*/
|
||||
package org.alfresco.rest.api;
|
||||
|
||||
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
|
||||
import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
|
||||
|
||||
public interface SizeDetails
|
||||
{
|
||||
|
@@ -25,13 +25,10 @@
|
||||
*/
|
||||
package org.alfresco.rest.api.impl;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.cache.SimpleCache;
|
||||
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsService;
|
||||
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
|
||||
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails.STATUS;
|
||||
import org.alfresco.repo.node.sizedetails.NodeSizeDetailsService;
|
||||
import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
|
||||
import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails.STATUS;
|
||||
import org.alfresco.rest.api.Nodes;
|
||||
import org.alfresco.rest.api.SizeDetails;
|
||||
import org.alfresco.rest.framework.core.exceptions.InvalidNodeTypeException;
|
||||
@@ -45,7 +42,6 @@ public class SizeDetailsImpl implements SizeDetails, InitializingBean
|
||||
{
|
||||
private Nodes nodes;
|
||||
private NodeRef nodeRef;
|
||||
private SimpleCache<Serializable, NodeSizeDetails> simpleCache;
|
||||
private NodeSizeDetailsService nodeSizeDetailsService;
|
||||
|
||||
public void setNodes(Nodes nodes)
|
||||
@@ -67,13 +63,13 @@ public class SizeDetailsImpl implements SizeDetails, InitializingBean
|
||||
nodeRef = nodes.validateOrLookupNode(nodeId);
|
||||
validateType(nodeRef);
|
||||
String actionId;
|
||||
if (!simpleCache.contains(nodeId))
|
||||
if (!nodeSizeDetailsService.checkSizeDetailsExist(nodeId))
|
||||
{
|
||||
actionId = executeSizeDetails();
|
||||
}
|
||||
else
|
||||
{
|
||||
NodeSizeDetails nodeSizeDetails = simpleCache.get(nodeId);
|
||||
NodeSizeDetails nodeSizeDetails = nodeSizeDetailsService.getSizeDetailsFromCache(nodeId);
|
||||
actionId = nodeSizeDetails.getJobId();
|
||||
}
|
||||
return new NodeSizeDetails(null, null, actionId, null);
|
||||
@@ -88,14 +84,14 @@ public class SizeDetailsImpl implements SizeDetails, InitializingBean
|
||||
NodeRef nodeRef = nodes.validateOrLookupNode(nodeId);
|
||||
validateType(nodeRef);
|
||||
|
||||
if (!simpleCache.contains(nodeId))
|
||||
if (!nodeSizeDetailsService.checkSizeDetailsExist(nodeId))
|
||||
{
|
||||
NodeSizeDetails nodeSizeDetails = new NodeSizeDetails(nodeId, null, null, STATUS.NOT_INITIATED);
|
||||
return nodeSizeDetails;
|
||||
}
|
||||
else
|
||||
{
|
||||
NodeSizeDetails nodeSizeDetails = simpleCache.get(nodeId);
|
||||
NodeSizeDetails nodeSizeDetails = nodeSizeDetailsService.getSizeDetailsFromCache(nodeId);
|
||||
String cachedJobId = nodeSizeDetails.getJobId();
|
||||
if (cachedJobId != null && !jobId.equalsIgnoreCase(cachedJobId))
|
||||
{
|
||||
@@ -103,7 +99,7 @@ public class SizeDetailsImpl implements SizeDetails, InitializingBean
|
||||
}
|
||||
}
|
||||
|
||||
return simpleCache.get(nodeId);
|
||||
return nodeSizeDetailsService.getSizeDetailsFromCache(nodeId);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -114,7 +110,7 @@ public class SizeDetailsImpl implements SizeDetails, InitializingBean
|
||||
String jobId = GUID.generate();
|
||||
nodeSizeDetailsService.invokeSizeDetailsExecutor(nodeRef, jobId);
|
||||
NodeSizeDetails nodeSizeDetails = new NodeSizeDetails(nodeRef.getId(), null, jobId, STATUS.PENDING);
|
||||
simpleCache.put(nodeRef.getId(), nodeSizeDetails);
|
||||
nodeSizeDetailsService.putSizeDetailsInCache(nodeRef.getId(), nodeSizeDetails);
|
||||
return jobId;
|
||||
}
|
||||
|
||||
@@ -131,7 +127,6 @@ public class SizeDetailsImpl implements SizeDetails, InitializingBean
|
||||
{
|
||||
ParameterCheck.mandatory("nodes", this.nodes);
|
||||
ParameterCheck.mandatory("nodeSizeDetailsServiceImpl", this.nodeSizeDetailsService);
|
||||
this.simpleCache = nodeSizeDetailsService.getSimpleCache();
|
||||
}
|
||||
|
||||
}
|
@@ -28,7 +28,7 @@ package org.alfresco.rest.api.nodes;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
|
||||
import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
|
||||
import org.alfresco.rest.api.SizeDetails;
|
||||
import org.alfresco.rest.framework.WebApiDescription;
|
||||
import org.alfresco.rest.framework.WebApiParam;
|
||||
|
@@ -35,8 +35,8 @@ import java.util.concurrent.ThreadPoolExecutor;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.cache.SimpleCache;
|
||||
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl;
|
||||
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
|
||||
import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl;
|
||||
import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
|
||||
import org.alfresco.rest.api.Nodes;
|
||||
import org.alfresco.rest.api.model.Node;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
@@ -54,6 +54,8 @@ public class SizeDetailsImplTest
|
||||
private static final QName TYPE_FOLDER = QName.createQName(NAMESPACE, "folder");
|
||||
private SizeDetailsImpl sizeDetailsImpl;
|
||||
private Nodes nodes;
|
||||
private NodeSizeDetailsServiceImpl nodeSizeDetailsServiceImpl;
|
||||
private NodeSizeDetails nodeSizeDetails;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception
|
||||
@@ -61,19 +63,18 @@ public class SizeDetailsImplTest
|
||||
sizeDetailsImpl = new SizeDetailsImpl();
|
||||
nodes = mock(Nodes.class);
|
||||
SearchService searchService = mock(SearchService.class);
|
||||
NodeSizeDetailsServiceImpl nodeSizeDetailsServiceImpl = mock(NodeSizeDetailsServiceImpl.class);
|
||||
nodeSizeDetailsServiceImpl = mock(NodeSizeDetailsServiceImpl.class);
|
||||
ThreadPoolExecutor threadPoolExecutor = mock(ThreadPoolExecutor.class);
|
||||
SimpleCache<Serializable, NodeSizeDetails> simpleCache = mock(SimpleCache.class);
|
||||
nodeSizeDetails = mock(NodeSizeDetails.class);
|
||||
|
||||
nodeSizeDetailsServiceImpl.setSearchService(searchService);
|
||||
nodeSizeDetailsServiceImpl.setDefaultItems(1000);
|
||||
nodeSizeDetailsServiceImpl.setSimpleCache(simpleCache);
|
||||
verify(nodeSizeDetailsServiceImpl).setSimpleCache(simpleCache);
|
||||
nodeSizeDetailsServiceImpl.setThreadPoolExecutor(threadPoolExecutor);
|
||||
sizeDetailsImpl.setNodes(nodes);
|
||||
sizeDetailsImpl.setNodeSizeDetailsService(nodeSizeDetailsServiceImpl);
|
||||
when(nodeSizeDetailsServiceImpl.getSimpleCache()).thenReturn(simpleCache);
|
||||
sizeDetailsImpl.afterPropertiesSet();
|
||||
verify(nodeSizeDetailsServiceImpl).setSimpleCache(simpleCache);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -93,6 +94,7 @@ public class SizeDetailsImplTest
|
||||
|
||||
when(nodes.validateOrLookupNode(nodeId)).thenReturn(nodeRef);
|
||||
when(nodes.isSubClass(nodeRef, ContentModel.TYPE_FOLDER, false)).thenReturn(true);
|
||||
when(nodeSizeDetailsServiceImpl.getSizeDetailsFromCache(nodeId)).thenReturn(nodeSizeDetails);
|
||||
|
||||
NodeSizeDetails requestSizeDetails = sizeDetailsImpl.generateNodeSizeDetailsRequest(nodeId);
|
||||
assertNotNull("After executing POST/size-details, it will provide with 202 status code", requestSizeDetails);
|
||||
|
@@ -34,7 +34,7 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
|
||||
import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
|
||||
import org.alfresco.rest.api.Nodes;
|
||||
import org.alfresco.rest.api.model.Site;
|
||||
import org.alfresco.rest.api.tests.client.HttpResponse;
|
||||
|
@@ -23,18 +23,19 @@
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.node.sizeDetails;
|
||||
package org.alfresco.repo.node.sizedetails;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import org.alfresco.repo.cache.SimpleCache;
|
||||
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
|
||||
import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
|
||||
public interface NodeSizeDetailsService
|
||||
{
|
||||
void invokeSizeDetailsExecutor(NodeRef nodeRef, String jobId);
|
||||
|
||||
SimpleCache<Serializable, NodeSizeDetails> getSimpleCache();
|
||||
void putSizeDetailsInCache(String id, NodeSizeDetails NodeSizeDetails);
|
||||
|
||||
NodeSizeDetails getSizeDetailsFromCache(String id);
|
||||
|
||||
boolean checkSizeDetailsExist(String id);
|
||||
|
||||
}
|
@@ -23,7 +23,7 @@
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.node.sizeDetails;
|
||||
package org.alfresco.repo.node.sizedetails;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
@@ -32,7 +32,7 @@ import java.util.Objects;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
|
||||
import org.alfresco.repo.cache.SimpleCache;
|
||||
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails.STATUS;
|
||||
import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails.STATUS;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
@@ -70,9 +70,15 @@ public class NodeSizeDetailsServiceImpl implements NodeSizeDetailsService, Initi
|
||||
}
|
||||
|
||||
@Override
|
||||
public SimpleCache<Serializable, NodeSizeDetails> getSimpleCache()
|
||||
public NodeSizeDetails getSizeDetailsFromCache(String id)
|
||||
{
|
||||
return simpleCache;
|
||||
return simpleCache.get(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSizeDetailsExist(String id)
|
||||
{
|
||||
return simpleCache.contains(id);
|
||||
}
|
||||
|
||||
public void setSimpleCache(SimpleCache<Serializable, NodeSizeDetails> simpleCache)
|
||||
@@ -109,6 +115,12 @@ public class NodeSizeDetailsServiceImpl implements NodeSizeDetailsService, Initi
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putSizeDetailsInCache(String id, NodeSizeDetails nodeSizeDetails)
|
||||
{
|
||||
simpleCache.put(id, nodeSizeDetails);
|
||||
}
|
||||
|
||||
private void executeSizeCalculation(NodeRef nodeRef, String jobId)
|
||||
{
|
||||
RetryingTransactionCallback<NodeSizeDetails> executionCallback = () -> {
|
||||
@@ -126,7 +138,7 @@ public class NodeSizeDetailsServiceImpl implements NodeSizeDetailsService, Initi
|
||||
|
||||
threadPoolExecutor.execute(() -> {
|
||||
NodeSizeDetails nodeSizeDetails = new NodeSizeDetails(nodeRef.getId(), null, jobId, STATUS.IN_PROGRESS);
|
||||
simpleCache.put(nodeRef.getId(), nodeSizeDetails);
|
||||
putSizeDetailsInCache(nodeRef.getId(), nodeSizeDetails);
|
||||
|
||||
try
|
||||
{
|
||||
@@ -141,7 +153,7 @@ public class NodeSizeDetailsServiceImpl implements NodeSizeDetailsService, Initi
|
||||
}
|
||||
finally
|
||||
{
|
||||
simpleCache.put(nodeRef.getId(), nodeSizeDetails);
|
||||
putSizeDetailsInCache(nodeRef.getId(), nodeSizeDetails);
|
||||
AuthenticationUtil.clearCurrentSecurityContext();
|
||||
}
|
||||
});
|
@@ -344,7 +344,7 @@
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="NodeSizeDetailsServiceImpl" class="org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl">
|
||||
<bean id="NodeSizeDetailsServiceImpl" class="org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl">
|
||||
<property name="searchService" ref="SearchService"/>
|
||||
<property name="simpleCache" ref="folderSizeSharedCache" />
|
||||
<property name="transactionService" ref="transactionService"/>
|
||||
@@ -360,7 +360,7 @@
|
||||
</property>
|
||||
<property name="proxyInterfaces">
|
||||
<list>
|
||||
<value>org.alfresco.repo.node.sizeDetails.NodeSizeDetailsService</value>
|
||||
<value>org.alfresco.repo.node.sizedetails.NodeSizeDetailsService</value>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
Reference in New Issue
Block a user