diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index 5e8913befb..7a9777937f 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -426,6 +426,7 @@ + diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java index c94320cf3c..e94d1a1ae2 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java @@ -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); 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 b2f9ae0421..6f95143ed5 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 @@ -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 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; } /** diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/RecordsManagementSecurityServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/RecordsManagementSecurityServiceImpl.java index 43cf909c56..c2f5767c16 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/RecordsManagementSecurityServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/RecordsManagementSecurityServiceImpl.java @@ -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 properties = new HashMap(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 properties = new HashMap(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; }