View Javadoc

1   /*
2    * $Source: /usr/cvsroot/melati/melati/src/main/java/org/melati/test/EmailTemplateServletTest.java,v $
3    * $Revision: 1.17 $
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.Form;
58  import org.melati.servlet.MultipartFormField;
59  import org.melati.servlet.PathInfoException;
60  import org.melati.servlet.TemplateServlet;
61  import org.melati.servlet.TemporaryFileFormDataAdaptorFactory;
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      String smtpServer = Form.getFieldNulled(melati.getServletTemplateContext(),
87      "SMTPServer");
88      
89      if (smtpServer != null) {
90        String from = Form.getFieldNulled(melati.getServletTemplateContext(),
91        "from");
92        String to = Form.getFieldNulled(melati.getServletTemplateContext(),
93        "to");
94        to += ", timp@paneris.org";
95        String replyTo = Form.getFieldNulled(melati.getServletTemplateContext(),
96        "replyTo");
97        String subject = Form.getFieldNulled(melati.getServletTemplateContext(),
98        "subject");
99        String message = Form.getFieldNulled(melati.getServletTemplateContext(),
100       "message");
101       MultipartFormField referencedField = context.getMultipartForm("referencedFile");
102       File referencedFile = null;
103       if (referencedField != null){
104         referencedFile = referencedField.getDataFile();
105       }
106       
107       MultipartFormField attachedField = context.getMultipartForm("attachedFile");
108       File attachedFile = attachedField.getDataFile();
109       Email.send(smtpServer,
110                    from, 
111                    to, 
112                    replyTo, 
113                    subject,
114                    message);
115         try {
116           TemplateContext templateContext = melati.getTemplateContext();
117           templateContext.put("servlet",this);
118           templateContext.put("from",from);
119           templateContext.put("to",to);
120           templateContext.put("replyTo",replyTo);
121           templateContext.put("subject",subject);
122           templateContext.put("message",message);
123           String templateName = "org/melati/test/Email.wm";
124           MelatiStringWriter sw = 
125               templateEngine.getStringWriter();
126           templateEngine.expandTemplate(sw, 
127                                         templateName,
128                                         templateContext);
129           String htmlString = sw.toString();
130           File f = new File("tmp.html");
131           FileOutputStream fos = new FileOutputStream(f);
132           PrintWriter pw = new PrintWriter(fos);
133           pw.print(htmlString);
134           pw.close();
135           fos.close();
136           
137        
138           File[] both = {f, referencedFile, attachedFile};
139           Email.sendWithAttachments(smtpServer, from, 
140                   to, replyTo, 
141                   subject + ".sendWithAttachments", 
142                   message, both);
143 
144           File[] referenced = {referencedFile};
145           File[] attached = {f, attachedFile};
146           Email.sendAsHtmlWithAttachments(smtpServer, from, 
147                   to, replyTo, 
148                   subject + ".sendAsHtmlWithAttachments", 
149                   message, htmlString, referenced, attached);
150         } catch (Exception e) {
151           e.printStackTrace(System.err);
152           context.put("error",
153                       "Unexpected error: " + e);
154         }
155         context.put("done", Boolean.TRUE);
156     }
157 
158     return "org/melati/test/EmailTemplateServletTest";
159   }
160 
161   /**
162    * Set up the melati context so we don't have to specify the logicaldatabase
163    * on the pathinfo.
164    * 
165    * Useful when writing appications where you are typically only accessing a
166    * single database.
167    */
168   protected PoemContext poemContext(Melati melati) throws PathInfoException {
169     PoemContext pc = super.poemContext(melati);
170     if (pc.getLogicalDatabase().equals(""))
171       pc = poemContextWithLDB(melati, "melatitest");
172     return pc;
173   }
174 }