diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/records/CompleteRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/records/CompleteRecordTests.java index d2d241e02f..a46a3dd5bf 100644 --- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/records/CompleteRecordTests.java +++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/records/CompleteRecordTests.java @@ -61,7 +61,7 @@ public class CompleteRecordTests extends BaseRMRestTest { private static final Boolean COMPLETE = true; private static final Boolean INCOMPLETE = false; - private static final String parameters = "include=isCompleted"; + private static final String PARAMETERS = "include=isCompleted"; /** * Incomplete records with mandatory meta-data missing @@ -106,7 +106,7 @@ public class CompleteRecordTests extends BaseRMRestTest /** *
* Given the repository is configured to check mandatory data before completing a record - * And an incomplete record with missing mandatory meta-data + * And an incomplete record with its mandatory meta-data missing * When I complete the record * Then I receive an error indicating that I can't complete the operation, * because some of the mandatory meta-data of the record is missing @@ -183,7 +183,7 @@ public class CompleteRecordTests extends BaseRMRestTest { // Get the recordsAPI RecordsAPI recordsAPI = getRestAPIFactory().getRecordsAPI(); - recordsAPI.completeRecord(nonRecordId, parameters); + recordsAPI.completeRecord(nonRecordId, PARAMETERS); assertStatusCode(BAD_REQUEST); } @@ -277,7 +277,7 @@ public class CompleteRecordTests extends BaseRMRestTest private void verifyRecordCompletionStatus(Record record, Boolean completionStatus) { RecordsAPI recordsAPI = getRestAPIFactory().getRecordsAPI(); - Record recordModel = recordsAPI.getRecord(record.getId(), parameters); + Record recordModel = recordsAPI.getRecord(record.getId(), PARAMETERS); assertEquals(recordModel.getIsCompleted(), completionStatus); } @@ -287,6 +287,6 @@ public class CompleteRecordTests extends BaseRMRestTest private void completeRecord(Record record) throws Exception { RecordsAPI recordsAPI = getRestAPIFactory().getRecordsAPI(); - recordsAPI.completeRecord(record.getId(), parameters); + recordsAPI.completeRecord(record.getId(), PARAMETERS); } } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java index 7c8c6ba1df..c468f109ac 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java @@ -27,6 +27,9 @@ package org.alfresco.module.org_alfresco_module_rm.action.impl; +import java.util.HashMap; +import java.util.Map; + import org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.repo.action.executer.ActionExecuterAbstractBase; @@ -42,6 +45,8 @@ import org.alfresco.util.ParameterCheck; */ public class DeclareRecordAction extends RMActionExecuterAbstractBase { + private static final String MISSING_PROPERTIES = "missingProperties"; + /** action name */ public static final String NAME = "declareRecord"; @@ -71,11 +76,25 @@ public class DeclareRecordAction extends RMActionExecuterAbstractBase } catch (IntegrityException e) { - if (e.getMessage().contains("missing")) + MaperrorMap = getErrorMessageMap(); + if (e.getMsgId().equals(errorMap.get(MISSING_PROPERTIES))) { - action.setParameterValue(ActionExecuterAbstractBase.PARAM_RESULT, "missingProperties"); + action.setParameterValue(ActionExecuterAbstractBase.PARAM_RESULT, MISSING_PROPERTIES); } } } + + /** + * TODO: needs to be properties file + * Temporary Helper method to get the map of complete record error message keys with associated message text + * @return errorMap + */ + private Map getErrorMessageMap() { + Map errorMap = new HashMap<>(); + errorMap.put("missingProperties", "The record has missing mandatory properties."); + errorMap.put("alreadyCompleted", "The record is already completed."); + errorMap.put("unsuitableNode", "The node is not a record or the record does not exist or is frozen."); + return errorMap; + } } 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 b614ab292a..3dc1c547b9 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 @@ -1972,6 +1972,39 @@ public class RecordServiceImpl extends BaseBehaviourBean @Override public void complete(NodeRef nodeRef) { + validateForCompletion(nodeRef); + disablePropertyEditableCheck(); + try + { + // Add the declared aspect + Map declaredProps = new HashMap<>(2); + declaredProps.put(PROP_DECLARED_AT, new Date()); + declaredProps.put(PROP_DECLARED_BY, AuthenticationUtil.getRunAsUser()); + nodeService.addAspect(nodeRef, ASPECT_DECLARED_RECORD, declaredProps); + + AuthenticationUtil.runAsSystem(new RunAsWork () + { + @Override + public Void doWork() + { + // remove all owner related rights + ownableService.setOwner(nodeRef, OwnableService.NO_OWNER); + return null; + } + }); + } finally + { + enablePropertyEditableCheck(); + } + } + + /** + * Helper method to validate whether the node is in a state suitable for completion + * + * @param nodeRef node reference + * @throws Exception if node not valid for completion + */ + private void validateForCompletion(NodeRef nodeRef) { if (nodeService.exists(nodeRef) && isRecord(nodeRef) && !freezeService.isFrozen(nodeRef)) { if (!isDeclared(nodeRef)) @@ -1985,32 +2018,7 @@ public class RecordServiceImpl extends BaseBehaviourBean List missingProperties = new ArrayList<>(5); // Aspect not already defined - check mandatory properties then add - if (!checkMandatoryPropertiesEnabled || mandatoryPropertiesSet(nodeRef, missingProperties)) - { - disablePropertyEditableCheck(); - try - { - // Add the declared aspect - Map declaredProps = new HashMap<>(2); - declaredProps.put(PROP_DECLARED_AT, new Date()); - declaredProps.put(PROP_DECLARED_BY, AuthenticationUtil.getRunAsUser()); - nodeService.addAspect(nodeRef, ASPECT_DECLARED_RECORD, declaredProps); - - AuthenticationUtil.runAsSystem(new RunAsWork () - { - @Override - public Void doWork() - { - // remove all owner related rights - ownableService.setOwner(nodeRef, OwnableService.NO_OWNER); - return null; - } - }); - } finally - { - enablePropertyEditableCheck(); - } - } else + if (checkMandatoryPropertiesEnabled && !mandatoryPropertiesSet(nodeRef, missingProperties)) { LOGGER.debug(buildMissingPropertiesErrorString(missingProperties)); throw new IntegrityException("The record has missing mandatory properties.", null); @@ -2025,10 +2033,9 @@ public class RecordServiceImpl extends BaseBehaviourBean { LOGGER.warn(I18NUtil.getMessage(MSG_UNDECLARED_ONLY_RECORDS, nodeRef.toString())); } - throw new IntegrityException("The record does not exist or is frozen.", null); + throw new IntegrityException("The node is not a record or the record does not exist or is frozen.", null); } } - private String buildMissingPropertiesErrorString(List missingProperties) { StringBuilder builder = new StringBuilder(255); @@ -2087,29 +2094,17 @@ public class RecordServiceImpl extends BaseBehaviourBean { if (propDef.isMandatory() && nodeRefProps.get(propDef.getName()) == null) { - logMissingProperty(propDef, missingProperties); - ; + if (LOGGER.isWarnEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Mandatory property missing: ").append(propDef.getName()); + LOGGER.warn(msg.toString()); + } + missingProperties.add(propDef.getName().toString()); } } } - /** - * Log information about missing properties. - * - * @param propDef property definition - * @param missingProperties missing properties - */ - private void logMissingProperty(PropertyDefinition propDef, List missingProperties) - { - if (LOGGER.isWarnEnabled()) - { - StringBuilder msg = new StringBuilder(); - msg.append("Mandatory property missing: ").append(propDef.getName()); - LOGGER.warn(msg.toString()); - } - missingProperties.add(propDef.getName().toString()); - } - /** * Helper method to get the custom aspect for a given nodeRef type *