/* * Copyright 2000-2001,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jetspeed.modules.actions.portlets; // Turbine stuff import org.apache.turbine.util.RunData; // Jetspeed stuff import org.apache.jetspeed.portal.Portlet; import org.apache.jetspeed.om.registry.Parameter; import org.apache.jetspeed.services.Registry; import org.apache.jetspeed.om.registry.PortletEntry; import org.apache.jetspeed.services.logging.JetspeedLogFactoryService; import org.apache.jetspeed.services.logging.JetspeedLogger; import org.apache.jetspeed.services.resources.JetspeedResources; // Java stuff import java.util.Hashtable; import java.util.Iterator; import java.io.File; import javax.mail.Session; import javax.mail.Address; import javax.mail.Message; import javax.mail.Multipart; import javax.mail.Transport; import javax.mail.internet.MimeMessage; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMultipart; import javax.activation.FileDataSource; import javax.activation.DataHandler; /** * This action sets up the template context for retrieving stock quotes. * * @author <a href="mailto:morciuch@apache.org">Mark Orciuch</a> * @author <a href="mailto:weaver@apache.org">Scott T. Weaver</a> * @version $Id: QuestionnaireAction.java,v 1.7 2004/02/23 02:56:58 jford Exp $ */ public class QuestionnaireAction extends JspPortletAction { /** * Static initialization of the logger for this class */ private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(QuestionnaireAction.class.getName()); /** * Build the normal state content for this portlet. * * @param portlet The jsp-based portlet that is being built. * @param rundata The turbine rundata context for this request. */ protected void buildNormalContext(Portlet portlet, RunData rundata) { PortletEntry entry = (PortletEntry) Registry.getEntry(Registry.PORTLET, portlet.getName()); Iterator i = entry.getParameterNames(); Hashtable qa = new Hashtable(); while (i.hasNext()) { String name = (String) i.next(); Parameter param = entry.getParameter(name); if (param.isHidden() == false) { String title = param.getTitle(); String value = portlet.getPortletConfig().getInitParameter(name); qa.put(title, value); } } rundata.getRequest().setAttribute("questions", qa); // After successful send, the user may or may not click the Continue button so // reset to default template here if (rundata.getRequest().getAttribute("email") == null) { //this.setTemplate(rundata, portlet, null); resetTemplate(rundata); } } /** * Continue event handler. * * @param portlet The jsp-based portlet that is being built. * @param rundata The turbine rundata context for this request. */ public void doContinue(RunData rundata, Portlet portlet) { // this.setTemplate(rundata, portlet, null); resetTemplate(rundata); } /** * Sort the quotes. * * @param portlet The jsp-based portlet that is being built. * @param rundata The turbine rundata context for this request. */ public void doEmail(RunData rundata, Portlet portlet) { StringBuffer emailBody = new StringBuffer(); PortletEntry entry = (PortletEntry) Registry.getEntry(Registry.PORTLET, portlet.getName()); Iterator i = entry.getParameterNames(); while (i.hasNext()) { String name = (String) i.next(); Parameter param = entry.getParameter(name); if (param.isHidden() == false) { String title = param.getTitle(); String value = portlet.getPortletConfig().getInitParameter(name); value = value == null || value.length() == 0 ? "NOT PROVIDED" : value; emailBody.append(title); emailBody.append(" ===> "); emailBody.append(value); emailBody.append("\n\n"); } } String emailSmtp = JetspeedResources.getString(JetspeedResources.MAIL_SERVER_KEY); String emailFrom = JetspeedResources.getString("mail.support", "david@bluesunrise.com"); String emailTo = rundata.getParameters().getString("emailTo", "jetspeed-dev@jakarta.apache.org"); String emailAttachment = rundata.getRequest().getParameter("emailAttachment"); try { String emailText = emailBody.toString(); // Create the JavaMail session java.util.Properties properties = System.getProperties(); properties.put("mail.smtp.host", emailSmtp); Session emailSession = Session.getInstance(properties, null); // Construct the message MimeMessage message = new MimeMessage(emailSession); // Set the from address Address fromAddress = new InternetAddress(emailFrom); message.setFrom(fromAddress); // Parse and set the recipient addresses Address[] toAddresses = InternetAddress.parse(emailTo); message.setRecipients(Message.RecipientType.TO, toAddresses); // Set the subject and text message.setSubject("Jetspeed Questionnaire from " + rundata.getUser().getEmail()); message.setText(emailText); // Attach file with message if (emailAttachment != null) { File file = new File(emailAttachment); if (file.exists()) { // create and fill the first message part MimeBodyPart mbp1 = new MimeBodyPart(); mbp1.setText(emailText); // create the second message part MimeBodyPart mbp2 = new MimeBodyPart(); // attach the file to the message FileDataSource fds = new FileDataSource(emailAttachment); mbp2.setDataHandler(new DataHandler(fds)); mbp2.setFileName(fds.getName()); // create the Multipart and its parts to it Multipart mp = new MimeMultipart(); mp.addBodyPart(mbp1); mp.addBodyPart(mbp2); // add the Multipart to the message message.setContent(mp); } else { message.setText(emailBody.toString()); } } // send the message Transport.send(message); // Display confirmation rundata.getRequest().setAttribute("email", emailBody.toString()); String confirmTemplate = portlet.getPortletConfig().getInitParameter("confirm.template", "JetspeedQuestionnaireConfirmation.jsp"); // this.setTemplate(rundata, portlet, confirmTemplate); setTemplate(rundata, confirmTemplate, true); rundata.setMessage("Email successfully sent"); } catch (Exception e) { logger.error("Exception", e); rundata.setMessage("Error sending email: " + e); } //buildNormalContext(portlet, rundata); } }