Package com.agiletec.plugins.jpwebmail.apsadmin.webmail.message

Source Code of com.agiletec.plugins.jpwebmail.apsadmin.webmail.message.NewMessageAction

/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando Enterprise Edition software.
* You can redistribute it and/or modify it
* under the terms of the Entando's EULA
*
* See the file License for the specific language governing permissions  
* and limitations under the License
*
*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpwebmail.apsadmin.webmail.message;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.Date;
import java.util.List;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.FolderNotFoundException;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import com.agiletec.aps.system.ApsSystemUtils;
import com.agiletec.aps.system.exception.ApsSystemException;
import com.agiletec.aps.system.services.user.UserDetails;
import com.agiletec.plugins.jpwebmail.aps.system.JpwebmailSystemConstants;
import com.agiletec.plugins.jpwebmail.aps.system.services.addressbook.IAddressBookManager;
import com.agiletec.plugins.jpwebmail.aps.system.services.webmail.IUserMailHelper;
import com.agiletec.plugins.jpwebmail.aps.system.services.webmail.IWebMailManager;
import com.agiletec.plugins.jpwebmail.apsadmin.util.AttachmentInfo;
import com.agiletec.plugins.jpwebmail.apsadmin.webmail.message.helper.FileHelper;
import com.agiletec.plugins.jpwebmail.apsadmin.webmail.message.helper.INewMessageActionHelper;

/**
* @version 1.0
* @author E.Santoboni
*/
public class NewMessageAction extends AbstractMessageAction implements INewMessageAction {
 
