diff src/nabble/view/web/tools/UploadMbox2.jtp @ 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/tools/UploadMbox2.jtp	Thu Mar 21 19:15:52 2019 -0600
@@ -0,0 +1,131 @@
+<%
+package nabble.view.web.tools;
+
+import fschmidt.util.java.IoUtils;
+import fschmidt.util.mail.Mail;
+import fschmidt.util.mail.MailAddress;
+import fschmidt.util.mail.MailHome;
+import fschmidt.util.mail.PlainTextContent;
+import nabble.model.MailingList;
+import nabble.model.ModelException;
+import nabble.model.ModelHome;
+import nabble.model.Executors;
+import nabble.model.Node;
+import nabble.view.lib.Jtp;
+import nabble.view.lib.Shared;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileUploadException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.util.Date;
+import java.util.Map;
+
+
+public final class UploadMbox2 extends HttpServlet {
+	private static final Logger logger = LoggerFactory.getLogger(UploadMbox2.class);
+
+	protected void service(HttpServletRequest request,HttpServletResponse response)
+		throws ServletException, IOException
+	{
+		PrintWriter out = response.getWriter();
+		final Map<String,FileItem> map;
+		try {
+			map = Jtp.getFileItems(request);
+		} catch(FileUploadException e) {
+			throw new RuntimeException(e);
+		}
+		final Node forum = Jtp.getSiteNotNull(request).getNode(Long.parseLong(map.get("forum").getString()));
+		final String mailErrorsTo = map.get("mailErrorsTo").getString();
+		final int maxErrors = Integer.parseInt(map.get("maxErrors").getString());
+		final boolean runRethread = map.get("runRethread") != null;
+		final String exportDir = getInitParameter("exportDir");
+
+		Executors.executeNow(new Runnable(){public void run() {
+			try {
+				StringBuilder buf = new StringBuilder();
+				InputStream in;
+				if (map.get("mbox").getName()!=null && map.get("mbox").getName().length()>0) {
+					in = map.get("mbox").getInputStream();
+				} else if (map.get("mboxurl").getString()!=null && map.get("mboxurl").getString().length()>0) {
+					in = new URL(map.get("mboxurl").getString()).openStream();
+				} else if (map.get("mboxfile").getString()!=null && map.get("mboxfile").getString().length()>0) {
+					in = new FileInputStream(new File(exportDir+map.get("mboxfile").getString()));
+				} else throw new RuntimeException("no mbox file or url defined");
+				File file = File.createTempFile("mbox",null);
+				try {
+					OutputStream out2 = new FileOutputStream(file);
+					IoUtils.copyAll(in,out2);
+					out2.close();
+					in.close();
+					try {
+						MailingList.ImportResult ir = forum.getMailingList().importMbox(file,mailErrorsTo,maxErrors);
+						buf.append("Results from mbox import to forum "+forum.getSubject()+":\n");
+						buf.append("imported "+ir.getImported()+" messages\n");
+						buf.append("errors "+ir.getErrors()+"\n");
+					} catch (ModelException e) {
+						buf.append("Import error:\n");
+						buf.append(e.getMessage());
+						logger.error("",e);
+					}
+					Mail mail = MailHome.newMail();
+					MailAddress to = new MailAddress(mailErrorsTo);
+					mail.setFrom(to);
+					mail.setTo(to);
+					mail.setSentDate(new Date());
+					mail.setContent(new PlainTextContent(buf.toString()));
+					mail.setSubject("mbox import");
+					ModelHome.send(mail);
+
+				} finally {
+					file.delete();
+				}
+			} catch (IOException e) {
+				throw new RuntimeException(e);
+			}
+
+			if(runRethread) {
+				StringBuilder buf = new StringBuilder();
+				buf.append("Rethread procedure scheduled after mbox import for forum '" + forum.getSubject() + "' has finished\n");
+				forum.getMailingList().rethread();
+				Mail mail = MailHome.newMail();
+				MailAddress to = new MailAddress(mailErrorsTo);
+				mail.setFrom(to);
+				mail.setTo(to);
+				mail.setSentDate(new Date());
+				mail.setContent(new PlainTextContent(buf.toString()));
+				mail.setSubject("Rethreading finished");
+				ModelHome.send(mail);
+			}
+
+		}});
+
+		%>
+		<html>
+		<head>
+		<%
+		Shared.title(request,response,"uploaded mbox file");
+		%>
+		</head>
+		<body>
+		<h2>uploading mbox file to <%=forum.getSubjectHtml()%></h2>
+		<p>Results will be emailed to <%=mailErrorsTo%> after the import has completed.
+		<p>return to forum: <%=Jtp.link(forum)%>
+		</body>
+		</html>
+		<%
+	}
+}
+%>