diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties
index 16fa990e93..7aa485093b 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties
@@ -74,7 +74,7 @@ rm.classification.exemptionCategoriesFile=/alfresco/module/org_alfresco_module_r
rm.content.cleansing.enabled=false
rm.content.cleaner=contentCleanser.522022M
-## Indicates whether mandatory properties are checked before completing a record
+# Indicates whether mandatory properties are checked before completing a record
#
rm.completerecord.mandatorypropertiescheck.enabled=true
diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-security-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-security-context.xml
index c8a93a897b..1d25bb38b2 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-security-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-security-context.xml
@@ -22,7 +22,7 @@
-
+
diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_es.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_es.properties
index c5437aed8f..e086dc762d 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_es.properties
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/admin-service_es.properties
@@ -8,9 +8,9 @@ rm.admin.custom-prop-exist=El modelo personalizado no contiene la propiedad ''{0
rm.admin.unknown-aspect=Aspecto desconocido ''{0}''.
rm.admin.constraint-exists=La restricci\u00f3n ''{0}'' ya existe.
rm.admin.contraint-cannot-find=No se puede encontrar la definici\u00f3n para la restricci\u00f3n ''{0}''.
-rm.admin.unexpected_type_constraint=Tipo ineseperado ''{0}'' para la restricci\u00f3n ''{1}''. The expected is ''{2}''.
+rm.admin.unexpected_type_constraint=Tipo inesperado ''{0}'' para la restricci\u00f3n ''{1}''. Lo esperado es ''{2}''.
rm.admin.custom-model-not-found=No se puede encontrar el modelo personalizado ''{0}''.
-rm.admin.custom-model-no-content=El modelo personalizado no t (nodeRef={0})
+rm.admin.custom-model-no-content=El modelo personalizado no tiene contenido (nodeRef={0})
rm.admin.error-write-custom-model=Error al escribir contenido de modelo personalizado. (nodeRef={0})
rm.admin.error-client-id=Error al generar el identificador del cliente porque ya est\u00e1 en uso. (clientid={0})
rm.admin.error-split-id=No se puede separar el identificador ''{0}'', porque el separador ''{1}'' no est\u00e1 presente.
\ No newline at end of file
diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml
index 614cd7ad0c..184ba003c1 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml
@@ -266,7 +266,7 @@
-
+
@@ -385,6 +385,7 @@
+
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java
index 1d946695fb..50d51fd4f3 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java
@@ -54,6 +54,17 @@ public class DeclareRecordAction extends RMActionExecuterAbstractBase
/** Logger */
private static Log logger = LogFactory.getLog(DeclareRecordAction.class);
+
+ /** check mandatory properties */
+ private boolean checkMandatoryPropertiesEnabled = true;
+
+ /**
+ * @param checkMandatoryPropertiesEnabled true if check mandatory properties is enabled, false otherwise
+ */
+ public void setCheckMandatoryPropertiesEnabled(boolean checkMandatoryPropertiesEnabled)
+ {
+ this.checkMandatoryPropertiesEnabled = checkMandatoryPropertiesEnabled;
+ }
/**
* @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action, org.alfresco.service.cmr.repository.NodeRef)
@@ -69,7 +80,8 @@ public class DeclareRecordAction extends RMActionExecuterAbstractBase
{
List missingProperties = new ArrayList(5);
// Aspect not already defined - check mandatory properties then add
- if (mandatoryPropertiesSet(actionedUponNodeRef, missingProperties))
+ if (!checkMandatoryPropertiesEnabled ||
+ mandatoryPropertiesSet(actionedUponNodeRef, missingProperties))
{
getRecordService().disablePropertyEditableCheck();
try
diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/dod/RM1194ExcludeDoDRecordTypesTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/dod/RM1194ExcludeDoDRecordTypesTest.java
index 5019fc9114..f44d4bb753 100755
--- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/dod/RM1194ExcludeDoDRecordTypesTest.java
+++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/dod/RM1194ExcludeDoDRecordTypesTest.java
@@ -108,7 +108,7 @@ public class RM1194ExcludeDoDRecordTypesTest extends BaseRMTestCase implements D
assertNotNull(record);
Set aspects = recordService.getRecordMetadataAspects(record);
assertNotNull(aspects);
- assertEquals(1, aspects.size());
+ assertEquals(2, aspects.size());
}
});
}
diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/record/CompleteRecordTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/record/CompleteRecordTest.java
new file mode 100644
index 0000000000..c86a12e277
--- /dev/null
+++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/record/CompleteRecordTest.java
@@ -0,0 +1,233 @@
+/*
+ * Copyright (C) 2005-2014 Alfresco Software Limited.
+ *
+ * This file is part of Alfresco
+ *
+ * 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 .
+ */
+package org.alfresco.module.org_alfresco_module_rm.test.integration.record;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionResult;
+import org.alfresco.module.org_alfresco_module_rm.action.impl.DeclareRecordAction;
+import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.namespace.QName;
+
+/**
+ * Complete record tests.
+ *
+ * @author Roy Wetherall
+ * @since 2.2.1
+ */
+public class CompleteRecordTest extends BaseRMTestCase
+{
+ private static final QName ASPECT_TEST = QName.createQName("http://www.alfresco.org/model/rmtest/1.0", "recordMetaDataWithProperty");
+ private static final QName PROP_TEST = QName.createQName("http://www.alfresco.org/model/rmtest/1.0", "customMandatoryProperty");
+
+ /** complete record action */
+ private DeclareRecordAction action;
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase#initServices()
+ */
+ @Override
+ protected void initServices()
+ {
+ super.initServices();
+
+ // get the action
+ action = (DeclareRecordAction)applicationContext.getBean("declareRecord");
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase#tearDownImpl()
+ */
+ @Override
+ protected void tearDownImpl()
+ {
+ super.tearDownImpl();
+
+ // ensure action is returned to original state
+ action.setCheckMandatoryPropertiesEnabled(true);
+ }
+
+ /**
+ * Given the the application is configured to check for mandatory values before complete
+ * And a filed record is missing mandatory values
+ * When I try to complete the record
+ * Then the missing properties parameter of the action will be populated
+ * And the record will not be complete
+ */
+ public void testCheckForMandatoryValuesMissing() throws Exception
+ {
+ doBehaviourDrivenTest(new BehaviourDrivenTest()
+ {
+ private NodeRef record;
+ private RecordsManagementActionResult result;
+
+ public void given()
+ {
+ // enable mandatory parameter check
+ action.setCheckMandatoryPropertiesEnabled(true);
+
+ // create a record
+ record = utils.createRecord(rmFolder, "record.txt", "title");
+
+ // add the record aspect (that has a mandatory property)
+ nodeService.addAspect(record, ASPECT_TEST, null);
+ }
+
+ public void when()
+ {
+ // complete record
+ result = rmActionService.executeRecordsManagementAction(record, "declareRecord");
+ }
+
+ public void then()
+ {
+ assertNotNull(result);
+ assertNotNull(result.getValue());
+ assertFalse(nodeService.hasAspect(record, ASPECT_DECLARED_RECORD));
+ }
+ });
+ }
+
+ /**
+ * Given the the application is configured to check for mandatory values before complete
+ * And a filed record has all mandatory values
+ * When I try to complete the record
+ * Then the record is completed
+ */
+ public void testCheckForMandatoryValuePresent() throws Exception
+ {
+ doBehaviourDrivenTest(new BehaviourDrivenTest()
+ {
+ private NodeRef record;
+ private RecordsManagementActionResult result;
+
+ public void given()
+ {
+ // enable mandatory parameter check
+ action.setCheckMandatoryPropertiesEnabled(true);
+
+ // create a record
+ record = utils.createRecord(rmFolder, "record.txt", "title");
+
+ // add the record aspect (that has a mandatory property)
+ Map properties = new HashMap(1);
+ properties.put(PROP_TEST, "something");
+ nodeService.addAspect(record, ASPECT_TEST, properties);
+ }
+
+ public void when()
+ {
+ // complete record
+ result = rmActionService.executeRecordsManagementAction(record, "declareRecord");
+ }
+
+ public void then()
+ {
+ assertNotNull(result);
+ assertNull(result.getValue());
+ assertTrue(nodeService.hasAspect(record, ASPECT_DECLARED_RECORD));
+ }
+ });
+ }
+
+ /**
+ * Given the the application is configured not to check for mandatory values before complete
+ * And a filed record is missing mandatory values
+ * When I try to complete the record
+ * Then the record is completed
+ */
+ public void testDontCheckForMandatoryValuesMissing() throws Exception
+ {
+ doBehaviourDrivenTest(new BehaviourDrivenTest()
+ {
+ private NodeRef record;
+ private RecordsManagementActionResult result;
+
+ public void given()
+ {
+ // disable mandatory parameter check
+ action.setCheckMandatoryPropertiesEnabled(false);
+
+ // create a record
+ record = utils.createRecord(rmFolder, "record.txt", "title");
+
+ // add the record aspect (that has a mandatory property)
+ nodeService.addAspect(record, ASPECT_TEST, null);
+ }
+
+ public void when()
+ {
+ // complete record
+ result = rmActionService.executeRecordsManagementAction(record, "declareRecord");
+ }
+
+ public void then()
+ {
+ assertNotNull(result);
+ assertNull(result.getValue());
+ assertTrue(nodeService.hasAspect(record, ASPECT_DECLARED_RECORD));
+ }
+ });
+ }
+
+ /**
+ * Given the the application is configured to not to check for mandatory values before complete
+ * And a filed record has all mandatory values
+ * When I try to complete the record
+ * Then the record is completed
+ */
+ public void testDontCheckForMandatoryValuePresent() throws Exception
+ {
+ doBehaviourDrivenTest(new BehaviourDrivenTest()
+ {
+ private NodeRef record;
+ private RecordsManagementActionResult result;
+
+ public void given()
+ {
+ // enable mandatory parameter check
+ action.setCheckMandatoryPropertiesEnabled(false);
+
+ // create a record
+ record = utils.createRecord(rmFolder, "record.txt", "title");
+
+ // add the record aspect (that has a mandatory property)
+ Map properties = new HashMap(1);
+ properties.put(PROP_TEST, "something");
+ nodeService.addAspect(record, ASPECT_TEST, properties);
+ }
+
+ public void when()
+ {
+ // complete record
+ result = rmActionService.executeRecordsManagementAction(record, "declareRecord");
+ }
+
+ public void then()
+ {
+ assertNotNull(result);
+ assertNull(result.getValue());
+ assertTrue(nodeService.hasAspect(record, ASPECT_DECLARED_RECORD));
+ }
+ });
+ }
+}
diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordServiceImplTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordServiceImplTest.java
index 600a54854d..1cf86bb235 100644
--- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordServiceImplTest.java
+++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordServiceImplTest.java
@@ -93,7 +93,7 @@ public class RecordServiceImplTest extends BaseRMTestCase
{
Set aspects = recordService.getRecordMetadataAspects(filePlan);
assertNotNull(aspects);
- assertEquals(1, aspects.size());
+ assertEquals(2, aspects.size());
assertTrue(aspects.containsAll(getAspectList()));
return null;
diff --git a/rm-server/test/resources/test-context.xml b/rm-server/test/resources/test-context.xml
index 638686efda..f00d3e56b6 100644
--- a/rm-server/test/resources/test-context.xml
+++ b/rm-server/test/resources/test-context.xml
@@ -217,7 +217,14 @@
-
+
+
+
+
+
+
false
diff --git a/rm-server/test/resources/test-model.xml b/rm-server/test/resources/test-model.xml
index 2f7b137c3a..41869338d5 100644
--- a/rm-server/test/resources/test-model.xml
+++ b/rm-server/test/resources/test-model.xml
@@ -54,6 +54,15 @@
+
+
+
+
+ d:text
+ true
+
+
+