From 530d129634eb4b8a3c52c5808f858bd10c380ced Mon Sep 17 00:00:00 2001 From: Derek Hulley Date: Wed, 4 Jul 2007 13:44:00 +0000 Subject: [PATCH] Merged V2.0 to HEAD 5880, 5881: Script actio parameter git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6162 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/action-services-context.xml | 9 ++ .../repo/action/ActionServiceImplTest.java | 34 ++++++++ .../repo/action/executer/ActionExecuter.java | 5 ++ .../executer/CountChildrenActionExecuter.java | 83 +++++++++++++++++++ .../action/executer/ScriptActionExecuter.java | 12 ++- 5 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 source/java/org/alfresco/repo/action/executer/CountChildrenActionExecuter.java diff --git a/config/alfresco/action-services-context.xml b/config/alfresco/action-services-context.xml index de0f73bfc2..3275543a5d 100644 --- a/config/alfresco/action-services-context.xml +++ b/config/alfresco/action-services-context.xml @@ -509,6 +509,15 @@ false + + + + + + + + false + diff --git a/source/java/org/alfresco/repo/action/ActionServiceImplTest.java b/source/java/org/alfresco/repo/action/ActionServiceImplTest.java index 5c1d1b11bb..59fd4afb9f 100644 --- a/source/java/org/alfresco/repo/action/ActionServiceImplTest.java +++ b/source/java/org/alfresco/repo/action/ActionServiceImplTest.java @@ -34,11 +34,13 @@ import org.alfresco.repo.action.evaluator.ComparePropertyValueEvaluator; import org.alfresco.repo.action.evaluator.InCategoryEvaluator; import org.alfresco.repo.action.evaluator.NoConditionEvaluator; import org.alfresco.repo.action.evaluator.compare.ComparePropertyValueOperation; +import org.alfresco.repo.action.executer.ActionExecuter; import org.alfresco.repo.action.executer.AddFeaturesActionExecuter; import org.alfresco.repo.action.executer.CheckInActionExecuter; import org.alfresco.repo.action.executer.CheckOutActionExecuter; import org.alfresco.repo.action.executer.CompositeActionExecuter; import org.alfresco.repo.action.executer.MoveActionExecuter; +import org.alfresco.repo.action.executer.ScriptActionExecuter; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.transaction.TransactionUtil; import org.alfresco.service.cmr.action.Action; @@ -47,8 +49,10 @@ import org.alfresco.service.cmr.action.ActionConditionDefinition; import org.alfresco.service.cmr.action.ActionDefinition; import org.alfresco.service.cmr.action.CompositeAction; import org.alfresco.service.cmr.repository.ContentData; +import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.BaseAlfrescoSpringTest; @@ -649,6 +653,36 @@ public class ActionServiceImplTest extends BaseAlfrescoSpringTest assertEquals(action3, savedAction2.getAction(1)); assertEquals(action4, savedAction2.getAction(2)); } + + /** + * Test the action result parameter + */ + public void testActionResult() + { + // Create the script node reference + NodeRef script = this.nodeService.createNode( + this.folder, + ContentModel.ASSOC_CONTAINS, + QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "testScript.js"), + ContentModel.TYPE_CONTENT).getChildRef(); + this.nodeService.setProperty(script, ContentModel.PROP_NAME, "testScript.js"); + ContentWriter contentWriter = this.contentService.getWriter(script, ContentModel.PROP_CONTENT, true); + contentWriter.setMimetype("text/plain"); + contentWriter.setEncoding("UTF-8"); + contentWriter.putContent("\"VALUE\";"); + + // Create the action + Action action1 = this.actionService.createAction(ScriptActionExecuter.NAME); + action1.setParameterValue(ScriptActionExecuter.PARAM_SCRIPTREF, script); + + // Execute the action + this.actionService.executeAction(action1, this.nodeRef); + + // Get the result + String result = (String)action1.getParameterValue(ActionExecuter.PARAM_RESULT); + assertNotNull(result); + assertEquals("VALUE", result); + } /** =================================================================================== * Test asynchronous actions diff --git a/source/java/org/alfresco/repo/action/executer/ActionExecuter.java b/source/java/org/alfresco/repo/action/executer/ActionExecuter.java index 9d96552e90..a1d2494159 100644 --- a/source/java/org/alfresco/repo/action/executer/ActionExecuter.java +++ b/source/java/org/alfresco/repo/action/executer/ActionExecuter.java @@ -29,10 +29,15 @@ import org.alfresco.service.cmr.action.ActionDefinition; import org.alfresco.service.cmr.repository.NodeRef; /** + * Action executer interface + * * @author Roy Wetherall */ public interface ActionExecuter { + /** Standard action result parameter name */ + public static String PARAM_RESULT = "result"; + /** * Get the action definition for the action * diff --git a/source/java/org/alfresco/repo/action/executer/CountChildrenActionExecuter.java b/source/java/org/alfresco/repo/action/executer/CountChildrenActionExecuter.java new file mode 100644 index 0000000000..8edd57e0d7 --- /dev/null +++ b/source/java/org/alfresco/repo/action/executer/CountChildrenActionExecuter.java @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program 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 General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ +package org.alfresco.repo.action.executer; + +import java.util.List; + +import org.alfresco.service.cmr.action.Action; +import org.alfresco.service.cmr.action.ParameterDefinition; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; + +/** + * Action executer that counts the number of children the actioned upon node has. + * This provides as example of how actions can return results. + * + * @author Roy Wetherall + */ +public class CountChildrenActionExecuter extends ActionExecuterAbstractBase +{ + /** + * Action constants + */ + public static final String NAME = "count-children"; + + /** + * The node service + */ + private NodeService nodeService; + + /** + * Set the node service + * + * @param nodeService the node service + */ + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + /** + * @see org.alfresco.repo.action.executer.ActionExecuter#execute(org.alfresco.service.cmr.repository.NodeRef, NodeRef) + */ + public void executeImpl(Action ruleAction, NodeRef actionedUponNodeRef) + { + if (this.nodeService.exists(actionedUponNodeRef) == true) + { + // Get the parent node + int count = this.nodeService.getChildAssocs(actionedUponNodeRef).size(); + ruleAction.setParameterValue(PARAM_RESULT, Integer.valueOf(count)); + } + } + + /** + * @see org.alfresco.repo.action.ParameterizedItemAbstractBase#addParameterDefinitions(java.util.List) + */ + @Override + protected void addParameterDefinitions(List paramList) + { + } + +} diff --git a/source/java/org/alfresco/repo/action/executer/ScriptActionExecuter.java b/source/java/org/alfresco/repo/action/executer/ScriptActionExecuter.java index e8532ece56..29fef29d57 100644 --- a/source/java/org/alfresco/repo/action/executer/ScriptActionExecuter.java +++ b/source/java/org/alfresco/repo/action/executer/ScriptActionExecuter.java @@ -24,6 +24,7 @@ */ package org.alfresco.repo.action.executer; +import java.io.Serializable; import java.util.List; import java.util.Map; @@ -149,10 +150,11 @@ public class ScriptActionExecuter extends ActionExecuterAbstractBase ScriptAction scriptAction = new ScriptAction(this.serviceRegistry, action, this.actionDefinition); model.put("action", scriptAction); + Object result = null; if (this.scriptLocation == null) { // execute the script against the default model - this.serviceRegistry.getScriptService().executeScript( + result = this.serviceRegistry.getScriptService().executeScript( scriptRef, ContentModel.PROP_CONTENT, model); @@ -160,7 +162,13 @@ public class ScriptActionExecuter extends ActionExecuterAbstractBase else { // execute the script at the specified script location - this.serviceRegistry.getScriptService().executeScript(this.scriptLocation, model); + result = this.serviceRegistry.getScriptService().executeScript(this.scriptLocation, model); + } + + // Set the result + if (result != null) + { + action.setParameterValue(PARAM_RESULT, (Serializable)result); } } }