Merge branch 'feature-2.5/RM-4861_AddBehaviours' into 'release/V2.5'

Feature 2.5/rm 4861 add behaviours

See merge request !63
This commit is contained in:
Tom Page
2017-02-15 11:19:29 +00:00
2 changed files with 121 additions and 30 deletions

View File

@@ -59,7 +59,8 @@ import org.alfresco.service.namespace.QName;
)
public class RecordCategoryType extends BaseBehaviourBean
implements NodeServicePolicies.OnCreateChildAssociationPolicy,
NodeServicePolicies.OnCreateNodePolicy
NodeServicePolicies.OnCreateNodePolicy,
NodeServicePolicies.OnMoveNodePolicy
{
/** vital record service */
protected VitalRecordService vitalRecordService;
@@ -178,13 +179,14 @@ public class RecordCategoryType extends BaseBehaviourBean
@Override
public Void doWork()
{
checkParentType(childAssocRef);
// setup record category permissions
filePlanPermissionService.setupRecordCategoryPermissions(childAssocRef.getChildRef());
return null;
}
});
}
/**
@@ -213,4 +215,40 @@ public class RecordCategoryType extends BaseBehaviourBean
}
};
}
/** Record category move behaviour. {@inheritDoc} */
@Override
@Behaviour
(
kind = BehaviourKind.CLASS,
notificationFrequency = NotificationFrequency.FIRST_EVENT
)
public void onMoveNode(ChildAssociationRef oldChildAssocRef, ChildAssociationRef newChildAssocRef)
{
checkParentType(newChildAssocRef);
}
/**
* Check the parent of a record category. The parent must be a file plan or another category.
*
* @param childAssocRef The parent-child association.
* @throws UnsupportedOperationException If the parent type is invalid.
*/
private void checkParentType(final ChildAssociationRef childAssocRef)
{
// execute behaviour code as system user
AuthenticationUtil.runAsSystem(new RunAsWork<Void>()
{
@Override
public Void doWork()
{
// Check the parent is either a file plan or a category.
if (!isFilePlan(childAssocRef.getParentRef()) && !isRecordCategory(childAssocRef.getParentRef()))
{
throw new AlfrescoRuntimeException("Operation failed: Record categories must go under file plans or categories.");
}
return null;
}
});
}
}

View File

@@ -64,6 +64,7 @@ import org.springframework.extensions.surf.util.I18NUtil;
)
public class RecordFolderType extends AbstractDisposableItem
implements NodeServicePolicies.OnMoveNodePolicy,
NodeServicePolicies.OnCreateNodePolicy,
NodeServicePolicies.OnCreateChildAssociationPolicy
{
/** record service */
@@ -115,40 +116,36 @@ public class RecordFolderType extends AbstractDisposableItem
)
public void onMoveNode(ChildAssociationRef oldChildAssocRef, ChildAssociationRef newChildAssocRef)
{
if (!nodeService.getType(newChildAssocRef.getParentRef()).equals(TYPE_RECORD_FOLDER))
checkParentType(newChildAssocRef);
if (!oldChildAssocRef.getParentRef().equals(newChildAssocRef.getParentRef()))
{
if (!oldChildAssocRef.getParentRef().equals(newChildAssocRef.getParentRef()))
final NodeRef newNodeRef = newChildAssocRef.getChildRef();
AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Object>()
{
final NodeRef newNodeRef = newChildAssocRef.getChildRef();
AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Object>()
@Override
public Object doWork()
{
public Object doWork()
// clean record folder
cleanDisposableItem(nodeService, newNodeRef);
// re-initialise the record folder
recordFolderService.setupRecordFolder(newNodeRef);
// sort out the child records
for (NodeRef record : recordService.getRecords(newNodeRef))
{
// clean record folder
cleanDisposableItem(nodeService, newNodeRef);
// clean record
cleanDisposableItem(nodeService, record);
// re-initialise the record folder
recordFolderService.setupRecordFolder(newNodeRef);
// sort out the child records
for (NodeRef record : recordService.getRecords(newNodeRef))
{
// clean record
cleanDisposableItem(nodeService, record);
// Re-initiate the records in the new folder.
recordService.file(record);
}
return null;
// Re-initiate the records in the new folder.
recordService.file(record);
}
}, AuthenticationUtil.getSystemUserName());
}
}
else
{
throw new UnsupportedOperationException("Cannot move record folder into another record folder.");
return null;
}
}, AuthenticationUtil.getSystemUserName());
}
}
@@ -270,4 +267,60 @@ public class RecordFolderType extends AbstractDisposableItem
behaviourFilter.enableBehaviour();
}
}
/** {@inheritDoc}} */
@Override
@Behaviour
(
kind = BehaviourKind.CLASS,
notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT
)
public void onCreateNode(final ChildAssociationRef childAssocRef)
{
checkParentType(childAssocRef);
}
/**
* Check the parent of a record folder. The primary parent must be a category and a secondary parent may be a hold or a transfer.
*
* @param childAssocRef The parent-child association.
* @throws UnsupportedOperationException If the parent type is invalid.
*/
private void checkParentType(final ChildAssociationRef childAssocRef)
{
// execute behaviour code as system user
AuthenticationUtil.runAsSystem(new RunAsWork<Void>()
{
@Override
public Void doWork()
{
if (nodeService.getType(childAssocRef.getParentRef()).equals(TYPE_RECORD_FOLDER))
{
// Return slightly more helpful exception in this case.
throw new UnsupportedOperationException("Cannot move record folder into another record folder.");
}
else if (childAssocRef.isPrimary())
{
// Check the primary parent is a category.
if (!isRecordCategory(childAssocRef.getParentRef()))
{
throw new UnsupportedOperationException(
"Operation failed: Record folders must go under categories, not "
+ nodeService.getType(childAssocRef.getParentRef()));
}
}
else
{
// Check the secondary parent is a hold or transfer.
if (!isHold(childAssocRef.getParentRef()) && !isTransfer(childAssocRef.getParentRef()))
{
throw new UnsupportedOperationException(
"Operation failed: Record folders can only have secondary parents of holds or transfers, not "
+ nodeService.getType(childAssocRef.getParentRef()));
}
}
return null;
}
});
}
}