From 410c24d2d10d932d773f247d69bb9a9d5084920a Mon Sep 17 00:00:00 2001 From: Gethin James Date: Tue, 22 Sep 2015 15:29:30 +0000 Subject: [PATCH] Better Null handling, ACE-4246 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@112631 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/action/ActionServiceImpl.java | 7 +- .../action/ParameterizedItemAbstractBase.java | 18 +++-- .../ParameterizedItemDefinitionImpl.java | 7 +- .../repo/action/ActionServiceImplTest.java | 9 ++- .../action/executer/EmptyActionExecutor.java | 69 +++++++++++++++++++ .../action/test-action-services-context.xml | 7 ++ 6 files changed, 103 insertions(+), 14 deletions(-) create mode 100644 source/test-java/org/alfresco/repo/action/executer/EmptyActionExecutor.java diff --git a/source/java/org/alfresco/repo/action/ActionServiceImpl.java b/source/java/org/alfresco/repo/action/ActionServiceImpl.java index ed7fe31fdc..074cf8f1c1 100644 --- a/source/java/org/alfresco/repo/action/ActionServiceImpl.java +++ b/source/java/org/alfresco/repo/action/ActionServiceImpl.java @@ -828,11 +828,10 @@ public class ActionServiceImpl implements ActionService, RuntimeActionService, A public void directActionExecution(Action action, NodeRef actionedUponNodeRef) { // Debug output - if (logger.isDebugEnabled() == true) + if (logger.isDebugEnabled()) { - logger - .debug("The action is being executed as the user: " - + this.authenticationContext.getCurrentUserName()); + logger.debug("The action is being executed as the user: " + + this.authenticationContext.getCurrentUserName()); } // Get the action executer and execute diff --git a/source/java/org/alfresco/repo/action/ParameterizedItemAbstractBase.java b/source/java/org/alfresco/repo/action/ParameterizedItemAbstractBase.java index 426256d19e..b89deabce0 100644 --- a/source/java/org/alfresco/repo/action/ParameterizedItemAbstractBase.java +++ b/source/java/org/alfresco/repo/action/ParameterizedItemAbstractBase.java @@ -211,19 +211,23 @@ public abstract class ParameterizedItemAbstractBase extends CommonResourceAbstra protected void checkMandatoryProperties(ParameterizedItem ruleItem, ParameterizedItemDefinition ruleItemDefinition) { List definitions = ruleItemDefinition.getParameterDefinitions(); - for (ParameterDefinition definition : definitions) + if (definitions!= null && definitions.size()>0) { - if (definition.isMandatory() == true) + for (ParameterDefinition definition : definitions) { - // Check that a value has been set for the mandatory parameter - if (ruleItem.getParameterValue(definition.getName()) == null) + if (definition.isMandatory() == true) { - // Error since a mandatory parameter has a null value - throw new RuleServiceException( - MessageFormat.format(ERR_MAND_PROP, new Object[]{definition.getName(), ruleItemDefinition.getName()})); + // Check that a value has been set for the mandatory parameter + if (ruleItem.getParameterValue(definition.getName()) == null) + { + // Error since a mandatory parameter has a null value + throw new RuleServiceException( + MessageFormat.format(ERR_MAND_PROP, new Object[]{definition.getName(), ruleItemDefinition.getName()})); + } } } } + } } diff --git a/source/java/org/alfresco/repo/action/ParameterizedItemDefinitionImpl.java b/source/java/org/alfresco/repo/action/ParameterizedItemDefinitionImpl.java index a48150f7d7..86ac9680d9 100644 --- a/source/java/org/alfresco/repo/action/ParameterizedItemDefinitionImpl.java +++ b/source/java/org/alfresco/repo/action/ParameterizedItemDefinitionImpl.java @@ -191,9 +191,12 @@ public abstract class ParameterizedItemDefinitionImpl implements ParameterizedIt List localizedDefinitions = this.parameterDefinitions.get(locale); - for (ParameterDefinition definition : localizedDefinitions) + if (localizedDefinitions!= null && localizedDefinitions.size()>0) { - namedDefinitions.put(definition.getName(), definition); + for (ParameterDefinition definition : localizedDefinitions) + { + namedDefinitions.put(definition.getName(), definition); + } } } } diff --git a/source/test-java/org/alfresco/repo/action/ActionServiceImplTest.java b/source/test-java/org/alfresco/repo/action/ActionServiceImplTest.java index ec0d7184df..60df3ef5e9 100644 --- a/source/test-java/org/alfresco/repo/action/ActionServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/action/ActionServiceImplTest.java @@ -405,7 +405,7 @@ public class ActionServiceImplTest extends BaseAlfrescoSpringTest assertTrue(this.nodeService.hasAspect(this.nodeRef, ContentModel.ASPECT_LOCKABLE)); assertTrue(this.nodeService.hasAspect(this.nodeRef, ContentModel.ASPECT_VERSIONABLE)); } - + public void testGetAndGetAllWithNoActions() { assertNull(this.actionService.getAction(this.nodeRef, AddFeaturesActionExecuter.NAME)); @@ -413,6 +413,13 @@ public class ActionServiceImplTest extends BaseAlfrescoSpringTest assertNotNull(actions); assertEquals(0, actions.size()); } + + public void testExecuteActionWithNoParameterDef() + { + Action action = this.actionService.createAction("empty-action"); + this.actionService.executeAction(action, this.nodeRef); + assertTrue("If we got here then the test is successful", true); + } /** * Test saving an action with no conditions. Includes testing storage and retrieval diff --git a/source/test-java/org/alfresco/repo/action/executer/EmptyActionExecutor.java b/source/test-java/org/alfresco/repo/action/executer/EmptyActionExecutor.java new file mode 100644 index 0000000000..f5cd87aff3 --- /dev/null +++ b/source/test-java/org/alfresco/repo/action/executer/EmptyActionExecutor.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2005-2015 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.action.executer; + +import org.alfresco.repo.action.ActionDefinitionImpl; +import org.alfresco.service.cmr.action.Action; +import org.alfresco.service.cmr.action.ActionDefinition; +import org.alfresco.service.cmr.action.ParameterDefinition; +import org.alfresco.service.cmr.repository.NodeRef; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.List; + +/** + * An action executor that really does nothing. + * + * @author Gethin James + */ +public class EmptyActionExecutor extends ActionExecuterAbstractBase +{ + private static Log logger = LogFactory.getLog(EmptyActionExecutor.class); + + @Override + protected void executeImpl(Action action, NodeRef actionedUponNodeRef) + { + logger.info("I did nothing of interest."); + } + + @Override + protected void addParameterDefinitions(List paramList) + { + //No Op + } + + @Override + public ActionDefinition getActionDefinition() + { + if (this.actionDefinition == null) + { + this.actionDefinition = createActionDefinition(this.name); + ((ActionDefinitionImpl)this.actionDefinition).setTitleKey(getTitleKey()); + ((ActionDefinitionImpl)this.actionDefinition).setDescriptionKey(getDescriptionKey()); + ((ActionDefinitionImpl)this.actionDefinition).setTrackStatus(getTrackStatus()); + ((ActionDefinitionImpl)this.actionDefinition).setAdhocPropertiesAllowed(getAdhocPropertiesAllowed()); + ((ActionDefinitionImpl)this.actionDefinition).setRuleActionExecutor(this.name); + ((ActionDefinitionImpl)this.actionDefinition).setApplicableTypes(this.applicableTypes); + ((ActionDefinitionImpl) this.actionDefinition).setParameterDefinitions(null); + } + return this.actionDefinition; + + } +} diff --git a/source/test-resources/org/alfresco/repo/action/test-action-services-context.xml b/source/test-resources/org/alfresco/repo/action/test-action-services-context.xml index 882e19ac6e..93586a134b 100644 --- a/source/test-resources/org/alfresco/repo/action/test-action-services-context.xml +++ b/source/test-resources/org/alfresco/repo/action/test-action-services-context.xml @@ -20,6 +20,13 @@ sleep-action + + + + false + + +