/**
*
* Manages (CRUD) report sheets for each entity
*
*/
package com.casamind.adware.server.servlet.gdata;
import java.io.IOException;
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.proxy.GDataDocumentsProxy;
import com.casamind.adware.shared.GoogleDocumentsTaskTypes;
import com.google.appengine.api.taskqueue.QueueFactory;
import com.google.appengine.api.taskqueue.TaskOptions;
import com.google.gdata.data.docs.DocumentListEntry;
import com.google.gdata.util.ServiceException;
@SuppressWarnings("serial")
public class StatisticResourcesHandler extends HttpServlet {
private static final Logger log = Logger.getLogger(StatisticResourcesHandler.class.getName());
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 folder = req.getParameter("folder");
resp.setHeader("Content-Type", "text/html");
try {
DocumentListEntry entry = null;
if (task.equals(GoogleDocumentsTaskTypes.CREATE)) {
log.info("Entering GDataTaskTypes.CREATE task!");
log.info("Searching for document entry '" + title + "' in Google Docs account: " + gdataWebLogin);
entry = proxy.findDocumentEntry(title);
if (entry == null) {
log.warning("Did not find document. Will create it.");
entry = proxy.createDocumentFile("spreadsheet", title, folder);
log.info("Created entry in: " + entry.getDocumentLink().getHref());
log.info("Sleeping: " + gdataThreadSleep + " milliseconds");
Thread.sleep(gdataThreadSleep);
log.info("Wake up!");
}
log.info("Creating report worksheets");
proxy.createReprtWorksheets(entry.getTitle().getPlainText());
log.info("Queueing GDataTaskTypes.INIT task!");
QueueFactory.getQueue("gdata").add(TaskOptions.Builder.withUrl("/tasks/gdata/reports").param("task", GoogleDocumentsTaskTypes.INIT).param("title", entry.getTitle().getPlainText()));
log.info("GDataTaskTypes.INIT queued successfully!");
} 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 + "'");
}
} else if (task.equals(GoogleDocumentsTaskTypes.INIT)) {
log.info("Entering GDataTaskTypes.INIT task!");
entry = proxy.findDocumentEntry(title);
if (entry != null) {
log.info("Sleeping: " + gdataThreadSleep + " milliseconds");
Thread.sleep(gdataThreadSleep);
log.info("Wake up!");
proxy.initStatSpreadSheet(title);
} 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();
}
}
}