diff --git a/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java b/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java index 07a9f32fb6..d7a9da588d 100644 --- a/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java +++ b/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java @@ -1569,7 +1569,7 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO { // Disable all behaviour. // This only affects cm:auditable and is discarded at the end of this txn - policyBehaviourFilter.disableAllBehaviours(); + policyBehaviourFilter.disableBehaviour(); // Tag the transaction to prevent further propagation AlfrescoTransactionSupport.bindResource(KEY_AUDITABLE_PROPAGATION_DISABLE, Boolean.TRUE); @@ -2506,16 +2506,33 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO } return results; } - - public Pair getNodeAssoc(Long assocId) + + @Override + public Pair getNodeAssocOrNull(Long assocId) { NodeAssocEntity nodeAssocEntity = selectNodeAssocById(assocId); if (nodeAssocEntity == null) + { + return null; + } + else + { + AssociationRef assocRef = nodeAssocEntity.getAssociationRef(qnameDAO); + return new Pair(assocId, assocRef); + } + } + + public Pair getNodeAssoc(Long assocId) + { + Pair ret = getNodeAssocOrNull(assocId); + if (ret == null) { throw new ConcurrencyFailureException("Assoc ID does not point to a valid association: " + assocId); } - AssociationRef assocRef = nodeAssocEntity.getAssociationRef(qnameDAO); - return new Pair(assocId, assocRef); + else + { + return ret; + } } /* diff --git a/source/java/org/alfresco/repo/domain/node/NodeDAO.java b/source/java/org/alfresco/repo/domain/node/NodeDAO.java index 39f21ee90d..23855cad45 100644 --- a/source/java/org/alfresco/repo/domain/node/NodeDAO.java +++ b/source/java/org/alfresco/repo/domain/node/NodeDAO.java @@ -328,6 +328,12 @@ public interface NodeDAO extends NodeBulkLoader */ public Collection> getTargetNodeAssocs(Long sourceNodeId, QName typeQName); + /** + * @return Returns a specific node association with the given ID + * or null if it doesn't exist + */ + public Pair getNodeAssocOrNull(Long assocId); + /** * @return Returns a specific node association with the given ID * diff --git a/source/java/org/alfresco/repo/node/NodeServiceTest.java b/source/java/org/alfresco/repo/node/NodeServiceTest.java index 32fad89f90..4ec5b13a0e 100644 --- a/source/java/org/alfresco/repo/node/NodeServiceTest.java +++ b/source/java/org/alfresco/repo/node/NodeServiceTest.java @@ -29,6 +29,7 @@ import org.alfresco.model.ContentModel; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.service.ServiceRegistry; +import org.alfresco.service.cmr.repository.AssociationRef; import org.alfresco.service.cmr.repository.MLText; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef.Status; @@ -375,4 +376,11 @@ public class NodeServiceTest extends TestCase txnIdRestore, archivedStatus.getDbTxnId()); } } + + public void testGetAssocById() + { + // Get a node association that doesn't exist + AssociationRef assocRef = nodeService.getAssoc(Long.MAX_VALUE); + assertNull("Should get null for missing ID of association. ", assocRef); + } } diff --git a/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java b/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java index be9d850ac1..653475ccdc 100644 --- a/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java +++ b/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java @@ -37,8 +37,8 @@ import org.alfresco.model.ContentModel; import org.alfresco.repo.domain.node.ChildAssocEntity; import org.alfresco.repo.domain.node.Node; import org.alfresco.repo.domain.node.NodeDAO; -import org.alfresco.repo.domain.node.NodeExistsException; import org.alfresco.repo.domain.node.NodeDAO.ChildAssocRefQueryCallback; +import org.alfresco.repo.domain.node.NodeExistsException; import org.alfresco.repo.domain.qname.QNameDAO; import org.alfresco.repo.node.AbstractNodeServiceImpl; import org.alfresco.repo.node.StoreArchiveMap; @@ -1980,9 +1980,11 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl } } + @Override public AssociationRef getAssoc(Long id) { - return nodeDAO.getNodeAssoc(id).getSecond(); + Pair nodeAssocPair = nodeDAO.getNodeAssocOrNull(id); + return nodeAssocPair == null ? null : nodeAssocPair.getSecond(); } public List getTargetAssocs(NodeRef sourceRef, QNamePattern qnamePattern)