1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.mail;
35
36 import info.magnolia.module.mail.handlers.MgnlMailHandler;
37 import info.magnolia.module.mail.templates.MailAttachment;
38 import info.magnolia.module.mail.templates.MgnlEmail;
39 import info.magnolia.module.mail.templates.impl.SimpleEmail;
40 import info.magnolia.objectfactory.Classes;
41
42 import java.util.HashMap;
43 import java.util.List;
44 import java.util.Map;
45
46 import org.apache.commons.beanutils.BeanUtils;
47 import org.apache.commons.lang.StringUtils;
48
49
50
51
52
53
54
55 public class MgnlMailFactory {
56 private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(MgnlMailFactory.class);
57
58 private Map<String, String> renderers = new HashMap<String, String>();
59
60
61
62
63
64 public MgnlMailFactory() {
65
66 }
67
68 public MgnlMailHandler getEmailHandler() {
69 return MailModule.getInstance().getHandler();
70 }
71
72
73
74
75
76 public MgnlEmail getEmail(Map<String, Object> params) {
77 return getEmail(params, null);
78 }
79
80
81
82
83 public MgnlEmail getEmailFromType(Map<String, Object> params, String type) {
84
85 return getEmailFromType(params, type, null);
86 }
87
88 public MgnlEmail getEmailFromType(Map<String, Object> params, String type, String contentType, List<MailAttachment> attachments) {
89 Map<String, Object> newParams = new HashMap<String, Object>();
90 newParams.putAll(params);
91 if(!StringUtils.isEmpty(type)) {
92 newParams.put(MailTemplate.MAIL_TYPE, type);
93 }
94 if(!StringUtils.isEmpty(contentType)) {
95 newParams.put(MailTemplate.MAIL_CONTENT_TYPE, contentType);
96 }
97 return getEmail(newParams, attachments);
98 }
99
100
101
102
103 public MgnlEmail getEmailFromType(Map<String, Object> params, String type, List<MailAttachment> attachments) {
104 return getEmailFromType(params, type, null, attachments);
105 }
106
107
108
109
110 public MgnlEmail getEmail(Map<String, Object> params, List<MailAttachment> attachments) {
111 MailTemplate template = new MailTemplate();
112 return getEmail(params, attachments, template);
113 }
114
115
116
117
118 public MgnlEmail getEmailFromTemplate(String id, List<MailAttachment> attachments, Map<String, Object> params) throws Exception {
119 MailTemplate template = getTemplate(id);
120 if (template == null) {
121 log.error("Template {} can't be found", id);
122 return null;
123 }
124 return getEmail(params, attachments, template);
125 }
126
127
128
129
130 public MgnlEmail getEmailFromTemplate(String id, Map<String, Object> params) throws Exception {
131 return getEmailFromTemplate(id, null, params);
132 }
133
134 protected MgnlEmail getEmail(Map<String, Object> params, List<MailAttachment> attachments, MailTemplate template) {
135 template.setValues(params, attachments);
136
137 try {
138 return getEmailFromType(template);
139
140 } catch (Exception e) {
141 log.error("Couln't instantiate email type: " + template.getType(), e);
142 return null;
143 }
144 }
145
146 protected MgnlEmail getEmailFromType(MailTemplate template) throws Exception {
147 final MgnlEmail mail;
148 if(renderers.containsKey(template.getType().toLowerCase())){
149 String rendererClass = renderers.get(template.getType().toLowerCase());
150 mail = Classes.quietNewInstance(rendererClass, template);
151 }
152 else {
153 mail = new SimpleEmail(template);
154 }
155
156
157 if(!StringUtils.isEmpty(template.getFrom())) {
158 mail.setFrom(template.getFrom());
159 }
160 if(!StringUtils.isEmpty(template.getTo())) {
161 mail.setToList(template.getTo());
162 }
163 if(!StringUtils.isEmpty(template.getCc())) {
164 mail.setCcList(template.getCc());
165 }
166 if(!StringUtils.isEmpty(template.getBcc())) {
167 mail.setBccList(template.getBcc());
168 }
169 if(!StringUtils.isEmpty(template.getReplyTo())) {
170 mail.setReplyToList(template.getReplyTo());
171 }
172 if(!StringUtils.isEmpty(template.getSubject())) {
173 mail.setSubject(template.getSubject());
174 }
175
176 return mail;
177 }
178
179
180 protected MailTemplate getTemplate(String templateName) throws Exception {
181 final List<MailTemplate> configuration = MailModule.getInstance().getTemplatesConfiguration();
182 for (MailTemplate mailTemplate : configuration) {
183 if (StringUtils.equals(mailTemplate.getName(), templateName)) {
184 return (MailTemplate) BeanUtils.cloneBean(mailTemplate);
185 }
186 }
187 return null;
188 }
189
190
191 public Map<String, String> getRenderers() {
192 return renderers;
193 }
194
195 public void setRenderers(Map<String, String> renderers) {
196 this.renderers = renderers;
197 }
198
199 }