diff --git a/source/java/org/alfresco/repo/action/executer/MailActionExecuter.java b/source/java/org/alfresco/repo/action/executer/MailActionExecuter.java index b425719818..882d2cfe3d 100644 --- a/source/java/org/alfresco/repo/action/executer/MailActionExecuter.java +++ b/source/java/org/alfresco/repo/action/executer/MailActionExecuter.java @@ -933,9 +933,25 @@ public class MailActionExecuter extends ActionExecuterAbstractBase // set subject line String subject = (String)ruleAction.getParameterValue(PARAM_SUBJECT); - List subjectParams = (List)ruleAction.getParameterValue(PARAM_SUBJECT_PARAMS); - subjectParams = subjectParams == null ? new ArrayList() : subjectParams; - String localizedSubject = getLocalizedSubject(subject, subjectParams.toArray(), locale); + Object subjectParamsObject = ruleAction.getParameterValue(PARAM_SUBJECT_PARAMS); + Object[] subjectParams = null; + //Javasctipt pass SubjectParams as ArrayList. see MNT-12534 + if (subjectParamsObject instanceof List) + { + subjectParams = ((List)subjectParamsObject).toArray(); + } + else if (subjectParamsObject instanceof Object[]) + { + subjectParams = (Object[])subjectParamsObject; + } + else + { + if (subjectParamsObject != null) + { + subjectParams = new Object[]{subjectParamsObject.toString()}; + } + } + String localizedSubject = getLocalizedSubject(subject, subjectParams, locale); if (locale == null) { // process the template against the model diff --git a/source/test-java/org/alfresco/repo/action/executer/AbstractMailActionExecuterTest.java b/source/test-java/org/alfresco/repo/action/executer/AbstractMailActionExecuterTest.java index 232cd4ee40..b4a2d81853 100644 --- a/source/test-java/org/alfresco/repo/action/executer/AbstractMailActionExecuterTest.java +++ b/source/test-java/org/alfresco/repo/action/executer/AbstractMailActionExecuterTest.java @@ -25,6 +25,7 @@ import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import javax.mail.Address; @@ -54,6 +55,7 @@ import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.namespace.QName; import org.alfresco.service.transaction.TransactionService; +import org.alfresco.util.Pair; import org.alfresco.util.PropertyMap; import org.alfresco.util.test.junitrules.AlfrescoPerson; import org.alfresco.util.test.junitrules.ApplicationContextInit; @@ -384,6 +386,35 @@ public abstract class AbstractMailActionExecuterTest } } + @Test + public void testPrepareEmailSubjectParams() + { + Action mailAction = ACTION_SERVICE.createAction(MailActionExecuter.NAME); + mailAction.setParameterValue(MailActionExecuter.PARAM_TO, "some.bodyelse@example.com"); + mailAction.setParameterValue(MailActionExecuter.PARAM_TEMPLATE, "alfresco/templates/mail/test.txt.ftl"); + mailAction.setParameterValue(MailActionExecuter.PARAM_SUBJECT, "Test Subject Params"); + mailAction.setParameterValue(MailActionExecuter.PARAM_TEMPLATE_MODEL, getModel()); + Pair recipient = new Pair("test", Locale.ENGLISH); + + mailAction.setParameterValue(MailActionExecuter.PARAM_SUBJECT_PARAMS, new Object[] {"Test", "Subject", "Params", "Object", "Array"}); + Assert.assertNotNull("We should support Object[] value for PARAM_SUBJECT_PARAMS", ACTION_EXECUTER.prepareEmail(mailAction, null, recipient, null)); + + ArrayList params = new ArrayList(); + params.add("Test"); + params.add("Subject"); + params.add("Params"); + params.add("ArrayList"); + + mailAction.setParameterValue(MailActionExecuter.PARAM_SUBJECT_PARAMS, params); + Assert.assertNotNull("We should support List value for PARAM_SUBJECT_PARAMS", ACTION_EXECUTER.prepareEmail(mailAction, null, recipient, null)); + + mailAction.setParameterValue(MailActionExecuter.PARAM_SUBJECT_PARAMS, "Test Subject Params Single String"); + Assert.assertNotNull("We should support String value for PARAM_SUBJECT_PARAMS", ACTION_EXECUTER.prepareEmail(mailAction, null, recipient, null)); + + mailAction.setParameterValue(MailActionExecuter.PARAM_SUBJECT_PARAMS, null); + Assert.assertNotNull("We should support null value for PARAM_SUBJECT_PARAMS", ACTION_EXECUTER.prepareEmail(mailAction, null, recipient, null)); + } + /** * Creates a test user with the specified username and optionally custom email. *