View Javadoc

1   /**
2    * This file Copyright (c) 2003-2010 Magnolia International
3    * Ltd.  (http://www.magnolia-cms.com). All rights reserved.
4    *
5    *
6    * This file is dual-licensed under both the Magnolia
7    * Network Agreement and the GNU General Public License.
8    * You may elect to use one or the other of these licenses.
9    *
10   * This file is distributed in the hope that it will be
11   * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
12   * implied warranty of MERCHANTABILITY or FITNESS FOR A
13   * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
14   * Redistribution, except as permitted by whichever of the GPL
15   * or MNA you select, is prohibited.
16   *
17   * 1. For the GPL license (GPL), you can redistribute and/or
18   * modify this file under the terms of the GNU General
19   * Public License, Version 3, as published by the Free Software
20   * Foundation.  You should have received a copy of the GNU
21   * General Public License, Version 3 along with this program;
22   * if not, write to the Free Software Foundation, Inc., 51
23   * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24   *
25   * 2. For the Magnolia Network Agreement (MNA), this file
26   * and the accompanying materials are made available under the
27   * terms of the MNA which accompanies this distribution, and
28   * is available at http://www.magnolia-cms.com/mna.html
29   *
30   * Any modifications to this file must keep this entire header
31   * intact.
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   * This reads the repository to know what kind of email to instantiate.
52   *
53   * @author <a href="mailto:niko@macnica.com">Nicolas Modrzyk</a>
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       * Use getInstance to get the current used instance.
63       */
64      public MgnlMailFactory() {
65  
66      }
67  
68      public MgnlMailHandler getEmailHandler() {
69          return MailModule.getInstance().getHandler();
70      }
71  
72  
73      /**
74       * Creates email with no attachments.
75       */
76      public MgnlEmail getEmail(Map<String, String> params) {
77          return getEmail(params, null);
78      }
79  
80      /**
81       * Creates email with no attachments.
82       */
83      public MgnlEmail getEmailFromType(Map<String, String> params, String type) {
84  
85          return getEmailFromType(params, type, null);
86      }
87  
88      public MgnlEmail getEmailFromType(Map<String, String> params, String type, String contentType, List<MailAttachment> attachments) {
89          Map<String, String> newParams = new HashMap<String, String>();
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      * Creates email with attachments
102      */
103     public MgnlEmail getEmailFromType(Map<String, String> params, String type, List<MailAttachment> attachments) {
104         return getEmailFromType(params, type, null, attachments);
105     }
106 
107     /**
108      * Creates email with attachments
109      */
110     public MgnlEmail getEmail(Map<String, String> params, List<MailAttachment> attachments) {
111         MailTemplate template = new MailTemplate();
112         return getEmail(params, attachments, template);
113     }
114 
115     /**
116      * Creates email using predefined template
117      */
118     public MgnlEmail getEmailFromTemplate(String id, List<MailAttachment> attachments, Map<String, String> params) throws Exception {
119         MailTemplate template = getTemplate(id);
120         return getEmail(params, attachments, template);
121     }
122 
123     /**
124      * Creates email using predefined template with no attachments
125      */
126     public MgnlEmail getEmailFromTemplate(String id, Map<String, String> params) throws Exception {
127         return getEmailFromTemplate(id, null, params);
128     }
129 
130     protected MgnlEmail getEmail(Map<String, String> params, List<MailAttachment> attachments, MailTemplate template) {
131         template.setValues(params, attachments);
132 
133         try {
134             return getEmailFromType(template);
135 
136         } catch (Exception e) {
137             log.error("Couln't instantiate email type: " + template.getType());
138             return null;
139         }
140     }
141 
142     protected MgnlEmail getEmailFromType(MailTemplate template) throws Exception {
143         final MgnlEmail mail;
144         if(renderers.containsKey(template.getType().toLowerCase())){
145             String rendererClass = renderers.get(template.getType().toLowerCase());
146             mail = Classes.quietNewInstance(rendererClass, template);
147         }
148         else {
149             mail = new SimpleEmail(template);
150         }
151 
152         //set all mail parameters
153         if(!StringUtils.isEmpty(template.getFrom())) {
154             mail.setFrom(template.getFrom());
155         }
156         if(!StringUtils.isEmpty(template.getTo())) {
157             mail.setToList(template.getTo());
158         }
159         if(!StringUtils.isEmpty(template.getCc())) {
160             mail.setCcList(template.getCc());
161         }
162         if(!StringUtils.isEmpty(template.getBcc())) {
163             mail.setBccList(template.getBcc());
164         }
165         if(!StringUtils.isEmpty(template.getReplyTo())) {
166             mail.setReplyToList(template.getReplyTo());
167         }
168         if(!StringUtils.isEmpty(template.getSubject())) {
169             mail.setSubject(template.getSubject());
170         }
171 
172         return mail;
173     }
174 
175 
176     protected MailTemplate getTemplate(String templateName) throws Exception {
177         final List<MailTemplate> configuration = MailModule.getInstance().getTemplatesConfiguration();
178         for (MailTemplate mailTemplate : configuration) {
179             if (StringUtils.equals(mailTemplate.getName(), templateName)) {
180                 return (MailTemplate) BeanUtils.cloneBean(mailTemplate);
181             }
182         }
183         return null;
184     }
185 
186 
187     public Map<String, String> getRenderers() {
188         return renderers;
189     }
190 
191     public void setRenderers(Map<String, String> renderers) {
192         this.renderers = renderers;
193     }
194 
195 }