/* * Copyright (c) 2013, Effektif GmbH. All rights reserved. */ package com.effektif.email; import java.util.ArrayList; import java.util.List; import com.effektif.workflow.impl.WorkflowParser; import com.effektif.workflow.impl.activity.AbstractActivityType; import com.effektif.workflow.impl.template.Hint; import com.effektif.workflow.impl.template.TextTemplate; import com.effektif.workflow.impl.workflow.ActivityImpl; import com.effektif.workflow.impl.workflow.BindingImpl; import com.effektif.workflow.impl.workflowinstance.ActivityInstanceImpl; /** * @author Tom Baeyens */ public class EmailTaskImpl extends AbstractActivityType<EmailTask> { protected OutgoingEmailService outgoingEmailService; protected BindingImpl<String> fromEmailAddress; protected List<BindingImpl<String>> toEmailAddresses; protected List<BindingImpl<String>> ccEmailAddresses; protected List<BindingImpl<String>> bccEmailAddresses; protected TextTemplate subject; protected TextTemplate bodyText; protected TextTemplate bodyHtml; public EmailTaskImpl() { super(EmailTask.class); } @Override public void execute(ActivityInstanceImpl activityInstance) { List<String> to = resolveEmailAddresses(toEmailAddresses, activityInstance); List<String> cc = resolveEmailAddresses(ccEmailAddresses, activityInstance); List<String> bcc = resolveEmailAddresses(bccEmailAddresses, activityInstance); OutgoingEmail email = new OutgoingEmail() .from(resolveFrom(activityInstance)) .to(to) .cc(cc) .bcc(bcc) .subject(resolve(subject, activityInstance)) .bodyText(resolve(bodyText, activityInstance)) .bodyHtml(resolve(bodyHtml, activityInstance)); outgoingEmailService.send(email); activityInstance.onwards(); } protected String resolve(TextTemplate textTemplate, ActivityInstanceImpl activityInstance) { return textTemplate!=null ? textTemplate.resolve(activityInstance) : null; } protected String resolveFrom(ActivityInstanceImpl activityInstance) { // TODO current implementation uses a configurable process email // Christian, could you document in 2 lines some pointers about the // current supported features that we surely need to migrate? return null; } protected List<String> resolveEmailAddresses( List<BindingImpl<String>> emailAddressBindings, ActivityInstanceImpl activityInstance) { List<String> allEmailAddresses = new ArrayList<>(); List<String> emailAddresses = activityInstance.getValues(emailAddressBindings); addEmailAddresses(allEmailAddresses, emailAddresses); return allEmailAddresses; } protected void addEmailAddresses(List<String> allEmailAddresses, List<String> emailAddresses) { if (emailAddresses!=null) { for (String emailAddress: emailAddresses) { String validatedEmailAddress = outgoingEmailService.validate(emailAddress); if (validatedEmailAddress!=null) { allEmailAddresses.add(validatedEmailAddress); } } } } @Override public void parse(ActivityImpl activityImpl, EmailTask activity, WorkflowParser parser) { super.parse(activityImpl, activity, parser); outgoingEmailService = parser.getConfiguration(OutgoingEmailService.class); fromEmailAddress = parser.parseBinding(activity.getFromEmailAddress(), "fromEmailAddress"); toEmailAddresses = parser.parseBindings(activity.getToEmailAddresses(), "toEmailAddresses"); ccEmailAddresses = parser.parseBindings(activity.getCcEmailAddresses(), "ccEmailAddresses"); bccEmailAddresses = parser.parseBindings(activity.getBccEmailAddresses(), "bccEmailAddresses"); subject = parser.parseTextTemplate(activity.getSubject(), Hint.EMAIL, Hint.EMAIL_SUBJECT, Hint.SHORT); bodyText = parser.parseTextTemplate(activity.getBodyText(), Hint.EMAIL, Hint.EMAIL_BODY_TEXT); bodyHtml = parser.parseTextTemplate(activity.getBodyHtml(), Hint.EMAIL, Hint.EMAIL_BODY_HTML, Hint.HTML); } }