From 8c9416b7395554b873c697db2dcb13e9cf1bd72a Mon Sep 17 00:00:00 2001 From: Jan Vonka Date: Mon, 22 May 2017 12:17:09 +0000 Subject: [PATCH] REPO-2257 - Service Pack: MNT-17661: Copy action copies thumbnail modification data - fix ThumbnailService to use "do nothing" copy behaviour for "cm:thumbnailModification" aspect - add embedded unit test git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@136840 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/thumbnail/ThumbnailServiceImpl.java | 20 ++++++++++++ .../thumbnail/ThumbnailServiceImplTest.java | 32 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/source/java/org/alfresco/repo/thumbnail/ThumbnailServiceImpl.java b/source/java/org/alfresco/repo/thumbnail/ThumbnailServiceImpl.java index 6912659012..ae14544e0e 100644 --- a/source/java/org/alfresco/repo/thumbnail/ThumbnailServiceImpl.java +++ b/source/java/org/alfresco/repo/thumbnail/ThumbnailServiceImpl.java @@ -39,6 +39,10 @@ import org.alfresco.model.ContentModel; import org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerOptions; import org.alfresco.repo.content.transform.magick.ImageTransformationOptions; import org.alfresco.repo.content.transform.swf.SWFTransformationOptions; +import org.alfresco.repo.copy.CopyBehaviourCallback; +import org.alfresco.repo.copy.CopyDetails; +import org.alfresco.repo.copy.CopyServicePolicies; +import org.alfresco.repo.copy.DoNothingCopyBehaviourCallback; import org.alfresco.repo.node.NodeServicePolicies; import org.alfresco.repo.policy.Behaviour; import org.alfresco.repo.policy.BehaviourFilter; @@ -213,6 +217,12 @@ public class ThumbnailServiceImpl implements ThumbnailService, ContentModel.TYPE_THUMBNAIL, new JavaBehaviour(this, "onDeleteNode", Behaviour.NotificationFrequency.EVERY_EVENT)); + // Register copy class behaviour + this.policyComponent.bindClassBehaviour( + CopyServicePolicies.OnCopyNodePolicy.QNAME, + ContentModel.ASPECT_THUMBNAIL_MODIFICATION, + new JavaBehaviour(this, "getCopyCallback")); + transactionListener = new ThumbnailTransactionListenerAdapter(); } @@ -928,4 +938,14 @@ public class ThumbnailServiceImpl implements ThumbnailService, }, AuthenticationUtil.getSystemUserName()); } } + + /** + * See init - eg. registers "do nothing" copy behaviour for "cm:thumbnailModification" aspect + * + * @return Returns {@link DoNothingCopyBehaviourCallback} + */ + public CopyBehaviourCallback getCopyCallback(QName classRef, CopyDetails copyDetails) + { + return DoNothingCopyBehaviourCallback.getInstance(); + } } diff --git a/source/test-java/org/alfresco/repo/thumbnail/ThumbnailServiceImplTest.java b/source/test-java/org/alfresco/repo/thumbnail/ThumbnailServiceImplTest.java index 81597edb55..b256ca9013 100644 --- a/source/test-java/org/alfresco/repo/thumbnail/ThumbnailServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/thumbnail/ThumbnailServiceImplTest.java @@ -65,6 +65,7 @@ import org.alfresco.service.cmr.repository.ContentIOException; import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentServiceTransientException; import org.alfresco.service.cmr.repository.ContentWriter; +import org.alfresco.service.cmr.repository.CopyService; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.PagedSourceOptions; @@ -117,6 +118,7 @@ public class ThumbnailServiceImplTest extends BaseAlfrescoSpringTest private Repository repositoryHelper; private PermissionService permissionService; private LockService lockService; + private CopyService copyService; private NodeRef folder; private static final String TEST_FAILING_MIME_TYPE = "application/vnd.alfresco.test.transientfailure"; @@ -146,6 +148,7 @@ public class ThumbnailServiceImplTest extends BaseAlfrescoSpringTest this.repositoryHelper = (Repository) this.applicationContext.getBean("repositoryHelper"); this.permissionService = (PermissionService) applicationContext.getBean("PermissionService"); this.lockService = (LockService) applicationContext.getBean("lockService"); + this.copyService = (CopyService) applicationContext.getBean("CopyService"); // Create a folder and some content Map folderProps = new HashMap(1); @@ -679,6 +682,35 @@ public class ThumbnailServiceImplTest extends BaseAlfrescoSpringTest assertFalse("Property 'Last thumbnail modification data' has not changed", lastThumbnailDataV1.equals(lastThumbnailDataV2)); } + /** + * See REPO-2257, MNT-17661 + */ + public void testLastThumbnailModificationDataContentCopy() throws Exception + { + final NodeRef pdfOrig = createOriginalContent(this.folder, MimetypeMap.MIMETYPE_PDF); + QName qname = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "doclib"); + + ThumbnailDefinition details = thumbnailService.getThumbnailRegistry().getThumbnailDefinition(qname.getLocalName()); + NodeRef thumbnail = this.thumbnailService.createThumbnail(pdfOrig, ContentModel.PROP_CONTENT, MimetypeMap.MIMETYPE_IMAGE_JPEG, + details.getTransformationOptions(), "doclib"); + assertNotNull(thumbnail); + + setComplete(); + endTransaction(); + + Thread.sleep(1000); + + // Get initial value of property "Last thumbnail modification data" + ListlastThumbnailData = (List)this.secureNodeService.getProperty(pdfOrig, ContentModel.PROP_LAST_THUMBNAIL_MODIFICATION_DATA); + assertNotNull(lastThumbnailData); + assertEquals(1, lastThumbnailData.size()); + assertTrue(lastThumbnailData.get(0).contains("doclib:")); + + final NodeRef pdfCopy = copyService.copy(pdfOrig, this.folder, ContentModel.ASSOC_CONTAINS, QName.createQName("copyOfOriginal")); + List lastThumbnailDataCopy = (List)this.secureNodeService.getProperty(pdfCopy, ContentModel.PROP_LAST_THUMBNAIL_MODIFICATION_DATA); + assertNull(lastThumbnailDataCopy); + } + /** * See REPO-1580, MNT-17113 (and related) */