From dd58a35e17d2e1b18bec3510e20747071c9a2485 Mon Sep 17 00:00:00 2001 From: Roy Wetherall Date: Tue, 6 May 2014 11:49:27 +0000 Subject: [PATCH] Issues found during demo prep. * a couple of checks for type wheren't doing sub-type of cm:content checks * could not view a held record in-place git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@69667 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../rm-ui-evaluators-context.xml | 1 + .../RecordTypeParameterConstraint.java | 48 ++++++++----- .../impl/CopyMoveLinkFileToBaseAction.java | 2 +- .../jscript/app/JSONConversionComponent.java | 70 +++++++++++++------ 4 files changed, 83 insertions(+), 38 deletions(-) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml index 3f031514f7..e31a922553 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml @@ -9,6 +9,7 @@ + diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/constraint/RecordTypeParameterConstraint.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/constraint/RecordTypeParameterConstraint.java index 0486e3a2b6..f68f6453f2 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/constraint/RecordTypeParameterConstraint.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/constraint/RecordTypeParameterConstraint.java @@ -19,6 +19,7 @@ package org.alfresco.module.org_alfresco_module_rm.action.constraint; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -27,6 +28,8 @@ import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.repo.action.constraint.BaseParameterConstraint; import org.alfresco.repo.i18n.StaticMessageLookup; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.service.cmr.dictionary.AspectDefinition; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.repository.NodeRef; @@ -81,24 +84,35 @@ public class RecordTypeParameterConstraint extends BaseParameterConstraint */ protected Map getAllowableValuesImpl() { - // get the file plan - // TODO we will likely have to re-implement as a custom control so that context of the file - // plan can be correctly determined when setting the rule up - NodeRef filePlan = filePlanService.getFilePlanBySiteId(FilePlanService.DEFAULT_RM_SITE_ID); - - Set recordTypes = recordService.getRecordMetadataAspects(filePlan); - - Map result = new HashMap(recordTypes.size()); - for (QName recordType : recordTypes) + return AuthenticationUtil.runAsSystem(new RunAsWork>() { - AspectDefinition aspectDefinition = dictionaryService.getAspect(recordType); - if (aspectDefinition != null) + @SuppressWarnings("unchecked") + public Map doWork() throws Exception { - result.put(aspectDefinition.getName().getLocalName(), aspectDefinition.getTitle(new StaticMessageLookup())); + Map result = Collections.EMPTY_MAP; + + // get the file plan + // TODO we will likely have to re-implement as a custom control so that context of the file + // plan can be correctly determined when setting the rule up + NodeRef filePlan = filePlanService.getFilePlanBySiteId(FilePlanService.DEFAULT_RM_SITE_ID); + + if (filePlan != null) + { + Set recordTypes = recordService.getRecordMetadataAspects(filePlan); + + result = new HashMap(recordTypes.size()); + for (QName recordType : recordTypes) + { + AspectDefinition aspectDefinition = dictionaryService.getAspect(recordType); + if (aspectDefinition != null) + { + result.put(aspectDefinition.getName().getLocalName(), aspectDefinition.getTitle(new StaticMessageLookup())); + } + } + } + + return result; } - } - return result; - } - - + }); + } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CopyMoveLinkFileToBaseAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CopyMoveLinkFileToBaseAction.java index 3a0d6102db..3b54d93732 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CopyMoveLinkFileToBaseAction.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CopyMoveLinkFileToBaseAction.java @@ -279,7 +279,7 @@ public abstract class CopyMoveLinkFileToBaseAction extends RMActionExecuterAbstr if(create) { creating = true; - boolean lastAsFolder = lastPathElement && (ContentModel.TYPE_CONTENT.equals(nodeService.getType(actionedUponNodeRef)) || RecordsManagementModel.TYPE_NON_ELECTRONIC_DOCUMENT.equals(nodeService.getType(actionedUponNodeRef))); + boolean lastAsFolder = lastPathElement && (dictionaryService.isSubClass(nodeService.getType(actionedUponNodeRef), ContentModel.TYPE_CONTENT) || RecordsManagementModel.TYPE_NON_ELECTRONIC_DOCUMENT.equals(nodeService.getType(actionedUponNodeRef))); nodeRef = createChild(action, parent, childName, targetisUnfiledRecords, lastAsFolder); } else 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 075d20a12c..ca6711f209 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 @@ -26,7 +26,9 @@ 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.fileplan.FilePlanComponentKind; import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; +import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; +import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; @@ -52,6 +54,9 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC /** Capability service */ private CapabilityService capabilityService; + + /** dictionary service */ + private DictionaryService dictionaryService; /** Indicators */ private List indicators = new ArrayList(); @@ -82,6 +87,14 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC { this.capabilityService = capabilityService; } + + /** + * @param dictionaryService dictionary service + */ + public void setDictionaryService(DictionaryService dictionaryService) + { + this.dictionaryService = dictionaryService; + } /** * @param indicator registered indicator @@ -107,35 +120,44 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC @Override protected void setRootValues(FileInfo nodeInfo, JSONObject rootJSONObject, boolean useShortQNames) { - // Set the base root values - super.setRootValues(nodeInfo, rootJSONObject, useShortQNames); - - // Get the node reference for convenience - NodeRef nodeRef = nodeInfo.getNodeRef(); - - if (AccessStatus.ALLOWED.equals(capabilityService.getCapabilityAccessState(nodeRef, - RMPermissionModel.VIEW_RECORDS))) + if (nodeInfo != null) { - // Indicate whether the node is a RM object or not - boolean isFilePlanComponent = filePlanService.isFilePlanComponent(nodeInfo.getNodeRef()); - rootJSONObject.put("isRmNode", isFilePlanComponent); - - if (isFilePlanComponent) + // Set the base root values + super.setRootValues(nodeInfo, rootJSONObject, useShortQNames); + + // Get the node reference for convenience + NodeRef nodeRef = nodeInfo.getNodeRef(); + + if (AccessStatus.ALLOWED.equals(capabilityService.getCapabilityAccessState(nodeRef, + RMPermissionModel.VIEW_RECORDS))) { - rootJSONObject.put("rmNode", setRmNodeValues(nodeRef, useShortQNames)); - - // FIXME: Is this the right place to add the information? - addInfo(nodeInfo, rootJSONObject); + // Indicate whether the node is a RM object or not + boolean isFilePlanComponent = filePlanService.isFilePlanComponent(nodeInfo.getNodeRef()); + rootJSONObject.put("isRmNode", isFilePlanComponent); + + if (isFilePlanComponent) + { + rootJSONObject.put("rmNode", setRmNodeValues(nodeRef, useShortQNames)); + + // FIXME: Is this the right place to add the information? + addInfo(nodeInfo, rootJSONObject); + } } } } + /** + * Helper method to add information about node + * + * @param nodeInfo node information + * @param rootJSONObject root JSON object + */ @SuppressWarnings("unchecked") private void addInfo(FileInfo nodeInfo, JSONObject rootJSONObject) { String itemType = (String) rootJSONObject.get("type"); - String typeContent = ContentModel.TYPE_CONTENT.toPrefixString(namespaceService); - if (itemType.equals(typeContent)) + QName itemTypeQName = QName.createQName(itemType, namespaceService); + if (dictionaryService.isSubClass(itemTypeQName, ContentModel.TYPE_CONTENT)) { NodeRef nodeRef = nodeInfo.getNodeRef(); List parentAssocs = nodeService.getParentAssocs(nodeRef); @@ -147,7 +169,15 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC if (!parent.isPrimary()) { originatingLocation = parent.getParentRef(); - break; + + // only consider the non-RM parent otherwise we can + // run into issues with frozen or transferring records + if (!nodeService.hasAspect(originatingLocation, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) + { + // assume we have found the correct in-place location + // FIXME when we support multiple in-place locations + break; + } } }