KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > infoglue > deliver > applications > inputhandlers > MailSender


1 /* ===============================================================================
2  *
3  * Part of the InfoGlue Content Management Platform (www.infoglue.org)
4  *
5  * ===============================================================================
6  *
7  * Copyright (C)
8  *
9  * This program is free software; you can redistribute it and/or modify it under
10  * the terms of the GNU General Public License version 2, as published by the
11  * Free Software Foundation. See the file LICENSE.html for more information.
12  *
13  * This program is distributed in the hope that it will be useful, but WITHOUT
14  * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
15  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License along with
18  * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
19  * Place, Suite 330 / Boston, MA 02111-1307 / USA.
20  *
21  * ===============================================================================
22  */

23  
24  
25 package org.infoglue.deliver.applications.inputhandlers;
26
27 import java.io.PrintWriter JavaDoc;
28 import java.io.StringWriter JavaDoc;
29 import java.util.HashMap JavaDoc;
30
31 import javax.servlet.http.HttpServletRequest JavaDoc;
32
33 import org.infoglue.cms.security.InfoGluePrincipal;
34 import org.infoglue.cms.util.mail.MailServiceFactory;
35 import org.infoglue.deliver.applications.databeans.DatabaseWrapper;
36 import org.infoglue.deliver.applications.databeans.DeliveryContext;
37 import org.infoglue.deliver.controllers.kernel.impl.simple.BasicTemplateController;
38 import org.infoglue.deliver.controllers.kernel.impl.simple.ContentDeliveryController;
39 import org.infoglue.deliver.controllers.kernel.impl.simple.IntegrationDeliveryController;
40 import org.infoglue.deliver.controllers.kernel.impl.simple.NodeDeliveryController;
41 import org.infoglue.deliver.controllers.kernel.impl.simple.TemplateController;
42 import org.infoglue.deliver.util.VelocityTemplateProcessor;
43
44 /**
45  * This is the first implementation of the InfoGlueInputHandler which emails a recipent the feedback.
46  * This class needs a couple of parameters from the form-content. They are:
47  *
48  * MailSender.fromAddress = The address from where the mail should originate
49  * MailSender.toAddress = The recipient of the feedback on the site.
50  * MailSender.subject = The subject line we want in the emails.
51  * MailSender.template = The template is as all other templates a way to present info and in this case to create an email body. Check out the examples.
52  */

53
54 public class MailSender implements InfoGlueInputHandler
55 {
56     
57     /**
58      * This is the method that is invoked by the calling action.
59      */

60     
61     public void processInput(DatabaseWrapper databaseWrapper, Integer JavaDoc siteNodeId, Integer JavaDoc languageId, Integer JavaDoc contentId, Integer JavaDoc formContentId, HashMap JavaDoc parameters, HttpServletRequest JavaDoc request, InfoGluePrincipal infogluePrincipal) throws Exception JavaDoc
62     {
63         String JavaDoc template = ContentDeliveryController.getContentDeliveryController().getContentAttribute(databaseWrapper.getDatabase(), formContentId, languageId, "MailSender_template", siteNodeId, true, DeliveryContext.getDeliveryContext(), infogluePrincipal, false);
64         String JavaDoc fromAddress = ContentDeliveryController.getContentDeliveryController().getContentAttribute(databaseWrapper.getDatabase(), formContentId, languageId, "MailSender_fromAddress", siteNodeId, true, DeliveryContext.getDeliveryContext(), infogluePrincipal, false);
65         String JavaDoc toAddress = ContentDeliveryController.getContentDeliveryController().getContentAttribute(databaseWrapper.getDatabase(), formContentId, languageId, "MailSender_toAddress", siteNodeId, true, DeliveryContext.getDeliveryContext(), infogluePrincipal, false);
66         String JavaDoc subject = ContentDeliveryController.getContentDeliveryController().getContentAttribute(databaseWrapper.getDatabase(), formContentId, languageId, "MailSender_subject", siteNodeId, true, DeliveryContext.getDeliveryContext(), infogluePrincipal, false);
67         String JavaDoc body = renderMailBody(databaseWrapper, siteNodeId, languageId, contentId, template, parameters, request, infogluePrincipal);
68         
69         //MailServiceFactory.getService().send(fromAddress, toAddress, subject, body);
70
MailServiceFactory.getService().send(fromAddress, toAddress, subject, body, "text/html", "UTF-8");
71     }
72     
73     
74     
75     /**
76      * This method creates a mail from a velocity-template.
77      */

78     
79     private String JavaDoc renderMailBody(DatabaseWrapper databaseWrapper, Integer JavaDoc siteNodeId, Integer JavaDoc languageId, Integer JavaDoc contentId, String JavaDoc template, HashMap JavaDoc parameters, HttpServletRequest JavaDoc request, InfoGluePrincipal infogluePrincipal) throws Exception JavaDoc
80     {
81         parameters.put("templateLogic", getTemplateController(databaseWrapper, siteNodeId, languageId, contentId, request, infogluePrincipal));
82         
83         StringWriter JavaDoc tempString = new StringWriter JavaDoc();
84         PrintWriter JavaDoc pw = new PrintWriter JavaDoc(tempString);
85         new VelocityTemplateProcessor().renderTemplate(parameters, pw, template);
86         return tempString.toString();
87     }
88     
89     
90         /**
91      * This method should be much more sophisticated later and include a check to see if there is a
92      * digital asset uploaded which is more specialized and can be used to act as serverside logic to the template.
93      * The method also consideres wheter or not to invoke the preview-version with administrative functioality or the
94      * normal site-delivery version.
95      */

96     
97     public TemplateController getTemplateController(DatabaseWrapper databaseWrapper, Integer JavaDoc siteNodeId, Integer JavaDoc languageId, Integer JavaDoc contentId, HttpServletRequest JavaDoc request, InfoGluePrincipal infogluePrincipal) throws Exception JavaDoc
98     {
99         NodeDeliveryController nodeDeliveryController = NodeDeliveryController.getNodeDeliveryController(siteNodeId, languageId, contentId);
100         IntegrationDeliveryController integrationDeliveryController = IntegrationDeliveryController.getIntegrationDeliveryController(siteNodeId, languageId, contentId);
101         
102         TemplateController templateController = new BasicTemplateController(databaseWrapper, infogluePrincipal);
103         templateController.setStandardRequestParameters(siteNodeId, languageId, contentId);
104         templateController.setHttpRequest(request);
105         templateController.setDeliveryControllers(nodeDeliveryController, null, integrationDeliveryController);
106         return templateController;
107     }
108
109 }
110
Popular Tags