diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml index b9a380a59f..433223bedd 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml @@ -58,6 +58,7 @@ + diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.lib.ftl b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.lib.ftl index ef22554a02..e510863426 100644 --- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.lib.ftl +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.lib.ftl @@ -28,7 +28,7 @@ "url" : "${url.serviceContext + "/api/rma/admin/rmconstraints/" + constraint.name}", "constraintName" : "${constraint.name}", "caseSensitive" : "${constraint.caseSensitive?string("true", "false")}", - "constraintTitle" : "${constraint.title}", + "constraintTitle" : "${msg(constraint.title)}", "values" : [ <#list constraint.values as value> { diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/caveat/RMListOfValuesConstraint.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/caveat/RMListOfValuesConstraint.java index edde574e40..5538808db8 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/caveat/RMListOfValuesConstraint.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/caveat/RMListOfValuesConstraint.java @@ -27,8 +27,11 @@ import java.util.Map; import org.alfresco.repo.dictionary.constraint.ListOfValuesConstraint; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.cmr.dictionary.ConstraintException; +import org.alfresco.service.cmr.i18n.MessageLookup; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.repository.datatype.TypeConversionException; +import org.apache.commons.lang.StringUtils; +import org.springframework.extensions.surf.util.I18NUtil; /** * RM Constraint implementation that ensures the value is one of a constrained @@ -44,7 +47,7 @@ public class RMListOfValuesConstraint extends ListOfValuesConstraint //private static final String ERR_NO_VALUES = "d_dictionary.constraint.list_of_values.no_values"; private static final String ERR_NON_STRING = "d_dictionary.constraint.string_length.non_string"; private static final String ERR_INVALID_VALUE = "d_dictionary.constraint.list_of_values.invalid_value"; - + private static final String LOV_CONSTRAINT_VALUE = "listconstraint"; private List allowedValues; private List allowedValuesUpper; private MatchLogic matchLogic = MatchLogic.AND; // defined match logic used by caveat matching (default = "AND") @@ -116,6 +119,22 @@ public class RMListOfValuesConstraint extends ListOfValuesConstraint } } + public String getDisplayLabel(String constraintAllowableValue, MessageLookup messageLookup) + { + if (!this.allowedValues.contains(constraintAllowableValue)) + { + return null; + } + + String key = LOV_CONSTRAINT_VALUE; + key += "." + this.getShortName(); + key += "." + constraintAllowableValue; + key = StringUtils.replace(key, ":", "_"); + + String message = messageLookup.getMessage(key, I18NUtil.getLocale()); + return message == null ? constraintAllowableValue : message; + } + private List getAllowedValuesUpper() { String runAsUser = AuthenticationUtil.getRunAsUser(); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java index eb3f41292e..ad96791f62 100755 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java @@ -236,7 +236,7 @@ public class RecordFolderType extends BaseBehaviourBean public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean bNew) { NodeRef nodeRef = childAssocRef.getChildRef(); - if (nodeService.exists(nodeRef) == true) + if (nodeService.exists(nodeRef) == true && instanceOf(nodeRef, TYPE_RECORD_FOLDER)) { // ensure nothing is being added to a closed record folder NodeRef recordFolder = childAssocRef.getParentRef(); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java index 79971442b5..638778b472 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java @@ -23,6 +23,7 @@ import org.alfresco.module.org_alfresco_module_rm.identifier.IdentifierService; import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; +import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService; import org.alfresco.repo.node.NodeServicePolicies; import org.alfresco.repo.policy.Behaviour.NotificationFrequency; import org.alfresco.repo.policy.annotation.Behaviour; @@ -53,6 +54,9 @@ public class RecordsManagementContainerType extends BaseBehaviourBean /** record service */ protected RecordService recordService; + /** record folder service */ + protected RecordFolderService recordFolderService; + /** * @param identifierService identifier service */ @@ -69,6 +73,14 @@ public class RecordsManagementContainerType extends BaseBehaviourBean this.recordService = recordService; } + /** + * @param recordFolderService record folder service + */ + public void setRecordFolderService(RecordFolderService recordFolderService) + { + this.recordFolderService = recordFolderService; + } + /** * @see org.alfresco.module.org_alfresco_module_rm.model.BaseTypeBehaviour#onCreateChildAssociation(org.alfresco.service.cmr.repository.ChildAssociationRef, boolean) */ @@ -104,10 +116,21 @@ public class RecordsManagementContainerType extends BaseBehaviourBean // This occurs if the RM folder has been created via IMap, WebDav, etc if (nodeService.hasAspect(child, ASPECT_FILE_PLAN_COMPONENT) == false) { - // TODO it may not always be a record folder ... perhaps if the current user is a admin it would be a record category?? + // check the type of the parent to determine what 'kind' of artifact to create + NodeRef parent = childAssocRef.getParentRef(); + QName parentType = nodeService.getType(parent); - // Assume any created folder is a rma:recordFolder - nodeService.setType(child, TYPE_RECORD_FOLDER); + if (dictionaryService.isSubClass(parentType, TYPE_FILE_PLAN)) + { + // create a rma:recordCategoty since we are in the root of the file plan + nodeService.setType(child, TYPE_RECORD_CATEGORY); + } + else + { + // create a rma:recordFolder and initialise record folder + nodeService.setType(child, TYPE_RECORD_FOLDER); + recordFolderService.setupRecordFolder(child); + } } // Catch all to generate the rm id (assuming it doesn't already have one!)