Package com.casamind.adware.server.servlet.mail

Source Code of com.casamind.adware.server.servlet.mail.OutboundMailHandler

/**
*
* Processes the individual stats sheets reported by desktop clients
*
*/

package com.casamind.adware.server.servlet.mail;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.logging.Logger;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.casamind.adware.server.domain.Company;
import com.casamind.adware.server.domain.Publisher;
import com.casamind.adware.server.domain.Slot;
import com.casamind.adware.server.domain.UserAccount;
import com.casamind.adware.server.proxy.DatastoreProxy;
import com.casamind.adware.server.proxy.MailProxy;
import com.casamind.adware.shared.MailTaskCategories;
import com.casamind.adware.shared.MailTaskTypes;
import com.casamind.adware.shared.Strings;

@SuppressWarnings("serial")
public class OutboundMailHandler extends HttpServlet {
  private static final Logger log = Logger.getLogger(OutboundMailHandler.class.getName());
  private String defaultSenderMail, defaultSenderName;
  private Slot slot = null;
  private Map<String, String> to, cc, bcc;

  @Override
  public void init(ServletConfig config) throws ServletException {
    super.init(config);
    ServletContext context = config.getServletContext();
    defaultSenderMail = context.getInitParameter("defaultSenderMail");
    defaultSenderName = context.getInitParameter("defaultSenderName");
    if (defaultSenderMail == null || "".equals(defaultSenderMail)) {
      defaultSenderMail = "mouncif.faqir@casamind.com";
    }
    if (defaultSenderName == null || "".equals(defaultSenderName)) {
      defaultSenderName = "Casamind MAROC";
    }
    to = new HashMap<String, String>();
    cc = new HashMap<String, String>();
    bcc = new HashMap<String, String>();
  }

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    log.info("Entering outbound mail servlet...");
    DateFormat parseFormatter = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
    SimpleDateFormat formatter = new SimpleDateFormat("EEE dd MMM yyyy HH:mm", Locale.FRANCE);
    String category = req.getParameter("category");
    String task = req.getParameter("task");
    resp.setHeader("Content-Type", "text/html");
    if (category.equals(MailTaskCategories.SLOT)) {
      log.info("Peforming slot email task...");
      Long entityId = Long.parseLong(req.getParameter("entityId"));
      if (entityId != null && !"".equals(entityId)) {
        slot = DatastoreProxy.getSlotById(entityId);
        if (slot != null) {
          UserAccount owner = DatastoreProxy.getOwnerById(slot.getOwnerId());
          if (owner != null) {
            setRecipientsBySlotId(owner);
            if (task.equals(MailTaskTypes.SLOT_OREDERED)) {
              log.info("Peforming slot order task...");
              String body = getBodyContentTemplate("WEB-INF/files/templates/email_slot_ordered.html");
              if (body != null) {
                log.info("Peforming variables replacement on template file...");
                body = body
                    .replace("$startDate", formatter.format(slot.getStartDate()))
                    .replace("$endDate", formatter.format(slot.getEndDate()))
                    .replace("$price", slot.getPrice().toString())
                    .replace("$slots", slot.getNbSlots().toString());
                log.info("Email body ready for sending!");
                String subject = "Votre demande de cr�neau";
                MailProxy.sendMail(defaultSenderMail, defaultSenderName, to, cc, bcc, subject, body, "text/html", null, null, null);
              } else {
                log.warning("Message body is null due to invalid template!");
              }
            } else if (task.equals(MailTaskTypes.SLOT_INVOICED)) {
              log.info("Peforming slot invoice task...");
              Calendar calendar = Calendar.getInstance();
              calendar.add(Calendar.MONTH, 1);
              // a month from now
              Date dueDate = calendar.getTime();
              String dueDateAsString = req.getParameter("dueDate");
              String billingAddress = getBillingAddress(owner);
              if (dueDateAsString != null && !"".equals(dueDateAsString)) {
                try {
                  dueDate = parseFormatter.parse(dueDateAsString);
                } catch (ParseException e) {
                  log.warning("Could not parse dueDate string! dueDate=" + dueDateAsString + "\nWill consider default dueDate (a month from now). dueDate: " + formatter.format(dueDate));
                }
              } else {
                log.warning("dueDate paramter is null or empty! dueDate=" + dueDateAsString + "\nWill consider default dueDate (a month from now). dueDate: " + formatter.format(dueDate));
              }
              String billDownloadlink = req.getParameter("billDownloadlink");
              if (billDownloadlink == null || "".equals(billDownloadlink)) {
                log.warning("Invoice download link is null or empty.");
                billDownloadlink = "http://publish.www.casamind.com";
              }
              String body = getBodyContentTemplate("WEB-INF/files/templates/email_slot_invoiced.html");
              if (body != null) {
                log.info("Peforming variables replacement on template file...");
                body = body
                    .replace("$startDate", formatter.format(slot.getStartDate()))
                    .replace("$endDate", formatter.format(slot.getEndDate()))
                    .replace("$dueDate", new SimpleDateFormat("EEEE dd MMMM yyyy", Locale.FRANCE).format(dueDate))
                    .replace("$price", slot.getPrice().toString())
                    .replace("$slots", slot.getNbSlots().toString())
                    .replace("$address", billingAddress)
                    .replace("$billDownloadlink", billDownloadlink);
                log.info("Email body ready for sending!");
                String subject = "Votre facture est pr�te";
                MailProxy.sendMail(defaultSenderMail, defaultSenderName, to, cc, bcc, subject, body, "text/html", null, null, null);
              } else {
                log.warning("Message body is null due to invalid template!");
              }
            } else if (task.equals(MailTaskTypes.SLOT_APPROVED)) {
              log.info("Peforming slot approval task...");
              String body = getBodyContentTemplate("WEB-INF/files/templates/email_slot_approved.html");
              if (body != null) {
                log.info("Peforming variables replacement on template file...");
                body = body
                    .replace("$startDate", formatter.format(slot.getStartDate()))
                    .replace("$endDate", formatter.format(slot.getEndDate()))
                    .replace("$price", slot.getPrice().toString())
                    .replace("$slots", slot.getNbSlots().toString());
                log.info("Email body ready for sending!");
                String subject = "Votre cr�neau a �t� accord�";
                MailProxy.sendMail(defaultSenderMail, defaultSenderName, to, cc, bcc, subject, body, "text/html", null, null, null);
              } else {
                log.warning("Message body is null due to invalid template!");
              }
            } else if (task.equals(MailTaskTypes.SLOT_CANCELLED)) {
              log.info("Peforming slot cancellation task...");
              String reason = req.getParameter("reason");
              String userEmail = req.getParameter("userEmail");
              String userNickname = req.getParameter("userNickname");
              if (reason == null || !"".equals(reason)) {
                log.warning("reason parameter string is null or empty. reason=" + reason);
                reason = "NOT SPECIFIED BY USER";
              }
              String body = getBodyContentTemplate("WEB-INF/files/templates/email_slot_cancelled.html");
              if (body != null) {
                log.info("Peforming variables replacement on template file...");
                body = body
                    .replace("$startDate", formatter.format(slot.getStartDate()))
                    .replace("$endDate", formatter.format(slot.getEndDate()))
                    .replace("$price", slot.getPrice().toString())
                    .replace("$slots", slot.getNbSlots().toString())
                    .replace("$reason", reason)
                    .replace("$userEmail", userEmail)
                    .replace("$userNickname", userNickname);
                log.info("Email body ready for sending!");
                String subject = "Votre cr�neau a �t� r�sili�";
                MailProxy.sendMail(defaultSenderMail, defaultSenderName, to, cc, bcc, subject, body, "text/html", null, null, null);
              } else {
                log.warning("Message body is null due to invalid template!");
              }
            } else if (task.equals(MailTaskTypes.SLOT_REJECTED)) {
              log.info("Peforming slot rejection task...");
              String reason = req.getParameter("reason");
              if (reason == null || !"".equals(reason)) {
                log.warning("reason parameter string is null or empty. reason=" + reason);
                reason = "NOT SPECIFIED BY ADMINISTRATOR. PLEASE CALL US!";
              }
              String body = getBodyContentTemplate("WEB-INF/files/templates/email_slot_rejected.html");
              if (body != null) {
                log.info("Peforming variables replacement on template file...");
                body = body
                    .replace("$startDate", formatter.format(slot.getStartDate()))
                    .replace("$endDate", formatter.format(slot.getEndDate()))
                    .replace("$price", slot.getPrice().toString())
                    .replace("$slots", slot.getNbSlots().toString())
                    .replace("$reason", reason);
                log.info("Email body ready for sending!");
                String subject = "Votre demande de cr�neau n'a pas �t� retenue";
                MailProxy.sendMail(defaultSenderMail, defaultSenderName, to, cc, bcc, subject, body, "text/html", null, null, null);
              } else {
                log.warning("Message body is null due to invalid template!");
              }
            }
          } else {
            log.warning("owner is null. Will exit servlet.");
          }
        } else {
          log.warning("slot is null. Will exit servlet.");
        }
      } else {
        log.warning("entityId is null or empty. Will exit servlet.");
      }
    }
  }

  private String getBodyContentTemplate(String templateFilePath) {
    try {
      log.info("Reading from template file: " + templateFilePath);
      return Strings.convertStreamToString(new FileInputStream(templateFilePath));     
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return null;
  }

  private void setRecipientsBySlotId(UserAccount owner) throws IllegalArgumentException {
    String name = owner.getDisplayName();
    String login = owner.getLogin();
    if (Strings.isValidEmailAddress(login)) {
      to.put(login, name);
      String email = owner.getEmail();
      if (Strings.isValidEmailAddress(email) && !email.equals(login)) {
        cc.put(email, name);
      }
      try {
        Publisher publisher = (Publisher) owner;
        log.info("Owner is a publisher. Adding company to CC recipients...");
        Company company = DatastoreProxy.getCompanyById(publisher.getCompanyId());
        String companyName = company.getDisplayName();
        String companyLogin = company.getLogin();
        if (Strings.isValidEmailAddress(companyLogin)) {
          cc.put(companyLogin, companyName);
          String companyEmail = company.getEmail();
          if (Strings.isValidEmailAddress(companyEmail) && !email.equals(companyLogin)) {
            cc.put(companyEmail, companyName);
          }
        } else {
          log.warning("Invalid company login!\n\tcompanyId: " + company.getId() + "\n\tlogin: " + company.getLogin());
        }
      } catch (ClassCastException e) {
        log.info("Owner is a company.");
      }
      bcc.put("mouncif.faqir@casamind.com", "Mouncif FAQIR");
    } else {
      throw new IllegalArgumentException();
    }
  }
 
  private String getBillingAddress (UserAccount owner){
    String billingAddress = "";
    try {
      Company company = (Company) owner;
      billingAddress = company.getBillingAddress();
    } catch (ClassCastException e) {
      Publisher publisher = (Publisher) owner;
      Company company = DatastoreProxy.getCompanyById(publisher.getCompanyId());
      if (company != null) {
        billingAddress = company.getBillingAddress();
      } else {
        log.warning("Could not find company with id: " + publisher.getCompanyId() + "\nBilling address is void.");
      }
    }
    return billingAddress;
  }
}
TOP

Related Classes of com.casamind.adware.server.servlet.mail.OutboundMailHandler

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.