  @Override
  public void validate() {
    super.validate();
    try {
      MimeMessage message = this.getNewMessageHelper().updateMessageOnSession(this.getRequest());
      if ((null == message.getRecipients(RecipientType.TO) || message.getRecipients(RecipientType.TO).length == 0) &&
          (null == message.getRecipients(RecipientType.CC) || message.getRecipients(RecipientType.CC).length == 0) &&
          (null == message.getRecipients(RecipientType.BCC) || message.getRecipients(RecipientType.BCC).length == 0)) {
        this.addFieldError("recipientsTo", this.getText("WebMail.recipients.empty"));
      }
      if (null == message.getSubject() || message.getSubject().trim().length() == 0) {
        this.addFieldError("subject", this.getText("WebMail.subject.empty"));
      }
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "validate");
      throw new RuntimeException("Errore in validazione", t);
    }
  }
 
  @Override
  public String newMessage() {
    try {
      MimeMessage message = this.getWebMailManager().createNewEmptyMessage();
      String from = this.getUserMailHelper().getEmailAddress(this.getCurrentUser());
      message.setFrom(new InternetAddress(from));
      Multipart multiPart = new MimeMultipart();
      MimeBodyPart textBodyPart = new MimeBodyPart();
      textBodyPart.setContent("", "TEXT/PLAIN; charset=UTF-8");
      multiPart.addBodyPart(textBodyPart);
      message.setContent(multiPart, "UTF-8");
      this.getRequest().getSession().setAttribute(JpwebmailSystemConstants.CURRENT_MESSAGE_ON_EDIT, message);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "reply");
      return FAILURE;
    }
    return SUCCESS;
  }
 
  @Override
  public String reply() {
    return this.reply(false, false);
  }
 
  @Override
  public String replyAll() {
    return this.reply(true, false);
  }
 
  @Override
  public String forward() {
    return this.reply(false, true);
  }
 
  protected String reply(boolean all, boolean insertAttach) {
    try {
      Message message = this.getSelectedMessage();
      if (null == message) return "intro";
      // Create a reply message
          MimeMessage reply = (MimeMessage) message.reply(all);
          // Set the from field
          String from = this.getUserMailHelper().getEmailAddress(this.getCurrentUser());
          reply.setFrom(new InternetAddress(from));
         
          if (!all && insertAttach) {//is Forward
            String subject = "[Fwd: " + message.getSubject() + "]";
            reply.setSubject(subject, "UTF-8");
          }
         
          Multipart multiPart = new MimeMultipart();
         
          // Create the reply content, copying over the original if text
      MimeMessage orig = (MimeMessage) message;
      StringBuffer buffer = this.getContentForReply(orig);
     
      MimeBodyPart textBodyPart = new MimeBodyPart();
      textBodyPart.setContent(buffer.toString(), "TEXT/PLAIN; charset=UTF-8");
      multiPart.addBodyPart(textBodyPart);
     
      if (insertAttach) {
            this.replyAttachments(message, multiPart);
          }
      reply.setContent(multiPart, "UTF-8");
      this.getRequest().getSession().setAttribute(JpwebmailSystemConstants.CURRENT_MESSAGE_ON_EDIT, reply);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "reply");
      return FAILURE;
    }
    return SUCCESS;
  }
 
  private StringBuffer getContentForReply(MimeMessage orig) throws MessagingException, IOException {
    StringBuffer buffer = new StringBuffer();
    String content = null;
    if (orig.isMimeType("text/plain")) {
      content = (String) orig.getContent();
    } else {
      content = this.getContent(orig);
    }
    StringReader contentReader = new StringReader(content);
    BufferedReader br = new BufferedReader(contentReader);
    String contentLine;
    while ((contentLine = br.readLine()) != null) {
      buffer.append("> ");
      buffer.append(contentLine);
      buffer.append("\r\n");
    }
    buffer.append("\n\n");
    return buffer;
  }
 
  public MimeMessage getMessage() {
    return (MimeMessage) this.getRequest().getSession().getAttribute(JpwebmailSystemConstants.CURRENT_MESSAGE_ON_EDIT);
  }
 
  @Override
  public String send() {
    String sentFolderName = this.getWebMailManager().getSentFolderName();
    try {
      MimeMessage message = this.getMessage();
      UserDetails currentUser = this.getCurrentUser();
      this.getWebMailManager().sendMail(message, currentUser.getUsername(), currentUser.getPassword());
      Folder dfolder = this.getStore().getFolder(sentFolderName);
      if (null == dfolder) {
        this.addActionMessage(this.getText("SENT_FOLDER_NULL"));
        return SUCCESS;
      }
      dfolder.open(Folder.READ_WRITE);
      message.setSentDate(new Date());
      message.setFlag(Flags.Flag.SEEN, true);
      Message[] msgs = new Message[1];
      msgs[0] = message;
      if (msgs.length != 0) {
        dfolder.appendMessages(msgs);
      }
      this.setOpenedFolder(dfolder);
    } catch (FolderNotFoundException t) {
      ApsSystemUtils.logThrowable(t, this, "sent", "Sent Folder '" + sentFolderName + "' not Found");
      this.addActionError(this.getText("SENT_FOLDER_NOT_FOUND", new String[]{sentFolderName}));
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "send");
      return FAILURE;
    } finally {
      this.getNewMessageHelper().deleteUserWebMailTempDirectory(this.getCurrentUser());
    }
    return SUCCESS;
  }
 
  private void replyAttachments(Message message, Multipart multiPart) throws ApsSystemException {
    List<AttachmentInfo> attachInfos = this.getAttachmentInfos(message);
    for (int i=0; i<attachInfos.size(); i++) {
      AttachmentInfo info = attachInfos.get(i);
      BodyPart bodyPart = info.getBodyPart();
      this.createTempBodyPart(i, bodyPart, multiPart);
    }
  }
 
  private void createTempBodyPart(int number, BodyPart bodyPart, Multipart multiPart) throws ApsSystemException {
    try {
      String bodyPartFileName = bodyPart.getFileName();
      String bodypartFolder = this.getNewMessageHelper().getUserWebMailDiskRootFolder(this.getCurrentUser()) + File.separator + number;
      File dir = new File(bodypartFolder);
      if (!dir.exists() || !dir.isDirectory()) {
        dir.mkdirs();
      }
      String fileName = bodypartFolder + File.separator + bodyPartFileName;
      InputStream inputStream = bodyPart.getDataHandler().getInputStream();
      FileHelper.saveFile(fileName, inputStream);
     
        BodyPart messageBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(fileName);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(bodyPartFileName);
        multiPart.addBodyPart(messageBodyPart);
      } catch (Throwable t) {
        throw new ApsSystemException("Errore in preparazione attachments in reply", t);
      }
  }
 
  public Boolean existAddressBook() {
    return (null != this.getAddressBookManager());
  }
 
  protected IWebMailManager getWebMailManager() {
    return _webMailManager;
  }
  public void setWebMailManager(IWebMailManager webMailManager) {
    this._webMailManager = webMailManager;
  }
 
  protected INewMessageActionHelper getNewMessageHelper() {
    return _newMessageHelper;
  }
  public void setNewMessageHelper(INewMessageActionHelper newMessageHelper) {
    this._newMessageHelper = newMessageHelper;
  }
 
  protected IUserMailHelper getUserMailHelper() {
    return _userMailHelper;
  }
  public void setUserMailHelper(IUserMailHelper userMailHelper) {
    this._userMailHelper = userMailHelper;
  }
 
  public IAddressBookManager getAddressBookManager() {
    return _addressBookManager;
  }
  public void setAddressBookManager(IAddressBookManager addressBookManager) {
    this._addressBookManager = addressBookManager;
  }
 
  private IWebMailManager _webMailManager;
  private INewMessageActionHelper _newMessageHelper;
  private IUserMailHelper _userMailHelper;
  private IAddressBookManager _addressBookManager;
 
}
TOP

Related Classes of com.agiletec.plugins.jpwebmail.apsadmin.webmail.message.NewMessageAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.