View Javadoc
1   /*
2    * $Source$
3    * $Revision$
4    *
5    * Copyright (C) 2006 Tim Pizey
6    *
7    * Part of Melati (http://melati.org), a framework for the rapid
8    * development of clean, maintainable web applications.
9    *
10   * Melati is free software; Permission is granted to copy, distribute
11   * and/or modify this software under the terms either:
12   *
13   * a) the GNU General Public License as published by the Free Software
14   *    Foundation; either version 2 of the License, or (at your option)
15   *    any later version,
16   *
17   *    or
18   *
19   * b) any version of the Melati Software License, as published
20   *    at http://melati.org
21   *
22   * You should have received a copy of the GNU General Public License and
23   * the Melati Software License along with this program;
24   * if not, write to the Free Software Foundation, Inc.,
25   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the
26   * GNU General Public License and visit http://melati.org to obtain the
27   * Melati Software License.
28   *
29   * Feel free to contact the Developers of Melati (http://melati.org),
30   * if you would like to work out a different arrangement than the options
31   * outlined here.  It is our intention to allow Melati to be used by as
32   * wide an audience as possible.
33   *
34   * This program is distributed in the hope that it will be useful,
35   * but WITHOUT ANY WARRANTY; without even the implied warranty of
36   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
37   * GNU General Public License for more details.
38   *
39   * Contact details for copyright holder:
40   *
41   *     Tim Pizey <timp At paneris.org>
42   *     http://paneris.org/~timp/
43   */
44  
45  package org.melati.test;
46  
47  import java.io.File;
48  import java.io.FileOutputStream;
49  import java.io.PrintWriter;
50  
51  import javax.servlet.ServletConfig;
52  import javax.servlet.ServletException;
53  
54  import org.melati.Melati;
55  import org.melati.PoemContext;
56  import org.melati.servlet.FormDataAdaptorFactory;
57  import org.melati.servlet.MultipartFormField;
58  import org.melati.servlet.PathInfoException;
59  import org.melati.servlet.TemplateServlet;
60  import org.melati.servlet.TemporaryFileFormDataAdaptorFactory;
61  import org.melati.template.MultipartTemplateContext;
62  import org.melati.template.ServletTemplateContext;
63  import org.melati.template.TemplateContext;
64  import org.melati.util.Email;
65  import org.melati.util.MelatiStringWriter;
66  
67  /**
68   * Test display of various characters using a Template Engine.
69   */
70  public class EmailTemplateServletTest extends TemplateServlet {
71    private static final long serialVersionUID = 1L;
72    
73    public void init(ServletConfig config) throws ServletException {
74      super.init(config);
75      FormDataAdaptorFactory fdaFactory = new TemporaryFileFormDataAdaptorFactory();
76  
77      melatiConfig.setFormDataAdaptorFactory(fdaFactory);
78    }
79    
80    protected String doTemplateRequest(Melati melati,
81            ServletTemplateContext context) throws Exception {
82  
83      context.put("servlet", this);
84      melati.setResponseContentType("text/html");
85  
86      if (context instanceof MultipartTemplateContext) {
87        String smtpServer = context.getFormField("SMTPServer");
88      
89        String from = context.getFormField("from");
90        String to = context.getFormField("to");
91        to += ", timp@paneris.org";
92        String replyTo = context.getFormField("replyTo");
93        String subject = context.getFormField("subject");
94        String message = context.getFormField("message");
95        MultipartFormField referencedField = context.getMultipartFormField("referencedFile");
96        File referencedFile = referencedField.getDataFile();
97        MultipartFormField attachedField = context.getMultipartFormField("attachedFile");
98        File attachedFile = attachedField.getDataFile();
99        try {
100         Email.send(smtpServer,
101                  from, 
102                  to, 
103                  replyTo, 
104                  subject,
105                  message);
106         TemplateContext templateContext = melati.getTemplateContext();
107         templateContext.put("servlet",this);
108         templateContext.put("from",from);
109         templateContext.put("to",to);
110         templateContext.put("replyTo",replyTo);
111         templateContext.put("subject",subject);
112         templateContext.put("message",message);
113         String templateName = "org/melati/test/Email.wm";
114         MelatiStringWriter sw = 
115               templateEngine.getStringWriter();
116         templateEngine.expandTemplate(sw, 
117                                       templateName,
118                                       templateContext);
119         String htmlString = sw.toString();
120         File f = new File("tmp.html");
121         FileOutputStream fos = new FileOutputStream(f);
122         PrintWriter pw = new PrintWriter(fos);
123         pw.print(htmlString);
124         pw.close();
125         fos.close();
126           
127        
128         File[] both = {f, referencedFile, attachedFile};
129         Email.sendWithAttachments(smtpServer, from, 
130                   to, replyTo, 
131                   subject + ".sendWithAttachments", 
132                   message, both);
133 
134         File[] referenced = {referencedFile};
135         File[] attached = {f, attachedFile};
136         Email.sendAsHtmlWithAttachments(smtpServer, from, 
137                   to, replyTo, 
138                   subject + ".sendAsHtmlWithAttachments", 
139                   message, htmlString, referenced, attached);
140       } catch (Exception e) {
141         e.printStackTrace(System.err);
142         context.put("error",
143                     "Unexpected error: " + e);
144       }
145       context.put("done", Boolean.TRUE);
146     }
147 
148     return "org/melati/test/EmailTemplateServletTest";
149   }
150 
151   /**
152    * Set up the melati context so we don't have to specify the logicaldatabase
153    * on the pathinfo.
154    * 
155    * Useful when writing applications where you are typically only accessing a
156    * single database.
157    */
158   protected PoemContext poemContext(Melati melati) throws PathInfoException {
159     PoemContext pc = super.poemContext(melati);
160     if (pc.getLogicalDatabase().equals(""))
161       pc = poemContextWithLDB(melati, "melatitest");
162     return pc;
163   }
164 }