RM: Fixes to creation of unfiled record

* should prevent duplicates being created
  * need to refactor creation into a service (possibly a file plan service)



git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@44523 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Roy Wetherall
2012-12-10 07:39:45 +00:00
parent e7e9b635bf
commit 63643222ca
4 changed files with 61 additions and 24 deletions

View File

@@ -146,10 +146,13 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC
// Unfiled container node reference
NodeRef unfiledRecordContainer = recordService.getUnfiledContainer(filePlan);
rmNodeValues.put("unfiledRecordContainer", unfiledRecordContainer.toString());
rmNodeValues.put("properties", propertiesToJSON(unfiledRecordContainer, useShortQName));
QName type = fileFolderService.getFileInfo(unfiledRecordContainer).getType();
rmNodeValues.put("type", useShortQName ? type.toPrefixString(namespaceService) : type.toString());
if (unfiledRecordContainer != null)
{
rmNodeValues.put("unfiledRecordContainer", unfiledRecordContainer.toString());
rmNodeValues.put("properties", propertiesToJSON(unfiledRecordContainer, useShortQName));
QName type = fileFolderService.getFileInfo(unfiledRecordContainer).getType();
rmNodeValues.put("type", useShortQName ? type.toPrefixString(namespaceService) : type.toString());
}
// Set the indicators array
setIndicators(rmNodeValues, nodeRef);

View File

@@ -210,13 +210,27 @@ public class RecordServiceImpl implements RecordService, RecordsManagementModel
public NodeRef getUnfiledContainer(NodeRef filePlan)
{
ParameterCheck.mandatory("filePlan", filePlan);
if (recordsManagementService.isFilePlan(filePlan) == false)
{
throw new AlfrescoRuntimeException("Unable to get the unfiled container, because passed node is not a file plan.");
}
NodeRef result = null;
List<ChildAssociationRef> assocs = nodeService.getChildAssocs(filePlan, ASSOC_UNFILED_RECORDS,
RegexQNamePattern.MATCH_ALL);
if (assocs.size() != 1) { throw new AlfrescoRuntimeException(
"Error getting the unfiled container, because the container cannot be indentified."); }
return assocs.get(0).getChildRef();
if (assocs.size() > 1)
{
throw new AlfrescoRuntimeException(
"Unable to get the unfiled container, because the container cannot be indentified.");
}
else if (assocs.size() == 1 )
{
result = assocs.get(0).getChildRef();
}
return result;
}
/**

View File

@@ -37,6 +37,7 @@ import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService;
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.module.org_alfresco_module_rm.model.security.ModelSecurityService;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.policy.JavaBehaviour;
import org.alfresco.repo.policy.PolicyComponent;
@@ -86,6 +87,9 @@ public class RecordsManagementSecurityServiceImpl implements RecordsManagementSe
/** Model security service */
private ModelSecurityService modelSecurityService;
/** Record service */
private RecordService recordService;
/** Node service */
private NodeService nodeService;
@@ -148,6 +152,16 @@ public class RecordsManagementSecurityServiceImpl implements RecordsManagementSe
{
this.recordsManagementService = recordsManagementService;
}
/**
* Set record service
*
* @param recordService record service
*/
public void setRecordService(RecordService recordService)
{
this.recordService = recordService;
}
/**
* Set the node service
@@ -239,22 +253,27 @@ public class RecordsManagementSecurityServiceImpl implements RecordsManagementSe
*/
private NodeRef createUnfiledContainer(NodeRef rmRootNode, String allRoles)
{
// create the properties map
Map<QName, Serializable> properties = new HashMap<QName, Serializable>(1);
properties.put(ContentModel.PROP_NAME, NAME_UNFILED_CONTAINER);
// create the unfiled container
NodeRef container = nodeService.createNode(
rmRootNode,
ASSOC_UNFILED_RECORDS,
QName.createQName(RM_URI, NAME_UNFILED_CONTAINER),
TYPE_UNFILED_RECORD_CONTAINER,
properties).getChildRef();
// set inheritance to false
permissionService.setInheritParentPermissions(container, false);
permissionService.setPermission(container, allRoles, RMPermissionModel.READ_RECORDS, true);
permissionService.setPermission(container, ExtendedReaderDynamicAuthority.EXTENDED_READER, RMPermissionModel.READ_RECORDS, true);
NodeRef container = recordService.getUnfiledContainer(rmRootNode);
if (container == null)
{
// create the properties map
Map<QName, Serializable> properties = new HashMap<QName, Serializable>(1);
properties.put(ContentModel.PROP_NAME, NAME_UNFILED_CONTAINER);
// create the unfiled container
container = nodeService.createNode(
rmRootNode,
ASSOC_UNFILED_RECORDS,
QName.createQName(RM_URI, NAME_UNFILED_CONTAINER),
TYPE_UNFILED_RECORD_CONTAINER,
properties).getChildRef();
// set inheritance to false
permissionService.setInheritParentPermissions(container, false);
permissionService.setPermission(container, allRoles, RMPermissionModel.READ_RECORDS, true);
permissionService.setPermission(container, ExtendedReaderDynamicAuthority.EXTENDED_READER, RMPermissionModel.READ_RECORDS, true);
}
return container;
}