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 48669ad6b3..82b26ed7b6 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 @@ -69,22 +69,30 @@ public class DeclareRecordAction extends RMActionExecuterAbstractBase // Aspect not already defined - check mandatory properties then add if (mandatoryPropertiesSet(actionedUponNodeRef, missingProperties) == true) { - // Add the declared aspect - Map declaredProps = new HashMap(2); - declaredProps.put(PROP_DECLARED_AT, new Date()); - declaredProps.put(PROP_DECLARED_BY, AuthenticationUtil.getRunAsUser()); - this.nodeService.addAspect(actionedUponNodeRef, ASPECT_DECLARED_RECORD, declaredProps); - - AuthenticationUtil.runAsSystem(new RunAsWork() - { - @Override - public Void doWork() throws Exception - { - // remove all owner related rights - ownableService.setOwner(actionedUponNodeRef, OwnableService.NO_OWNER); - return null; - } - }); + recordService.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()); + this.nodeService.addAspect(actionedUponNodeRef, ASPECT_DECLARED_RECORD, declaredProps); + + AuthenticationUtil.runAsSystem(new RunAsWork() + { + @Override + public Void doWork() throws Exception + { + // remove all owner related rights + ownableService.setOwner(actionedUponNodeRef, OwnableService.NO_OWNER); + return null; + } + }); + } + finally + { + recordService.enablePropertyEditableCheck(); + } } else { diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java index b0c0a05a81..bf8073236c 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java @@ -35,6 +35,16 @@ import org.alfresco.service.namespace.QName; */ public interface RecordService { + /** + * Disables the property editable check. + */ + void disablePropertyEditableCheck(); + + /** + * Enables the property editable check. By default this is always enabled. + */ + void enablePropertyEditableCheck(); + /** * Gets a list of all the record meta-data aspects * diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java index 861d7f3f9f..da780f68fd 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java @@ -416,6 +416,24 @@ public class RecordServiceImpl implements RecordService, onUpdateProperties.enable(); } } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#disablePropertyEditableCheck() + */ + @Override + public void disablePropertyEditableCheck() + { + onUpdateProperties.disable(); + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#enablePropertyEditableCheck() + */ + @Override + public void enablePropertyEditableCheck() + { + onUpdateProperties.enable(); + } /** * @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#getRecordMetaDataAspects() @@ -1031,6 +1049,12 @@ public class RecordServiceImpl implements RecordService, return result; } + /** + * Helper method that indicates whether a property is considered record metadata or not. + * + * @param property property + * @return boolea true if record metadata, false otherwise + */ private boolean isRecordMetadata(QName property) { boolean result = ArrayUtils.contains(RECORD_MODEL_URIS, property.getNamespaceURI());