Fix issue with inaccurate results returning from content URL query

* added integration test for MNT scenarios
* checked for nodeId's that don't exist in query results
* changed DAO method to return set of node references rather tha nodeId strings
* turned off logging by default
This commit is contained in:
Roy Wetherall
2019-08-29 12:28:04 +10:00
parent 4518cd8615
commit e282c0584e
6 changed files with 51 additions and 45 deletions

View File

@@ -57,5 +57,4 @@ log4j.logger.org.alfresco.module.org_alfresco_module_rm.patch=info
# #
#log4j.logger.org.alfresco.module.org_alfresco_module_rm.job=debug #log4j.logger.org.alfresco.module.org_alfresco_module_rm.job=debug
log4j.logger.org.alfresco.repo.web.scripts.roles.DynamicAuthoritiesGet=info log4j.logger.org.alfresco.repo.web.scripts.roles.DynamicAuthoritiesGet=info
log4j.logger.org.alfresco.module.org_alfresco_module_rm.query.RecordsManagementQueryDAOImpl=info
log4j.logger.org.alfresco.module.org_alfresco_module_rm.query.RecordsManagementQueryDAOImpl=debug

View File

@@ -64,7 +64,7 @@ public interface RecordsManagementQueryDAO
/** /**
* @param contentUrl the URL of the content url entity * @param contentUrl the URL of the content url entity
* @return Return a set of UUIDs which reference the given node * @return Set<NodeRef> a set of nodes that reference the given content url
*/ */
Set<String> getNodeRefsWhichReferenceContentUrl(String contentUrl); Set<NodeRef> getNodeRefsWhichReferenceContentUrl(String contentUrl);
} }

View File

