assocs)
@@ -568,7 +568,7 @@ public class FreezeServiceImpl implements FreezeService,
/**
* Creates a hold using the given nodeRef and reason
- *
+ *
* @param nodeRef the nodeRef which will be frozen
* @param reason the reason why the record will be frozen
* @return NodeRef of the created hold
@@ -610,7 +610,7 @@ public class FreezeServiceImpl implements FreezeService,
* Removes a freeze from a node. The unfrozen node is automatically removed
* from the hold(s) it is in. If the hold is subsequently empty, the hold is
* automatically deleted.
- *
+ *
* @param nodeRef node reference
*/
private void removeFreeze(NodeRef nodeRef)
@@ -673,7 +673,7 @@ public class FreezeServiceImpl implements FreezeService,
/**
* Removes a freeze from a node from the given hold
- *
+ *
* @param nodeRef node reference
* @param hold hold
*/
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java
index 6430848801..8782d552af 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java
@@ -58,7 +58,7 @@ public interface RecordService
/**
* Creates a new unfiled record from an existing node.
*
- * Note that the node reference of the record will be the same as the origional
+ * Note that the node reference of the record will be the same as the original
* document.
*
* @param filePlan The filePlan in which the record should be placed
@@ -83,10 +83,17 @@ public interface RecordService
boolean isFiled(NodeRef record);
/**
- * Rejects a node with the provided reason
+ * Hides a record within a collaboration site
*
- * @param nodeRef node reference
- * @param reason reject reason
+ * @param nodeRef The record which should be hidden
+ */
+ void hideRecord(NodeRef nodeRef);
+
+ /**
+ * Rejects a record with the provided reason
+ *
+ * @param nodeRef The record which will be rejected
+ * @param reason The reason for rejection
*/
void rejectRecord(NodeRef nodeRef, String reason);
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java
index c32a35247f..9a3ea667d7 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java
@@ -445,6 +445,54 @@ public class RecordServiceImpl implements RecordService,
}
}
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#hideRecord(org.alfresco.service.cmr.repository.NodeRef)
+ */
+ @Override
+ public void hideRecord(final NodeRef nodeRef)
+ {
+ ParameterCheck.mandatory("NodeRef", nodeRef);
+
+ // first we do a sanity check to ensure that the user has at least write permissions on the record
+ if (permissionService.hasPermission(nodeRef, PermissionService.WRITE) != AccessStatus.ALLOWED)
+ {
+ throw new AccessDeniedException(
+ "Cannot hide record, because the user '"
+ + AuthenticationUtil.getRunAsUser()
+ + "' does not have write permissions on the record '"
+ + nodeRef.toString() + "'.");
+ }
+
+ // do the work of hiding the record as the system user
+ AuthenticationUtil.runAsSystem(new RunAsWork()
+ {
+ @Override
+ public Void doWork() throws Exception
+ {
+ // remove the child association
+ NodeRef originatingLocation = (NodeRef) nodeService.getProperty(nodeRef, PROP_RECORD_ORIGINATING_LOCATION);
+ List parentAssocs = nodeService.getParentAssocs(nodeRef);
+ for (ChildAssociationRef childAssociationRef : parentAssocs)
+ {
+ if (childAssociationRef.isPrimary() == false && childAssociationRef.getParentRef().equals(originatingLocation))
+ {
+ nodeService.removeChildAssociation(childAssociationRef);
+ break;
+ }
+ }
+
+ // remove the extended security from the node
+ // this prevents the users from continuing to see the record in searchs and other linked locations
+ extendedSecurityService.removeAllExtendedReaders(nodeRef);
+
+ return null;
+ }
+ });
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#rejectRecord(org.alfresco.service.cmr.repository.NodeRef, java.lang.String)
+ */
@Override
public void rejectRecord(final NodeRef nodeRef, final String reason)
{
diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/RecordServiceImplTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/RecordServiceImplTest.java
index 98e27cd485..3bbdfa4be7 100644
--- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/RecordServiceImplTest.java
+++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/RecordServiceImplTest.java
@@ -40,7 +40,7 @@ import org.alfresco.service.namespace.QName;
* Records Service Implementation Test
*
* @author Roy Wetherall
- * @author Tuna Askoy
+ * @author Tuna Aksoy
* @since 2.1
*/
public class RecordServiceImplTest extends BaseRMTestCase