diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml
index 0f97f65c24..ef5cb7bdfb 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml
@@ -182,6 +182,7 @@
+
diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/actions.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/actions.properties
index f86d0288c7..116c8b8024 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/actions.properties
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/actions.properties
@@ -20,6 +20,26 @@ create-record.hide-record.display-label=Hide Record
# Declare record
declareRecord.title=Declare record
declareRecord.description=Declares a record.
+# Undeclare record
+undeclareRecord.title=Undeclare record
+undeclareRecord.description=Undeclares a record.
+# Open record folder
+openRecordFolder.title=Open record folder
+openRecordFolder.description=Opens a record folder.
+# Close record folder
+closeRecordFolder.title=Close record folder
+closeRecordFolder.description=Closes a record folder.
+# Complete event
+completeEvent.title=Complete event
+completeEvent.description=Completes an event.
+completeEvent.eventName.display-label=Event
+# Freeze
+freeze.title=Freeze
+freeze.description=Freezes a record.
+freeze.reason.display-label=Reason
+# Unfreeze
+unfreeze.title=Unfreeze
+unfreeze.description=Unfreezes a record.
# File to
fileTo.title=File to
fileTo.description=Files a record to the specified record folder.
@@ -32,3 +52,7 @@ reject.reason.display-label=Reject reason
# Request Information
requestInfo.title=Request Information
requestInfo.description=Starts a workflow for requesting more information for a record
+# Execute script
+executeScript.title=Execute script
+executeScript.description=Execute a script.
+executeScript.script-ref.display-label=Script
\ 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 924bd35993..c0487c1d19 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
@@ -12,6 +12,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ js
+
+
+
+
-
+
@@ -212,7 +233,9 @@
-
+
+
+
@@ -237,7 +260,9 @@
-
+
+
+
@@ -315,6 +340,7 @@
+
@@ -340,7 +366,9 @@
-
+
+
+
@@ -365,7 +393,9 @@
-
+
+
+
@@ -542,6 +572,7 @@
+
@@ -725,6 +756,8 @@
+
+
@@ -739,4 +772,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${spaces.store}
+
+
+ /${spaces.company_home.childname}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/constraint/ManualEventParameterConstraint.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/constraint/ManualEventParameterConstraint.java
new file mode 100755
index 0000000000..6e2cd540ee
--- /dev/null
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/constraint/ManualEventParameterConstraint.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2009-2010 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.action.constraint;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEvent;
+import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService;
+import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventType;
+import org.alfresco.repo.action.constraint.BaseParameterConstraint;
+
+/**
+ * Manual event parameter constraint
+ *
+ * @author Craig Tan
+ */
+public class ManualEventParameterConstraint extends BaseParameterConstraint
+{
+ /** Name constant */
+ public static final String NAME = "rm-ac-manual-events";
+
+ private RecordsManagementEventService recordsManagementEventService;
+
+ public void setRecordsManagementEventService(RecordsManagementEventService recordsManagementEventService)
+ {
+ this.recordsManagementEventService = recordsManagementEventService;
+ }
+
+ /**
+ * @see org.alfresco.service.cmr.action.ParameterConstraint#getAllowableValues()
+ */
+ protected Map getAllowableValuesImpl()
+ {
+ List events = recordsManagementEventService.getEvents();
+ Map result = new HashMap(events.size());
+ for (RecordsManagementEvent event : events)
+ {
+ RecordsManagementEventType eventType = recordsManagementEventService.getEventType(event.getType());
+ if (eventType != null && !eventType.isAutomaticEvent())
+ {
+ result.put(event.getName(), event.getDisplayLabel());
+ }
+ }
+ return result;
+ }
+
+
+}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/ExecuteScriptAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/ExecuteScriptAction.java
new file mode 100755
index 0000000000..88c16d9daa
--- /dev/null
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/ExecuteScriptAction.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2005-2011 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.action.dm;
+
+import java.util.List;
+
+import org.alfresco.repo.action.ParameterDefinitionImpl;
+import org.alfresco.repo.action.executer.ScriptActionExecuter;
+import org.alfresco.service.cmr.action.ParameterDefinition;
+import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
+
+/**
+ * Executes a JavaScript
+ *
+ * Note: This is a 'normal' dm action, rather than a records management action.
+ *
+ * @author Craig Tan
+ */
+public class ExecuteScriptAction extends ScriptActionExecuter
+{
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase#addParameterDefinitions(java.util.List)
+ */
+ @Override
+ protected void addParameterDefinitions(List paramList)
+ {
+ paramList.add(new ParameterDefinitionImpl(PARAM_SCRIPTREF, DataTypeDefinition.NODE_REF, true,
+ getParamDisplayLabel(PARAM_SCRIPTREF), false, "rm-ac-scripts"));
+ }
+
+}
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 a88a0b470c..e027913bb2 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
@@ -18,10 +18,12 @@
*/
package org.alfresco.module.org_alfresco_module_rm.action.impl;
-import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase;
import org.alfresco.service.cmr.action.Action;
+import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.surf.util.I18NUtil;
/**
@@ -31,16 +33,32 @@ import org.springframework.extensions.surf.util.I18NUtil;
*/
public class CloseRecordFolderAction extends RMActionExecuterAbstractBase
{
+ /** Logger */
+ private static Log logger = LogFactory.getLog(CloseRecordFolderAction.class);
+
/** 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";
+
/**
- * @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action, org.alfresco.service.cmr.repository.NodeRef)
+ * @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action,
+ * org.alfresco.service.cmr.repository.NodeRef)
*/
@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 (recordService.isRecord(actionedUponNodeRef))
+ {
+ ChildAssociationRef assocRef = nodeService.getPrimaryParent(actionedUponNodeRef);
+ if (assocRef != null)
+ {
+ actionedUponNodeRef = assocRef.getParentRef();
+ }
+ }
if (this.recordsManagementService.isRecordFolder(actionedUponNodeRef) == true)
{
@@ -52,7 +70,8 @@ public class CloseRecordFolderAction extends RMActionExecuterAbstractBase
}
else
{
- throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_CLOSE_RECORD_FOLDER_NOT_FOLDER, actionedUponNodeRef.toString()));
+ 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 1e14c4dbbf..134ed76824 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
@@ -23,14 +23,16 @@ import java.util.Date;
import java.util.List;
import java.util.Map;
-import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionAction;
import org.alfresco.module.org_alfresco_module_rm.event.EventCompletionDetails;
+import org.alfresco.repo.action.ParameterDefinitionImpl;
+import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.cmr.action.Action;
+import org.alfresco.service.cmr.action.ParameterDefinition;
+import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName;
-import org.springframework.extensions.surf.util.I18NUtil;
/**
* Complete event action
@@ -47,7 +49,18 @@ public class CompleteEventAction extends RMActionExecuterAbstractBase
public static final String PARAM_EVENT_COMPLETED_AT = "eventCompletedAt";
/**
- * @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action, org.alfresco.service.cmr.repository.NodeRef)
+ * @see org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase#addParameterDefinitions(java.util.List)
+ */
+ @Override
+ protected void addParameterDefinitions(List paramList)
+ {
+ paramList.add(new ParameterDefinitionImpl(PARAM_EVENT_NAME, DataTypeDefinition.TEXT, true,
+ getParamDisplayLabel(PARAM_EVENT_NAME), false, "rm-ac-manual-event"));
+ }
+
+ /**
+ * @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action,
+ * org.alfresco.service.cmr.repository.NodeRef)
*/
@Override
protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
@@ -55,7 +68,7 @@ public class CompleteEventAction extends RMActionExecuterAbstractBase
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 next disposition action
@@ -66,6 +79,16 @@ public class CompleteEventAction extends RMActionExecuterAbstractBase
EventCompletionDetails event = getEvent(da, eventName);
if (event != null)
{
+ 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);
@@ -80,7 +103,8 @@ public class CompleteEventAction extends RMActionExecuterAbstractBase
}
else
{
- throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_EVENT_NO_DISP_LC, eventName));
+ // 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 ab98c0b4d1..48669ad6b3 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
@@ -26,7 +26,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase;
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
@@ -96,7 +95,10 @@ public class DeclareRecordAction extends RMActionExecuterAbstractBase
}
else
{
- throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_UNDECLARED_ONLY_RECORDS, actionedUponNodeRef.toString()));
+ if (logger.isWarnEnabled())
+ {
+ logger.warn(I18NUtil.getMessage(MSG_UNDECLARED_ONLY_RECORDS, actionedUponNodeRef.toString()));
+ }
}
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/FreezeAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/FreezeAction.java
index f69106b3de..3111d3bdcf 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/FreezeAction.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/FreezeAction.java
@@ -18,8 +18,13 @@
*/
package org.alfresco.module.org_alfresco_module_rm.action.impl;
+import java.util.List;
+
import org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase;
+import org.alfresco.repo.action.ParameterDefinitionImpl;
import org.alfresco.service.cmr.action.Action;
+import org.alfresco.service.cmr.action.ParameterDefinition;
+import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.NodeRef;
/**
@@ -32,6 +37,15 @@ public class FreezeAction extends RMActionExecuterAbstractBase
/** Parameter names */
public static final String PARAM_REASON = "reason";
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase#addParameterDefinitions(java.util.List)
+ */
+ @Override
+ protected void addParameterDefinitions(List paramList)
+ {
+ paramList.add(new ParameterDefinitionImpl(PARAM_REASON, DataTypeDefinition.TEXT, true, getParamDisplayLabel(PARAM_REASON)));
+ }
+
/**
* @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action, org.alfresco.service.cmr.repository.NodeRef)
*/
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 f98fb5d092..0dcb6f8a4f 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
@@ -18,10 +18,12 @@
*/
package org.alfresco.module.org_alfresco_module_rm.action.impl;
-import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase;
import org.alfresco.service.cmr.action.Action;
+import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.surf.util.I18NUtil;
/**
@@ -31,8 +33,14 @@ import org.springframework.extensions.surf.util.I18NUtil;
*/
public class OpenRecordFolderAction extends RMActionExecuterAbstractBase
{
+ /** Logger */
+ private static Log logger = LogFactory.getLog(OpenRecordFolderAction.class);
+
private static final String MSG_NO_OPEN_RECORD_FOLDER = "rm.action.no-open-record-folder";
+ /** Parameter names */
+ public static final String PARAM_OPEN_PARENT = "openParent";
+
/**
* @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action,
* org.alfresco.service.cmr.repository.NodeRef)
@@ -43,6 +51,15 @@ public class OpenRecordFolderAction extends RMActionExecuterAbstractBase
// 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);
@@ -53,7 +70,8 @@ public class OpenRecordFolderAction extends RMActionExecuterAbstractBase
}
else
{
- throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_NO_OPEN_RECORD_FOLDER, actionedUponNodeRef.toString()));
+ 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/UndeclareRecordAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UndeclareRecordAction.java
index 86b3f67938..ad70dc57ed 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
@@ -18,10 +18,11 @@
*/
package org.alfresco.module.org_alfresco_module_rm.action.impl;
-import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.repository.NodeRef;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.surf.util.I18NUtil;
/**
@@ -31,6 +32,9 @@ import org.springframework.extensions.surf.util.I18NUtil;
*/
public class UndeclareRecordAction extends RMActionExecuterAbstractBase
{
+ /** Logger */
+ private static Log logger = LogFactory.getLog(UndeclareRecordAction.class);
+
/** I18N */
private static final String MSG_RECORDS_ONLY_UNDECLARED = "rm.action.records_only_undeclared";
@@ -50,7 +54,10 @@ public class UndeclareRecordAction extends RMActionExecuterAbstractBase
}
else
{
- throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_RECORDS_ONLY_UNDECLARED));
+ if (logger.isWarnEnabled())
+ {
+ logger.warn(I18NUtil.getMessage(MSG_RECORDS_ONLY_UNDECLARED));
+ }
}
}
}
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 d278b08c7f..7901081930 100644
--- a/rm-server/source/java/org/alfresco/repo/rule/ExtendedRuleServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/repo/rule/ExtendedRuleServiceImpl.java
@@ -21,11 +21,14 @@ package org.alfresco.repo.rule;
import java.util.Set;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
+import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
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;
import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.rule.Rule;
+import org.alfresco.service.namespace.QName;
/**
* Extended rule service implementation.
@@ -39,6 +42,8 @@ public class ExtendedRuleServiceImpl extends RuleServiceImpl
private FilePlanAuthenticationService filePlanAuthenticationService;
+ protected NodeService nodeService;
+
private RecordsManagementService recordsManagementService;
public void setRunAsRmAdmin(boolean runAsRmAdmin)
@@ -56,6 +61,11 @@ public class ExtendedRuleServiceImpl extends RuleServiceImpl
this.recordsManagementService = recordsManagementService;
}
+ public void setNodeService2(NodeService nodeService)
+ {
+ this.nodeService = nodeService;
+ }
+
@Override
public void saveRule(final NodeRef nodeRef, final Rule rule)
{
@@ -81,24 +91,31 @@ public class ExtendedRuleServiceImpl extends RuleServiceImpl
@Override
public void executeRule(final Rule rule, final NodeRef nodeRef, final Set executedRules)
{
- if (isFilePlanComponentRule(rule) == true && runAsRmAdmin == true)
+ QName typeQName = nodeService.getType(nodeRef);
+
+ // The dispositionSchedule node will not be executed by rules
+ if (recordsManagementService.isFilePlanComponent(nodeRef) == true
+ && typeQName.equals(RecordsManagementModel.TYPE_DISPOSITION_SCHEDULE) == false)
{
- String user = AuthenticationUtil.getFullyAuthenticatedUser();
- try
+ if (isFilePlanComponentRule(rule) == true && runAsRmAdmin == true)
{
- AuthenticationUtil.setFullyAuthenticatedUser(filePlanAuthenticationService.getRmAdminUserName());
- ExtendedRuleServiceImpl.super.executeRule(rule, nodeRef, executedRules);
+ String user = AuthenticationUtil.getFullyAuthenticatedUser();
+ try
+ {
+ AuthenticationUtil.setFullyAuthenticatedUser(filePlanAuthenticationService.getRmAdminUserName());
+ ExtendedRuleServiceImpl.super.executeRule(rule, nodeRef, executedRules);
+ }
+ finally
+ {
+ AuthenticationUtil.setFullyAuthenticatedUser(user);
+ }
}
- finally
+ else
{
- AuthenticationUtil.setFullyAuthenticatedUser(user);
+ // just execute the rule as the current user
+ super.executeRule(rule, nodeRef, executedRules);
}
}
- else
- {
- // just execute the rule as the current user
- super.executeRule(rule, nodeRef, executedRules);
- }
}
private boolean isFilePlanComponentRule(Rule rule)