/* * Copyright (c) 2013, Effektif GmbH. All rights reserved. */ package com.effektif.email; import java.util.ArrayList; import java.util.List; import com.effektif.workflow.api.bpmn.BpmnElement; import com.effektif.workflow.api.bpmn.BpmnReader; import com.effektif.workflow.api.bpmn.BpmnTypeAttribute; import com.effektif.workflow.api.bpmn.BpmnWriter; import com.effektif.workflow.api.json.TypeName; import com.effektif.workflow.api.types.DataType; import com.effektif.workflow.api.workflow.Activity; import com.effektif.workflow.api.workflow.Binding; import com.effektif.workflow.api.workflow.MultiInstance; import com.effektif.workflow.api.workflow.Timer; import com.effektif.workflow.api.workflow.Transition; import com.effektif.workflow.api.workflow.Variable; /** * A kind of service task that sends an e-mail. This is modelled as a service task rather than as a BPMN ‘send’ event to * make Effektif’s process model easier to understand. A service task is an appropriate mapping because you can think of * sending an email as calling an external ‘email connector’ - a black box service external to the process engine. * * @see <a href="https://github.com/effektif/effektif/wiki/Email-Task">Email Task</a> * @author Tom Baeyens */ @TypeName("email") @BpmnElement("serviceTask") @BpmnTypeAttribute(attribute="type", value="email") public class EmailTask extends Activity { protected Binding<String> fromEmailAddress; protected List<Binding<String>> toEmailAddresses; protected List<Binding<String>> ccEmailAddresses; protected List<Binding<String>> bccEmailAddresses; protected String subject; protected String bodyText; protected String bodyHtml; @Override public void readBpmn(BpmnReader r) { r.startExtensionElements(); fromEmailAddress = r.readBinding("fromEmailAddress", String.class); toEmailAddresses = r.readBindings("toEmailAddress"); ccEmailAddresses = r.readBindings("ccEmailAddress"); bccEmailAddresses = r.readBindings("bccEmailAddress"); subject = r.readTextEffektif("subject"); bodyText = r.readTextEffektif("bodyText"); bodyHtml = r.readTextEffektif("bodyHtml"); r.endExtensionElements(); super.readBpmn(r); } @Override public void writeBpmn(BpmnWriter w) { super.writeBpmn(w); w.startExtensionElements(); w.writeBinding("fromEmailAddress", fromEmailAddress); w.writeBindings("toEmailAddress", toEmailAddresses); w.writeBindings("ccEmailAddress", ccEmailAddresses); w.writeBindings("bccEmailAddress", bccEmailAddresses); w.writeTextElementEffektif("subject", subject); w.writeCDataTextEffektif("bodyText", bodyText); w.writeCDataTextEffektif("bodyHtml", bodyHtml); w.endExtensionElements(); } @Override public EmailTask id(String id) { super.id(id); return this; } public Binding<String> getFromEmailAddress() { return this.fromEmailAddress; } public void setFromEmailAddress(Binding<String> fromEmailAddress) { this.fromEmailAddress = fromEmailAddress; } /** optional email address to be used as the sender of the email. */ public EmailTask fromEmailAddress(Binding<String> fromEmailAddress) { this.fromEmailAddress = fromEmailAddress; return this; } public EmailTask from(String fromEmailAddress) { fromEmailAddress(new Binding<String>().value(fromEmailAddress)); return this; } public List<Binding<String>> getToEmailAddresses() { return this.toEmailAddresses; } public void setToEmailAddresses(List<Binding<String>> toEmailAddresses) { this.toEmailAddresses = toEmailAddresses; } public EmailTask to(String toEmailAddress) { addToEmailAddress(new Binding().value(toEmailAddress)); return this; } /** adds the email address specified in a variable to the list of 'to' recipients. * @see <a href="http://github.../expressions">See Expressions</a> * */ public EmailTask toExpression(String expression) { addToEmailAddress(new Binding().expression(expression)); return this; } protected void addToEmailAddress(Binding<String> toEmailAddressBinding) { if (toEmailAddresses==null) { toEmailAddresses = new ArrayList<>(); } toEmailAddresses.add(toEmailAddressBinding); } public List<Binding<String>> getCcEmailAddresses() { return this.ccEmailAddresses; } public void setCcEmailAddresses(List<Binding<String>> ccEmailAddresses) { this.ccEmailAddresses = ccEmailAddresses; } public EmailTask cc(String ccEmailAddress) { addCcEmailAddressBinding(new Binding().value(ccEmailAddress)); return this; } /** adds the email address specified in a variable as a recipient. */ public EmailTask ccExpression(String expression) { addCcEmailAddressBinding(new Binding().expression(expression)); return this; } protected void addCcEmailAddressBinding(Binding<String> ccEmailAddressBinding) { if (ccEmailAddresses==null) { ccEmailAddresses = new ArrayList<>(); } ccEmailAddresses.add(ccEmailAddressBinding); } public List<Binding<String>> getBccEmailAddresses() { return this.bccEmailAddresses; } public void setBccEmailAddresses(List<Binding<String>> bccEmailAddresses) { this.bccEmailAddresses = bccEmailAddresses; } public EmailTask bcc(String bccEmailAddress) { addBccEmailAddressBinding(new Binding().value(bccEmailAddress)); return this; } /** adds the user specified in nested field inside a variable as a recipient. */ public EmailTask bccExpression(String expression) { addBccEmailAddressBinding(new Binding().expression(expression)); return this; } protected void addBccEmailAddressBinding(Binding<String> bccEmailAddressBinding) { if (bccEmailAddresses==null) { bccEmailAddresses = new ArrayList<>(); } bccEmailAddresses.add(bccEmailAddressBinding); } public EmailTask subject(String subject) { setSubject(subject); return this; } public String getSubject() { return subject; } public void setSubject(String subjectBinding) { this.subject = subjectBinding; } public EmailTask bodyText(String bodyText) { this.bodyText = bodyText; return this; } public String getBodyText() { return bodyText; } public void setBodyText(String bodyTextBinding) { this.bodyText = bodyTextBinding; } public String getBodyHtml() { return bodyHtml; } public EmailTask bodyHtml(String bodyHtml) { this.bodyHtml = bodyHtml; return this; } public void setBodyHtml(String bodyHtmlBinding) { this.bodyHtml = bodyHtmlBinding; } /** * @see <a href="https://github.com/effektif/effektif/wiki/Multi-instance-tasks">Multi-instance tasks</a> */ @Override public EmailTask multiInstance(MultiInstance multiInstance) { super.multiInstance(multiInstance); return this; } @Override public EmailTask transitionTo(String toActivityId) { super.transitionTo(toActivityId); return this; } @Override public EmailTask transitionToNext() { super.transitionToNext(); return this; } @Override public EmailTask transitionTo(Transition transition) { super.transitionTo(transition); return this; } @Override public EmailTask activity(Activity activity) { super.activity(activity); return this; } @Override public EmailTask activity(String id, Activity activity) { super.activity(id, activity); return this; } @Override public EmailTask transition(Transition transition) { super.transition(transition); return this; } @Override public EmailTask transition(String id, Transition transition) { super.transition(id, transition); return this; } @Override public EmailTask variable(Variable variable) { super.variable(variable); return this; } @Override public EmailTask timer(Timer timer) { super.timer(timer); return this; } @Override public EmailTask property(String key, Object value) { super.property(key, value); return this; } @Override public EmailTask variable(String id, DataType type) { super.variable(id, type); return this; } @Override public EmailTask name(String name) { super.name(name); return this; } @Override public EmailTask description(String description) { super.description(description); return this; } @Override public EmailTask propertyOpt(String key, Object value) { super.propertyOpt(key, value); return this; } }