diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImpl.java index 001ec25192..222eb8e500 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImpl.java @@ -28,6 +28,7 @@ import java.util.Map; import java.util.Set; import org.alfresco.model.ContentModel; +import org.alfresco.model.QuickShareModel; import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationServiceException.InvalidNode; import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationServiceException.LevelIdNotFound; import org.alfresco.module.org_alfresco_module_rm.classification.model.ClassifiedContentModel; @@ -98,6 +99,10 @@ public class ContentClassificationServiceImpl extends ServiceBaseImpl implements throw new UnsupportedOperationException( "The content has already been classified. Reclassification is currently not supported."); } + if (nodeService.hasAspect(content, QuickShareModel.ASPECT_QSHARE)) + { + throw new IllegalStateException("A shared content cannot be classified."); + } if (!securityClearanceService.isCurrentUserClearedForClassification(classificationLevelId)) { throw new LevelIdNotFound(classificationLevelId); diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImplUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImplUnitTest.java index 4823ebfe4c..6aa36b1c2c 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImplUnitTest.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ContentClassificationServiceImplUnitTest.java @@ -18,6 +18,7 @@ */ package org.alfresco.module.org_alfresco_module_rm.classification; +import static com.google.common.collect.Sets.newHashSet; import static org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock.generateNodeRef; import static org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock.generateText; import static org.junit.Assert.assertEquals; @@ -38,7 +39,9 @@ import java.util.Set; import com.google.common.collect.ImmutableList; import com.google.common.collect.Sets; + import org.alfresco.model.ContentModel; +import org.alfresco.model.QuickShareModel; import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationServiceException.InvalidNode; import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationServiceException.LevelIdNotFound; import org.alfresco.module.org_alfresco_module_rm.classification.model.ClassifiedContentModel; @@ -142,6 +145,18 @@ public class ContentClassificationServiceImplUnitTest implements ClassifiedConte Sets.newHashSet("reasonId1", "reasonId2"), classifiedContent); } + /** Classify a piece of content that has already been shared */ + @Test(expected = IllegalStateException.class) + public void classifySharedContent() + { + NodeRef sharedContent = generateNodeRef(mockNodeService); + when(mockDictionaryService.isSubClass(mockNodeService.getType(sharedContent), ContentModel.TYPE_CONTENT)).thenReturn(true); + when(mockNodeService.hasAspect(sharedContent, QuickShareModel.ASPECT_QSHARE)).thenReturn(true); + + // Call the method under test. + contentClassificationServiceImpl.classifyContent(generateText(), generateText(), newHashSet(generateText(), generateText()), sharedContent); + } + /** * Check that a user can't classify content with a level that either (a) doesn't exist, or (b) they don't have * clearance for. (Both cases are covered by the same flow through the code).