@@ -34,7 +34,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.domain.contentdata.ContentUrlEntity; import org.alfresco.repo.domain.contentdata.ContentUrlEntity;
import org.alfresco.repo.domain.node.NodeDAO; import org.alfresco.repo.domain.node.NodeDAO;
@@ -160,10 +159,10 @@ public class RecordsManagementQueryDAOImpl implements RecordsManagementQueryDAO,
* Get a set of node reference which reference the provided content URL * Get a set of node reference which reference the provided content URL
* *
* @param String contentUrl content URL * @param String contentUrl content URL
* @return Set<String> set of node references as strings * @return Set<NodeRef> set of nodes that reference the provided content URL
*/ */
@Override @Override
public Set<String> getNodeRefsWhichReferenceContentUrl(String contentUrl) public Set<NodeRef> getNodeRefsWhichReferenceContentUrl(String contentUrl)
{ {
if (logger.isDebugEnabled()) if (logger.isDebugEnabled())
{ {
@@ -192,12 +191,14 @@ public class RecordsManagementQueryDAOImpl implements RecordsManagementQueryDAO,
} }
// create a set of uuids which reference the content url // create a set of uuids which reference the content url
Set<String> nodesReferencingContentUrl = new HashSet<>(); Set<NodeRef> nodesReferencingContentUrl = new HashSet<NodeRef>(nodeIds.size());
for(Long nodeId : nodeIds) for(Long nodeId : nodeIds)
{ {
StringBuilder logMessage = null; StringBuilder logMessage = null;
String uuidToAdd; NodeRef nodeRefToAdd;
if (nodeDAO.exists(nodeId))
{
if (logger.isDebugEnabled()) if (logger.isDebugEnabled())
{ {
logMessage = new StringBuilder("Adding uuid "); logMessage = new StringBuilder("Adding uuid ");
@@ -207,32 +208,39 @@ public class RecordsManagementQueryDAOImpl implements RecordsManagementQueryDAO,
NodeRef version2FrozenNodeRef = (NodeRef) nodeDAO.getNodeProperty(nodeId, Version2Model.PROP_QNAME_FROZEN_NODE_REF); NodeRef version2FrozenNodeRef = (NodeRef) nodeDAO.getNodeProperty(nodeId, Version2Model.PROP_QNAME_FROZEN_NODE_REF);
if (version2FrozenNodeRef != null) if (version2FrozenNodeRef != null)
{ {
uuidToAdd = version2FrozenNodeRef.getId(); nodeRefToAdd = version2FrozenNodeRef;
if (logger.isDebugEnabled()) if (logger.isDebugEnabled())
{ {
logMessage.append(uuidToAdd).append(" (from version)"); logMessage.append(nodeRefToAdd).append(" (from version)");
} }
} }
// add the uuid for the node ref of the referencing node // add the uuid for the node ref of the referencing node
else else
{ {
uuidToAdd = (String) nodeDAO.getNodeProperty(nodeId, ContentModel.PROP_NODE_UUID); nodeRefToAdd = nodeDAO.getNodeIdStatus(nodeId).getNodeRef();
if (logger.isDebugEnabled()) if (logger.isDebugEnabled())
{ {
logMessage.append(uuidToAdd); logMessage.append(nodeRefToAdd);
} }
} }
nodesReferencingContentUrl.add(uuidToAdd); nodesReferencingContentUrl.add(nodeRefToAdd);
if (logger.isDebugEnabled()) if (logger.isDebugEnabled())
{ {
logger.debug(logMessage.toString()); logger.debug(logMessage.toString());
} }
} }
else
{
if (logger.isDebugEnabled())
{
logger.debug("Not adding " + nodeId + " (exist==false)");
}
}
}
return nodesReferencingContentUrl; return nodesReferencingContentUrl;
} }

View File

@@ -96,7 +96,7 @@ public class ContentBinDuplicationUtility extends ServiceBaseImpl
boolean hasAtLeastOneOtherReference = false; boolean hasAtLeastOneOtherReference = false;
String contentUrl = contentService.getReader(nodeRef, ContentModel.PROP_CONTENT).getContentUrl(); String contentUrl = contentService.getReader(nodeRef, ContentModel.PROP_CONTENT).getContentUrl();
Set<String> referencesToContentNode = recordsManagementQueryDAO.getNodeRefsWhichReferenceContentUrl(contentUrl); Set<NodeRef> referencesToContentNode = recordsManagementQueryDAO.getNodeRefsWhichReferenceContentUrl(contentUrl);
if (referencesToContentNode.size() > 1) if (referencesToContentNode.size() > 1)
{ {
hasAtLeastOneOtherReference = true; hasAtLeastOneOtherReference = true;

View File

@@ -54,7 +54,6 @@ import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderServi
import org.alfresco.module.org_alfresco_module_rm.relationship.RelationshipService; import org.alfresco.module.org_alfresco_module_rm.relationship.RelationshipService;
import org.alfresco.module.org_alfresco_module_rm.report.ReportService; import org.alfresco.module.org_alfresco_module_rm.report.ReportService;
import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService;
import org.alfresco.module.org_alfresco_module_rm.role.Role;
import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearchService; import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearchService;
import org.alfresco.module.org_alfresco_module_rm.security.ExtendedSecurityService; import org.alfresco.module.org_alfresco_module_rm.security.ExtendedSecurityService;
import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionService; import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionService;

View File

@@ -116,8 +116,8 @@ public class ContentBinDuplicationUtilityUnitTest
@Test @Test
public void testHasAtLeastOneOtherReference() public void testHasAtLeastOneOtherReference()
{ {
Set<String> multipleReferences = new HashSet<>(); Set<NodeRef> multipleReferences = new HashSet<>();
Collections.addAll(multipleReferences, NODE_REF.getId(), NODE_REF2.getId()); Collections.addAll(multipleReferences, NODE_REF, NODE_REF2);
when(contentService.getReader(NODE_REF, ContentModel.PROP_CONTENT)).thenReturn(contentReader); when(contentService.getReader(NODE_REF, ContentModel.PROP_CONTENT)).thenReturn(contentReader);
when(contentService.getReader(NODE_REF, ContentModel.PROP_CONTENT).getContentUrl()).thenReturn(CONTENT_URL); when(contentService.getReader(NODE_REF, ContentModel.PROP_CONTENT).getContentUrl()).thenReturn(CONTENT_URL);
@@ -132,7 +132,7 @@ public class ContentBinDuplicationUtilityUnitTest
@Test @Test
public void testHasNoOtherReference() public void testHasNoOtherReference()
{ {
Set<String> singleReference = Collections.singleton(NODE_REF.getId()); Set<NodeRef> singleReference = Collections.singleton(NODE_REF);
when(contentService.getReader(NODE_REF, ContentModel.PROP_CONTENT)).thenReturn(contentReader); when(contentService.getReader(NODE_REF, ContentModel.PROP_CONTENT)).thenReturn(contentReader);
when(contentService.getReader(NODE_REF, ContentModel.PROP_CONTENT).getContentUrl()).thenReturn(CONTENT_URL); when(contentService.getReader(NODE_REF, ContentModel.PROP_CONTENT).getContentUrl()).thenReturn(CONTENT_URL);
@@ -147,7 +147,7 @@ public class ContentBinDuplicationUtilityUnitTest
@Test @Test
public void testHasNoReferences() public void testHasNoReferences()
{ {
Set<String> noReferences = Collections.<String> emptySet(); Set<NodeRef> noReferences = Collections.<NodeRef> emptySet();
when(contentService.getReader(NODE_REF, ContentModel.PROP_CONTENT)).thenReturn(contentReader); when(contentService.getReader(NODE_REF, ContentModel.PROP_CONTENT)).thenReturn(contentReader);
when(contentService.getReader(NODE_REF, ContentModel.PROP_CONTENT).getContentUrl()).thenReturn(CONTENT_URL); when(contentService.getReader(NODE_REF, ContentModel.PROP_CONTENT).getContentUrl()).thenReturn(CONTENT_URL);