package com.chap.memo.memoNodes.servlet; import static com.google.appengine.api.taskqueue.TaskOptions.Builder.withUrl; import java.io.IOException; import java.nio.channels.Channels; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.chap.memo.memoNodes.MemoNode; import com.google.appengine.api.files.AppEngineFile; import com.google.appengine.api.files.FileReadChannel; import com.google.appengine.api.files.FileService; import com.google.appengine.api.files.FileServiceFactory; import com.google.appengine.api.taskqueue.Queue; import com.google.appengine.api.taskqueue.QueueFactory; public class MemoServlet extends HttpServlet { private static final long serialVersionUID = 1L; static Queue queue = QueueFactory.getDefaultQueue(); public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { String input = req.getParameter("import"); System.out.println("Import param:'"+input+"'"); if (input != null){ if (req.getParameter("history") == null) MemoNode.emptyDB(); MemoNode.importDB(req.getInputStream()); MemoNode.flushDB(); } else { doGet(req, resp); } } public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { try { String importCSpass = req.getParameter("importCSpass"); if (importCSpass != null){ queue.add(withUrl("/memo").param("importCS", importCSpass)); } String importCS = req.getParameter("importCS"); if (importCS != null){ boolean lockForRead = false; FileService fileService = FileServiceFactory.getFileService(); AppEngineFile readableFile = new AppEngineFile(importCS); try { FileReadChannel readChannel = fileService.openReadChannel(readableFile, lockForRead); MemoNode.importDB(Channels.newInputStream(readChannel)); MemoNode.flushDB(); } catch (Exception e){ System.out.println("Couldn't read file:"+importCS+ " -> "+e.getMessage()); } } String mergeShards = req.getParameter("merge"); if (mergeShards != null){ MemoNode.compactDB(); resp.setContentType("text/plain"); resp.getWriter().append("database compacted!\n"); } String cleanDBParm = req.getParameter("cleanDB"); if (cleanDBParm != null) { MemoNode.emptyDB(); resp.setContentType("text/plain"); resp.getWriter().append("database cleared!\n"); } String dropHistory = req.getParameter("dropHistory"); if (dropHistory != null){ MemoNode.flushDB(); MemoNode.dropHistory(); MemoNode.flushDB(); resp.setContentType("text/plain"); resp.getWriter().append("History cleared!\n"); } String export = req.getParameter("export"); if (export != null){ MemoNode.flushDB(); MemoNode.compactDB(); resp.setHeader("Content-Disposition","attachment; filename=\"MemoNodes.zip\""); resp.setContentType("application/zip"); if (req.getParameter("history") == null){ MemoNode.exportDB(resp.getOutputStream()); } else { MemoNode.purgeHistory(resp.getOutputStream()); } } } catch (Exception e) { e.printStackTrace(); resp.setContentType("text/plain"); resp.getWriter().append("Error:" + e.getLocalizedMessage()); } } }