This is the Servlet for reading a particular email content. An EmailMessageReader object is saved as a session object. It is used to refer to the current email and shared by all the Servlet for the current session.
HttpSession session = request.getSession(true); EmailMessageReader emailReader = (EmailMessageReader) session.getAttribute("emailReader"); if (emailReader == null) { emailReader = new EmailMessageReader(); session.setAttribute("emailReader", emailReader); }
The rest of the Servlet simply generates the VXML content for the current email. If the email has attachment, it is redirected to email_inc, which corresponds to EmailIncServlet. Otherwise, it is redirected to email_cnt_end, which corresponds to EmailCntEndServlet.
Source Code
package vx.apps.email; import java.io.PrintWriter; import java.io.IOException; import javax.servlet.http.*; import javax.mail.*; public class EmailCntServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws IOException { HttpSession session = request.getSession(true); EmailMessageReader emailReader = (EmailMessageReader) session.getAttribute("emailReader"); if (emailReader == null) { emailReader = new EmailMessageReader(); session.setAttribute("emailReader", emailReader); } PrintWriter pw = response.getWriter(); pw.println("<?xml version=\"1.0\"?>"); pw.println("<vxml version=\"1.0\">"); EmailManager email_agent = EmailManager.getInstance(request); if (email_agent == null) { pw.println("</vxml>"); return; } String indexstr = request.getParameter("index"); int index = Integer.parseInt(indexstr); Message msg = email_agent.read(index); try { emailReader.setMessage(msg); } catch (MessagingException e) { pw.println("<block>Failed to set message</block>"); pw.println("</vxml>"); return; } String newContent = emailReader.getNewContent(); String[] newCts = EmailMessageReader.breakup(newContent); String oldContent = emailReader.getOldContent(); String[] oldCts = EmailMessageReader.breakup(oldContent); int numIncludes = emailReader.numIncludeFiles(); pw.println("<form id=\"content\">"); pw.println("<var name=\"index\" expr=\"" + indexstr + "\"/>"); pw.println("<field name=\"readContent\">"); pw.println(" <prompt timeout=\"1s\">"); if (newContent == null) { pw.println("<block>"); pw.println(" <audio src=\"audio/${GW_RECORDED_VOICE}/ email_no_content.wav\"/>"); pw.println("</block>"); } else { for (int i = 0; i < newCts.length; i++) { pw.println("<block>"); pw.println(newCts[i]); pw.println("</block>"); } } pw.println(" </prompt>"); pw.println(" <dtmf>#</dtmf>"); pw.println(" <noinput>"); pw.println(" <assign name=\"readContent\" expr=\"'done'\"/>"); pw.println(" </noinput>"); pw.println("</field>"); if (oldContent != null) { pw.println(" <field name=\"wantOldContent\" type=\"boolean\">"); pw.println(" <prompt>"); pw.println(" <audio src=\"audio/${GW_RECORDED_VOICE}/ email_prev_msg.wav\"/>"); pw.println(" </prompt>"); pw.println(" <filled>"); pw.println(" <if cond=\"!wantOldContent\">"); pw.println(" <assign name=\"readOldContent\" expr=\"'skip'\"/>"); pw.println(" </if>"); pw.println(" </filled>"); pw.println(" </field>"); pw.println(" <field name=\"readOldContent\">"); pw.println(" <prompt timeout=\"1s\">"); for (int i = 0; i < oldCts.length; i++) { pw.println(" <block>"); pw.println(oldCts[i]); pw.println(" </block>"); } pw.println(" </prompt>"); pw.println(" <dtmf>#</dtmf>"); pw.println(" <noinput>"); pw.println(" <assign name=\"readOldContent\" expr=\"'done'\"/>"); pw.println(" </noinput>"); pw.println(" </field>"); } if (numIncludes > 0) { pw.println(" <block>"); pw.println(" <audio src=\"audio/${GW_RECORDED_VOICE}/ email_has.wav\"/>"); pw.println(Integer.toString(numIncludes)); pw.println(" <audio src=\"audio/${GW_RECORDED_VOICE}/ attached_files.wav\"/>"); pw.println(" <submit next=\"email_inc\" namelist=\"index\"/>"); pw.println(" </block>"); } else { pw.println(" <block>"); pw.println(" <submit next=\"email_cnt_end\" namelist=\"index\"/>"); pw.println(" </block>"); } pw.println("</form>"); pw.println("</vxml>"); } }