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 e974983d32..20672a5092 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
@@ -918,6 +918,7 @@
+
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/AddRecordTypeAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/AddRecordTypeAction.java
index fe2c8074b3..6fe4da7a43 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/AddRecordTypeAction.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/AddRecordTypeAction.java
@@ -58,8 +58,10 @@ public class AddRecordTypeAction extends RMActionExecuterAbstractBase
*/
@Override
protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
- {
- if (recordService.isRecord(actionedUponNodeRef))
+ {
+ if (nodeService.exists(actionedUponNodeRef) == true &&
+ freezeService.isFrozen(actionedUponNodeRef) == false &&
+ recordService.isRecord(actionedUponNodeRef) == true)
{
String recordTypes = (String) action.getParameterValue(PARAM_ADD_RECORD_TYPES);
String[] types = recordTypes.split(",");
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CloseRecordFolderAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CloseRecordFolderAction.java
index e027913bb2..b879e35d2a 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CloseRecordFolderAction.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CloseRecordFolderAction.java
@@ -38,7 +38,7 @@ public class CloseRecordFolderAction extends RMActionExecuterAbstractBase
/** I18N */
private static final String MSG_CLOSE_RECORD_FOLDER_NOT_FOLDER = "rm.action.close-record-folder-not-folder";
-
+
/** Parameter names */
public static final String PARAM_CLOSE_PARENT = "closeParent";
@@ -49,29 +49,31 @@ public class CloseRecordFolderAction extends RMActionExecuterAbstractBase
@Override
protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
{
- // TODO check that the user in question has the correct permissions to close a records folder
+ if (nodeService.exists(actionedUponNodeRef) == true &&
+ freezeService.isFrozen(actionedUponNodeRef) == false)
+ {
+ if (recordService.isRecord(actionedUponNodeRef))
+ {
+ ChildAssociationRef assocRef = nodeService.getPrimaryParent(actionedUponNodeRef);
+ if (assocRef != null)
+ {
+ actionedUponNodeRef = assocRef.getParentRef();
+ }
+ }
- if (recordService.isRecord(actionedUponNodeRef))
- {
- ChildAssociationRef assocRef = nodeService.getPrimaryParent(actionedUponNodeRef);
- if (assocRef != null)
+ if (this.recordsManagementService.isRecordFolder(actionedUponNodeRef) == true)
{
- actionedUponNodeRef = assocRef.getParentRef();
+ Boolean isClosed = (Boolean) this.nodeService.getProperty(actionedUponNodeRef, PROP_IS_CLOSED);
+ if (Boolean.FALSE.equals(isClosed) == true)
+ {
+ this.nodeService.setProperty(actionedUponNodeRef, PROP_IS_CLOSED, true);
+ }
}
- }
-
- if (this.recordsManagementService.isRecordFolder(actionedUponNodeRef) == true)
- {
- Boolean isClosed = (Boolean)this.nodeService.getProperty(actionedUponNodeRef, PROP_IS_CLOSED);
- if (Boolean.FALSE.equals(isClosed) == true)
+ else
{
- this.nodeService.setProperty(actionedUponNodeRef, PROP_IS_CLOSED, true);
+ if (logger.isWarnEnabled())
+ logger.warn(I18NUtil.getMessage(MSG_CLOSE_RECORD_FOLDER_NOT_FOLDER, actionedUponNodeRef.toString()));
}
}
- else
- {
- if (logger.isWarnEnabled())
- logger.warn(I18NUtil.getMessage(MSG_CLOSE_RECORD_FOLDER_NOT_FOLDER, actionedUponNodeRef.toString()));
- }
}
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CompleteEventAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CompleteEventAction.java
index b1c58fa56f..2d94bb510d 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CompleteEventAction.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CompleteEventAction.java
@@ -62,46 +62,50 @@ public class CompleteEventAction extends RMActionExecuterAbstractBase
@Override
protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
{
- String eventName = (String)action.getParameterValue(PARAM_EVENT_NAME);
- String eventCompletedBy = (String)action.getParameterValue(PARAM_EVENT_COMPLETED_BY);
- Date eventCompletedAt = (Date)action.getParameterValue(PARAM_EVENT_COMPLETED_AT);
-
- if (this.nodeService.hasAspect(actionedUponNodeRef, ASPECT_DISPOSITION_LIFECYCLE) == true)
+ if (nodeService.exists(actionedUponNodeRef) == true &&
+ freezeService.isFrozen(actionedUponNodeRef) == false)
{
- // Get the next disposition action
- DispositionAction da = this.dispositionService.getNextDispositionAction(actionedUponNodeRef);
- if (da != null)
+ String eventName = (String)action.getParameterValue(PARAM_EVENT_NAME);
+ String eventCompletedBy = (String)action.getParameterValue(PARAM_EVENT_COMPLETED_BY);
+ Date eventCompletedAt = (Date)action.getParameterValue(PARAM_EVENT_COMPLETED_AT);
+
+ if (this.nodeService.hasAspect(actionedUponNodeRef, ASPECT_DISPOSITION_LIFECYCLE) == true)
{
- // Get the disposition event
- EventCompletionDetails event = getEvent(da, eventName);
- if (event != null)
+ // Get the next disposition action
+ DispositionAction da = this.dispositionService.getNextDispositionAction(actionedUponNodeRef);
+ if (da != null)
{
- if (eventCompletedAt == null)
+ // Get the disposition event
+ EventCompletionDetails event = getEvent(da, eventName);
+ if (event != null)
{
- eventCompletedAt = new Date();
+ if (eventCompletedAt == null)
+ {
+ eventCompletedAt = new Date();
+ }
+
+ if (eventCompletedBy == null)
+ {
+ eventCompletedBy = AuthenticationUtil.getRunAsUser();
+ }
+
+ // Update the event so that it is complete
+ NodeRef eventNodeRef = event.getNodeRef();
+ Map props = this.nodeService.getProperties(eventNodeRef);
+ props.put(PROP_EVENT_EXECUTION_COMPLETE, true);
+ props.put(PROP_EVENT_EXECUTION_COMPLETED_AT, eventCompletedAt);
+ props.put(PROP_EVENT_EXECUTION_COMPLETED_BY, eventCompletedBy);
+ this.nodeService.setProperties(eventNodeRef, props);
+
+ // Check to see if the events eligible property needs to be updated
+ updateEventEligible(da);
+
}
-
- if (eventCompletedBy == null)
+ else
{
- eventCompletedBy = AuthenticationUtil.getRunAsUser();
+ // RM-695: Commenting error handling out. If the current disposition stage does not define the event being completed nothing should happen.
+ // throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_EVENT_NO_DISP_LC, eventName));
}
-
- // Update the event so that it is complete
- NodeRef eventNodeRef = event.getNodeRef();
- Map props = this.nodeService.getProperties(eventNodeRef);
- props.put(PROP_EVENT_EXECUTION_COMPLETE, true);
- props.put(PROP_EVENT_EXECUTION_COMPLETED_AT, eventCompletedAt);
- props.put(PROP_EVENT_EXECUTION_COMPLETED_BY, eventCompletedBy);
- this.nodeService.setProperties(eventNodeRef, props);
-
- // Check to see if the events eligible property needs to be updated
- updateEventEligible(da);
-
- }
- else
- {
- // RM-695: Commenting error handling out. If the current disposition stage does not define the event being completed nothing should happen.
- // throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_EVENT_NO_DISP_LC, eventName));
}
}
}
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 82b26ed7b6..b731d952e7 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
@@ -61,7 +61,9 @@ public class DeclareRecordAction extends RMActionExecuterAbstractBase
@Override
protected void executeImpl(final Action action, final NodeRef actionedUponNodeRef)
{
- if (recordService.isRecord(actionedUponNodeRef) == true)
+ if (nodeService.exists(actionedUponNodeRef) == true &&
+ recordService.isRecord(actionedUponNodeRef) == true &&
+ freezeService.isFrozen(actionedUponNodeRef) == false)
{
if (recordService.isDeclared(actionedUponNodeRef) == false)
{
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DelegateAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DelegateAction.java
index 44e40094f1..c5fd59857a 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DelegateAction.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DelegateAction.java
@@ -39,6 +39,9 @@ public class DelegateAction extends RMActionExecuterAbstractBase
/** Delegate action executer*/
private ActionExecuter delegateActionExecuter;
+ /** should we check whether the node is frozen */
+ private boolean checkFrozen = false;
+
/**
* @param delegateActionExecuter delegate action executer
*/
@@ -46,6 +49,14 @@ public class DelegateAction extends RMActionExecuterAbstractBase
{
this.delegateActionExecuter = delegateActionExecuter;
}
+
+ /**
+ * @param checkFrozen true if we check whether the actioned upon node reference is frozen, false otherwise
+ */
+ public void setCheckFrozen(boolean checkFrozen)
+ {
+ this.checkFrozen = checkFrozen;
+ }
/**
* @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action, org.alfresco.service.cmr.repository.NodeRef)
@@ -53,7 +64,11 @@ public class DelegateAction extends RMActionExecuterAbstractBase
@Override
protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
{
- delegateActionExecuter.execute(action, actionedUponNodeRef);
+ if (nodeService.exists(actionedUponNodeRef) == true &&
+ (checkFrozen == false || freezeService.isFrozen(actionedUponNodeRef) == false))
+ {
+ delegateActionExecuter.execute(action, actionedUponNodeRef);
+ }
}
/**
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/FileToAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/FileToAction.java
index ac7132d962..ff313f5269 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/FileToAction.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/FileToAction.java
@@ -72,7 +72,8 @@ public class FileToAction extends RMActionExecuterAbstractBase
@Override
protected void executeImpl(final Action action, final NodeRef actionedUponNodeRef)
{
- if (nodeService.exists(actionedUponNodeRef) == true)
+ if (nodeService.exists(actionedUponNodeRef) == true &&
+ freezeService.isFrozen(actionedUponNodeRef) == false)
{
if (recordService.isFiled(actionedUponNodeRef) == false)
{
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/OpenRecordFolderAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/OpenRecordFolderAction.java
index 0dcb6f8a4f..3dcd4e3692 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/OpenRecordFolderAction.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/OpenRecordFolderAction.java
@@ -36,6 +36,7 @@ public class OpenRecordFolderAction extends RMActionExecuterAbstractBase
/** Logger */
private static Log logger = LogFactory.getLog(OpenRecordFolderAction.class);
+ /** I18N */
private static final String MSG_NO_OPEN_RECORD_FOLDER = "rm.action.no-open-record-folder";
/** Parameter names */
@@ -48,30 +49,34 @@ public class OpenRecordFolderAction extends RMActionExecuterAbstractBase
@Override
protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
{
- // TODO move re-open logic into a service method
- // TODO check that the user in question has the correct permission to re-open a records folder
-
- if (recordService.isRecord(actionedUponNodeRef))
- {
- ChildAssociationRef assocRef = nodeService.getPrimaryParent(actionedUponNodeRef);
- if (assocRef != null)
- {
- actionedUponNodeRef = assocRef.getParentRef();
- }
- }
-
- if (this.recordsManagementService.isRecordFolder(actionedUponNodeRef) == true)
- {
- Boolean isClosed = (Boolean) this.nodeService.getProperty(actionedUponNodeRef, PROP_IS_CLOSED);
- if (Boolean.TRUE.equals(isClosed) == true)
- {
- this.nodeService.setProperty(actionedUponNodeRef, PROP_IS_CLOSED, false);
- }
- }
- else
- {
- if (logger.isWarnEnabled())
- logger.warn(I18NUtil.getMessage(MSG_NO_OPEN_RECORD_FOLDER, actionedUponNodeRef.toString()));
- }
+ if (nodeService.exists(actionedUponNodeRef) == true &&
+ freezeService.isFrozen(actionedUponNodeRef) == false)
+ {
+ // TODO move re-open logic into a service method
+ // TODO check that the user in question has the correct permission to re-open a records folder
+
+ if (recordService.isRecord(actionedUponNodeRef))
+ {
+ ChildAssociationRef assocRef = nodeService.getPrimaryParent(actionedUponNodeRef);
+ if (assocRef != null)
+ {
+ actionedUponNodeRef = assocRef.getParentRef();
+ }
+ }
+
+ if (this.recordsManagementService.isRecordFolder(actionedUponNodeRef) == true)
+ {
+ Boolean isClosed = (Boolean) this.nodeService.getProperty(actionedUponNodeRef, PROP_IS_CLOSED);
+ if (Boolean.TRUE.equals(isClosed) == true)
+ {
+ this.nodeService.setProperty(actionedUponNodeRef, PROP_IS_CLOSED, false);
+ }
+ }
+ else
+ {
+ if (logger.isWarnEnabled())
+ logger.warn(I18NUtil.getMessage(MSG_NO_OPEN_RECORD_FOLDER, actionedUponNodeRef.toString()));
+ }
+ }
}
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/RejectAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/RejectAction.java
index 0dba20309d..cc2aacd104 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/RejectAction.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/RejectAction.java
@@ -48,6 +48,7 @@ public class RejectAction extends RMActionExecuterAbstractBase
protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
{
if (nodeService.exists(actionedUponNodeRef) == true &&
+ freezeService.isFrozen(actionedUponNodeRef) == false &&
nodeService.getProperty(actionedUponNodeRef, PROP_RECORD_ORIGINATING_LOCATION) != null)
{
recordService.rejectRecord(actionedUponNodeRef, (String) action.getParameterValue(PARAM_REASON));
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UndeclareRecordAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UndeclareRecordAction.java
index ad70dc57ed..40ccf95d07 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UndeclareRecordAction.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UndeclareRecordAction.java
@@ -44,20 +44,25 @@ public class UndeclareRecordAction extends RMActionExecuterAbstractBase
@Override
protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
{
- if (recordService.isRecord(actionedUponNodeRef) == true)
- {
- if (recordService.isDeclared(actionedUponNodeRef) == true)
- {
- // Remove the declared aspect
- this.nodeService.removeAspect(actionedUponNodeRef, ASPECT_DECLARED_RECORD);
- }
- }
- else
- {
- if (logger.isWarnEnabled())
- {
- logger.warn(I18NUtil.getMessage(MSG_RECORDS_ONLY_UNDECLARED));
- }
- }
+ if (nodeService.exists(actionedUponNodeRef) == true)
+ {
+ if (recordService.isRecord(actionedUponNodeRef) == true)
+ {
+ // repoen if already complete and not frozen
+ if (recordService.isDeclared(actionedUponNodeRef) == true &&
+ freezeService.isFrozen(actionedUponNodeRef) == false)
+ {
+ // Remove the declared aspect
+ this.nodeService.removeAspect(actionedUponNodeRef, ASPECT_DECLARED_RECORD);
+ }
+ }
+ else
+ {
+ if (logger.isWarnEnabled())
+ {
+ logger.warn(I18NUtil.getMessage(MSG_RECORDS_ONLY_UNDECLARED));
+ }
+ }
+ }
}
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/security/ModelSecurityService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/security/ModelSecurityService.java
index 5dc8db2285..6beaf4ce19 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/security/ModelSecurityService.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/security/ModelSecurityService.java
@@ -32,7 +32,7 @@ import org.alfresco.service.namespace.QName;
public interface ModelSecurityService
{
/**
- * Sets whether model security is enabled or not.
+ * Sets whether model security is enabled globally or not.
*
* @param enabled
*/
@@ -45,6 +45,16 @@ public interface ModelSecurityService
*/
boolean isEnabled();
+ /**
+ * Disable model security checks for the current thread.
+ */
+ void disable();
+
+ /**
+ * Enable model security checks for the current thread.
+ */
+ void enable();
+
/**
* Registers a protected model artifact with the service.
*
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/security/ModelSecurityServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/security/ModelSecurityServiceImpl.java
index 9e0f85a4b3..153552f397 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/security/ModelSecurityServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/security/ModelSecurityServiceImpl.java
@@ -153,6 +153,28 @@ public class ModelSecurityServiceImpl implements ModelSecurityService,
this,
onUpdatePropertiesBehaviour);
}
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.model.security.ModelSecurityService#disable()
+ */
+ @Override
+ public void disable()
+ {
+ beforeAddAspectBehaviour.disable();
+ beforeRemoveAspectBehaviour.disable();
+ onUpdatePropertiesBehaviour.disable();
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.model.security.ModelSecurityService#enable()
+ */
+ @Override
+ public void enable()
+ {
+ beforeAddAspectBehaviour.enable();
+ beforeRemoveAspectBehaviour.enable();
+ onUpdatePropertiesBehaviour.enable();
+ }
/**
* @see org.alfresco.module.org_alfresco_module_rm.model.security.ModelSecurityService#register(org.alfresco.module.org_alfresco_module_rm.model.security.ProtectedModelArtifact)
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleServiceImpl.java
index e473009b9e..f034365883 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleServiceImpl.java
@@ -74,7 +74,7 @@ import org.springframework.extensions.surf.util.I18NUtil;
* @since 2.1
*/
public class FilePlanRoleServiceImpl implements FilePlanRoleService,
- RecordsManagementModel
+ RecordsManagementModel
{
/** I18N */
private static final String MSG_FIRST_NAME = "bootstrap.rmadmin.firstName";
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java
index 1ec0acae86..0fa9ad8e19 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/ExtendedSecurityServiceImpl.java
@@ -271,7 +271,8 @@ public class ExtendedSecurityServiceImpl extends ServiceBaseImpl
for (String authority : authorities)
{
- if (authority.equals(PermissionService.ALL_AUTHORITIES) == false)
+ if (authority.equals(PermissionService.ALL_AUTHORITIES) == false &&
+ authority.equals(PermissionService.OWNER_AUTHORITY) == false)
{
if (referenceCountMap == null ||
referenceCountMap.containsKey(authority) == false)
diff --git a/rm-server/source/java/org/alfresco/repo/rule/ExtendedRuleServiceImpl.java b/rm-server/source/java/org/alfresco/repo/rule/ExtendedRuleServiceImpl.java
index dcfc7643da..6577209469 100644
--- a/rm-server/source/java/org/alfresco/repo/rule/ExtendedRuleServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/repo/rule/ExtendedRuleServiceImpl.java
@@ -23,6 +23,7 @@ import java.util.Set;
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
+import org.alfresco.module.org_alfresco_module_rm.model.security.ModelSecurityService;
import org.alfresco.module.org_alfresco_module_rm.security.FilePlanAuthenticationService;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
@@ -39,36 +40,67 @@ import org.alfresco.service.namespace.QName;
*/
public class ExtendedRuleServiceImpl extends RuleServiceImpl
{
+ /** indicates whether the rules should be run as rmadmin or not */
private boolean runAsRmAdmin = true;
+ /** ignore types */
private Set ignoredTypes = new HashSet();
+ /** file plan service */
private FilePlanService filePlanService;
+ /** file plan authentication service */
private FilePlanAuthenticationService filePlanAuthenticationService;
+ /** node service */
protected NodeService nodeService;
+ /** model security service */
+ protected ModelSecurityService modelSecurityService;
+
+ /**
+ * @param runAsRmAdmin true if run rules as rmadmin, false otherwise
+ */
public void setRunAsRmAdmin(boolean runAsRmAdmin)
{
this.runAsRmAdmin = runAsRmAdmin;
}
+ /**
+ * @param filePlanAuthenticationService file plan authentication service
+ */
public void setFilePlanAuthenticationService(FilePlanAuthenticationService filePlanAuthenticationService)
{
this.filePlanAuthenticationService = filePlanAuthenticationService;
}
+ /**
+ * @param nodeService node service
+ */
public void setNodeService2(NodeService nodeService)
{
this.nodeService = nodeService;
}
+ /**
+ * @param filePlanService file plan service
+ */
public void setFilePlanService(FilePlanService filePlanService)
{
this.filePlanService = filePlanService;
}
+
+ /**
+ * @param modelSecurityService model security service
+ */
+ public void setModelSecurityService(ModelSecurityService modelSecurityService)
+ {
+ this.modelSecurityService = modelSecurityService;
+ }
+ /**
+ * Init method
+ */
@Override
public void init()
{
@@ -81,10 +113,13 @@ public class ExtendedRuleServiceImpl extends RuleServiceImpl
ignoredTypes.add(RecordsManagementModel.TYPE_EVENT_EXECUTION);
}
+ /**
+ * @see org.alfresco.repo.rule.RuleServiceImpl#saveRule(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.rule.Rule)
+ */
@Override
public void saveRule(final NodeRef nodeRef, final Rule rule)
{
- if (filePlanService.isFilePlanComponent(nodeRef) == true && runAsRmAdmin == true)
+ if (filePlanService.isFilePlanComponent(nodeRef) == true)
{
AuthenticationUtil.runAsSystem(new RunAsWork()
{
@@ -103,10 +138,13 @@ public class ExtendedRuleServiceImpl extends RuleServiceImpl
}
}
+ /**
+ * @see org.alfresco.repo.rule.RuleServiceImpl#removeRule(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.rule.Rule)
+ */
@Override
public void removeRule(final NodeRef nodeRef, final Rule rule)
{
- if (filePlanService.isFilePlanComponent(nodeRef) == true && runAsRmAdmin == true)
+ if (filePlanService.isFilePlanComponent(nodeRef) == true)
{
AuthenticationUtil.runAsSystem(new RunAsWork()
{
@@ -125,27 +163,50 @@ public class ExtendedRuleServiceImpl extends RuleServiceImpl
}
}
+ /**
+ * @see org.alfresco.repo.rule.RuleServiceImpl#executeRule(org.alfresco.service.cmr.rule.Rule, org.alfresco.service.cmr.repository.NodeRef, java.util.Set)
+ */
@Override
public void executeRule(final Rule rule, final NodeRef nodeRef, final Set executedRules)
{
QName typeQName = nodeService.getType(nodeRef);
- if (filePlanService.isFilePlanComponent(nodeRef) == true
- && isFilePlanComponentRule(rule) == true && runAsRmAdmin == true)
+ // check if this is a rm rule on a rm artifact
+ if (filePlanService.isFilePlanComponent(nodeRef) == true &&
+ isFilePlanComponentRule(rule) == true)
{
+ // ignore and
if (isIgnoredType(typeQName) == false)
- {
- String user = AuthenticationUtil.getFullyAuthenticatedUser();
- try
- {
- AuthenticationUtil.setFullyAuthenticatedUser(filePlanAuthenticationService.getRmAdminUserName());
- ExtendedRuleServiceImpl.super.executeRule(rule, nodeRef, executedRules);
- }
- finally
- {
- AuthenticationUtil.setFullyAuthenticatedUser(user);
- }
- }
+ {
+ // disable model security whilst we execute the RM rule
+ //modelSecurityService.disable();
+ //try
+ //{
+ if (runAsRmAdmin == true)
+ {
+ // run as rmadmin
+ filePlanAuthenticationService.runAsRmAdmin(new RunAsWork()
+ {
+ @Override
+ public Void doWork() throws Exception
+ {
+ ExtendedRuleServiceImpl.super.executeRule(rule, nodeRef, executedRules);
+ return null;
+ }
+ });
+ }
+ else
+ {
+ // run as current user
+ ExtendedRuleServiceImpl.super.executeRule(rule, nodeRef, executedRules);
+ }
+ //}
+ //finally
+ //{
+ // enable model security
+ // modelSecurityService.enable();
+ //}
+ }
}
else
{
@@ -154,6 +215,12 @@ public class ExtendedRuleServiceImpl extends RuleServiceImpl
}
}
+ /**
+ * Indicates whether the rule is a file plan component
+ *
+ * @param rule rule
+ * @return boolean true if rule is set on a file plan component, false otherwise
+ */
private boolean isFilePlanComponentRule(Rule rule)
{
NodeRef nodeRef = getOwningNodeRef(rule);
@@ -161,7 +228,8 @@ public class ExtendedRuleServiceImpl extends RuleServiceImpl
}
/**
- * @param typeQName
+ * @param typeQName type qname
+ * @return boolean true if ignore type, false otherwise
*/
private boolean isIgnoredType(QName typeQName)
{