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!)