diff src/nabble/view/web/template/NamlDownload.java @ 0:7ecd1a4ef557

add content
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Mar 2019 19:15:52 -0600
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/nabble/view/web/template/NamlDownload.java	Thu Mar 21 19:15:52 2019 -0600
@@ -0,0 +1,72 @@
+package nabble.view.web.template;
+
+import fschmidt.util.java.IoUtils;
+import nabble.model.Site;
+import nabble.view.lib.Jtp;
+import nabble.view.lib.UrlMappable;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+
+public class NamlDownload extends HttpServlet implements UrlMappable {
+
+	private static final Pattern URL_PATTERN = Pattern.compile("/naml/naml_.+_\\d+.zip$");
+
+	private static final DateFormat DATE = new SimpleDateFormat("yyyyMMdd");
+
+	public static String getFilePath(Site site) {
+		String filename = Jtp.subjectEncode(site.getRootNode().getSubject());
+		return "/naml/naml_" + filename + '_' + DATE.format(new Date()) + ".zip";
+	}
+
+	public Map<String, String[]> getParameterMapFromUrl(HttpServletRequest request,String mappedUrl) {
+		Matcher m = URL_PATTERN.matcher(mappedUrl);
+		if (!m.find())
+			throw new RuntimeException();
+		return Collections.emptyMap();
+	}
+
+	public Pattern getUrlPattern() {
+		return URL_PATTERN;
+	}
+
+	protected void service(HttpServletRequest request, HttpServletResponse response)
+		throws ServletException, IOException
+	{
+		Site site = Jtp.getSite(request);
+		Map<String,String> tweaks = site.getCustomTweaks();
+		try {
+			ByteArrayOutputStream baos = new ByteArrayOutputStream();
+			ZipOutputStream zout = new ZipOutputStream(baos);
+			for( Map.Entry<String,String> entry : tweaks.entrySet() ) {
+				String name = entry.getKey();
+				String content = entry.getValue();
+				zout.putNextEntry(new ZipEntry(name + ".naml"));
+				zout.write(content.getBytes());
+				zout.flush();
+			}
+			zout.close();
+			byte[] zipFileContents = baos.toByteArray();
+			baos.close();
+			response.setContentType("application/zip");
+			IoUtils.copyAll(new ByteArrayInputStream(zipFileContents), response.getOutputStream());
+		} catch(IOException e) {
+			throw new RuntimeException("Backup generation error", e);
+		}
+	}
+}