Package com.casamind.adware.server.servlet.gdata

Source Code of com.casamind.adware.server.servlet.gdata.BillingResourcesHandler

/**
*
* Manages (CRUD) report sheets for each entity
*
*/
package com.casamind.adware.server.servlet.gdata;

import java.io.FileInputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
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.GDataDocumentsProxy;
import com.casamind.adware.shared.GoogleDocumentsTaskTypes;
import com.casamind.adware.shared.Strings;
import com.casamind.adware.shared.model.SlotDTO;
import com.google.gdata.data.docs.DocumentListEntry;
import com.google.gdata.util.ServiceException;

@SuppressWarnings("serial")
public class BillingResourcesHandler extends HttpServlet {
  private static final Logger log = Logger.getLogger(BillingResourcesHandler.class.getName());
  private static DateFormat formatter = DateFormat.getDateInstance(DateFormat.SHORT, Locale.FRANCE);
  private String gdataWebLogin, gdataWebPassword, documentsFeedUrl,
      spreadsheetFeedUrl;
  private GDataDocumentsProxy proxy;
  private long gdataThreadSleep;
  private long gdataConnectTimeout;

  @Override
  public void init(ServletConfig config) throws ServletException {
    super.init(config);
    ServletContext context = config.getServletContext();
    gdataThreadSleep = Long.parseLong(context.getInitParameter("gdataThreadSleep"));
    gdataConnectTimeout = Long.parseLong(context.getInitParameter("gdataConnectTimeout"));
    gdataWebLogin = context.getInitParameter("gdataWebLogin");
    gdataWebPassword = context.getInitParameter("gdataWebPassword");
    documentsFeedUrl = context.getInitParameter("documentsFeedUrl");
    spreadsheetFeedUrl = context.getInitParameter("spreadsheetFeedUrl");
    proxy = new GDataDocumentsProxy(documentsFeedUrl, spreadsheetFeedUrl, gdataWebLogin, gdataWebPassword, gdataThreadSleep, gdataConnectTimeout);
  }

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String task = req.getParameter("task");
    String title = req.getParameter("title");
    String entityIds = req.getParameter("entityIds");
    Long companyId = Long.parseLong(req.getParameter("companyId"));
    int billNumber = Integer.parseInt(req.getParameter("billNumber"));
    resp.setHeader("Content-Type", "text/html");
    try {
      DocumentListEntry entry = null;
      if (task.equals(GoogleDocumentsTaskTypes.CREATE)) {
        log.info("Entering GDataTaskTypes.CREATE task!");
        if (companyId != null) {
          Company company = DatastoreProxy.getCompanyById(companyId);
          if (company != null) {
           
          } else {
            log.warning("No Compny found with id=" + companyId + ". Will exit servlet!");
          }
          String serviceStr = "", unitPriceStr = "";
          Double totalPrice = 0.0, totalDue = 0.0;
          List<Long> ids = new ArrayList<Long>();
          for (String idStr : entityIds.split(",")){
            ids.add(Long.parseLong(idStr));
          }
          for (Long id : ids){           
            Slot entity = DatastoreProxy.getSlotById(id);
            if (entity != null) {
              serviceStr += "Cr&eacute;neau publicitaire du " + formatter.format(entity.getStartDate()) + " au " + formatter.format(entity.getEndDate()) + "\n";
              unitPriceStr += Integer.toString(entity.getPrice()) + "\n";
              totalPrice += entity.getPrice();
              log.info("Found slot with id=" + id + ". Will add service line.");
            } else {
              log.warning("No slot found with id=" + id);
            }
          }
          String body = Strings.convertStreamToString(new FileInputStream("WEB-INF/files/templates/bill_slot_invoiced.html"));
          body = Strings.formatSpecialCharacters(body
              .replace("$billDate", formatter.format(new Date()))
              .replace("$billNumber", Integer.toString(billNumber))
              .replace("$project", "Avicena")
              .replace("$company", company.getDisplayName())
              .replace("$billingAddress", company.getBillingAddress())
              .replace("$phone", company.getPhone())
              .replace("$email", company.getEmail())
              .replace("$service", serviceStr)
              .replace("$unitPrice", unitPriceStr)
              .replace("$discount", Integer.toString(0))
              .replace("$totalPrice", Integer.toString(dto.getPrice()))
              .replace("$totalDue", Double.toString(dto.getPrice() + (dto.getPrice() * 0.196))));
          log.info("Searching for document entry '" + title + "' in Google Docs account: " + gdataWebLogin);
          entry = proxy.findDocumentEntry(title);
          log.info("Updating document content...");
          entry = proxy.updateDocumentFile(entry, body, "text/html");
          log.info("Content updated successfully!");
          log.info("Updating document sharing permissions...");
          setACL(entry, company, "reader");
          log.info("Sharing permissions updated successfully!");
        } else {
          log.warning("entityId is null. Will exit servlet!");
        }
      } else if (task.equals(GoogleDocumentsTaskTypes.DELETE)) {
        log.info("Entering GDataTaskTypes.DELETE task!");
        entry = proxy.findDocumentEntry(title);
        if (entry != null) {
          log.info("Sleeping: " + gdataThreadSleep + " milliseconds");
          Thread.sleep(gdataThreadSleep);
          log.info("Wake up!");
          proxy.deleteDocumentFile(entry);
        } else {
          log.warning("Did not find document '" + title + "'");
        }
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (ServiceException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

  }

  private void setACL(DocumentListEntry entry, UserAccount owner, String role) {
    log.info("Granting '" + role + "' permission for user '" + owner.getDisplayName() + "' on entry '" + entry.getTitle().getPlainText() + "'");
    if (owner != null) {
      String login = owner.getLogin();
      if (login != null && !"".equals(login)) {
        log.info("Adding ACL.\n\tuser: " + login + ".\n\trole: " + role);
        proxy.addAclRole(entry, login, role);
        log.info("Rol added successfully!");
      }
      String email = owner.getEmail();
      if (email != null && !"".equals(email)) {
        log.info("Adding ACL.\n\tuser: " + login + ".\n\trole: " + role);
        proxy.addAclRole(entry, email, role);
        log.info("Rol added successfully!");
      }
      try {
        Publisher publisher = (Publisher) owner;
        log.info("Owner is a publisher. Adding company ACL entries...");
        Company company = DatastoreProxy.getCompanyById(publisher.getCompanyId());
        String cLogin = company.getLogin();
        if (cLogin != null && !"".equals(cLogin)) {
          log.info("Adding ACL.\n\tuser: " + cLogin + ".\n\trole: " + role);
          proxy.addAclRole(entry, cLogin, role);
          log.info("Rol added successfully!");
        }
        String cEmail = company.getEmail();
        if (cEmail != null && !"".equals(cEmail)) {
          log.info("Adding ACL.\n\tuser: " + cEmail + ".\n\trole: " + role);
          proxy.addAclRole(entry, cEmail, role);
          log.info("Rol added successfully!");
        }
      } catch (ClassCastException e) {
        log.info("Owner is a company. Nothing else to do.");
      }
    } else {
      log.warning("owner is null!");
    }
  }
}
TOP

Related Classes of com.casamind.adware.server.servlet.gdata.BillingResourcesHandler

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.