From b2fde6bed66e5ca543f7ec0e228459a4215a2ba0 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Wed, 4 Jan 2017 19:18:39 +0200 Subject: [PATCH 01/61] RM-4572 - executed the action on first event --- .../model/rma/type/RecordsManagementContainerType.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java index 504acd4d86..0e5c064958 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java @@ -124,7 +124,8 @@ public class RecordsManagementContainerType extends BaseBehaviourBean @Behaviour ( kind = BehaviourKind.ASSOCIATION, - notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT, + // execute on first event so the response of the create child operation contains the correct name + notificationFrequency = NotificationFrequency.FIRST_EVENT, name = BEHAVIOUR_NAME ) public void onCreateChildAssociation(final ChildAssociationRef childAssocRef, boolean isNewNode) From 21f232e45083749cbe8467d9a4d004541a3cb773 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Fri, 6 Jan 2017 12:13:14 +0200 Subject: [PATCH 02/61] RM-4572 - removed records id set in test as it is already set in a behavior --- .../test/legacy/service/ReportServiceImplTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/ReportServiceImplTest.java b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/ReportServiceImplTest.java index 13a4fc31f5..aa4c854a1b 100644 --- a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/ReportServiceImplTest.java +++ b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/ReportServiceImplTest.java @@ -218,10 +218,6 @@ public class ReportServiceImplTest extends BaseRMTestCase implements ReportModel NodeRef recordFolder = recordFolderService.createRecordFolder(recordCategory, GUID.generate()); - // Set the record folder identifier - String identifier = identifierService.generateIdentifier(TYPE_RECORD_FOLDER, recordCategory); - nodeService.setProperty(recordFolder, PROP_IDENTIFIER, identifier); - // Complete event Map params = new HashMap(1); params.put(CompleteEventAction.PARAM_EVENT_NAME, CommonRMTestUtils.DEFAULT_EVENT_NAME); From 6134f494dfe621b6554819706e0f4605f69002db Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Sat, 7 Jan 2017 15:55:34 +0200 Subject: [PATCH 03/61] RM-4572 - make the record id editable only in the transaction the record is created --- .../model/recordsModel.xml | 7 ++++ .../model/RecordsManagementModel.java | 1 + .../RecordComponentIdentifierAspect.java | 37 ++++++++++++++++++- .../type/RecordsManagementContainerType.java | 6 ++- 4 files changed, 48 insertions(+), 3 deletions(-) diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml index 29e46aefb2..d0103fb842 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml @@ -702,6 +702,13 @@ true false + + + Record Component Identifier Temporarily Editable Indicator + d:boolean + true + false + rma:filePlanComponent diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementModel.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementModel.java index d0380b5994..a99f75cbab 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementModel.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementModel.java @@ -126,6 +126,7 @@ public interface RecordsManagementModel extends RecordsManagementCustomModel QName ASPECT_RECORD_COMPONENT_ID = QName.createQName(RM_URI, "recordComponentIdentifier"); QName PROP_IDENTIFIER = QName.createQName(RM_URI, "identifier"); QName PROP_DB_UNIQUENESS_ID = QName.createQName(RM_URI, "dbUniquenessId"); + QName PROP_ID_IS_TEMPORARILY_EDITABLE = QName.createQName(RM_URI, "idIsTemporarilyEditable"); // Vital record definition aspect QName ASPECT_VITAL_RECORD_DEFINITION = QName.createQName(RM_URI, "vitalRecordDefinition"); diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordComponentIdentifierAspect.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordComponentIdentifierAspect.java index 70b7d096b0..4a5058272c 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordComponentIdentifierAspect.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordComponentIdentifierAspect.java @@ -47,6 +47,7 @@ import org.alfresco.repo.policy.annotation.BehaviourKind; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.service.cmr.attributes.AttributeService; +import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; import org.springframework.extensions.surf.util.I18NUtil; @@ -64,6 +65,7 @@ import org.springframework.extensions.surf.util.I18NUtil; public class RecordComponentIdentifierAspect extends BaseBehaviourBean implements NodeServicePolicies.OnUpdatePropertiesPolicy, NodeServicePolicies.BeforeDeleteNodePolicy, + NodeServicePolicies.OnCreateNodePolicy, CopyServicePolicies.OnCopyCompletePolicy { /** I18N */ @@ -127,7 +129,7 @@ public class RecordComponentIdentifierAspect extends BaseBehaviourBean if (newIdValue != null) { String oldIdValue = (String)before.get(PROP_IDENTIFIER); - if (oldIdValue != null && !oldIdValue.equals(newIdValue)) + if (oldIdValue != null && !oldIdValue.equals(newIdValue) && !isRecordIdentifierEditable(nodeRef)) { throw new IntegrityException(I18NUtil.getMessage(MSG_SET_ID, nodeRef.toString()), null); } @@ -140,6 +142,17 @@ public class RecordComponentIdentifierAspect extends BaseBehaviourBean }, AuthenticationUtil.getSystemUserName()); } + /** + * Utility method that checks if a record's identifier is temporarily editable + * @param record the record to check + * @return true if it is editable false otherwise + */ + private boolean isRecordIdentifierEditable(NodeRef record) + { + Boolean isEditableProperty = (Boolean)nodeService.getProperty(record, RecordsManagementModel.PROP_ID_IS_TEMPORARILY_EDITABLE); + return isEditableProperty == null ? false : isEditableProperty; + } + /** * Cleans up the {@link RecordsManagementModel#PROP_IDENTIFIER rma:identifier} property unique triplet. * @@ -238,4 +251,26 @@ public class RecordComponentIdentifierAspect extends BaseBehaviourBean CONTEXT_VALUE, contextNodeRef, afterId); } } + + @Behaviour + ( + kind = BehaviourKind.CLASS, + notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT + ) + @Override + public void onCreateNode(final ChildAssociationRef childAssocRef) + { + AuthenticationUtil.runAsSystem(new RunAsWork() + { + public Object doWork() + { + /* + * When creating a new record the identifier is writable to allow the upload in multiple steps. + * On transaction commit make the identifier read only (remove the editable aspect). + */ + nodeService.setProperty(childAssocRef.getChildRef(), RecordsManagementModel.PROP_ID_IS_TEMPORARILY_EDITABLE, false); + return null; + } + }); + } } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java index 0e5c064958..06486ece02 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java @@ -124,8 +124,8 @@ public class RecordsManagementContainerType extends BaseBehaviourBean @Behaviour ( kind = BehaviourKind.ASSOCIATION, - // execute on first event so the response of the create child operation contains the correct name - notificationFrequency = NotificationFrequency.FIRST_EVENT, + // Execute on first event to make all type conversions and set all the properties before transaction ends and response is returned + notificationFrequency = NotificationFrequency.EVERY_EVENT, name = BEHAVIOUR_NAME ) public void onCreateChildAssociation(final ChildAssociationRef childAssocRef, boolean isNewNode) @@ -224,8 +224,10 @@ public class RecordsManagementContainerType extends BaseBehaviourBean if (nodeService.hasAspect(nodeRef, ASPECT_FILE_PLAN_COMPONENT) && nodeService.getProperty(nodeRef, PROP_IDENTIFIER) == null) { + // Generate identifier and leave it editable until the transaction ends String id = identifierService.generateIdentifier(nodeRef); nodeService.setProperty(nodeRef, RecordsManagementModel.PROP_IDENTIFIER, id); + nodeService.setProperty(nodeRef, RecordsManagementModel.PROP_ID_IS_TEMPORARILY_EDITABLE, true); } return null; } From eb412fa999f270ec2ca50608fec6724072dd2bfc Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Sat, 7 Jan 2017 20:56:14 +0200 Subject: [PATCH 04/61] RM-4572 - check if node still exists --- .../model/rma/aspect/RecordComponentIdentifierAspect.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordComponentIdentifierAspect.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordComponentIdentifierAspect.java index 4a5058272c..f87f573162 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordComponentIdentifierAspect.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordComponentIdentifierAspect.java @@ -268,7 +268,11 @@ public class RecordComponentIdentifierAspect extends BaseBehaviourBean * When creating a new record the identifier is writable to allow the upload in multiple steps. * On transaction commit make the identifier read only (remove the editable aspect). */ - nodeService.setProperty(childAssocRef.getChildRef(), RecordsManagementModel.PROP_ID_IS_TEMPORARILY_EDITABLE, false); + NodeRef newNode = childAssocRef.getChildRef(); + if(nodeService.exists(newNode)) + { + nodeService.setProperty(newNode, RecordsManagementModel.PROP_ID_IS_TEMPORARILY_EDITABLE, false); + } return null; } }); From 408956976b857e6ff85820757e3651adbbbed34a Mon Sep 17 00:00:00 2001 From: David Webster Date: Fri, 13 Jan 2017 11:26:19 +0000 Subject: [PATCH 05/61] RM-3854: Add access control mapping for LockService.isLocked method --- .../security/rm-method-security.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/security/rm-method-security.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/security/rm-method-security.properties index 6a5bfac349..4da32d8bef 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/security/rm-method-security.properties +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/security/rm-method-security.properties @@ -128,6 +128,7 @@ rm.methodsecurity.org.alfresco.service.cmr.lock.LockService.getLockType=RM.Read. rm.methodsecurity.org.alfresco.service.cmr.lock.LockService.checkForLock=RM.Read.0 rm.methodsecurity.org.alfresco.service.cmr.lock.LockService.getLocks=RM.Read.0 rm.methodsecurity.org.alfresco.service.cmr.lock.LockService.isLockedAndReadOnly=RM.Read.0 +rm.methodsecurity.org.alfresco.service.cmr.lock.LockService.isLocked=RM.Read.0 rm.methodsecurity.org.alfresco.service.cmr.lock.LockService.*=RM_DENY ## Multilingual Content Service From 397730876b7923f1768078bcdcb957660e16f5fb Mon Sep 17 00:00:00 2001 From: Silviu Dinuta Date: Thu, 19 Jan 2017 16:53:19 +0200 Subject: [PATCH 06/61] RM-4568: extended upload method to support relativePath creation and minor change in specification --- .../rm/rest/api/impl/RMNodesImpl.java | 44 ++++++++++++++++--- .../main/webapp/definitions/ig-core-api.yaml | 22 +++++----- 2 files changed, 49 insertions(+), 17 deletions(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java index 7e763a7a53..e9b7f71de9 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java @@ -64,6 +64,8 @@ import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.namespace.QName; import org.alfresco.util.Pair; import org.alfresco.util.ParameterCheck; +import org.apache.commons.lang.StringUtils; +import org.springframework.extensions.webscripts.servlet.FormData; import net.sf.acegisecurity.vote.AccessDecisionVoter; @@ -205,14 +207,14 @@ public class RMNodesImpl extends NodesImpl implements RMNodes boolean isSpecialContainer = isFilePlan || isTransferContainer || isUnfiledContainer || isHoldsContainer; // DELETE - if(!isSpecialContainer && + if(!isSpecialContainer && capabilityService.getCapability("Delete").evaluate(nodeRef) == AccessDecisionVoter.ACCESS_GRANTED) { allowableOperations.add(OP_DELETE); } // CREATE - if(type != RMNodeType.FILE && + if(type != RMNodeType.FILE && !isTransferContainer && capabilityService.getCapability("FillingPermissionOnly").evaluate(nodeRef) == AccessDecisionVoter.ACCESS_GRANTED) { @@ -350,11 +352,41 @@ public class RMNodesImpl extends NodesImpl implements RMNodes NodeRef parentNodeRef = getOrCreatePath(parentFolderNodeId, relativePath, nodeTypeQName); // Set relative path to null as we pass the last element from the path - nodeInfo.setRelativePath(null); + nodeInfo.setRelativePath(null); return super.createNode(parentNodeRef.getId(), nodeInfo, parameters); } + @Override + public Node upload(String parentFolderNodeId, FormData formData, Parameters parameters) + { + if (formData == null || !formData.getIsMultiPart()) + { + throw new InvalidArgumentException("The request content-type is not multipart: "+parentFolderNodeId); + } + + for (FormData.FormField field : formData.getFields()) + { + if(field.getName().equalsIgnoreCase("relativepath")) + { + // Create the path if it does not exist + getOrCreatePath(parentFolderNodeId, getStringOrNull(field.getValue()), ContentModel.TYPE_CONTENT); + break; + } + } + + return super.upload(parentFolderNodeId, formData, parameters); + } + + private String getStringOrNull(String value) + { + if (StringUtils.isNotEmpty(value)) + { + return value.equalsIgnoreCase("null") ? null : value; + } + return null; + } + @Override public NodeRef getOrCreatePath(String parentFolderNodeId, String relativePath, QName nodeTypeQName) { @@ -407,7 +439,7 @@ public class RMNodesImpl extends NodesImpl implements RMNodes * Starting from the latest existing element create the rest of the elements */ QName parentNodeType = nodeService.getType(parentNodeRef); - if(dictionaryService.isSubClass(parentNodeType, RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER) || + if(dictionaryService.isSubClass(parentNodeType, RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER) || dictionaryService.isSubClass(parentNodeType, RecordsManagementModel.TYPE_UNFILED_RECORD_CONTAINER)) { for (String pathElement : pathElements) @@ -416,9 +448,9 @@ public class RMNodesImpl extends NodesImpl implements RMNodes parentNodeRef = fileFolderService.create(parentNodeRef, pathElement, RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER).getNodeRef(); } } - else + else { - /* Outside the unfiled record container the path elements are record categories + /* Outside the unfiled record container the path elements are record categories * except the last element which is a record folder if the created node is of type content */ Iterator iterator = pathElements.iterator(); diff --git a/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/ig-core-api.yaml b/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/ig-core-api.yaml index b1897925c2..e5bb9abf19 100644 --- a/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/ig-core-api.yaml +++ b/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/ig-core-api.yaml @@ -229,7 +229,7 @@ paths: This API method also supports node creation using application/json. - You must specify at least a **name** and **nodeType**. + You must specify at least a **name** and **nodeType**. You can create a category like this: ```JSON @@ -289,7 +289,7 @@ paths: } ``` - You can create an empty electronic record and use the record endpoint to create content: + You can create an empty electronic record: ```JSON { "name":"My Electronic Record", @@ -306,7 +306,7 @@ paths: } ``` The **relativePath** specifies the container structure to create relative to the node **nodeId**. Containers in the - **relativePath** that do not exist are created before the node is created. The container type is decided considering + **relativePath** that do not exist are created before the node is created. The container type is decided considering the type of the parent container and the type of the node to be created. You can set properties when creating a new fileplan component: @@ -324,7 +324,7 @@ paths: Any missing aspects are applied automatically. You can set aspects explicitly, if needed, using an **aspectNames** field. - **Note:** You can create more than one child by + **Note:** You can create more than one child by specifying a list of nodes in the JSON body. For example, the following JSON body creates two folders inside the specified **nodeId**, if the **nodeId** identifies a folder: @@ -341,7 +341,7 @@ paths: ] ``` If you specify a list as input, then a paginated list rather than an entry is returned in the response body. For example: - + ```JSON { "list": { @@ -599,11 +599,11 @@ paths: $ref: '#/definitions/Error' '/records/{recordId}/file': post: - tags: + tags: - records summary: File a record description: | - Files the record **recordId** in the target record folder. + Files the record **recordId** in the target record folder. You can specify the target record folder by providing its id **targetParentId** or by providing the id of a parent container **targetParentId** and a relative path **relativePath**. @@ -613,9 +613,9 @@ paths: The relativePath is made of record containers and a record folder as the last element. Containers that are missing from relativePath will be created before filing. - If the record is already filed, a link to the target record folder is created. + If the record is already filed, a link to the target record folder is created. operationId: fileRecord - parameters: + parameters: - $ref: '#/parameters/recordIdParam' - $ref: '#/parameters/IGNodeEntryIncludeParam' - $ref: '#/parameters/fieldsParam' @@ -654,12 +654,12 @@ paths: $ref: '#/definitions/Error' '/files/{fileId}/declare': post: - tags: + tags: - files summary: Declare as record description: Declares the file **fileId** in the unfiled record container. operationId: declareRecord - parameters: + parameters: - name: fileId in: path description: The identifier of a non-record file. From a59e42caca212d659b9bda275e6257cc0867ad41 Mon Sep 17 00:00:00 2001 From: Silviu Dinuta Date: Thu, 19 Jan 2017 16:57:36 +0200 Subject: [PATCH 07/61] RM-4568: removed some formating --- .../main/webapp/definitions/ig-core-api.yaml | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/ig-core-api.yaml b/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/ig-core-api.yaml index e5bb9abf19..7550e5c147 100644 --- a/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/ig-core-api.yaml +++ b/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/ig-core-api.yaml @@ -229,7 +229,7 @@ paths: This API method also supports node creation using application/json. - You must specify at least a **name** and **nodeType**. + You must specify at least a **name** and **nodeType**. You can create a category like this: ```JSON @@ -306,7 +306,7 @@ paths: } ``` The **relativePath** specifies the container structure to create relative to the node **nodeId**. Containers in the - **relativePath** that do not exist are created before the node is created. The container type is decided considering + **relativePath** that do not exist are created before the node is created. The container type is decided considering the type of the parent container and the type of the node to be created. You can set properties when creating a new fileplan component: @@ -324,7 +324,7 @@ paths: Any missing aspects are applied automatically. You can set aspects explicitly, if needed, using an **aspectNames** field. - **Note:** You can create more than one child by + **Note:** You can create more than one child by specifying a list of nodes in the JSON body. For example, the following JSON body creates two folders inside the specified **nodeId**, if the **nodeId** identifies a folder: @@ -341,7 +341,7 @@ paths: ] ``` If you specify a list as input, then a paginated list rather than an entry is returned in the response body. For example: - + ```JSON { "list": { @@ -599,11 +599,11 @@ paths: $ref: '#/definitions/Error' '/records/{recordId}/file': post: - tags: + tags: - records summary: File a record description: | - Files the record **recordId** in the target record folder. + Files the record **recordId** in the target record folder. You can specify the target record folder by providing its id **targetParentId** or by providing the id of a parent container **targetParentId** and a relative path **relativePath**. @@ -613,9 +613,9 @@ paths: The relativePath is made of record containers and a record folder as the last element. Containers that are missing from relativePath will be created before filing. - If the record is already filed, a link to the target record folder is created. + If the record is already filed, a link to the target record folder is created. operationId: fileRecord - parameters: + parameters: - $ref: '#/parameters/recordIdParam' - $ref: '#/parameters/IGNodeEntryIncludeParam' - $ref: '#/parameters/fieldsParam' @@ -654,12 +654,12 @@ paths: $ref: '#/definitions/Error' '/files/{fileId}/declare': post: - tags: + tags: - files summary: Declare as record description: Declares the file **fileId** in the unfiled record container. operationId: declareRecord - parameters: + parameters: - name: fileId in: path description: The identifier of a non-record file. From 026f9bbb49926b6d361b57c2ed0aea954561fbb1 Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Fri, 20 Jan 2017 22:58:43 +0000 Subject: [PATCH 08/61] RM-4576 (Completed records can be modified) --- .../rm-service-context.xml | 22 +++++++++++++--- .../record/RecordServiceImpl.java | 26 ++++++++++--------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index 56d5b0f6af..66f92689d0 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -569,9 +569,9 @@ parent="baseService"> - - - + + + @@ -1060,8 +1060,24 @@ + + + + + http://www.alfresco.org/model/security/1.0 + http://www.alfresco.org/model/system/1.0 + http://www.alfresco.org/model/workflow/1.0 + http://www.alfresco.org/model/application/1.0 + http://www.alfresco.org/model/datalist/1.0 + http://www.alfresco.org/model/dictionary/1.0 + http://www.alfresco.org/model/bpm/1.0 + http://www.alfresco.org/model/rendition/1.0 + + + + diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java index b40c64b197..d274d78e8f 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java @@ -27,8 +27,6 @@ package org.alfresco.module.org_alfresco_module_rm.record; -import static com.google.common.collect.Lists.newArrayList; - import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; @@ -158,18 +156,22 @@ public class RecordServiceImpl extends BaseBehaviourBean }; /** always edit model URI's */ + private List alwaysEditURIs; + + /** + * @param alwaysEditURIs the alwaysEditURIs to set + */ + public void setAlwaysEditURIs(List alwaysEditURIs) + { + this.alwaysEditURIs = alwaysEditURIs; + } + + /** + * @return the alwaysEditURIs + */ protected List getAlwaysEditURIs() { - return newArrayList( - NamespaceService.SECURITY_MODEL_1_0_URI, - NamespaceService.SYSTEM_MODEL_1_0_URI, - NamespaceService.WORKFLOW_MODEL_1_0_URI, - NamespaceService.APP_MODEL_1_0_URI, - NamespaceService.DATALIST_MODEL_1_0_URI, - NamespaceService.DICTIONARY_MODEL_1_0_URI, - NamespaceService.BPM_MODEL_1_0_URI, - NamespaceService.RENDITION_MODEL_1_0_URI - ); + return this.alwaysEditURIs; } /** record model URI's */ From ad656729c9d21e050a1871967df8ceeef8d54097 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Wed, 18 Jan 2017 12:22:24 +0000 Subject: [PATCH 09/61] MNT-16881 Add CreateChild permission to the write group. Note that the RM permission code in RecordsManagementPermissionPostProcessor is not navigating the permission group hierarchy correctly. This is a simple fix to solve the issue referenced, but the full fix will go into master. --- .../module/org_alfresco_module_rm/alfresco-global.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties index 4520306a4e..7f39bba3c9 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties @@ -85,7 +85,7 @@ rm.patch.v22.convertToStandardFilePlan=false # these take a comma separated string of permissions from org.alfresco.service.cmr.security.PermissionService # read maps to ReadRecords and write to FileRecords rm.haspermissionmap.read=ReadProperties,ReadChildren -rm.haspermissionmap.write=WriteProperties,AddChildren +rm.haspermissionmap.write=WriteProperties,AddChildren,CreateChildren # # Extended auto-version behaviour. If true and other auto-version properties are satisfied, then From 7bcb1199812e3d353f94d4ef817bd2204cb53fea Mon Sep 17 00:00:00 2001 From: Tom Page Date: Wed, 18 Jan 2017 12:22:24 +0000 Subject: [PATCH 10/61] MNT-16881 Check permission hierarchy using PermissionModel. Use the permission group hierarchy to determine whether the configured permissions imply the queried permission or not. --- .../org_alfresco_module_rm/module-context.xml | 1 + ...ordsManagementPermissionPostProcessor.java | 110 ++++++++++++------ .../processor/PermissionPostProcessor.java | 2 +- 3 files changed, 75 insertions(+), 38 deletions(-) diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/module-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/module-context.xml index 4ef9447a72..63242f2ab1 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/module-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/module-context.xml @@ -78,6 +78,7 @@ + diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessor.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessor.java index 660cb6bc90..9fc6e6bc1f 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessor.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessor.java @@ -31,6 +31,8 @@ import java.util.List; import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.repo.security.permissions.PermissionReference; +import org.alfresco.repo.security.permissions.impl.model.PermissionModel; import org.alfresco.repo.security.permissions.processor.impl.PermissionPostProcessorBaseImpl; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; @@ -39,47 +41,81 @@ import org.alfresco.service.cmr.security.PermissionService; /** * Records management permission post processor. - * + * * @author Roy Wetherall * @since 2.4.a */ -public class RecordsManagementPermissionPostProcessor extends PermissionPostProcessorBaseImpl +public class RecordsManagementPermissionPostProcessor extends PermissionPostProcessorBaseImpl { - /** node service */ - private NodeService nodeService; - public void setNodeService(NodeService nodeService) {this.nodeService=nodeService;} - - /** permission service */ - private PermissionService permissionService; - public void setPermissionService(PermissionService permissionService) {this.permissionService=permissionService;} - - /** - * @see org.alfresco.repo.security.permissions.processor.PermissionPostProcessor#process(org.alfresco.service.cmr.security.AccessStatus, org.alfresco.service.cmr.repository.NodeRef, java.lang.String) - */ - @Override - public AccessStatus process(AccessStatus accessStatus, NodeRef nodeRef, String perm, - List configuredReadPermissions, List configuredFilePermissions) - { - AccessStatus result = accessStatus; - if (AccessStatus.DENIED.equals(accessStatus) && + /** node service */ + private NodeService nodeService; + public void setNodeService(NodeService nodeService) {this.nodeService=nodeService;} + + /** permission service */ + private PermissionService permissionService; + public void setPermissionService(PermissionService permissionService) {this.permissionService=permissionService;} + + /** The permission model DAO. */ + private PermissionModel permissionModel; + public void setPermissionModel(PermissionModel permissionModel) {this.permissionModel=permissionModel;} + + /** + * @see org.alfresco.repo.security.permissions.processor.PermissionPostProcessor#process(org.alfresco.service.cmr.security.AccessStatus, org.alfresco.service.cmr.repository.NodeRef, java.lang.String) + */ + @Override + public AccessStatus process(AccessStatus accessStatus, NodeRef nodeRef, String perm, + List configuredReadPermissions, List configuredFilePermissions) + { + AccessStatus result = accessStatus; + if (AccessStatus.DENIED.equals(accessStatus) && nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) - { - // if read denied on rm artifact - if (PermissionService.READ.equals(perm) || configuredReadPermissions.contains(perm)) - { - // check for read record - result = permissionService.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS); - } - // if write deinied on rm artificat - else if (PermissionService.WRITE.equals(perm) || configuredFilePermissions.contains(perm)) - { - // check for file record - result = permissionService.hasPermission(nodeRef, RMPermissionModel.FILE_RECORDS); - } - } - - return result; - - } + { + // if read denied on rm artifact + if (PermissionService.READ.equals(perm) || isPermissionContained(perm, configuredReadPermissions)) + { + // check for read record + result = permissionService.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS); + } + // if write denied on rm artifact + else if (PermissionService.WRITE.equals(perm) || isPermissionContained(perm, configuredFilePermissions)) + { + // check for file record + result = permissionService.hasPermission(nodeRef, RMPermissionModel.FILE_RECORDS); + } + } + + return result; + + } + + /** + * Check if a given permission is implied by a list of permission groups. + * + * @param perm The name of the permission in question. + * @param configuredPermissions The list of permission group names. + * @return true if the permission is contained or implied by the list of permissions. + */ + private boolean isPermissionContained(String perm, List configuredPermissions) + { + // Check if the permission is explicitly in the list + if (configuredPermissions.contains(perm)) + { + return true; + } + // Check if the permission is implied by one from the list. + for (String configuredPermission : configuredPermissions) + { + // TODO: Here we are assuming the permission name is unique across all contexts (but I think we're doing that in the properties file anyway). + PermissionReference permissionReference = permissionModel.getPermissionReference(null, configuredPermission); + for (PermissionReference granteePermission : permissionModel.getGranteePermissions(permissionReference)) + { + if (granteePermission.getName().equals(perm)) + { + return true; + } + } + } + return false; + } } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/processor/PermissionPostProcessor.java b/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/processor/PermissionPostProcessor.java index 438b3bbd4a..3a38462f5a 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/processor/PermissionPostProcessor.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/processor/PermissionPostProcessor.java @@ -52,5 +52,5 @@ public interface PermissionPostProcessor * @return {@link AccessStatus} */ AccessStatus process(AccessStatus accessStatus, NodeRef nodeRef, String perm, - List configuredReadPermissions, List configuredFilePermissions); + List configuredReadPermissions, List configuredFilePermissions); } From 3b6204873b99f9476a7427d2b6fdec2eea5f6698 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Thu, 19 Jan 2017 16:26:52 +0000 Subject: [PATCH 11/61] MNT-16881 Fix unit test and write an additional one. --- ...gementPermissionPostProcessorUnitTest.java | 66 ++++++++++++++++--- 1 file changed, 56 insertions(+), 10 deletions(-) diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java index cfa99cae76..db87c4a511 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java @@ -28,8 +28,8 @@ package org.alfresco.module.org_alfresco_module_rm.permission; import static java.util.Arrays.asList; - import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; @@ -37,6 +37,8 @@ import java.util.List; 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.test.util.AlfMock; +import org.alfresco.repo.security.permissions.PermissionReference; +import org.alfresco.repo.security.permissions.impl.model.PermissionModel; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.security.AccessStatus; @@ -47,20 +49,26 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import com.google.common.collect.Sets; + /** * Unit tests for {@link RecordsManagementPermissionPostProcessor}. * * @author David Webster + * @author Tom Page * @since 2.4.1 */ public class RecordsManagementPermissionPostProcessorUnitTest { + @InjectMocks + private RecordsManagementPermissionPostProcessor recordsManagementPermissionPostProcessor = new RecordsManagementPermissionPostProcessor(); - private @InjectMocks - RecordsManagementPermissionPostProcessor recordsManagementPermissionPostProcessor = new RecordsManagementPermissionPostProcessor(); - - private @Mock NodeService nodeService; - private @Mock PermissionService permissionService; + @Mock + private NodeService mockNodeService; + @Mock + private PermissionService mockPermissionService; + @Mock + private PermissionModel mockPermissionModel; @Before public void setup() @@ -83,9 +91,9 @@ public class RecordsManagementPermissionPostProcessorUnitTest List configuredReadPermissions = asList("ReadProperties", "ReadChildren", perm); List configuredFilePermissions = asList("WriteProperties", "AddChildren"); - when(nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) + when(mockNodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) .thenReturn(true); - when(permissionService.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS)) + when(mockPermissionService.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS)) .thenReturn(AccessStatus.ALLOWED); AccessStatus result = recordsManagementPermissionPostProcessor.process(accessStatus, nodeRef, perm, configuredReadPermissions, configuredFilePermissions); @@ -108,13 +116,51 @@ public class RecordsManagementPermissionPostProcessorUnitTest List configuredReadPermissions = asList("ReadProperties", "ReadChildren"); List configuredFilePermissions = asList("WriteProperties", "AddChildren"); - when(nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) + when(mockNodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) .thenReturn(true); - when(permissionService.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS)) + when(mockPermissionService.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS)) .thenReturn(AccessStatus.ALLOWED); AccessStatus result = recordsManagementPermissionPostProcessor.process(accessStatus, nodeRef, perm, configuredReadPermissions, configuredFilePermissions); assertEquals(AccessStatus.DENIED, result); } + + /** + * Test that the permission groups configured in the global properties file imply descendant permission groups. + *

+ * Given a configured permission is an ancestor of another permission P + * And the post processor checks if the user has P + * Then the post processor says that they do. + */ + @Test + public void permissionInherittedFromConfiguredGroup() + { + NodeRef nodeRef = new NodeRef("node://ref/"); + // permissions do not include perm created above + List configuredReadPermissions = asList(); + List configuredFilePermissions = asList("WriteProperties"); + + when(mockNodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) + .thenReturn(true); + when(mockPermissionService.hasPermission(nodeRef, RMPermissionModel.FILE_RECORDS)) + .thenReturn(AccessStatus.ALLOWED); + + // Set up "WriteProperties" to imply three other permission groups. + PermissionReference mockWritePropsPermRef = mock(PermissionReference.class); + when(mockPermissionModel.getPermissionReference(null, "WriteProperties")).thenReturn(mockWritePropsPermRef); + PermissionReference childOne = mock(PermissionReference.class); + when(childOne.getName()).thenReturn("Not this one"); + PermissionReference childTwo = mock(PermissionReference.class); + when(childOne.getName()).thenReturn("This is the requested permission"); + PermissionReference childThree = mock(PermissionReference.class); + when(childThree.getName()).thenReturn("Not this one either"); + when(mockPermissionModel.getGranteePermissions(mockWritePropsPermRef)).thenReturn(Sets.newHashSet(childOne, childTwo, childThree)); + + // Call the method under test. + AccessStatus result = recordsManagementPermissionPostProcessor.process(AccessStatus.DENIED, nodeRef, + "This is the requested permission", configuredReadPermissions, configuredFilePermissions); + + assertEquals(AccessStatus.ALLOWED, result); + } } From b74b84ab075431b031a8689cd7b04093b9256425 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Tue, 24 Jan 2017 11:45:39 +0000 Subject: [PATCH 12/61] MNT-16881 Fix typo in unit test. Due to the lack of ordering in hash sets, this was passing locally but failing on Bamboo with a NPE. --- .../RecordsManagementPermissionPostProcessorUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java index db87c4a511..f0c25e9e96 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java @@ -152,7 +152,7 @@ public class RecordsManagementPermissionPostProcessorUnitTest PermissionReference childOne = mock(PermissionReference.class); when(childOne.getName()).thenReturn("Not this one"); PermissionReference childTwo = mock(PermissionReference.class); - when(childOne.getName()).thenReturn("This is the requested permission"); + when(childTwo.getName()).thenReturn("This is the requested permission"); PermissionReference childThree = mock(PermissionReference.class); when(childThree.getName()).thenReturn("Not this one either"); when(mockPermissionModel.getGranteePermissions(mockWritePropsPermRef)).thenReturn(Sets.newHashSet(childOne, childTwo, childThree)); From 8d96550de3efc00c5b7a48cdb726bc93a59bd88a Mon Sep 17 00:00:00 2001 From: Kristijan Conkas Date: Tue, 24 Jan 2017 18:15:41 +0000 Subject: [PATCH 13/61] RM-4615: TAS bump-up + corresponding api wrapper changes --- .../rm-automation-community-rest-api/pom.xml | 2 +- .../org/alfresco/rest/core/RMRestWrapper.java | 8 ++ .../alfresco/rest/core/RestAPIFactory.java | 11 ++ .../rm/community/requests/RMModelRequest.java | 2 +- .../requests/igCoreAPI/RMUserAPI.java | 102 +++++++++++++----- .../requests/igCoreAPI/RestIGCoreAPI.java | 11 ++ .../fileplancomponents/DeleteRecordTests.java | 17 ++- .../UpdateRecordsTests.java | 12 +-- .../rest/rm/community/site/RMSiteTests.java | 7 +- 9 files changed, 118 insertions(+), 54 deletions(-) diff --git a/rm-automation/rm-automation-community-rest-api/pom.xml b/rm-automation/rm-automation-community-rest-api/pom.xml index 3a53363b14..c45b682805 100644 --- a/rm-automation/rm-automation-community-rest-api/pom.xml +++ b/rm-automation/rm-automation-community-rest-api/pom.xml @@ -15,7 +15,7 @@ 1.8 alfresco-rm-community-share alfresco-rm-community-repo - 5.2.0-0 + 5.2.0-2-SNAPSHOT 2.0.0 diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/RMRestWrapper.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/RMRestWrapper.java index 706efef8d7..c59bc2defe 100644 --- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/RMRestWrapper.java +++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/RMRestWrapper.java @@ -50,4 +50,12 @@ public class RMRestWrapper extends RestWrapper { return new RestIGCoreAPI(this, rmRestProperties); } + + /** + * @return the rmRestProperties + */ + public RMRestProperties getRmRestProperties() + { + return this.rmRestProperties; + } } diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/RestAPIFactory.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/RestAPIFactory.java index d2edca7279..907bbe53ab 100644 --- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/RestAPIFactory.java +++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/RestAPIFactory.java @@ -29,6 +29,7 @@ package org.alfresco.rest.core; import org.alfresco.rest.rm.community.requests.igCoreAPI.FilePlanComponentAPI; import org.alfresco.rest.rm.community.requests.igCoreAPI.FilesAPI; import org.alfresco.rest.rm.community.requests.igCoreAPI.RMSiteAPI; +import org.alfresco.rest.rm.community.requests.igCoreAPI.RMUserAPI; import org.alfresco.rest.rm.community.requests.igCoreAPI.RecordsAPI; import org.alfresco.rest.rm.community.requests.igCoreAPI.RestIGCoreAPI; import org.alfresco.utility.data.DataUser; @@ -106,4 +107,14 @@ public class RestAPIFactory { return getRestIGCoreAPI(userModel).usingFiles(); } + + public RMUserAPI getRMUserAPI() + { + return getRestIGCoreAPI(null).usingRMUser(); + } + + public RMUserAPI getRMUserAPI(UserModel userModel) + { + return getRestIGCoreAPI(userModel).usingRMUser(); + } } diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/RMModelRequest.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/RMModelRequest.java index 5f05822e3e..b56bcad897 100644 --- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/RMModelRequest.java +++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/RMModelRequest.java @@ -35,7 +35,7 @@ import org.alfresco.rest.requests.ModelRequest; * @author Tuna Aksoy * @since 2.6 */ -public abstract class RMModelRequest extends ModelRequest +public abstract class RMModelRequest extends ModelRequest { private RMRestWrapper rmRestWrapper; diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java index c03639c4ef..5eb0a648bd 100644 --- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java +++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java @@ -26,9 +26,11 @@ */ package org.alfresco.rest.rm.community.requests.igCoreAPI; +import static com.jayway.restassured.RestAssured.basic; import static com.jayway.restassured.RestAssured.given; import static org.jglue.fluentjson.JsonBuilderFactory.buildObject; +import static org.springframework.http.HttpStatus.OK; import com.google.gson.JsonObject; import com.jayway.restassured.builder.RequestSpecBuilder; @@ -38,12 +40,13 @@ import com.jayway.restassured.specification.RequestSpecification; import org.alfresco.dataprep.AlfrescoHttpClient; import org.alfresco.dataprep.AlfrescoHttpClientFactory; -import org.alfresco.dataprep.UserService; -import org.alfresco.rest.core.RestAPI; +import org.alfresco.rest.core.RMRestProperties; +import org.alfresco.rest.core.RMRestWrapper; +import org.alfresco.rest.rm.community.base.TestData; import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent; -import org.alfresco.utility.data.DataUser; +import org.alfresco.rest.rm.community.model.user.UserPermissions; +import org.alfresco.rest.rm.community.requests.RMModelRequest; import org.alfresco.utility.model.UserModel; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -58,21 +61,36 @@ import org.springframework.stereotype.Component; // "old-style" API calls. @Component @Scope (value = "prototype") -public class RMUserAPI extends RestAPI +public class RMUserAPI extends RMModelRequest { - @Autowired - private UserService userService; - - @Autowired - private DataUser dataUser; - - @Autowired - private AlfrescoHttpClientFactory alfrescoHttpClientFactory; +// @Autowired +// private UserService userService; + + private UserModel dataUser = new UserModel("admin", "admin"); + + /** + * @param rmRestWrapper + */ + public RMUserAPI(RMRestWrapper rmRestWrapper) + { + super(rmRestWrapper); + } + private AlfrescoHttpClient getAlfrescoHttpClient() + { + RMRestProperties properties = getRMRestWrapper().getRmRestProperties(); + AlfrescoHttpClientFactory factory = new AlfrescoHttpClientFactory(); + factory.setHost(properties.getServer()); + factory.setPort(Integer.parseInt(properties.getPort())); + factory.setScheme(properties.getScheme()); + + return factory.getObject(); + } + public void assignRoleToUser(String userName, String userRole) throws Exception { // get an "old-style" REST API client - AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); + AlfrescoHttpClient client = getAlfrescoHttpClient(); // override v1 baseURI and basePath RequestSpecification spec = new RequestSpecBuilder() @@ -85,13 +103,13 @@ public class RMUserAPI extends RestAPI .log().all() .pathParam("role", userRole) .pathParam("authority", userName) - .param("alf_ticket", client.getAlfTicket( - dataUser.getAdminUser().getUsername(), dataUser.getAdminUser().getPassword())) + .param("alf_ticket", client.getAlfTicket(dataUser.getUsername(), + dataUser.getPassword())) .when() .post("/rm/roles/{role}/authorities/{authority}") .prettyPeek() .andReturn(); - usingRestWrapper().setStatusCode(Integer.toString(response.getStatusCode())); + getRMRestWrapper().setStatusCode(Integer.toString(response.getStatusCode())); } /** @@ -103,7 +121,7 @@ public class RMUserAPI extends RestAPI public void addUserPermission(FilePlanComponent component, UserModel user, String permission) { // get an "old-style" REST API client - AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); + AlfrescoHttpClient client = getAlfrescoHttpClient(); JsonObject bodyJson = buildObject() .addArray("permissions") @@ -118,11 +136,11 @@ public class RMUserAPI extends RestAPI .setBaseUri(client.getApiUrl()) .setBasePath("/") .build(); - + // execute an "old-style" API call Response response = given() .spec(spec) - .auth().basic(dataUser.getAdminUser().getUsername(), dataUser.getAdminUser().getPassword()) + .auth().basic(dataUser.getUsername(), dataUser.getPassword()) .contentType(ContentType.JSON) .body(bodyJson.toString()) .pathParam("nodeId", component.getId()) @@ -131,7 +149,7 @@ public class RMUserAPI extends RestAPI .post("/node/workspace/SpacesStore/{nodeId}/rmpermissions") .prettyPeek() .andReturn(); - usingRestWrapper().setStatusCode(Integer.toString(response.getStatusCode())); + getRMRestWrapper().setStatusCode(Integer.toString(response.getStatusCode())); } /** @@ -142,12 +160,40 @@ public class RMUserAPI extends RestAPI */ public boolean createUser(String userName) { - return userService.create(dataUser.getAdminUser().getUsername(), - dataUser.getAdminUser().getPassword(), - userName, - "password", - "default@alfresco.com", - userName, - userName); + AlfrescoHttpClient client = getAlfrescoHttpClient(); + + JsonObject body = buildObject() + .add("userName", userName) + .add("firstName", userName) + .add("lastName", userName) + .add("password", TestData.DEFAULT_PASSWORD) + .add("email", TestData.DEFAULT_EMAIL) + .getJson(); + + RequestSpecification spec = new RequestSpecBuilder() + .setBaseUri(client.getApiUrl()) + .setBasePath("/") + .setAuth(basic(dataUser.getUsername(), dataUser.getPassword())) + .setContentType(ContentType.JSON) + .setBody(body.toString()) + .build(); + + // create POST request to "people" endpoint + Response response = given() + .spec(spec) + .log().all() + .when() + .post("people") + .prettyPeek() + .andReturn(); + + if (response.getStatusCode() == OK.value()) + { + return true; + } + else + { + return false; + } } } diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RestIGCoreAPI.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RestIGCoreAPI.java index 85eb904a4e..cdc8910fea 100644 --- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RestIGCoreAPI.java +++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RestIGCoreAPI.java @@ -56,6 +56,7 @@ public class RestIGCoreAPI extends RMModelRequest RestAssured.baseURI = format("%s://%s", rmRestProperties.getScheme(), rmRestProperties.getServer()); RestAssured.port = parseInt(rmRestProperties.getPort()); RestAssured.basePath = rmRestProperties.getRestRmPath(); + restWrapper.configureRequestSpec().setBasePath(RestAssured.basePath); } /** @@ -97,4 +98,14 @@ public class RestIGCoreAPI extends RMModelRequest { return new FilesAPI(getRMRestWrapper()); } + + /** + * Provides DSL for RM user management API + * + * @return {@link RMUserAPI} + */ + public RMUserAPI usingRMUser() + { + return new RMUserAPI(getRMRestWrapper()); + } } diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/DeleteRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/DeleteRecordTests.java index f26a601606..50811acfdd 100644 --- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/DeleteRecordTests.java +++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/DeleteRecordTests.java @@ -41,12 +41,10 @@ import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent import org.alfresco.rest.rm.community.model.user.UserPermissions; import org.alfresco.rest.rm.community.model.user.UserRoles; import org.alfresco.rest.rm.community.requests.igCoreAPI.FilePlanComponentAPI; -import org.alfresco.rest.rm.community.requests.igCoreAPI.RMUserAPI; import org.alfresco.test.AlfrescoTest; import org.alfresco.utility.constants.UserRole; import org.alfresco.utility.model.SiteModel; import org.alfresco.utility.model.UserModel; -import org.springframework.beans.factory.annotation.Autowired; import org.testng.annotations.Test; /** @@ -60,9 +58,6 @@ import org.testng.annotations.Test; */ public class DeleteRecordTests extends BaseRMRestTest { - @Autowired - private RMUserAPI rmUserAPI; - /** *

      * Given a record
@@ -149,8 +144,8 @@ public class DeleteRecordTests extends BaseRMRestTest
         getDataUser().addUserToSite(deleteUser, new SiteModel(getRestAPIFactory().getRMSiteAPI().getSite().getId()), UserRole.SiteCollaborator);
 
         // add RM role to user
-        rmUserAPI.assignRoleToUser(deleteUser.getUsername(), UserRoles.ROLE_RM_POWER_USER);
-        rmUserAPI.usingRestWrapper().assertStatusCodeIs(OK);
+        getRestAPIFactory().getRMUserAPI().assignRoleToUser(deleteUser.getUsername(), UserRoles.ROLE_RM_POWER_USER);
+        assertStatusCode(OK);
 
         // try to delete newRecord
         getRestAPIFactory().getFilePlanComponentsAPI(deleteUser).deleteFilePlanComponent(newRecord.getId());
@@ -183,8 +178,8 @@ public class DeleteRecordTests extends BaseRMRestTest
         logger.info("test user: " + deleteUser.getUsername());
 
         // add RM role to user, RM Power User doesn't have the Delete Record capabilities
-        rmUserAPI.assignRoleToUser(deleteUser.getUsername(), UserRoles.ROLE_RM_POWER_USER);
-        rmUserAPI.usingRestWrapper().assertStatusCodeIs(OK);
+        getRestAPIFactory().getRMUserAPI().assignRoleToUser(deleteUser.getUsername(), UserRoles.ROLE_RM_POWER_USER);
+        assertStatusCode(OK);
 
         // create random folder
         FilePlanComponent randomFolder = createCategoryFolderInFilePlan();
@@ -193,9 +188,9 @@ public class DeleteRecordTests extends BaseRMRestTest
         // grant deleteUser Filing privileges on randomFolder category, this will be
         // inherited to randomFolder
         FilePlanComponentAPI filePlanComponentsAPIAsAdmin = getRestAPIFactory().getFilePlanComponentsAPI();
-        rmUserAPI.addUserPermission(filePlanComponentsAPIAsAdmin.getFilePlanComponent(randomFolder.getParentId()),
+        getRestAPIFactory().getRMUserAPI().addUserPermission(filePlanComponentsAPIAsAdmin.getFilePlanComponent(randomFolder.getParentId()),
             deleteUser, UserPermissions.PERMISSION_FILING);
-        rmUserAPI.usingRestWrapper().assertStatusCodeIs(OK);
+        assertStatusCode(OK);
 
         // create a non-electronic record in randomFolder
         FilePlanComponent newRecord = filePlanComponentsAPIAsAdmin.createFilePlanComponent(createNonElectronicRecordModel(), randomFolder.getId());
diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/UpdateRecordsTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/UpdateRecordsTests.java
index e2738c2fca..b74c5075ee 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/UpdateRecordsTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/UpdateRecordsTests.java
@@ -47,7 +47,6 @@ import org.alfresco.test.AlfrescoTest;
 import org.alfresco.utility.constants.UserRole;
 import org.alfresco.utility.model.SiteModel;
 import org.alfresco.utility.model.UserModel;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.testng.annotations.Test;
 
 /**
@@ -59,10 +58,7 @@ import org.testng.annotations.Test;
  * @since 2.6
  */
 public class UpdateRecordsTests extends BaseRMRestTest
-{
-    @Autowired
-    private RMUserAPI rmUserAPI;
-    
+{    
     /* to be used to append to modifications */
     private final String MODIFIED_PREFIX = "modified_";
     
@@ -132,6 +128,8 @@ public class UpdateRecordsTests extends BaseRMRestTest
     @AlfrescoTest(jira="RM-4362")
     public void userWithEditMetadataCapsCanUpdateMetadata() throws Exception
     {   
+        RMUserAPI rmUserAPI = getRestAPIFactory().getRMUserAPI();
+        
         // create test user and add it with collab. privileges
         UserModel updateUser = getDataUser().createRandomTestUser("updateuser");
         updateUser.setUserRole(UserRole.SiteCollaborator);
@@ -139,7 +137,7 @@ public class UpdateRecordsTests extends BaseRMRestTest
 
         // RM Security Officer is the lowest role with Edit Record Metadata capabilities
         rmUserAPI.assignRoleToUser(updateUser.getUsername(), UserRoles.ROLE_RM_SECURITY_OFFICER);
-        rmUserAPI.usingRestWrapper().assertStatusCodeIs(OK);
+        assertStatusCode(OK);
 
         // create random folder
         FilePlanComponent randomFolder = createCategoryFolderInFilePlan();
@@ -150,7 +148,7 @@ public class UpdateRecordsTests extends BaseRMRestTest
         FilePlanComponentAPI filePlanComponentsAPIAsAdmin = getRestAPIFactory().getFilePlanComponentsAPI();
         rmUserAPI.addUserPermission(filePlanComponentsAPIAsAdmin.getFilePlanComponent(randomFolder.getParentId()),
             updateUser, UserPermissions.PERMISSION_FILING);
-        rmUserAPI.usingRestWrapper().assertStatusCodeIs(OK);
+        assertStatusCode(OK);
         
         // create electronic and non-electronic records in a folder
         FilePlanComponentAPI filePlanComponentsAPI = getRestAPIFactory().getFilePlanComponentsAPI();
diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/site/RMSiteTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/site/RMSiteTests.java
index d7cf4b9435..b1c4179577 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/site/RMSiteTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/site/RMSiteTests.java
@@ -51,11 +51,9 @@ import static org.testng.Assert.assertNotNull;
 import org.alfresco.rest.rm.community.base.BaseRMRestTest;
 import org.alfresco.rest.rm.community.model.site.RMSite;
 import org.alfresco.rest.rm.community.requests.igCoreAPI.RMSiteAPI;
-import org.alfresco.rest.rm.community.requests.igCoreAPI.RMUserAPI;
 import org.alfresco.utility.data.RandomData;
 import org.alfresco.utility.model.UserModel;
 import org.alfresco.utility.report.Bug;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.testng.annotations.Test;
 
 /**
@@ -67,9 +65,6 @@ import org.testng.annotations.Test;
  */
 public class RMSiteTests extends BaseRMRestTest
 {
-    @Autowired
-    private RMUserAPI rmUserAPI;
-
     /**
      * Given that RM module is installed
      * When I want to create the RM site with specific title, description and compliance
@@ -208,7 +203,7 @@ public class RMSiteTests extends BaseRMRestTest
         }
 
         // Create user
-        rmUserAPI.createUser(ANOTHER_ADMIN);
+        getRestAPIFactory().getRMUserAPI().createUser(ANOTHER_ADMIN);
 
         // Create the RM site
         RMSite rmSiteModel = getRestAPIFactory().getRMSiteAPI(new UserModel(ANOTHER_ADMIN, DEFAULT_PASSWORD)).createRMSite(createDOD5015RMSiteModel());

From b37a34c4a9a02e5df93cd88d6d2a9385fcad39b6 Mon Sep 17 00:00:00 2001
From: Kristijan Conkas 
Date: Wed, 25 Jan 2017 10:26:53 +0000
Subject: [PATCH 14/61] RM-4615: taking TestData out of API wrapper to avoid
 compile-time problems.

---
 .../rest/rm/community/requests/igCoreAPI/RMUserAPI.java  | 9 +++++----
 .../org/alfresco/rest/rm/community/site/RMSiteTests.java | 3 ++-
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java
index 5eb0a648bd..50c114fb81 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java
@@ -42,7 +42,6 @@ import org.alfresco.dataprep.AlfrescoHttpClient;
 import org.alfresco.dataprep.AlfrescoHttpClientFactory;
 import org.alfresco.rest.core.RMRestProperties;
 import org.alfresco.rest.core.RMRestWrapper;
-import org.alfresco.rest.rm.community.base.TestData;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent;
 import org.alfresco.rest.rm.community.model.user.UserPermissions;
 import org.alfresco.rest.rm.community.requests.RMModelRequest;
@@ -156,9 +155,11 @@ public class RMUserAPI extends RMModelRequest
      * Creates a user with the given name using the old APIs
      *
      * @param userName The user name
+     * @param userPassword The user's password
+     * @param userEmail The user's e-mail address
      * @return true if the user was created successfully, false otherwise.
      */
-    public boolean createUser(String userName)
+    public boolean createUser(String userName, String userPassword, String userEmail)
     {
         AlfrescoHttpClient client = getAlfrescoHttpClient();
         
@@ -166,8 +167,8 @@ public class RMUserAPI extends RMModelRequest
             .add("userName", userName)
             .add("firstName", userName)
             .add("lastName", userName)
-            .add("password", TestData.DEFAULT_PASSWORD)
-            .add("email", TestData.DEFAULT_EMAIL)
+            .add("password", userPassword)
+            .add("email", userEmail)
             .getJson();
         
         RequestSpecification spec = new RequestSpecBuilder()
diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/site/RMSiteTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/site/RMSiteTests.java
index b1c4179577..5cc5dffb32 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/site/RMSiteTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/site/RMSiteTests.java
@@ -49,6 +49,7 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 
 import org.alfresco.rest.rm.community.base.BaseRMRestTest;
+import org.alfresco.rest.rm.community.base.TestData;
 import org.alfresco.rest.rm.community.model.site.RMSite;
 import org.alfresco.rest.rm.community.requests.igCoreAPI.RMSiteAPI;
 import org.alfresco.utility.data.RandomData;
@@ -203,7 +204,7 @@ public class RMSiteTests extends BaseRMRestTest
         }
 
         // Create user
-        getRestAPIFactory().getRMUserAPI().createUser(ANOTHER_ADMIN);
+        getRestAPIFactory().getRMUserAPI().createUser(ANOTHER_ADMIN, TestData.DEFAULT_PASSWORD, TestData.DEFAULT_EMAIL);
 
         // Create the RM site
         RMSite rmSiteModel = getRestAPIFactory().getRMSiteAPI(new UserModel(ANOTHER_ADMIN, DEFAULT_PASSWORD)).createRMSite(createDOD5015RMSiteModel());

From 10105b4c214e219b7e75601178f62234b2a3ba46 Mon Sep 17 00:00:00 2001
From: Kristijan Conkas 
Date: Wed, 25 Jan 2017 11:32:12 +0000
Subject: [PATCH 15/61] RM-4615: removed hardcoding

---
 .../requests/igCoreAPI/RMUserAPI.java         | 31 +++++++++++--------
 1 file changed, 18 insertions(+), 13 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java
index 50c114fb81..4462d2a14c 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java
@@ -44,6 +44,7 @@ import org.alfresco.rest.core.RMRestProperties;
 import org.alfresco.rest.core.RMRestWrapper;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent;
 import org.alfresco.rest.rm.community.model.user.UserPermissions;
+import org.alfresco.rest.rm.community.model.user.UserRoles;
 import org.alfresco.rest.rm.community.requests.RMModelRequest;
 import org.alfresco.utility.model.UserModel;
 import org.springframework.context.annotation.Scope;
@@ -62,11 +63,6 @@ import org.springframework.stereotype.Component;
 @Scope (value = "prototype")
 public class RMUserAPI extends RMModelRequest
 {
-//    @Autowired
-//    private UserService userService;
-    
-    private UserModel dataUser = new UserModel("admin", "admin");
-    
     /**
      * @param rmRestWrapper
      */
@@ -75,9 +71,14 @@ public class RMUserAPI extends RMModelRequest
         super(rmRestWrapper);
     }
 
+    /**
+     * Helper method to obtain {@link AlfrescoHttpClient}
+     * @return Initialized {@link AlfrescoHttpClient} instance
+     */
     private AlfrescoHttpClient getAlfrescoHttpClient()
     {
         RMRestProperties properties = getRMRestWrapper().getRmRestProperties();
+        
         AlfrescoHttpClientFactory factory = new AlfrescoHttpClientFactory();
         factory.setHost(properties.getServer());
         factory.setPort(Integer.parseInt(properties.getPort()));
@@ -86,8 +87,16 @@ public class RMUserAPI extends RMModelRequest
         return factory.getObject();
     }
     
+    /**
+     * Assign RM role to user
+     * @param userName User's username
+     * @param userRole User's RM role, one of {@link UserRoles} roles
+     * @throws Exception for failed requests
+     */
     public void assignRoleToUser(String userName, String userRole) throws Exception
     {
+        UserModel dataUser = getRMRestWrapper().getTestUser();
+            
         // get an "old-style" REST API client
         AlfrescoHttpClient client = getAlfrescoHttpClient();
 
@@ -119,6 +128,8 @@ public class RMUserAPI extends RMModelRequest
      */
     public void addUserPermission(FilePlanComponent component, UserModel user, String permission)
     {
+        UserModel dataUser = getRMRestWrapper().getTestUser();
+        
         // get an "old-style" REST API client
         AlfrescoHttpClient client = getAlfrescoHttpClient();
 
@@ -161,6 +172,7 @@ public class RMUserAPI extends RMModelRequest
      */
     public boolean createUser(String userName, String userPassword, String userEmail)
     {
+        UserModel dataUser = getRMRestWrapper().getTestUser();
         AlfrescoHttpClient client = getAlfrescoHttpClient();
         
         JsonObject body = buildObject()
@@ -188,13 +200,6 @@ public class RMUserAPI extends RMModelRequest
             .prettyPeek()
             .andReturn();
         
-        if (response.getStatusCode() == OK.value())
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
+        return (response.getStatusCode() == OK.value());
     }
 }

From 9b9110e745ca2620cd16637b041cb03522e8833a Mon Sep 17 00:00:00 2001
From: Tuna Aksoy 
Date: Wed, 25 Jan 2017 12:05:15 +0000
Subject: [PATCH 16/61] RM-4576 (Addressed review comments)

---
 .../rm-service-context.xml                    | 42 +++++++++++--------
 1 file changed, 25 insertions(+), 17 deletions(-)

diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml
index 66f92689d0..0301dd0644 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml
@@ -1,7 +1,18 @@
 
-
-
-
+
 
    
 
@@ -1063,20 +1074,17 @@
         
     
 
-   
-      
-         
-            http://www.alfresco.org/model/security/1.0
-            http://www.alfresco.org/model/system/1.0
-            http://www.alfresco.org/model/workflow/1.0
-            http://www.alfresco.org/model/application/1.0
-            http://www.alfresco.org/model/datalist/1.0
-            http://www.alfresco.org/model/dictionary/1.0
-            http://www.alfresco.org/model/bpm/1.0
-            http://www.alfresco.org/model/rendition/1.0
-         
-      
-   
+   
+   
+      http://www.alfresco.org/model/security/1.0
+      http://www.alfresco.org/model/system/1.0
+      http://www.alfresco.org/model/workflow/1.0
+      http://www.alfresco.org/model/application/1.0
+      http://www.alfresco.org/model/datalist/1.0
+      http://www.alfresco.org/model/dictionary/1.0
+      http://www.alfresco.org/model/bpm/1.0
+      http://www.alfresco.org/model/rendition/1.0
+   
 
     
     	

From d940b065d5d0eddf8d7251046e5b6e6aa855083b Mon Sep 17 00:00:00 2001
From: Rodica Sutu 
Date: Wed, 25 Jan 2017 14:12:33 +0200
Subject: [PATCH 17/61] -add tests for the issue RM-4568

---
 .../ElectronicRecordTests.java                | 85 +++++++++++++++++++
 1 file changed, 85 insertions(+)

diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
index 5ab98ae61c..f99758b97f 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
@@ -26,6 +26,9 @@
  */
 package org.alfresco.rest.rm.community.fileplancomponents;
 
+import static org.alfresco.rest.rm.community.base.TestData.CATEGORY_NAME;
+import static org.alfresco.rest.rm.community.base.TestData.ELECTRONIC_RECORD_NAME;
+import static org.alfresco.rest.rm.community.base.TestData.FOLDER_NAME;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.FILE_PLAN_ALIAS;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.HOLDS_ALIAS;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.TRANSFERS_ALIAS;
@@ -34,6 +37,8 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
 import static org.alfresco.rest.rm.community.util.PojoUtility.toJson;
 import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.IMAGE_FILE;
 import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createElectronicRecordModel;
+import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createTempFile;
+import static org.alfresco.utility.data.RandomData.getRandomAlphanumeric;
 import static org.springframework.http.HttpStatus.BAD_REQUEST;
 import static org.springframework.http.HttpStatus.CREATED;
 import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY;
@@ -42,7 +47,11 @@ import static org.testng.Assert.assertTrue;
 
 import org.alfresco.rest.rm.community.base.BaseRMRestTest;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent;
+import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentContent;
+import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields;
+import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentProperties;
 import org.alfresco.rest.rm.community.requests.igCoreAPI.FilePlanComponentAPI;
+import org.alfresco.utility.report.Bug;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
@@ -241,4 +250,80 @@ public class ElectronicRecordTests extends BaseRMRestTest
         // and end with its extension
         assertTrue(electronicRecord.getName().startsWith(IMAGE_FILE.substring(0, IMAGE_FILE.indexOf("."))));
     }
+
+    @Test
+    @Bug (id = "RM-4568")
+    /**
+     * Given I want to create an electronic record
+     * When I use the path relative to the filePlanComponentid
+     * Then the containers in the relativePath that don't exist are created before creating the electronic record
+
+     */
+    public void createElectronicRecordWithRelativePath() throws Exception
+    {
+        //the containers specified on the RELATIVE_PATH parameter don't exist on server
+        String RELATIVE_PATH = CATEGORY_NAME + "/"+ CATEGORY_NAME +"/"+ FOLDER_NAME;
+        FilePlanComponent electronicRecord = FilePlanComponent.builder()
+                                                              .name(ELECTRONIC_RECORD_NAME)
+                                                              .nodeType(CONTENT_TYPE.toString())
+                                                              .content(FilePlanComponentContent.builder().mimeType("text/plain").build())
+                                                              .properties(FilePlanComponentProperties.builder().description("Description").build())
+                                                              .relativePath(RELATIVE_PATH)
+                                                              .build();
+
+        FilePlanComponentAPI filePlanComponentsAPI = getRestAPIFactory().getFilePlanComponentsAPI();
+        FilePlanComponent recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord,
+                                                                    createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME), FILE_PLAN_ALIAS);
+        // verify the create request status code
+       assertStatusCode(CREATED);
+
+        // get newly created electronic record and verify its properties
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId()).getName().startsWith(ELECTRONIC_RECORD_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().equals(FOLDER_NAME));
+        //get newly created electronic record using the relativePath
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS,
+                                                                FilePlanComponentFields.RELATIVE_PATH + "=" + RELATIVE_PATH + "/" + recordCreated.getName())
+                                        .getId().equals(recordCreated.getId()));
+
+        //the category specified via the RELATIVE_PATH exist, folder doesn't exist
+        RELATIVE_PATH = CATEGORY_NAME + "/" + FOLDER_NAME;
+        electronicRecord.setRelativePath(RELATIVE_PATH);
+        recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord, createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME), FILE_PLAN_ALIAS);
+        // verify the create request status code
+        assertStatusCode(CREATED);
+        // get newly created electronic record and verify its properties
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId()).getName().startsWith(ELECTRONIC_RECORD_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().startsWith(FOLDER_NAME));
+        //get newly created electronic record using the relativePath
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS,
+                                                FilePlanComponentFields.RELATIVE_PATH+"="+RELATIVE_PATH+"/"+recordCreated.getName())
+                                        .getId().equals(recordCreated.getId()));
+
+        //the containers from the RELATIVE PATH exists
+        electronicRecord.setName(ELECTRONIC_RECORD_NAME + getRandomAlphanumeric());
+        recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord,
+                                                createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME),
+                                                                FILE_PLAN_ALIAS);
+        // verify the create request status code
+        assertStatusCode(CREATED);
+        // get newly created electronic record and verify its properties
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId()).getName().startsWith(ELECTRONIC_RECORD_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().startsWith(FOLDER_NAME));
+        //get newly created electronic record using the relativePath
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS, FilePlanComponentFields.RELATIVE_PATH + "=" + RELATIVE_PATH + "/" + recordCreated.getName())
+                                        .getId().equals(recordCreated.getId()));
+
+        String categoryId =filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS, FilePlanComponentFields.RELATIVE_PATH + "="+CATEGORY_NAME)
+                                                .getId();
+        RELATIVE_PATH="Category two/"+FOLDER_NAME;
+        electronicRecord.setRelativePath(RELATIVE_PATH);
+        recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord,
+                                                createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME),categoryId);
+        // verify the create request status code
+        assertStatusCode(CREATED);
+        // get newly created electronic record and verify its properties
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId()).getName().startsWith(ELECTRONIC_RECORD_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().startsWith(FOLDER_NAME));
+
+    }
 }

From 45fb371de709501281f52375a305034456613364 Mon Sep 17 00:00:00 2001
From: Kristijan Conkas 
Date: Wed, 25 Jan 2017 13:30:29 +0000
Subject: [PATCH 18/61] RM-4615: TAS implementation of
 FilePlanComponentAPI.createElectronicRecord()

---
 .../igCoreAPI/FilePlanComponentAPI.java       | 49 +++++++++----------
 .../requests/igCoreAPI/RMUserAPI.java         | 14 +++---
 .../requests/igCoreAPI/RecordsAPI.java        |  1 -
 .../ElectronicRecordTests.java                | 13 +++--
 4 files changed, 39 insertions(+), 38 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java
index cdd8530dc1..378615d402 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java
@@ -26,9 +26,6 @@
  */
 package org.alfresco.rest.rm.community.requests.igCoreAPI;
 
-import static com.jayway.restassured.RestAssured.basic;
-import static com.jayway.restassured.RestAssured.given;
-
 import static org.alfresco.rest.core.RestRequest.requestWithBody;
 import static org.alfresco.rest.core.RestRequest.simpleRequest;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.CONTENT_TYPE;
@@ -50,13 +47,13 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.io.Resources;
 import com.jayway.restassured.builder.RequestSpecBuilder;
 import com.jayway.restassured.http.ContentType;
-import com.jayway.restassured.response.Response;
 
 import org.alfresco.rest.core.RMRestWrapper;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentsCollection;
 import org.alfresco.rest.rm.community.requests.RMModelRequest;
-import org.alfresco.utility.model.UserModel;
+import org.alfresco.utility.model.ContentModel;
+import org.alfresco.utility.model.RepoTestModel;
 
 /**
  * File plan component REST API Wrapper
@@ -250,41 +247,41 @@ public class FilePlanComponentAPI extends RMModelRequest
         {
             fail("Only electronic records are supported");
         }
-
-        UserModel currentUser = getRMRestWrapper().getTestUser();
-
+        
+        RepoTestModel parentNode = new ContentModel();
+        // using getFilePlanComponent to work around RM special containers, unsupported in Core API usingNode()
+        parentNode.setNodeRef(getFilePlanComponent(parentId).getId());
+        
         /*
          * For file uploads nodeBodyCreate is ignored hence can't be used. Append all FilePlanComponent fields
          * to the request.
          */
-        RequestSpecBuilder builder = new RequestSpecBuilder();
-        builder.setAuth(basic(currentUser.getUsername(), currentUser.getPassword()));
-
+        RequestSpecBuilder builder = restWrapper.configureRequestSpec();
         ObjectMapper mapper = new ObjectMapper();
         JsonNode root = mapper.readTree(toJson(electronicRecordModel));
 
+        // add request fields
         Iterator fieldNames = root.fieldNames();
         while (fieldNames.hasNext())
         {
             String fieldName = fieldNames.next();
             builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name());
         }
-
+        
         builder.addMultiPart("filedata", recordContent, ContentType.BINARY.name());
-
-        /*
-         * RestWrapper adds some headers which break multipart/form-data uploads and also assumes json POST requests.
-         * Upload the file using RestAssured library.
-         */
-        Response response = given()
-            .spec(builder.build())
-        .when()
-            .post("fileplan-components/{fileplanComponentId}/children?{parameters}", parentId, getRMRestWrapper().getParameters())
-            .andReturn();
-        getRMRestWrapper().setStatusCode(Integer.toString(response.getStatusCode()));
-
-        /* return a FilePlanComponent object representing Response */
-        return response.jsonPath().getObject("entry", FilePlanComponent.class);
+        String nodeId = getRMRestWrapper().withCoreAPI().usingNode(parentNode).createNode().getId();
+        String createStatusCode = getRMRestWrapper().getStatusCode();
+        
+        // return FilePlanComponent for created node
+        FilePlanComponent createdComponent = getRMRestWrapper()
+            .withIGCoreAPI()
+            .usingFilePlanComponents()
+            .getFilePlanComponent(nodeId);
+        
+        // avoid getFilePlanComponent() overriding the createNode status code
+        getRMRestWrapper().setStatusCode(createStatusCode);
+        
+        return createdComponent;
     }
 
     /**
diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java
index 4462d2a14c..d1c4ff0535 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RMUserAPI.java
@@ -95,7 +95,7 @@ public class RMUserAPI extends RMModelRequest
      */
     public void assignRoleToUser(String userName, String userRole) throws Exception
     {
-        UserModel dataUser = getRMRestWrapper().getTestUser();
+        UserModel adminUser = getRMRestWrapper().getTestUser();
             
         // get an "old-style" REST API client
         AlfrescoHttpClient client = getAlfrescoHttpClient();
@@ -111,8 +111,8 @@ public class RMUserAPI extends RMModelRequest
             .log().all()
             .pathParam("role", userRole)
             .pathParam("authority", userName)
-            .param("alf_ticket", client.getAlfTicket(dataUser.getUsername(), 
-                dataUser.getPassword()))
+            .param("alf_ticket", client.getAlfTicket(adminUser.getUsername(), 
+                adminUser.getPassword()))
         .when()
             .post("/rm/roles/{role}/authorities/{authority}")
             .prettyPeek()
@@ -128,7 +128,7 @@ public class RMUserAPI extends RMModelRequest
      */
     public void addUserPermission(FilePlanComponent component, UserModel user, String permission)
     {
-        UserModel dataUser = getRMRestWrapper().getTestUser();
+        UserModel adminUser = getRMRestWrapper().getTestUser();
         
         // get an "old-style" REST API client
         AlfrescoHttpClient client = getAlfrescoHttpClient();
@@ -150,7 +150,7 @@ public class RMUserAPI extends RMModelRequest
         // execute an "old-style" API call
         Response response = given()
             .spec(spec)
-            .auth().basic(dataUser.getUsername(), dataUser.getPassword())
+            .auth().basic(adminUser.getUsername(), adminUser.getPassword())
             .contentType(ContentType.JSON)
             .body(bodyJson.toString())
             .pathParam("nodeId", component.getId())
@@ -172,7 +172,7 @@ public class RMUserAPI extends RMModelRequest
      */
     public boolean createUser(String userName, String userPassword, String userEmail)
     {
-        UserModel dataUser = getRMRestWrapper().getTestUser();
+        UserModel adminUser = getRMRestWrapper().getTestUser();
         AlfrescoHttpClient client = getAlfrescoHttpClient();
         
         JsonObject body = buildObject()
@@ -186,7 +186,7 @@ public class RMUserAPI extends RMModelRequest
         RequestSpecification spec = new RequestSpecBuilder()
             .setBaseUri(client.getApiUrl())
             .setBasePath("/")
-            .setAuth(basic(dataUser.getUsername(), dataUser.getPassword()))
+            .setAuth(basic(adminUser.getUsername(), adminUser.getPassword()))
             .setContentType(ContentType.JSON)
             .setBody(body.toString())
             .build();
diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RecordsAPI.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RecordsAPI.java
index efcaca97ef..d5c3951387 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RecordsAPI.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RecordsAPI.java
@@ -144,6 +144,5 @@ public class RecordsAPI extends RMModelRequest
             parameters
         ));
     }
-
 }
 
diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
index 5ab98ae61c..1ebda02bf9 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
@@ -87,11 +87,12 @@ public class ElectronicRecordTests extends BaseRMRestTest
     @Test
     (
         dataProvider = "invalidParentContainers",
-        description = "Electronic records can't be created in invalid parent containers"
+        description = "Electronic records can't be created in invalid parent containers",
+        expectedExceptions = IllegalArgumentException.class
     )
     public void cantCreateElectronicRecordsInInvalidContainers(FilePlanComponent container) throws Exception
     {
-        // Build object the filePlan
+        // Build object the filePlan, this should throw an IllegalArgumentException
         getRestAPIFactory().getFilePlanComponentsAPI().createElectronicRecord(createElectronicRecordModel(), IMAGE_FILE, container.getId());
 
         // verify the create request status code
@@ -108,7 +109,11 @@ public class ElectronicRecordTests extends BaseRMRestTest
      * 
* @throws Exception */ - @Test(description = "Electronic record can't be created in closed record folder") + @Test + ( + description = "Electronic record can't be created in closed record folder", + expectedExceptions = IllegalArgumentException.class + ) public void cantCreateElectronicRecordInClosedFolder() throws Exception { FilePlanComponent recordFolder = createCategoryFolderInFilePlan(); @@ -119,7 +124,7 @@ public class ElectronicRecordTests extends BaseRMRestTest // close the folder closeFolder(recordFolder.getId()); - // try to create it, this should fail + // try to create it, this should throw IllegalArgumentException getRestAPIFactory().getFilePlanComponentsAPI().createElectronicRecord(createElectronicRecordModel(), IMAGE_FILE, recordFolder.getId()); // verify the status code From 7f72a6da2269040a4761e6a88e335070f72b392c Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Wed, 25 Jan 2017 13:42:03 +0000 Subject: [PATCH 19/61] RM-4576 (Updated the expected status code for the case when someone tries to modify the meta data of a closed record) --- .../UpdateRecordsTests.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/UpdateRecordsTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/UpdateRecordsTests.java index e2738c2fca..82ff77fabe 100644 --- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/UpdateRecordsTests.java +++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/UpdateRecordsTests.java @@ -29,8 +29,8 @@ package org.alfresco.rest.rm.community.fileplancomponents; import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.IMAGE_FILE; import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createElectronicRecordModel; import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createNonElectronicRecordModel; -import static org.springframework.http.HttpStatus.BAD_REQUEST; import static org.springframework.http.HttpStatus.CREATED; +import static org.springframework.http.HttpStatus.FORBIDDEN; import static org.springframework.http.HttpStatus.OK; import static org.testng.Assert.assertEquals; @@ -62,10 +62,10 @@ public class UpdateRecordsTests extends BaseRMRestTest { @Autowired private RMUserAPI rmUserAPI; - + /* to be used to append to modifications */ private final String MODIFIED_PREFIX = "modified_"; - + /** *
      * Given an incomplete record
@@ -83,14 +83,14 @@ public class UpdateRecordsTests extends BaseRMRestTest
     public void incompleteRecordsCanBeUpdated(FilePlanComponent recordFolder) throws Exception
     {
         FilePlanComponentAPI filePlanComponentsAPI = getRestAPIFactory().getFilePlanComponentsAPI();
-        
+
         // create electronic and non-electronic records in a folder
         FilePlanComponent electronicRecord = filePlanComponentsAPI.createElectronicRecord(createElectronicRecordModel(), IMAGE_FILE, recordFolder.getId());
         assertStatusCode(CREATED);
         FilePlanComponent nonElectronicRecord = filePlanComponentsAPI.createFilePlanComponent(createNonElectronicRecordModel(), recordFolder.getId());
         assertStatusCode(CREATED);
-        
-        for (FilePlanComponent record: Arrays.asList(electronicRecord, nonElectronicRecord)) {            
+
+        for (FilePlanComponent record: Arrays.asList(electronicRecord, nonElectronicRecord)) {
             // generate update metadata
             String newName = getModifiedPropertyValue(record.getName());
             String newTitle = getModifiedPropertyValue(record.getProperties().getTitle());
@@ -115,7 +115,7 @@ public class UpdateRecordsTests extends BaseRMRestTest
             assertEquals(updatedRecord.getProperties().getDescription(), newDescription);
         }
     }
-    
+
     /**
      * 
      * Given an incomplete record
@@ -131,7 +131,7 @@ public class UpdateRecordsTests extends BaseRMRestTest
     )
     @AlfrescoTest(jira="RM-4362")
     public void userWithEditMetadataCapsCanUpdateMetadata() throws Exception
-    {   
+    {
         // create test user and add it with collab. privileges
         UserModel updateUser = getDataUser().createRandomTestUser("updateuser");
         updateUser.setUserRole(UserRole.SiteCollaborator);
@@ -151,21 +151,21 @@ public class UpdateRecordsTests extends BaseRMRestTest
         rmUserAPI.addUserPermission(filePlanComponentsAPIAsAdmin.getFilePlanComponent(randomFolder.getParentId()),
             updateUser, UserPermissions.PERMISSION_FILING);
         rmUserAPI.usingRestWrapper().assertStatusCodeIs(OK);
-        
+
         // create electronic and non-electronic records in a folder
         FilePlanComponentAPI filePlanComponentsAPI = getRestAPIFactory().getFilePlanComponentsAPI();
         FilePlanComponent electronicRecord = filePlanComponentsAPI.createElectronicRecord(createElectronicRecordModel(), IMAGE_FILE, randomFolder.getId());
         assertStatusCode(CREATED);
         FilePlanComponent nonElectronicRecord = filePlanComponentsAPI.createFilePlanComponent(createNonElectronicRecordModel(), randomFolder.getId());
         assertStatusCode(CREATED);
-        
+
         // get FilePlanComponentAPI instance initialised to updateUser
         FilePlanComponentAPI filePlanComponentsAPIAsUser = getRestAPIFactory().getFilePlanComponentsAPI(updateUser);
-        
+
         for (FilePlanComponent record: Arrays.asList(electronicRecord, nonElectronicRecord)) {
             filePlanComponentsAPIAsUser.getFilePlanComponent(record.getId());
             assertStatusCode(OK);
-            
+
             // generate update metadata
             String newName = getModifiedPropertyValue(record.getName());
             String newTitle = getModifiedPropertyValue(record.getProperties().getTitle());
@@ -191,7 +191,7 @@ public class UpdateRecordsTests extends BaseRMRestTest
             assertEquals(updatedRecord.getModifiedByUser().getId(), updateUser.getUsername());
         }
     }
-    
+
     /**
      * 
      * Given a complete record
@@ -210,16 +210,16 @@ public class UpdateRecordsTests extends BaseRMRestTest
     public void completeRecordsCantBeUpdated(FilePlanComponent recordFolder) throws Exception
     {
         FilePlanComponentAPI filePlanComponentsAPI = getRestAPIFactory().getFilePlanComponentsAPI();
-        
+
         // create electronic and non-electronic records in a folder
         FilePlanComponent electronicRecord = filePlanComponentsAPI.createElectronicRecord(createElectronicRecordModel(), IMAGE_FILE, recordFolder.getId());
         assertStatusCode(CREATED);
         closeRecord(electronicRecord);
-       
+
         FilePlanComponent nonElectronicRecord = filePlanComponentsAPI.createFilePlanComponent(createNonElectronicRecordModel(), recordFolder.getId());
         assertStatusCode(CREATED);
         closeRecord(nonElectronicRecord);
-        
+
         for (FilePlanComponent record: Arrays.asList(electronicRecord, nonElectronicRecord)) {
             // generate update metadata
             String newName = getModifiedPropertyValue(record.getName());
@@ -236,7 +236,7 @@ public class UpdateRecordsTests extends BaseRMRestTest
 
             // attempt to update record
             filePlanComponentsAPI.updateFilePlanComponent(updateRecord, record.getId());
-            assertStatusCode(BAD_REQUEST);
+            assertStatusCode(FORBIDDEN);
 
             // verify the original record metatada has been retained
             FilePlanComponent updatedRecord = filePlanComponentsAPI.getFilePlanComponent(record.getId());
@@ -245,7 +245,7 @@ public class UpdateRecordsTests extends BaseRMRestTest
             assertEquals(updatedRecord.getProperties().getDescription(), record.getProperties().getTitle());
         }
     }
-    
+
     /**
      * Helper method to generate modified property value based on original value
      * @param originalValue original value

From a513235bbb022c332f6c002e9c0f80e6ce23b128 Mon Sep 17 00:00:00 2001
From: Rodica Sutu 
Date: Wed, 25 Jan 2017 14:12:33 +0200
Subject: [PATCH 20/61] -add tests for the issue RM-4568

---
 .../ElectronicRecordTests.java                | 83 +++++++++++++++++++
 1 file changed, 83 insertions(+)

diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
index 5ab98ae61c..fcbab41ccf 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
@@ -26,6 +26,9 @@
  */
 package org.alfresco.rest.rm.community.fileplancomponents;
 
+import static org.alfresco.rest.rm.community.base.TestData.CATEGORY_NAME;
+import static org.alfresco.rest.rm.community.base.TestData.ELECTRONIC_RECORD_NAME;
+import static org.alfresco.rest.rm.community.base.TestData.FOLDER_NAME;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.FILE_PLAN_ALIAS;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.HOLDS_ALIAS;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.TRANSFERS_ALIAS;
@@ -34,6 +37,8 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
 import static org.alfresco.rest.rm.community.util.PojoUtility.toJson;
 import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.IMAGE_FILE;
 import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createElectronicRecordModel;
+import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createTempFile;
+import static org.alfresco.utility.data.RandomData.getRandomAlphanumeric;
 import static org.springframework.http.HttpStatus.BAD_REQUEST;
 import static org.springframework.http.HttpStatus.CREATED;
 import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY;
@@ -42,7 +47,10 @@ import static org.testng.Assert.assertTrue;
 
 import org.alfresco.rest.rm.community.base.BaseRMRestTest;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent;
+import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentContent;
+import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields;
 import org.alfresco.rest.rm.community.requests.igCoreAPI.FilePlanComponentAPI;
+import org.alfresco.utility.report.Bug;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
@@ -241,4 +249,79 @@ public class ElectronicRecordTests extends BaseRMRestTest
         // and end with its extension
         assertTrue(electronicRecord.getName().startsWith(IMAGE_FILE.substring(0, IMAGE_FILE.indexOf("."))));
     }
+
+    @Test
+    @Bug (id = "RM-4568")
+    /**
+     * Given I want to create an electronic record
+     * When I use the path relative to the filePlanComponentid
+     * Then the containers in the relativePath that don't exist are created before creating the electronic record
+
+     */
+    public void createElectronicRecordWithRelativePath() throws Exception
+    {
+        //the containers specified on the RELATIVE_PATH parameter don't exist on server
+        String RELATIVE_PATH = CATEGORY_NAME + "/"+ CATEGORY_NAME +"/"+ FOLDER_NAME;
+        FilePlanComponent electronicRecord = FilePlanComponent.builder()
+                                                              .name(ELECTRONIC_RECORD_NAME)
+                                                              .nodeType(CONTENT_TYPE.toString())
+                                                              .content(FilePlanComponentContent.builder().mimeType("text/plain").build())
+                                                              .relativePath(RELATIVE_PATH)
+                                                              .build();
+
+        FilePlanComponentAPI filePlanComponentsAPI = getRestAPIFactory().getFilePlanComponentsAPI();
+        FilePlanComponent recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord,
+                                                                    createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME), FILE_PLAN_ALIAS);
+        // verify the create request status code
+       assertStatusCode(CREATED);
+
+        // get newly created electronic record and verify its properties
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId()).getName().startsWith(ELECTRONIC_RECORD_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().equals(FOLDER_NAME));
+        //get newly created electronic record using the relativePath
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS,
+                                                                FilePlanComponentFields.RELATIVE_PATH + "=" + RELATIVE_PATH + "/" + recordCreated.getName())
+                                        .getId().equals(recordCreated.getId()));
+
+        //the category specified via the RELATIVE_PATH exist, folder doesn't exist
+        RELATIVE_PATH = CATEGORY_NAME + "/" + FOLDER_NAME;
+        electronicRecord.setRelativePath(RELATIVE_PATH);
+        recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord, createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME), FILE_PLAN_ALIAS);
+        // verify the create request status code
+        assertStatusCode(CREATED);
+        // get newly created electronic record and verify its properties
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId()).getName().startsWith(ELECTRONIC_RECORD_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().startsWith(FOLDER_NAME));
+        //get newly created electronic record using the relativePath
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS,
+                                                FilePlanComponentFields.RELATIVE_PATH+"="+RELATIVE_PATH+"/"+recordCreated.getName())
+                                        .getId().equals(recordCreated.getId()));
+
+        //the containers from the RELATIVE PATH exists
+        electronicRecord.setName(ELECTRONIC_RECORD_NAME + getRandomAlphanumeric());
+        recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord,
+                                                createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME),
+                                                                FILE_PLAN_ALIAS);
+        // verify the create request status code
+        assertStatusCode(CREATED);
+        // get newly created electronic record and verify its properties
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId()).getName().startsWith(ELECTRONIC_RECORD_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().startsWith(FOLDER_NAME));
+        //get newly created electronic record using the relativePath
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS, FilePlanComponentFields.RELATIVE_PATH + "=" + RELATIVE_PATH + "/" + recordCreated.getName())
+                                        .getId().equals(recordCreated.getId()));
+
+        String categoryId =filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS, FilePlanComponentFields.RELATIVE_PATH + "="+CATEGORY_NAME)
+                                                .getId();
+        RELATIVE_PATH="Category two/"+FOLDER_NAME;
+        electronicRecord.setRelativePath(RELATIVE_PATH);
+        recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord,
+                                                createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME),categoryId);
+        // verify the create request status code
+        assertStatusCode(CREATED);
+        // get newly created electronic record and verify its properties
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId()).getName().startsWith(ELECTRONIC_RECORD_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().startsWith(FOLDER_NAME));
+
+    }
 }

From 970cf4ee064e16eebc8ad04e66c9601ce4029be6 Mon Sep 17 00:00:00 2001
From: Rodica Sutu 
Date: Wed, 25 Jan 2017 16:26:57 +0200
Subject: [PATCH 21/61] minor updates

---
 .../community/fileplancomponents/ElectronicRecordTests.java | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
index f99758b97f..2936131f06 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
@@ -313,9 +313,10 @@ public class ElectronicRecordTests extends BaseRMRestTest
         assertTrue(filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS, FilePlanComponentFields.RELATIVE_PATH + "=" + RELATIVE_PATH + "/" + recordCreated.getName())
                                         .getId().equals(recordCreated.getId()));
 
-        String categoryId =filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS, FilePlanComponentFields.RELATIVE_PATH + "="+CATEGORY_NAME)
+        //create the container structure relative to the  categoryId
+        String categoryId = filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS, FilePlanComponentFields.RELATIVE_PATH + "="+CATEGORY_NAME)
                                                 .getId();
-        RELATIVE_PATH="Category two/"+FOLDER_NAME;
+        RELATIVE_PATH = CATEGORY_NAME+ CATEGORY_NAME+"/"+FOLDER_NAME;
         electronicRecord.setRelativePath(RELATIVE_PATH);
         recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord,
                                                 createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME),categoryId);
@@ -324,6 +325,5 @@ public class ElectronicRecordTests extends BaseRMRestTest
         // get newly created electronic record and verify its properties
         assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId()).getName().startsWith(ELECTRONIC_RECORD_NAME));
         assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().startsWith(FOLDER_NAME));
-
     }
 }

From d475a49c41fc27bcd15966f44054cbcf5752a4ff Mon Sep 17 00:00:00 2001
From: Kristijan Conkas 
Date: Wed, 25 Jan 2017 14:45:28 +0000
Subject: [PATCH 22/61] RM-4615: javadoc tidy-up

---
 .../requests/igCoreAPI/FilePlanComponentAPI.java       | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java
index 378615d402..9aa2fc5729 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java
@@ -237,7 +237,7 @@ public class FilePlanComponentAPI extends RMModelRequest
      * @param recordContent {@link File} pointing to the content of the electronic record to be created
      * @param parentId parent container id
      * @return newly created {@link FilePlanComponent}
-     * @throws Exception if operation failed
+     * @throws Exception if electronic record couldn't be created
      */
     public FilePlanComponent createElectronicRecord(FilePlanComponent electronicRecordModel, File recordContent, String parentId) throws Exception
     {
@@ -256,9 +256,8 @@ public class FilePlanComponentAPI extends RMModelRequest
          * For file uploads nodeBodyCreate is ignored hence can't be used. Append all FilePlanComponent fields
          * to the request.
          */
-        RequestSpecBuilder builder = restWrapper.configureRequestSpec();
-        ObjectMapper mapper = new ObjectMapper();
-        JsonNode root = mapper.readTree(toJson(electronicRecordModel));
+        RequestSpecBuilder builder = getRMRestWrapper().configureRequestSpec();
+        JsonNode root = new ObjectMapper().readTree(toJson(electronicRecordModel));
 
         // add request fields
         Iterator fieldNames = root.fieldNames();
@@ -267,8 +266,9 @@ public class FilePlanComponentAPI extends RMModelRequest
             String fieldName = fieldNames.next();
             builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name());
         }
-        
         builder.addMultiPart("filedata", recordContent, ContentType.BINARY.name());
+        
+        // create node with given content using core Node API
         String nodeId = getRMRestWrapper().withCoreAPI().usingNode(parentNode).createNode().getId();
         String createStatusCode = getRMRestWrapper().getStatusCode();
         

From 9dd7a1cf225252c881d92b523e38003f74872532 Mon Sep 17 00:00:00 2001
From: Kristijan Conkas 
Date: Wed, 25 Jan 2017 15:14:59 +0000
Subject: [PATCH 23/61] RM-4615: get record content implementation

---
 .../requests/igCoreAPI/RecordsAPI.java         | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RecordsAPI.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RecordsAPI.java
index d5c3951387..a11219e193 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RecordsAPI.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RecordsAPI.java
@@ -26,16 +26,15 @@
  */
 package org.alfresco.rest.rm.community.requests.igCoreAPI;
 
-import static com.jayway.restassured.RestAssured.given;
-
 import static org.alfresco.rest.core.RestRequest.requestWithBody;
+import static org.alfresco.rest.core.RestRequest.simpleRequest;
 import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryObject;
 import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryString;
 import static org.alfresco.rest.rm.community.util.PojoUtility.toJson;
 import static org.apache.commons.lang3.StringUtils.EMPTY;
+import static org.springframework.http.HttpMethod.GET;
 import static org.springframework.http.HttpMethod.POST;
 
-import com.jayway.restassured.response.Response;
 import com.jayway.restassured.response.ResponseBody;
 
 import org.alfresco.rest.core.RMRestWrapper;
@@ -79,14 +78,11 @@ public class RecordsAPI extends RMModelRequest
     public ResponseBody getRecordContent(String recordId) throws Exception
     {
         mandatoryString("recordId", recordId);
-        Response response = given()
-                                .auth().basic(getRMRestWrapper().getTestUser().getUsername(),
-                                    getRMRestWrapper().getTestUser().getPassword())
-                            .when()
-                                   .get("records/{recordId}/content", recordId)
-                                   .andReturn();
-        getRMRestWrapper().setStatusCode(Integer.toString(response.getStatusCode()));
-        return response.getBody();
+        
+        return getRMRestWrapper()
+            .processHtmlResponse(simpleRequest(GET,"records/{recordId}/content", recordId))
+            .getBody();
+      
     }
 
     /**

From c84c951c521b3339dedac000a12f45ab5e74a7a0 Mon Sep 17 00:00:00 2001
From: Ana Bozianu 
Date: Thu, 26 Jan 2017 12:05:17 +0200
Subject: [PATCH 24/61] RM-4619 - moved the conversion to the specific types
 before the type check

---
 .../model/rma/type/FilePlanType.java          | 15 +++++++++-
 .../model/rma/type/RecordCategoryType.java    | 22 ++++++++++++---
 .../type/RecordsManagementContainerType.java  | 28 -------------------
 3 files changed, 32 insertions(+), 33 deletions(-)

diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanType.java
index 4ea17baa77..2f88fe7d37 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanType.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanType.java
@@ -30,6 +30,7 @@ package org.alfresco.module.org_alfresco_module_rm.model.rma.type;
 import java.util.Arrays;
 import java.util.List;
 
+import org.alfresco.model.ContentModel;
 import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
 import org.alfresco.module.org_alfresco_module_rm.identifier.IdentifierService;
 import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean;
@@ -208,11 +209,23 @@ public class FilePlanType extends    BaseBehaviourBean
      */
     @Behaviour
     (
-       kind = BehaviourKind.ASSOCIATION
+       kind = BehaviourKind.ASSOCIATION,
+       notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT
     )
     @Override
     public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean bNew)
     {
+        NodeRef child = childAssocRef.getChildRef();
+
+        // We need to automatically cast the created folder to category if it is a plain folder
+        // This occurs if the RM folder has been created via IMap, WebDav, etc
+        // Ignore hidden files. Some modules use hidden files to store information (see RM-3283)
+        if (nodeService.getType(child) == ContentModel.TYPE_FOLDER &&
+                !nodeService.hasAspect(child, ContentModel.ASPECT_HIDDEN))
+        {
+            nodeService.setType(child, TYPE_RECORD_CATEGORY);
+        }
+
         // check the created child is of an accepted type
         validateNewChildAssociation(childAssocRef.getParentRef(), childAssocRef.getChildRef(), ACCEPTED_UNIQUE_CHILD_TYPES, ACCEPTED_NON_UNIQUE_CHILD_TYPES);
     }
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java
index 4f3ae15bef..531c2047eb 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java
@@ -31,6 +31,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import org.alfresco.model.ContentModel;
 import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean;
 import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService;
 import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionService;
@@ -107,18 +108,31 @@ public class RecordCategoryType extends    BaseBehaviourBean
     @Override
     @Behaviour
     (
-       kind = BehaviourKind.ASSOCIATION
+       kind = BehaviourKind.ASSOCIATION,
+       notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT
     )
     public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean bNew)
     {
-        NodeRef nodeRef = childAssocRef.getChildRef();
+        NodeRef child = childAssocRef.getChildRef();
         NodeRef parentRef = childAssocRef.getParentRef();
-        validateNewChildAssociation(parentRef, nodeRef, ACCEPTED_UNIQUE_CHILD_TYPES, ACCEPTED_NON_UNIQUE_CHILD_TYPES);
+        QName childType = nodeService.getType(child);
+
+        // We need to automatically cast the created folder to record folder if it is a plain folder
+        // This occurs if the RM folder has been created via IMap, WebDav, etc
+        // Ignore hidden files. Some modules use hidden files to store information (see RM-3283)
+        if ( childType == ContentModel.TYPE_FOLDER &&
+                !nodeService.hasAspect(child, ContentModel.ASPECT_HIDDEN))
+        {
+            nodeService.setType(child, TYPE_RECORD_FOLDER);
+        }
+
         if (bNew)
         {
             // setup the record folder
-            recordFolderService.setupRecordFolder(nodeRef);
+            recordFolderService.setupRecordFolder(child);
         }
+
+        validateNewChildAssociation(parentRef, child, ACCEPTED_UNIQUE_CHILD_TYPES, ACCEPTED_NON_UNIQUE_CHILD_TYPES);
     }
 
     /**
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java
index 504acd4d86..8276307e1c 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java
@@ -27,7 +27,6 @@
 
 package org.alfresco.module.org_alfresco_module_rm.model.rma.type;
 
-import org.alfresco.error.AlfrescoRuntimeException;
 import org.alfresco.model.ContentModel;
 import org.alfresco.module.org_alfresco_module_rm.identifier.IdentifierService;
 import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean;
@@ -44,7 +43,6 @@ import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
 import org.alfresco.service.cmr.repository.ChildAssociationRef;
 import org.alfresco.service.cmr.repository.NodeRef;
 import org.alfresco.service.namespace.QName;
-import org.springframework.extensions.surf.util.I18NUtil;
 
 /**
  * rma:recordsManagementContainer behaviour bean.
@@ -152,32 +150,6 @@ public class RecordsManagementContainerType extends    BaseBehaviourBean
                         }
                         else
                         {
-                            // We need to automatically cast the created folder to RM type if it is a plain folder
-                            // This occurs if the RM folder has been created via IMap, WebDav, etc
-                            if (!nodeService.hasAspect(child, ASPECT_FILE_PLAN_COMPONENT))
-                            {
-                                // Throw exception if the type is not cm:folder
-                                if (!ContentModel.TYPE_FOLDER.equals(childType))
-                                {
-                                    throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_CANNOT_CAST_TO_RM_TYPE));
-                                }
-                                // check the type of the parent to determine what 'kind' of artifact to create
-                                NodeRef parent = childAssocRef.getParentRef();
-                                QName parentType = nodeService.getType(parent);
-
-                                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!)
                             setIdenifierProperty(child);
                         }

From ca8892195533e6354a89715d9712f3bec7dd5ce7 Mon Sep 17 00:00:00 2001
From: Ana Bozianu 
Date: Thu, 26 Jan 2017 12:16:54 +0200
Subject: [PATCH 25/61] RM-4619 - fixed unit tests

---
 .../model/rma/type/FilePlanTypeUnitTest.java  | 25 ++++++++
 .../rma/type/RecordCategoryTypeUnitTest.java  | 25 ++++++++
 ...ecordsManagementContainerTypeUnitTest.java | 57 ++-----------------
 3 files changed, 55 insertions(+), 52 deletions(-)

diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java
index 607d053242..d25d6ecb19 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java
@@ -27,11 +27,13 @@
 
 package org.alfresco.module.org_alfresco_module_rm.model.rma.type;
 
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import java.util.Arrays;
 
 import org.alfresco.model.ContentModel;
+import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock;
 import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest;
 import org.alfresco.repo.node.integrity.IntegrityException;
 import org.alfresco.service.cmr.repository.ChildAssociationRef;
@@ -180,6 +182,29 @@ public class FilePlanTypeUnitTest extends BaseUnitTest
         filePlanType.onCreateChildAssociation(childAssoc, true);
     }
 
+    /**
+     * Given that we try to add "cm:folder" type to a record category,
+     * Then operation is successful and the folder is automatically converted to a record folder
+     */
+    @Test
+    public void testConversionToRecordFolder() throws Exception
+    {
+        NodeRef fileplan = AlfMock.generateNodeRef(mockedNodeService, TYPE_FILE_PLAN);
+        NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_FOLDER, true);
+        ChildAssociationRef childAssocRef = generateChildAssociationRef(fileplan, nodeRef);
+
+        try
+        {
+            filePlanType.onCreateChildAssociation(childAssocRef, true);
+        }
+        catch(IntegrityException ex)
+        {
+            // this will throw an exception because unit tests can't detect type change
+        }
+
+        verify(mockedNodeService).setType(nodeRef, TYPE_RECORD_CATEGORY);
+    }
+
     /**
      * Helper method that creates a child of the fileplan container with the provided type
      * @param childType the node type of the child to be created
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java
index e32127ff19..ffd6256a2d 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java
@@ -27,6 +27,7 @@
 
 package org.alfresco.module.org_alfresco_module_rm.model.rma.type;
 
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock;
@@ -108,4 +109,28 @@ public class RecordCategoryTypeUnitTest extends BaseUnitTest
         ChildAssociationRef childAssocRef = generateChildAssociationRef(recordCategoryNodeRef, nodeRef);
         recordCategoryType.onCreateChildAssociation(childAssocRef, true);
     }
+
+    /**
+     * Given that we try to add "cm:folder" type to a record category,
+     * Then operation is successful and the folder is automatically converted to a record folder
+     */
+    @Test
+    public void testConversionToRecordFolder() throws Exception
+    {
+        NodeRef recordCategoryNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_CATEGORY);
+        NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_FOLDER, true);
+        ChildAssociationRef childAssocRef = generateChildAssociationRef(recordCategoryNodeRef, nodeRef);
+
+        try
+        {
+            recordCategoryType.onCreateChildAssociation(childAssocRef, true);
+        }
+        catch(IntegrityException ex)
+        {
+            // this will throw an exception because unit tests can't detect type change
+        }
+
+        verify(mockedNodeService).setType(nodeRef, TYPE_RECORD_FOLDER);
+        verify(mockedRecordFolderService).setupRecordFolder(nodeRef);
+    }
 }
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerTypeUnitTest.java
index dfc996c23c..cb12360323 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerTypeUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerTypeUnitTest.java
@@ -26,13 +26,11 @@
  */
 package org.alfresco.module.org_alfresco_module_rm.model.rma.type;
 
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import org.alfresco.error.AlfrescoRuntimeException;
 import org.alfresco.model.ContentModel;
 import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
 import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest;
@@ -52,33 +50,10 @@ public class RecordsManagementContainerTypeUnitTest extends BaseUnitTest
     /** test object */
     private @InjectMocks RecordsManagementContainerType recordManagementContainerType;
 
-    /**
-     * Having the Unfilled Record container and a folder
-     * When adding a child association between the folder and the container
-     * Then the folder type shouldn't be renamed
-     */
-    @Test
-    public void testAddFolderToRMContainer()
-    {
-        /* Having a RM container and a folder */
-        NodeRef rmContainer = generateRMContainer();
-        NodeRef rmFolder = generateFolderNode(false);
-
-        /*
-         * When adding a child association between the folder and the container
-         */
-        ChildAssociationRef childAssoc = new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, rmContainer, ContentModel.ASSOC_CONTAINS, rmFolder);
-        recordManagementContainerType.onCreateChildAssociation(childAssoc, true);
-
-        /* Then the node type should not be changed to TYPE_RECORD_FOLDER */
-        verify(mockedNodeService).setType(rmFolder, TYPE_RECORD_FOLDER);
-        verify(mockedRecordFolderService).setupRecordFolder(rmFolder);
-    }
-
     /**
      * Having the Unfilled Record container and a folder having the aspect ASPECT_HIDDEN
      * When adding a child association between the folder and the container
-     * Then the folder type shouldn't be renamed
+     * Then the new folder should not be altered
      */
      @Test
     public void testAddHiddenFolderToRMContainer()
@@ -93,31 +68,9 @@ public class RecordsManagementContainerTypeUnitTest extends BaseUnitTest
         ChildAssociationRef childAssoc = new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, rmContainer, ContentModel.ASSOC_CONTAINS, rmFolder);
         recordManagementContainerType.onCreateChildAssociation(childAssoc, true);
 
-        /* Then the node type should not be changed to TYPE_RECORD_FOLDER */
-        verify(mockedNodeService, never()).setType(rmFolder, TYPE_RECORD_FOLDER);
-        verify(mockedRecordFolderService, never()).setupRecordFolder(rmFolder);
-    }
-
-    /**
-     * Trying to create a RM folder and its sub-types via SFDC, IMap, WebDav, etc
-     * Check that exception is thrown on creating child associations
-     */
-    @Test
-    public void testRM3450()
-    {
-        NodeRef rmContainer = generateRMContainer();
-        NodeRef nonRmFolder = generateNonRmFolderNode();
-
-        ChildAssociationRef childAssoc = new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, rmContainer, TestModel.NOT_RM_FOLDER_TYPE, nonRmFolder);
-        try
-        {
-            recordManagementContainerType.onCreateChildAssociation(childAssoc, true);
-            fail("Expected to throw exception on create child association.");
-        }
-        catch (Throwable e)
-        {
-            assertTrue(e instanceof AlfrescoRuntimeException);
-        }
+        /* The type should not be changed and no aspects should be added */
+        verify(mockedNodeService, never()).setType(any(), any());
+        verify(mockedNodeService, never()).addAspect(any(), any(), any());
     }
 
     /**

From a50450b8626603851232080f36a766bab7a069f8 Mon Sep 17 00:00:00 2001
From: Rodica Sutu 
Date: Thu, 26 Jan 2017 16:48:57 +0200
Subject: [PATCH 26/61] formatting updates

---
 .../fileplancomponents/ElectronicRecordTests.java         | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
index 2936131f06..4d1e82bc43 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
@@ -273,16 +273,16 @@ public class ElectronicRecordTests extends BaseRMRestTest
 
         FilePlanComponentAPI filePlanComponentsAPI = getRestAPIFactory().getFilePlanComponentsAPI();
         FilePlanComponent recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord,
-                                                                    createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME), FILE_PLAN_ALIAS);
+                                                    createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME), FILE_PLAN_ALIAS);
         // verify the create request status code
-       assertStatusCode(CREATED);
+        assertStatusCode(CREATED);
 
         // get newly created electronic record and verify its properties
         assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId()).getName().startsWith(ELECTRONIC_RECORD_NAME));
         assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().equals(FOLDER_NAME));
         //get newly created electronic record using the relativePath
         assertTrue(filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS,
-                                                                FilePlanComponentFields.RELATIVE_PATH + "=" + RELATIVE_PATH + "/" + recordCreated.getName())
+                                        FilePlanComponentFields.RELATIVE_PATH + "=" + RELATIVE_PATH + "/" + recordCreated.getName())
                                         .getId().equals(recordCreated.getId()));
 
         //the category specified via the RELATIVE_PATH exist, folder doesn't exist
@@ -296,7 +296,7 @@ public class ElectronicRecordTests extends BaseRMRestTest
         assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().startsWith(FOLDER_NAME));
         //get newly created electronic record using the relativePath
         assertTrue(filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS,
-                                                FilePlanComponentFields.RELATIVE_PATH+"="+RELATIVE_PATH+"/"+recordCreated.getName())
+                                        FilePlanComponentFields.RELATIVE_PATH+"="+RELATIVE_PATH+"/"+recordCreated.getName())
                                         .getId().equals(recordCreated.getId()));
 
         //the containers from the RELATIVE PATH exists

From 054129283761d117e78fbf1e5b8b199195865712 Mon Sep 17 00:00:00 2001
From: Rodica Sutu 
Date: Thu, 26 Jan 2017 17:50:47 +0200
Subject: [PATCH 27/61] try to fix diff indentation

---
 .../ElectronicRecordTests.java                | 62 +++++++++++--------
 1 file changed, 36 insertions(+), 26 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
index 4d1e82bc43..42183c39d2 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
@@ -257,32 +257,40 @@ public class ElectronicRecordTests extends BaseRMRestTest
      * Given I want to create an electronic record
      * When I use the path relative to the filePlanComponentid
      * Then the containers in the relativePath that don't exist are created before creating the electronic record
-
      */
     public void createElectronicRecordWithRelativePath() throws Exception
     {
         //the containers specified on the RELATIVE_PATH parameter don't exist on server
-        String RELATIVE_PATH = CATEGORY_NAME + "/"+ CATEGORY_NAME +"/"+ FOLDER_NAME;
+        String RELATIVE_PATH = CATEGORY_NAME + "/" + CATEGORY_NAME + "/" + FOLDER_NAME;
         FilePlanComponent electronicRecord = FilePlanComponent.builder()
                                                               .name(ELECTRONIC_RECORD_NAME)
                                                               .nodeType(CONTENT_TYPE.toString())
-                                                              .content(FilePlanComponentContent.builder().mimeType("text/plain").build())
-                                                              .properties(FilePlanComponentProperties.builder().description("Description").build())
+                                                              .content(FilePlanComponentContent
+                                                                      .builder()
+                                                                      .mimeType("text/plain")
+                                                                      .build()
+                                                                      )
+                                                              .properties(FilePlanComponentProperties
+                                                                      .builder()
+                                                                      .description("Description")
+                                                                      .build()
+                                                                         )
                                                               .relativePath(RELATIVE_PATH)
                                                               .build();
 
         FilePlanComponentAPI filePlanComponentsAPI = getRestAPIFactory().getFilePlanComponentsAPI();
-        FilePlanComponent recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord,
-                                                    createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME), FILE_PLAN_ALIAS);
+        FilePlanComponent recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord, createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME), FILE_PLAN_ALIAS
+                                                                                      );
         // verify the create request status code
         assertStatusCode(CREATED);
 
         // get newly created electronic record and verify its properties
-        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId()).getName().startsWith(ELECTRONIC_RECORD_NAME));
-        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().equals(FOLDER_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId())
+                                        .getName().startsWith(ELECTRONIC_RECORD_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId())
+                                        .getName().equals(FOLDER_NAME));
         //get newly created electronic record using the relativePath
-        assertTrue(filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS,
-                                        FilePlanComponentFields.RELATIVE_PATH + "=" + RELATIVE_PATH + "/" + recordCreated.getName())
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS, FilePlanComponentFields.RELATIVE_PATH + "=" + RELATIVE_PATH + "/" + recordCreated.getName())
                                         .getId().equals(recordCreated.getId()));
 
         //the category specified via the RELATIVE_PATH exist, folder doesn't exist
@@ -292,38 +300,40 @@ public class ElectronicRecordTests extends BaseRMRestTest
         // verify the create request status code
         assertStatusCode(CREATED);
         // get newly created electronic record and verify its properties
-        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId()).getName().startsWith(ELECTRONIC_RECORD_NAME));
-        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().startsWith(FOLDER_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId())
+                                        .getName().startsWith(ELECTRONIC_RECORD_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId())
+                                        .getName().startsWith(FOLDER_NAME));
         //get newly created electronic record using the relativePath
-        assertTrue(filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS,
-                                        FilePlanComponentFields.RELATIVE_PATH+"="+RELATIVE_PATH+"/"+recordCreated.getName())
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS, FilePlanComponentFields.RELATIVE_PATH + "=" + RELATIVE_PATH + "/" + recordCreated.getName())
                                         .getId().equals(recordCreated.getId()));
 
         //the containers from the RELATIVE PATH exists
         electronicRecord.setName(ELECTRONIC_RECORD_NAME + getRandomAlphanumeric());
-        recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord,
-                                                createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME),
-                                                                FILE_PLAN_ALIAS);
+        recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord, createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME), FILE_PLAN_ALIAS);
         // verify the create request status code
         assertStatusCode(CREATED);
         // get newly created electronic record and verify its properties
-        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId()).getName().startsWith(ELECTRONIC_RECORD_NAME));
-        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().startsWith(FOLDER_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId())
+                                        .getName().startsWith(ELECTRONIC_RECORD_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId())
+                                        .getName().startsWith(FOLDER_NAME));
         //get newly created electronic record using the relativePath
         assertTrue(filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS, FilePlanComponentFields.RELATIVE_PATH + "=" + RELATIVE_PATH + "/" + recordCreated.getName())
                                         .getId().equals(recordCreated.getId()));
 
         //create the container structure relative to the  categoryId
-        String categoryId = filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS, FilePlanComponentFields.RELATIVE_PATH + "="+CATEGORY_NAME)
-                                                .getId();
-        RELATIVE_PATH = CATEGORY_NAME+ CATEGORY_NAME+"/"+FOLDER_NAME;
+        String categoryId = filePlanComponentsAPI.getFilePlanComponent(FILE_PLAN_ALIAS, FilePlanComponentFields.RELATIVE_PATH + "=" + CATEGORY_NAME)
+                                                 .getId();
+        RELATIVE_PATH = CATEGORY_NAME + CATEGORY_NAME + "/" + FOLDER_NAME;
         electronicRecord.setRelativePath(RELATIVE_PATH);
-        recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord,
-                                                createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME),categoryId);
+        recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord, createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME), categoryId);
         // verify the create request status code
         assertStatusCode(CREATED);
         // get newly created electronic record and verify its properties
-        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId()).getName().startsWith(ELECTRONIC_RECORD_NAME));
-        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId()).getName().startsWith(FOLDER_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId())
+                                        .getName().startsWith(ELECTRONIC_RECORD_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId())
+                                        .getName().startsWith(FOLDER_NAME));
     }
 }

From 5df1cce8954d96e07057bf60428e5ac27abed578 Mon Sep 17 00:00:00 2001
From: Rodica Sutu 
Date: Thu, 26 Jan 2017 17:54:23 +0200
Subject: [PATCH 28/61] fix the test failure

---
 .../fileplancomponents/ElectronicRecordTests.java        | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
index 42183c39d2..23ce665a8b 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
@@ -49,7 +49,6 @@ import org.alfresco.rest.rm.community.base.BaseRMRestTest;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentContent;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields;
-import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentProperties;
 import org.alfresco.rest.rm.community.requests.igCoreAPI.FilePlanComponentAPI;
 import org.alfresco.utility.report.Bug;
 import org.testng.annotations.DataProvider;
@@ -270,17 +269,11 @@ public class ElectronicRecordTests extends BaseRMRestTest
                                                                       .mimeType("text/plain")
                                                                       .build()
                                                                       )
-                                                              .properties(FilePlanComponentProperties
-                                                                      .builder()
-                                                                      .description("Description")
-                                                                      .build()
-                                                                         )
                                                               .relativePath(RELATIVE_PATH)
                                                               .build();
 
         FilePlanComponentAPI filePlanComponentsAPI = getRestAPIFactory().getFilePlanComponentsAPI();
-        FilePlanComponent recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord, createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME), FILE_PLAN_ALIAS
-                                                                                      );
+        FilePlanComponent recordCreated = filePlanComponentsAPI.createElectronicRecord(electronicRecord, createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME), FILE_PLAN_ALIAS);
         // verify the create request status code
         assertStatusCode(CREATED);
 

From 8a875a0ef7672b187d47c209411aafdf165b0fde Mon Sep 17 00:00:00 2001
From: Kristijan Conkas 
Date: Fri, 27 Jan 2017 11:16:56 +0000
Subject: [PATCH 29/61] RM-4615: TAS version bump-up.

---
 rm-automation/rm-automation-community-rest-api/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/rm-automation/rm-automation-community-rest-api/pom.xml b/rm-automation/rm-automation-community-rest-api/pom.xml
index c45b682805..d0fef893e8 100644
--- a/rm-automation/rm-automation-community-rest-api/pom.xml
+++ b/rm-automation/rm-automation-community-rest-api/pom.xml
@@ -15,7 +15,7 @@
       1.8
       alfresco-rm-community-share
       alfresco-rm-community-repo
-      5.2.0-2-SNAPSHOT
+      5.2.0-2
       2.0.0
    
 

From 678e3e6cf5f9bb810b23c5517c53d5451efd042e Mon Sep 17 00:00:00 2001
From: Kristijan Conkas 
Date: Fri, 27 Jan 2017 11:52:21 +0000
Subject: [PATCH 30/61] RM-4615: now using RM FilePlanComponentAPI calls to
 create electronic records.

---
 .../igCoreAPI/FilePlanComponentAPI.java       | 32 +++++--------------
 .../ElectronicRecordTests.java                |  6 ++--
 2 files changed, 10 insertions(+), 28 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java
index 9aa2fc5729..92132e8926 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java
@@ -52,8 +52,6 @@ import org.alfresco.rest.core.RMRestWrapper;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentsCollection;
 import org.alfresco.rest.rm.community.requests.RMModelRequest;
-import org.alfresco.utility.model.ContentModel;
-import org.alfresco.utility.model.RepoTestModel;
 
 /**
  * File plan component REST API Wrapper
@@ -233,13 +231,15 @@ public class FilePlanComponentAPI extends RMModelRequest
 
     /**
      * Create electronic record from file resource
+     * 
      * @param electronicRecordModel {@link FilePlanComponent} for electronic record to be created
      * @param recordContent {@link File} pointing to the content of the electronic record to be created
      * @param parentId parent container id
      * @return newly created {@link FilePlanComponent}
-     * @throws Exception if electronic record couldn't be created
+     * @throws Exception for invalid electronicRecordModel JSON strings
      */
-    public FilePlanComponent createElectronicRecord(FilePlanComponent electronicRecordModel, File recordContent, String parentId) throws Exception
+    public FilePlanComponent createElectronicRecord(FilePlanComponent electronicRecordModel, File recordContent,
+        String parentId) throws Exception
     {
         mandatoryObject("electronicRecordModel", electronicRecordModel);
         mandatoryString("parentId", parentId);
@@ -247,11 +247,7 @@ public class FilePlanComponentAPI extends RMModelRequest
         {
             fail("Only electronic records are supported");
         }
-        
-        RepoTestModel parentNode = new ContentModel();
-        // using getFilePlanComponent to work around RM special containers, unsupported in Core API usingNode()
-        parentNode.setNodeRef(getFilePlanComponent(parentId).getId());
-        
+
         /*
          * For file uploads nodeBodyCreate is ignored hence can't be used. Append all FilePlanComponent fields
          * to the request.
@@ -267,21 +263,9 @@ public class FilePlanComponentAPI extends RMModelRequest
             builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name());
         }
         builder.addMultiPart("filedata", recordContent, ContentType.BINARY.name());
-        
-        // create node with given content using core Node API
-        String nodeId = getRMRestWrapper().withCoreAPI().usingNode(parentNode).createNode().getId();
-        String createStatusCode = getRMRestWrapper().getStatusCode();
-        
-        // return FilePlanComponent for created node
-        FilePlanComponent createdComponent = getRMRestWrapper()
-            .withIGCoreAPI()
-            .usingFilePlanComponents()
-            .getFilePlanComponent(nodeId);
-        
-        // avoid getFilePlanComponent() overriding the createNode status code
-        getRMRestWrapper().setStatusCode(createStatusCode);
-        
-        return createdComponent;
+
+        // create node with given content
+        return createFilePlanComponent(electronicRecordModel, parentId);
     }
 
     /**
diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
index f9e02ba038..99fb80b1c6 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
@@ -95,8 +95,7 @@ public class ElectronicRecordTests extends BaseRMRestTest
     @Test
     (
         dataProvider = "invalidParentContainers",
-        description = "Electronic records can't be created in invalid parent containers",
-        expectedExceptions = IllegalArgumentException.class
+        description = "Electronic records can't be created in invalid parent containers"
     )
     public void cantCreateElectronicRecordsInInvalidContainers(FilePlanComponent container) throws Exception
     {
@@ -119,8 +118,7 @@ public class ElectronicRecordTests extends BaseRMRestTest
      */
     @Test
     (
-        description = "Electronic record can't be created in closed record folder",
-        expectedExceptions = IllegalArgumentException.class
+        description = "Electronic record can't be created in closed record folder"
     )
     public void cantCreateElectronicRecordInClosedFolder() throws Exception
     {

From 3dddbb7188fad9ae71faa27d2aeb013050eff430 Mon Sep 17 00:00:00 2001
From: dbilligmaier 
Date: Fri, 27 Jan 2017 13:53:30 +0000
Subject: [PATCH 31/61] ALL LANG: Updated localized files as per Revision
 2017-01-26

---
 .../dod5015/messages/dod5015-model_de.properties | 14 +++++++-------
 .../dod5015/messages/dod5015-model_es.properties | 14 +++++++-------
 .../dod5015/messages/dod5015-model_fr.properties | 14 +++++++-------
 .../dod5015/messages/dod5015-model_it.properties | 14 +++++++-------
 .../dod5015/messages/dod5015-model_ja.properties | 14 +++++++-------
 .../dod5015/messages/dod5015-model_nb.properties | 16 ++++++++--------
 .../dod5015/messages/dod5015-model_nl.properties | 14 +++++++-------
 .../messages/dod5015-model_pt_BR.properties      | 14 +++++++-------
 .../dod5015/messages/dod5015-model_ru.properties | 14 +++++++-------
 .../messages/dod5015-model_zh_CN.properties      | 14 +++++++-------
 .../dod5015/messages/dod5015_de.properties       |  2 +-
 .../dod5015/messages/dod5015_es.properties       |  2 +-
 .../dod5015/messages/dod5015_fr.properties       |  2 +-
 .../dod5015/messages/dod5015_it.properties       |  2 +-
 .../dod5015/messages/dod5015_ja.properties       |  2 +-
 .../dod5015/messages/dod5015_nb.properties       |  2 +-
 .../dod5015/messages/dod5015_nl.properties       |  2 +-
 .../dod5015/messages/dod5015_pt_BR.properties    |  2 +-
 .../dod5015/messages/dod5015_ru.properties       |  2 +-
 .../dod5015/messages/dod5015_zh_CN.properties    |  2 +-
 .../messages/action-service_de.properties        |  4 ++--
 .../messages/action-service_es.properties        |  4 ++--
 .../messages/action-service_fr.properties        |  4 ++--
 .../messages/action-service_it.properties        |  4 ++--
 .../messages/action-service_ja.properties        |  2 +-
 .../messages/action-service_nb.properties        |  2 +-
 .../messages/action-service_nl.properties        |  2 +-
 .../messages/action-service_pt_BR.properties     |  2 +-
 .../messages/action-service_ru.properties        |  2 +-
 .../messages/action-service_zh_CN.properties     |  2 +-
 .../messages/actions_de.properties               |  2 +-
 .../messages/actions_es.properties               |  2 +-
 .../messages/actions_fr.properties               |  2 +-
 .../messages/actions_it.properties               |  2 +-
 .../messages/actions_ja.properties               |  2 +-
 .../messages/actions_nb.properties               |  2 +-
 .../messages/actions_nl.properties               |  2 +-
 .../messages/actions_pt_BR.properties            |  2 +-
 .../messages/actions_ru.properties               |  2 +-
 .../messages/actions_zh_CN.properties            |  2 +-
 .../messages/admin-service_de.properties         |  2 +-
 .../messages/admin-service_es.properties         |  2 +-
 .../messages/admin-service_fr.properties         |  2 +-
 .../messages/admin-service_it.properties         |  2 +-
 .../messages/admin-service_ja.properties         |  2 +-
 .../messages/admin-service_nb.properties         |  2 +-
 .../messages/admin-service_nl.properties         |  2 +-
 .../messages/admin-service_pt_BR.properties      |  2 +-
 .../messages/admin-service_ru.properties         |  2 +-
 .../messages/admin-service_zh_CN.properties      |  2 +-
 .../messages/audit-service_de.properties         |  2 +-
 .../messages/audit-service_es.properties         |  2 +-
 .../messages/audit-service_fr.properties         |  2 +-
 .../messages/audit-service_it.properties         |  2 +-
 .../messages/audit-service_ja.properties         |  2 +-
 .../messages/audit-service_nb.properties         |  2 +-
 .../messages/audit-service_nl.properties         |  2 +-
 .../messages/audit-service_pt_BR.properties      |  2 +-
 .../messages/audit-service_ru.properties         |  2 +-
 .../messages/audit-service_zh_CN.properties      |  2 +-
 .../messages/capability-service_de.properties    |  2 +-
 .../messages/capability-service_es.properties    |  2 +-
 .../messages/capability-service_fr.properties    |  2 +-
 .../messages/capability-service_it.properties    |  2 +-
 .../messages/capability-service_ja.properties    |  2 +-
 .../messages/capability-service_nb.properties    |  2 +-
 .../messages/capability-service_nl.properties    |  2 +-
 .../messages/capability-service_pt_BR.properties |  2 +-
 .../messages/capability-service_ru.properties    |  2 +-
 .../messages/capability-service_zh_CN.properties |  2 +-
 .../messages/dataset-service_de.properties       |  2 +-
 .../messages/dataset-service_es.properties       |  2 +-
 .../messages/dataset-service_fr.properties       |  2 +-
 .../messages/dataset-service_it.properties       |  2 +-
 .../messages/dataset-service_ja.properties       |  2 +-
 .../messages/dataset-service_nb.properties       |  2 +-
 .../messages/dataset-service_nl.properties       |  2 +-
 .../messages/dataset-service_pt_BR.properties    |  2 +-
 .../messages/dataset-service_ru.properties       |  2 +-
 .../messages/dataset-service_zh_CN.properties    |  2 +-
 .../messages/notification-service_de.properties  |  2 +-
 .../messages/notification-service_es.properties  |  2 +-
 .../messages/notification-service_fr.properties  |  2 +-
 .../messages/notification-service_it.properties  |  2 +-
 .../messages/notification-service_ja.properties  |  2 +-
 .../messages/notification-service_nb.properties  |  2 +-
 .../messages/notification-service_nl.properties  |  2 +-
 .../notification-service_pt_BR.properties        |  2 +-
 .../messages/notification-service_ru.properties  |  2 +-
 .../notification-service_zh_CN.properties        |  2 +-
 .../records-management-service_de.properties     |  3 ++-
 .../records-management-service_es.properties     |  3 ++-
 .../records-management-service_fr.properties     |  3 ++-
 .../records-management-service_it.properties     |  3 ++-
 .../records-management-service_ja.properties     |  3 ++-
 .../records-management-service_nb.properties     |  3 ++-
 .../records-management-service_nl.properties     |  3 ++-
 .../records-management-service_pt_BR.properties  |  3 ++-
 .../records-management-service_ru.properties     |  3 ++-
 .../records-management-service_zh_CN.properties  |  3 ++-
 .../messages/records-model_de.properties         |  2 +-
 .../messages/records-model_es.properties         |  2 +-
 .../messages/records-model_fr.properties         |  2 +-
 .../messages/records-model_it.properties         |  2 +-
 .../messages/records-model_ja.properties         |  2 +-
 .../messages/records-model_nb.properties         |  2 +-
 .../messages/records-model_nl.properties         |  2 +-
 .../messages/records-model_pt_BR.properties      |  2 +-
 .../messages/records-model_ru.properties         |  2 +-
 .../messages/records-model_zh_CN.properties      |  2 +-
 .../messages/report-model_de.properties          |  2 +-
 .../messages/report-model_es.properties          |  2 +-
 .../messages/report-model_fr.properties          |  2 +-
 .../messages/report-model_it.properties          |  2 +-
 .../messages/report-model_ja.properties          |  2 +-
 .../messages/report-model_nb.properties          |  2 +-
 .../messages/report-model_nl.properties          |  2 +-
 .../messages/report-model_pt_BR.properties       |  2 +-
 .../messages/report-model_ru.properties          |  2 +-
 .../messages/report-model_zh_CN.properties       |  2 +-
 .../messages/report-service_de.properties        |  2 +-
 .../messages/report-service_es.properties        |  2 +-
 .../messages/report-service_fr.properties        |  2 +-
 .../messages/report-service_it.properties        |  2 +-
 .../messages/report-service_ja.properties        |  2 +-
 .../messages/report-service_nb.properties        |  2 +-
 .../messages/report-service_nl.properties        |  2 +-
 .../messages/report-service_pt_BR.properties     |  2 +-
 .../messages/report-service_ru.properties        |  2 +-
 .../messages/report-service_zh_CN.properties     |  2 +-
 .../messages/rm-events_de.properties             |  2 +-
 .../messages/rm-events_es.properties             |  2 +-
 .../messages/rm-events_fr.properties             |  2 +-
 .../messages/rm-events_it.properties             |  2 +-
 .../messages/rm-events_ja.properties             |  2 +-
 .../messages/rm-events_nb.properties             |  2 +-
 .../messages/rm-events_nl.properties             |  2 +-
 .../messages/rm-events_pt_BR.properties          |  2 +-
 .../messages/rm-events_ru.properties             |  2 +-
 .../messages/rm-events_zh_CN.properties          |  2 +-
 .../messages/rm-system_de.properties             |  4 ++--
 .../messages/rm-system_es.properties             |  4 ++--
 .../messages/rm-system_fr.properties             |  4 ++--
 .../messages/rm-system_it.properties             |  4 ++--
 .../messages/rm-system_ja.properties             |  4 ++--
 .../messages/rm-system_nb.properties             |  4 ++--
 .../messages/rm-system_nl.properties             |  4 ++--
 .../messages/rm-system_pt_BR.properties          |  4 ++--
 .../messages/rm-system_ru.properties             |  4 ++--
 .../messages/rm-system_zh_CN.properties          |  4 ++--
 .../messages/template_de.properties              |  2 +-
 .../messages/template_es.properties              |  2 +-
 .../messages/template_fr.properties              |  2 +-
 .../messages/template_it.properties              |  2 +-
 .../messages/template_ja.properties              |  2 +-
 .../messages/template_nb.properties              |  2 +-
 .../messages/template_nl.properties              |  2 +-
 .../messages/template_pt_BR.properties           |  2 +-
 .../messages/template_ru.properties              |  2 +-
 .../messages/template_zh_CN.properties           |  2 +-
 .../rmconstraint/rmconstraint.put_de.properties  |  2 +-
 .../rmconstraint/rmconstraint.put_es.properties  |  2 +-
 .../rmconstraint/rmconstraint.put_fr.properties  |  2 +-
 .../rmconstraint/rmconstraint.put_it.properties  |  2 +-
 .../rmconstraint/rmconstraint.put_ja.properties  |  2 +-
 .../rmconstraint/rmconstraint.put_nb.properties  |  2 +-
 .../rmconstraint/rmconstraint.put_nl.properties  |  2 +-
 .../rmconstraint.put_pt_BR.properties            |  2 +-
 .../rmconstraint/rmconstraint.put_ru.properties  |  2 +-
 .../rmconstraint.put_zh_CN.properties            |  2 +-
 .../rmconstraints.post_de.properties             |  2 +-
 .../rmconstraints.post_es.properties             |  2 +-
 .../rmconstraints.post_fr.properties             |  2 +-
 .../rmconstraints.post_it.properties             |  2 +-
 .../rmconstraints.post_ja.properties             |  2 +-
 .../rmconstraints.post_nb.properties             |  2 +-
 .../rmconstraints.post_nl.properties             |  2 +-
 .../rmconstraints.post_pt_BR.properties          |  2 +-
 .../rmconstraints.post_ru.properties             |  2 +-
 .../rmconstraints.post_zh_CN.properties          |  2 +-
 .../workflow/rm-workflow-messages_de.properties  |  2 +-
 .../workflow/rm-workflow-messages_es.properties  |  2 +-
 .../workflow/rm-workflow-messages_fr.properties  |  2 +-
 .../workflow/rm-workflow-messages_it.properties  |  2 +-
 .../workflow/rm-workflow-messages_ja.properties  |  2 +-
 .../workflow/rm-workflow-messages_nb.properties  |  2 +-
 .../workflow/rm-workflow-messages_nl.properties  |  2 +-
 .../rm-workflow-messages_pt_BR.properties        |  2 +-
 .../workflow/rm-workflow-messages_ru.properties  |  2 +-
 .../rm-workflow-messages_zh_CN.properties        |  2 +-
 190 files changed, 275 insertions(+), 265 deletions(-)

diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_de.properties
index 1c544629ef..3f7f128ddd 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_de.properties
@@ -1,16 +1,16 @@
 dod_dod5015.description=DoD 5015-konformes Content-Modell
-    
+
 dod_dod5015.type.dod_site.title=DoD 5015-konforme Site
 dod_dod5015.type.dod_site.description=DoD 5015-konforme Site
 
 dod_dod5015.type.dod_filePlan.title=DoD 5015 Ablageplan
-dod_dod5015.type.dod_filePlan.description=DoD 5015 Ablageplan    
-          
+dod_dod5015.type.dod_filePlan.description=DoD 5015 Ablageplan
+
 dod_dod5015.type.dod_recordSeries.title=Record-Serien (abgelehnt)
 dod_dod5015.type.dod_recordSeries.description=Record-Serien (abgelehnt)
 
 dod_dod5015.aspect.dod_dod5015record.title=DoD 5015-konformer Record
-dod_dod5015.aspect.dod_dod5015record.description=DoD 5015-konformer Record 
+dod_dod5015.aspect.dod_dod5015record.description=DoD 5015-konformer Record
 dod_dod5015.property.dod_publicationDate.title=Ver\u00f6ffentlichungsdatum
 dod_dod5015.property.dod_publicationDate.decription=Ver\u00f6ffentlichungsdatum
 dod_dod5015.property.dod_originator.title=Ersteller
@@ -27,9 +27,9 @@ dod_dod5015.property.dod_address.title=Empf\u00e4nger
 dod_dod5015.property.dod_address.decription=Empf\u00e4nger
 dod_dod5015.property.dod_otherAddress.title=Anderer Empf\u00e4nger
 dod_dod5015.property.dod_otherAddress.decription=Anderer Empf\u00e4nger
-         
+
 dod_dod5015.aspect.dod_scannedRecord.title=Eingescannter Record
-dod_dod5015.aspect.dod_scannedRecord.description=Eingescannter Record        
+dod_dod5015.aspect.dod_scannedRecord.description=Eingescannter Record
 dod_dod5015.property.dod_scannedFormat.title=Bildformat
 dod_dod5015.property.dod_scannedFormat.description=Bildformat
 dod_dod5015.property.dod_scannedFormatVersion.title=Bildformat und Version
@@ -53,7 +53,7 @@ dod_dod5015.property.dod_creatingApplication.title=Quellsystem
 dod_dod5015.property.dod_creatingApplication.description=Quellsystem
 dod_dod5015.property.dod_documentSecuritySettings.title=Sicherheitseinstellungen des Dokuments
 dod_dod5015.property.dod_documentSecuritySettings.description=Sicherheitseinstellungen des Dokuments
-   
+
 dod_dod5015.aspect.dod_digitalPhotographRecord.title=Record - Digitales Bild
 dod_dod5015.aspect.dod_digitalPhotographRecord.description=Record - Digitales Bild
 dod_dod5015.property.dod_caption.title=Beschriftung
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_es.properties
index 484926938a..ebbf3bde4a 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_es.properties
@@ -1,16 +1,16 @@
 dod_dod5015.description=Modelo de contenido de DOD5015
-    
+
 dod_dod5015.type.dod_site.title=Sitio de DOD5015
 dod_dod5015.type.dod_site.description=Sitio de DOD5015
 
 dod_dod5015.type.dod_filePlan.title=Plan de fichero DOD5015
-dod_dod5015.type.dod_filePlan.description=Plan de fichero DOD5015    
-          
+dod_dod5015.type.dod_filePlan.description=Plan de fichero DOD5015
+
 dod_dod5015.type.dod_recordSeries.title=Serie de documentos de archivo (depreciada)
 dod_dod5015.type.dod_recordSeries.description=Serie de documentos de archivo (depreciada)
 
 dod_dod5015.aspect.dod_dod5015record.title=Documento de archivo de DOD5015
-dod_dod5015.aspect.dod_dod5015record.description=Documento de archivo de DOD5015 
+dod_dod5015.aspect.dod_dod5015record.description=Documento de archivo de DOD5015
 dod_dod5015.property.dod_publicationDate.title=Fecha de publicaci\u00f3n
 dod_dod5015.property.dod_publicationDate.decription=Fecha de publicaci\u00f3n
 dod_dod5015.property.dod_originator.title=Creador
@@ -27,9 +27,9 @@ dod_dod5015.property.dod_address.title=Destinatario
 dod_dod5015.property.dod_address.decription=Destinatario
 dod_dod5015.property.dod_otherAddress.title=Otro destinatario
 dod_dod5015.property.dod_otherAddress.decription=Otro destinatario
-         
+
 dod_dod5015.aspect.dod_scannedRecord.title=Documento de archivo escaneado
-dod_dod5015.aspect.dod_scannedRecord.description=Documento de archivo escaneado        
+dod_dod5015.aspect.dod_scannedRecord.description=Documento de archivo escaneado
 dod_dod5015.property.dod_scannedFormat.title=Formato de imagen
 dod_dod5015.property.dod_scannedFormat.description=Formato de imagen
 dod_dod5015.property.dod_scannedFormatVersion.title=Formato de imagen y versi\u00f3n
@@ -53,7 +53,7 @@ dod_dod5015.property.dod_creatingApplication.title=Creando aplicaci\u00f3n
 dod_dod5015.property.dod_creatingApplication.description=Creando aplicaci\u00f3n
 dod_dod5015.property.dod_documentSecuritySettings.title=Configuraci\u00f3n de seguridad del documento
 dod_dod5015.property.dod_documentSecuritySettings.description=Configuraci\u00f3n de seguridad del documento
-   
+
 dod_dod5015.aspect.dod_digitalPhotographRecord.title=Documento de archivo fotogr\u00e1fico digital
 dod_dod5015.aspect.dod_digitalPhotographRecord.description=Documento de archivo fotogr\u00e1fico digital
 dod_dod5015.property.dod_caption.title=T\u00edtulo
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_fr.properties
index 6c59002dd6..67e419cc93 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_fr.properties
@@ -1,16 +1,16 @@
 dod_dod5015.description=Mod\u00e8le de contenu DOD5015
-    
+
 dod_dod5015.type.dod_site.title=Site DOD5015
 dod_dod5015.type.dod_site.description=Site DOD5015
 
 dod_dod5015.type.dod_filePlan.title=Plan de classification DOD5015
-dod_dod5015.type.dod_filePlan.description=Plan de classification DOD5015    
-          
+dod_dod5015.type.dod_filePlan.description=Plan de classification DOD5015
+
 dod_dod5015.type.dod_recordSeries.title=S\u00e9rie de documents d'archives (\u00e0 \u00e9viter)
 dod_dod5015.type.dod_recordSeries.description=S\u00e9rie de documents d'archives (\u00e0 \u00e9viter)
 
 dod_dod5015.aspect.dod_dod5015record.title=Document d'archives DOD5015
-dod_dod5015.aspect.dod_dod5015record.description=Document d'archives DOD5015 
+dod_dod5015.aspect.dod_dod5015record.description=Document d'archives DOD5015
 dod_dod5015.property.dod_publicationDate.title=Date de publication
 dod_dod5015.property.dod_publicationDate.decription=Date de publication
 dod_dod5015.property.dod_originator.title=\u00c9metteur
@@ -27,9 +27,9 @@ dod_dod5015.property.dod_address.title=Destinataire
 dod_dod5015.property.dod_address.decription=Destinataire
 dod_dod5015.property.dod_otherAddress.title=Autre destinataire
 dod_dod5015.property.dod_otherAddress.decription=Autre destinataire
-         
+
 dod_dod5015.aspect.dod_scannedRecord.title=Document d'archives num\u00e9ris\u00e9
-dod_dod5015.aspect.dod_scannedRecord.description=Document d'archives num\u00e9ris\u00e9        
+dod_dod5015.aspect.dod_scannedRecord.description=Document d'archives num\u00e9ris\u00e9
 dod_dod5015.property.dod_scannedFormat.title=Format d'image
 dod_dod5015.property.dod_scannedFormat.description=Format d'image
 dod_dod5015.property.dod_scannedFormatVersion.title=Format et version d'image
@@ -53,7 +53,7 @@ dod_dod5015.property.dod_creatingApplication.title=Application native
 dod_dod5015.property.dod_creatingApplication.description=Application native
 dod_dod5015.property.dod_documentSecuritySettings.title=Param\u00e8tres de s\u00e9curit\u00e9 du document
 dod_dod5015.property.dod_documentSecuritySettings.description=Param\u00e8tres de s\u00e9curit\u00e9 du document
-   
+
 dod_dod5015.aspect.dod_digitalPhotographRecord.title=Photographie num\u00e9rique d'archives
 dod_dod5015.aspect.dod_digitalPhotographRecord.description=Photographie num\u00e9rique d'archives
 dod_dod5015.property.dod_caption.title=L\u00e9gende
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_it.properties
index e507ac84b3..2f2a989b54 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_it.properties
@@ -1,16 +1,16 @@
 dod_dod5015.description=Modello di contenuto DOD5015
-    
+
 dod_dod5015.type.dod_site.title=Sito DOD5015
 dod_dod5015.type.dod_site.description=Sito DOD5015
 
 dod_dod5015.type.dod_filePlan.title=Piano file DOD5015
-dod_dod5015.type.dod_filePlan.description=Piano file DOD5015    
-          
+dod_dod5015.type.dod_filePlan.description=Piano file DOD5015
+
 dod_dod5015.type.dod_recordSeries.title=Serie record (obsoleta)
 dod_dod5015.type.dod_recordSeries.description=Serie record (obsoleta)
 
 dod_dod5015.aspect.dod_dod5015record.title=Record DOD5015
-dod_dod5015.aspect.dod_dod5015record.description=Record DOD5015 
+dod_dod5015.aspect.dod_dod5015record.description=Record DOD5015
 dod_dod5015.property.dod_publicationDate.title=Data di pubblicazione
 dod_dod5015.property.dod_publicationDate.decription=Data di pubblicazione
 dod_dod5015.property.dod_originator.title=Iniziatore
@@ -27,9 +27,9 @@ dod_dod5015.property.dod_address.title=Destinatario
 dod_dod5015.property.dod_address.decription=Destinatario
 dod_dod5015.property.dod_otherAddress.title=Altro destinatario
 dod_dod5015.property.dod_otherAddress.decription=Altro destinatario
-         
+
 dod_dod5015.aspect.dod_scannedRecord.title=Record scansionato
-dod_dod5015.aspect.dod_scannedRecord.description=Record scansionato        
+dod_dod5015.aspect.dod_scannedRecord.description=Record scansionato
 dod_dod5015.property.dod_scannedFormat.title=Formato immagine
 dod_dod5015.property.dod_scannedFormat.description=Formato immagine
 dod_dod5015.property.dod_scannedFormatVersion.title=Formato immagine e versione
@@ -53,7 +53,7 @@ dod_dod5015.property.dod_creatingApplication.title=Creazione applicazione
 dod_dod5015.property.dod_creatingApplication.description=Creazione applicazione
 dod_dod5015.property.dod_documentSecuritySettings.title=Impostazioni di protezione documento
 dod_dod5015.property.dod_documentSecuritySettings.description=Impostazioni di protezione documento
-   
+
 dod_dod5015.aspect.dod_digitalPhotographRecord.title=Record fotografia digitale
 dod_dod5015.aspect.dod_digitalPhotographRecord.description=Record fotografia digitale
 dod_dod5015.property.dod_caption.title=Didascalia
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_ja.properties
index b3e892dda5..883893e12f 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_ja.properties
@@ -1,16 +1,16 @@
 dod_dod5015.description=DOD5015\u30b3\u30f3\u30c6\u30f3\u30c4\u30e2\u30c7\u30eb
-    
+
 dod_dod5015.type.dod_site.title=DOD5015\u30b5\u30a4\u30c8
 dod_dod5015.type.dod_site.description=DOD5015\u30b5\u30a4\u30c8
 
 dod_dod5015.type.dod_filePlan.title=DOD5015\u30d5\u30a1\u30a4\u30eb\u30d7\u30e9\u30f3
-dod_dod5015.type.dod_filePlan.description=DOD5015\u30d5\u30a1\u30a4\u30eb\u30d7\u30e9\u30f3    
-          
+dod_dod5015.type.dod_filePlan.description=DOD5015\u30d5\u30a1\u30a4\u30eb\u30d7\u30e9\u30f3
+
 dod_dod5015.type.dod_recordSeries.title=\u30ec\u30b3\u30fc\u30c9\u30b7\u30ea\u30fc\u30ba\uff08\u975e\u63a8\u5968\uff09
 dod_dod5015.type.dod_recordSeries.description=\u30ec\u30b3\u30fc\u30c9\u30b7\u30ea\u30fc\u30ba\uff08\u975e\u63a8\u5968\uff09
 
 dod_dod5015.aspect.dod_dod5015record.title=DOD5015\u30ec\u30b3\u30fc\u30c9
-dod_dod5015.aspect.dod_dod5015record.description=DOD5015\u30ec\u30b3\u30fc\u30c9 
+dod_dod5015.aspect.dod_dod5015record.description=DOD5015\u30ec\u30b3\u30fc\u30c9
 dod_dod5015.property.dod_publicationDate.title=\u767a\u884c\u65e5
 dod_dod5015.property.dod_publicationDate.decription=\u767a\u884c\u65e5
 dod_dod5015.property.dod_originator.title=\u767a\u4fe1\u5143
@@ -27,9 +27,9 @@ dod_dod5015.property.dod_address.title=\u53d7\u4fe1\u8005
 dod_dod5015.property.dod_address.decription=\u53d7\u4fe1\u8005
 dod_dod5015.property.dod_otherAddress.title=\u305d\u306e\u4ed6\u306e\u53d7\u4fe1\u8005
 dod_dod5015.property.dod_otherAddress.decription=\u305d\u306e\u4ed6\u306e\u53d7\u4fe1\u8005
-         
+
 dod_dod5015.aspect.dod_scannedRecord.title=\u30b9\u30ad\u30e3\u30f3\u6e08\u307f\u30ec\u30b3\u30fc\u30c9
-dod_dod5015.aspect.dod_scannedRecord.description=\u30b9\u30ad\u30e3\u30f3\u6e08\u307f\u30ec\u30b3\u30fc\u30c9        
+dod_dod5015.aspect.dod_scannedRecord.description=\u30b9\u30ad\u30e3\u30f3\u6e08\u307f\u30ec\u30b3\u30fc\u30c9
 dod_dod5015.property.dod_scannedFormat.title=\u30a4\u30e1\u30fc\u30b8\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8
 dod_dod5015.property.dod_scannedFormat.description=\u30a4\u30e1\u30fc\u30b8\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8
 dod_dod5015.property.dod_scannedFormatVersion.title=\u30a4\u30e1\u30fc\u30b8\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3068\u30d0\u30fc\u30b8\u30e7\u30f3
@@ -53,7 +53,7 @@ dod_dod5015.property.dod_creatingApplication.title=\u4f5c\u6210\u5143\u30a2\u30d
 dod_dod5015.property.dod_creatingApplication.description=\u4f5c\u6210\u5143\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3
 dod_dod5015.property.dod_documentSecuritySettings.title=\u6587\u66f8\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a
 dod_dod5015.property.dod_documentSecuritySettings.description=\u6587\u66f8\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a
-   
+
 dod_dod5015.aspect.dod_digitalPhotographRecord.title=\u30c7\u30b8\u30bf\u30eb\u5199\u771f\u30ec\u30b3\u30fc\u30c9
 dod_dod5015.aspect.dod_digitalPhotographRecord.description=\u30c7\u30b8\u30bf\u30eb\u5199\u771f\u30ec\u30b3\u30fc\u30c9
 dod_dod5015.property.dod_caption.title=\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_nb.properties
index 94eb04cae4..3157bdf8e1 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_nb.properties
@@ -1,16 +1,16 @@
 dod_dod5015.description=DOD5015-innholdsmodell
-    
+
 dod_dod5015.type.dod_site.title=DOD5015-omr\u00e5de
 dod_dod5015.type.dod_site.description=DOD5015-omr\u00e5de
 
 dod_dod5015.type.dod_filePlan.title=DOD5015-filplan
-dod_dod5015.type.dod_filePlan.description=DOD5015-filplan    
-          
+dod_dod5015.type.dod_filePlan.description=DOD5015-filplan
+
 dod_dod5015.type.dod_recordSeries.title=Oppf\u00f8ringsserie (avskrevet)
 dod_dod5015.type.dod_recordSeries.description=Oppf\u00f8ringsserie (avskrevet)
 
 dod_dod5015.aspect.dod_dod5015record.title=DOD5015-oppf\u00f8ring
-dod_dod5015.aspect.dod_dod5015record.description=DOD5015-oppf\u00f8ring 
+dod_dod5015.aspect.dod_dod5015record.description=DOD5015-oppf\u00f8ring
 dod_dod5015.property.dod_publicationDate.title=Publikasjonsdato
 dod_dod5015.property.dod_publicationDate.decription=Publikasjonsdato
 dod_dod5015.property.dod_originator.title=Avsender
@@ -27,9 +27,9 @@ dod_dod5015.property.dod_address.title=Mottaker
 dod_dod5015.property.dod_address.decription=Mottaker
 dod_dod5015.property.dod_otherAddress.title=Andre mottakere
 dod_dod5015.property.dod_otherAddress.decription=Andre mottakere
-         
+
 dod_dod5015.aspect.dod_scannedRecord.title=Skannet oppf\u00f8ring
-dod_dod5015.aspect.dod_scannedRecord.description=Skannet oppf\u00f8ring        
+dod_dod5015.aspect.dod_scannedRecord.description=Skannet oppf\u00f8ring
 dod_dod5015.property.dod_scannedFormat.title=Bildeformat
 dod_dod5015.property.dod_scannedFormat.description=Bildeformat
 dod_dod5015.property.dod_scannedFormatVersion.title=Bildeformat og -versjon
@@ -53,7 +53,7 @@ dod_dod5015.property.dod_creatingApplication.title=Opprette program
 dod_dod5015.property.dod_creatingApplication.description=Opprette program
 dod_dod5015.property.dod_documentSecuritySettings.title=Innstillinger ved dokumentsikkerhet
 dod_dod5015.property.dod_documentSecuritySettings.description=Innstillinger ved dokumentsikkerhet
-   
+
 dod_dod5015.aspect.dod_digitalPhotographRecord.title=Digital bildeoppf\u00f8ring
 dod_dod5015.aspect.dod_digitalPhotographRecord.description=Digital bildeoppf\u00f8ring
 dod_dod5015.property.dod_caption.title=Tittel
@@ -94,5 +94,5 @@ dod_dod5015.property.dod_captureDate.description=Opptaksdato
 dod_dod5015.property.dod_contact.title=Kontakt
 dod_dod5015.property.dod_contact.description=Kontakt
 dod_dod5015.property.dod_contentManagementSystem.title=Innholdsforvaltningssystem
-dod_dod5015.property.dod_contentManagementSystem.description= Innholdsforvaltningssystem
+dod_dod5015.property.dod_contentManagementSystem.description=Innholdsforvaltningssystem
 
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_nl.properties
index 56a5f76aaf..af5358b985 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_nl.properties
@@ -1,16 +1,16 @@
 dod_dod5015.description=DOD5015-contentmodel
-    
+
 dod_dod5015.type.dod_site.title=DOD5015-site
 dod_dod5015.type.dod_site.description=DOD5015-site
 
 dod_dod5015.type.dod_filePlan.title=DOD5015-ordeningsplan
-dod_dod5015.type.dod_filePlan.description=DOD5015-ordeningsplan    
-          
+dod_dod5015.type.dod_filePlan.description=DOD5015-ordeningsplan
+
 dod_dod5015.type.dod_recordSeries.title=Recordreeks (afgekeurd)
 dod_dod5015.type.dod_recordSeries.description=Recordreeks (afgekeurd)
 
 dod_dod5015.aspect.dod_dod5015record.title=DOD5015-record
-dod_dod5015.aspect.dod_dod5015record.description=DOD5015-record 
+dod_dod5015.aspect.dod_dod5015record.description=DOD5015-record
 dod_dod5015.property.dod_publicationDate.title=Publicatiedatum
 dod_dod5015.property.dod_publicationDate.decription=Publicatiedatum
 dod_dod5015.property.dod_originator.title=Herkomst
@@ -27,9 +27,9 @@ dod_dod5015.property.dod_address.title=Geadresseerde
 dod_dod5015.property.dod_address.decription=Geadresseerde
 dod_dod5015.property.dod_otherAddress.title=Andere geadresseerde
 dod_dod5015.property.dod_otherAddress.decription=Andere geadresseerde
-         
+
 dod_dod5015.aspect.dod_scannedRecord.title=Gescande record
-dod_dod5015.aspect.dod_scannedRecord.description=Gescande record        
+dod_dod5015.aspect.dod_scannedRecord.description=Gescande record
 dod_dod5015.property.dod_scannedFormat.title=Beeldindeling
 dod_dod5015.property.dod_scannedFormat.description=Beeldindeling
 dod_dod5015.property.dod_scannedFormatVersion.title=Beeldindeling en -versie
@@ -53,7 +53,7 @@ dod_dod5015.property.dod_creatingApplication.title=Producerende applicatie
 dod_dod5015.property.dod_creatingApplication.description=Producerende applicatie
 dod_dod5015.property.dod_documentSecuritySettings.title=Documentbeveiligingsinstellingen
 dod_dod5015.property.dod_documentSecuritySettings.description=Documentbeveiligingsinstellingen
-   
+
 dod_dod5015.aspect.dod_digitalPhotographRecord.title=Digitale fotorecord
 dod_dod5015.aspect.dod_digitalPhotographRecord.description=Digitale fotorecord
 dod_dod5015.property.dod_caption.title=Bijschrift
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_pt_BR.properties
index cc4e8b091a..d9eda91938 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_pt_BR.properties
@@ -1,16 +1,16 @@
 dod_dod5015.description=Modelo de conte\u00fado DOD5015
-    
+
 dod_dod5015.type.dod_site.title=Site DOD5015
 dod_dod5015.type.dod_site.description=Site DOD5015
 
 dod_dod5015.type.dod_filePlan.title=Plano de arquivo DOD5015
-dod_dod5015.type.dod_filePlan.description=Plano de arquivo DOD5015    
-          
+dod_dod5015.type.dod_filePlan.description=Plano de arquivo DOD5015
+
 dod_dod5015.type.dod_recordSeries.title=S\u00e9rie de documento arquiv\u00edstico (obsoleta)
 dod_dod5015.type.dod_recordSeries.description=S\u00e9rie de documento arquiv\u00edstico (obsoleta)
 
 dod_dod5015.aspect.dod_dod5015record.title=Documento arquiv\u00edstico DOD5015
-dod_dod5015.aspect.dod_dod5015record.description=Documento arquiv\u00edstico DOD5015 
+dod_dod5015.aspect.dod_dod5015record.description=Documento arquiv\u00edstico DOD5015
 dod_dod5015.property.dod_publicationDate.title=Data de publica\u00e7\u00e3o
 dod_dod5015.property.dod_publicationDate.decription=Data de publica\u00e7\u00e3o
 dod_dod5015.property.dod_originator.title=Originador
@@ -27,9 +27,9 @@ dod_dod5015.property.dod_address.title=Destinat\u00e1rio
 dod_dod5015.property.dod_address.decription=Destinat\u00e1rio
 dod_dod5015.property.dod_otherAddress.title=Outro destinat\u00e1rio
 dod_dod5015.property.dod_otherAddress.decription=Outro destinat\u00e1rio
-         
+
 dod_dod5015.aspect.dod_scannedRecord.title=Documento arquiv\u00edstico escaneado
-dod_dod5015.aspect.dod_scannedRecord.description=Documento arquiv\u00edstico escaneado        
+dod_dod5015.aspect.dod_scannedRecord.description=Documento arquiv\u00edstico escaneado
 dod_dod5015.property.dod_scannedFormat.title=Formato da imagem
 dod_dod5015.property.dod_scannedFormat.description=Formato da imagem
 dod_dod5015.property.dod_scannedFormatVersion.title=Vers\u00e3o e formato da imagem
@@ -53,7 +53,7 @@ dod_dod5015.property.dod_creatingApplication.title=Criando aplicativo
 dod_dod5015.property.dod_creatingApplication.description=Criando aplicativo
 dod_dod5015.property.dod_documentSecuritySettings.title=Configura\u00e7\u00f5es de seguran\u00e7a do documento
 dod_dod5015.property.dod_documentSecuritySettings.description=Configura\u00e7\u00f5es de seguran\u00e7a do documento
-   
+
 dod_dod5015.aspect.dod_digitalPhotographRecord.title=Documento arquiv\u00edstico fotogr\u00e1fico digital
 dod_dod5015.aspect.dod_digitalPhotographRecord.description=Documento arquiv\u00edstico fotogr\u00e1fico digital
 dod_dod5015.property.dod_caption.title=Legenda
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_ru.properties
index d922a2c8ff..a400252679 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_ru.properties
@@ -1,16 +1,16 @@
 dod_dod5015.description=\u041c\u043e\u0434\u0435\u043b\u044c \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 DOD5015
-    
+
 dod_dod5015.type.dod_site.title=\u0421\u0430\u0439\u0442 DOD5015
 dod_dod5015.type.dod_site.description=\u0421\u0430\u0439\u0442 DOD5015
 
 dod_dod5015.type.dod_filePlan.title=\u0410\u0440\u0445\u0438\u0432 DOD5015
-dod_dod5015.type.dod_filePlan.description=\u0410\u0440\u0445\u0438\u0432 DOD5015    
-          
+dod_dod5015.type.dod_filePlan.description=\u0410\u0440\u0445\u0438\u0432 DOD5015
+
 dod_dod5015.type.dod_recordSeries.title=\u0421\u0435\u0440\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 (\u0443\u0441\u0442\u0430\u0440\u0435\u043b\u043e)
 dod_dod5015.type.dod_recordSeries.description=\u0421\u0435\u0440\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 (\u0443\u0441\u0442\u0430\u0440\u0435\u043b\u043e)
 
 dod_dod5015.aspect.dod_dod5015record.title=\u0417\u0430\u043f\u0438\u0441\u044c DOD5015
-dod_dod5015.aspect.dod_dod5015record.description=\u0417\u0430\u043f\u0438\u0441\u044c DOD5015 
+dod_dod5015.aspect.dod_dod5015record.description=\u0417\u0430\u043f\u0438\u0441\u044c DOD5015
 dod_dod5015.property.dod_publicationDate.title=\u0414\u0430\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438
 dod_dod5015.property.dod_publicationDate.decription=\u0414\u0430\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438
 dod_dod5015.property.dod_originator.title=\u0418\u043d\u0438\u0446\u0438\u0430\u0442\u043e\u0440
@@ -27,9 +27,9 @@ dod_dod5015.property.dod_address.title=\u0410\u0434\u0440\u0435\u0441\u0430\u044
 dod_dod5015.property.dod_address.decription=\u0410\u0434\u0440\u0435\u0441\u0430\u0442
 dod_dod5015.property.dod_otherAddress.title=\u0414\u0440\u0443\u0433\u043e\u0439 \u0430\u0434\u0440\u0435\u0441\u0430\u0442
 dod_dod5015.property.dod_otherAddress.decription=\u0414\u0440\u0443\u0433\u043e\u0439 \u0430\u0434\u0440\u0435\u0441\u0430\u0442
-         
+
 dod_dod5015.aspect.dod_scannedRecord.title=\u041e\u0442\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c
-dod_dod5015.aspect.dod_scannedRecord.description=\u041e\u0442\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c        
+dod_dod5015.aspect.dod_scannedRecord.description=\u041e\u0442\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c
 dod_dod5015.property.dod_scannedFormat.title=\u0424\u043e\u0440\u043c\u0430\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f
 dod_dod5015.property.dod_scannedFormat.description=\u0424\u043e\u0440\u043c\u0430\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f
 dod_dod5015.property.dod_scannedFormatVersion.title=\u0424\u043e\u0440\u043c\u0430\u0442 \u0438 \u0432\u0435\u0440\u0441\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f
@@ -53,7 +53,7 @@ dod_dod5015.property.dod_creatingApplication.title=\u0421\u043e\u0437\u0434\u043
 dod_dod5015.property.dod_creatingApplication.description=\u0421\u043e\u0437\u0434\u0430\u044e\u0449\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435
 dod_dod5015.property.dod_documentSecuritySettings.title=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430
 dod_dod5015.property.dod_documentSecuritySettings.description=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430
-   
+
 dod_dod5015.aspect.dod_digitalPhotographRecord.title=\u0417\u0430\u043f\u0438\u0441\u044c \u0432 \u0432\u0438\u0434\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438
 dod_dod5015.aspect.dod_digitalPhotographRecord.description=\u0417\u0430\u043f\u0438\u0441\u044c \u0432 \u0432\u0438\u0434\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438
 dod_dod5015.property.dod_caption.title=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_zh_CN.properties
index 30dcfe4419..0e1b7a579b 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015-model_zh_CN.properties
@@ -1,16 +1,16 @@
 dod_dod5015.description=DOD5015 \u5185\u5bb9\u6a21\u578b
-    
+
 dod_dod5015.type.dod_site.title=DOD5015 \u7ad9\u70b9
 dod_dod5015.type.dod_site.description=DOD5015 \u7ad9\u70b9
 
 dod_dod5015.type.dod_filePlan.title=DOD5015 \u5f52\u7c7b\u65b9\u6848
-dod_dod5015.type.dod_filePlan.description=DOD5015 \u5f52\u7c7b\u65b9\u6848    
-          
+dod_dod5015.type.dod_filePlan.description=DOD5015 \u5f52\u7c7b\u65b9\u6848
+
 dod_dod5015.type.dod_recordSeries.title=\u8bb0\u5f55\u7cfb\u5217\uff08\u5df2\u5f03\u7528\uff09
 dod_dod5015.type.dod_recordSeries.description=\u8bb0\u5f55\u7cfb\u5217\uff08\u5df2\u5f03\u7528\uff09
 
 dod_dod5015.aspect.dod_dod5015record.title=DOD5015 \u8bb0\u5f55
-dod_dod5015.aspect.dod_dod5015record.description=DOD5015 \u8bb0\u5f55 
+dod_dod5015.aspect.dod_dod5015record.description=DOD5015 \u8bb0\u5f55
 dod_dod5015.property.dod_publicationDate.title=\u53d1\u5e03\u65e5\u671f
 dod_dod5015.property.dod_publicationDate.decription=\u53d1\u5e03\u65e5\u671f
 dod_dod5015.property.dod_originator.title=\u5efa\u7acb\u8005
@@ -27,9 +27,9 @@ dod_dod5015.property.dod_address.title=\u6536\u4ef6\u4eba
 dod_dod5015.property.dod_address.decription=\u6536\u4ef6\u4eba
 dod_dod5015.property.dod_otherAddress.title=\u5176\u4ed6\u6536\u4ef6\u4eba
 dod_dod5015.property.dod_otherAddress.decription=\u5176\u4ed6\u6536\u4ef6\u4eba
-         
+
 dod_dod5015.aspect.dod_scannedRecord.title=\u626b\u63cf\u7684\u8bb0\u5f55
-dod_dod5015.aspect.dod_scannedRecord.description=\u626b\u63cf\u7684\u8bb0\u5f55        
+dod_dod5015.aspect.dod_scannedRecord.description=\u626b\u63cf\u7684\u8bb0\u5f55
 dod_dod5015.property.dod_scannedFormat.title=\u56fe\u50cf\u683c\u5f0f
 dod_dod5015.property.dod_scannedFormat.description=\u56fe\u50cf\u683c\u5f0f
 dod_dod5015.property.dod_scannedFormatVersion.title=\u56fe\u50cf\u683c\u5f0f\u548c\u7248\u672c
@@ -53,7 +53,7 @@ dod_dod5015.property.dod_creatingApplication.title=\u521b\u5efa\u5e94\u7528\u7a0
 dod_dod5015.property.dod_creatingApplication.description=\u521b\u5efa\u5e94\u7528\u7a0b\u5e8f
 dod_dod5015.property.dod_documentSecuritySettings.title=\u6587\u6863\u5b89\u5168\u8bbe\u7f6e
 dod_dod5015.property.dod_documentSecuritySettings.description=\u6587\u6863\u5b89\u5168\u8bbe\u7f6e
-   
+
 dod_dod5015.aspect.dod_digitalPhotographRecord.title=\u6570\u7801\u7167\u7247\u8bb0\u5f55
 dod_dod5015.aspect.dod_digitalPhotographRecord.description=\u6570\u7801\u7167\u7247\u8bb0\u5f55
 dod_dod5015.property.dod_caption.title=\u6807\u9898
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_de.properties
index 88de8c3e0e..2616b791ff 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_de.properties
@@ -5,4 +5,4 @@ capability.CreateModifyDestroyClassificationGuides.title=Klassifizierungsleitfad
 capability.UpgradeDowngradeAndDeclassifyRecords.title=Records h\u00f6her-/herunterstufen und ihre Klassifizierung aufheben
 capability.UpdateExemptionCategories.title=Ausnahmekategorien aktualisieren
 capability.MapClassificationGuideMetadata.title=Metadaten f\u00fcr Klassifizierungsleitfaden zuordnen
-capability.CreateModifyDestroyTimeframes.title=Zeitrahmen erstellen/\u00e4ndern/vernichten
\ No newline at end of file
+capability.CreateModifyDestroyTimeframes.title=Zeitrahmen erstellen/\u00e4ndern/vernichten
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_es.properties
index 18a13ca2e5..3d506edd3c 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_es.properties
@@ -5,4 +5,4 @@ capability.CreateModifyDestroyClassificationGuides.title=Crear Modificar Destrui
 capability.UpgradeDowngradeAndDeclassifyRecords.title=Actualizar, degradar y desclasificar documentos de archivo
 capability.UpdateExemptionCategories.title=Actualizar categor\u00edas de exenci\u00f3n
 capability.MapClassificationGuideMetadata.title=Asignar metadatos de gu\u00eda de clasificaci\u00f3n
-capability.CreateModifyDestroyTimeframes.title=Crear Modificar Destruir plazos de tiempo
\ No newline at end of file
+capability.CreateModifyDestroyTimeframes.title=Crear Modificar Destruir plazos de tiempo
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_fr.properties
index c20654908c..a4fcae8e01 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_fr.properties
@@ -5,4 +5,4 @@ capability.CreateModifyDestroyClassificationGuides.title=Cr\u00e9er Modifier D\u
 capability.UpgradeDowngradeAndDeclassifyRecords.title=Mettre \u00e0 jour R\u00e9trograder et D\u00e9classer des documents d'archives
 capability.UpdateExemptionCategories.title=Mettre \u00e0 jour les cat\u00e9gories d'exemption
 capability.MapClassificationGuideMetadata.title=Mapper les m\u00e9tadonn\u00e9es de guides de classement
-capability.CreateModifyDestroyTimeframes.title=Cr\u00e9er Modifier D\u00e9truire des d\u00e9lais
\ No newline at end of file
+capability.CreateModifyDestroyTimeframes.title=Cr\u00e9er Modifier D\u00e9truire des d\u00e9lais
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_it.properties
index 59bfcf86d6..c969fba7eb 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_it.properties
@@ -5,4 +5,4 @@ capability.CreateModifyDestroyClassificationGuides.title=Crea Modifica Elimina d
 capability.UpgradeDowngradeAndDeclassifyRecords.title=Upgrade Downgrade e Declassifica record
 capability.UpdateExemptionCategories.title=Aggiorna categorie di esenzione
 capability.MapClassificationGuideMetadata.title=Esegui il mapping dei metadati della guida di classificazione
-capability.CreateModifyDestroyTimeframes.title=Crea Modifica Elimina definitivamente intervalli di tempo
\ No newline at end of file
+capability.CreateModifyDestroyTimeframes.title=Crea Modifica Elimina definitivamente intervalli di tempo
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_ja.properties
index fdf2104d71..64c65a711a 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_ja.properties
@@ -5,4 +5,4 @@ capability.CreateModifyDestroyClassificationGuides.title=\u5206\u985e\u30ac\u30a
 capability.UpgradeDowngradeAndDeclassifyRecords.title=\u30c0\u30a6\u30f3\u30b0\u30ec\u30fc\u30c9\u306e\u66f4\u65b0\u3068\u30ec\u30b3\u30fc\u30c9\u306e\u5206\u985e\u89e3\u9664
 capability.UpdateExemptionCategories.title=\u9664\u5916\u30ab\u30c6\u30b4\u30ea\u306e\u66f4\u65b0
 capability.MapClassificationGuideMetadata.title=\u5206\u985e\u30ac\u30a4\u30c9\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u30de\u30c3\u30d4\u30f3\u30b0
-capability.CreateModifyDestroyTimeframes.title=\u30bf\u30a4\u30e0\u30d5\u30ec\u30fc\u30e0\u306e\u4f5c\u6210/\u5909\u66f4/\u7834\u68c4
\ No newline at end of file
+capability.CreateModifyDestroyTimeframes.title=\u30bf\u30a4\u30e0\u30d5\u30ec\u30fc\u30e0\u306e\u4f5c\u6210/\u5909\u66f4/\u7834\u68c4
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_nb.properties
index 2b2676732c..e4f1fa4030 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_nb.properties
@@ -5,4 +5,4 @@ capability.CreateModifyDestroyClassificationGuides.title=Opprett Endre Destruer
 capability.UpgradeDowngradeAndDeclassifyRecords.title=Oppgrader, last ned og deklassifiser oppf\u00f8ringer
 capability.UpdateExemptionCategories.title=Oppdater unntakskategorier
 capability.MapClassificationGuideMetadata.title=Koble klassifiseringsveiledning metadata
-capability.CreateModifyDestroyTimeframes.title=Opprett Endre Destruer tidsrammer
\ No newline at end of file
+capability.CreateModifyDestroyTimeframes.title=Opprett Endre Destruer tidsrammer
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_nl.properties
index 92c80ba122..84884b5732 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_nl.properties
@@ -5,4 +5,4 @@ capability.CreateModifyDestroyClassificationGuides.title=Classificatiegidsen mak
 capability.UpgradeDowngradeAndDeclassifyRecords.title=Records upgraden, downgraden en declassificeren
 capability.UpdateExemptionCategories.title=Uitzonderingscategorie\u00ebn bijwerken
 capability.MapClassificationGuideMetadata.title=Metagegevens classificatiegids toewijzen
-capability.CreateModifyDestroyTimeframes.title=Tijdsperiodes maken aanpassen vernietigen
\ No newline at end of file
+capability.CreateModifyDestroyTimeframes.title=Tijdsperiodes maken aanpassen vernietigen
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_pt_BR.properties
index 7ea8f652e5..b680fefaaa 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_pt_BR.properties
@@ -5,4 +5,4 @@ capability.CreateModifyDestroyClassificationGuides.title=Criar Modificar Destrui
 capability.UpgradeDowngradeAndDeclassifyRecords.title=Atualizar Downgrade e Desclassificar documentos arquiv\u00edsticos
 capability.UpdateExemptionCategories.title=Atualizar categorias de isen\u00e7\u00e3o
 capability.MapClassificationGuideMetadata.title=Mapear metadados do guia de classifica\u00e7\u00e3o
-capability.CreateModifyDestroyTimeframes.title=Criar Modificar Destruir per\u00edodos de tempo
\ No newline at end of file
+capability.CreateModifyDestroyTimeframes.title=Criar Modificar Destruir per\u00edodos de tempo
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_ru.properties
index d369d06dcb..f2e703c148 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_ru.properties
@@ -5,4 +5,4 @@ capability.CreateModifyDestroyClassificationGuides.title=\u0421\u043e\u0437\u043
 capability.UpgradeDowngradeAndDeclassifyRecords.title=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c, \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u043a \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u043c \u0438 \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0437\u0430\u043f\u0438\u0441\u0435\u0439
 capability.UpdateExemptionCategories.title=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439
 capability.MapClassificationGuideMetadata.title=\u0421\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438
-capability.CreateModifyDestroyTimeframes.title=\u0421\u043e\u0437\u0434\u0430\u0442\u044c, \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b
\ No newline at end of file
+capability.CreateModifyDestroyTimeframes.title=\u0421\u043e\u0437\u0434\u0430\u0442\u044c, \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_zh_CN.properties
index 7a88064b24..c4c6dae3bf 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/dod5015/messages/dod5015_zh_CN.properties
@@ -5,4 +5,4 @@ capability.CreateModifyDestroyClassificationGuides.title=\u521b\u5efa\u4fee\u653
 capability.UpgradeDowngradeAndDeclassifyRecords.title=\u8bb0\u5f55\u7684\u5347\u7ea7\u3001\u964d\u7ea7\u4ee5\u53ca\u53d6\u6d88\u5206\u7c7b
 capability.UpdateExemptionCategories.title=\u66f4\u65b0\u8c41\u514d\u7c7b\u522b
 capability.MapClassificationGuideMetadata.title=\u6620\u5c04\u5206\u7c7b\u6307\u5357\u5143\u6570\u636e
-capability.CreateModifyDestroyTimeframes.title=\u521b\u5efa\u4fee\u6539\u9500\u6bc1\u65f6\u95f4\u8303\u56f4
\ No newline at end of file
+capability.CreateModifyDestroyTimeframes.title=\u521b\u5efa\u4fee\u6539\u9500\u6bc1\u65f6\u95f4\u8303\u56f4
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_de.properties
index 375adf65c2..73c4bf690f 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_de.properties
@@ -28,7 +28,7 @@ rm.action.not-hold-type=Die Aktion kann nicht f\u00fcr {1} durchgef\u00fchrt wer
 rm.action.no-read-mime-message=Die Dateityp-Nachricht konnte nicht gelesen werden, da {0}.
 rm.action.email-declared=Die E-Mail konnte nicht geteilt werden, da der Record abgeschlossen ist. (actionedUponNodeRef={0})
 rm.action.email-not-record=Die E-Mail konnte nicht geteilt werden, da die Datei, der Ordner bzw. die Kategorie kein Record ist. (actionedUponNodeRef={0})
-rm.action.email-create-child-assoc=Benutzerdefinierte Kindzuordnung konnte nicht erstellt werden.
+rm.action.email-create-child-assoc=Benutzerdefinierte Unterordnung konnte nicht erstellt werden.
 rm.action.node-already-transfer=Datei, Ordner oder Kategorie wird bereits \u00fcbertragen.
 rm.action.node-not-transfer=Datei, Ordner oder Kategorie ist kein \u00dcbertragungsobjekt.
 rm.action.undo-not-last=Trennung kann nicht aufgehoben werden, da die letzte Aufbewahrungsaktion nicht getrennt wurde.
@@ -36,7 +36,7 @@ rm.action.records_only_undeclared=Es k\u00f6nnen nur Records abgeschlossen werde
 rm.action.event-not-undone=Sie k\u00f6nnen das Ereignis {0} nicht r\u00fcckg\u00e4ngig machen, da es nicht im Aufbewahrungszyklus definiert ist.
 rm.action.node-not-record-category=Sie k\u00f6nnen keinen Aufbewahrungsplan f\u00fcr ({0}) erstellen, da es sich nicht um eine Record-Kategorie handelt.
 rm.action.parameter-not-supplied=F\u00fcgen Sie ''{0}'' hinzu, um fortzufahren.
-rm.action.delete-not-hold-type=Die Sperre konnte nicht gel\u00f6scht werden, da {1} nicht vom Typ {0} ist. 
+rm.action.delete-not-hold-type=Die Sperre konnte nicht gel\u00f6scht werden, da {1} nicht vom Typ {0} ist.
 rm.action.cast-to-rm-type=Ein benutzerdefinierter Ordnertyp kann nicht in einen Records Management Ablageplan hochgeladen werden.
 rm.action.record-folder-create=Ein Record-Ordner kann nicht in einem anderen Record-Ordner erstellt werden.
 
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_es.properties
index b24be31b4a..56bbb1b760 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_es.properties
@@ -30,13 +30,13 @@ rm.action.email-declared=No se pudo separar el correo electr\u00f3nico porque el
 rm.action.email-not-record=No se pudo separar el correo electr\u00f3nico porque el fichero, ni la carpeta ni la categor\u00eda son un documento de archivo. (actionedUponNodeRef={0})
 rm.action.email-create-child-assoc=No se puedo crear una asociaci\u00f3n secundaria personalizada.
 rm.action.node-already-transfer=El fichero, carpeta o categor\u00eda ya se est\u00e1 trasfiriendo.
-rm.action.node-not-transfer=El fichero, carpeta o categor\u00eda no es un objeto de transferencia. 
+rm.action.node-not-transfer=El fichero, carpeta o categor\u00eda no es un objeto de transferencia.
 rm.action.undo-not-last=No puede deshacer la interrupci\u00f3n porque la \u00faltima acci\u00f3n de retenci\u00f3n no se interrumpi\u00f3.
 rm.action.records_only_undeclared=Solo puede completar documentos de archivo.
 rm.action.event-not-undone=No puede deshacer el evento ''{0}'' porque no se ha definido en el ciclo de vida de retenci\u00f3n.
 rm.action.node-not-record-category=No puede crear una planificaci\u00f3n de retenci\u00f3n para (''{0}'') porque no es una categor\u00eda de documento de archivo.
 rm.action.parameter-not-supplied=A\u00f1ada un ''{0}'' para continuar.
-rm.action.delete-not-hold-type=No se pudo eliminar el bloqueo porque ''{1}'' no es del tipo ''{0}''. 
+rm.action.delete-not-hold-type=No se pudo eliminar el bloqueo porque ''{1}'' no es del tipo ''{0}''.
 rm.action.cast-to-rm-type=No puede cargar un tipo de carpeta personalizada al plan de ficheros de Records Management.
 rm.action.record-folder-create=No puede crear una carpeta de documentos de archivo en otra carpeta de documentos de archivo.
 
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_fr.properties
index 464ff32942..c01d49c0f7 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_fr.properties
@@ -28,7 +28,7 @@ rm.action.not-hold-type=Impossible d''effectuer l''action sur {1}, car ce n''est
 rm.action.no-read-mime-message=Le message filetype est illisible, car {0}.
 rm.action.email-declared=Impossible de partager l''e-mail, car le document d''archives n''est pas complet. (actionedUponNodeRef={0})
 rm.action.email-not-record=Impossible de partager l''e-mail, car le fichier, le dossier ou la cat\u00e9gorie n''est pas un document d''archives. (actionedUponNodeRef={0})
-rm.action.email-create-child-assoc=Impossible de cr\u00e9er une association d'enfant personnalis\u00e9e.
+rm.action.email-create-child-assoc=Impossible de cr\u00e9er une sous-association personnalis\u00e9e.
 rm.action.node-already-transfer=Le fichier, le dossier ou la cat\u00e9gorie est d\u00e9j\u00e0 en cours de transfert.
 rm.action.node-not-transfer=Le fichier, le dossier ou la cat\u00e9gorie n'est pas un objet de transfert.
 rm.action.undo-not-last=Impossible d'annuler le d\u00e9classement car la derni\u00e8re action de r\u00e9tention n'\u00e9tait pas un d\u00e9classement.
@@ -36,7 +36,7 @@ rm.action.records_only_undeclared=Seuls les documents d'archives peuvent \u00eat
 rm.action.event-not-undone=Impossible d''annuler l''\u00e9v\u00e9nement {0}, car il n''est pas d\u00e9fini dans les \u00e9tapes du d\u00e9lai de r\u00e9tention.
 rm.action.node-not-record-category=Impossible de cr\u00e9er une r\u00e8gle de r\u00e9tention pour ({0}), car ce n''est pas une cat\u00e9gorie de document d''archives.
 rm.action.parameter-not-supplied=Ajouter un(e) ''{0}'' pour continuer.
-rm.action.delete-not-hold-type=Impossible de supprimer la suspension, car {1} n''est pas de type {0}. 
+rm.action.delete-not-hold-type=Impossible de supprimer la suspension, car {1} n''est pas de type {0}.
 rm.action.cast-to-rm-type=Impossible de t\u00e9l\u00e9charger un type de dossier personnalis\u00e9 dans le plan de classification de gestion des archives.
 rm.action.record-folder-create=Impossible de cr\u00e9er un dossier d'archives dans un autre dossier d'archives.
 
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_it.properties
index 9ba4c44010..45714724e2 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_it.properties
@@ -20,7 +20,7 @@ rm.action.disp-asof-lifecycle-applied=Impossibile modificare la data di inizio d
 rm.action.hold-edit-reason-none=Impossibile modificare il motivo della sospensione poich\u00e9 la sospensione \u00e8 stata creata senza un motivo. Provare a ricreare la sospensione.
 rm.action.hold-edit-type=Impossibile modificare la sospensione per {1} poich\u00e9 non \u00e8 una sospensione.
 rm.action.specify-avlid-date=Inserire una data valida come data di inizio dell'esame.
-rm.action.review-details-only=\u00c8 possibile modificare solo i dettagli dell'esame dei record fondamentali. 
+rm.action.review-details-only=\u00c8 possibile modificare solo i dettagli dell'esame dei record fondamentali.
 rm.action.freeze-no-reason=Impossibile sospendere un record senza un motivo. Aggiungere un motivo alla sospensione.
 rm.action.freeze-only-records-folders=\u00c8 possibile sospendere solo record o cartelle di record.
 rm.action.no-open-record-folder=Impossibile riaprire {0} poich\u00e9 non si tratta di una cartella di record.
@@ -36,7 +36,7 @@ rm.action.records_only_undeclared=\u00c8 solo possibile completare i record.
 rm.action.event-not-undone=Non \u00e8 possibile annullare l''evento {0} poich\u00e9 non \u00e8 definito sul ciclo di vita di conservazione.
 rm.action.node-not-record-category=Impossibile creare un programma di conservazione per {0} poich\u00e9 non si tratta di una categoria di record.
 rm.action.parameter-not-supplied=Aggiungi un ''{0}'' per continuare.
-rm.action.delete-not-hold-type=Impossibile eliminare la sospensione poich\u00e9 {1} non \u00e8 del tipo {0}. 
+rm.action.delete-not-hold-type=Impossibile eliminare la sospensione poich\u00e9 {1} non \u00e8 del tipo {0}.
 rm.action.cast-to-rm-type=Impossibile caricare un tipo di cartella personalizzata sul piano file di Records Management.
 rm.action.record-folder-create=Impossibile creare una cartella di record in un'altra cartella di record.
 
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_ja.properties
index 62ebe34330..3ec3afe394 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_ja.properties
@@ -36,7 +36,7 @@ rm.action.records_only_undeclared=\u5b8c\u4e86\u3067\u304d\u308b\u306e\u306f\u30
 rm.action.event-not-undone=\u30a4\u30d9\u30f3\u30c8 ''{0}'' \u306f\u4fdd\u7ba1\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u5143\u306b\u623b\u3059\u64cd\u4f5c\u306f\u884c\u3048\u307e\u305b\u3093\u3002
 rm.action.node-not-record-category=''{0}'' \u306f\u30ec\u30b3\u30fc\u30c9\u30ab\u30c6\u30b4\u30ea\u3067\u306f\u306a\u3044\u305f\u3081\u3001\u4fdd\u7ba1\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002
 rm.action.parameter-not-supplied=''{0}'' \u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-rm.action.delete-not-hold-type=''{1}'' \u306f\u30bf\u30a4\u30d7 ''{0}'' \u3067\u306f\u306a\u3044\u305f\u3081\u3001\u30db\u30fc\u30eb\u30c9\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 
+rm.action.delete-not-hold-type=''{1}'' \u306f\u30bf\u30a4\u30d7 ''{0}'' \u3067\u306f\u306a\u3044\u305f\u3081\u3001\u30db\u30fc\u30eb\u30c9\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
 rm.action.cast-to-rm-type=\u30ab\u30b9\u30bf\u30e0\u306e\u30d5\u30a9\u30eb\u30c0\u30bf\u30a4\u30d7\u306f\u3001\u30ec\u30b3\u30fc\u30c9\u7ba1\u7406\u306e\u6574\u7406\u4fdd\u7ba1\u30d7\u30e9\u30f3\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u307e\u305b\u3093\u3002
 rm.action.record-folder-create=\u5225\u306e\u30ec\u30b3\u30fc\u30c9\u30d5\u30a9\u30eb\u30c0\u5185\u306b\u30ec\u30b3\u30fc\u30c9\u30d5\u30a9\u30eb\u30c0\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
 
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_nb.properties
index f815e606b4..7292ac3940 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_nb.properties
@@ -36,7 +36,7 @@ rm.action.records_only_undeclared=Du kan bare fullf\u00f8re oppf\u00f8ringer.
 rm.action.event-not-undone=Hendelsen {0} kan ikke angres fordi den ikke p\u00e5 definert i livssyklusen ved retensjon.
 rm.action.node-not-record-category=Retensjonsplanen til {0} kan ikke opprett fordi den er ikke en oppf\u00f8ringskategori.
 rm.action.parameter-not-supplied=Legg til ''{0}'' for \u00e5 fortsette.
-rm.action.delete-not-hold-type=Holdet kan ikke slettes fordi {1} ikke er en type {0}. 
+rm.action.delete-not-hold-type=Holdet kan ikke slettes fordi {1} ikke er en type {0}.
 rm.action.cast-to-rm-type=En tilpasset mappetype kan ikke lastes opp p\u00e5 oppf\u00f8ringsh\u00e5ndteringsfilplanen.
 rm.action.record-folder-create=En oppf\u00f8ringsmappen kan ikke opprettes i en annen oppf\u00f8ringsmappe.
 
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_nl.properties
index 084f6340e8..f812e8519a 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_nl.properties
@@ -36,7 +36,7 @@ rm.action.records_only_undeclared=U kunt alleen records afronden.
 rm.action.event-not-undone=U kunt de gebeurtenis {0} niet ongedaan maken omdat deze niet in de retentiecyclus is gedefinieerd.
 rm.action.node-not-record-category=U kunt geen retentieschema maken voor {0} omdat dit geen recordcategorie is.
 rm.action.parameter-not-supplied=Voeg een ''{0}'' toe om door te gaan.
-rm.action.delete-not-hold-type=De wachtstand kan niet worden verwijderd omdat {1} niet van het type {0} is. 
+rm.action.delete-not-hold-type=De wachtstand kan niet worden verwijderd omdat {1} niet van het type {0} is.
 rm.action.cast-to-rm-type=U kunt geen aangepast maptype uploaden naar het ordeningsplan van Records Management.
 rm.action.record-folder-create=U kunt geen archiefmap in een andere archiefmap maken.
 
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_pt_BR.properties
index fddaeebd06..8c21382275 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_pt_BR.properties
@@ -36,7 +36,7 @@ rm.action.records_only_undeclared=Voc\u00ea s\u00f3 pode concluir documentos arq
 rm.action.event-not-undone=N\u00e3o \u00e9 poss\u00edvel desfazer o evento {0}, pois ele n\u00e3o est\u00e1 definido no ciclo de vida de reten\u00e7\u00e3o.
 rm.action.node-not-record-category=N\u00e3o \u00e9 poss\u00edvel criar uma programa\u00e7\u00e3o de reten\u00e7\u00e3o para ({0}), pois n\u00e3o \u00e9 uma categoria de documento arquiv\u00edstico.
 rm.action.parameter-not-supplied=Adicione um(a) ''{0}'' para continuar.
-rm.action.delete-not-hold-type=N\u00e3o foi poss\u00edvel excluir a espera, pois {1} n\u00e3o \u00e9 do tipo {0}. 
+rm.action.delete-not-hold-type=N\u00e3o foi poss\u00edvel excluir a espera, pois {1} n\u00e3o \u00e9 do tipo {0}.
 rm.action.cast-to-rm-type=N\u00e3o \u00e9 poss\u00edvel carregar um tipo de pasta personalizada para o plano de arquivo do Records Management.
 rm.action.record-folder-create=N\u00e3o \u00e9 poss\u00edvel criar uma pasta de documento arquiv\u00edstico em outra pasta de documento arquiv\u00edstico.
 
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_ru.properties
index 701808232d..76066cb255 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_ru.properties
@@ -36,7 +36,7 @@ rm.action.records_only_undeclared=\u041c\u043e\u0436\u043d\u043e \u0442\u043e\u0
 rm.action.event-not-undone=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 {0}: \u0434\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u0432 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.
 rm.action.node-not-record-category=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f ({0}): \u0434\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.
 rm.action.parameter-not-supplied=\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 ''{0}'', \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c.
-rm.action.delete-not-hold-type=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443: {1} \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0442\u0438\u043f\u0443 {0}. 
+rm.action.delete-not-hold-type=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443: {1} \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0442\u0438\u043f\u0443 {0}.
 rm.action.cast-to-rm-type=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0442\u0438\u043f \u043f\u0430\u043f\u043a\u0438 \u0432 \u0430\u0440\u0445\u0438\u0432 \u043f\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438.
 rm.action.record-folder-create=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u043f\u0430\u043f\u043a\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.
 
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_zh_CN.properties
index 44663bcb67..32c358f2bf 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service_zh_CN.properties
@@ -36,7 +36,7 @@ rm.action.records_only_undeclared=\u60a8\u53ea\u80fd\u5b8c\u6210\u8bb0\u5f55\u30
 rm.action.event-not-undone=\u60a8\u65e0\u6cd5\u64a4\u9500\u4e8b\u4ef6 {0}\uff0c\u56e0\u4e3a\u5176\u672a\u5728\u4fdd\u7559\u751f\u547d\u5468\u671f\u4e0a\u5b9a\u4e49\u3002
 rm.action.node-not-record-category=\u60a8\u65e0\u6cd5\u4e3a ({0}) \u521b\u5efa\u4fdd\u7559\u8ba1\u5212\uff0c\u56e0\u4e3a\u5b83\u4e0d\u662f\u8bb0\u5f55\u7c7b\u522b\u3002
 rm.action.parameter-not-supplied=\u6dfb\u52a0\u4e00\u4e2a ''{0}'' \u4ee5\u7ee7\u7eed\u3002
-rm.action.delete-not-hold-type=\u6211\u4eec\u65e0\u6cd5\u5220\u9664\u4fdd\u5b58\uff0c\u56e0\u4e3a {1} \u5e76\u672a {0} \u7c7b\u578b\u3002 
+rm.action.delete-not-hold-type=\u6211\u4eec\u65e0\u6cd5\u5220\u9664\u4fdd\u5b58\uff0c\u56e0\u4e3a {1} \u5e76\u672a {0} \u7c7b\u578b\u3002
 rm.action.cast-to-rm-type=\u60a8\u65e0\u6cd5\u4e0a\u4f20\u81ea\u5b9a\u4e49\u6587\u4ef6\u5939\u7c7b\u578b\u5230\u8bb0\u5f55\u7ba1\u7406\u5f52\u7c7b\u65b9\u6848\u3002
 rm.action.record-folder-create=\u60a8\u65e0\u6cd5\u5728\u53e6\u4e00\u4e2a\u8bb0\u5f55\u6587\u4ef6\u5939\u4e2d\u521b\u5efa\u8bb0\u5f55\u6587\u4ef6\u5939\u3002
 
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_de.properties
index 9d16bc1422..6df25a0a93 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_de.properties
@@ -208,4 +208,4 @@ rm-ac-disposition-action-relative-positions.any=Jede
 
 ac-versions.none=Nie
 ac-versions.major_only=Nur f\u00fcr Hauptversionen
-ac-versions.all=F\u00fcr alle Haupt- und Nebenversionen
\ No newline at end of file
+ac-versions.all=F\u00fcr alle Haupt- und Nebenversionen
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_es.properties
index f6514b27d5..02cf801b3d 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_es.properties
@@ -208,4 +208,4 @@ rm-ac-disposition-action-relative-positions.any=Cualquiera
 
 ac-versions.none=Nunca
 ac-versions.major_only=Solo para versiones mayores
-ac-versions.all=Para todas las versiones mayores y menores
\ No newline at end of file
+ac-versions.all=Para todas las versiones mayores y menores
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_fr.properties
index 7ddffe7a72..453a37d754 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_fr.properties
@@ -208,4 +208,4 @@ rm-ac-disposition-action-relative-positions.any=N'importe lequel
 
 ac-versions.none=Jamais
 ac-versions.major_only=Uniquement les versions majeures
-ac-versions.all=Versions majeures et mineures
\ No newline at end of file
+ac-versions.all=Versions majeures et mineures
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_it.properties
index 36cc1cd0d4..e28f99e268 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_it.properties
@@ -208,4 +208,4 @@ rm-ac-disposition-action-relative-positions.any=Qualsiasi
 
 ac-versions.none=Mai
 ac-versions.major_only=Solo per versioni maggiori
-ac-versions.all=Per tutte le versioni maggiori e minori
\ No newline at end of file
+ac-versions.all=Per tutte le versioni maggiori e minori
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_ja.properties
index 3a487c02aa..66edeac4a8 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_ja.properties
@@ -208,4 +208,4 @@ rm-ac-disposition-action-relative-positions.any=\u4efb\u610f
 
 ac-versions.none=\u8a2d\u5b9a\u3057\u306a\u3044
 ac-versions.major_only=\u30e1\u30b8\u30e3\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u307f
-ac-versions.all=\u3059\u3079\u3066\u306e\u30e1\u30b8\u30e3\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3\u3068\u30de\u30a4\u30ca\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3
\ No newline at end of file
+ac-versions.all=\u3059\u3079\u3066\u306e\u30e1\u30b8\u30e3\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3\u3068\u30de\u30a4\u30ca\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_nb.properties
index f042d4f798..95d84189d7 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_nb.properties
@@ -208,4 +208,4 @@ rm-ac-disposition-action-relative-positions.any=Enhver
 
 ac-versions.none=Aldri
 ac-versions.major_only=Kun hovedversjoner
-ac-versions.all=Til alle hovedversjoner og mindre versjoner
\ No newline at end of file
+ac-versions.all=Til alle hovedversjoner og mindre versjoner
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_nl.properties
index 9dccabde5d..e58d22c5f6 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_nl.properties
@@ -208,4 +208,4 @@ rm-ac-disposition-action-relative-positions.any=Willekeurig
 
 ac-versions.none=Nooit
 ac-versions.major_only=Alleen voor primaire versies
-ac-versions.all=Voor alle primaire en secundaire versies
\ No newline at end of file
+ac-versions.all=Voor alle primaire en secundaire versies
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_pt_BR.properties
index 565de14090..eb3716a316 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_pt_BR.properties
@@ -208,4 +208,4 @@ rm-ac-disposition-action-relative-positions.any=Qualquer
 
 ac-versions.none=Nunca
 ac-versions.major_only=Somente para vers\u00f5es principais
-ac-versions.all=Para todas as vers\u00f5es principais e secund\u00e1rias
\ No newline at end of file
+ac-versions.all=Para todas as vers\u00f5es principais e secund\u00e1rias
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_ru.properties
index 313be895b1..e562739b28 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_ru.properties
@@ -208,4 +208,4 @@ rm-ac-disposition-action-relative-positions.any=\u041b\u044e\u0431\u043e\u0439
 
 ac-versions.none=\u041d\u0438\u043a\u043e\u0433\u0434\u0430
 ac-versions.major_only=\u0422\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439
-ac-versions.all=\u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439
\ No newline at end of file
+ac-versions.all=\u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_zh_CN.properties
index 8ce93cfa0f..7dddfeb1c8 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/actions_zh_CN.properties
@@ -208,4 +208,4 @@ rm-ac-disposition-action-relative-positions.any=\u4efb\u4f55
 
 ac-versions.none=\u4ece\u4e0d
 ac-versions.major_only=\u4ec5\u9002\u7528\u4e8e\u4e3b\u8981\u7248\u672c
-ac-versions.all=\u9002\u7528\u4e8e\u6240\u6709\u4e3b\u8981\u548c\u6b21\u8981\u7248\u672c
\ No newline at end of file
+ac-versions.all=\u9002\u7528\u4e8e\u6240\u6709\u4e3b\u8981\u548c\u6b21\u8981\u7248\u672c
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_de.properties
index eb2075564c..a02758b739 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_de.properties
@@ -13,4 +13,4 @@ rm.admin.custom-model-not-found=Benutzerdefiniertes Modell {0} wurde nicht gefun
 rm.admin.custom-model-no-content=Benutzerdefiniertes Modell hat keinen Inhalt. (nodeRef={0})
 rm.admin.error-write-custom-model=Beim Schreiben von benutzerdefiniertem Modellinhalt ist ein Problem aufgetreten. (nodeRef={0}).
 rm.admin.error-client-id=Client-ID konnte nicht generiert werden, da diese bereits verwendet wird. (clientid={0})
-rm.admin.error-split-id=ID {0} kann nicht getrennt werden, da das Trennzeichen {1} nicht vorhanden ist.
\ No newline at end of file
+rm.admin.error-split-id=ID {0} kann nicht getrennt werden, da das Trennzeichen {1} nicht vorhanden ist.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_es.properties
index 4f2219488a..4720089234 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_es.properties
@@ -13,4 +13,4 @@ rm.admin.custom-model-not-found=No se pudo encontrar el modelo personalizado ''{
 rm.admin.custom-model-no-content=El modelo personalizado no tiene contenido. (nodeRef={0})
 rm.admin.error-write-custom-model=Se produjo un problema al escribir el contenido del modelo personalizado. (nodeRef={0})
 rm.admin.error-client-id=No se pudo generar el ID de cliente porque ya est\u00e1 en uso. (clientid={0})
-rm.admin.error-split-id=No se pudo separar el ID ''{0}''. porque el separador ''{1}'' no est\u00e1 presente.
\ No newline at end of file
+rm.admin.error-split-id=No se pudo separar el ID ''{0}''. porque el separador ''{1}'' no est\u00e1 presente.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_fr.properties
index fb29061e3f..542abfcc0a 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_fr.properties
@@ -13,4 +13,4 @@ rm.admin.custom-model-not-found=Le mod\u00e8le personnalis\u00e9 {0} est introuv
 rm.admin.custom-model-no-content=Le mod\u00e8le personnalis\u00e9 n''a pas de contenu. (nodeRef={0})
 rm.admin.error-write-custom-model=Un probl\u00e8me est survenu pendant l''\u00e9criture du contenu du mod\u00e8le personnalis\u00e9. (nodeRef={0}).
 rm.admin.error-client-id=Impossible de g\u00e9n\u00e9rer l''ID client car il est d\u00e9j\u00e0 en cours d''utilisation. (clientid={0})
-rm.admin.error-split-id=Impossible de fractionner l''ID {0}. Le s\u00e9parateur {1} n''est pas pr\u00e9sent.
\ No newline at end of file
+rm.admin.error-split-id=Impossible de fractionner l''ID {0}. Le s\u00e9parateur {1} n''est pas pr\u00e9sent.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_it.properties
index 238c74cf67..33bb0f85e8 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_it.properties
@@ -13,4 +13,4 @@ rm.admin.custom-model-not-found=Impossibile trovare il modello personalizzato {0
 rm.admin.custom-model-no-content=Il modello personalizzato non ha contenuti. (nodeRef={0})
 rm.admin.error-write-custom-model=Si \u00e8 verificato un problema durante la scrittura dei contenuti del modello personalizzato. (nodeRef={0})
 rm.admin.error-client-id=Impossibile generare l''ID client, poich\u00e9 gi\u00e0 in uso. (clientid={0})
-rm.admin.error-split-id=Impossibile dividere l''ID ''{0}'' poich\u00e9 non \u00e8 presente il separatore {1}.
\ No newline at end of file
+rm.admin.error-split-id=Impossibile dividere l''ID ''{0}'' poich\u00e9 non \u00e8 presente il separatore {1}.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_ja.properties
index 37e6f1e4a3..efd6b5fb11 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_ja.properties
@@ -13,4 +13,4 @@ rm.admin.custom-model-not-found=\u30ab\u30b9\u30bf\u30e0\u30e2\u30c7\u30eb ''{0}
 rm.admin.custom-model-no-content=\u3053\u306e\u30ab\u30b9\u30bf\u30e0\u30e2\u30c7\u30eb\u306b\u306f\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u3042\u308a\u307e\u305b\u3093\u3002 (nodeRef={0})
 rm.admin.error-write-custom-model=\u30ab\u30b9\u30bf\u30e0\u30e2\u30c7\u30eb\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 (nodeRef={0}).
 rm.admin.error-client-id=\u3053\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8 ID \u306f\u3059\u3067\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002 (clientid={0})
-rm.admin.error-split-id=\u533a\u5207\u308a\u6587\u5b57 ({1}) \u304c\u306a\u3044\u305f\u3081\u3001ID ''{0}'' \u3092\u5206\u5272\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
\ No newline at end of file
+rm.admin.error-split-id=\u533a\u5207\u308a\u6587\u5b57 ({1}) \u304c\u306a\u3044\u305f\u3081\u3001ID ''{0}'' \u3092\u5206\u5272\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_nb.properties
index 9f42e6440a..03401c1125 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_nb.properties
@@ -13,4 +13,4 @@ rm.admin.custom-model-not-found=Kunne ikke finne den tilpassede modellen {0}.
 rm.admin.custom-model-no-content=Den tilpassede modellen har ikke innhold. (nodeRef={0})
 rm.admin.error-write-custom-model=Det oppsto et problem med \u00e5 skrive innholdet til den tilpassede modellen. (nodeRef={0}).
 rm.admin.error-client-id=Kunne ikke generere klient-ID for den er allerede i bruk. (clientid={0})
-rm.admin.error-split-id=Kunne ikke dele ID-en {0}. fordi grensetegnet {1} ikke fantes.
\ No newline at end of file
+rm.admin.error-split-id=Kunne ikke dele ID-en {0}. fordi grensetegnet {1} ikke fantes.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_nl.properties
index 8518804253..71e5a944d9 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_nl.properties
@@ -13,4 +13,4 @@ rm.admin.custom-model-not-found=Kan aangepast model {0} niet vinden.
 rm.admin.custom-model-no-content=Het aangepaste model heeft geen content. (nodeRef={0})
 rm.admin.error-write-custom-model=Er is een probleem opgetreden bij het schrijven van aangepaste-modelcontent. (nodeRef={0}).
 rm.admin.error-client-id=Kan de client-id niet genereren omdat deze al in gebruik is. (clientid={0})
-rm.admin.error-split-id=Kan id {0} niet opsplitsen omdat scheiding {1} niet aanwezig is.
\ No newline at end of file
+rm.admin.error-split-id=Kan id {0} niet opsplitsen omdat scheiding {1} niet aanwezig is.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_pt_BR.properties
index ed7091a363..ba6c68d645 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_pt_BR.properties
@@ -13,4 +13,4 @@ rm.admin.custom-model-not-found=N\u00e3o foi poss\u00edvel encontrar o modelo pe
 rm.admin.custom-model-no-content=O modelo personalizado n\u00e3o tem conte\u00fado. (nodeRef={0})
 rm.admin.error-write-custom-model=Encontramos um problema ao gravar o conte\u00fado do modelo personalizado. (nodeRef={0}).
 rm.admin.error-client-id=N\u00e3o foi poss\u00edvel gerar o ID do cliente, pois ele j\u00e1 est\u00e1 em uso. (clientid={0})
-rm.admin.error-split-id=N\u00e3o foi poss\u00edvel dividir o ID {0}. pois o separador {1} n\u00e3o est\u00e1 presente.
\ No newline at end of file
+rm.admin.error-split-id=N\u00e3o foi poss\u00edvel dividir o ID {0}. pois o separador {1} n\u00e3o est\u00e1 presente.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_ru.properties
index 63c64d52d9..b105207d0b 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_ru.properties
@@ -13,4 +13,4 @@ rm.admin.custom-model-not-found=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u044
 rm.admin.custom-model-no-content=\u041d\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438. (nodeRef={0})
 rm.admin.error-write-custom-model=\u041f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. (nodeRef={0}).
 rm.admin.error-client-id=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0430: \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. (clientid={0})
-rm.admin.error-split-id=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 {0}: \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b-\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c {1}.
\ No newline at end of file
+rm.admin.error-split-id=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 {0}: \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b-\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c {1}.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_zh_CN.properties
index 12b84d6341..b9b03ed143 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_zh_CN.properties
@@ -13,4 +13,4 @@ rm.admin.custom-model-not-found=\u6211\u4eec\u65e0\u6cd5\u67e5\u627e\u81ea\u5b9a
 rm.admin.custom-model-no-content=\u81ea\u5b9a\u4e49\u6a21\u578b\u6ca1\u6709\u5185\u5bb9\u3002 (nodeRef={0})
 rm.admin.error-write-custom-model=\u6211\u4eec\u5728\u7f16\u5199\u81ea\u5b9a\u4e49\u6a21\u578b\u5185\u5bb9\u65f6\u9047\u5230\u95ee\u9898\u3002 (nodeRef={0})\u3002
 rm.admin.error-client-id=\u6211\u4eec\u65e0\u6cd5\u751f\u6210\u5ba2\u6237\u7aef ID\uff0c\u56e0\u4e3a\u5b83\u5df2\u88ab\u4f7f\u7528\u3002 (clientid={0})
-rm.admin.error-split-id=\u6211\u4eec\u65e0\u6cd5\u62c6\u5206 ID {0}\uff0c \u56e0\u4e3a\u5206\u9694\u7b26 {1} \u4e0d\u5b58\u5728\u3002
\ No newline at end of file
+rm.admin.error-split-id=\u6211\u4eec\u65e0\u6cd5\u62c6\u5206 ID {0}\uff0c \u56e0\u4e3a\u5206\u9694\u7b26 {1} \u4e0d\u5b58\u5728\u3002
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_de.properties
index 701288eee2..e8e0b7be46 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_de.properties
@@ -14,4 +14,4 @@ rm.audit.audit-clear=Audit l\u00f6schen
 rm.audit.audit-view=Audit anzeigen
 rm.audit.trail-file-fail=Audit-Bericht konnte nicht generiert werden. \u00dcberpr\u00fcfen Sie die Audit-Details und versuchen Sie es erneut. Sie k\u00f6nnen sich auch an Ihre IT-Abteilung wenden.
 rm.audit.audit-report=Audit-Bericht
-recordable-version-config=Optionen f\u00fcr automatische Deklaration
\ No newline at end of file
+recordable-version-config=Optionen f\u00fcr automatische Deklaration
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_es.properties
index 7b92873769..2b025db6f7 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_es.properties
@@ -14,4 +14,4 @@ rm.audit.audit-clear=Limpiar auditor\u00eda
 rm.audit.audit-view=Ver auditor\u00eda
 rm.audit.trail-file-fail=No se pudo generar un informe de auditor\u00eda. Compruebe los detalles de auditor\u00eda y vuelva a intentarlo, o hable con el dep. de TI.
 rm.audit.audit-report=Informe de auditor\u00eda
-recordable-version-config=Opciones de declaraci\u00f3n autom\u00e1tica
\ No newline at end of file
+recordable-version-config=Opciones de declaraci\u00f3n autom\u00e1tica
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_fr.properties
index 5f817fd90e..aa3bb7c071 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_fr.properties
@@ -14,4 +14,4 @@ rm.audit.audit-clear=Audit supprim\u00e9
 rm.audit.audit-view=Audit affich\u00e9
 rm.audit.trail-file-fail=Impossible de g\u00e9n\u00e9rer un rapport d'audit. V\u00e9rifiez les informations d'audit et r\u00e9essayez ou contactez votre DSI.
 rm.audit.audit-report=Rapport d'audit
-recordable-version-config=Options de d\u00e9claration automatique
\ No newline at end of file
+recordable-version-config=Options de d\u00e9claration automatique
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_it.properties
index 6d5d99557f..0901432148 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_it.properties
@@ -14,4 +14,4 @@ rm.audit.audit-clear=Cancellazione audit
 rm.audit.audit-view=Visualizzazione audit
 rm.audit.trail-file-fail=Impossibile generare il rapporto di audit. Verificare i dettagli dell'audit e riprovare o contattare il proprio dipartimento I.T. I.T.
 rm.audit.audit-report=Rapporto audit
-recordable-version-config=Opzioni di dichiarazione automatica
\ No newline at end of file
+recordable-version-config=Opzioni di dichiarazione automatica
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_ja.properties
index 7505e1aeea..0df2727ab8 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_ja.properties
@@ -14,4 +14,4 @@ rm.audit.audit-clear=\u76e3\u67fb\u306e\u6d88\u53bb
 rm.audit.audit-view=\u76e3\u67fb\u306e\u8868\u793a
 rm.audit.trail-file-fail=\u76e3\u67fb\u30ec\u30dd\u30fc\u30c8\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 \u76e3\u67fb\u306e\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u64cd\u4f5c\u3092\u3084\u308a\u76f4\u3059\u304b\u3001IT \u62c5\u5f53\u8005\u306b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 rm.audit.audit-report=\u76e3\u67fb\u30ec\u30dd\u30fc\u30c8
-recordable-version-config=\u81ea\u52d5\u5ba3\u8a00\u30aa\u30d7\u30b7\u30e7\u30f3
\ No newline at end of file
+recordable-version-config=\u81ea\u52d5\u5ba3\u8a00\u30aa\u30d7\u30b7\u30e7\u30f3
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_nb.properties
index 9f6d9093b7..0ed3afac1e 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_nb.properties
@@ -14,4 +14,4 @@ rm.audit.audit-clear=Slett revisjon
 rm.audit.audit-view=Vis revisjon
 rm.audit.trail-file-fail=Kunne ikke generere en revisjonsrapport. Kontroller revisjonsdetaljene, og pr\u00f8v igjen eller snakk med din IT- avdeling.
 rm.audit.audit-report=Revisjonsrapport
-recordable-version-config=Alternativer med automatiske erkl\u00e6ringer
\ No newline at end of file
+recordable-version-config=Alternativer med automatiske erkl\u00e6ringer
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_nl.properties
index 9709a79d15..37731dbda4 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_nl.properties
@@ -14,4 +14,4 @@ rm.audit.audit-clear=Audit wissen
 rm.audit.audit-view=Audit bekijken
 rm.audit.trail-file-fail=Kan geen auditrapport maken. Controleer de auditgegevens en probeer het opnieuw of neem contact op met uw IT- afdeling
 rm.audit.audit-report=Auditrapport
-recordable-version-config=Opties voor automatisch declareren
\ No newline at end of file
+recordable-version-config=Opties voor automatisch declareren
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_pt_BR.properties
index 0a2f60ed7d..60837c95db 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_pt_BR.properties
@@ -14,4 +14,4 @@ rm.audit.audit-clear=Limpeza de auditoria
 rm.audit.audit-view=Exibi\u00e7\u00e3o de auditoria
 rm.audit.trail-file-fail=N\u00e3o \u00e9 poss\u00edvel gerar um relat\u00f3rio de auditoria. Verifique os detalhes de auditoria e tente novamente, ou entre em contato com o Dept. de TI.
 rm.audit.audit-report=Relat\u00f3rio de auditoria
-recordable-version-config=Op\u00e7\u00f5es de auto declara\u00e7\u00e3o
\ No newline at end of file
+recordable-version-config=Op\u00e7\u00f5es de auto declara\u00e7\u00e3o
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_ru.properties
index eb60080e3b..a59fa47df0 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_ru.properties
@@ -14,4 +14,4 @@ rm.audit.audit-clear=\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0430\u0443\u04
 rm.audit.audit-view=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0430\u0443\u0434\u0438\u0442\u0430
 rm.audit.trail-file-fail=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0447\u0435\u0442 \u043e\u0431 \u0430\u0443\u0434\u0438\u0442\u0435. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0443\u0434\u0438\u0442\u0430 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u0432 IT- \u043e\u0442\u0434\u0435\u043b.
 rm.audit.audit-report=\u041e\u0442\u0447\u0435\u0442 \u043e\u0431 \u0430\u0443\u0434\u0438\u0442\u0435
-recordable-version-config=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f
\ No newline at end of file
+recordable-version-config=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_zh_CN.properties
index f3887ab661..a97467744d 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/audit-service_zh_CN.properties
@@ -14,4 +14,4 @@ rm.audit.audit-clear=\u6e05\u9664\u5ba1\u8ba1
 rm.audit.audit-view=\u67e5\u770b\u5ba1\u8ba1
 rm.audit.trail-file-fail=\u6211\u4eec\u65e0\u6cd5\u751f\u6210\u5ba1\u8ba1\u62a5\u544a\u3002 \u68c0\u67e5\u5ba1\u8ba1\u8be6\u7ec6\u4fe1\u606f\u5e76\u91cd\u8bd5\uff0c\u6216\u8005\u54a8\u8be2\u60a8\u7684 IT \u90e8\u95e8\u3002
 rm.audit.audit-report=\u5ba1\u8ba1\u62a5\u544a
-recordable-version-config=\u81ea\u52a8\u58f0\u660e\u9009\u9879
\ No newline at end of file
+recordable-version-config=\u81ea\u52a8\u58f0\u660e\u9009\u9879
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_de.properties
index cd9feee3db..e581e314f5 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_de.properties
@@ -102,4 +102,4 @@ capability.MapEmailMetadata.title=E-Mail-Metadaten zuordnen
 
 # Rules
 capability.group.rules.title=Regeln
-capability.ManageRules.title=Regeln verwalten
\ No newline at end of file
+capability.ManageRules.title=Regeln verwalten
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_es.properties
index ebf247032a..4dfde5c077 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_es.properties
@@ -102,4 +102,4 @@ capability.MapEmailMetadata.title=Asignar metadatos de correo electr\u00f3nico
 
 # Rules
 capability.group.rules.title=Reglas
-capability.ManageRules.title=Gestionar reglas
\ No newline at end of file
+capability.ManageRules.title=Gestionar reglas
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_fr.properties
index 4c35992d83..133626be33 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_fr.properties
@@ -102,4 +102,4 @@ capability.MapEmailMetadata.title=Mapper des m\u00e9tadonn\u00e9es d'e-mail
 
 # Rules
 capability.group.rules.title=R\u00e8gles
-capability.ManageRules.title=G\u00e9rer les r\u00e8gles
\ No newline at end of file
+capability.ManageRules.title=G\u00e9rer les r\u00e8gles
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_it.properties
index 725dc6f8ac..15dc2006b8 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_it.properties
@@ -102,4 +102,4 @@ capability.MapEmailMetadata.title=Esegui il mapping dei metadati di e-mail
 
 # Rules
 capability.group.rules.title=Regole
-capability.ManageRules.title=Gestisci regole
\ No newline at end of file
+capability.ManageRules.title=Gestisci regole
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_ja.properties
index 64392020e6..cad66144c7 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_ja.properties
@@ -102,4 +102,4 @@ capability.MapEmailMetadata.title=E \u30e1\u30fc\u30eb\u30e1\u30bf\u30c7\u30fc\u
 
 # Rules
 capability.group.rules.title=\u30eb\u30fc\u30eb
-capability.ManageRules.title=\u30eb\u30fc\u30eb\u306e\u7ba1\u7406
\ No newline at end of file
+capability.ManageRules.title=\u30eb\u30fc\u30eb\u306e\u7ba1\u7406
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_nb.properties
index 8a8248b59b..20f59108f3 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_nb.properties
@@ -102,4 +102,4 @@ capability.MapEmailMetadata.title=Koble e-postmetadata
 
 # Rules
 capability.group.rules.title=Regler
-capability.ManageRules.title=Administrer regler
\ No newline at end of file
+capability.ManageRules.title=Administrer regler
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_nl.properties
index 5d73c044e1..4711692afc 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_nl.properties
@@ -102,4 +102,4 @@ capability.MapEmailMetadata.title=Metagegevens e-mail toewijzen
 
 # Rules
 capability.group.rules.title=Regels
-capability.ManageRules.title=Regels beheren
\ No newline at end of file
+capability.ManageRules.title=Regels beheren
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_pt_BR.properties
index 73f87b8668..f12230c56c 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_pt_BR.properties
@@ -102,4 +102,4 @@ capability.MapEmailMetadata.title=Mapear metadados de e-mail
 
 # Rules
 capability.group.rules.title=Regras
-capability.ManageRules.title=Gerenciar regras
\ No newline at end of file
+capability.ManageRules.title=Gerenciar regras
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_ru.properties
index e32f85f1f4..e014107b31 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_ru.properties
@@ -102,4 +102,4 @@ capability.MapEmailMetadata.title=\u0421\u043e\u043f\u043e\u0441\u0442\u0430\u04
 
 # Rules
 capability.group.rules.title=\u041f\u0440\u0430\u0432\u0438\u043b\u0430
-capability.ManageRules.title=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430
\ No newline at end of file
+capability.ManageRules.title=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_zh_CN.properties
index 4e7889575c..0173f9414e 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/capability-service_zh_CN.properties
@@ -102,4 +102,4 @@ capability.MapEmailMetadata.title=\u6620\u5c04\u7535\u5b50\u90ae\u4ef6\u5143\u65
 
 # Rules
 capability.group.rules.title=\u89c4\u5219
-capability.ManageRules.title=\u7ba1\u7406\u89c4\u5219
\ No newline at end of file
+capability.ManageRules.title=\u7ba1\u7406\u89c4\u5219
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_de.properties
index 6539846683..f99603c665 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_de.properties
@@ -1 +1 @@
-dataset.dod5015.label=DOD 5015 Beispieldaten
\ No newline at end of file
+dataset.dod5015.label=DOD 5015 Beispieldaten
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_es.properties
index f9e99f2527..60e7165d64 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_es.properties
@@ -1 +1 @@
-dataset.dod5015.label=Datos de ejemplo de DOD 5015
\ No newline at end of file
+dataset.dod5015.label=Datos de ejemplo de DOD 5015
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_fr.properties
index 0e4c15aa1b..b2aece7538 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_fr.properties
@@ -1 +1 @@
-dataset.dod5015.label=Exemple de donn\u00e9es DOD 5015
\ No newline at end of file
+dataset.dod5015.label=Exemple de donn\u00e9es DOD 5015
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_it.properties
index f4a81dfa17..6d4e33635e 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_it.properties
@@ -1 +1 @@
-dataset.dod5015.label=Dati di esempio DOD 5015
\ No newline at end of file
+dataset.dod5015.label=Dati di esempio DOD 5015
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_ja.properties
index dd59f8a801..a8ca256494 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_ja.properties
@@ -1 +1 @@
-dataset.dod5015.label=DOD 5015 \u30b5\u30f3\u30d7\u30eb\u30c7\u30fc\u30bf
\ No newline at end of file
+dataset.dod5015.label=DOD 5015 \u30b5\u30f3\u30d7\u30eb\u30c7\u30fc\u30bf
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_nb.properties
index cfcae4568d..b3c287fe07 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_nb.properties
@@ -1 +1 @@
-dataset.dod5015.label=DOD 5015 eksempel p\u00e5 data
\ No newline at end of file
+dataset.dod5015.label=DOD 5015 eksempel p\u00e5 data
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_nl.properties
index 79cac8141d..626680e107 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_nl.properties
@@ -1 +1 @@
-dataset.dod5015.label=DOD 5015-voorbeeldgegevens
\ No newline at end of file
+dataset.dod5015.label=DOD 5015-voorbeeldgegevens
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_pt_BR.properties
index c754ba4664..eaa0279655 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_pt_BR.properties
@@ -1 +1 @@
-dataset.dod5015.label=Exemplo de dados do DOD 5015
\ No newline at end of file
+dataset.dod5015.label=Exemplo de dados do DOD 5015
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_ru.properties
index 4f9816ba6b..8e4d107f36 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_ru.properties
@@ -1 +1 @@
-dataset.dod5015.label=\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 DOD 5015
\ No newline at end of file
+dataset.dod5015.label=\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 DOD 5015
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_zh_CN.properties
index 7577760af7..c0a60e1a1e 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/dataset-service_zh_CN.properties
@@ -1 +1 @@
-dataset.dod5015.label=DOD 5015 \u793a\u4f8b\u6570\u636e
\ No newline at end of file
+dataset.dod5015.label=DOD 5015 \u793a\u4f8b\u6570\u636e
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_de.properties
index 516e806803..c8cb23326f 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_de.properties
@@ -1,3 +1,3 @@
 notification.dueforreview.subject=Benachrichtigung bei Records mit f\u00e4lliger \u00dcberpr\u00fcfung
 notification.superseded.subject=Benachrichtigung bei abgel\u00f6stem Record
-notification.rejected.subject=Benachrichtigung bei abgelehntem Record
\ No newline at end of file
+notification.rejected.subject=Benachrichtigung bei abgelehntem Record
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_es.properties
index dc443b8c59..4c3b63ccf5 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_es.properties
@@ -1,3 +1,3 @@
 notification.dueforreview.subject=Documentos de archivo pendientes de notificaci\u00f3n de revisi\u00f3n
 notification.superseded.subject=Notificaci\u00f3n de documento de archivo reemplazada
-notification.rejected.subject=Notificaci\u00f3n de documento de archivo rechazada
\ No newline at end of file
+notification.rejected.subject=Notificaci\u00f3n de documento de archivo rechazada
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_fr.properties
index f342374560..4a1ce78a26 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_fr.properties
@@ -1,3 +1,3 @@
 notification.dueforreview.subject=Documents d'archives arriv\u00e9s \u00e0 \u00e9ch\u00e9ance pour v\u00e9rification
 notification.superseded.subject=Le document d'archives a remplac\u00e9 la notification
-notification.rejected.subject=Le document d'archives a rejet\u00e9 la notification
\ No newline at end of file
+notification.rejected.subject=Le document d'archives a rejet\u00e9 la notification
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_it.properties
index 4e8da1a212..0564d2183b 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_it.properties
@@ -1,3 +1,3 @@
 notification.dueforreview.subject=Notifica record da esaminare
 notification.superseded.subject=Notifica record sostituito
-notification.rejected.subject=Notifica record respinto
\ No newline at end of file
+notification.rejected.subject=Notifica record respinto
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_ja.properties
index 37a7ba7c2b..e61c89274e 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_ja.properties
@@ -1,3 +1,3 @@
 notification.dueforreview.subject=\u30ec\u30d3\u30e5\u30fc\u4e88\u5b9a\u30ec\u30b3\u30fc\u30c9\u306e\u901a\u77e5
 notification.superseded.subject=\u30ec\u30b3\u30fc\u30c9\u306e\u5dee\u3057\u66ff\u3048\u901a\u77e5
-notification.rejected.subject=\u30ec\u30b3\u30fc\u30c9\u306e\u5374\u4e0b\u901a\u77e5
\ No newline at end of file
+notification.rejected.subject=\u30ec\u30b3\u30fc\u30c9\u306e\u5374\u4e0b\u901a\u77e5
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_nb.properties
index 38c9c0886f..8717c04858 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_nb.properties
@@ -1,3 +1,3 @@
 notification.dueforreview.subject=Oppf\u00f8ringer med melding der det skal v\u00e6re gjennomgang
 notification.superseded.subject=Oppf\u00f8ring erstattet melding
-notification.rejected.subject=Oppf\u00f8ring avviste melding
\ No newline at end of file
+notification.rejected.subject=Oppf\u00f8ring avviste melding
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_nl.properties
index 4faef1f017..b35accdefc 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_nl.properties
@@ -1,3 +1,3 @@
 notification.dueforreview.subject=Melding Records gereed voor revisie
 notification.superseded.subject=Melding Record vervangen
-notification.rejected.subject=Melding Record geweigerd
\ No newline at end of file
+notification.rejected.subject=Melding Record geweigerd
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_pt_BR.properties
index 76a932db7a..3e4e0ac2cf 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_pt_BR.properties
@@ -1,3 +1,3 @@
 notification.dueforreview.subject=Notifica\u00e7\u00e3o de prazo para revis\u00e3o de documentos arquiv\u00edsticos
 notification.superseded.subject=Notifica\u00e7\u00e3o de documento arquiv\u00edstico substitu\u00eddo
-notification.rejected.subject=Notifica\u00e7\u00e3o de documento arquiv\u00edstico rejeitado
\ No newline at end of file
+notification.rejected.subject=Notifica\u00e7\u00e3o de documento arquiv\u00edstico rejeitado
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_ru.properties
index 69ac12cfce..e3df4c625d 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_ru.properties
@@ -1,3 +1,3 @@
 notification.dueforreview.subject=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e \u0437\u0430\u043f\u0438\u0441\u0438, \u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0449\u0435\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435
 notification.superseded.subject=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e \u0437\u0430\u043c\u0435\u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u0438
-notification.rejected.subject=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438
\ No newline at end of file
+notification.rejected.subject=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_zh_CN.properties
index b6a0599398..e4284b9ed9 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/notification-service_zh_CN.properties
@@ -1,3 +1,3 @@
 notification.dueforreview.subject=\u8bb0\u5f55\u5ba1\u67e5\u5230\u671f\u901a\u77e5
 notification.superseded.subject=\u8bb0\u5f55\u88ab\u53d6\u4ee3\u901a\u77e5
-notification.rejected.subject=\u8bb0\u5f55\u88ab\u62d2\u7edd\u901a\u77e5
\ No newline at end of file
+notification.rejected.subject=\u8bb0\u5f55\u88ab\u62d2\u7edd\u901a\u77e5
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_de.properties
index e400bc2b6a..f979c5c822 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_de.properties
@@ -18,4 +18,5 @@ rm.service.vital-def-missing=Definitionsaspekt von besonders relevantem Record i
 rm.service.close-record-folder-not-folder=Der Record-Ordner konnte nicht geschlossen werden, da er nicht als Record-Ordner definiert ist. (nodeRef={0})
 rm.service.node-has-aspect=Record-Typ {1} wird bereits f\u00fcr Record {0} angezeigt.
 rm.service.final-version=Endg\u00fcltig
-rm.service.final-version-description=Die endg\u00fcltige archivierte Version des Records
\ No newline at end of file
+rm.service.final-version-description=Die endg\u00fcltige archivierte Version des Records
+rm.service.enable-autoversion-on-record-creation=Automatische Versionsnummer bei Record-Erstellung
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_es.properties
index 433c98d10f..1f905fe2e5 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_es.properties
@@ -18,4 +18,5 @@ rm.service.vital-def-missing=El aspecto de definici\u00f3n de documento de archi
 rm.service.close-record-folder-not-folder=No se pudo cerrar la carpeta de documentos de archivo porque no est\u00e1 definida como una carpeta de documentos de archivo.(nodeRef=''{0}'')
 rm.service.node-has-aspect=El tipo de documento de archivo ''{1}'' ya se est\u00e1 mostrando para el documento de archivo ''{0}''.
 rm.service.final-version=Final
-rm.service.final-version-description=La versi\u00f3n final del documento de archivo archivado
\ No newline at end of file
+rm.service.final-version-description=La versi\u00f3n final del documento de archivo archivado
+rm.service.enable-autoversion-on-record-creation=Versi\u00f3n autom\u00e1tica al crear documento de archivo
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_fr.properties
index 4b51a851bf..e10bedaece 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_fr.properties
@@ -18,4 +18,5 @@ rm.service.vital-def-missing=L''aspect de d\u00e9finition de document d''archive
 rm.service.close-record-folder-not-folder=Le dossier d''archives n''a pas pu \u00eatre ferm\u00e9, car il n''est pas d\u00e9fini comme dossier d''archives.(nodeRef={0})
 rm.service.node-has-aspect=Le type de document d''archives {1} est d\u00e9j\u00e0 affich\u00e9 pour le document d''archives {0}.
 rm.service.final-version=Finale
-rm.service.final-version-description=Version finale du document archiv\u00e9
\ No newline at end of file
+rm.service.final-version-description=Version finale du document archiv\u00e9
+rm.service.enable-autoversion-on-record-creation=Version automatique lors de la cr\u00e9ation du document d'archives
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_it.properties
index 868d68aa01..e68d129de2 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_it.properties
@@ -18,4 +18,5 @@ rm.service.vital-def-missing=L''aspetto di definizione di record fondamentale no
 rm.service.close-record-folder-not-folder=Non \u00e8 stato possibile chiudere la cartella di record, poich\u00e9 non \u00e8 definita come cartella di record.(nodeRef={0})
 rm.service.node-has-aspect=Il tipo di record {1} sta gi\u00e0 visualizzando per il record {0}.
 rm.service.final-version=Finale
-rm.service.final-version-description=Versione del record archiviata finale
\ No newline at end of file
+rm.service.final-version-description=Versione del record archiviata finale
+rm.service.enable-autoversion-on-record-creation=Versione automatica sulla creazione del record
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_ja.properties
index de19a21bbd..636f31180d 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_ja.properties
@@ -18,4 +18,5 @@ rm.service.vital-def-missing=\u30d0\u30a4\u30bf\u30eb\u30ec\u30b3\u30fc\u30c9\u3
 rm.service.close-record-folder-not-folder=\u3053\u306e\u30ec\u30b3\u30fc\u30c9\u30d5\u30a9\u30eb\u30c0\u306f\u30ec\u30b3\u30fc\u30c9\u30d5\u30a9\u30eb\u30c0\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u9589\u3058\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 (nodeRef={0})
 rm.service.node-has-aspect=\u30ec\u30b3\u30fc\u30c9\u30bf\u30a4\u30d7 ''{1}'' \u306f\u3059\u3067\u306b\u30ec\u30b3\u30fc\u30c9 ''{0}'' \u306e\u3082\u306e\u3068\u3057\u3066\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
 rm.service.final-version=\u6700\u7d42\u7248
-rm.service.final-version-description=\u30ec\u30b3\u30fc\u30c9\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u6e08\u307f\u6700\u7d42\u30d0\u30fc\u30b8\u30e7\u30f3
\ No newline at end of file
+rm.service.final-version-description=\u30ec\u30b3\u30fc\u30c9\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u6e08\u307f\u6700\u7d42\u30d0\u30fc\u30b8\u30e7\u30f3
+rm.service.enable-autoversion-on-record-creation=\u30ec\u30b3\u30fc\u30c9\u306e\u4f5c\u6210\u6642\u306b\u81ea\u52d5\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u3092\u884c\u3046
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_nb.properties
index 239c3af449..286f91cbe1 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_nb.properties
@@ -18,4 +18,5 @@ rm.service.vital-def-missing=Aspektet ved definisjonen til sv\u00e6rt viktige op
 rm.service.close-record-folder-not-folder=Oppf\u00f8ringsmappen kan ikke lukkes fordi den ikke er definert som en oppf\u00f8ringsmappe.(nodeRef={0})
 rm.service.node-has-aspect=Oppf\u00f8ringstypen {1} vises allerede i oppf\u00f8ringen {0}.
 rm.service.final-version=Endelig
-rm.service.final-version-description=Den endelig arkiverte oppf\u00f8ringsversjonen
\ No newline at end of file
+rm.service.final-version-description=Den endelig arkiverte oppf\u00f8ringsversjonen
+rm.service.enable-autoversion-on-record-creation=Automatisk versjon om opprettelse av oppf\u00f8ringer
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_nl.properties
index af5d8602e1..e4d07f33e6 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_nl.properties
@@ -18,4 +18,5 @@ rm.service.vital-def-missing=Definitie-aspect van vitale record is niet aanwezig
 rm.service.close-record-folder-not-folder=De archiefmap kan niet worden gesloten omdat hij niet als een archiefmap is gedefinieerd.(nodeRef={0})
 rm.service.node-has-aspect=Het recordtype {1} wordt al weergegeven voor record {0}.
 rm.service.final-version=Definitief
-rm.service.final-version-description=De definitieve gearchiveerde recordversie
\ No newline at end of file
+rm.service.final-version-description=De definitieve gearchiveerde recordversie
+rm.service.enable-autoversion-on-record-creation=Automatische versie bij maken van record
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_pt_BR.properties
index a23a48eedf..13d9f14563 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_pt_BR.properties
@@ -18,4 +18,5 @@ rm.service.vital-def-missing=O aspecto de defini\u00e7\u00e3o do documento arqui
 rm.service.close-record-folder-not-folder=N\u00e3o foi poss\u00edvel fechar a pasta de documento arquiv\u00edstico porque ela n\u00e3o est\u00e1 definida como uma pasta de documento arquiv\u00edstico.(nodeRef={0})
 rm.service.node-has-aspect=O tipo de documento arquiv\u00edstico {1} j\u00e1 est\u00e1 sendo mostrado para o documento arquiv\u00edstico {0}.
 rm.service.final-version=Final
-rm.service.final-version-description=A vers\u00e3o do documento arquiv\u00edstico arquivado final
\ No newline at end of file
+rm.service.final-version-description=A vers\u00e3o do documento arquiv\u00edstico arquivado final
+rm.service.enable-autoversion-on-record-creation=Vers\u00e3o autom\u00e1tica na cria\u00e7\u00e3o de documento arquiv\u00edstico
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_ru.properties
index f5b889cae4..9530724322 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_ru.properties
@@ -18,4 +18,5 @@ rm.service.vital-def-missing=\u0414\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u
 rm.service.close-record-folder-not-folder=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u0437\u0430\u043f\u0438\u0441\u0435\u0439: \u043f\u0430\u043f\u043a\u0430 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u043f\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. (nodeRef={0})
 rm.service.node-has-aspect=\u0417\u0430\u043f\u0438\u0441\u044c \u0442\u0438\u043f\u0430 {1} \u0443\u0436\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 {0}.
 rm.service.final-version=\u041e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f
-rm.service.final-version-description=\u041e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0430\u0440\u0445\u0438\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438
\ No newline at end of file
+rm.service.final-version-description=\u041e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0430\u0440\u0445\u0438\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438
+rm.service.enable-autoversion-on-record-creation=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0437\u0430\u043f\u0438\u0441\u0435\u0439
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_zh_CN.properties
index dcd666aa37..9410217ed1 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service_zh_CN.properties
@@ -18,4 +18,5 @@ rm.service.vital-def-missing=\u8282\u70b9\u4e0a\u4e0d\u5b58\u5728\u6838\u5fc3\u8
 rm.service.close-record-folder-not-folder=\u65e0\u6cd5\u5173\u95ed\u8bb0\u5f55\u6587\u4ef6\u5939\uff0c\u56e0\u4e3a\u5e76\u672a\u5c06\u5176\u5b9a\u4e49\u4e3a\u8bb0\u5f55\u6587\u4ef6\u5939\u3002(nodeRef={0})
 rm.service.node-has-aspect=\u8bb0\u5f55\u7c7b\u578b {1} \u5df2\u4e3a\u8bb0\u5f55 {0} \u663e\u793a\u3002
 rm.service.final-version=\u6700\u7ec8
-rm.service.final-version-description=\u6700\u7ec8\u5b58\u6863\u7684\u8bb0\u5f55\u7248\u672c
\ No newline at end of file
+rm.service.final-version-description=\u6700\u7ec8\u5b58\u6863\u7684\u8bb0\u5f55\u7248\u672c
+rm.service.enable-autoversion-on-record-creation=\u521b\u5efa\u8bb0\u5f55\u7684\u81ea\u52a8\u7248\u672c
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_de.properties
index 39715d9d45..31ce0685a9 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_de.properties
@@ -262,4 +262,4 @@ rma_recordsmanagement.aspect.dod_ghosted.title=Nur Metadaten enthaltender Record
 rma_recordsmanagement.aspect.dod_ghosted.description=Nur Metadaten enthaltender Record
 
 listconstraint.rmc_tlList.title=Speicherorte \u00fcbertragen
-listconstraint.rmc_smList.title=Zus\u00e4tzliche Markierungen
\ No newline at end of file
+listconstraint.rmc_smList.title=Zus\u00e4tzliche Markierungen
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_es.properties
index 9c5696add9..d15d10d161 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_es.properties
@@ -262,4 +262,4 @@ rma_recordsmanagement.aspect.dod_ghosted.title=Documento de archivo solo de meta
 rma_recordsmanagement.aspect.dod_ghosted.description=Documento de archivo solo de metadatos
 
 listconstraint.rmc_tlList.title=Ubicaciones de la transferencia
-listconstraint.rmc_smList.title=Marcas complementarias
\ No newline at end of file
+listconstraint.rmc_smList.title=Marcas complementarias
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_fr.properties
index bc0e4c5526..5691f42b22 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_fr.properties
@@ -262,4 +262,4 @@ rma_recordsmanagement.aspect.dod_ghosted.title=M\u00e9tadonn\u00e9es d'archives
 rma_recordsmanagement.aspect.dod_ghosted.description=M\u00e9tadonn\u00e9es d'archives seulement
 
 listconstraint.rmc_tlList.title=Transf\u00e9rer les emplacements
-listconstraint.rmc_smList.title=Marquages compl\u00e9mentaires
\ No newline at end of file
+listconstraint.rmc_smList.title=Marquages compl\u00e9mentaires
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_it.properties
index 07bc88aa96..af5c55064c 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_it.properties
@@ -262,4 +262,4 @@ rma_recordsmanagement.aspect.dod_ghosted.title=Record di soli metadati
 rma_recordsmanagement.aspect.dod_ghosted.description=Record di soli metadati
 
 listconstraint.rmc_tlList.title=Posizioni di trasferimento
-listconstraint.rmc_smList.title=Contrassegni supplementari
\ No newline at end of file
+listconstraint.rmc_smList.title=Contrassegni supplementari
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_ja.properties
index f3040b4a23..783157feb8 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_ja.properties
@@ -262,4 +262,4 @@ rma_recordsmanagement.aspect.dod_ghosted.title=\u30e1\u30bf\u30c7\u30fc\u30bf\u3
 rma_recordsmanagement.aspect.dod_ghosted.description=\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u307f\u306e\u30ec\u30b3\u30fc\u30c9
 
 listconstraint.rmc_tlList.title=\u8ee2\u9001\u5834\u6240
-listconstraint.rmc_smList.title=\u88dc\u8db3\u30de\u30fc\u30ad\u30f3\u30b0
\ No newline at end of file
+listconstraint.rmc_smList.title=\u88dc\u8db3\u30de\u30fc\u30ad\u30f3\u30b0
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_nb.properties
index 549efbf075..b93a05b031 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_nb.properties
@@ -262,4 +262,4 @@ rma_recordsmanagement.aspect.dod_ghosted.title=Oppf\u00f8ring kun med metadata
 rma_recordsmanagement.aspect.dod_ghosted.description=Oppf\u00f8ring kun med metadata
 
 listconstraint.rmc_tlList.title=Overf\u00f8ringssteder
-listconstraint.rmc_smList.title=Tilleggsmarkeringer
\ No newline at end of file
+listconstraint.rmc_smList.title=Tilleggsmarkeringer
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_nl.properties
index 14f033afe4..b3f8f058b2 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_nl.properties
@@ -262,4 +262,4 @@ rma_recordsmanagement.aspect.dod_ghosted.title=Record met alleen metagegevens
 rma_recordsmanagement.aspect.dod_ghosted.description=Record met alleen metagegevens
 
 listconstraint.rmc_tlList.title=Overzetlocaties
-listconstraint.rmc_smList.title=Aanvullende markeringen
\ No newline at end of file
+listconstraint.rmc_smList.title=Aanvullende markeringen
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_pt_BR.properties
index 3fa7d3f7d5..60082f9de3 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_pt_BR.properties
@@ -262,4 +262,4 @@ rma_recordsmanagement.aspect.dod_ghosted.title=Documento arquiv\u00edstico somen
 rma_recordsmanagement.aspect.dod_ghosted.description=Documento arquiv\u00edstico somente de metadados
 
 listconstraint.rmc_tlList.title=Locais de transfer\u00eancia
-listconstraint.rmc_smList.title=Marca\u00e7\u00f5es complementares
\ No newline at end of file
+listconstraint.rmc_smList.title=Marca\u00e7\u00f5es complementares
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_ru.properties
index 74059a3629..a780e43969 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_ru.properties
@@ -262,4 +262,4 @@ rma_recordsmanagement.aspect.dod_ghosted.title=\u0417\u0430\u043f\u0438\u0441\u0
 rma_recordsmanagement.aspect.dod_ghosted.description=\u0417\u0430\u043f\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438
 
 listconstraint.rmc_tlList.title=\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438
-listconstraint.rmc_smList.title=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0430
\ No newline at end of file
+listconstraint.rmc_smList.title=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0430
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_zh_CN.properties
index bdcaf496f4..89413a3a32 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-model_zh_CN.properties
@@ -262,4 +262,4 @@ rma_recordsmanagement.aspect.dod_ghosted.title=\u4ec5\u5143\u6570\u636e\u8bb0\u5
 rma_recordsmanagement.aspect.dod_ghosted.description=\u4ec5\u5143\u6570\u636e\u8bb0\u5f55
 
 listconstraint.rmc_tlList.title=\u79fb\u4ea4\u4f4d\u7f6e
-listconstraint.rmc_smList.title=\u8865\u5145\u6807\u8bb0
\ No newline at end of file
+listconstraint.rmc_smList.title=\u8865\u5145\u6807\u8bb0
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_de.properties
index 61b0d6ccae..fc685ce33d 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_de.properties
@@ -10,4 +10,4 @@ rmr_recordsmanagementreport.type.rmr_destructionReport.title=Vernichtungsprotoko
 rmr_recordsmanagementreport.type.rmr_destructionReport.description=Records Management Vernichtungsprotokoll.
 
 rmr_recordsmanagementreport.type.rmr_holdReport.title=Sperrbericht
-rmr_recordsmanagementreport.type.rmr_holdReport.description=Records Management Sperrbericht.
\ No newline at end of file
+rmr_recordsmanagementreport.type.rmr_holdReport.description=Records Management Sperrbericht.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_es.properties
index c3afb84a6d..7916bff418 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_es.properties
@@ -10,4 +10,4 @@ rmr_recordsmanagementreport.type.rmr_destructionReport.title=Informe de destrucc
 rmr_recordsmanagementreport.type.rmr_destructionReport.description=Informe de destrucci\u00f3n de Records Management.
 
 rmr_recordsmanagementreport.type.rmr_holdReport.title=Informe de bloqueo
-rmr_recordsmanagementreport.type.rmr_holdReport.description=Informe de bloqueo de Records Management.
\ No newline at end of file
+rmr_recordsmanagementreport.type.rmr_holdReport.description=Informe de bloqueo de Records Management.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_fr.properties
index 0757d6e734..458df20988 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_fr.properties
@@ -10,4 +10,4 @@ rmr_recordsmanagementreport.type.rmr_destructionReport.title=Rapport de destruct
 rmr_recordsmanagementreport.type.rmr_destructionReport.description=Rapport de destruction de gestion des archives.
 
 rmr_recordsmanagementreport.type.rmr_holdReport.title=Rapport de suspension
-rmr_recordsmanagementreport.type.rmr_holdReport.description=Rapport de suspension de gestion des archives.
\ No newline at end of file
+rmr_recordsmanagementreport.type.rmr_holdReport.description=Rapport de suspension de gestion des archives.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_it.properties
index 3fe3c3c354..9ba698e423 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_it.properties
@@ -10,4 +10,4 @@ rmr_recordsmanagementreport.type.rmr_destructionReport.title=Rapporto di elimina
 rmr_recordsmanagementreport.type.rmr_destructionReport.description=Rapporto di eliminazione definitiva Records Management.
 
 rmr_recordsmanagementreport.type.rmr_holdReport.title=Rapporto di sospensione
-rmr_recordsmanagementreport.type.rmr_holdReport.description=Rapporto di sospensione Records Management.
\ No newline at end of file
+rmr_recordsmanagementreport.type.rmr_holdReport.description=Rapporto di sospensione Records Management.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_ja.properties
index 5850f9ea80..2042d12cf0 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_ja.properties
@@ -10,4 +10,4 @@ rmr_recordsmanagementreport.type.rmr_destructionReport.title=\u7834\u68c4\u30ec\
 rmr_recordsmanagementreport.type.rmr_destructionReport.description=[\u30ec\u30b3\u30fc\u30c9\u7ba1\u7406] \u306e\u7834\u68c4\u30ec\u30dd\u30fc\u30c8\u3002
 
 rmr_recordsmanagementreport.type.rmr_holdReport.title=\u30db\u30fc\u30eb\u30c9\u30ec\u30dd\u30fc\u30c8
-rmr_recordsmanagementreport.type.rmr_holdReport.description=[\u30ec\u30b3\u30fc\u30c9\u7ba1\u7406] \u306e\u30db\u30fc\u30eb\u30c9\u30ec\u30dd\u30fc\u30c8
\ No newline at end of file
+rmr_recordsmanagementreport.type.rmr_holdReport.description=[\u30ec\u30b3\u30fc\u30c9\u7ba1\u7406] \u306e\u30db\u30fc\u30eb\u30c9\u30ec\u30dd\u30fc\u30c8
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_nb.properties
index e7c579259f..623cb31b0e 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_nb.properties
@@ -10,4 +10,4 @@ rmr_recordsmanagementreport.type.rmr_destructionReport.title=Destruksjonsrapport
 rmr_recordsmanagementreport.type.rmr_destructionReport.description=Oppf\u00f8ringsh\u00e5ndteringsrapport med destruksjoner.
 
 rmr_recordsmanagementreport.type.rmr_holdReport.title=Holdrapport
-rmr_recordsmanagementreport.type.rmr_holdReport.description=Oppf\u00f8ringsh\u00e5ndteringsrapport med hold.
\ No newline at end of file
+rmr_recordsmanagementreport.type.rmr_holdReport.description=Oppf\u00f8ringsh\u00e5ndteringsrapport med hold.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_nl.properties
index 5eca5de2dc..7a2b3731b0 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_nl.properties
@@ -10,4 +10,4 @@ rmr_recordsmanagementreport.type.rmr_destructionReport.title=Vernietigingsrappor
 rmr_recordsmanagementreport.type.rmr_destructionReport.description=Records Management-vernietigingsrapport.
 
 rmr_recordsmanagementreport.type.rmr_holdReport.title=Wachtstandrapport
-rmr_recordsmanagementreport.type.rmr_holdReport.description=Records Management-wachtstandrapport
\ No newline at end of file
+rmr_recordsmanagementreport.type.rmr_holdReport.description=Records Management-wachtstandrapport
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_pt_BR.properties
index 6305d20799..d27dca1302 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_pt_BR.properties
@@ -10,4 +10,4 @@ rmr_recordsmanagementreport.type.rmr_destructionReport.title=Relat\u00f3rio de d
 rmr_recordsmanagementreport.type.rmr_destructionReport.description=Relat\u00f3rio de destrui\u00e7\u00e3o do Records Management.
 
 rmr_recordsmanagementreport.type.rmr_holdReport.title=Relat\u00f3rio de espera
-rmr_recordsmanagementreport.type.rmr_holdReport.description=Relat\u00f3rio de espera do Records Management.
\ No newline at end of file
+rmr_recordsmanagementreport.type.rmr_holdReport.description=Relat\u00f3rio de espera do Records Management.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_ru.properties
index e695d6fb7e..e2257dbc82 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_ru.properties
@@ -10,4 +10,4 @@ rmr_recordsmanagementreport.type.rmr_destructionReport.title=\u041e\u0442\u0447\
 rmr_recordsmanagementreport.type.rmr_destructionReport.description=\u041e\u0442\u0447\u0435\u0442 \u043e\u0431 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438.
 
 rmr_recordsmanagementreport.type.rmr_holdReport.title=\u041e\u0442\u0447\u0435\u0442 \u043e \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0435
-rmr_recordsmanagementreport.type.rmr_holdReport.description=\u041e\u0442\u0447\u0435\u0442 \u043e \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438.
\ No newline at end of file
+rmr_recordsmanagementreport.type.rmr_holdReport.description=\u041e\u0442\u0447\u0435\u0442 \u043e \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_zh_CN.properties
index 5e241bfe3a..ad742ac4af 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-model_zh_CN.properties
@@ -10,4 +10,4 @@ rmr_recordsmanagementreport.type.rmr_destructionReport.title=\u9500\u6bc1\u62a5\
 rmr_recordsmanagementreport.type.rmr_destructionReport.description=\u8bb0\u5f55\u7ba1\u7406\u9500\u6bc1\u62a5\u544a\u3002
 
 rmr_recordsmanagementreport.type.rmr_holdReport.title=\u4fdd\u5b58\u62a5\u544a
-rmr_recordsmanagementreport.type.rmr_holdReport.description=\u8bb0\u5f55\u7ba1\u7406\u4fdd\u5b58\u62a5\u544a\u3002
\ No newline at end of file
+rmr_recordsmanagementreport.type.rmr_holdReport.description=\u8bb0\u5f55\u7ba1\u7406\u4fdd\u5b58\u62a5\u544a\u3002
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_de.properties
index bca0b36bc6..61bb9762a5 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_de.properties
@@ -1 +1 @@
-report.default=Bericht
\ No newline at end of file
+report.default=Bericht
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_es.properties
index 38eb720880..d868ae8a71 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_es.properties
@@ -1 +1 @@
-report.default=Informe
\ No newline at end of file
+report.default=Informe
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_fr.properties
index ab0349861b..3f02bff7c8 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_fr.properties
@@ -1 +1 @@
-report.default=Rapport
\ No newline at end of file
+report.default=Rapport
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_it.properties
index 35b1a548c5..2682818873 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_it.properties
@@ -1 +1 @@
-report.default=Rapporto
\ No newline at end of file
+report.default=Rapporto
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_ja.properties
index 330f2c931f..0baed9e638 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_ja.properties
@@ -1 +1 @@
-report.default=\u30ec\u30dd\u30fc\u30c8
\ No newline at end of file
+report.default=\u30ec\u30dd\u30fc\u30c8
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_nb.properties
index ab0349861b..3f02bff7c8 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_nb.properties
@@ -1 +1 @@
-report.default=Rapport
\ No newline at end of file
+report.default=Rapport
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_nl.properties
index ab0349861b..3f02bff7c8 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_nl.properties
@@ -1 +1 @@
-report.default=Rapport
\ No newline at end of file
+report.default=Rapport
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_pt_BR.properties
index c68013a088..814f701f8b 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_pt_BR.properties
@@ -1 +1 @@
-report.default=Relat\u00f3rio
\ No newline at end of file
+report.default=Relat\u00f3rio
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_ru.properties
index 652186e401..01d984d8c5 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_ru.properties
@@ -1 +1 @@
-report.default=\u041e\u0442\u0447\u0435\u0442
\ No newline at end of file
+report.default=\u041e\u0442\u0447\u0435\u0442
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_zh_CN.properties
index 79b2f61781..e2dc09cd55 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/report-service_zh_CN.properties
@@ -1 +1 @@
-report.default=\u62a5\u544a
\ No newline at end of file
+report.default=\u62a5\u544a
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_de.properties
index 3b4f3490dd..c32122a8c3 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_de.properties
@@ -19,4 +19,4 @@ rmevent.obsolete=Veraltet
 rmevent.all_allowances_granted_are_terminated=Alle einger\u00e4umten Berechtigungen sind beendet.
 rmevent.WGI_action_complete=WGI-Aktion abschlie\u00dfen
 rmevent.separation=Trennung
-rmevent.case_complete=Fall abgeschlossen
\ No newline at end of file
+rmevent.case_complete=Fall abgeschlossen
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_es.properties
index e16251ccf9..56c41fb451 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_es.properties
@@ -19,4 +19,4 @@ rmevent.obsolete=Obsoleto
 rmevent.all_allowances_granted_are_terminated=Todas las provisiones otorgadas han terminado
 rmevent.WGI_action_complete=Acci\u00f3n WGI completa
 rmevent.separation=Separaci\u00f3n
-rmevent.case_complete=Caso completo
\ No newline at end of file
+rmevent.case_complete=Caso completo
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_fr.properties
index 332a8dfb6a..4e0f2a72a9 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_fr.properties
@@ -19,4 +19,4 @@ rmevent.obsolete=Obsol\u00e8te
 rmevent.all_allowances_granted_are_terminated=Toutes les autorisations accord\u00e9es sont termin\u00e9es
 rmevent.WGI_action_complete=Action WGI termin\u00e9e
 rmevent.separation=S\u00e9paration
-rmevent.case_complete=Cas termin\u00e9
\ No newline at end of file
+rmevent.case_complete=Cas termin\u00e9
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_it.properties
index 606bd6cb2d..ccdec8f989 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_it.properties
@@ -19,4 +19,4 @@ rmevent.obsolete=Obsoleto
 rmevent.all_allowances_granted_are_terminated=Tutte le concessioni sono state terminate
 rmevent.WGI_action_complete=Azione WGI completata
 rmevent.separation=Separazione
-rmevent.case_complete=Caso completato
\ No newline at end of file
+rmevent.case_complete=Caso completato
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_ja.properties
index 00b71722b5..50309fb68f 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_ja.properties
@@ -19,4 +19,4 @@ rmevent.obsolete=\u5ec3\u6b62
 rmevent.all_allowances_granted_are_terminated=\u8a31\u53ef\u3055\u308c\u3066\u3044\u308b\u3059\u3079\u3066\u306e\u51e6\u7406\u304c\u7d42\u4e86
 rmevent.WGI_action_complete=WGI \u51e6\u7406\u5b8c\u4e86
 rmevent.separation=\u5206\u96e2
-rmevent.case_complete=\u30b1\u30fc\u30b9\u5b8c\u4e86
\ No newline at end of file
+rmevent.case_complete=\u30b1\u30fc\u30b9\u5b8c\u4e86
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_nb.properties
index 3191fd332b..e44b8d4bfa 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_nb.properties
@@ -19,4 +19,4 @@ rmevent.obsolete=Utg\u00e5tt
 rmevent.all_allowances_granted_are_terminated=Alle tillatelser som er gitt, er avsluttet
 rmevent.WGI_action_complete=WGI-handling fullf\u00f8rt
 rmevent.separation=Separasjon
-rmevent.case_complete=Sak fullf\u00f8rt
\ No newline at end of file
+rmevent.case_complete=Sak fullf\u00f8rt
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_nl.properties
index 6d3aefb5e0..69c6ecfc3a 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_nl.properties
@@ -19,4 +19,4 @@ rmevent.obsolete=Verouderd
 rmevent.all_allowances_granted_are_terminated=Alle toegekende rechten zijn be\u00ebindigd
 rmevent.WGI_action_complete=WGI-actie afgerond
 rmevent.separation=Scheiding
-rmevent.case_complete=Geval afgerond
\ No newline at end of file
+rmevent.case_complete=Geval afgerond
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_pt_BR.properties
index 2945e4edde..75e88fd6fa 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_pt_BR.properties
@@ -19,4 +19,4 @@ rmevent.obsolete=Obsoleto
 rmevent.all_allowances_granted_are_terminated=Todas as bonifica\u00e7\u00f5es concedidas s\u00e3o rescindidas
 rmevent.WGI_action_complete=A\u00e7\u00e3o de WGI conclu\u00edda
 rmevent.separation=Separa\u00e7\u00e3o
-rmevent.case_complete=Caso conclu\u00eddo
\ No newline at end of file
+rmevent.case_complete=Caso conclu\u00eddo
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_ru.properties
index de4281e217..8dfbe318c5 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_ru.properties
@@ -19,4 +19,4 @@ rmevent.obsolete=\u0423\u0441\u0442\u0430\u0440\u0435\u043b\u043e
 rmevent.all_allowances_granted_are_terminated=\u0412\u0441\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043a\u0432\u043e\u0442\u044b \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u044b
 rmevent.WGI_action_complete=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 WGI \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e
 rmevent.separation=\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435
-rmevent.case_complete=\u0421\u043b\u0443\u0447\u0430\u0439 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d
\ No newline at end of file
+rmevent.case_complete=\u0421\u043b\u0443\u0447\u0430\u0439 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_zh_CN.properties
index 8bfcff9dff..628aef053e 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-events_zh_CN.properties
@@ -19,4 +19,4 @@ rmevent.obsolete=\u8fc7\u65f6
 rmevent.all_allowances_granted_are_terminated=\u6240\u6709\u6388\u4e88\u7684\u9650\u989d\u5df2\u7ec8\u6b62
 rmevent.WGI_action_complete=WGI \u64cd\u4f5c\u5b8c\u6210
 rmevent.separation=\u5206\u79bb
-rmevent.case_complete=\u6848\u4f8b\u5b8c\u6210
\ No newline at end of file
+rmevent.case_complete=\u6848\u4f8b\u5b8c\u6210
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_de.properties
index 4034f191a1..4ea43127ea 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_de.properties
@@ -21,5 +21,5 @@ rm.savedsearch.transferRecordsName=Zur \u00dcbertragung geeignete Records und Re
 rm.savedsearch.transferRecordsDesc=Alle aktuell zur \u00dcbertragung geeigneten Records und Record-Ordner.
 rm.savedsearch.destructionRecordsName=Zur Vernichtung geeignete Records und Record-Ordner
 rm.savedsearch.destructionRecordsDesc=Alle aktuell zur Vernichtung geeigneten Records.
-rm.savedsearch.frozenRecordsName= Gesperrte Records und Record-Ordner
-rm.savedsearch.frozenRecordsDesc=Alle derzeit gesperrten Records und Record-Ordner.
\ No newline at end of file
+rm.savedsearch.frozenRecordsName=Gesperrte Records und Record-Ordner
+rm.savedsearch.frozenRecordsDesc=Alle derzeit gesperrten Records und Record-Ordner.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_es.properties
index c6a97a80f8..1dcc796ff0 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_es.properties
@@ -21,5 +21,5 @@ rm.savedsearch.transferRecordsName=Documentos de archivo y carpetas de documento
 rm.savedsearch.transferRecordsDesc=Actualmente, todos los documentos y carpetas de documentos de archivo se pueden transferir.
 rm.savedsearch.destructionRecordsName=Documentos de archivo y carpetas de documentos de archivo que se pueden destruir
 rm.savedsearch.destructionRecordsDesc=Actualmente, todos los documentos de archivo se pueden destruir.
-rm.savedsearch.frozenRecordsName= Documentos de archivo y carpetas de documentos de archivo en espera
-rm.savedsearch.frozenRecordsDesc=Todos los documentos de archivo y carpetas de documentos de archivo est\u00e1n en espera.
\ No newline at end of file
+rm.savedsearch.frozenRecordsName=Documentos de archivo y carpetas de documentos de archivo en espera
+rm.savedsearch.frozenRecordsDesc=Todos los documentos de archivo y carpetas de documentos de archivo est\u00e1n en espera.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_fr.properties
index d4e764d993..fdc8ad2ad1 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_fr.properties
@@ -21,5 +21,5 @@ rm.savedsearch.transferRecordsName=Documents d'archives et dossiers d'archives \
 rm.savedsearch.transferRecordsDesc=Tous les documents d'archives et dossiers d'archives actuellement \u00e9ligibles pour un transfert.
 rm.savedsearch.destructionRecordsName=Documents d'archives et dossiers d'archives \u00e9ligibles pour une destruction
 rm.savedsearch.destructionRecordsDesc=Tous les documents d'archives actuellement \u00e9ligibles pour destruction.
-rm.savedsearch.frozenRecordsName= Documents d'archives et dossiers d'archives suspendus
-rm.savedsearch.frozenRecordsDesc=Tous les documents d'archives et dossiers d'archives actuellement suspendus.
\ No newline at end of file
+rm.savedsearch.frozenRecordsName=Documents d'archives et dossiers d'archives suspendus
+rm.savedsearch.frozenRecordsDesc=Tous les documents d'archives et dossiers d'archives actuellement suspendus.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_it.properties
index 325d50264e..d27911978f 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_it.properties
@@ -21,5 +21,5 @@ rm.savedsearch.transferRecordsName=Record e cartelle di record idonei per il tra
 rm.savedsearch.transferRecordsDesc=Tutti i record e le cartelle di record idonei per il trasferimento.
 rm.savedsearch.destructionRecordsName=Record e cartelle di record idonei per l'eliminazione definitiva
 rm.savedsearch.destructionRecordsDesc=Tutti i record attuali idonei per l'eliminazione definitiva.
-rm.savedsearch.frozenRecordsName= Record e cartelle di record in sospeso
-rm.savedsearch.frozenRecordsDesc=Tutti i record e le cartelle di record attuali in sospeso.
\ No newline at end of file
+rm.savedsearch.frozenRecordsName=Record e cartelle di record in sospeso
+rm.savedsearch.frozenRecordsDesc=Tutti i record e le cartelle di record attuali in sospeso.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_ja.properties
index 5fba29c388..2675f26ad5 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_ja.properties
@@ -21,5 +21,5 @@ rm.savedsearch.transferRecordsName=\u8ee2\u9001\u6761\u4ef6\u3092\u6e80\u305f\u3
 rm.savedsearch.transferRecordsDesc=\u73fe\u5728\u8ee2\u9001\u6761\u4ef6\u3092\u6e80\u305f\u3057\u3066\u3044\u308b\u3059\u3079\u3066\u306e\u30ec\u30b3\u30fc\u30c9\u30d5\u30a9\u30eb\u30c0\u3068\u30ec\u30b3\u30fc\u30c9\u3002
 rm.savedsearch.destructionRecordsName=\u5ec3\u68c4\u6761\u4ef6\u3092\u6e80\u305f\u3057\u3066\u3044\u308b\u30ec\u30b3\u30fc\u30c9\u3068\u30ec\u30b3\u30fc\u30c9\u30d5\u30a9\u30eb\u30c0
 rm.savedsearch.destructionRecordsDesc=\u73fe\u5728\u5ec3\u68c4\u6761\u4ef6\u3092\u6e80\u305f\u3057\u3066\u3044\u308b\u3059\u3079\u3066\u306e\u30ec\u30b3\u30fc\u30c9\u3002
-rm.savedsearch.frozenRecordsName= \u30db\u30fc\u30eb\u30c9\u4e2d\u306e\u30ec\u30b3\u30fc\u30c9\u304a\u3088\u3073\u30ec\u30b3\u30fc\u30c9\u30d5\u30a9\u30eb\u30c0
-rm.savedsearch.frozenRecordsDesc=\u73fe\u5728\u30db\u30fc\u30eb\u30c9\u4e2d\u306e\u3059\u3079\u3066\u306e\u30ec\u30b3\u30fc\u30c9\u3068\u30ec\u30b3\u30fc\u30c9\u30d5\u30a9\u30eb\u30c0\u3002
\ No newline at end of file
+rm.savedsearch.frozenRecordsName=\u30db\u30fc\u30eb\u30c9\u4e2d\u306e\u30ec\u30b3\u30fc\u30c9\u304a\u3088\u3073\u30ec\u30b3\u30fc\u30c9\u30d5\u30a9\u30eb\u30c0
+rm.savedsearch.frozenRecordsDesc=\u73fe\u5728\u30db\u30fc\u30eb\u30c9\u4e2d\u306e\u3059\u3079\u3066\u306e\u30ec\u30b3\u30fc\u30c9\u3068\u30ec\u30b3\u30fc\u30c9\u30d5\u30a9\u30eb\u30c0\u3002
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_nb.properties
index c8a520fa20..893a008059 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_nb.properties
@@ -21,5 +21,5 @@ rm.savedsearch.transferRecordsName=Oppf\u00f8ringer og oppf\u00f8ringsmapper som
 rm.savedsearch.transferRecordsDesc=Alle oppf\u00f8ringmapper og oppf\u00f8ringer som for tiden er kvalifisert til overf\u00f8ring.
 rm.savedsearch.destructionRecordsName=Oppf\u00f8ringer og oppf\u00f8ringsmapper som er kvalifisert til destruksjon
 rm.savedsearch.destructionRecordsDesc=Alle oppf\u00f8ringer som for tiden er kvalifisert til destruksjon.
-rm.savedsearch.frozenRecordsName= Oppf\u00f8ringer og oppf\u00f8ringsmapper p\u00e5 hold
-rm.savedsearch.frozenRecordsDesc=Alle oppf\u00f8ringer og oppf\u00f8ringsmapper for tiden p\u00e5 hold.
\ No newline at end of file
+rm.savedsearch.frozenRecordsName=Oppf\u00f8ringer og oppf\u00f8ringsmapper p\u00e5 hold
+rm.savedsearch.frozenRecordsDesc=Alle oppf\u00f8ringer og oppf\u00f8ringsmapper for tiden p\u00e5 hold.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_nl.properties
index fe711fe845..b028a66097 100755
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_nl.properties
@@ -21,5 +21,5 @@ rm.savedsearch.transferRecordsName=Records en archiefmappen die in aanmerking ko
 rm.savedsearch.transferRecordsDesc=Alle records en archiefmappen die momenteel in aanmerking komen voor overzetten.
 rm.savedsearch.destructionRecordsName=Records en archiefmappen die in aanmerking komen voor vernietiging
 rm.savedsearch.destructionRecordsDesc=Alle records die momenteel in aanmerking komen voor vernietiging.
-rm.savedsearch.frozenRecordsName= Records en archiefmappen die in wachtstand zijn
-rm.savedsearch.frozenRecordsDesc=Alle records en archiefmappen die momenteel in wachtstand zijn.
\ No newline at end of file
+rm.savedsearch.frozenRecordsName=Records en archiefmappen die in wachtstand zijn
+rm.savedsearch.frozenRecordsDesc=Alle records en archiefmappen die momenteel in wachtstand zijn.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_pt_BR.properties
index 5e05519d92..45afb35a46 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_pt_BR.properties
@@ -21,5 +21,5 @@ rm.savedsearch.transferRecordsName=Documentos arquiv\u00edsticos e pastas de doc
 rm.savedsearch.transferRecordsDesc=Todos os documentos arquiv\u00edsticos e pastas de documentos arquiv\u00edsticos qualificados para transfer\u00eancia.
 rm.savedsearch.destructionRecordsName=Documentos arquiv\u00edsticos e pastas de documentos arquiv\u00edsticos qualificados para destrui\u00e7\u00e3o
 rm.savedsearch.destructionRecordsDesc=Todos os documentos arquiv\u00edsticos atualmente qualificados para destrui\u00e7\u00e3o.
-rm.savedsearch.frozenRecordsName= Documentos arquiv\u00edsticos e pastas de documentos arquiv\u00edsticos em espera
-rm.savedsearch.frozenRecordsDesc=Todos os documentos arquiv\u00edsticos e pastas de documentos arquiv\u00edsticos atualmente em espera.
\ No newline at end of file
+rm.savedsearch.frozenRecordsName=Documentos arquiv\u00edsticos e pastas de documentos arquiv\u00edsticos em espera
+rm.savedsearch.frozenRecordsDesc=Todos os documentos arquiv\u00edsticos e pastas de documentos arquiv\u00edsticos atualmente em espera.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_ru.properties
index 85d0f7e858..bb82414f71 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_ru.properties
@@ -21,5 +21,5 @@ rm.savedsearch.transferRecordsName=\u0417\u0430\u043f\u0438\u0441\u0438 \u0438 \
 rm.savedsearch.transferRecordsDesc=\u0412\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u043f\u0430\u043f\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.
 rm.savedsearch.destructionRecordsName=\u0417\u0430\u043f\u0438\u0441\u0438 \u0438 \u043f\u0430\u043f\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044f
 rm.savedsearch.destructionRecordsDesc=\u0412\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u043f\u0430\u043f\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.
-rm.savedsearch.frozenRecordsName= \u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u043f\u0430\u043f\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439
-rm.savedsearch.frozenRecordsDesc=\u0412\u0441\u0435 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u043f\u0430\u043f\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.
\ No newline at end of file
+rm.savedsearch.frozenRecordsName=\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u043f\u0430\u043f\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439
+rm.savedsearch.frozenRecordsDesc=\u0412\u0441\u0435 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u043f\u0430\u043f\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_zh_CN.properties
index fbd441193a..25eec46b96 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/rm-system_zh_CN.properties
@@ -21,5 +21,5 @@ rm.savedsearch.transferRecordsName=\u53ef\u79fb\u4ea4\u7684\u8bb0\u5f55\u548c\u8
 rm.savedsearch.transferRecordsDesc=\u5f53\u524d\u53ef\u79fb\u4ea4\u7684\u6240\u6709\u8bb0\u5f55\u6587\u4ef6\u5939\u548c\u8bb0\u5f55\u3002
 rm.savedsearch.destructionRecordsName=\u53ef\u9500\u6bc1\u7684\u8bb0\u5f55\u548c\u8bb0\u5f55\u6587\u4ef6\u5939
 rm.savedsearch.destructionRecordsDesc=\u5f53\u524d\u53ef\u9500\u6bc1\u7684\u6240\u6709\u8bb0\u5f55\u3002
-rm.savedsearch.frozenRecordsName= \u4fdd\u5b58\u4e2d\u7684\u8bb0\u5f55\u548c\u8bb0\u5f55\u6587\u4ef6\u5939
-rm.savedsearch.frozenRecordsDesc=\u5f53\u524d\u4fdd\u5b58\u4e2d\u7684\u6240\u6709\u8bb0\u5f55\u548c\u8bb0\u5f55\u6587\u4ef6\u5939\u3002
\ No newline at end of file
+rm.savedsearch.frozenRecordsName=\u4fdd\u5b58\u4e2d\u7684\u8bb0\u5f55\u548c\u8bb0\u5f55\u6587\u4ef6\u5939
+rm.savedsearch.frozenRecordsDesc=\u5f53\u524d\u4fdd\u5b58\u4e2d\u7684\u6240\u6709\u8bb0\u5f55\u548c\u8bb0\u5f55\u6587\u4ef6\u5939\u3002
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_de.properties
index 1afc21f513..c2006b30f6 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_de.properties
@@ -24,4 +24,4 @@ file.report.hold.description=Sperrbeschreibung
 file.report.hold.reason=Sperrgrund
 file.report.hold.held=Gesperrt
 file.report.createdby=Erstellt von
-file.report.createdon=Erstellt am
\ No newline at end of file
+file.report.createdon=Erstellt am
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_es.properties
index 7138821ae2..aab44a268c 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_es.properties
@@ -24,4 +24,4 @@ file.report.hold.description=Descripci\u00f3n de bloqueo
 file.report.hold.reason=Raz\u00f3n de bloqueo
 file.report.hold.held=Bloqueado
 file.report.createdby=Creado por
-file.report.createdon=Creado
\ No newline at end of file
+file.report.createdon=Creado
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_fr.properties
index 85ffa94898..ae10dabd45 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_fr.properties
@@ -24,4 +24,4 @@ file.report.hold.description=Description de la suspension
 file.report.hold.reason=Motif de suspension
 file.report.hold.held=Suspendu
 file.report.createdby=Cr\u00e9\u00e9 par
-file.report.createdon=Cr\u00e9\u00e9
\ No newline at end of file
+file.report.createdon=Cr\u00e9\u00e9
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_it.properties
index 465188d1aa..842919536e 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_it.properties
@@ -24,4 +24,4 @@ file.report.hold.description=Descrizione sospensione
 file.report.hold.reason=Motivo sospensione
 file.report.hold.held=Sospeso
 file.report.createdby=Creato da
-file.report.createdon=Creato il
\ No newline at end of file
+file.report.createdon=Creato il
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_ja.properties
index ddf22acd3a..499789a0ee 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_ja.properties
@@ -24,4 +24,4 @@ file.report.hold.description=\u30db\u30fc\u30eb\u30c9\u8aac\u660e
 file.report.hold.reason=\u30db\u30fc\u30eb\u30c9\u7406\u7531
 file.report.hold.held=\u30db\u30fc\u30eb\u30c9\u6e08\u307f
 file.report.createdby=\u4f5c\u6210\u8005
-file.report.createdon=\u4f5c\u6210\u65e5
\ No newline at end of file
+file.report.createdon=\u4f5c\u6210\u65e5
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_nb.properties
index 693a6d7ae7..fb366f7f0d 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_nb.properties
@@ -24,4 +24,4 @@ file.report.hold.description=Holdbeskrivelse
 file.report.hold.reason=Grunn til holdet
 file.report.hold.held=Hold
 file.report.createdby=Opprettet av
-file.report.createdon=Opprettet den
\ No newline at end of file
+file.report.createdon=Opprettet den
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_nl.properties
index 4fb5e8c011..3e03aaae58 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_nl.properties
@@ -24,4 +24,4 @@ file.report.hold.description=Beschrijving wachtstand
 file.report.hold.reason=Reden van wachtstand
 file.report.hold.held=In wachtstand
 file.report.createdby=Gemaakt door
-file.report.createdon=Gemaakt op
\ No newline at end of file
+file.report.createdon=Gemaakt op
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_pt_BR.properties
index 915768e1dc..3319a490ca 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_pt_BR.properties
@@ -24,4 +24,4 @@ file.report.hold.description=Descri\u00e7\u00e3o da espera
 file.report.hold.reason=Motivo para manter
 file.report.hold.held=Mantido
 file.report.createdby=Criado por
-file.report.createdon=Criado em
\ No newline at end of file
+file.report.createdon=Criado em
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_ru.properties
index 075b08d85e..ff7b9e4049 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_ru.properties
@@ -24,4 +24,4 @@ file.report.hold.description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u
 file.report.hold.reason=\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438
 file.report.hold.held=\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043e
 file.report.createdby=\u0421\u043e\u0437\u0434\u0430\u043b
-file.report.createdon=\u0421\u043e\u0437\u0434\u0430\u043d\u043e
\ No newline at end of file
+file.report.createdon=\u0421\u043e\u0437\u0434\u0430\u043d\u043e
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_zh_CN.properties
index 42526a169b..10c7fd29fc 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/template_zh_CN.properties
@@ -24,4 +24,4 @@ file.report.hold.description=\u4fdd\u5b58\u8bf4\u660e
 file.report.hold.reason=\u4fdd\u5b58\u539f\u56e0
 file.report.hold.held=\u4fdd\u5b58
 file.report.createdby=\u521b\u5efa\u8005
-file.report.createdon=\u521b\u5efa\u65f6\u95f4
\ No newline at end of file
+file.report.createdon=\u521b\u5efa\u65f6\u95f4
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_de.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_de.properties
index 01009e35aa..314d26eb1a 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_de.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=Eine Liste mit dem Namen ''{0}'' ist bereits vorhanden.
\ No newline at end of file
+rm.admin.list-already-exists=Eine Liste mit dem Namen ''{0}'' ist bereits vorhanden.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_es.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_es.properties
index c570fb355b..abb262f8f9 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_es.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=Ya existe una lista con el nombre ''{0}''.
\ No newline at end of file
+rm.admin.list-already-exists=Ya existe una lista con el nombre ''{0}''.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_fr.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_fr.properties
index 4fcdc95bda..a5afa0860a 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_fr.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=Une liste portant le nom ''{0}'' existe d\u00e9j\u00e0.
\ No newline at end of file
+rm.admin.list-already-exists=Une liste portant le nom ''{0}'' existe d\u00e9j\u00e0.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_it.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_it.properties
index 0872611890..a09b0ecfd8 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_it.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=Esiste gi\u00e0 un elenco con nome ''{0}''.
\ No newline at end of file
+rm.admin.list-already-exists=Esiste gi\u00e0 un elenco con nome ''{0}''.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_ja.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_ja.properties
index a6caf53c7f..b4ce038947 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_ja.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=''{0}''\u3068\u3044\u3046\u540d\u524d\u306e\u30ea\u30b9\u30c8\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002
\ No newline at end of file
+rm.admin.list-already-exists=''{0}''\u3068\u3044\u3046\u540d\u524d\u306e\u30ea\u30b9\u30c8\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_nb.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_nb.properties
index 7f27bb9c94..d37e2d6961 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_nb.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=En liste med navnet ''{0}'' finnes allerede.
\ No newline at end of file
+rm.admin.list-already-exists=En liste med navnet ''{0}'' finnes allerede.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_nl.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_nl.properties
index 230459d91a..2677b127f9 100755
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_nl.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=Er bestaat al een lijst met de naam ''{0}''.
\ No newline at end of file
+rm.admin.list-already-exists=Er bestaat al een lijst met de naam ''{0}''.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_pt_BR.properties
index e349fe7b57..f570bd1f49 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_pt_BR.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=J\u00e1 existe uma lista com o nome ''{0}''.
\ No newline at end of file
+rm.admin.list-already-exists=J\u00e1 existe uma lista com o nome ''{0}''.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_ru.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_ru.properties
index 9cd2609585..f70fb3efce 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_ru.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=\u0421\u043f\u0438\u0441\u043e\u043a \u0441 \u0438\u043c\u0435\u043d\u0435\u043c ''{0}'' \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.
\ No newline at end of file
+rm.admin.list-already-exists=\u0421\u043f\u0438\u0441\u043e\u043a \u0441 \u0438\u043c\u0435\u043d\u0435\u043c ''{0}'' \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_zh_CN.properties
index 33f499463a..7aca9dd576 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraint.put_zh_CN.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=\u5df2\u7ecf\u5b58\u5728\u540d\u79f0\u4e3a ''{0}'' \u7684\u5217\u8868\u3002
\ No newline at end of file
+rm.admin.list-already-exists=\u5df2\u7ecf\u5b58\u5728\u540d\u79f0\u4e3a ''{0}'' \u7684\u5217\u8868\u3002
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_de.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_de.properties
index 01009e35aa..314d26eb1a 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_de.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=Eine Liste mit dem Namen ''{0}'' ist bereits vorhanden.
\ No newline at end of file
+rm.admin.list-already-exists=Eine Liste mit dem Namen ''{0}'' ist bereits vorhanden.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_es.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_es.properties
index c570fb355b..abb262f8f9 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_es.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=Ya existe una lista con el nombre ''{0}''.
\ No newline at end of file
+rm.admin.list-already-exists=Ya existe una lista con el nombre ''{0}''.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_fr.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_fr.properties
index 4fcdc95bda..a5afa0860a 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_fr.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=Une liste portant le nom ''{0}'' existe d\u00e9j\u00e0.
\ No newline at end of file
+rm.admin.list-already-exists=Une liste portant le nom ''{0}'' existe d\u00e9j\u00e0.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_it.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_it.properties
index 0872611890..a09b0ecfd8 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_it.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=Esiste gi\u00e0 un elenco con nome ''{0}''.
\ No newline at end of file
+rm.admin.list-already-exists=Esiste gi\u00e0 un elenco con nome ''{0}''.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_ja.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_ja.properties
index a6caf53c7f..b4ce038947 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_ja.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=''{0}''\u3068\u3044\u3046\u540d\u524d\u306e\u30ea\u30b9\u30c8\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002
\ No newline at end of file
+rm.admin.list-already-exists=''{0}''\u3068\u3044\u3046\u540d\u524d\u306e\u30ea\u30b9\u30c8\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_nb.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_nb.properties
index 7f27bb9c94..d37e2d6961 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_nb.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=En liste med navnet ''{0}'' finnes allerede.
\ No newline at end of file
+rm.admin.list-already-exists=En liste med navnet ''{0}'' finnes allerede.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_nl.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_nl.properties
index 230459d91a..2677b127f9 100755
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_nl.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=Er bestaat al een lijst met de naam ''{0}''.
\ No newline at end of file
+rm.admin.list-already-exists=Er bestaat al een lijst met de naam ''{0}''.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_pt_BR.properties
index e349fe7b57..f570bd1f49 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_pt_BR.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=J\u00e1 existe uma lista com o nome ''{0}''.
\ No newline at end of file
+rm.admin.list-already-exists=J\u00e1 existe uma lista com o nome ''{0}''.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_ru.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_ru.properties
index 9cd2609585..f70fb3efce 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_ru.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=\u0421\u043f\u0438\u0441\u043e\u043a \u0441 \u0438\u043c\u0435\u043d\u0435\u043c ''{0}'' \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.
\ No newline at end of file
+rm.admin.list-already-exists=\u0421\u043f\u0438\u0441\u043e\u043a \u0441 \u0438\u043c\u0435\u043d\u0435\u043c ''{0}'' \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.
diff --git a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_zh_CN.properties
index 33f499463a..7aca9dd576 100644
--- a/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmconstraint/rmconstraints.post_zh_CN.properties
@@ -1 +1 @@
-rm.admin.list-already-exists=\u5df2\u7ecf\u5b58\u5728\u540d\u79f0\u4e3a ''{0}'' \u7684\u5217\u8868\u3002
\ No newline at end of file
+rm.admin.list-already-exists=\u5df2\u7ecf\u5b58\u5728\u540d\u79f0\u4e3a ''{0}'' \u7684\u5217\u8868\u3002
diff --git a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_de.properties b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_de.properties
index 432bdd708c..bbd943d17b 100644
--- a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_de.properties
+++ b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_de.properties
@@ -20,4 +20,4 @@ rmwf_workflowmodel.type.rmwf_requestInfoTask.title=Aufgabe 'Informationen anford
 rmwf_workflowmodel.type.rmwf_requestInfoTask.description=Aufgabe 'Informationen anfordern'
 
 rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.title=Aufgabe 'Informationen anfordern'
-rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=Aufgabe 'Informationen anfordern'
\ No newline at end of file
+rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=Aufgabe 'Informationen anfordern'
diff --git a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_es.properties b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_es.properties
index e6c63ef0f0..df18f9609e 100644
--- a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_es.properties
+++ b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_es.properties
@@ -20,4 +20,4 @@ rmwf_workflowmodel.type.rmwf_requestInfoTask.title=Tarea de solicitud de informa
 rmwf_workflowmodel.type.rmwf_requestInfoTask.description=Tarea de solicitud de informaci\u00f3n
 
 rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.title=Tarea de solicitud de informaci\u00f3n
-rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=Tarea de solicitud de informaci\u00f3n
\ No newline at end of file
+rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=Tarea de solicitud de informaci\u00f3n
diff --git a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_fr.properties b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_fr.properties
index af53402c90..9860223b9c 100644
--- a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_fr.properties
+++ b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_fr.properties
@@ -20,4 +20,4 @@ rmwf_workflowmodel.type.rmwf_requestInfoTask.title=T\u00e2che de demande d'infor
 rmwf_workflowmodel.type.rmwf_requestInfoTask.description=T\u00e2che de demande d'informations
 
 rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.title=T\u00e2che de demande d'informations
-rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=T\u00e2che de demande d'informations
\ No newline at end of file
+rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=T\u00e2che de demande d'informations
diff --git a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_it.properties b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_it.properties
index a73244009a..e798cba100 100644
--- a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_it.properties
+++ b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_it.properties
@@ -20,4 +20,4 @@ rmwf_workflowmodel.type.rmwf_requestInfoTask.title=Attivit\u00e0 di richiesta in
 rmwf_workflowmodel.type.rmwf_requestInfoTask.description=Attivit\u00e0 di richiesta informazioni
 
 rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.title=Attivit\u00e0 di richiesta informazioni
-rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=Attivit\u00e0 di richiesta informazioni
\ No newline at end of file
+rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=Attivit\u00e0 di richiesta informazioni
diff --git a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_ja.properties b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_ja.properties
index eed2793d70..9fa90f06ee 100644
--- a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_ja.properties
+++ b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_ja.properties
@@ -20,4 +20,4 @@ rmwf_workflowmodel.type.rmwf_requestInfoTask.title=\u60c5\u5831\u306e\u30ea\u30a
 rmwf_workflowmodel.type.rmwf_requestInfoTask.description=\u60c5\u5831\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u30bf\u30b9\u30af
 
 rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.title=\u60c5\u5831\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u30bf\u30b9\u30af
-rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=\u60c5\u5831\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u30bf\u30b9\u30af
\ No newline at end of file
+rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=\u60c5\u5831\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u30bf\u30b9\u30af
diff --git a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_nb.properties b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_nb.properties
index aee20d7c6a..fca4bcec56 100644
--- a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_nb.properties
+++ b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_nb.properties
@@ -20,4 +20,4 @@ rmwf_workflowmodel.type.rmwf_requestInfoTask.title=Be om informasjonsoppgave
 rmwf_workflowmodel.type.rmwf_requestInfoTask.description=Be om informasjonsoppgave
 
 rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.title=Be om informasjonsoppgave
-rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=Be om informasjonsoppgave
\ No newline at end of file
+rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=Be om informasjonsoppgave
diff --git a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_nl.properties b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_nl.properties
index 1d5c8a921d..9cd664136e 100755
--- a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_nl.properties
+++ b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_nl.properties
@@ -20,4 +20,4 @@ rmwf_workflowmodel.type.rmwf_requestInfoTask.title=Informatie-aanvraagtaak
 rmwf_workflowmodel.type.rmwf_requestInfoTask.description=Informatie-aanvraagtaak
 
 rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.title=Informatie-aanvraagtaak
-rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=Informatie-aanvraagtaak
\ No newline at end of file
+rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=Informatie-aanvraagtaak
diff --git a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_pt_BR.properties
index b12bc3ed0e..6170bd0604 100644
--- a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_pt_BR.properties
+++ b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_pt_BR.properties
@@ -20,4 +20,4 @@ rmwf_workflowmodel.type.rmwf_requestInfoTask.title=Tarefa de solicita\u00e7\u00e
 rmwf_workflowmodel.type.rmwf_requestInfoTask.description=Tarefa de solicita\u00e7\u00e3o de informa\u00e7\u00f5es
 
 rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.title=Tarefa de solicita\u00e7\u00e3o de informa\u00e7\u00f5es
-rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=Tarefa de solicita\u00e7\u00e3o de informa\u00e7\u00f5es
\ No newline at end of file
+rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=Tarefa de solicita\u00e7\u00e3o de informa\u00e7\u00f5es
diff --git a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_ru.properties b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_ru.properties
index 3abcd96a93..db2fd5ff1f 100644
--- a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_ru.properties
+++ b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_ru.properties
@@ -20,4 +20,4 @@ rmwf_workflowmodel.type.rmwf_requestInfoTask.title=\u0417\u0430\u0434\u0430\u044
 rmwf_workflowmodel.type.rmwf_requestInfoTask.description=\u0417\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438
 
 rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.title=\u0417\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438
-rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=\u0417\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438
\ No newline at end of file
+rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=\u0417\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438
diff --git a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_zh_CN.properties
index 272c703087..c53f947909 100644
--- a/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_zh_CN.properties
+++ b/rm-community/rm-community-repo/config/alfresco/workflow/rm-workflow-messages_zh_CN.properties
@@ -20,4 +20,4 @@ rmwf_workflowmodel.type.rmwf_requestInfoTask.title=\u8bf7\u6c42\u4fe1\u606f\u4ef
 rmwf_workflowmodel.type.rmwf_requestInfoTask.description=\u8bf7\u6c42\u4fe1\u606f\u4efb\u52a1
 
 rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.title=\u8bf7\u6c42\u4fe1\u606f\u4efb\u52a1
-rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=\u8bf7\u6c42\u4fe1\u606f\u4efb\u52a1
\ No newline at end of file
+rmwf_workflowmodel.type.rmwf_reviewRequestInfoTask.description=\u8bf7\u6c42\u4fe1\u606f\u4efb\u52a1

From 088c8701410e5060ad54918807795818007691e2 Mon Sep 17 00:00:00 2001
From: Ana Bozianu 
Date: Sun, 29 Jan 2017 17:37:05 +0200
Subject: [PATCH 32/61] RM-4619 - moved code to existing onCommit method

---
 .../model/rma/type/RecordCategoryType.java    | 27 +++++++++----------
 .../rma/type/RecordCategoryTypeUnitTest.java  |  3 +--
 2 files changed, 14 insertions(+), 16 deletions(-)

diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java
index 531c2047eb..f4a6ceb359 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java
@@ -108,23 +108,12 @@ public class RecordCategoryType extends    BaseBehaviourBean
     @Override
     @Behaviour
     (
-       kind = BehaviourKind.ASSOCIATION,
-       notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT
+       kind = BehaviourKind.ASSOCIATION
     )
     public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean bNew)
     {
         NodeRef child = childAssocRef.getChildRef();
         NodeRef parentRef = childAssocRef.getParentRef();
-        QName childType = nodeService.getType(child);
-
-        // We need to automatically cast the created folder to record folder if it is a plain folder
-        // This occurs if the RM folder has been created via IMap, WebDav, etc
-        // Ignore hidden files. Some modules use hidden files to store information (see RM-3283)
-        if ( childType == ContentModel.TYPE_FOLDER &&
-                !nodeService.hasAspect(child, ContentModel.ASPECT_HIDDEN))
-        {
-            nodeService.setType(child, TYPE_RECORD_FOLDER);
-        }
 
         if (bNew)
         {
@@ -148,7 +137,17 @@ public class RecordCategoryType extends    BaseBehaviourBean
     )
     public void onCreateChildAssociationOnCommit(ChildAssociationRef childAssocRef, boolean bNew)
     {
-        final NodeRef recordCategory = childAssocRef.getChildRef();
+        final NodeRef child = childAssocRef.getChildRef();
+        QName childType = nodeService.getType(child);
+
+        // We need to automatically cast the created folder to record folder if it is a plain folder
+        // This occurs if the RM folder has been created via IMap, WebDav, etc
+        // Ignore hidden files. Some modules use hidden files to store information (see RM-3283)
+        if ( childType == ContentModel.TYPE_FOLDER &&
+                !nodeService.hasAspect(child, ContentModel.ASPECT_HIDDEN))
+        {
+            nodeService.setType(child, TYPE_RECORD_FOLDER);
+        }
 
         behaviourFilter.disableBehaviour();
         try
@@ -159,7 +158,7 @@ public class RecordCategoryType extends    BaseBehaviourBean
                 public Void doWork()
                 {
                     // setup vital record definition
-                    vitalRecordService.setupVitalRecordDefinition(recordCategory);
+                    vitalRecordService.setupVitalRecordDefinition(child);
 
                     return null;
                 }
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java
index ffd6256a2d..df9f2e1826 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java
@@ -123,7 +123,7 @@ public class RecordCategoryTypeUnitTest extends BaseUnitTest
 
         try
         {
-            recordCategoryType.onCreateChildAssociation(childAssocRef, true);
+            recordCategoryType.onCreateChildAssociationOnCommit(childAssocRef, true);
         }
         catch(IntegrityException ex)
         {
@@ -131,6 +131,5 @@ public class RecordCategoryTypeUnitTest extends BaseUnitTest
         }
 
         verify(mockedNodeService).setType(nodeRef, TYPE_RECORD_FOLDER);
-        verify(mockedRecordFolderService).setupRecordFolder(nodeRef);
     }
 }

From 596eb3a93789473434cb61dee776d10bd19a7863 Mon Sep 17 00:00:00 2001
From: Rodica Sutu 
Date: Mon, 30 Jan 2017 09:34:34 +0200
Subject: [PATCH 33/61] proposed solution for creating electronic records with
 setting properties inside the FilePlanComponentProperties object using
 multipart upload

---
 .../igCoreAPI/FilePlanComponentAPI.java       |  6 +--
 .../community/util/FilePlanComponentMix.java  | 50 +++++++++++++++++++
 .../rest/rm/community/util/PojoUtility.java   | 35 +++++++++++++
 .../ElectronicRecordTests.java                |  8 +++
 4 files changed, 96 insertions(+), 3 deletions(-)
 create mode 100644 rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/FilePlanComponentMix.java

diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java
index 92132e8926..88b3c31c8a 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/FilePlanComponentAPI.java
@@ -32,6 +32,7 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
 import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryObject;
 import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryString;
 import static org.alfresco.rest.rm.community.util.PojoUtility.toJson;
+import static org.alfresco.rest.rm.community.util.PojoUtility.toJsonElectronicRecord;
 import static org.apache.commons.lang3.StringUtils.EMPTY;
 import static org.springframework.http.HttpMethod.DELETE;
 import static org.springframework.http.HttpMethod.GET;
@@ -231,7 +232,7 @@ public class FilePlanComponentAPI extends RMModelRequest
 
     /**
      * Create electronic record from file resource
-     * 
+     *
      * @param electronicRecordModel {@link FilePlanComponent} for electronic record to be created
      * @param recordContent {@link File} pointing to the content of the electronic record to be created
      * @param parentId parent container id
@@ -253,8 +254,7 @@ public class FilePlanComponentAPI extends RMModelRequest
          * to the request.
          */
         RequestSpecBuilder builder = getRMRestWrapper().configureRequestSpec();
-        JsonNode root = new ObjectMapper().readTree(toJson(electronicRecordModel));
-
+        JsonNode root = new ObjectMapper().readTree(toJsonElectronicRecord(electronicRecordModel));
         // add request fields
         Iterator fieldNames = root.fieldNames();
         while (fieldNames.hasNext())
diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/FilePlanComponentMix.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/FilePlanComponentMix.java
new file mode 100644
index 0000000000..580fe13049
--- /dev/null
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/FilePlanComponentMix.java
@@ -0,0 +1,50 @@
+/*
+ * #%L
+ * Alfresco Records Management Module
+ * %%
+ * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * -
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail.  Otherwise, the software is
+ * provided under the following open source license terms:
+ * -
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * -
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ * -
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
+package org.alfresco.rest.rm.community.util;
+
+import com.fasterxml.jackson.annotation.JsonUnwrapped;
+
+import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentProperties;
+
+/**
+ * Mix class for FilePlanComponent POJO class
+ * Mix-in annotations are: a way to associate annotations with classes
+ * without modifying (target) classes themselves.
+ *
+ * @author Rodica Sutu
+ * @since 2.6
+ */
+public abstract class FilePlanComponentMix
+{
+    /**
+     * Annotation used to indicate that a property should be serialized "unwrapped"
+     * Its properties are instead included as properties of its containing Object
+     */
+    @JsonUnwrapped
+    abstract FilePlanComponentProperties getProperties();
+
+}
diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/PojoUtility.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/PojoUtility.java
index 7653f8ffc0..2d0eb321e7 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/PojoUtility.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/PojoUtility.java
@@ -34,6 +34,8 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
+import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent;
+
 /**
  * Utility class for creating the json object
  *
@@ -71,4 +73,37 @@ public class PojoUtility
             return e.toString();
         }
     }
+
+
+    /**
+     * Converting object to JSON string for electronic records
+     *
+     * @param model The java object model to convert
+     * @throws JsonProcessingException Throws exceptions if the given object doesn't match to the POJO class model
+     */
+    public static String toJsonElectronicRecord(Object model) throws JsonProcessingException
+    {
+        ObjectMapper mapper = new ObjectMapper();
+        //inject the "mix-in" annotations  from FilePlanComponentMix to
+        // FilePlanComponent POJO class when converting to json
+        mapper.addMixIn(FilePlanComponent.class, FilePlanComponentMix.class);
+        //include only values that differ from default settings to be included
+        mapper.setSerializationInclusion(Include.NON_DEFAULT);
+        try
+        {
+
+            //return the json object
+            return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(model);
+
+        } catch (JsonGenerationException e)
+        {
+            return e.toString();
+        } catch (JsonMappingException e)
+        {
+            return e.toString();
+        } catch (IOException e)
+        {
+            return e.toString();
+        }
+    }
 }
diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
index 99fb80b1c6..3322e4b346 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
@@ -49,6 +49,7 @@ import org.alfresco.rest.rm.community.base.BaseRMRestTest;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentContent;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields;
+import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentProperties;
 import org.alfresco.rest.rm.community.requests.igCoreAPI.FilePlanComponentAPI;
 import org.alfresco.utility.report.Bug;
 import org.testng.annotations.DataProvider;
@@ -272,6 +273,11 @@ public class ElectronicRecordTests extends BaseRMRestTest
                                                                       .mimeType("text/plain")
                                                                       .build()
                                                                       )
+                                                              .properties(FilePlanComponentProperties
+                                                                        .builder()
+                                                                        .description(ELECTRONIC_RECORD_NAME)
+                                                                        .build()
+                                                                          )
                                                               .relativePath(RELATIVE_PATH)
                                                               .build();
 
@@ -283,6 +289,8 @@ public class ElectronicRecordTests extends BaseRMRestTest
         // get newly created electronic record and verify its properties
         assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId())
                                         .getName().startsWith(ELECTRONIC_RECORD_NAME));
+        assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getId())
+                                        .getProperties().getDescription().equals(ELECTRONIC_RECORD_NAME));
         assertTrue(filePlanComponentsAPI.getFilePlanComponent(recordCreated.getParentId())
                                         .getName().equals(FOLDER_NAME));
         //get newly created electronic record using the relativePath

From 6ff8dd5846bb80078d48c8171524e0f84e976340 Mon Sep 17 00:00:00 2001
From: Ana Bozianu 
Date: Mon, 30 Jan 2017 12:05:48 +0200
Subject: [PATCH 34/61] RM-4619 - added cm:folder as accepted type and do the
 conversion onCommit - request doesn't have full info

---
 .../model/rma/type/FilePlanType.java          | 27 ++++++++----
 .../model/rma/type/RecordCategoryType.java    | 41 +++++++++----------
 .../rm/rest/api/impl/RMNodesImpl.java         |  9 +---
 .../model/rma/type/FilePlanTypeUnitTest.java  |  2 +-
 4 files changed, 41 insertions(+), 38 deletions(-)

diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanType.java
index 2f88fe7d37..38076241c7 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanType.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanType.java
@@ -67,7 +67,7 @@ public class FilePlanType extends    BaseBehaviourBean
                                      NodeServicePolicies.BeforeDeleteNodePolicy
 {
     private final static List ACCEPTED_UNIQUE_CHILD_TYPES = Arrays.asList(TYPE_HOLD_CONTAINER, TYPE_TRANSFER_CONTAINER, TYPE_UNFILED_RECORD_CONTAINER);
-    private final static List ACCEPTED_NON_UNIQUE_CHILD_TYPES = Arrays.asList(TYPE_RECORD_CATEGORY);
+    private final static List ACCEPTED_NON_UNIQUE_CHILD_TYPES = Arrays.asList(TYPE_RECORD_CATEGORY, ContentModel.TYPE_FOLDER);
     private static final String BEHAVIOUR_NAME = "onDeleteFilePlan";
 
     /** file plan service */
@@ -209,25 +209,38 @@ public class FilePlanType extends    BaseBehaviourBean
      */
     @Behaviour
     (
-       kind = BehaviourKind.ASSOCIATION,
-       notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT
+       kind = BehaviourKind.ASSOCIATION
     )
     @Override
     public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean bNew)
+    {
+        // check the created child is of an accepted type
+        validateNewChildAssociation(childAssocRef.getParentRef(), childAssocRef.getChildRef(), ACCEPTED_UNIQUE_CHILD_TYPES, ACCEPTED_NON_UNIQUE_CHILD_TYPES);
+    }
+
+    /**
+     * On transaction commit
+     *
+     * @see org.alfresco.repo.node.NodeServicePolicies.OnCreateChildAssociationPolicy#onCreateChildAssociation(org.alfresco.service.cmr.repository.ChildAssociationRef, boolean)
+     */
+    @Behaviour
+    (
+       kind = BehaviourKind.ASSOCIATION,
+       policy = "alf:onCreateChildAssociation",
+       notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT
+    )
+    public void onCreateChildAssociationOnCommit(ChildAssociationRef childAssocRef, boolean bNew)
     {
         NodeRef child = childAssocRef.getChildRef();
 
         // We need to automatically cast the created folder to category if it is a plain folder
         // This occurs if the RM folder has been created via IMap, WebDav, etc
         // Ignore hidden files. Some modules use hidden files to store information (see RM-3283)
-        if (nodeService.getType(child) == ContentModel.TYPE_FOLDER &&
+        if (nodeService.getType(child).equals(ContentModel.TYPE_FOLDER) &&
                 !nodeService.hasAspect(child, ContentModel.ASPECT_HIDDEN))
         {
             nodeService.setType(child, TYPE_RECORD_CATEGORY);
         }
-
-        // check the created child is of an accepted type
-        validateNewChildAssociation(childAssocRef.getParentRef(), childAssocRef.getChildRef(), ACCEPTED_UNIQUE_CHILD_TYPES, ACCEPTED_NON_UNIQUE_CHILD_TYPES);
     }
 
     /**
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java
index f4a6ceb359..3dc8d4d04a 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java
@@ -65,7 +65,7 @@ public class RecordCategoryType extends    BaseBehaviourBean
                                            NodeServicePolicies.OnCreateNodePolicy
 {
     private final static List ACCEPTED_UNIQUE_CHILD_TYPES = new ArrayList();
-    private final static List ACCEPTED_NON_UNIQUE_CHILD_TYPES = Arrays.asList(TYPE_RECORD_CATEGORY, TYPE_RECORD_FOLDER);
+    private final static List ACCEPTED_NON_UNIQUE_CHILD_TYPES = Arrays.asList(TYPE_RECORD_CATEGORY, TYPE_RECORD_FOLDER, ContentModel.TYPE_FOLDER);
 
     /** vital record service */
     protected VitalRecordService vitalRecordService;
@@ -112,16 +112,7 @@ public class RecordCategoryType extends    BaseBehaviourBean
     )
     public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean bNew)
     {
-        NodeRef child = childAssocRef.getChildRef();
-        NodeRef parentRef = childAssocRef.getParentRef();
-
-        if (bNew)
-        {
-            // setup the record folder
-            recordFolderService.setupRecordFolder(child);
-        }
-
-        validateNewChildAssociation(parentRef, child, ACCEPTED_UNIQUE_CHILD_TYPES, ACCEPTED_NON_UNIQUE_CHILD_TYPES);
+        validateNewChildAssociation(childAssocRef.getParentRef(), childAssocRef.getChildRef(), ACCEPTED_UNIQUE_CHILD_TYPES, ACCEPTED_NON_UNIQUE_CHILD_TYPES);
     }
 
     /**
@@ -135,19 +126,10 @@ public class RecordCategoryType extends    BaseBehaviourBean
        policy = "alf:onCreateChildAssociation",
        notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT
     )
-    public void onCreateChildAssociationOnCommit(ChildAssociationRef childAssocRef, boolean bNew)
+    public void onCreateChildAssociationOnCommit(ChildAssociationRef childAssocRef, final boolean bNew)
     {
         final NodeRef child = childAssocRef.getChildRef();
-        QName childType = nodeService.getType(child);
-
-        // We need to automatically cast the created folder to record folder if it is a plain folder
-        // This occurs if the RM folder has been created via IMap, WebDav, etc
-        // Ignore hidden files. Some modules use hidden files to store information (see RM-3283)
-        if ( childType == ContentModel.TYPE_FOLDER &&
-                !nodeService.hasAspect(child, ContentModel.ASPECT_HIDDEN))
-        {
-            nodeService.setType(child, TYPE_RECORD_FOLDER);
-        }
+        final QName childType = nodeService.getType(child);
 
         behaviourFilter.disableBehaviour();
         try
@@ -157,6 +139,21 @@ public class RecordCategoryType extends    BaseBehaviourBean
                 @Override
                 public Void doWork()
                 {
+                    // We need to automatically cast the created folder to record folder if it is a plain folder
+                    // This occurs if the RM folder has been created via IMap, WebDav, etc
+                    // Ignore hidden files. Some modules use hidden files to store information (see RM-3283)
+                    if ( childType.equals(ContentModel.TYPE_FOLDER) &&
+                            !nodeService.hasAspect(child, ContentModel.ASPECT_HIDDEN))
+                    {
+                        nodeService.setType(child, TYPE_RECORD_FOLDER);
+                    }
+
+                    if (bNew)
+                    {
+                        // setup the record folder
+                        recordFolderService.setupRecordFolder(child);
+                    }
+
                     // setup vital record definition
                     vitalRecordService.setupVitalRecordDefinition(child);
 
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java
index e9b7f71de9..81e839c120 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java
@@ -138,14 +138,7 @@ public class RMNodesImpl extends NodesImpl implements RMNodes
 
         if (type == null)
         {
-            if (filePlanService.isFilePlanComponent(nodeRef))
-            {
-                node = new FileplanComponentNode(originalNode);
-            }
-            else
-            {
-                throw new InvalidParameterException("The provided node is not a fileplan component");
-            }
+            node = new FileplanComponentNode(originalNode);
         }
         else
         {
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java
index d25d6ecb19..af6a035acc 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java
@@ -195,7 +195,7 @@ public class FilePlanTypeUnitTest extends BaseUnitTest
 
         try
         {
-            filePlanType.onCreateChildAssociation(childAssocRef, true);
+            filePlanType.onCreateChildAssociationOnCommit(childAssocRef, true);
         }
         catch(IntegrityException ex)
         {

From e1b0e994a1a0acbce41ac7caa94b1ef11e3c2599 Mon Sep 17 00:00:00 2001
From: Ana Bozianu 
Date: Mon, 30 Jan 2017 12:54:37 +0200
Subject: [PATCH 35/61] RM-4619 - added the fileplan component check back but
 in different place

---
 .../rm-public-rest-context.xml                |  3 +-
 .../rm/rest/api/impl/RMNodesImpl.java         |  6 ++++
 .../rm/rest/api/impl/RecordsImpl.java         | 22 +++++++++----
 .../impl/RMNodesImplRelativePathUnitTest.java |  5 +++
 .../rm/rest/api/impl/RMNodesImplUnitTest.java |  4 +--
 .../rm/rest/api/impl/RecordsImplUnitTest.java | 33 ++++++++++---------
 6 files changed, 48 insertions(+), 25 deletions(-)

diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-public-rest-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-public-rest-context.xml
index 34da746fb3..9c37e9482f 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-public-rest-context.xml
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-public-rest-context.xml
@@ -93,7 +93,8 @@
     
         
         
-        
+        
+        
         
         
         
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java
index 81e839c120..b581ff89b2 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java
@@ -61,6 +61,7 @@ import org.alfresco.service.cmr.dictionary.DictionaryService;
 import org.alfresco.service.cmr.model.FileFolderService;
 import org.alfresco.service.cmr.repository.NodeRef;
 import org.alfresco.service.cmr.repository.NodeService;
+import org.alfresco.service.cmr.repository.StoreRef;
 import org.alfresco.service.namespace.QName;
 import org.alfresco.util.Pair;
 import org.alfresco.util.ParameterCheck;
@@ -277,6 +278,11 @@ public class RMNodesImpl extends NodesImpl implements RMNodes
             }
         }
 
+        if(!filePlanService.isFilePlanComponent(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId)))
+        {
+            throw new InvalidParameterException("The provided node is not a fileplan component");
+        }
+
         return super.validateNode(nodeId);
     }
 
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RecordsImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RecordsImpl.java
index 2938feee94..5bc3500ab9 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RecordsImpl.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RecordsImpl.java
@@ -36,6 +36,7 @@ import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
 import org.alfresco.module.org_alfresco_module_rm.util.AuthenticationUtil;
 import org.alfresco.repo.node.integrity.IntegrityException;
 import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
+import org.alfresco.rest.api.Nodes;
 import org.alfresco.rest.api.model.Node;
 import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException;
 import org.alfresco.rest.framework.resource.parameters.Parameters;
@@ -67,7 +68,8 @@ public class RecordsImpl implements Records, InitializingBean
     protected FileFolderService fileFolderService;
     protected DictionaryService dictionaryService;
     protected AuthenticationUtil authenticationUtil;
-    protected RMNodes nodes;
+    protected RMNodes rmNodes;
+    protected Nodes nodes;
 
     public void setRecordService(RecordService recordService)
     {
@@ -99,7 +101,12 @@ public class RecordsImpl implements Records, InitializingBean
         this.authenticationUtil = authenticationUtil;
     }
 
-    public void setNodes(RMNodes nodes)
+    public void setRmNodes(RMNodes rmNodes)
+    {
+        this.rmNodes = rmNodes;
+    }
+
+    public void setNodes(Nodes nodes)
     {
         this.nodes = nodes;
     }
@@ -108,6 +115,7 @@ public class RecordsImpl implements Records, InitializingBean
     public Node declareFileAsRecord(String fileId, Parameters parameters)
     {
         // Get file to be declared
+        // Use nodes instead of rmNodes because the file is not a record yet
         NodeRef fileNodeRef = nodes.validateNode(fileId) ;
 
         // Get fileplan
@@ -127,7 +135,7 @@ public class RecordsImpl implements Records, InitializingBean
         recordService.createRecord(filePlan, fileNodeRef, !hideRecord);
 
         // Get information about the new record
-        return nodes.getFolderOrDocument(fileId, parameters);
+        return rmNodes.getFolderOrDocument(fileId, parameters);
     }
 
     @Override
@@ -139,7 +147,7 @@ public class RecordsImpl implements Records, InitializingBean
         }
 
         // Get record
-        NodeRef record = nodes.validateNode(recordId);
+        NodeRef record = rmNodes.validateNode(recordId);
 
         // Get record folder to file/link the record to
         String parentContainerId = target.getTargetParentId();
@@ -155,7 +163,7 @@ public class RecordsImpl implements Records, InitializingBean
                 }
             });
         }
-        NodeRef parentRecordFolder = nodes.getOrCreatePath(parentContainerId, target.getRelativePath(), ContentModel.TYPE_CONTENT);
+        NodeRef parentRecordFolder = rmNodes.getOrCreatePath(parentContainerId, target.getRelativePath(), ContentModel.TYPE_CONTENT);
 
         // Check if the target is a record folder
         if(!dictionaryService.isSubClass(nodeService.getType(parentRecordFolder), RecordsManagementModel.TYPE_RECORD_FOLDER))
@@ -186,7 +194,7 @@ public class RecordsImpl implements Records, InitializingBean
         }
 
         // Get the record info
-        return nodes.getFolderOrDocument(recordId, parameters);
+        return rmNodes.getFolderOrDocument(recordId, parameters);
     }
 
     @Override
@@ -194,7 +202,7 @@ public class RecordsImpl implements Records, InitializingBean
     {
         ParameterCheck.mandatory("recordService", recordService);
         ParameterCheck.mandatory("filePlanService", filePlanService);
-        ParameterCheck.mandatory("nodes", nodes);
+        ParameterCheck.mandatory("nodes", rmNodes);
         ParameterCheck.mandatory("nodeService",  nodeService);
         ParameterCheck.mandatory("fileFolderService", fileFolderService);
         ParameterCheck.mandatory("dictionaryService", dictionaryService);
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplRelativePathUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplRelativePathUnitTest.java
index 0a0db60ae7..796242aa56 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplRelativePathUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplRelativePathUnitTest.java
@@ -85,6 +85,7 @@ public class RMNodesImplRelativePathUnitTest  extends BaseUnitTest
          * Given any parent node
          */
         NodeRef parentNode = AlfMock.generateNodeRef(mockedNodeService);
+        when(mockedFilePlanService.isFilePlanComponent(parentNode)).thenReturn(true);
 
         /*
          *  When trying to create a node in the parent node with no relative path
@@ -112,6 +113,7 @@ public class RMNodesImplRelativePathUnitTest  extends BaseUnitTest
          * Given a parent node and an existing path c1/f1 under it
          */
         NodeRef parentNode = AlfMock.generateNodeRef(mockedNodeService);
+        when(mockedFilePlanService.isFilePlanComponent(parentNode)).thenReturn(true);
 
         String category = "c1";
         NodeRef categoryNode = AlfMock.generateNodeRef(mockedNodeService);
@@ -154,6 +156,7 @@ public class RMNodesImplRelativePathUnitTest  extends BaseUnitTest
         String category1 = "c1";
         NodeRef categoryNode1 = AlfMock.generateNodeRef(mockedNodeService);
         when(mockedNodeService.getChildByName(fileplanNodeRef, ContentModel.ASSOC_CONTAINS, category1)).thenReturn(categoryNode1);
+        when(mockedFilePlanService.isFilePlanComponent(fileplanNodeRef)).thenReturn(true);
 
         // create c2
         String category2 = "c2";
@@ -200,6 +203,7 @@ public class RMNodesImplRelativePathUnitTest  extends BaseUnitTest
          */
         NodeRef unfiledRecordContainer = AlfMock.generateNodeRef(mockedNodeService);
         when(mockedNodeService.getType(unfiledRecordContainer)).thenReturn(TYPE_UNFILED_RECORD_CONTAINER);
+        when(mockedFilePlanService.isFilePlanComponent(unfiledRecordContainer)).thenReturn(true);
 
         /*
          *  When trying to create a content node in the relative path f1/f2/f3
@@ -255,6 +259,7 @@ public class RMNodesImplRelativePathUnitTest  extends BaseUnitTest
          */
         NodeRef fileplanNodeRef = AlfMock.generateNodeRef(mockedNodeService);
         when(mockedNodeService.getType(fileplanNodeRef)).thenReturn(TYPE_FILE_PLAN);
+        when(mockedFilePlanService.isFilePlanComponent(fileplanNodeRef)).thenReturn(true);
 
         /*
          *  When trying to create a folder node in the relative path c1/c2/c3
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java
index e174775483..ddd5db3af7 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java
@@ -318,10 +318,9 @@ public class RMNodesImplUnitTest extends BaseUnitTest
         setupCompanyHomeAndPrimaryParent(nodeRef);
 
         when(mockedFilePlanService.isFilePlanComponent(nodeRef)).thenReturn(false);
-        List includeParamList = new ArrayList();
         try
         {
-            rmNodesImpl.getFolderOrDocument(nodeRef, null, null, includeParamList, null);
+            rmNodesImpl.validateNode(nodeRef.getId());
             fail("Expected exception since the requested node is not a fileplan component.");
         }
         catch(InvalidParameterException ex)
@@ -628,6 +627,7 @@ public class RMNodesImplUnitTest extends BaseUnitTest
     public void testValidateNode() throws Exception
     {
         NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService);
+        when(mockedFilePlanService.isFilePlanComponent(nodeRef)).thenReturn(true);
         NodeRef validateOrLookupNode = rmNodesImpl.validateNode(nodeRef.getId());
         assertEquals(nodeRef, validateOrLookupNode);
     }
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RecordsImplUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RecordsImplUnitTest.java
index c10b272441..e3c57b407a 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RecordsImplUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RecordsImplUnitTest.java
@@ -40,6 +40,7 @@ import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
 import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock;
 import org.alfresco.module.org_alfresco_module_rm.test.util.MockAuthenticationUtilHelper;
 import org.alfresco.module.org_alfresco_module_rm.util.AuthenticationUtil;
+import org.alfresco.rest.api.Nodes;
 import org.alfresco.rest.framework.resource.parameters.Parameters;
 import org.alfresco.rm.rest.api.RMNodes;
 import org.alfresco.rm.rest.api.Records;
@@ -77,7 +78,9 @@ public class RecordsImplUnitTest
     @Mock
     protected AuthenticationUtil mockedAuthenticationUtil;
     @Mock
-    protected RMNodes mockedNodes;
+    protected RMNodes mockedRMNodes;
+    @Mock
+    protected Nodes mockedNodes;
 
     @InjectMocks
     private RecordsImpl recordsImpl;
@@ -119,7 +122,7 @@ public class RecordsImplUnitTest
          * Then a record is created under the existing fileplan from the provided file
          */
         verify(mockedRecordService).createRecord(fileplan, mockedFile, false);
-        verify(mockedNodes).getFolderOrDocument(mockedFile.getId(), params);
+        verify(mockedRMNodes).getFolderOrDocument(mockedFile.getId(), params);
     }
 
     /**
@@ -134,7 +137,7 @@ public class RecordsImplUnitTest
          * Given a record
          */
         NodeRef mockedRecord = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
+        when(mockedRMNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
 
         /*
          * When trying to filing a record providing a blank destination path
@@ -157,7 +160,7 @@ public class RecordsImplUnitTest
          */
         // mock the record to file
         NodeRef mockedRecord = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
+        when(mockedRMNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
 
         // mock the current primary parent
         NodeRef mockedPrimaryParent = AlfMock.generateNodeRef(mockedNodeService);
@@ -169,7 +172,7 @@ public class RecordsImplUnitTest
 
         // mock the target record folder to file the record into
         NodeRef mockedTargetRecordFolder = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedNodes.getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
+        when(mockedRMNodes.getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
         when(mockedNodeService.getType(mockedTargetRecordFolder)).thenReturn(TYPE_RECORD_FOLDER);
         when(mockedDictionaryService.isSubClass(TYPE_RECORD_FOLDER, TYPE_RECORD_FOLDER)).thenReturn(true);
 
@@ -185,7 +188,7 @@ public class RecordsImplUnitTest
         /*
          * Then the record is moved under the destination folder
          */
-        verify(mockedNodes).getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT);
+        verify(mockedRMNodes).getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT);
         verify(mockedFileFolderService).moveFrom(mockedRecord, mockedPrimaryParent, mockedTargetRecordFolder, null);
     }
 
@@ -203,7 +206,7 @@ public class RecordsImplUnitTest
          */
         // mock the record to file
         NodeRef mockedRecord = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
+        when(mockedRMNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
 
         // mock the current primary parent
         NodeRef mockedPrimaryParent = AlfMock.generateNodeRef(mockedNodeService);
@@ -220,7 +223,7 @@ public class RecordsImplUnitTest
         // mock the target record folder to file the record into
         String relativePath = "category/recordFolder";
         NodeRef mockedTargetRecordFolder = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedNodes.getOrCreatePath(fileplan.getId(), relativePath, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
+        when(mockedRMNodes.getOrCreatePath(fileplan.getId(), relativePath, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
         when(mockedNodeService.getType(mockedTargetRecordFolder)).thenReturn(TYPE_RECORD_FOLDER);
         when(mockedDictionaryService.isSubClass(TYPE_RECORD_FOLDER, TYPE_RECORD_FOLDER)).thenReturn(true);
 
@@ -236,7 +239,7 @@ public class RecordsImplUnitTest
         /*
          * Then the record is moved under the destination folder relative to the fileplan
          */
-        verify(mockedNodes).getOrCreatePath(fileplan.getId(), relativePath, TYPE_CONTENT);
+        verify(mockedRMNodes).getOrCreatePath(fileplan.getId(), relativePath, TYPE_CONTENT);
         verify(mockedFileFolderService).moveFrom(mockedRecord, mockedPrimaryParent, mockedTargetRecordFolder, null);
     }
 
@@ -254,7 +257,7 @@ public class RecordsImplUnitTest
          */
         // mock the record to file
         NodeRef mockedRecord = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
+        when(mockedRMNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
 
         // mock the current primary parent
         NodeRef mockedPrimaryParent = AlfMock.generateNodeRef(mockedNodeService);
@@ -270,7 +273,7 @@ public class RecordsImplUnitTest
         // mock the target record folder to file the record into
         String relativePath = "category/recordFolder";
         NodeRef mockedTargetRecordFolder = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedNodes.getOrCreatePath(mockedTargetCategory.getId(), relativePath, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
+        when(mockedRMNodes.getOrCreatePath(mockedTargetCategory.getId(), relativePath, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
         when(mockedNodeService.getType(mockedTargetRecordFolder)).thenReturn(TYPE_RECORD_FOLDER);
         when(mockedDictionaryService.isSubClass(TYPE_RECORD_FOLDER, TYPE_RECORD_FOLDER)).thenReturn(true);
 
@@ -287,7 +290,7 @@ public class RecordsImplUnitTest
         /*
          * Then the record is moved under the correct destination folder
          */
-        verify(mockedNodes).getOrCreatePath(mockedTargetCategory.getId(), relativePath, TYPE_CONTENT);
+        verify(mockedRMNodes).getOrCreatePath(mockedTargetCategory.getId(), relativePath, TYPE_CONTENT);
         verify(mockedFileFolderService).moveFrom(mockedRecord, mockedPrimaryParent, mockedTargetRecordFolder, null);
     }
 
@@ -304,7 +307,7 @@ public class RecordsImplUnitTest
          */
         // mock the record to link
         NodeRef mockedRecord = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
+        when(mockedRMNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
 
         // mock the current primary parent
         NodeRef mockedPrimaryParent = AlfMock.generateNodeRef(mockedNodeService);
@@ -316,7 +319,7 @@ public class RecordsImplUnitTest
 
         // mock the target record folder to file the record into
         NodeRef mockedTargetRecordFolder = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedNodes.getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
+        when(mockedRMNodes.getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
         when(mockedNodeService.getType(mockedTargetRecordFolder)).thenReturn(TYPE_RECORD_FOLDER);
 
         /*
@@ -331,7 +334,7 @@ public class RecordsImplUnitTest
         /*
          * Then the record is linked to the destination folder
          */
-        verify(mockedNodes).getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT);
+        verify(mockedRMNodes).getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT);
         verify(mockedRecordService).link(mockedRecord, mockedTargetRecordFolder);
     }
 }

From ed55ed717655229172cea01dda1b339985b5e49f Mon Sep 17 00:00:00 2001
From: Rodica Sutu 
Date: Mon, 30 Jan 2017 13:29:05 +0200
Subject: [PATCH 36/61] review comments

---
 .../alfresco/rest/rm/community/util/PojoUtility.java  | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/PojoUtility.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/PojoUtility.java
index 2d0eb321e7..5b98b437ae 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/PojoUtility.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/PojoUtility.java
@@ -84,9 +84,11 @@ public class PojoUtility
     public static String toJsonElectronicRecord(Object model) throws JsonProcessingException
     {
         ObjectMapper mapper = new ObjectMapper();
+
         //inject the "mix-in" annotations  from FilePlanComponentMix to
         // FilePlanComponent POJO class when converting to json
         mapper.addMixIn(FilePlanComponent.class, FilePlanComponentMix.class);
+
         //include only values that differ from default settings to be included
         mapper.setSerializationInclusion(Include.NON_DEFAULT);
         try
@@ -95,13 +97,16 @@ public class PojoUtility
             //return the json object
             return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(model);
 
-        } catch (JsonGenerationException e)
+        }
+        catch (JsonGenerationException e)
         {
             return e.toString();
-        } catch (JsonMappingException e)
+        }
+        catch (JsonMappingException e)
         {
             return e.toString();
-        } catch (IOException e)
+        }
+        catch (IOException e)
         {
             return e.toString();
         }

From 3099c7235e6837004fc7f9e74d9392a4e62d4776 Mon Sep 17 00:00:00 2001
From: Rodica Sutu 
Date: Mon, 30 Jan 2017 13:34:36 +0200
Subject: [PATCH 37/61] rename the FilePlanComponentMix file to
 FilePlanComponentMixIn

---
 .../{FilePlanComponentMix.java => FilePlanComponentMixIn.java}  | 2 +-
 .../java/org/alfresco/rest/rm/community/util/PojoUtility.java   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
 rename rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/{FilePlanComponentMix.java => FilePlanComponentMixIn.java} (97%)

diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/FilePlanComponentMix.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/FilePlanComponentMixIn.java
similarity index 97%
rename from rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/FilePlanComponentMix.java
rename to rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/FilePlanComponentMixIn.java
index 580fe13049..71b1e25186 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/FilePlanComponentMix.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/FilePlanComponentMixIn.java
@@ -38,7 +38,7 @@ import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent
  * @author Rodica Sutu
  * @since 2.6
  */
-public abstract class FilePlanComponentMix
+public abstract class FilePlanComponentMixIn
 {
     /**
      * Annotation used to indicate that a property should be serialized "unwrapped"
diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/PojoUtility.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/PojoUtility.java
index 5b98b437ae..e865118d79 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/PojoUtility.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/util/PojoUtility.java
@@ -87,7 +87,7 @@ public class PojoUtility
 
         //inject the "mix-in" annotations  from FilePlanComponentMix to
         // FilePlanComponent POJO class when converting to json
-        mapper.addMixIn(FilePlanComponent.class, FilePlanComponentMix.class);
+        mapper.addMixIn(FilePlanComponent.class, FilePlanComponentMixIn.class);
 
         //include only values that differ from default settings to be included
         mapper.setSerializationInclusion(Include.NON_DEFAULT);

From 40b61c5c6249b6b0f717061809abcb62fbdad2c0 Mon Sep 17 00:00:00 2001
From: Ana Bozianu 
Date: Mon, 30 Jan 2017 14:35:23 +0200
Subject: [PATCH 38/61] RM-4619 - doing the conversion at first event

---
 .../model/rma/type/FilePlanType.java          | 35 +++++--------------
 .../model/rma/type/RecordCategoryType.java    | 34 +++++++++---------
 .../model/rma/type/FilePlanTypeUnitTest.java  |  2 +-
 .../rma/type/RecordCategoryTypeUnitTest.java  |  2 +-
 4 files changed, 28 insertions(+), 45 deletions(-)

diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanType.java
index 38076241c7..1cef0b44e0 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanType.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanType.java
@@ -67,7 +67,7 @@ public class FilePlanType extends    BaseBehaviourBean
                                      NodeServicePolicies.BeforeDeleteNodePolicy
 {
     private final static List ACCEPTED_UNIQUE_CHILD_TYPES = Arrays.asList(TYPE_HOLD_CONTAINER, TYPE_TRANSFER_CONTAINER, TYPE_UNFILED_RECORD_CONTAINER);
-    private final static List ACCEPTED_NON_UNIQUE_CHILD_TYPES = Arrays.asList(TYPE_RECORD_CATEGORY, ContentModel.TYPE_FOLDER);
+    private final static List ACCEPTED_NON_UNIQUE_CHILD_TYPES = Arrays.asList(TYPE_RECORD_CATEGORY);
     private static final String BEHAVIOUR_NAME = "onDeleteFilePlan";
 
     /** file plan service */
@@ -214,35 +214,18 @@ public class FilePlanType extends    BaseBehaviourBean
     @Override
     public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean bNew)
     {
+        // We need to automatically cast the created folder to category if it is a plain folder
+        // This occurs if the RM folder has been created via IMap, WebDav, etc. Don't check subtypes.
+        // Some modules use hidden files to store information (see RM-3283)
+        if (nodeService.getType(childAssocRef.getChildRef()).equals(ContentModel.TYPE_FOLDER))
+        {
+            nodeService.setType(childAssocRef.getChildRef(), TYPE_RECORD_CATEGORY);
+        }
+
         // check the created child is of an accepted type
         validateNewChildAssociation(childAssocRef.getParentRef(), childAssocRef.getChildRef(), ACCEPTED_UNIQUE_CHILD_TYPES, ACCEPTED_NON_UNIQUE_CHILD_TYPES);
     }
 
-    /**
-     * On transaction commit
-     *
-     * @see org.alfresco.repo.node.NodeServicePolicies.OnCreateChildAssociationPolicy#onCreateChildAssociation(org.alfresco.service.cmr.repository.ChildAssociationRef, boolean)
-     */
-    @Behaviour
-    (
-       kind = BehaviourKind.ASSOCIATION,
-       policy = "alf:onCreateChildAssociation",
-       notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT
-    )
-    public void onCreateChildAssociationOnCommit(ChildAssociationRef childAssocRef, boolean bNew)
-    {
-        NodeRef child = childAssocRef.getChildRef();
-
-        // We need to automatically cast the created folder to category if it is a plain folder
-        // This occurs if the RM folder has been created via IMap, WebDav, etc
-        // Ignore hidden files. Some modules use hidden files to store information (see RM-3283)
-        if (nodeService.getType(child).equals(ContentModel.TYPE_FOLDER) &&
-                !nodeService.hasAspect(child, ContentModel.ASPECT_HIDDEN))
-        {
-            nodeService.setType(child, TYPE_RECORD_CATEGORY);
-        }
-    }
-
     /**
      * @see org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy#onCreateNode(org.alfresco.service.cmr.repository.ChildAssociationRef)
      */
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java
index 3dc8d4d04a..b5f35e7320 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java
@@ -65,7 +65,7 @@ public class RecordCategoryType extends    BaseBehaviourBean
                                            NodeServicePolicies.OnCreateNodePolicy
 {
     private final static List ACCEPTED_UNIQUE_CHILD_TYPES = new ArrayList();
-    private final static List ACCEPTED_NON_UNIQUE_CHILD_TYPES = Arrays.asList(TYPE_RECORD_CATEGORY, TYPE_RECORD_FOLDER, ContentModel.TYPE_FOLDER);
+    private final static List ACCEPTED_NON_UNIQUE_CHILD_TYPES = Arrays.asList(TYPE_RECORD_CATEGORY, TYPE_RECORD_FOLDER);
 
     /** vital record service */
     protected VitalRecordService vitalRecordService;
@@ -112,7 +112,23 @@ public class RecordCategoryType extends    BaseBehaviourBean
     )
     public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean bNew)
     {
+        QName childType = nodeService.getType(childAssocRef.getChildRef());
+
+        // We need to automatically cast the created folder to record folder if it is a plain folder
+        // This occurs if the RM folder has been created via IMap, WebDav, etc. Don't check subtypes.
+        // Some modules use hidden folders to store information (see RM-3283).
+        if (childType.equals(ContentModel.TYPE_FOLDER))
+        {
+            nodeService.setType(childAssocRef.getChildRef(), TYPE_RECORD_FOLDER);
+        }
+
         validateNewChildAssociation(childAssocRef.getParentRef(), childAssocRef.getChildRef(), ACCEPTED_UNIQUE_CHILD_TYPES, ACCEPTED_NON_UNIQUE_CHILD_TYPES);
+
+        if (bNew)
+        {
+            // setup the record folder
+            recordFolderService.setupRecordFolder(childAssocRef.getChildRef());
+        }
     }
 
     /**
@@ -129,7 +145,6 @@ public class RecordCategoryType extends    BaseBehaviourBean
     public void onCreateChildAssociationOnCommit(ChildAssociationRef childAssocRef, final boolean bNew)
     {
         final NodeRef child = childAssocRef.getChildRef();
-        final QName childType = nodeService.getType(child);
 
         behaviourFilter.disableBehaviour();
         try
@@ -139,21 +154,6 @@ public class RecordCategoryType extends    BaseBehaviourBean
                 @Override
                 public Void doWork()
                 {
-                    // We need to automatically cast the created folder to record folder if it is a plain folder
-                    // This occurs if the RM folder has been created via IMap, WebDav, etc
-                    // Ignore hidden files. Some modules use hidden files to store information (see RM-3283)
-                    if ( childType.equals(ContentModel.TYPE_FOLDER) &&
-                            !nodeService.hasAspect(child, ContentModel.ASPECT_HIDDEN))
-                    {
-                        nodeService.setType(child, TYPE_RECORD_FOLDER);
-                    }
-
-                    if (bNew)
-                    {
-                        // setup the record folder
-                        recordFolderService.setupRecordFolder(child);
-                    }
-
                     // setup vital record definition
                     vitalRecordService.setupVitalRecordDefinition(child);
 
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java
index af6a035acc..d25d6ecb19 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java
@@ -195,7 +195,7 @@ public class FilePlanTypeUnitTest extends BaseUnitTest
 
         try
         {
-            filePlanType.onCreateChildAssociationOnCommit(childAssocRef, true);
+            filePlanType.onCreateChildAssociation(childAssocRef, true);
         }
         catch(IntegrityException ex)
         {
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java
index df9f2e1826..2560615bca 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java
@@ -123,7 +123,7 @@ public class RecordCategoryTypeUnitTest extends BaseUnitTest
 
         try
         {
-            recordCategoryType.onCreateChildAssociationOnCommit(childAssocRef, true);
+            recordCategoryType.onCreateChildAssociation(childAssocRef, true);
         }
         catch(IntegrityException ex)
         {

From 257880cb62036f33c1b1c74274b68b7e8859de5a Mon Sep 17 00:00:00 2001
From: Ana Bozianu 
Date: Mon, 30 Jan 2017 16:53:58 +0200
Subject: [PATCH 39/61] Revert "RM-4619 - added the fileplan component check
 back but in different place"

This reverts commit e1b0e994a1a0acbce41ac7caa94b1ef11e3c2599.
---
 .../rm-public-rest-context.xml                |  3 +-
 .../rm/rest/api/impl/RMNodesImpl.java         |  6 ----
 .../rm/rest/api/impl/RecordsImpl.java         | 22 ++++---------
 .../impl/RMNodesImplRelativePathUnitTest.java |  5 ---
 .../rm/rest/api/impl/RMNodesImplUnitTest.java |  4 +--
 .../rm/rest/api/impl/RecordsImplUnitTest.java | 33 +++++++++----------
 6 files changed, 25 insertions(+), 48 deletions(-)

diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-public-rest-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-public-rest-context.xml
index 9c37e9482f..34da746fb3 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-public-rest-context.xml
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-public-rest-context.xml
@@ -93,8 +93,7 @@
     
         
         
-        
-        
+        
         
         
         
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java
index b581ff89b2..81e839c120 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java
@@ -61,7 +61,6 @@ import org.alfresco.service.cmr.dictionary.DictionaryService;
 import org.alfresco.service.cmr.model.FileFolderService;
 import org.alfresco.service.cmr.repository.NodeRef;
 import org.alfresco.service.cmr.repository.NodeService;
-import org.alfresco.service.cmr.repository.StoreRef;
 import org.alfresco.service.namespace.QName;
 import org.alfresco.util.Pair;
 import org.alfresco.util.ParameterCheck;
@@ -278,11 +277,6 @@ public class RMNodesImpl extends NodesImpl implements RMNodes
             }
         }
 
-        if(!filePlanService.isFilePlanComponent(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId)))
-        {
-            throw new InvalidParameterException("The provided node is not a fileplan component");
-        }
-
         return super.validateNode(nodeId);
     }
 
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RecordsImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RecordsImpl.java
index 5bc3500ab9..2938feee94 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RecordsImpl.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RecordsImpl.java
@@ -36,7 +36,6 @@ import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
 import org.alfresco.module.org_alfresco_module_rm.util.AuthenticationUtil;
 import org.alfresco.repo.node.integrity.IntegrityException;
 import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
-import org.alfresco.rest.api.Nodes;
 import org.alfresco.rest.api.model.Node;
 import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException;
 import org.alfresco.rest.framework.resource.parameters.Parameters;
@@ -68,8 +67,7 @@ public class RecordsImpl implements Records, InitializingBean
     protected FileFolderService fileFolderService;
     protected DictionaryService dictionaryService;
     protected AuthenticationUtil authenticationUtil;
-    protected RMNodes rmNodes;
-    protected Nodes nodes;
+    protected RMNodes nodes;
 
     public void setRecordService(RecordService recordService)
     {
@@ -101,12 +99,7 @@ public class RecordsImpl implements Records, InitializingBean
         this.authenticationUtil = authenticationUtil;
     }
 
-    public void setRmNodes(RMNodes rmNodes)
-    {
-        this.rmNodes = rmNodes;
-    }
-
-    public void setNodes(Nodes nodes)
+    public void setNodes(RMNodes nodes)
     {
         this.nodes = nodes;
     }
@@ -115,7 +108,6 @@ public class RecordsImpl implements Records, InitializingBean
     public Node declareFileAsRecord(String fileId, Parameters parameters)
     {
         // Get file to be declared
-        // Use nodes instead of rmNodes because the file is not a record yet
         NodeRef fileNodeRef = nodes.validateNode(fileId) ;
 
         // Get fileplan
@@ -135,7 +127,7 @@ public class RecordsImpl implements Records, InitializingBean
         recordService.createRecord(filePlan, fileNodeRef, !hideRecord);
 
         // Get information about the new record
-        return rmNodes.getFolderOrDocument(fileId, parameters);
+        return nodes.getFolderOrDocument(fileId, parameters);
     }
 
     @Override
@@ -147,7 +139,7 @@ public class RecordsImpl implements Records, InitializingBean
         }
 
         // Get record
-        NodeRef record = rmNodes.validateNode(recordId);
+        NodeRef record = nodes.validateNode(recordId);
 
         // Get record folder to file/link the record to
         String parentContainerId = target.getTargetParentId();
@@ -163,7 +155,7 @@ public class RecordsImpl implements Records, InitializingBean
                 }
             });
         }
-        NodeRef parentRecordFolder = rmNodes.getOrCreatePath(parentContainerId, target.getRelativePath(), ContentModel.TYPE_CONTENT);
+        NodeRef parentRecordFolder = nodes.getOrCreatePath(parentContainerId, target.getRelativePath(), ContentModel.TYPE_CONTENT);
 
         // Check if the target is a record folder
         if(!dictionaryService.isSubClass(nodeService.getType(parentRecordFolder), RecordsManagementModel.TYPE_RECORD_FOLDER))
@@ -194,7 +186,7 @@ public class RecordsImpl implements Records, InitializingBean
         }
 
         // Get the record info
-        return rmNodes.getFolderOrDocument(recordId, parameters);
+        return nodes.getFolderOrDocument(recordId, parameters);
     }
 
     @Override
@@ -202,7 +194,7 @@ public class RecordsImpl implements Records, InitializingBean
     {
         ParameterCheck.mandatory("recordService", recordService);
         ParameterCheck.mandatory("filePlanService", filePlanService);
-        ParameterCheck.mandatory("nodes", rmNodes);
+        ParameterCheck.mandatory("nodes", nodes);
         ParameterCheck.mandatory("nodeService",  nodeService);
         ParameterCheck.mandatory("fileFolderService", fileFolderService);
         ParameterCheck.mandatory("dictionaryService", dictionaryService);
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplRelativePathUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplRelativePathUnitTest.java
index 796242aa56..0a0db60ae7 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplRelativePathUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplRelativePathUnitTest.java
@@ -85,7 +85,6 @@ public class RMNodesImplRelativePathUnitTest  extends BaseUnitTest
          * Given any parent node
          */
         NodeRef parentNode = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedFilePlanService.isFilePlanComponent(parentNode)).thenReturn(true);
 
         /*
          *  When trying to create a node in the parent node with no relative path
@@ -113,7 +112,6 @@ public class RMNodesImplRelativePathUnitTest  extends BaseUnitTest
          * Given a parent node and an existing path c1/f1 under it
          */
         NodeRef parentNode = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedFilePlanService.isFilePlanComponent(parentNode)).thenReturn(true);
 
         String category = "c1";
         NodeRef categoryNode = AlfMock.generateNodeRef(mockedNodeService);
@@ -156,7 +154,6 @@ public class RMNodesImplRelativePathUnitTest  extends BaseUnitTest
         String category1 = "c1";
         NodeRef categoryNode1 = AlfMock.generateNodeRef(mockedNodeService);
         when(mockedNodeService.getChildByName(fileplanNodeRef, ContentModel.ASSOC_CONTAINS, category1)).thenReturn(categoryNode1);
-        when(mockedFilePlanService.isFilePlanComponent(fileplanNodeRef)).thenReturn(true);
 
         // create c2
         String category2 = "c2";
@@ -203,7 +200,6 @@ public class RMNodesImplRelativePathUnitTest  extends BaseUnitTest
          */
         NodeRef unfiledRecordContainer = AlfMock.generateNodeRef(mockedNodeService);
         when(mockedNodeService.getType(unfiledRecordContainer)).thenReturn(TYPE_UNFILED_RECORD_CONTAINER);
-        when(mockedFilePlanService.isFilePlanComponent(unfiledRecordContainer)).thenReturn(true);
 
         /*
          *  When trying to create a content node in the relative path f1/f2/f3
@@ -259,7 +255,6 @@ public class RMNodesImplRelativePathUnitTest  extends BaseUnitTest
          */
         NodeRef fileplanNodeRef = AlfMock.generateNodeRef(mockedNodeService);
         when(mockedNodeService.getType(fileplanNodeRef)).thenReturn(TYPE_FILE_PLAN);
-        when(mockedFilePlanService.isFilePlanComponent(fileplanNodeRef)).thenReturn(true);
 
         /*
          *  When trying to create a folder node in the relative path c1/c2/c3
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java
index ddd5db3af7..e174775483 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java
@@ -318,9 +318,10 @@ public class RMNodesImplUnitTest extends BaseUnitTest
         setupCompanyHomeAndPrimaryParent(nodeRef);
 
         when(mockedFilePlanService.isFilePlanComponent(nodeRef)).thenReturn(false);
+        List includeParamList = new ArrayList();
         try
         {
-            rmNodesImpl.validateNode(nodeRef.getId());
+            rmNodesImpl.getFolderOrDocument(nodeRef, null, null, includeParamList, null);
             fail("Expected exception since the requested node is not a fileplan component.");
         }
         catch(InvalidParameterException ex)
@@ -627,7 +628,6 @@ public class RMNodesImplUnitTest extends BaseUnitTest
     public void testValidateNode() throws Exception
     {
         NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedFilePlanService.isFilePlanComponent(nodeRef)).thenReturn(true);
         NodeRef validateOrLookupNode = rmNodesImpl.validateNode(nodeRef.getId());
         assertEquals(nodeRef, validateOrLookupNode);
     }
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RecordsImplUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RecordsImplUnitTest.java
index e3c57b407a..c10b272441 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RecordsImplUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RecordsImplUnitTest.java
@@ -40,7 +40,6 @@ import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
 import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock;
 import org.alfresco.module.org_alfresco_module_rm.test.util.MockAuthenticationUtilHelper;
 import org.alfresco.module.org_alfresco_module_rm.util.AuthenticationUtil;
-import org.alfresco.rest.api.Nodes;
 import org.alfresco.rest.framework.resource.parameters.Parameters;
 import org.alfresco.rm.rest.api.RMNodes;
 import org.alfresco.rm.rest.api.Records;
@@ -78,9 +77,7 @@ public class RecordsImplUnitTest
     @Mock
     protected AuthenticationUtil mockedAuthenticationUtil;
     @Mock
-    protected RMNodes mockedRMNodes;
-    @Mock
-    protected Nodes mockedNodes;
+    protected RMNodes mockedNodes;
 
     @InjectMocks
     private RecordsImpl recordsImpl;
@@ -122,7 +119,7 @@ public class RecordsImplUnitTest
          * Then a record is created under the existing fileplan from the provided file
          */
         verify(mockedRecordService).createRecord(fileplan, mockedFile, false);
-        verify(mockedRMNodes).getFolderOrDocument(mockedFile.getId(), params);
+        verify(mockedNodes).getFolderOrDocument(mockedFile.getId(), params);
     }
 
     /**
@@ -137,7 +134,7 @@ public class RecordsImplUnitTest
          * Given a record
          */
         NodeRef mockedRecord = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedRMNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
+        when(mockedNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
 
         /*
          * When trying to filing a record providing a blank destination path
@@ -160,7 +157,7 @@ public class RecordsImplUnitTest
          */
         // mock the record to file
         NodeRef mockedRecord = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedRMNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
+        when(mockedNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
 
         // mock the current primary parent
         NodeRef mockedPrimaryParent = AlfMock.generateNodeRef(mockedNodeService);
@@ -172,7 +169,7 @@ public class RecordsImplUnitTest
 
         // mock the target record folder to file the record into
         NodeRef mockedTargetRecordFolder = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedRMNodes.getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
+        when(mockedNodes.getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
         when(mockedNodeService.getType(mockedTargetRecordFolder)).thenReturn(TYPE_RECORD_FOLDER);
         when(mockedDictionaryService.isSubClass(TYPE_RECORD_FOLDER, TYPE_RECORD_FOLDER)).thenReturn(true);
 
@@ -188,7 +185,7 @@ public class RecordsImplUnitTest
         /*
          * Then the record is moved under the destination folder
          */
-        verify(mockedRMNodes).getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT);
+        verify(mockedNodes).getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT);
         verify(mockedFileFolderService).moveFrom(mockedRecord, mockedPrimaryParent, mockedTargetRecordFolder, null);
     }
 
@@ -206,7 +203,7 @@ public class RecordsImplUnitTest
          */
         // mock the record to file
         NodeRef mockedRecord = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedRMNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
+        when(mockedNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
 
         // mock the current primary parent
         NodeRef mockedPrimaryParent = AlfMock.generateNodeRef(mockedNodeService);
@@ -223,7 +220,7 @@ public class RecordsImplUnitTest
         // mock the target record folder to file the record into
         String relativePath = "category/recordFolder";
         NodeRef mockedTargetRecordFolder = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedRMNodes.getOrCreatePath(fileplan.getId(), relativePath, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
+        when(mockedNodes.getOrCreatePath(fileplan.getId(), relativePath, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
         when(mockedNodeService.getType(mockedTargetRecordFolder)).thenReturn(TYPE_RECORD_FOLDER);
         when(mockedDictionaryService.isSubClass(TYPE_RECORD_FOLDER, TYPE_RECORD_FOLDER)).thenReturn(true);
 
@@ -239,7 +236,7 @@ public class RecordsImplUnitTest
         /*
          * Then the record is moved under the destination folder relative to the fileplan
          */
-        verify(mockedRMNodes).getOrCreatePath(fileplan.getId(), relativePath, TYPE_CONTENT);
+        verify(mockedNodes).getOrCreatePath(fileplan.getId(), relativePath, TYPE_CONTENT);
         verify(mockedFileFolderService).moveFrom(mockedRecord, mockedPrimaryParent, mockedTargetRecordFolder, null);
     }
 
@@ -257,7 +254,7 @@ public class RecordsImplUnitTest
          */
         // mock the record to file
         NodeRef mockedRecord = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedRMNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
+        when(mockedNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
 
         // mock the current primary parent
         NodeRef mockedPrimaryParent = AlfMock.generateNodeRef(mockedNodeService);
@@ -273,7 +270,7 @@ public class RecordsImplUnitTest
         // mock the target record folder to file the record into
         String relativePath = "category/recordFolder";
         NodeRef mockedTargetRecordFolder = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedRMNodes.getOrCreatePath(mockedTargetCategory.getId(), relativePath, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
+        when(mockedNodes.getOrCreatePath(mockedTargetCategory.getId(), relativePath, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
         when(mockedNodeService.getType(mockedTargetRecordFolder)).thenReturn(TYPE_RECORD_FOLDER);
         when(mockedDictionaryService.isSubClass(TYPE_RECORD_FOLDER, TYPE_RECORD_FOLDER)).thenReturn(true);
 
@@ -290,7 +287,7 @@ public class RecordsImplUnitTest
         /*
          * Then the record is moved under the correct destination folder
          */
-        verify(mockedRMNodes).getOrCreatePath(mockedTargetCategory.getId(), relativePath, TYPE_CONTENT);
+        verify(mockedNodes).getOrCreatePath(mockedTargetCategory.getId(), relativePath, TYPE_CONTENT);
         verify(mockedFileFolderService).moveFrom(mockedRecord, mockedPrimaryParent, mockedTargetRecordFolder, null);
     }
 
@@ -307,7 +304,7 @@ public class RecordsImplUnitTest
          */
         // mock the record to link
         NodeRef mockedRecord = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedRMNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
+        when(mockedNodes.validateNode(mockedRecord.getId())).thenReturn(mockedRecord);
 
         // mock the current primary parent
         NodeRef mockedPrimaryParent = AlfMock.generateNodeRef(mockedNodeService);
@@ -319,7 +316,7 @@ public class RecordsImplUnitTest
 
         // mock the target record folder to file the record into
         NodeRef mockedTargetRecordFolder = AlfMock.generateNodeRef(mockedNodeService);
-        when(mockedRMNodes.getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
+        when(mockedNodes.getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT)).thenReturn(mockedTargetRecordFolder);
         when(mockedNodeService.getType(mockedTargetRecordFolder)).thenReturn(TYPE_RECORD_FOLDER);
 
         /*
@@ -334,7 +331,7 @@ public class RecordsImplUnitTest
         /*
          * Then the record is linked to the destination folder
          */
-        verify(mockedRMNodes).getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT);
+        verify(mockedNodes).getOrCreatePath(mockedTargetRecordFolder.getId(), null, TYPE_CONTENT);
         verify(mockedRecordService).link(mockedRecord, mockedTargetRecordFolder);
     }
 }

From 5fc0cc504528a10a52a53fdf81bc3ff6446574d0 Mon Sep 17 00:00:00 2001
From: Ana Bozianu 
Date: Mon, 30 Jan 2017 17:03:41 +0200
Subject: [PATCH 40/61] RM-4619 - moved the fileplan component check back

---
 .../java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java  | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java
index 81e839c120..e9b7f71de9 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java
@@ -138,7 +138,14 @@ public class RMNodesImpl extends NodesImpl implements RMNodes
 
         if (type == null)
         {
-            node = new FileplanComponentNode(originalNode);
+            if (filePlanService.isFilePlanComponent(nodeRef))
+            {
+                node = new FileplanComponentNode(originalNode);
+            }
+            else
+            {
+                throw new InvalidParameterException("The provided node is not a fileplan component");
+            }
         }
         else
         {

From 5b041f31f24ca7f13f2728a91a9ca37f34066262 Mon Sep 17 00:00:00 2001
From: Ana Bozianu 
Date: Mon, 30 Jan 2017 22:51:31 +0200
Subject: [PATCH 41/61] RM-4619 - removed folder from the invalit type list

---
 .../test/java/org/alfresco/rest/rm/community/base/TestData.java | 2 --
 1 file changed, 2 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/TestData.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/TestData.java
index fae162b15f..7fa5baa8e9 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/TestData.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/TestData.java
@@ -32,7 +32,6 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.UNFILED_RECORDS_CONTAINER_ALIAS;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.CONTENT_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.FILE_PLAN_TYPE;
-import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.FOLDER_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.HOLD_CONTAINER_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.HOLD_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.TRANSFER_CONTAINER_TYPE;
@@ -146,7 +145,6 @@ public interface TestData
             { UNFILED_RECORD_FOLDER_TYPE },
             { HOLD_TYPE },
             { TRANSFER_TYPE },
-            { FOLDER_TYPE },
             { CONTENT_TYPE }
         };
     }

From 418b46c7c6e5714f770670cd98fb2471cbc46867 Mon Sep 17 00:00:00 2001
From: Roy Wetherall 
Date: Wed, 1 Feb 2017 15:48:33 +1100
Subject: [PATCH 42/61] Purge cache when group is deleted

---
 .../alfresco/module/org_alfresco_module_rm/module.properties    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/module.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/module.properties
index 011b9d2820..dd51d0e47f 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/module.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/module.properties
@@ -8,4 +8,4 @@ module.title=Records Management
 module.description=Alfresco Record Management Extension
 module.version=${rm.module.version}
 
-module.repo.version.min=${rm.module.repo.version.min}
\ No newline at end of file
+module.repo.version.min=5.1
\ No newline at end of file

From c1daf259124d87b60467793e3325715b75e2ae3f Mon Sep 17 00:00:00 2001
From: Roy Wetherall 
Date: Mon, 6 Feb 2017 15:03:35 +1100
Subject: [PATCH 43/61] Revert module properties changes

---
 .../alfresco/module/org_alfresco_module_rm/module.properties    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/module.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/module.properties
index dd51d0e47f..011b9d2820 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/module.properties
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/module.properties
@@ -8,4 +8,4 @@ module.title=Records Management
 module.description=Alfresco Record Management Extension
 module.version=${rm.module.version}
 
-module.repo.version.min=5.1
\ No newline at end of file
+module.repo.version.min=${rm.module.repo.version.min}
\ No newline at end of file

From 161ec4eaeec5776bd4d80a0e5be92dabdc2b7104 Mon Sep 17 00:00:00 2001
From: Ana Bozianu 
Date: Tue, 7 Feb 2017 16:24:10 +0200
Subject: [PATCH 44/61] RM-4619 - replaced unit tests with integration tests

---
 .../test/integration/issue/RM4619Test.java    | 84 +++++++++++++++++++
 .../model/rma/type/FilePlanTypeUnitTest.java  | 23 -----
 .../rma/type/RecordCategoryTypeUnitTest.java  | 23 -----
 3 files changed, 84 insertions(+), 46 deletions(-)
 create mode 100644 rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM4619Test.java

diff --git a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM4619Test.java b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM4619Test.java
new file mode 100644
index 0000000000..6b83327468
--- /dev/null
+++ b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM4619Test.java
@@ -0,0 +1,84 @@
+/*
+ * #%L
+ * Alfresco Records Management Module
+ * %%
+ * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * -
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail.  Otherwise, the software is
+ * provided under the following open source license terms:
+ * -
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * -
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ * -
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
+package org.alfresco.module.org_alfresco_module_rm.test.integration.issue;
+
+import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
+import org.alfresco.service.cmr.model.FileInfo;
+import org.springframework.extensions.webscripts.GUID;
+
+/**
+ * Unit test for RM-4619
+ * 
+ * When creating regular folders through clients that are not RM aware 
+ * the folders must be converted to the appropriate RM container
+ * 
+ * @author Ana Bozianu
+ * @since 2.6
+ */
+public class RM4619Test extends BaseRMTestCase
+{
+
+    /**
+     * Given the RM site is created
+     * When we create a regular folder in the fileplan
+     * Then the folder is immediately converted to a record category
+     */
+    public void testConvertFolderToCategory() throws Exception
+    {
+        doTestInTransaction(new Test()
+        {
+            @Override
+            public Void run() throws Exception
+            {
+                FileInfo info = fileFolderService.create(filePlan, GUID.generate(), TYPE_FOLDER);
+                assertEquals(info.getType(), TYPE_RECORD_CATEGORY);
+                return null;
+            }
+            
+        }, ADMIN_USER);
+    }
+
+    /**
+     * Given an existing category
+     * When we create a regular folder in the category
+     * Then the folder is immediately converted to a record folder
+     */
+    public void testConvertFolderToRecordFolder() throws Exception
+    {
+        doTestInTransaction(new Test()
+        {
+            @Override
+            public Void run() throws Exception
+            {
+                FileInfo info = fileFolderService.create(rmContainer, GUID.generate(), TYPE_FOLDER);
+                assertEquals(info.getType(), TYPE_RECORD_FOLDER);
+                return null;
+            }
+            
+        }, ADMIN_USER);
+    }
+}
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java
index d25d6ecb19..d5fa40ae74 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java
@@ -182,29 +182,6 @@ public class FilePlanTypeUnitTest extends BaseUnitTest
         filePlanType.onCreateChildAssociation(childAssoc, true);
     }
 
-    /**
-     * Given that we try to add "cm:folder" type to a record category,
-     * Then operation is successful and the folder is automatically converted to a record folder
-     */
-    @Test
-    public void testConversionToRecordFolder() throws Exception
-    {
-        NodeRef fileplan = AlfMock.generateNodeRef(mockedNodeService, TYPE_FILE_PLAN);
-        NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_FOLDER, true);
-        ChildAssociationRef childAssocRef = generateChildAssociationRef(fileplan, nodeRef);
-
-        try
-        {
-            filePlanType.onCreateChildAssociation(childAssocRef, true);
-        }
-        catch(IntegrityException ex)
-        {
-            // this will throw an exception because unit tests can't detect type change
-        }
-
-        verify(mockedNodeService).setType(nodeRef, TYPE_RECORD_CATEGORY);
-    }
-
     /**
      * Helper method that creates a child of the fileplan container with the provided type
      * @param childType the node type of the child to be created
diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java
index 2560615bca..db00723660 100644
--- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java
+++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java
@@ -109,27 +109,4 @@ public class RecordCategoryTypeUnitTest extends BaseUnitTest
         ChildAssociationRef childAssocRef = generateChildAssociationRef(recordCategoryNodeRef, nodeRef);
         recordCategoryType.onCreateChildAssociation(childAssocRef, true);
     }
-
-    /**
-     * Given that we try to add "cm:folder" type to a record category,
-     * Then operation is successful and the folder is automatically converted to a record folder
-     */
-    @Test
-    public void testConversionToRecordFolder() throws Exception
-    {
-        NodeRef recordCategoryNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_CATEGORY);
-        NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_FOLDER, true);
-        ChildAssociationRef childAssocRef = generateChildAssociationRef(recordCategoryNodeRef, nodeRef);
-
-        try
-        {
-            recordCategoryType.onCreateChildAssociation(childAssocRef, true);
-        }
-        catch(IntegrityException ex)
-        {
-            // this will throw an exception because unit tests can't detect type change
-        }
-
-        verify(mockedNodeService).setType(nodeRef, TYPE_RECORD_FOLDER);
-    }
 }

From 6bccc5f82757905a2103f9ca17602eaa7a7c3830 Mon Sep 17 00:00:00 2001
From: Rodica Sutu 
Date: Thu, 9 Feb 2017 12:44:04 +0200
Subject: [PATCH 45/61] additional checks to cover the issue RM-4572

---
 .../FilePlanComponentProperties.java          |  4 ++--
 .../rest/rm/community/base/TestData.java      | 21 +++++++++++++++--
 .../ElectronicRecordTests.java                |  2 ++
 .../NonElectronicRecordTests.java             |  6 ++++-
 .../fileplancomponents/ReadRecordTests.java   | 23 +++++++++++--------
 .../RecordCategoryTest.java                   |  3 ++-
 .../fileplancomponents/RecordFolderTests.java | 16 ++++++++++---
 7 files changed, 57 insertions(+), 18 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/model/fileplancomponents/FilePlanComponentProperties.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/model/fileplancomponents/FilePlanComponentProperties.java
index 4313910e50..950c4f18ee 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/model/fileplancomponents/FilePlanComponentProperties.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/model/fileplancomponents/FilePlanComponentProperties.java
@@ -107,7 +107,7 @@ public class FilePlanComponentProperties
 
     @JsonProperty(value = PROPERTIES_PHYSICAL_SIZE, required = false)
     private Integer physicalSize;
-    
+
     @JsonProperty(value = PROPERTIES_RECORD_ID, required = false)
-    private String recordId;
+    private String rmIdentifier;
 }
diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/TestData.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/TestData.java
index 7fa5baa8e9..9d475ad71d 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/TestData.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/TestData.java
@@ -32,8 +32,10 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.UNFILED_RECORDS_CONTAINER_ALIAS;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.CONTENT_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.FILE_PLAN_TYPE;
+import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.FOLDER_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.HOLD_CONTAINER_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.HOLD_TYPE;
+import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.RECORD_FOLDER_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.TRANSFER_CONTAINER_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.TRANSFER_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.UNFILED_CONTAINER_TYPE;
@@ -122,12 +124,12 @@ public interface TestData
      * The default electronic record  name used when creating electronic records
      */
     public static String ELECTRONIC_RECORD_NAME = "Record electronic" + getRandomAlphanumeric();
-    
+
     /**
      * The default Non electronic record name used when creating non-electronic records
      */
     public static String NONELECTRONIC_RECORD_NAME = "Record nonelectronic" + getRandomAlphanumeric();
-    
+
     /**
      * Data Provider with:
      * with the object types not allowed as children for a record category
@@ -148,4 +150,19 @@ public interface TestData
             { CONTENT_TYPE }
         };
     }
+
+    /**
+     * Data Provider with:
+     * with the object types  for creating a Record Folder
+     *
+     * @return file plan component alias
+     */
+    @DataProvider
+    public static Object[][] folderTypes()
+    {
+        return new Object[][] {
+            {RECORD_FOLDER_TYPE},
+            {FOLDER_TYPE}
+        };
+    }
 }
diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
index 3322e4b346..9cae3f6215 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java
@@ -221,6 +221,7 @@ public class ElectronicRecordTests extends BaseRMRestTest
         // created record will have record identifier inserted in its name but will be prefixed with
         // the name it was created as
         assertTrue(electronicRecord.getName().startsWith(record.getName()));
+        assertTrue(electronicRecord.getName().contains(electronicRecord.getProperties().getRmIdentifier()));
     }
 
     /**
@@ -252,6 +253,7 @@ public class ElectronicRecordTests extends BaseRMRestTest
         // record will have record identifier inserted in its name but will for sure start with file name
         // and end with its extension
         assertTrue(electronicRecord.getName().startsWith(IMAGE_FILE.substring(0, IMAGE_FILE.indexOf("."))));
+        assertTrue(electronicRecord.getName().contains(electronicRecord.getProperties().getRmIdentifier()));
     }
 
     @Test
diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/NonElectronicRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/NonElectronicRecordTests.java
index 0e09096d4d..681ef8d1f2 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/NonElectronicRecordTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/NonElectronicRecordTests.java
@@ -44,6 +44,7 @@ import static org.springframework.http.HttpStatus.FORBIDDEN;
 import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
 
 import java.util.Random;
 
@@ -142,6 +143,7 @@ public class NonElectronicRecordTests extends BaseRMRestTest
         String file = "File " + getRandomAlphanumeric();
         String shelf = "Shelf " + getRandomAlphanumeric();
         String location = "Location " + getRandomAlphanumeric();
+        String name = "Record " + getRandomAlphanumeric();
 
         Random random = new Random();
         Integer copies = random.nextInt(Integer.MAX_VALUE);
@@ -149,7 +151,7 @@ public class NonElectronicRecordTests extends BaseRMRestTest
 
         // set values of all available properties for the non electronic records
         FilePlanComponent filePlanComponent = FilePlanComponent.builder()
-                                                           .name("Record " + getRandomAlphanumeric())
+                                                           .name(name)
                                                            .nodeType(NON_ELECTRONIC_RECORD_TYPE)
                                                            .properties(FilePlanComponentProperties.builder()
                                                                                                   .title(title)
@@ -183,6 +185,8 @@ public class NonElectronicRecordTests extends BaseRMRestTest
         assertEquals(location, nonElectronicRecord.getProperties().getLocation());
         assertEquals(copies, nonElectronicRecord.getProperties().getNumberOfCopies());
         assertEquals(size, nonElectronicRecord.getProperties().getPhysicalSize());
+        assertTrue(nonElectronicRecord.getName().contains(nonElectronicRecord.getProperties().getRmIdentifier()));
+        assertTrue(nonElectronicRecord.getName().contains(name));
     }
 
     /**
diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ReadRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ReadRecordTests.java
index 8cf2ee3668..d46ace9914 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ReadRecordTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ReadRecordTests.java
@@ -85,7 +85,7 @@ public class ReadRecordTests extends BaseRMRestTest
                                                           .nodeType(CONTENT_TYPE.toString())
                                                           .content(FilePlanComponentContent.builder().mimeType("text/plain").build())
                                                           .build();
-    
+
     private  FilePlanComponent nonelectronicRecord = FilePlanComponent.builder()
                                                              .properties(FilePlanComponentProperties.builder()
                                                                                                     .description(NONELECTRONIC_RECORD_NAME)
@@ -178,6 +178,8 @@ public class ReadRecordTests extends BaseRMRestTest
         assertNotNull(recordWithContent.getContent().getEncoding());
         assertNotNull(recordWithContent.getContent().getMimeType());
         assertNotNull(recordWithContent.getAspectNames());
+        assertFalse(recordWithContent.getName().equals(ELECTRONIC_RECORD_NAME));
+        assertTrue(recordWithContent.getName().contains(recordWithContent.getProperties().getRmIdentifier()));
         assertStatusCode(OK);
 
         //create non-electronic record
@@ -196,6 +198,8 @@ public class ReadRecordTests extends BaseRMRestTest
         assertNotNull(nonElectronicRecord.getContent().getMimeType());
         assertNotNull(nonElectronicRecord.getAspectNames());
         assertEquals(nonElectronicRecord.getProperties().getDescription(), NONELECTRONIC_RECORD_NAME);
+        assertFalse(nonElectronicRecord.getName().equals(NONELECTRONIC_RECORD_NAME));
+        assertTrue(nonElectronicRecord.getName().contains(nonElectronicRecord.getProperties().getRmIdentifier()));
         assertStatusCode(OK);
     }
 
@@ -209,11 +213,11 @@ public class ReadRecordTests extends BaseRMRestTest
     {
         FilePlanComponentAPI filePlanComponentAPI = getRestAPIFactory().getFilePlanComponentsAPI();
         RecordsAPI recordsAPI = getRestAPIFactory().getRecordsAPI();
-        
+
         String RECORD_ELECTRONIC = "Record " + getRandomAlphanumeric();
         String RECORD_ELECTRONIC_BINARY = "Binary Record" + getRandomAlphanumeric();
         String RELATIVE_PATH = "/" + CATEGORY_NAME + getRandomAlphanumeric() + "/folder";
-        
+
         // create the containers from the relativePath
         FilePlanComponent recordFolder = FilePlanComponent.builder()
                                                     .name(FOLDER_NAME)
@@ -221,7 +225,7 @@ public class ReadRecordTests extends BaseRMRestTest
                                                     .relativePath(RELATIVE_PATH)
                                                     .build();
         String folderId = filePlanComponentAPI.createFilePlanComponent(recordFolder, FILE_PLAN_ALIAS).getId();
-               
+
         // text file as an electronic record
         FilePlanComponent recordText = FilePlanComponent.builder()
                                                     .name(RECORD_ELECTRONIC)
@@ -237,19 +241,19 @@ public class ReadRecordTests extends BaseRMRestTest
             .name(RECORD_ELECTRONIC_BINARY)
             .nodeType(CONTENT_TYPE)
             .build();
-       
+
         String binaryRecordId = filePlanComponentAPI.createElectronicRecord(recordBinary, IMAGE_FILE, folderId).getId();
         // binary content, therefore compare respective SHA1 checksums in order to verify this is identical content
         try
         (
             InputStream recordContentStream = recordsAPI.getRecordContent(binaryRecordId).asInputStream();
             FileInputStream localFileStream = new FileInputStream(new File(Resources.getResource(IMAGE_FILE).getFile()));
-        ) 
+        )
         {
             assertEquals(DigestUtils.sha1(recordContentStream), DigestUtils.sha1(localFileStream));
         }
         assertStatusCode(OK);
-        
+
         // electronic record with no content
         FilePlanComponent recordNoContent = FilePlanComponent.builder()
                                                     .name(RECORD_ELECTRONIC)
@@ -390,8 +394,9 @@ public class ReadRecordTests extends BaseRMRestTest
                     assertFalse(filePlanComponent.getIsRecordFolder());
                     assertFalse(filePlanComponent.getIsCategory());
 
-                    //assertEquals(createdComponent.getName(), filePlanComponent.getName());
-                    assertTrue(filePlanComponent.getName().startsWith(createdComponent.getName()));
+                    //check the record name
+                    assertTrue(filePlanComponent.getName().equals(createdComponent.getName()));
+                    assertTrue(createdComponent.getName().contains(createdComponent.getProperties().getRmIdentifier()));
                     assertEquals(createdComponent.getNodeType(), filePlanComponent.getNodeType());
 
                 }
diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/RecordCategoryTest.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/RecordCategoryTest.java
index 653e83ef25..24a84d0818 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/RecordCategoryTest.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/RecordCategoryTest.java
@@ -316,6 +316,7 @@ public class RecordCategoryTest extends BaseRMRestTest
 
                 // Verify properties
                 // FIXME: Verify properties
+                assertNotNull(createdComponent.getProperties().getRmIdentifier());
             }
             catch (NoSuchElementException e)
             {
@@ -336,7 +337,7 @@ public class RecordCategoryTest extends BaseRMRestTest
         dataProvider = "childrenNotAllowedForCategory"
 
     )
-    @Bug (id="RM-4367")
+    @Bug (id="RM-4367, RM-4572")
     public void createTypesNotAllowedInCategory(String nodeType) throws Exception
     {
         String COMPONENT_NAME = "Component"+getRandomAlphanumeric();
diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/RecordFolderTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/RecordFolderTests.java
index cae584fdb8..86bf3b2e1a 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/RecordFolderTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/RecordFolderTests.java
@@ -74,12 +74,21 @@ public class RecordFolderTests extends BaseRMRestTest
      * Given that a record category exists
      * When I use the API to create a new record folder
      * Then it is created within the record category
+     *
+     * Given that a record category exists
+     * When I use the API to create a folder (cm:folder type)
+     * Then the folder is converted to rma:recordFolder within the record category
+     * (see RM-4572 comments)
+     *
      */
     @Test
     (
-        description = "Create a folder into a record category"
+        description = "Create a folder into a record category.",
+        dataProviderClass = TestData.class,
+        dataProvider = "folderTypes"
     )
-    public void createFolderTest() throws Exception
+    @Bug (id = "RM-4572")
+    public void createFolderTest(String folderType) throws Exception
     {
         String CATEGORY = CATEGORY_NAME + getRandomAlphanumeric();
 
@@ -88,7 +97,7 @@ public class RecordFolderTests extends BaseRMRestTest
 
         FilePlanComponent recordFolder = FilePlanComponent.builder()
                 .name(FOLDER_NAME)
-                .nodeType(RECORD_FOLDER_TYPE)
+                .nodeType(folderType)
                 .properties(FilePlanComponentProperties.builder()
                         .title(FOLDER_TITLE)
                         .build())
@@ -113,6 +122,7 @@ public class RecordFolderTests extends BaseRMRestTest
         // Verify the returned file plan component properties
         FilePlanComponentProperties folderProperties = folder.getProperties();
         assertEquals(folderProperties.getTitle(), FOLDER_TITLE);
+        assertNotNull(folderProperties.getRmIdentifier());
     }
 
     /**

From ea0239b9a8630753cb98f74eb92cda2c8e78c80b Mon Sep 17 00:00:00 2001
From: Rodica Sutu 
Date: Thu, 9 Feb 2017 17:30:42 +0200
Subject: [PATCH 46/61] updates: test to cover the scenario when a cm:folder is
 converted to a recordCategory

---
 .../rest/rm/community/base/TestData.java      | 22 +++++++++++++++++--
 .../RecordCategoryTest.java                   | 17 ++++++++++----
 2 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/TestData.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/TestData.java
index 9d475ad71d..b2f08c7d2f 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/TestData.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/TestData.java
@@ -35,6 +35,7 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.FOLDER_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.HOLD_CONTAINER_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.HOLD_TYPE;
+import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.RECORD_CATEGORY_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.RECORD_FOLDER_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.TRANSFER_CONTAINER_TYPE;
 import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.TRANSFER_TYPE;
@@ -151,6 +152,8 @@ public interface TestData
         };
     }
 
+
+
     /**
      * Data Provider with:
      * with the object types  for creating a Record Folder
@@ -161,8 +164,23 @@ public interface TestData
     public static Object[][] folderTypes()
     {
         return new Object[][] {
-            {RECORD_FOLDER_TYPE},
-            {FOLDER_TYPE}
+            { RECORD_FOLDER_TYPE },
+            { FOLDER_TYPE }
+        };
+    }
+
+    /**
+     * Data Provider with:
+     * with the object types  for creating a Record Category
+     *
+     * @return file plan component alias
+     */
+    @DataProvider
+    public static Object[][] categoryTypes()
+    {
+        return new Object[][] {
+            { FOLDER_TYPE },
+            { RECORD_CATEGORY_TYPE }
         };
     }
 }
diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/RecordCategoryTest.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/RecordCategoryTest.java
index 24a84d0818..51483fffd3 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/RecordCategoryTest.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/RecordCategoryTest.java
@@ -70,12 +70,21 @@ public class RecordCategoryTest extends BaseRMRestTest
      * Given that a file plan exists
      * When I ask the API to create a root record category
      * Then it is created as a root record category
+     *
+     *
+     * Given that a file plan exists
+     * When I use the API to create a folder (cm:folder type) into the fileplan
+     * Then the folder is converted to rma:recordCategory
+     * (see RM-4572 comments)
+     *
      */
     @Test
     (
-        description = "Create root category"
+        description = "Create root category",
+        dataProviderClass= TestData.class,
+        dataProvider = "categoryTypes"
     )
-    public void createCategoryTest() throws Exception
+    public void createCategoryTest(String nodeType) throws Exception
     {
         String categoryName = "Category name " + getRandomAlphanumeric();
         String categoryTitle = "Category title " + getRandomAlphanumeric();
@@ -83,7 +92,7 @@ public class RecordCategoryTest extends BaseRMRestTest
         // Build the record category properties
         FilePlanComponent recordCategory = FilePlanComponent.builder()
             .name(categoryName)
-            .nodeType(RECORD_CATEGORY_TYPE)
+            .nodeType(nodeType)
             .properties(
                     FilePlanComponentProperties.builder()
                         .title(categoryTitle)
@@ -109,7 +118,7 @@ public class RecordCategoryTest extends BaseRMRestTest
         // Verify the returned file plan component properties
         FilePlanComponentProperties filePlanComponentProperties = filePlanComponent.getProperties();
         assertEquals(filePlanComponentProperties.getTitle(), categoryTitle);
-
+        assertNotNull(filePlanComponentProperties.getRmIdentifier());
         logger.info("Aspects: " + filePlanComponent.getAspectNames());
     }
 

From 5fee8833d6343ba7abe288b9eaaf1da8e48529b2 Mon Sep 17 00:00:00 2001
From: Silviu Dinuta 
Date: Thu, 9 Feb 2017 18:02:06 +0200
Subject: [PATCH 47/61] RM-4595: changed all ocurences of IGNode to
 FilePlanComponent in ig-core.yaml file

---
 .../main/webapp/definitions/ig-core-api.yaml  | 70 +++++++++----------
 1 file changed, 35 insertions(+), 35 deletions(-)

diff --git a/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/ig-core-api.yaml b/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/ig-core-api.yaml
index 7550e5c147..5cba27939b 100644
--- a/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/ig-core-api.yaml
+++ b/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/ig-core-api.yaml
@@ -36,7 +36,7 @@ paths:
       operationId: getFileplanComponent
       parameters:
         - $ref: '#/parameters/fileplanComponentIdWithAliasParam'
-        - $ref: '#/parameters/IGNodeEntryIncludeParam'
+        - $ref: '#/parameters/FilePlanComponentEntryIncludeParam'
         - $ref: '#/parameters/relativePathParam'
         - $ref: '#/parameters/fieldsParam'
       produces:
@@ -45,7 +45,7 @@ paths:
         '200':
           description: Successful response
           schema:
-            $ref: '#/definitions/IGNodeEntry'
+            $ref: '#/definitions/FilePlanComponentEntry'
         '400':
           description: |
             Invalid parameter: **fileplanComponentId** is not a valid format
@@ -86,21 +86,21 @@ paths:
       operationId: updateFileplanComponent
       parameters:
         - $ref: '#/parameters/fileplanComponentIdWithAliasParam'
-        - $ref: '#/parameters/IGNodeEntryIncludeParam'
+        - $ref: '#/parameters/FilePlanComponentEntryIncludeParam'
         - $ref: '#/parameters/fieldsParam'
         - in: body
           name: nodeBodyUpdate
           description: The node information to update.
           required: true
           schema:
-            $ref: '#/definitions/IGNodeBodyUpdate'
+            $ref: '#/definitions/FilePlanComponentBodyUpdate'
       produces:
         - application/json
       responses:
         '200':
           description: Successful response
           schema:
-            $ref: '#/definitions/IGNodeEntry'
+            $ref: '#/definitions/FilePlanComponentEntry'
         '400':
           description: |
             Invalid parameter: the update request is invalid or **fileplanComponentId** is not a valid format or **nodeBody** is invalid
@@ -175,7 +175,7 @@ paths:
         - $ref: '#/parameters/maxItemsParam'
         - $ref: '#/parameters/orderByParam'
         - $ref: '#/parameters/whereParam'
-        - $ref: '#/parameters/IGNodeEntryIncludeParam'
+        - $ref: '#/parameters/FilePlanComponentEntryIncludeParam'
         - $ref: '#/parameters/relativePathParam'
         - $ref: '#/parameters/includeSourceParam'
         - $ref: '#/parameters/fieldsParam'
@@ -183,7 +183,7 @@ paths:
         '200':
           description: Successful response
           schema:
-            $ref: '#/definitions/IGNodeAssociationPaging'
+            $ref: '#/definitions/FilePlanComponentAssociationPaging'
         '401':
           description: If authentication fails
         '403':
@@ -229,7 +229,7 @@ paths:
 
         This API method also supports node creation using application/json.
 
-        You must specify at least a **name** and **nodeType**. 
+        You must specify at least a **name** and **nodeType**.
 
         You can create a category like this:
         ```JSON
@@ -306,7 +306,7 @@ paths:
         }
         ```
         The **relativePath** specifies the container structure to create relative to the node **nodeId**. Containers in the
-        **relativePath** that do not exist are created before the node is created. The container type is decided considering 
+        **relativePath** that do not exist are created before the node is created. The container type is decided considering
         the type of the parent container and the type of the node to be created.
 
         You can set properties when creating a new fileplan component:
@@ -324,7 +324,7 @@ paths:
 
         Any missing aspects are applied automatically. You can set aspects explicitly, if needed, using an **aspectNames** field.
 
-        **Note:** You can create more than one child by 
+        **Note:** You can create more than one child by
         specifying a list of nodes in the JSON body. For example, the following JSON
         body creates two folders inside the specified **nodeId**, if the **nodeId** identifies
         a folder:
@@ -341,7 +341,7 @@ paths:
         ]
         ```
         If you specify a list as input, then a paginated list rather than an entry is returned in the response body. For example:
-        
+
         ```JSON
         {
           "list": {
@@ -375,7 +375,7 @@ paths:
           description: If true, then  a name clash will cause an attempt to auto rename by finding a unique name using an integer suffix.
           required: false
           type: boolean
-        - $ref: '#/parameters/IGNodeEntryIncludeParam'
+        - $ref: '#/parameters/FilePlanComponentEntryIncludeParam'
         - $ref: '#/parameters/fieldsParam'
         - in: body
           name: nodeBodyCreate
@@ -395,7 +395,7 @@ paths:
         '201':
           description: Successful response
           schema:
-            $ref: '#/definitions/IGNodeEntry'
+            $ref: '#/definitions/FilePlanComponentEntry'
         '400':
           description: |
             Invalid parameter: **fileplanComponentId** is not a valid format or **nodeBodyCreate** is invalid
@@ -599,11 +599,11 @@ paths:
             $ref: '#/definitions/Error'
   '/records/{recordId}/file':
     post:
-      tags: 
+      tags:
         - records
       summary: File a record
       description: |
-        Files the record **recordId** in the target record folder. 
+        Files the record **recordId** in the target record folder.
 
         You can specify the target record folder by providing its id **targetParentId**
         or by providing the id of a parent container **targetParentId** and a relative path **relativePath**.
@@ -613,11 +613,11 @@ paths:
         The relativePath is made of record containers and a record folder as the last element.
         Containers that are missing from relativePath will be created before filing.
 
-        If the record is already filed, a link to the target record folder is created. 
+        If the record is already filed, a link to the target record folder is created.
       operationId: fileRecord
-      parameters: 
+      parameters:
         - $ref: '#/parameters/recordIdParam'
-        - $ref: '#/parameters/IGNodeEntryIncludeParam'
+        - $ref: '#/parameters/FilePlanComponentEntryIncludeParam'
         - $ref: '#/parameters/fieldsParam'
         - in: body
           name: nodeBodyFile
@@ -633,7 +633,7 @@ paths:
         '200':
           description: Successful response
           schema:
-            $ref: '#/definitions/IGNodeEntry'
+            $ref: '#/definitions/FilePlanComponentEntry'
         '400':
           description: |
             Invalid parameter: **recordIdParam** or **targetParentId** is not a valid format,
@@ -654,12 +654,12 @@ paths:
             $ref: '#/definitions/Error'
   '/files/{fileId}/declare':
     post:
-      tags: 
+      tags:
         - files
       summary: Declare as record
       description: Declares the file **fileId** in the unfiled record container.
       operationId: declareRecord
-      parameters: 
+      parameters:
         - name: fileId
           in: path
           description: The identifier of a non-record file.
@@ -670,7 +670,7 @@ paths:
           description: Flag to indicate whether the record should be hidden from the current parent folder.
           type: boolean
           default: false
-        - $ref: '#/parameters/IGNodeEntryIncludeParam'
+        - $ref: '#/parameters/FilePlanComponentEntryIncludeParam'
         - $ref: '#/parameters/fieldsParam'
       consumes:
         - application/json
@@ -680,7 +680,7 @@ paths:
         '200':
           description: Successful response
           schema:
-            $ref: '#/definitions/IGNodeEntry'
+            $ref: '#/definitions/FilePlanComponentEntry'
         '400':
           description: |
             Invalid parameter: **fileId** is not a valid format
@@ -742,7 +742,7 @@ parameters:
       information is returned on the node resolved by this path.
     required: false
     type: string
-  IGNodeEntryIncludeParam:
+  FilePlanComponentEntryIncludeParam:
     name: include
     in: query
     description: |
@@ -854,14 +854,14 @@ parameters:
     type: string
     format: date-time
 definitions:
-  IGNodeEntry:
+  FilePlanComponentEntry:
     type: object
     required:
       - entry
     properties:
       entry:
-        $ref: '#/definitions/IGNode'
-  IGNode:
+        $ref: '#/definitions/FilePlanComponent'
+  FilePlanComponent:
     type: object
     required:
     - id
@@ -932,7 +932,7 @@ definitions:
           type: string
       path:
         $ref: '#/definitions/PathInfo'
-  IGNodeAssociationPaging:
+  FilePlanComponentAssociationPaging:
     type: object
     properties:
       list:
@@ -943,24 +943,24 @@ definitions:
           entries:
             type: array
             items:
-              $ref: '#/definitions/IGNodeChildAssociationEntry'
+              $ref: '#/definitions/FilePlanComponentChildAssociationEntry'
           source:
-            $ref: '#/definitions/IGNode'
-  IGNodeChildAssociationEntry:
+            $ref: '#/definitions/FilePlanComponent'
+  FilePlanComponentChildAssociationEntry:
     type: object
     required:
       - entry
     properties:
       entry:
-        $ref: '#/definitions/IGNodeChildAssociation'
-  IGNodeChildAssociation:
+        $ref: '#/definitions/FilePlanComponentChildAssociation'
+  FilePlanComponentChildAssociation:
     allOf:
-      - $ref: '#/definitions/IGNode'
+      - $ref: '#/definitions/FilePlanComponent'
       - type: object
         properties:
           association:
             $ref: '#/definitions/ChildAssociationInfo'
-  IGNodeBodyUpdate:
+  FilePlanComponentBodyUpdate:
     type: object
     properties:
       name:

From 1d34444237631340500241265766a3b7996a7603 Mon Sep 17 00:00:00 2001
From: Tuna Aksoy 
Date: Thu, 9 Feb 2017 18:03:56 +0000
Subject: [PATCH 48/61] RM-4585 (DeclareDocumentAsRecordTests: use TAS Node API
 when available)

---
 .../alfresco/rest/core/RestAPIFactory.java    | 25 ++++++-
 .../files/DeclareDocumentAsRecordTests.java   | 66 +++++++++----------
 2 files changed, 55 insertions(+), 36 deletions(-)

diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/RestAPIFactory.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/RestAPIFactory.java
index 907bbe53ab..fd8882e7ba 100644
--- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/RestAPIFactory.java
+++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/RestAPIFactory.java
@@ -26,6 +26,8 @@
  */
 package org.alfresco.rest.core;
 
+import org.alfresco.rest.requests.Node;
+import org.alfresco.rest.requests.coreAPI.RestCoreAPI;
 import org.alfresco.rest.rm.community.requests.igCoreAPI.FilePlanComponentAPI;
 import org.alfresco.rest.rm.community.requests.igCoreAPI.FilesAPI;
 import org.alfresco.rest.rm.community.requests.igCoreAPI.RMSiteAPI;
@@ -33,6 +35,7 @@ import org.alfresco.rest.rm.community.requests.igCoreAPI.RMUserAPI;
 import org.alfresco.rest.rm.community.requests.igCoreAPI.RecordsAPI;
 import org.alfresco.rest.rm.community.requests.igCoreAPI.RestIGCoreAPI;
 import org.alfresco.utility.data.DataUser;
+import org.alfresco.utility.model.RepoTestModel;
 import org.alfresco.utility.model.UserModel;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
@@ -68,6 +71,22 @@ public class RestAPIFactory
         return getRmRestWrapper().withIGCoreAPI();
     }
 
+    private RestCoreAPI getRestCoreAPI(UserModel userModel)
+    {
+        getRmRestWrapper().authenticateUser(userModel != null ? userModel : dataUser.getAdminUser());
+        return getRmRestWrapper().withCoreAPI();
+    }
+
+    public Node getNodeAPI(RepoTestModel model) throws Exception
+    {
+        return getRestCoreAPI(null).usingNode(model);
+    }
+
+    public Node getNodeAPI(UserModel userModel, RepoTestModel model) throws Exception
+    {
+        return getRestCoreAPI(userModel).usingNode(model);
+    }
+
     public RMSiteAPI getRMSiteAPI()
     {
         return getRestIGCoreAPI(null).usingRMSite();
@@ -97,7 +116,7 @@ public class RestAPIFactory
     {
         return getRestIGCoreAPI(userModel).usingRecords();
     }
-    
+
     public FilesAPI getFilesAPI()
     {
         return getRestIGCoreAPI(null).usingFiles();
@@ -107,12 +126,12 @@ public class RestAPIFactory
     {
         return getRestIGCoreAPI(userModel).usingFiles();
     }
-    
+
     public RMUserAPI getRMUserAPI()
     {
         return getRestIGCoreAPI(null).usingRMUser();
     }
-    
+
     public RMUserAPI getRMUserAPI(UserModel userModel)
     {
         return getRestIGCoreAPI(userModel).usingRMUser();
diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/files/DeclareDocumentAsRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/files/DeclareDocumentAsRecordTests.java
index 6f6dfcb4f1..41d4532672 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/files/DeclareDocumentAsRecordTests.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/files/DeclareDocumentAsRecordTests.java
@@ -39,6 +39,7 @@ import java.util.List;
 import java.util.stream.Collectors;
 
 import org.alfresco.dataprep.CMISUtil;
+import org.alfresco.rest.model.RestNodeModel;
 import org.alfresco.rest.rm.community.base.BaseRMRestTest;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent;
 import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentEntry;
@@ -79,15 +80,15 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest
         // create test user and test collaboration site to store documents in
         testUser = dataUser.createRandomTestUser();
         testUserReadOnly = dataUser.createRandomTestUser();
-        
+
         testSite = dataSite.usingAdmin().createPublicRandomSite();
-        
+
         dataUser.addUserToSite(testUser, testSite, UserRole.SiteContributor);
         dataUser.addUserToSite(testUserReadOnly, testSite, UserRole.SiteConsumer);
-        
+
         testFolder = dataContent.usingSite(testSite).usingUser(testUser).createFolder();
     }
-    
+
     /**
      * 
      * Given a document that is not a record
@@ -103,17 +104,17 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest
     @Test(description = "User with correct permissions can declare document as a record")
     @AlfrescoTest(jira = "RM-4429")
     public void userWithPrivilegesCanDeclareDocumentAsRecord() throws Exception
-    {        
-        // create document in a folder in a collaboration site       
+    {
+        // create document in a folder in a collaboration site
         FileModel document = dataContent.usingSite(testSite)
             .usingUser(testUser)
             .usingResource(testFolder)
             .createContent(CMISUtil.DocumentType.TEXT_PLAIN);
-    
+
         // declare document as record
         FilePlanComponent record = getRestAPIFactory().getFilesAPI(testUser).declareAsRecord(document.getNodeRefWithoutVersion());
         assertStatusCode(CREATED);
-       
+
         // verify the declared record is in Unfiled Records folder
         FilePlanComponentAPI filePlanComponentAPI = getRestAPIFactory().getFilePlanComponentsAPI();
         List matchingRecords = filePlanComponentAPI.listChildComponents(UNFILED_RECORDS_CONTAINER_ALIAS)
@@ -125,23 +126,23 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest
         assertEquals(matchingRecords.size(), 1, "More than one record matching document name");
 
         // verify the original file in collaboration site has been renamed to reflect the record identifier
-        // FIXME: this call uses the FilePlanComponentAPI due to no TAS support for Node API in TAS restapi v 5.2.0-0. See RM-4585 for details.
-        List filesAfterRename = filePlanComponentAPI.listChildComponents(testFolder.getNodeRefWithoutVersion())
-            .getEntries()
-            .stream()
-            .filter(f -> f.getFilePlanComponentModel().getId().equals(document.getNodeRefWithoutVersion()))
-            .collect(Collectors.toList());
+        List filesAfterRename = getRestAPIFactory().getNodeAPI(testFolder)
+                .listChildren()
+                .getEntries()
+                .stream()
+                .filter(f -> f.onModel().getId().equals(document.getNodeRefWithoutVersion()))
+                .collect(Collectors.toList());
         assertEquals(filesAfterRename.size(), 1, "There should be only one file in folder " + testFolder.getName());
 
         // verify the new name has the form of " ()."
-        assertEquals(filesAfterRename.get(0).getFilePlanComponentModel().getName(), 
-            document.getName().replace(".", String.format(" (%s).", record.getProperties().getRecordId())));
+        String recordName = filesAfterRename.get(0).onModel().getName();
+        assertEquals(recordName, document.getName().replace(".", String.format(" (%s).", record.getProperties().getRecordId())));
 
         // verify the document in collaboration site is now a record, note the file is now renamed hence folder + doc. name concatenation
         // this also verifies the document is still in the initial folder
         Document documentPostFiling = dataContent.usingSite(testSite)
             .usingUser(testUser)
-            .getCMISDocument(testFolder.getCmisLocation() + "/" + filesAfterRename.get(0).getFilePlanComponentModel().getName());
+            .getCMISDocument(testFolder.getCmisLocation() + "/" + recordName);
 
         // a document is a record if "Record" is one of its secondary types
         List documentSecondary = documentPostFiling.getSecondaryTypes()
@@ -151,7 +152,7 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest
         assertFalse(documentSecondary.isEmpty(), "Document is not a record");
 
         // verify the document is readable and has same content as corresponding record
-        try 
+        try
         (
             InputStream recordInputStream = getRestAPIFactory().getRecordsAPI().getRecordContent(record.getId()).asInputStream();
             InputStream documentInputStream = documentPostFiling.getContentStream().getStream();
@@ -160,7 +161,7 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest
             assertEquals(DigestUtils.sha1(recordInputStream), DigestUtils.sha1(documentInputStream));
         }
     }
-    
+
     /**
      * 
      * Given a document that is not a record
@@ -172,26 +173,25 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest
      */
     @Test(description = "User with read-only permissions can't declare document a record")
     @AlfrescoTest(jira = "RM-4429")
-    public void userWithReadPermissionsCantDeclare() throws Exception 
+    public void userWithReadPermissionsCantDeclare() throws Exception
     {
         // create document in a folder in a collaboration site
         FileModel document = dataContent.usingSite(testSite)
             .usingUser(testUser)
             .usingResource(testFolder)
             .createContent(CMISUtil.DocumentType.TEXT_PLAIN);
-    
+
         // declare document as record as testUserReadOnly
         getRestAPIFactory().getFilesAPI(testUserReadOnly).declareAsRecord(document.getNodeRefWithoutVersion());
         assertStatusCode(FORBIDDEN);
-        
+
         // verify the document is still in the original folder
-        // FIXME: this call uses the FilePlanComponentAPI due to no TAS support for Node API in TAS restapi v 5.2.0-0. See RM-4585 for details.
-        List filesAfterRename = getRestAPIFactory().getFilePlanComponentsAPI()
-            .listChildComponents(testFolder.getNodeRefWithoutVersion())
-            .getEntries()
-            .stream()
-            .filter(f -> f.getFilePlanComponentModel().getId().equals(document.getNodeRefWithoutVersion()))
-            .collect(Collectors.toList());
+        List filesAfterRename = getRestAPIFactory().getNodeAPI(testFolder)
+                .listChildren()
+                .getEntries()
+                .stream()
+                .filter(f -> f.onModel().getId().equals(document.getNodeRefWithoutVersion()))
+                .collect(Collectors.toList());
        assertEquals(filesAfterRename.size(), 1, "Declare as record failed but original document is missing");
     }
 
@@ -219,15 +219,15 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest
         FilePlanComponent record = getRestAPIFactory().getFilePlanComponentsAPI()
             .createFilePlanComponent(nonelectronicRecord, createCategoryFolderInFilePlan().getId());
         assertStatusCode(CREATED);
-        
+
         // try to declare it as a record
         getRestAPIFactory().getFilesAPI().declareAsRecord(record.getId());
         assertStatusCode(UNPROCESSABLE_ENTITY);
     }
-    
+
     /**
      * 
-     * Given a node that is NOT a document 
+     * Given a node that is NOT a document
      * When I declare the node as a record
      * Then I get a invalid operation exception
      * 
@@ -238,7 +238,7 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest public void nonDocumentCantBeDeclaredARecord() throws Exception { FolderModel otherTestFolder = dataContent.usingSite(testSite).usingUser(testUser).createFolder(); - + // try to declare otherTestFolder as a record getRestAPIFactory().getFilesAPI().declareAsRecord(otherTestFolder.getNodeRefWithoutVersion()); assertStatusCode(UNPROCESSABLE_ENTITY); From 8ed0bde1ba48527e78504069bb07b9c0fe689506 Mon Sep 17 00:00:00 2001 From: Rodica Sutu Date: Fri, 10 Feb 2017 09:21:33 +0200 Subject: [PATCH 49/61] fix the compilation error --- .../files/DeclareDocumentAsRecordTests.java | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/files/DeclareDocumentAsRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/files/DeclareDocumentAsRecordTests.java index 6f6dfcb4f1..681a703f14 100644 --- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/files/DeclareDocumentAsRecordTests.java +++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/files/DeclareDocumentAsRecordTests.java @@ -79,15 +79,15 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest // create test user and test collaboration site to store documents in testUser = dataUser.createRandomTestUser(); testUserReadOnly = dataUser.createRandomTestUser(); - + testSite = dataSite.usingAdmin().createPublicRandomSite(); - + dataUser.addUserToSite(testUser, testSite, UserRole.SiteContributor); dataUser.addUserToSite(testUserReadOnly, testSite, UserRole.SiteConsumer); - + testFolder = dataContent.usingSite(testSite).usingUser(testUser).createFolder(); } - + /** *
      * Given a document that is not a record
@@ -103,17 +103,17 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest
     @Test(description = "User with correct permissions can declare document as a record")
     @AlfrescoTest(jira = "RM-4429")
     public void userWithPrivilegesCanDeclareDocumentAsRecord() throws Exception
-    {        
-        // create document in a folder in a collaboration site       
+    {
+        // create document in a folder in a collaboration site
         FileModel document = dataContent.usingSite(testSite)
             .usingUser(testUser)
             .usingResource(testFolder)
             .createContent(CMISUtil.DocumentType.TEXT_PLAIN);
-    
+
         // declare document as record
         FilePlanComponent record = getRestAPIFactory().getFilesAPI(testUser).declareAsRecord(document.getNodeRefWithoutVersion());
         assertStatusCode(CREATED);
-       
+
         // verify the declared record is in Unfiled Records folder
         FilePlanComponentAPI filePlanComponentAPI = getRestAPIFactory().getFilePlanComponentsAPI();
         List matchingRecords = filePlanComponentAPI.listChildComponents(UNFILED_RECORDS_CONTAINER_ALIAS)
@@ -134,8 +134,8 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest
         assertEquals(filesAfterRename.size(), 1, "There should be only one file in folder " + testFolder.getName());
 
         // verify the new name has the form of " ()."
-        assertEquals(filesAfterRename.get(0).getFilePlanComponentModel().getName(), 
-            document.getName().replace(".", String.format(" (%s).", record.getProperties().getRecordId())));
+        assertEquals(filesAfterRename.get(0).getFilePlanComponentModel().getName(),
+            document.getName().replace(".", String.format(" (%s).", record.getProperties().getRmIdentifier())));
 
         // verify the document in collaboration site is now a record, note the file is now renamed hence folder + doc. name concatenation
         // this also verifies the document is still in the initial folder
@@ -151,7 +151,7 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest
         assertFalse(documentSecondary.isEmpty(), "Document is not a record");
 
         // verify the document is readable and has same content as corresponding record
-        try 
+        try
         (
             InputStream recordInputStream = getRestAPIFactory().getRecordsAPI().getRecordContent(record.getId()).asInputStream();
             InputStream documentInputStream = documentPostFiling.getContentStream().getStream();
@@ -160,7 +160,7 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest
             assertEquals(DigestUtils.sha1(recordInputStream), DigestUtils.sha1(documentInputStream));
         }
     }
-    
+
     /**
      * 
      * Given a document that is not a record
@@ -172,18 +172,18 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest
      */
     @Test(description = "User with read-only permissions can't declare document a record")
     @AlfrescoTest(jira = "RM-4429")
-    public void userWithReadPermissionsCantDeclare() throws Exception 
+    public void userWithReadPermissionsCantDeclare() throws Exception
     {
         // create document in a folder in a collaboration site
         FileModel document = dataContent.usingSite(testSite)
             .usingUser(testUser)
             .usingResource(testFolder)
             .createContent(CMISUtil.DocumentType.TEXT_PLAIN);
-    
+
         // declare document as record as testUserReadOnly
         getRestAPIFactory().getFilesAPI(testUserReadOnly).declareAsRecord(document.getNodeRefWithoutVersion());
         assertStatusCode(FORBIDDEN);
-        
+
         // verify the document is still in the original folder
         // FIXME: this call uses the FilePlanComponentAPI due to no TAS support for Node API in TAS restapi v 5.2.0-0. See RM-4585 for details.
         List filesAfterRename = getRestAPIFactory().getFilePlanComponentsAPI()
@@ -219,15 +219,15 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest
         FilePlanComponent record = getRestAPIFactory().getFilePlanComponentsAPI()
             .createFilePlanComponent(nonelectronicRecord, createCategoryFolderInFilePlan().getId());
         assertStatusCode(CREATED);
-        
+
         // try to declare it as a record
         getRestAPIFactory().getFilesAPI().declareAsRecord(record.getId());
         assertStatusCode(UNPROCESSABLE_ENTITY);
     }
-    
+
     /**
      * 
-     * Given a node that is NOT a document 
+     * Given a node that is NOT a document
      * When I declare the node as a record
      * Then I get a invalid operation exception
      * 
@@ -238,7 +238,7 @@ public class DeclareDocumentAsRecordTests extends BaseRMRestTest public void nonDocumentCantBeDeclaredARecord() throws Exception { FolderModel otherTestFolder = dataContent.usingSite(testSite).usingUser(testUser).createFolder(); - + // try to declare otherTestFolder as a record getRestAPIFactory().getFilesAPI().declareAsRecord(otherTestFolder.getNodeRefWithoutVersion()); assertStatusCode(UNPROCESSABLE_ENTITY); From bcafd847d2092fbcbcecd0b474514af0dfc00174 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Fri, 10 Feb 2017 11:07:24 +0000 Subject: [PATCH 50/61] RM-4234 When marking a node then also mark all renditions of it. The same applies to clearing marks from a node. This involved adding the rendition service to the base service (which I'm a bit concerned about, because it looked like this should already have been present). --- .../module/org_alfresco_module_rm/rm-service-context.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index 6b39ea2065..0ea2cd2bd5 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -32,7 +32,8 @@ - + + From 43ce56b3b3df66c59c119cffabf51a8996e50f07 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Fri, 10 Feb 2017 18:14:57 +0200 Subject: [PATCH 51/61] RM-4673 - added try catch to handle concurrent attempt to create group (cherry picked from commit cb08f0e597e01a17ebab6191f9900e01187e7260) --- .../security/ExtendedSecurityServiceImpl.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java index 71c22f8c7f..549dda9145 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java @@ -44,6 +44,7 @@ import org.alfresco.query.PagingRequest; import org.alfresco.query.PagingResults; import org.alfresco.repo.security.authority.RMAuthority; import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.DuplicateChildNodeNameException; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.security.AccessPermission; import org.alfresco.service.cmr.security.AuthorityService; @@ -355,7 +356,16 @@ public class ExtendedSecurityServiceImpl extends ServiceBaseImpl if (groupResult.getFirst() == null) { - group = createIPRGroup(groupPrefix, authorities, groupResult.getSecond()); + try + { + group = createIPRGroup(groupPrefix, authorities, groupResult.getSecond()); + } + catch(DuplicateChildNodeNameException ex) + { + // the group was concurrently created, try to get it again + groupResult = findIPRGroup(groupPrefix, authorities); + group = groupResult.getFirst(); + } } else { From 31465786bfea7f443701a6a22b431ad64ef7003d Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Mon, 13 Feb 2017 18:20:06 +0200 Subject: [PATCH 52/61] RM-4673 - moved try catch in the create method so we can use the group name and fixed an update attribute bug (cherry picked from commit 22241b1d618f068489218a5d6ef48890333ff1c5) --- .../RecordComponentIdentifierAspect.java | 2 +- .../security/ExtendedSecurityServiceImpl.java | 50 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordComponentIdentifierAspect.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordComponentIdentifierAspect.java index f87f573162..112a68efcb 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordComponentIdentifierAspect.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordComponentIdentifierAspect.java @@ -243,7 +243,7 @@ public class RecordComponentIdentifierAspect extends BaseBehaviourBean // Do a blanket removal in case this is a contextual nodes attributeService.removeAttributes(CONTEXT_VALUE, nodeRef); } - else + else if(!beforeId.equals(afterId)) { // This is a full update attributeService.updateOrCreateAttribute( diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java index 549dda9145..f0d1e46368 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java @@ -56,6 +56,7 @@ import org.alfresco.util.Pair; import org.alfresco.util.ParameterCheck; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.dao.DuplicateKeyException; import org.springframework.extensions.webscripts.ui.common.StringUtils; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; @@ -356,16 +357,7 @@ public class ExtendedSecurityServiceImpl extends ServiceBaseImpl if (groupResult.getFirst() == null) { - try - { - group = createIPRGroup(groupPrefix, authorities, groupResult.getSecond()); - } - catch(DuplicateChildNodeNameException ex) - { - // the group was concurrently created, try to get it again - groupResult = findIPRGroup(groupPrefix, authorities); - group = groupResult.getFirst(); - } + group = createIPRGroup(groupPrefix, authorities, groupResult.getSecond()); } else { @@ -525,32 +517,40 @@ public class ExtendedSecurityServiceImpl extends ServiceBaseImpl private String createIPRGroup(String groupNamePrefix, Set children, int index) { ParameterCheck.mandatory("groupNamePrefix", groupNamePrefix); - + // get the group name String groupShortName = getIPRGroupShortName(groupNamePrefix, children, index); - + // create group - String group = authorityService.createAuthority(AuthorityType.GROUP, groupShortName, groupShortName, Collections.singleton(RMAuthority.ZONE_APP_RM)); - - // add root parent - authorityService.addAuthority(getRootIRPGroup(), group); - - // add children if provided - if (children != null) + String group; + try { - for (String child : children) + group = authorityService.createAuthority(AuthorityType.GROUP, groupShortName, groupShortName, Collections.singleton(RMAuthority.ZONE_APP_RM)); + + // add root parent + authorityService.addAuthority(getRootIRPGroup(), group); + + // add children if provided + if (children != null) { - if (authorityService.authorityExists(child) && - !PermissionService.ALL_AUTHORITIES.equals(child)) + for (String child : children) { - authorityService.addAuthority(group, child); + if (authorityService.authorityExists(child) && !PermissionService.ALL_AUTHORITIES.equals(child)) + { + authorityService.addAuthority(group, child); + } } } } - + catch(DuplicateChildNodeNameException ex) + { + // the group was concurrently created + group = authorityService.getName(AuthorityType.GROUP, groupShortName); + } + return group; } - + /** * Assign IPR groups to a node reference with the correct permissions. * From 1e63b628a0bebd68d715a17ebbf3d209a8000071 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Mon, 13 Feb 2017 19:24:20 +0200 Subject: [PATCH 53/61] RM-4673 - delete unused import --- .../security/ExtendedSecurityServiceImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java index f0d1e46368..a7d2a22f1c 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java @@ -56,7 +56,6 @@ import org.alfresco.util.Pair; import org.alfresco.util.ParameterCheck; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; -import org.springframework.dao.DuplicateKeyException; import org.springframework.extensions.webscripts.ui.common.StringUtils; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; From 13689a8b2abe2c7ac12cc02aefaf44ff5ad0da2e Mon Sep 17 00:00:00 2001 From: Tom Page Date: Mon, 13 Feb 2017 11:38:13 +0000 Subject: [PATCH 54/61] RM-4676 The patch version number should not be localised. Delete localisation files and exclude version.properties from future translation bundles. --- l10n.properties | 2 +- .../module/org_alfresco_module_rm/version_de.properties | 3 --- .../module/org_alfresco_module_rm/version_es.properties | 3 --- .../module/org_alfresco_module_rm/version_fr.properties | 3 --- .../module/org_alfresco_module_rm/version_it.properties | 3 --- .../module/org_alfresco_module_rm/version_ja.properties | 3 --- .../module/org_alfresco_module_rm/version_nb.properties | 3 --- .../module/org_alfresco_module_rm/version_nl.properties | 3 --- .../module/org_alfresco_module_rm/version_pt_BR.properties | 3 --- .../module/org_alfresco_module_rm/version_ru.properties | 3 --- .../module/org_alfresco_module_rm/version_zh_CN.properties | 3 --- 11 files changed, 1 insertion(+), 31 deletions(-) delete mode 100644 rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_de.properties delete mode 100644 rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_es.properties delete mode 100644 rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_fr.properties delete mode 100644 rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_it.properties delete mode 100644 rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_ja.properties delete mode 100644 rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_nb.properties delete mode 100644 rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_nl.properties delete mode 100644 rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_pt_BR.properties delete mode 100644 rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_ru.properties delete mode 100644 rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_zh_CN.properties diff --git a/l10n.properties b/l10n.properties index 663ca0f168..4bde720182 100644 --- a/l10n.properties +++ b/l10n.properties @@ -1,4 +1,4 @@ # Localisation config overrides for Records Management module MESSAGE_SEARCH_PATH="rm-community/rm-community-repo/config rm-community/rm-community-share rm-community/rm-share/source rm-enterprise/rm-enterprise-repo/src/main rm-enterprise/rm-enterprise-share/src/main " -EXCLUDED_FILES="$EXCLUDED_FILES rm-method-security.properties springloaded.properties file-mapping.properties classified-content-notForTranslating.properties notForTranslating" +EXCLUDED_FILES="$EXCLUDED_FILES rm-method-security.properties springloaded.properties file-mapping.properties classified-content-notForTranslating.properties notForTranslating version.properties" EXTENSION_PREFIX=-RM diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_de.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_de.properties deleted file mode 100644 index cf2c7c2600..0000000000 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_de.properties +++ /dev/null @@ -1,3 +0,0 @@ -# RM Schema number - -version.rm.schema=2501 diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_es.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_es.properties deleted file mode 100644 index cf2c7c2600..0000000000 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_es.properties +++ /dev/null @@ -1,3 +0,0 @@ -# RM Schema number - -version.rm.schema=2501 diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_fr.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_fr.properties deleted file mode 100644 index cf2c7c2600..0000000000 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_fr.properties +++ /dev/null @@ -1,3 +0,0 @@ -# RM Schema number - -version.rm.schema=2501 diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_it.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_it.properties deleted file mode 100644 index cf2c7c2600..0000000000 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_it.properties +++ /dev/null @@ -1,3 +0,0 @@ -# RM Schema number - -version.rm.schema=2501 diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_ja.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_ja.properties deleted file mode 100644 index cf2c7c2600..0000000000 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_ja.properties +++ /dev/null @@ -1,3 +0,0 @@ -# RM Schema number - -version.rm.schema=2501 diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_nb.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_nb.properties deleted file mode 100644 index cf2c7c2600..0000000000 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_nb.properties +++ /dev/null @@ -1,3 +0,0 @@ -# RM Schema number - -version.rm.schema=2501 diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_nl.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_nl.properties deleted file mode 100644 index cf2c7c2600..0000000000 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_nl.properties +++ /dev/null @@ -1,3 +0,0 @@ -# RM Schema number - -version.rm.schema=2501 diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_pt_BR.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_pt_BR.properties deleted file mode 100644 index cf2c7c2600..0000000000 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_pt_BR.properties +++ /dev/null @@ -1,3 +0,0 @@ -# RM Schema number - -version.rm.schema=2501 diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_ru.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_ru.properties deleted file mode 100644 index cf2c7c2600..0000000000 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_ru.properties +++ /dev/null @@ -1,3 +0,0 @@ -# RM Schema number - -version.rm.schema=2501 diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_zh_CN.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_zh_CN.properties deleted file mode 100644 index cf2c7c2600..0000000000 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/version_zh_CN.properties +++ /dev/null @@ -1,3 +0,0 @@ -# RM Schema number - -version.rm.schema=2501 From f7622c0231a61648546cfedbc045fee52a75ecc2 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Tue, 14 Feb 2017 16:19:45 +0000 Subject: [PATCH 55/61] RM-4681 Add behaviours to restrict where rm items can be created. Record categories can only go in the file plan, or under other record categories. Record folders can only have categories as a primary parent, and holds or transfers as secondary parents. --- .../model/rma/type/RecordCategoryType.java | 7 +++- .../model/rma/type/RecordFolderType.java | 38 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java index 4d6d476ebf..b1d7e7a60f 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java @@ -178,13 +178,18 @@ public class RecordCategoryType extends BaseBehaviourBean @Override public Void doWork() { + // Check the parent is either a file plan or a category. + if (!isFilePlan(childAssocRef.getParentRef()) && !isRecordCategory(childAssocRef.getParentRef())) + { + throw new AlfrescoRuntimeException("Operation failed: Record categories must go under file plans or categories."); + } + // setup record category permissions filePlanPermissionService.setupRecordCategoryPermissions(childAssocRef.getChildRef()); return null; } }); - } /** diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java index 2b60c6ff2b..20badd2005 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java @@ -64,6 +64,7 @@ import org.springframework.extensions.surf.util.I18NUtil; ) public class RecordFolderType extends AbstractDisposableItem implements NodeServicePolicies.OnMoveNodePolicy, + NodeServicePolicies.OnCreateNodePolicy, NodeServicePolicies.OnCreateChildAssociationPolicy { /** record service */ @@ -123,6 +124,7 @@ public class RecordFolderType extends AbstractDisposableItem AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork() { + @Override public Object doWork() { // clean record folder @@ -270,4 +272,40 @@ public class RecordFolderType extends AbstractDisposableItem behaviourFilter.enableBehaviour(); } } + + /** {@inheritDoc}} */ + @Override + @Behaviour + ( + kind = BehaviourKind.CLASS, + notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT + ) + public void onCreateNode(final ChildAssociationRef childAssocRef) + { + // execute behaviour code as system user + AuthenticationUtil.runAsSystem(new RunAsWork() + { + @Override + public Void doWork() + { + if (childAssocRef.isPrimary()) + { + // Check the primary parent is a category. + if (!isRecordFolder(childAssocRef.getParentRef())) + { + throw new AlfrescoRuntimeException("Operation failed: Record folders must go under categories."); + } + } + else + { + // Check the secondary parent is a hold or transfer. + if (!isHold(childAssocRef.getParentRef()) && !isTransfer(childAssocRef.getParentRef())) + { + throw new AlfrescoRuntimeException("Operation failed: Record folders can only have secondary parents of holds or transfers."); + } + } + return null; + } + }); + } } From dee7e2d58000d6fceb2b8ecc9def29e81fad0f37 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Wed, 15 Feb 2017 04:03:58 +0000 Subject: [PATCH 56/61] RM-4681 Fix typo and add behaviour for moving RM items. --- .../model/rma/type/RecordCategoryType.java | 45 +++++++++-- .../model/rma/type/RecordFolderType.java | 81 +++++++++++-------- 2 files changed, 87 insertions(+), 39 deletions(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java index b1d7e7a60f..81dc259b95 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java @@ -59,7 +59,8 @@ import org.alfresco.service.namespace.QName; ) public class RecordCategoryType extends BaseBehaviourBean implements NodeServicePolicies.OnCreateChildAssociationPolicy, - NodeServicePolicies.OnCreateNodePolicy + NodeServicePolicies.OnCreateNodePolicy, + NodeServicePolicies.OnMoveNodePolicy { /** vital record service */ protected VitalRecordService vitalRecordService; @@ -178,11 +179,7 @@ public class RecordCategoryType extends BaseBehaviourBean @Override public Void doWork() { - // Check the parent is either a file plan or a category. - if (!isFilePlan(childAssocRef.getParentRef()) && !isRecordCategory(childAssocRef.getParentRef())) - { - throw new AlfrescoRuntimeException("Operation failed: Record categories must go under file plans or categories."); - } + checkParentType(childAssocRef); // setup record category permissions filePlanPermissionService.setupRecordCategoryPermissions(childAssocRef.getChildRef()); @@ -218,4 +215,40 @@ public class RecordCategoryType extends BaseBehaviourBean } }; } + + /** Record category move behaviour. {@inheritDoc} */ + @Override + @Behaviour + ( + kind = BehaviourKind.CLASS, + notificationFrequency = NotificationFrequency.FIRST_EVENT + ) + public void onMoveNode(ChildAssociationRef oldChildAssocRef, ChildAssociationRef newChildAssocRef) + { + checkParentType(newChildAssocRef); + } + + /** + * Check the parent of a record category. The parent must be a file plan or another category. + * + * @param childAssocRef The parent-child association. + * @throws UnsupportedOperationException If the parent type is invalid. + */ + private void checkParentType(final ChildAssociationRef childAssocRef) + { + // execute behaviour code as system user + AuthenticationUtil.runAsSystem(new RunAsWork() + { + @Override + public Void doWork() + { + // Check the parent is either a file plan or a category. + if (!isFilePlan(childAssocRef.getParentRef()) && !isRecordCategory(childAssocRef.getParentRef())) + { + throw new AlfrescoRuntimeException("Operation failed: Record categories must go under file plans or categories."); + } + return null; + } + }); + } } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java index 20badd2005..ddde2471cc 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java @@ -116,41 +116,36 @@ public class RecordFolderType extends AbstractDisposableItem ) public void onMoveNode(ChildAssociationRef oldChildAssocRef, ChildAssociationRef newChildAssocRef) { - if (!nodeService.getType(newChildAssocRef.getParentRef()).equals(TYPE_RECORD_FOLDER)) + checkParentType(newChildAssocRef); + + if (!oldChildAssocRef.getParentRef().equals(newChildAssocRef.getParentRef())) { - if (!oldChildAssocRef.getParentRef().equals(newChildAssocRef.getParentRef())) + final NodeRef newNodeRef = newChildAssocRef.getChildRef(); + + AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork() { - final NodeRef newNodeRef = newChildAssocRef.getChildRef(); - - AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork() + @Override + public Object doWork() { - @Override - public Object doWork() + // clean record folder + cleanDisposableItem(nodeService, newNodeRef); + + // re-initialise the record folder + recordFolderService.setupRecordFolder(newNodeRef); + + // sort out the child records + for (NodeRef record : recordService.getRecords(newNodeRef)) { - // clean record folder - cleanDisposableItem(nodeService, newNodeRef); + // clean record + cleanDisposableItem(nodeService, record); - // re-initialise the record folder - recordFolderService.setupRecordFolder(newNodeRef); - - // sort out the child records - for (NodeRef record : recordService.getRecords(newNodeRef)) - { - // clean record - cleanDisposableItem(nodeService, record); - - // Re-initiate the records in the new folder. - recordService.file(record); - } - - return null; + // Re-initiate the records in the new folder. + recordService.file(record); } - }, AuthenticationUtil.getSystemUserName()); - } - } - else - { - throw new UnsupportedOperationException("Cannot move record folder into another record folder."); + + return null; + } + }, AuthenticationUtil.getSystemUserName()); } } @@ -281,6 +276,17 @@ public class RecordFolderType extends AbstractDisposableItem notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT ) public void onCreateNode(final ChildAssociationRef childAssocRef) + { + checkParentType(childAssocRef); + } + + /** + * Check the parent of a record folder. The primary parent must be a category and a secondary parent may be a hold or a transfer. + * + * @param childAssocRef The parent-child association. + * @throws UnsupportedOperationException If the parent type is invalid. + */ + private void checkParentType(final ChildAssociationRef childAssocRef) { // execute behaviour code as system user AuthenticationUtil.runAsSystem(new RunAsWork() @@ -288,12 +294,19 @@ public class RecordFolderType extends AbstractDisposableItem @Override public Void doWork() { - if (childAssocRef.isPrimary()) + if (nodeService.getType(childAssocRef.getParentRef()).equals(TYPE_RECORD_FOLDER)) + { + // Return slightly more helpful exception in this case. + throw new UnsupportedOperationException("Cannot move record folder into another record folder."); + } + else if (childAssocRef.isPrimary()) { // Check the primary parent is a category. - if (!isRecordFolder(childAssocRef.getParentRef())) + if (!isRecordCategory(childAssocRef.getParentRef())) { - throw new AlfrescoRuntimeException("Operation failed: Record folders must go under categories."); + throw new UnsupportedOperationException( + "Operation failed: Record folders must go under categories, not " + + nodeService.getType(childAssocRef.getParentRef())); } } else @@ -301,7 +314,9 @@ public class RecordFolderType extends AbstractDisposableItem // Check the secondary parent is a hold or transfer. if (!isHold(childAssocRef.getParentRef()) && !isTransfer(childAssocRef.getParentRef())) { - throw new AlfrescoRuntimeException("Operation failed: Record folders can only have secondary parents of holds or transfers."); + throw new UnsupportedOperationException( + "Operation failed: Record folders can only have secondary parents of holds or transfers, not " + + nodeService.getType(childAssocRef.getParentRef())); } } return null; From bba7f80eb96a549a398243d742a72f62d4b65504 Mon Sep 17 00:00:00 2001 From: Rodica Sutu Date: Fri, 17 Feb 2017 09:13:49 +0200 Subject: [PATCH 57/61] update tas dependency to the latest release version --- rm-automation/rm-automation-community-rest-api/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-automation/rm-automation-community-rest-api/pom.xml b/rm-automation/rm-automation-community-rest-api/pom.xml index d0fef893e8..087c66e349 100644 --- a/rm-automation/rm-automation-community-rest-api/pom.xml +++ b/rm-automation/rm-automation-community-rest-api/pom.xml @@ -15,7 +15,7 @@ 1.8 alfresco-rm-community-share alfresco-rm-community-repo - 5.2.0-2 + 5.2.0-4 2.0.0 From 8a14116cf2d394650ecd82b8ed85ea85ffc7a874 Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Wed, 22 Feb 2017 15:16:44 +0000 Subject: [PATCH 58/61] Updated source code management tags after moving to the new gitlab server --- pom.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 2efbbd8b87..e35cc86de9 100644 --- a/pom.xml +++ b/pom.xml @@ -21,9 +21,9 @@ - scm:git:https://gitlab.alfresco.com/records-management/records-management.git - scm:git:https://gitlab.alfresco.com/records-management/records-management.git - https://gitlab.alfresco.com/records-management/records-management + scm:git:https://git.alfresco.com/records-management/records-management.git + scm:git:https://git.alfresco.com/records-management/records-management.git + https://git.alfresco.com/records-management/records-management HEAD @@ -112,9 +112,9 @@ -Xmx1024m -XX:MaxPermSize=256m -Duser.language=en -Dcom.sun.management.jmxremote - - true - false + + true + false @@ -333,7 +333,7 @@ - + org.codehaus.mojo license-maven-plugin From 00b4d9b1382f8bfe6ce06a99be802939cd222897 Mon Sep 17 00:00:00 2001 From: alfresco-build Date: Wed, 22 Feb 2017 15:37:45 +0000 Subject: [PATCH 59/61] [maven-release-plugin] prepare release V2.5.1 --- pom.xml | 4 ++-- rm-automation/pom.xml | 2 +- rm-community/pom.xml | 2 +- rm-community/rm-community-repo/pom.xml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index e35cc86de9..9b533b52c5 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.alfresco alfresco-rm pom - 2.5.1-SNAPSHOT + 2.5.1 Alfresco Records Management @@ -24,7 +24,7 @@ scm:git:https://git.alfresco.com/records-management/records-management.git scm:git:https://git.alfresco.com/records-management/records-management.git https://git.alfresco.com/records-management/records-management - HEAD + V2.5.1 diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 6ddc73f194..aa36ce1bee 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm - 2.5.1-SNAPSHOT + 2.5.1 diff --git a/rm-community/pom.xml b/rm-community/pom.xml index e5ad0a3c57..50778964f4 100644 --- a/rm-community/pom.xml +++ b/rm-community/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm - 2.5.1-SNAPSHOT + 2.5.1 diff --git a/rm-community/rm-community-repo/pom.xml b/rm-community/rm-community-repo/pom.xml index 1d4b089e99..64098c280e 100644 --- a/rm-community/rm-community-repo/pom.xml +++ b/rm-community/rm-community-repo/pom.xml @@ -9,7 +9,7 @@ org.alfresco alfresco-rm-community - 2.5.1-SNAPSHOT + 2.5.1 From 2243ff1c0903ee0ca42ec4b7237b98a1ebd1ab5f Mon Sep 17 00:00:00 2001 From: alfresco-build Date: Wed, 22 Feb 2017 15:37:47 +0000 Subject: [PATCH 60/61] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- rm-automation/pom.xml | 2 +- rm-community/pom.xml | 2 +- rm-community/rm-community-repo/pom.xml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 9b533b52c5..efad0cc23e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.alfresco alfresco-rm pom - 2.5.1 + 2.5.2-SNAPSHOT Alfresco Records Management @@ -24,7 +24,7 @@ scm:git:https://git.alfresco.com/records-management/records-management.git scm:git:https://git.alfresco.com/records-management/records-management.git https://git.alfresco.com/records-management/records-management - V2.5.1 + HEAD diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index aa36ce1bee..98e1f6832f 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm - 2.5.1 + 2.5.2-SNAPSHOT diff --git a/rm-community/pom.xml b/rm-community/pom.xml index 50778964f4..43bb9e188a 100644 --- a/rm-community/pom.xml +++ b/rm-community/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm - 2.5.1 + 2.5.2-SNAPSHOT diff --git a/rm-community/rm-community-repo/pom.xml b/rm-community/rm-community-repo/pom.xml index 64098c280e..3d1fa7be44 100644 --- a/rm-community/rm-community-repo/pom.xml +++ b/rm-community/rm-community-repo/pom.xml @@ -9,7 +9,7 @@ org.alfresco alfresco-rm-community - 2.5.1 + 2.5.2-SNAPSHOT From 39cf937e4d80972092a9887c943ed09f9635b6f4 Mon Sep 17 00:00:00 2001 From: David Webster Date: Wed, 22 Feb 2017 16:21:20 +0000 Subject: [PATCH 61/61] Update versions ready for 2.5.1.1 work --- pom.xml | 2 +- rm-automation/pom.xml | 2 +- rm-community/pom.xml | 2 +- rm-community/rm-community-repo/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index efad0cc23e..5c8ce751b6 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.alfresco alfresco-rm pom - 2.5.2-SNAPSHOT + 2.5.1.1-SNAPSHOT Alfresco Records Management diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 98e1f6832f..c20b54295a 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm - 2.5.2-SNAPSHOT + 2.5.1.1-SNAPSHOT diff --git a/rm-community/pom.xml b/rm-community/pom.xml index 43bb9e188a..1290c86b62 100644 --- a/rm-community/pom.xml +++ b/rm-community/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm - 2.5.2-SNAPSHOT + 2.5.1.1-SNAPSHOT diff --git a/rm-community/rm-community-repo/pom.xml b/rm-community/rm-community-repo/pom.xml index 3d1fa7be44..719ec4407d 100644 --- a/rm-community/rm-community-repo/pom.xml +++ b/rm-community/rm-community-repo/pom.xml @@ -9,7 +9,7 @@ org.alfresco alfresco-rm-community - 2.5.2-SNAPSHOT + 2.5.1.1-SNAPSHOT