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

@@ -426,6 +426,7 @@
<property name="policyComponent" ref="policyComponent"/> <property name="policyComponent" ref="policyComponent"/>
<property name="recordsManagementService" ref="RecordsManagementService"/> <property name="recordsManagementService" ref="RecordsManagementService"/>
<property name="modelSecurityService" ref="modelSecurityService" /> <property name="modelSecurityService" ref="modelSecurityService" />
<property name="recordService" ref="RecordService" />
</bean> </bean>
<bean id="RecordsManagementSecurityService" class="org.springframework.aop.framework.ProxyFactoryBean"> <bean id="RecordsManagementSecurityService" class="org.springframework.aop.framework.ProxyFactoryBean">

View File

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

View File

@@ -210,13 +210,27 @@ public class RecordServiceImpl implements RecordService, RecordsManagementModel
public NodeRef getUnfiledContainer(NodeRef filePlan) public NodeRef getUnfiledContainer(NodeRef filePlan)
{ {
ParameterCheck.mandatory("filePlan", 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, List<ChildAssociationRef> assocs = nodeService.getChildAssocs(filePlan, ASSOC_UNFILED_RECORDS,
RegexQNamePattern.MATCH_ALL); RegexQNamePattern.MATCH_ALL);
if (assocs.size() != 1) { throw new AlfrescoRuntimeException( if (assocs.size() > 1)
"Error getting the unfiled container, because the container cannot be indentified."); } {
throw new AlfrescoRuntimeException(
return assocs.get(0).getChildRef(); "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.capability.RMPermissionModel;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; 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.model.security.ModelSecurityService;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.repo.node.NodeServicePolicies; import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.policy.JavaBehaviour; import org.alfresco.repo.policy.JavaBehaviour;
import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.repo.policy.PolicyComponent;
@@ -86,6 +87,9 @@ public class RecordsManagementSecurityServiceImpl implements RecordsManagementSe
/** Model security service */ /** Model security service */
private ModelSecurityService modelSecurityService; private ModelSecurityService modelSecurityService;
/** Record service */
private RecordService recordService;
/** Node service */ /** Node service */
private NodeService nodeService; private NodeService nodeService;
@@ -148,6 +152,16 @@ public class RecordsManagementSecurityServiceImpl implements RecordsManagementSe
{ {
this.recordsManagementService = recordsManagementService; this.recordsManagementService = recordsManagementService;
} }
/**
* Set record service
*
* @param recordService record service
*/
public void setRecordService(RecordService recordService)
{
this.recordService = recordService;
}
/** /**
* Set the node service * Set the node service
@@ -239,22 +253,27 @@ public class RecordsManagementSecurityServiceImpl implements RecordsManagementSe
*/ */
private NodeRef createUnfiledContainer(NodeRef rmRootNode, String allRoles) private NodeRef createUnfiledContainer(NodeRef rmRootNode, String allRoles)
{ {
// create the properties map NodeRef container = recordService.getUnfiledContainer(rmRootNode);
Map<QName, Serializable> properties = new HashMap<QName, Serializable>(1);
properties.put(ContentModel.PROP_NAME, NAME_UNFILED_CONTAINER); if (container == null)
{
// create the unfiled container // create the properties map
NodeRef container = nodeService.createNode( Map<QName, Serializable> properties = new HashMap<QName, Serializable>(1);
rmRootNode, properties.put(ContentModel.PROP_NAME, NAME_UNFILED_CONTAINER);
ASSOC_UNFILED_RECORDS,
QName.createQName(RM_URI, NAME_UNFILED_CONTAINER), // create the unfiled container
TYPE_UNFILED_RECORD_CONTAINER, container = nodeService.createNode(
properties).getChildRef(); rmRootNode,
ASSOC_UNFILED_RECORDS,
// set inheritance to false QName.createQName(RM_URI, NAME_UNFILED_CONTAINER),
permissionService.setInheritParentPermissions(container, false); TYPE_UNFILED_RECORD_CONTAINER,
permissionService.setPermission(container, allRoles, RMPermissionModel.READ_RECORDS, true); properties).getChildRef();
permissionService.setPermission(container, ExtendedReaderDynamicAuthority.EXTENDED_READER, RMPermissionModel.READ_RECORDS, true);
// 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; return container;
} }