Mercurial Hosting > nabble
comparison 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 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:7ecd1a4ef557 |
|---|---|
| 1 package nabble.view.web.template; | |
| 2 | |
| 3 import fschmidt.util.java.IoUtils; | |
| 4 import nabble.model.Site; | |
| 5 import nabble.view.lib.Jtp; | |
| 6 import nabble.view.lib.UrlMappable; | |
| 7 | |
| 8 import javax.servlet.ServletException; | |
| 9 import javax.servlet.http.HttpServlet; | |
| 10 import javax.servlet.http.HttpServletRequest; | |
| 11 import javax.servlet.http.HttpServletResponse; | |
| 12 import java.io.ByteArrayInputStream; | |
| 13 import java.io.ByteArrayOutputStream; | |
| 14 import java.io.IOException; | |
| 15 import java.text.DateFormat; | |
| 16 import java.text.SimpleDateFormat; | |
| 17 import java.util.Collections; | |
| 18 import java.util.Date; | |
| 19 import java.util.Map; | |
| 20 import java.util.regex.Matcher; | |
| 21 import java.util.regex.Pattern; | |
| 22 import java.util.zip.ZipEntry; | |
| 23 import java.util.zip.ZipOutputStream; | |
| 24 | |
| 25 | |
| 26 public class NamlDownload extends HttpServlet implements UrlMappable { | |
| 27 | |
| 28 private static final Pattern URL_PATTERN = Pattern.compile("/naml/naml_.+_\\d+.zip$"); | |
| 29 | |
| 30 private static final DateFormat DATE = new SimpleDateFormat("yyyyMMdd"); | |
| 31 | |
| 32 public static String getFilePath(Site site) { | |
| 33 String filename = Jtp.subjectEncode(site.getRootNode().getSubject()); | |
| 34 return "/naml/naml_" + filename + '_' + DATE.format(new Date()) + ".zip"; | |
| 35 } | |
| 36 | |
| 37 public Map<String, String[]> getParameterMapFromUrl(HttpServletRequest request,String mappedUrl) { | |
| 38 Matcher m = URL_PATTERN.matcher(mappedUrl); | |
| 39 if (!m.find()) | |
| 40 throw new RuntimeException(); | |
| 41 return Collections.emptyMap(); | |
| 42 } | |
| 43 | |
| 44 public Pattern getUrlPattern() { | |
| 45 return URL_PATTERN; | |
| 46 } | |
| 47 | |
| 48 protected void service(HttpServletRequest request, HttpServletResponse response) | |
| 49 throws ServletException, IOException | |
| 50 { | |
| 51 Site site = Jtp.getSite(request); | |
| 52 Map<String,String> tweaks = site.getCustomTweaks(); | |
| 53 try { | |
| 54 ByteArrayOutputStream baos = new ByteArrayOutputStream(); | |
| 55 ZipOutputStream zout = new ZipOutputStream(baos); | |
| 56 for( Map.Entry<String,String> entry : tweaks.entrySet() ) { | |
| 57 String name = entry.getKey(); | |
| 58 String content = entry.getValue(); | |
| 59 zout.putNextEntry(new ZipEntry(name + ".naml")); | |
| 60 zout.write(content.getBytes()); | |
| 61 zout.flush(); | |
| 62 } | |
| 63 zout.close(); | |
| 64 byte[] zipFileContents = baos.toByteArray(); | |
| 65 baos.close(); | |
| 66 response.setContentType("application/zip"); | |
| 67 IoUtils.copyAll(new ByteArrayInputStream(zipFileContents), response.getOutputStream()); | |
| 68 } catch(IOException e) { | |
| 69 throw new RuntimeException("Backup generation error", e); | |
| 70 } | |
| 71 } | |
| 72 } |
