From d777c295fec77d8c3f43c18d19611d3f755db52c Mon Sep 17 00:00:00 2001 From: Roy Wetherall Date: Tue, 26 Mar 2013 04:29:31 +0000 Subject: [PATCH] RM-639: A developer can define a custom RM specific condition implementation. RM-642: A records manager can create a rule with a "Is Declared" condition RM-641: A records manager can create a rule with a "Is Filled" condition RM-638: A records admin can choose from a specialised list of RM relevant conditions when defining a records rule git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@48587 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../extended-repository-context.xml | 1 + .../messages/actions.properties | 16 ++++- .../rm-action-context.xml | 15 +++++ .../rm-webscript-context.xml | 41 ++++++++---- ...dm-actionconditiondefinitions.get.desc.xml | 8 +++ ...dm-actionconditiondefinitions.get.json.ftl | 1 + ...rm-actionconditiondefinitions.get.desc.xml | 8 +++ ...rm-actionconditiondefinitions.get.json.ftl | 1 + .../action/RMActionExecuterAbstractBase.java | 5 +- .../action/RecordsManagementAction.java | 11 ---- ...dsManagementActionConditionDefinition.java | 31 +++++++++ ...nagementActionConditionDefinitionImpl.java | 44 +++++++++++++ ...tActionConditionEvaluatorAbstractBase.java | 65 +++++++++++++++++++ .../RecordsManagementActionDefinition.java} | 4 +- ...ecordsManagementActionDefinitionImpl.java} | 9 +-- .../CapabilityConditionEvaluator.java | 57 ++++++++++++++++ .../DelegateAction.java} | 5 +- .../action/ExtendedActionServiceImpl.java | 14 +--- .../rule/AbstractActionDefinitionsGet.java | 50 +++++++++++++- .../rule/DmActionConditionDefinitionsGet.java | 43 ++++++++++++ .../rule/RmActionConditionDefinitionsGet.java | 43 ++++++++++++ .../test/ActionTestSuite.java | 4 ++ rm-server/test/resources/test-context.xml | 2 +- 23 files changed, 425 insertions(+), 53 deletions(-) create mode 100644 rm-server/config/alfresco/templates/webscripts/org/alfresco/repository/rule/dm-actionconditiondefinitions.get.desc.xml create mode 100644 rm-server/config/alfresco/templates/webscripts/org/alfresco/repository/rule/dm-actionconditiondefinitions.get.json.ftl create mode 100644 rm-server/config/alfresco/templates/webscripts/org/alfresco/repository/rule/rm-actionconditiondefinitions.get.desc.xml create mode 100644 rm-server/config/alfresco/templates/webscripts/org/alfresco/repository/rule/rm-actionconditiondefinitions.get.json.ftl create mode 100644 rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionConditionDefinition.java create mode 100644 rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionConditionDefinitionImpl.java create mode 100644 rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionConditionEvaluatorAbstractBase.java rename rm-server/source/java/org/alfresco/{repo/action/ExtendedActionDefinition.java => module/org_alfresco_module_rm/action/RecordsManagementActionDefinition.java} (88%) rename rm-server/source/java/org/alfresco/{repo/action/ExtendedActionDefinitionImpl.java => module/org_alfresco_module_rm/action/RecordsManagementActionDefinitionImpl.java} (77%) create mode 100644 rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/evaluator/CapabilityConditionEvaluator.java rename rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/{RMDelegateAction.java => impl/DelegateAction.java} (88%) create mode 100644 rm-server/source/java/org/alfresco/repo/web/scripts/rule/DmActionConditionDefinitionsGet.java create mode 100644 rm-server/source/java/org/alfresco/repo/web/scripts/rule/RmActionConditionDefinitionsGet.java 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 2e82dcff34..e17cd9fabe 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 @@ -236,4 +236,5 @@ + \ No newline at end of file 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 955c445165..36276075ef 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 @@ -37,8 +37,20 @@ rm.action.records_only_undeclared=Only records can be undeclared. rm.action.event-not-undone=The event {0} can not be undone, because it is not defined on the disposition lifecycle. rm.action.reject-no-reason=Can not reject a record without a reason. rm.action.reject-only-unfiled-records=Can only reject unfiled records. + # -# i18n for Rule Actions +# i18n for Records Management Action Conditions +# +# Is declared +isDeclared.title=Is Record Declared +isDeclared.description=Is the record declared. + +# Is filed +isRecordFiled.title=Is Record Filed +isRecordFiled.description=Is the record filed. + +# +# i18n for Records Management Actions # # Create record create-record.title=Create record @@ -56,4 +68,4 @@ fileTo.createRecordFolder.display-label=Create Record Folder # Reject reject.title=Reject reject.description=Rejects a record and moves the document to its original location -reject.reason.display-label=Reject reason \ No newline at end of file +reject.reason.display-label=Reject reason 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 4c47f237de..ab802c31bd 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 @@ -11,6 +11,21 @@ + + + + + + + + + + + + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml index f020ed05ca..e6e7a3612b 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml @@ -2,6 +2,7 @@ + - - - - - - - - + + + + + + + + + + + + + + + + + + + Get action condition definition collection for DM + Gets a collection of the available action condition definitions in DM. + /api/rm/dm-actionconditiondefinitions + argument + user + required + \ No newline at end of file diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/repository/rule/dm-actionconditiondefinitions.get.json.ftl b/rm-server/config/alfresco/templates/webscripts/org/alfresco/repository/rule/dm-actionconditiondefinitions.get.json.ftl new file mode 100644 index 0000000000..1515eae7dd --- /dev/null +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/repository/rule/dm-actionconditiondefinitions.get.json.ftl @@ -0,0 +1 @@ +<#include "actionconditiondefinitions.get.json.ftl"> \ No newline at end of file diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/repository/rule/rm-actionconditiondefinitions.get.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/repository/rule/rm-actionconditiondefinitions.get.desc.xml new file mode 100644 index 0000000000..8627529e25 --- /dev/null +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/repository/rule/rm-actionconditiondefinitions.get.desc.xml @@ -0,0 +1,8 @@ + + Get action condition definition collection for RM + Gets a collection of the available action condition definitions in RM. + /api/rm/rm-actionconditiondefinitions + argument + user + required + \ No newline at end of file diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/repository/rule/rm-actionconditiondefinitions.get.json.ftl b/rm-server/config/alfresco/templates/webscripts/org/alfresco/repository/rule/rm-actionconditiondefinitions.get.json.ftl new file mode 100644 index 0000000000..1515eae7dd --- /dev/null +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/repository/rule/rm-actionconditiondefinitions.get.json.ftl @@ -0,0 +1 @@ +<#include "actionconditiondefinitions.get.json.ftl"> \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java index 36269d40d1..9ca08ba400 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java @@ -42,7 +42,6 @@ import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordService; -import org.alfresco.repo.action.ExtendedActionDefinitionImpl; import org.alfresco.repo.action.executer.ActionExecuterAbstractBase; import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.ActionDefinition; @@ -284,7 +283,7 @@ public abstract class RMActionExecuterAbstractBase extends PropertySubActionExe @Override protected ActionDefinition createActionDefinition(String name) { - return new ExtendedActionDefinitionImpl(name); + return new RecordsManagementActionDefinitionImpl(name); } /** @@ -294,7 +293,7 @@ public abstract class RMActionExecuterAbstractBase extends PropertySubActionExe public ActionDefinition getActionDefinition() { ActionDefinition actionDefinition = super.getActionDefinition(); - ((ExtendedActionDefinitionImpl)this.actionDefinition).setApplicableKinds(applicableKinds); + ((RecordsManagementActionDefinitionImpl)this.actionDefinition).setApplicableKinds(applicableKinds); return actionDefinition; } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementAction.java index d50dfa0c76..6744989ad2 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementAction.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementAction.java @@ -66,17 +66,6 @@ public interface RecordsManagementAction * @param parameters action parameters */ public RecordsManagementActionResult execute(NodeRef filePlanComponent, Map parameters); - - - /** - * Can this action be executed? - * Does it meet all of its entry requirements - EXCEPT permission checks. - * - * @param filePlanComponent file plan component the action is executed upon - * @param parameters action parameters - * @return - */ - // public boolean isExecutable(NodeRef filePlanComponent, Map parameters); /** * Some admin-related rmActions execute against a target nodeRef which is not provided diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionConditionDefinition.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionConditionDefinition.java new file mode 100644 index 0000000000..0a321ebbe2 --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionConditionDefinition.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2005-2012 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; + +/** + * Records management condition definition. + * + * Primarily used as a marker interface. + * + * @author Roy Wetherall + * @since 2.1 + */ +public interface RecordsManagementActionConditionDefinition +{ +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionConditionDefinitionImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionConditionDefinitionImpl.java new file mode 100644 index 0000000000..bc32058653 --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionConditionDefinitionImpl.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2005-2013 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; + +import org.alfresco.repo.action.ActionConditionDefinitionImpl; + +/** + * Records management condition definition implementation. + * + * @author Roy Wetherall + * @since 2.1 + */ +public class RecordsManagementActionConditionDefinitionImpl extends ActionConditionDefinitionImpl + implements RecordsManagementActionConditionDefinition +{ + /** Serial Version UID */ + private static final long serialVersionUID = -7599279732731533610L; + + /** + * Default constructor. + * + * @param name name of the condition + */ + public RecordsManagementActionConditionDefinitionImpl(String name) + { + super(name); + } +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionConditionEvaluatorAbstractBase.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionConditionEvaluatorAbstractBase.java new file mode 100644 index 0000000000..34c090c0dc --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionConditionEvaluatorAbstractBase.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2005-2013 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; + +import java.util.List; + +import org.alfresco.repo.action.evaluator.ActionConditionEvaluatorAbstractBase; +import org.alfresco.service.cmr.action.ActionConditionDefinition; +import org.alfresco.service.cmr.action.ParameterDefinition; + +/** + * Records management action condition evaluator abstract base implementation. + * + * @author Roy Wetherall + * @since 2.1 + */ +public abstract class RecordsManagementActionConditionEvaluatorAbstractBase extends ActionConditionEvaluatorAbstractBase +{ + /** + * @see org.alfresco.repo.action.evaluator.ActionConditionEvaluatorAbstractBase#getActionConditionDefintion() + * + * TODO base class should provide "createActionDefinition" method that can be over-ridden like the ActionExecuter + * base class to prevent duplication of code and a cleaner extension. + */ + @Override + public ActionConditionDefinition getActionConditionDefintion() + { + if (this.actionConditionDefinition == null) + { + this.actionConditionDefinition = new RecordsManagementActionConditionDefinitionImpl(name); + ((RecordsManagementActionConditionDefinitionImpl)actionConditionDefinition).setTitleKey(getTitleKey()); + ((RecordsManagementActionConditionDefinitionImpl)actionConditionDefinition).setDescriptionKey(getDescriptionKey()); + ((RecordsManagementActionConditionDefinitionImpl)actionConditionDefinition).setAdhocPropertiesAllowed(getAdhocPropertiesAllowed()); + ((RecordsManagementActionConditionDefinitionImpl)actionConditionDefinition).setConditionEvaluator(name); + ((RecordsManagementActionConditionDefinitionImpl)actionConditionDefinition).setParameterDefinitions(getParameterDefintions()); + } + return this.actionConditionDefinition; + } + + /** + * @see org.alfresco.repo.action.ParameterizedItemAbstractBase#addParameterDefinitions(java.util.List) + */ + @Override + protected void addParameterDefinitions(List arg0) + { + // No param implementation by default + } + +} diff --git a/rm-server/source/java/org/alfresco/repo/action/ExtendedActionDefinition.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionDefinition.java similarity index 88% rename from rm-server/source/java/org/alfresco/repo/action/ExtendedActionDefinition.java rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionDefinition.java index 0ba40438eb..b5a1a461c9 100644 --- a/rm-server/source/java/org/alfresco/repo/action/ExtendedActionDefinition.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionDefinition.java @@ -16,7 +16,7 @@ * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ -package org.alfresco.repo.action; +package org.alfresco.module.org_alfresco_module_rm.action; import java.util.Set; @@ -28,7 +28,7 @@ import org.alfresco.module.org_alfresco_module_rm.FilePlanComponentKind; * @author Roy Wetherall * @since 2.1 */ -public interface ExtendedActionDefinition +public interface RecordsManagementActionDefinition { /** * @return list of applicable file plan component kinds diff --git a/rm-server/source/java/org/alfresco/repo/action/ExtendedActionDefinitionImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionDefinitionImpl.java similarity index 77% rename from rm-server/source/java/org/alfresco/repo/action/ExtendedActionDefinitionImpl.java rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionDefinitionImpl.java index ba85e48b52..6bf7d90627 100644 --- a/rm-server/source/java/org/alfresco/repo/action/ExtendedActionDefinitionImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionDefinitionImpl.java @@ -16,11 +16,12 @@ * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ -package org.alfresco.repo.action; +package org.alfresco.module.org_alfresco_module_rm.action; import java.util.Set; import org.alfresco.module.org_alfresco_module_rm.FilePlanComponentKind; +import org.alfresco.repo.action.ActionDefinitionImpl; /** * Extended action definition implementation. @@ -28,7 +29,7 @@ import org.alfresco.module.org_alfresco_module_rm.FilePlanComponentKind; * @author Roy Wetherall * @since 2.1 */ -public class ExtendedActionDefinitionImpl extends ActionDefinitionImpl implements ExtendedActionDefinition +public class RecordsManagementActionDefinitionImpl extends ActionDefinitionImpl implements RecordsManagementActionDefinition { /** generated serial version id */ private static final long serialVersionUID = -5226538434707253206L; @@ -41,7 +42,7 @@ public class ExtendedActionDefinitionImpl extends ActionDefinitionImpl implement * * @param name action definition name */ - public ExtendedActionDefinitionImpl(String name) + public RecordsManagementActionDefinitionImpl(String name) { super(name); } @@ -55,7 +56,7 @@ public class ExtendedActionDefinitionImpl extends ActionDefinitionImpl implement } /** - * @see org.alfresco.repo.action.ExtendedActionDefinition#getApplicableKinds() + * @see org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionDefinition#getApplicableKinds() */ @Override public Set getApplicableKinds() diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/evaluator/CapabilityConditionEvaluator.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/evaluator/CapabilityConditionEvaluator.java new file mode 100644 index 0000000000..aeb062b5a5 --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/evaluator/CapabilityConditionEvaluator.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2005-2013 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.evaluator; + +import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionConditionEvaluatorAbstractBase; +import org.alfresco.module.org_alfresco_module_rm.capability.declarative.CapabilityCondition; +import org.alfresco.service.cmr.action.ActionCondition; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.util.ParameterCheck; + +/** + * Records management evaluator base implementation that delegates to a configured capability condition + * implementation. + * + * @author Roy Wetherall + * @since 2.1 + */ +public class CapabilityConditionEvaluator extends RecordsManagementActionConditionEvaluatorAbstractBase +{ + /** Capability Condition */ + private CapabilityCondition capabilityCondition; + + /** + * @param capabilityCondition capability condition + */ + public void setCapabilityCondition(CapabilityCondition capabilityCondition) + { + this.capabilityCondition = capabilityCondition; + } + + /** + * @see org.alfresco.repo.action.evaluator.ActionConditionEvaluatorAbstractBase#evaluateImpl(org.alfresco.service.cmr.action.ActionCondition, org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + protected boolean evaluateImpl(ActionCondition actionCondition, NodeRef actionedUponNodeRef) + { + // check a capability condition has been set and delegate + ParameterCheck.mandatory("capabilityCondition", capabilityCondition); + return capabilityCondition.evaluate(actionedUponNodeRef); + } +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMDelegateAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DelegateAction.java similarity index 88% rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMDelegateAction.java rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DelegateAction.java index 7816fb0fcf..44e40094f1 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMDelegateAction.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DelegateAction.java @@ -16,10 +16,11 @@ * 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; +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.executer.ActionExecuter; import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.ParameterDefinition; @@ -33,7 +34,7 @@ import org.alfresco.service.cmr.repository.NodeRef; * @author Roy Wetherall * @since 2.1 */ -public class RMDelegateAction extends RMActionExecuterAbstractBase +public class DelegateAction extends RMActionExecuterAbstractBase { /** Delegate action executer*/ private ActionExecuter delegateActionExecuter; diff --git a/rm-server/source/java/org/alfresco/repo/action/ExtendedActionServiceImpl.java b/rm-server/source/java/org/alfresco/repo/action/ExtendedActionServiceImpl.java index da5e4816a0..d92acadf91 100644 --- a/rm-server/source/java/org/alfresco/repo/action/ExtendedActionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/repo/action/ExtendedActionServiceImpl.java @@ -24,6 +24,7 @@ import java.util.Set; import org.alfresco.module.org_alfresco_module_rm.FilePlanComponentKind; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; +import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionDefinition; import org.alfresco.service.cmr.action.ActionDefinition; import org.alfresco.service.cmr.repository.NodeRef; @@ -71,11 +72,11 @@ public class ExtendedActionServiceImpl extends ActionServiceImpl // check each action definition for (ActionDefinition actionDefinition : actionDefinitions) { - if (actionDefinition instanceof ExtendedActionDefinition) + if (actionDefinition instanceof RecordsManagementActionDefinition) { if (kind != null) { - Set applicableKinds = ((ExtendedActionDefinition)actionDefinition).getApplicableKinds(); + Set applicableKinds = ((RecordsManagementActionDefinition)actionDefinition).getApplicableKinds(); if (applicableKinds == null || applicableKinds.size() == 0 || applicableKinds.contains(kind)) { // an RM action can only act on a RM artifact @@ -96,13 +97,4 @@ public class ExtendedActionServiceImpl extends ActionServiceImpl return result; } - - /** - * @see org.alfresco.repo.action.ActionServiceImpl#postCommit() - */ - @Override - public void postCommit() - { - super.postCommit(); - } } diff --git a/rm-server/source/java/org/alfresco/repo/web/scripts/rule/AbstractActionDefinitionsGet.java b/rm-server/source/java/org/alfresco/repo/web/scripts/rule/AbstractActionDefinitionsGet.java index e9214366f9..bd33a2c5f1 100644 --- a/rm-server/source/java/org/alfresco/repo/web/scripts/rule/AbstractActionDefinitionsGet.java +++ b/rm-server/source/java/org/alfresco/repo/web/scripts/rule/AbstractActionDefinitionsGet.java @@ -23,8 +23,12 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import org.alfresco.repo.action.ExtendedActionDefinition; +import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionConditionDefinition; +import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionDefinition; +import org.alfresco.service.cmr.action.ActionConditionDefinition; import org.alfresco.service.cmr.action.ActionDefinition; +import org.alfresco.service.cmr.action.ActionService; +import org.springframework.extensions.webscripts.DeclarativeWebScript; /** * An abstract class for the java backed webscripts to get the filtered action definition list. @@ -32,8 +36,15 @@ import org.alfresco.service.cmr.action.ActionDefinition; * @author Tuna Aksoy * @since 2.1 */ -public class AbstractActionDefinitionsGet extends AbstractRuleWebScript +public class AbstractActionDefinitionsGet extends DeclarativeWebScript { + private ActionService actionService; + + public void setActionService(ActionService actionService) + { + this.actionService = actionService; + } + /** * Returns a model with the filtered action definitions * @@ -50,6 +61,21 @@ public class AbstractActionDefinitionsGet extends AbstractRuleWebScript return model; } + + /** + * + * @param removeRmDefs + * @return + */ + protected Map getModelWithFilteredActionConditionDefinitions(boolean removeRmDefs) + { + List defs = filterActionConditionDefinitons(actionService.getActionConditionDefinitions(), removeRmDefs); + + Map model = new HashMap(); + model.put("actionconditiondefinitions", defs); + + return model; + } /** * Filters the action definition list @@ -62,11 +88,29 @@ public class AbstractActionDefinitionsGet extends AbstractRuleWebScript { for (Iterator iterator = actionDefinitions.iterator(); iterator.hasNext();) { - if ((iterator.next() instanceof ExtendedActionDefinition) == removeRmRelatedActionDefs) + if ((iterator.next() instanceof RecordsManagementActionDefinition) == removeRmRelatedActionDefs) { iterator.remove(); } } return actionDefinitions; } + + /** + * + * @param defs + * @param removeRmRelated + * @return + */ + private List filterActionConditionDefinitons(List defs, boolean removeRmRelated) + { + for (Iterator iterator = defs.iterator(); iterator.hasNext();) + { + if ((iterator.next() instanceof RecordsManagementActionConditionDefinition) == removeRmRelated) + { + iterator.remove(); + } + } + return defs; + } } diff --git a/rm-server/source/java/org/alfresco/repo/web/scripts/rule/DmActionConditionDefinitionsGet.java b/rm-server/source/java/org/alfresco/repo/web/scripts/rule/DmActionConditionDefinitionsGet.java new file mode 100644 index 0000000000..5a10df93c1 --- /dev/null +++ b/rm-server/source/java/org/alfresco/repo/web/scripts/rule/DmActionConditionDefinitionsGet.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2005-2013 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.repo.web.scripts.rule; + +import java.util.Map; + +import org.springframework.extensions.webscripts.Cache; +import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptRequest; + +/** + * Implementation for java backed webscript to get the DM related action condition definition list. + * + * @author Roy Wetherall + * @since 2.1 + */ +public class DmActionConditionDefinitionsGet extends AbstractActionDefinitionsGet +{ + /** + * @see org.springframework.extensions.webscripts.DeclarativeWebScript#executeImpl(org.springframework.extensions.webscripts.WebScriptRequest, org.springframework.extensions.webscripts.Status, org.springframework.extensions.webscripts.Cache) + */ + @Override + protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) + { + return getModelWithFilteredActionConditionDefinitions(true); + } +} diff --git a/rm-server/source/java/org/alfresco/repo/web/scripts/rule/RmActionConditionDefinitionsGet.java b/rm-server/source/java/org/alfresco/repo/web/scripts/rule/RmActionConditionDefinitionsGet.java new file mode 100644 index 0000000000..3ab7743ffd --- /dev/null +++ b/rm-server/source/java/org/alfresco/repo/web/scripts/rule/RmActionConditionDefinitionsGet.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2005-2013 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.repo.web.scripts.rule; + +import java.util.Map; + +import org.springframework.extensions.webscripts.Cache; +import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptRequest; + +/** + * Implementation for Java backed webscript to get the RM related action condition definition list. + * + * @author Roy Wetherall + * @since 2.1 + */ +public class RmActionConditionDefinitionsGet extends AbstractActionDefinitionsGet +{ + /** + * @see org.springframework.extensions.webscripts.DeclarativeWebScript#executeImpl(org.springframework.extensions.webscripts.WebScriptRequest, org.springframework.extensions.webscripts.Status, org.springframework.extensions.webscripts.Cache) + */ + @Override + protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) + { + return getModelWithFilteredActionConditionDefinitions(false); + } +} diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/ActionTestSuite.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/ActionTestSuite.java index b4cd9a4797..a71f65f3e6 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/ActionTestSuite.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/ActionTestSuite.java @@ -25,6 +25,8 @@ import org.alfresco.module.org_alfresco_module_rm.test.action.CreateRecordAction import org.alfresco.module.org_alfresco_module_rm.test.action.FileToActionTest; import org.alfresco.module.org_alfresco_module_rm.test.action.HideRecordActionTest; import org.alfresco.module.org_alfresco_module_rm.test.action.RejectActionTest; +import org.alfresco.module.org_alfresco_module_rm.test.service.ExtendedActionServiceTest; +import org.alfresco.module.org_alfresco_module_rm.test.service.RecordsManagementActionServiceImplTest; /** @@ -43,6 +45,8 @@ public class ActionTestSuite extends TestSuite public static Test suite() { TestSuite suite = new TestSuite(); + suite.addTestSuite(RecordsManagementActionServiceImplTest.class); + suite.addTestSuite(ExtendedActionServiceTest.class); suite.addTestSuite(CreateRecordActionTest.class); suite.addTestSuite(HideRecordActionTest.class); suite.addTestSuite(RejectActionTest.class); diff --git a/rm-server/test/resources/test-context.xml b/rm-server/test/resources/test-context.xml index 54f0990aa9..9e137f05d3 100644 --- a/rm-server/test/resources/test-context.xml +++ b/rm-server/test/resources/test-context.xml @@ -95,7 +95,7 @@ - +