package org.kvj.lima1.gae.sync.rest; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.amber.oauth2.common.OAuth; import org.kvj.lima1.gae.sync.data.DataStorage; import org.kvj.lima1.gae.sync.data.FileStorage; public class BackupServlet extends OAuthSecuredServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String app = req.getParameter("app"); String fileName = req.getParameter("fname"); String type = req.getParameter("type"); if (null == type) { type = "data"; } if (null == fileName) { fileName = "backup-" + app + ".zip"; } resp.setCharacterEncoding("utf-8"); resp.setContentType("application/octet-stream"); resp.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); try { String user = (String) req.getAttribute(OAuth.OAUTH_CLIENT_ID); ZipOutputStream zip = new ZipOutputStream(resp.getOutputStream()); int filesAdded = 0; if ("data".equals(type)) { // ZipEntry entry = new ZipEntry("data.json"); // zip.putNextEntry(entry); filesAdded = DataStorage.backupData(app, user, zip); // zip.closeEntry(); } if ("file".equals(type)) { String from = req.getParameter("from"); long fromLong = 0; if (null != from) { fromLong = Long.parseLong(from); } filesAdded = FileStorage.backupFiles(app, user, fromLong, zip); } if (filesAdded == 0) { ZipEntry noFiles = new ZipEntry(".no-files"); zip.putNextEntry(noFiles); zip.closeEntry(); } zip.close(); resp.flushBuffer(); } catch (Exception e) { log.error("Error in backup", e); throw new ServletException(e); } } }