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.repo.web.scripts.roles.DynamicAuthoritiesGet=info
log4j.logger.org.alfresco.module.org_alfresco_module_rm.query.RecordsManagementQueryDAOImpl=debug
log4j.logger.org.alfresco.module.org_alfresco_module_rm.query.RecordsManagementQueryDAOImpl=info

View File

@@ -64,7 +64,7 @@ public interface RecordsManagementQueryDAO
/**
* @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.Set;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.domain.contentdata.ContentUrlEntity;
import org.alfresco.repo.domain.node.NodeDAO;
@@ -159,11 +158,11 @@ public class RecordsManagementQueryDAOImpl implements RecordsManagementQueryDAO,
/**
* Get a set of node reference which reference the provided content URL
*
* @param String contentUrl content URL
* @return Set<String> set of node references as strings
* @param String contentUrl content URL
* @return Set<NodeRef> set of nodes that reference the provided content URL
*/
@Override
public Set<String> getNodeRefsWhichReferenceContentUrl(String contentUrl)
public Set<NodeRef> getNodeRefsWhichReferenceContentUrl(String contentUrl)
{
if (logger.isDebugEnabled())
{
@@ -192,45 +191,54 @@ public class RecordsManagementQueryDAOImpl implements RecordsManagementQueryDAO,
}
// 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)
{
StringBuilder logMessage = null;
String uuidToAdd;
NodeRef nodeRefToAdd;
if (logger.isDebugEnabled())
if (nodeDAO.exists(nodeId))
{
logMessage = new StringBuilder("Adding uuid ");
if (logger.isDebugEnabled())
{
logMessage = new StringBuilder("Adding uuid ");
}
// if the referencing node is a version2Store reference to the content url, add the uuid for the version 2 frozen node ref
NodeRef version2FrozenNodeRef = (NodeRef) nodeDAO.getNodeProperty(nodeId, Version2Model.PROP_QNAME_FROZEN_NODE_REF);
if (version2FrozenNodeRef != null)
{
nodeRefToAdd = version2FrozenNodeRef;
if (logger.isDebugEnabled())
{
logMessage.append(nodeRefToAdd).append(" (from version)");
}
}
// add the uuid for the node ref of the referencing node
else
{
nodeRefToAdd = nodeDAO.getNodeIdStatus(nodeId).getNodeRef();
if (logger.isDebugEnabled())
{
logMessage.append(nodeRefToAdd);
}
}
nodesReferencingContentUrl.add(nodeRefToAdd);
if (logger.isDebugEnabled())
{
logger.debug(logMessage.toString());
}
}
// if the referencing node is a version2Store reference to the content url, add the uuid for the version 2 frozen node ref
NodeRef version2FrozenNodeRef = (NodeRef) nodeDAO.getNodeProperty(nodeId, Version2Model.PROP_QNAME_FROZEN_NODE_REF);
if (version2FrozenNodeRef != null)
{
uuidToAdd = version2FrozenNodeRef.getId();
if (logger.isDebugEnabled())
{
logMessage.append(uuidToAdd).append(" (from version)");
}
}
// add the uuid for the node ref of the referencing node
else
{
uuidToAdd = (String) nodeDAO.getNodeProperty(nodeId, ContentModel.PROP_NODE_UUID);
if (logger.isDebugEnabled())
{
logMessage.append(uuidToAdd);
}
}
nodesReferencingContentUrl.add(uuidToAdd);
if (logger.isDebugEnabled())
{
logger.debug(logMessage.toString());
if (logger.isDebugEnabled())
{
logger.debug("Not adding " + nodeId + " (exist==false)");
}
}
}

View File

@@ -96,7 +96,7 @@ public class ContentBinDuplicationUtility extends ServiceBaseImpl
boolean hasAtLeastOneOtherReference = false;
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)
{
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.report.ReportService;
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.security.ExtendedSecurityService;
import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionService;

View File

@@ -116,8 +116,8 @@ public class ContentBinDuplicationUtilityUnitTest
@Test
public void testHasAtLeastOneOtherReference()
{
Set<String> multipleReferences = new HashSet<>();
Collections.addAll(multipleReferences, NODE_REF.getId(), NODE_REF2.getId());
Set<NodeRef> multipleReferences = new HashSet<>();
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).getContentUrl()).thenReturn(CONTENT_URL);
@@ -132,7 +132,7 @@ public class ContentBinDuplicationUtilityUnitTest
@Test
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).getContentUrl()).thenReturn(CONTENT_URL);
@@ -147,7 +147,7 @@ public class ContentBinDuplicationUtilityUnitTest
@Test
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).getContentUrl()).thenReturn(CONTENT_URL);