diff --git a/source/java/org/alfresco/repo/copy/CopyServiceImpl.java b/source/java/org/alfresco/repo/copy/CopyServiceImpl.java index 758a585019..5fda1c780a 100644 --- a/source/java/org/alfresco/repo/copy/CopyServiceImpl.java +++ b/source/java/org/alfresco/repo/copy/CopyServiceImpl.java @@ -596,7 +596,12 @@ public class CopyServiceImpl implements CopyService originalAssoc.getTargetRef(), ContentModel.ASSOC_ORIGINAL); } - internalNodeService.createAssociation(copyTarget, sourceNodeRef, ContentModel.ASSOC_ORIGINAL); + // We create the link if the source is a cm:object + QName sourceTypeQName = internalNodeService.getType(sourceNodeRef); + if (dictionaryService.isSubClass(sourceTypeQName, ContentModel.TYPE_CMOBJECT)) + { + internalNodeService.createAssociation(copyTarget, sourceNodeRef, ContentModel.ASSOC_ORIGINAL); + } // Copy permissions copyPermissions(sourceNodeRef, copyTarget); diff --git a/source/java/org/alfresco/repo/copy/CopyServiceImplTest.java b/source/java/org/alfresco/repo/copy/CopyServiceImplTest.java index ae5f1d25fa..e1714ecb79 100644 --- a/source/java/org/alfresco/repo/copy/CopyServiceImplTest.java +++ b/source/java/org/alfresco/repo/copy/CopyServiceImplTest.java @@ -619,6 +619,31 @@ public class CopyServiceImplTest extends TestCase assertNull("Original should not be present. ", originalCheck); } + /** + * Test the behaviour of the aspect when copying types not derived from cm:object + */ + public void testCopiedFromAspect_NonObject() + { + // Create the node used for copying + ChildAssociationRef childAssocRef = nodeService.createNode( + rootNodeRef, + ContentModel.ASSOC_CHILDREN, + QName.createQName("{test}test"), + ContentModel.TYPE_BASE, + createTypePropertyBag()); + NodeRef nodeRef = childAssocRef.getChildRef(); + // If we copy this, there should not be a cm:source association + NodeRef copyNodeRef = copyService.copy( + nodeRef, + rootNodeRef, + ContentModel.ASSOC_CHILDREN, + QName.createQName("{test}copyAssoc")); + + assertFalse( + "cm:copiedfrom should not be present", + nodeService.hasAspect(copyNodeRef, ContentModel.ASPECT_COPIEDFROM)); + } + public void testCopyNodeWithRules() { // Create a new rule and add it to the source noderef