/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is vox-mail.
*
* The Initial Developer of the Original Code is Voxeo Corporation.
* Portions created by Voxeo are Copyright (C) 2000-2007.
* All rights reserved.
*
* Contributor(s):
* ICOA Inc. <info@icoa.com> (http://icoa.com)
*/
package org.voxmail.struts.action;
import java.text.DateFormat;
import java.util.Date;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.search.HeaderTerm;
import javax.mail.search.SearchTerm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.voxmail.Voxmail;
import org.voxmail.VoxmailException;
import org.voxmail.mail.MailConnection;
import org.voxmail.model.Mailbox;
import org.voxmail.model.MessageWrapper;
import org.voxmail.model.Messages;
public class MainMenuAction extends Action {
static DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
response.setContentType("vxml");
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader("Expires", 0); //prevents caching at the proxy server
System.out.println(df.format(new Date())+": MainMenuAction ");
String cmd = request.getParameter("cmd");
Mailbox mailbox = (Mailbox) request.getSession().getAttribute("mailbox");
if (mailbox != null && mailbox.isFirstTime()) {
return mapping.findForward("firstVisit");
}
String messagePath = Voxmail.getProps().getProperty("filePath_Messages");
messagePath = request.getContextPath() + messagePath;
request.setAttribute("messagePath",messagePath);
if (cmd != null && cmd.equals("saved"))
{
request.setAttribute("folder","saved");
}
//For testing purposes
if (mailbox == null)
{
String mailboxId = request.getParameter("mailboxId");
try {
mailbox = Voxmail.getInstance().getVoxmailService().retrieveMailbox(mailboxId);
request.getSession().setAttribute("mailbox",mailbox);
} catch (VoxmailException e) {
// this is bad, cover it up! but send email and log.
e.printStackTrace();
}
}
String mailurl = mailbox.getMailUrl();
MailConnection mail = this.getMailConnection(true, mailbox, request);
Folder inbox = mail.getInbox();
Messages messages = new Messages();
try
{
//Message[] messageArray = inbox.getMessages();
SearchTerm st = new HeaderTerm("Message-Context","voice-message");
Message[] messageArray = inbox.search(st);
boolean supportUser = inbox.getPermanentFlags().contains(Flags.Flag.USER);
System.out.println("Support for user flags: " + supportUser);
for (int i=0;i<messageArray.length;i++)
{
System.out.println("Getting message i: " + i);
MessageWrapper mw = new MessageWrapper(messageArray[i]);
messages.addMessage(mw);
}
}
catch (Exception e)
{
e.printStackTrace();
}
System.out.println("MainMenuAction set messages count: " + messages.getMessageCount());
request.setAttribute("messages",messages);
return mapping.findForward("messages");
}
protected void emptyTrash(HttpServletRequest request) {
HttpSession httpSession = request.getSession(false);
try {
MailConnection mail = (MailConnection)httpSession.getAttribute("MailConnection");
Folder inbox = mail.getInbox();
inbox.expunge();
} catch (Exception e) {
e.printStackTrace();
//logger.error("MainController::emptyTrash() - failed: " + e.getMessage());
}
}
protected MailConnection getMailConnection(boolean forceNew, Mailbox mailbox, HttpServletRequest request) {
HttpSession httpSession = request.getSession(false);
MailConnection mailConnection = null;
if (forceNew) {
//get existing connection from session
mailConnection = (MailConnection)httpSession.getAttribute("MailConnection");
if (mailConnection != null)
{
//close old connection first
System.out.println("Closing inbox and message store");
mailConnection.closeInbox();
httpSession.removeAttribute("MailConnection");
}
}
String mailurl = mailbox.getMailUrl(); //get the appropriate mailurl from the contact object
//logger.debug("GETTING NEW MAIL CONNECTION...");
System.out.println("MailURL: " + mailurl);
try {
mailConnection = new MailConnection(mailbox);
httpSession.setAttribute("MailConnection", mailConnection); //put connection into session
} catch (Exception e) {
e.printStackTrace();
//logger.error("MainController::getMailConnection() - failed for: " + mailurl + " Exception=" + e.getMessage());
}
return mailConnection;
}
protected String setFlag(HttpServletRequest request) {
HttpSession httpSession = request.getSession(false);
String strReturn = "";
try {
MailConnection mail = (MailConnection)httpSession.getAttribute("MailConnection");
Folder inbox = mail.getInbox();
Message message = inbox.getMessage(Integer.parseInt(request.getParameter("msgindex")));
String folder = request.getParameter("newfolder");
//System.out.println("SETTING FLAG................................");
//System.out.println("folder=" + folder);
//remove existing flags
message.setFlag(Flags.Flag.SEEN, false);
message.setFlag(Flags.Flag.DELETED, false);
message.setFlag(Flags.Flag.RECENT, false);
//setup the flag we're going to set
Flags.Flag flag = null;
if ("saved".equals(folder)) {
flag = Flags.Flag.SEEN;
strReturn = "Message has been saved";
} else if ("deleted".equals(folder)) {
flag = Flags.Flag.DELETED;
strReturn = "Message has been deleted";
} else {
flag = Flags.Flag.RECENT;
strReturn = "Message status set to new";
}
Flags f = new Flags();
f.add(flag);
message.setFlags(f, true);
} catch (Exception e) {
e.printStackTrace();
strReturn = "Failed to update message status";
//logger.error("MainController::setFlag() - failed: " + e.getMessage());
}
return strReturn;
}
protected void resetMessageStatus(Message message, MailConnection mailConnection) {
try {
System.out.println("SETTING FLAG for message: " + message.getMessageNumber());
//remove existing flags
// Flags flags = new Flags();
// Flags.Flag flag1 = Flags.Flag.SEEN;
// Flags.Flag flag2 = Flags.Flag.DELETED;
// Flags.Flag flag3 = Flags.Flag.RECENT;
// flags.add(flag1);
// flags.add(flag2);
// flags.add(flag3);
// message.setFlags(flags,false);
message.setFlag(Flags.Flag.SEEN, false);
message.setFlag(Flags.Flag.DELETED, false);
message.setFlag(Flags.Flag.RECENT, false);
//message.saveChanges();
} catch (Exception e) {
e.printStackTrace();
}
}
}