diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
index 5165a872f7..0cb33f1651 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
@@ -138,6 +138,7 @@
+
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordAspect.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordAspect.java
index d4181fe8ed..b464dfd9d3 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordAspect.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordAspect.java
@@ -33,6 +33,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.RecordsManagementPolicies;
import org.alfresco.module.org_alfresco_module_rm.model.behaviour.AbstractDisposableItem;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
@@ -48,7 +49,9 @@ import org.alfresco.repo.policy.Behaviour.NotificationFrequency;
import org.alfresco.repo.policy.annotation.Behaviour;
import org.alfresco.repo.policy.annotation.BehaviourBean;
import org.alfresco.repo.policy.annotation.BehaviourKind;
+import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
+import org.alfresco.service.cmr.quickshare.QuickShareService;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.ContentData;
import org.alfresco.service.cmr.repository.NodeRef;
@@ -68,6 +71,7 @@ import org.springframework.extensions.surf.util.I18NUtil;
)
public class RecordAspect extends AbstractDisposableItem
implements NodeServicePolicies.OnCreateChildAssociationPolicy,
+ NodeServicePolicies.BeforeAddAspectPolicy,
RecordsManagementPolicies.OnCreateReference,
RecordsManagementPolicies.OnRemoveReference,
NodeServicePolicies.OnMoveNodePolicy,
@@ -87,6 +91,9 @@ public class RecordAspect extends AbstractDisposableItem
/** record service */
protected RecordService recordService;
+ /** quickShare service */
+ private QuickShareService quickShareService;
+
/** I18N */
private static final String MSG_CANNOT_UPDATE_RECORD_CONTENT = "rm.service.update-record-content";
@@ -114,6 +121,15 @@ public class RecordAspect extends AbstractDisposableItem
this.recordService = recordService;
}
+ /**
+ *
+ * @param quickShareService
+ */
+ public void setQuickShareService(QuickShareService quickShareService)
+ {
+ this.quickShareService = quickShareService;
+ }
+
/**
* Behaviour to ensure renditions have the appropriate extended security.
*
@@ -169,7 +185,7 @@ public class RecordAspect extends AbstractDisposableItem
// Deal with versioned records
if (reference.equals(CUSTOM_REF_VERSIONS))
{
- // run as system, to apply the versioned aspect to the from node
+ // run as system, to apply the versioned aspect to the from node
// as we can't be sure if the user has add aspect rights
authenticationUtil.runAsSystem(new RunAsWork()
{
@@ -318,7 +334,7 @@ public class RecordAspect extends AbstractDisposableItem
/**
* On copy complete behaviour for record aspect.
- *
+ *
* @param classRef
* @param sourceNodeRef
* @param targetNodeRef
@@ -330,9 +346,9 @@ public class RecordAspect extends AbstractDisposableItem
(
kind = BehaviourKind.CLASS
)
- public void onCopyComplete(QName classRef,
- NodeRef sourceNodeRef,
- NodeRef targetNodeRef,
+ public void onCopyComplete(QName classRef,
+ NodeRef sourceNodeRef,
+ NodeRef targetNodeRef,
boolean copyToNewNode,
Map copyMap)
{
@@ -342,7 +358,7 @@ public class RecordAspect extends AbstractDisposableItem
{
// then remove any extended security from the newly copied record
extendedSecurityService.remove(targetNodeRef);
- }
+ }
}
@Override
@@ -359,4 +375,30 @@ public class RecordAspect extends AbstractDisposableItem
throw new IntegrityException(I18NUtil.getMessage(MSG_CANNOT_UPDATE_RECORD_CONTENT), null);
}
}
+
+ /**
+ * Behaviour to remove the shared link before declare a record
+ *
+ * @see org.alfresco.repo.node.NodeServicePolicies.BeforeAddAspectPolicy#beforeAddAspect(org.alfresco.service.cmr.repository.NodeRef,
+ * org.alfresco.service.namespace.QName)
+ */
+ @Override
+ @Behaviour(kind = BehaviourKind.CLASS, notificationFrequency = NotificationFrequency.FIRST_EVENT)
+ public void beforeAddAspect(final NodeRef nodeRef, final QName aspectTypeQName)
+ {
+ AuthenticationUtil.runAs(new RunAsWork()
+ {
+ @Override
+ public Void doWork()
+ {
+ String sharedId = (String) nodeService.getProperty(nodeRef, QuickShareModel.PROP_QSHARE_SHAREDID);
+ if (sharedId != null)
+ {
+ quickShareService.unshareContent(sharedId);
+ }
+
+ return null;
+ }
+ }, AuthenticationUtil.getSystemUserName());
+ }
}
diff --git a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/record/CreateInplaceRecordTest.java b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/record/CreateInplaceRecordTest.java
index e5f5137695..d8b3a918ba 100644
--- a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/record/CreateInplaceRecordTest.java
+++ b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/record/CreateInplaceRecordTest.java
@@ -27,12 +27,14 @@
package org.alfresco.module.org_alfresco_module_rm.test.integration.record;
+import org.alfresco.model.QuickShareModel;
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.service.cmr.model.FileExistsException;
import org.alfresco.service.cmr.model.FileNotFoundException;
+import org.alfresco.service.cmr.quickshare.QuickShareService;
import org.alfresco.service.cmr.security.AccessStatus;
/**
@@ -42,12 +44,25 @@ import org.alfresco.service.cmr.security.AccessStatus;
*/
public class CreateInplaceRecordTest extends BaseRMTestCase
{
+ private QuickShareService quickShareService;
+
@Override
protected boolean isCollaborationSiteTest()
{
return true;
}
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase#initServices()
+ */
+ @Override
+ protected void initServices()
+ {
+ super.initServices();
+
+ quickShareService = (QuickShareService) applicationContext.getBean("quickShareService");
+ }
+
/**
* Given a document in a collaboration site
* When the document is declared by a site collaborator
@@ -185,4 +200,49 @@ public class CreateInplaceRecordTest extends BaseRMTestCase
}
});
}
+
+ /**
+ * Given a shared document in a collaboration site
+ * When the document is declared as record by a site collaborator
+ * Then the document becomes a record and is not shared anymore
+ */
+ public void testCreateInplaceRecordFromCollabSiteRemovesSharedLink()
+ {
+ doBehaviourDrivenTest(new BehaviourDrivenTest()
+ {
+ public void given()
+ {
+ // Check that the document is not a record
+ assertFalse("The document should not be a record", recordService.isRecord(dmDocument));
+
+ quickShareService.shareContent(dmDocument);
+ // Check the document is shared
+ assertTrue("The document is shared", nodeService.hasAspect(dmDocument, QuickShareModel.ASPECT_QSHARE));
+ }
+
+ public void when()
+ {
+ // Declare the document as a record
+ AuthenticationUtil.runAs(new RunAsWork()
+ {
+ public Void doWork() throws Exception
+ {
+ // Declare record
+ recordService.createRecord(filePlan, dmDocument);
+
+ return null;
+ }
+ }, dmCollaborator);
+ }
+
+ public void then()
+ {
+ // Check that the document is a record now
+ assertTrue("The document should now be a record", recordService.isRecord(dmDocument));
+
+ // Check that the record is not shared anymore
+ assertFalse("The document should not be shared anymore", nodeService.hasAspect(dmDocument, QuickShareModel.ASPECT_QSHARE));
+ }
+ });
+ }
}