0
|
1 <%
|
|
2 package nabble.view.web.tools;
|
|
3
|
|
4 import fschmidt.util.java.IoUtils;
|
|
5 import fschmidt.util.mail.Mail;
|
|
6 import fschmidt.util.mail.MailAddress;
|
|
7 import fschmidt.util.mail.MailHome;
|
|
8 import fschmidt.util.mail.PlainTextContent;
|
|
9 import nabble.model.MailingList;
|
|
10 import nabble.model.ModelException;
|
|
11 import nabble.model.ModelHome;
|
|
12 import nabble.model.Executors;
|
|
13 import nabble.model.Node;
|
|
14 import nabble.view.lib.Jtp;
|
|
15 import nabble.view.lib.Shared;
|
|
16 import org.apache.commons.fileupload.FileItem;
|
|
17 import org.apache.commons.fileupload.FileUploadException;
|
|
18 import org.slf4j.Logger;
|
|
19 import org.slf4j.LoggerFactory;
|
|
20
|
|
21 import javax.servlet.ServletException;
|
|
22 import javax.servlet.http.HttpServlet;
|
|
23 import javax.servlet.http.HttpServletRequest;
|
|
24 import javax.servlet.http.HttpServletResponse;
|
|
25 import java.io.File;
|
|
26 import java.io.FileInputStream;
|
|
27 import java.io.FileOutputStream;
|
|
28 import java.io.IOException;
|
|
29 import java.io.InputStream;
|
|
30 import java.io.OutputStream;
|
|
31 import java.io.PrintWriter;
|
|
32 import java.net.URL;
|
|
33 import java.util.Date;
|
|
34 import java.util.Map;
|
|
35
|
|
36
|
|
37 public final class UploadMbox2 extends HttpServlet {
|
|
38 private static final Logger logger = LoggerFactory.getLogger(UploadMbox2.class);
|
|
39
|
|
40 protected void service(HttpServletRequest request,HttpServletResponse response)
|
|
41 throws ServletException, IOException
|
|
42 {
|
|
43 PrintWriter out = response.getWriter();
|
|
44 final Map<String,FileItem> map;
|
|
45 try {
|
|
46 map = Jtp.getFileItems(request);
|
|
47 } catch(FileUploadException e) {
|
|
48 throw new RuntimeException(e);
|
|
49 }
|
|
50 final Node forum = Jtp.getSiteNotNull(request).getNode(Long.parseLong(map.get("forum").getString()));
|
|
51 final String mailErrorsTo = map.get("mailErrorsTo").getString();
|
|
52 final int maxErrors = Integer.parseInt(map.get("maxErrors").getString());
|
|
53 final boolean runRethread = map.get("runRethread") != null;
|
|
54 final String exportDir = getInitParameter("exportDir");
|
|
55
|
|
56 Executors.executeNow(new Runnable(){public void run() {
|
|
57 try {
|
|
58 StringBuilder buf = new StringBuilder();
|
|
59 InputStream in;
|
|
60 if (map.get("mbox").getName()!=null && map.get("mbox").getName().length()>0) {
|
|
61 in = map.get("mbox").getInputStream();
|
|
62 } else if (map.get("mboxurl").getString()!=null && map.get("mboxurl").getString().length()>0) {
|
|
63 in = new URL(map.get("mboxurl").getString()).openStream();
|
|
64 } else if (map.get("mboxfile").getString()!=null && map.get("mboxfile").getString().length()>0) {
|
|
65 in = new FileInputStream(new File(exportDir+map.get("mboxfile").getString()));
|
|
66 } else throw new RuntimeException("no mbox file or url defined");
|
|
67 File file = File.createTempFile("mbox",null);
|
|
68 try {
|
|
69 OutputStream out2 = new FileOutputStream(file);
|
|
70 IoUtils.copyAll(in,out2);
|
|
71 out2.close();
|
|
72 in.close();
|
|
73 try {
|
|
74 MailingList.ImportResult ir = forum.getMailingList().importMbox(file,mailErrorsTo,maxErrors);
|
|
75 buf.append("Results from mbox import to forum "+forum.getSubject()+":\n");
|
|
76 buf.append("imported "+ir.getImported()+" messages\n");
|
|
77 buf.append("errors "+ir.getErrors()+"\n");
|
|
78 } catch (ModelException e) {
|
|
79 buf.append("Import error:\n");
|
|
80 buf.append(e.getMessage());
|
|
81 logger.error("",e);
|
|
82 }
|
|
83 Mail mail = MailHome.newMail();
|
|
84 MailAddress to = new MailAddress(mailErrorsTo);
|
|
85 mail.setFrom(to);
|
|
86 mail.setTo(to);
|
|
87 mail.setSentDate(new Date());
|
|
88 mail.setContent(new PlainTextContent(buf.toString()));
|
|
89 mail.setSubject("mbox import");
|
|
90 ModelHome.send(mail);
|
|
91
|
|
92 } finally {
|
|
93 file.delete();
|
|
94 }
|
|
95 } catch (IOException e) {
|
|
96 throw new RuntimeException(e);
|
|
97 }
|
|
98
|
|
99 if(runRethread) {
|
|
100 StringBuilder buf = new StringBuilder();
|
|
101 buf.append("Rethread procedure scheduled after mbox import for forum '" + forum.getSubject() + "' has finished\n");
|
|
102 forum.getMailingList().rethread();
|
|
103 Mail mail = MailHome.newMail();
|
|
104 MailAddress to = new MailAddress(mailErrorsTo);
|
|
105 mail.setFrom(to);
|
|
106 mail.setTo(to);
|
|
107 mail.setSentDate(new Date());
|
|
108 mail.setContent(new PlainTextContent(buf.toString()));
|
|
109 mail.setSubject("Rethreading finished");
|
|
110 ModelHome.send(mail);
|
|
111 }
|
|
112
|
|
113 }});
|
|
114
|
|
115 %>
|
|
116 <html>
|
|
117 <head>
|
|
118 <%
|
|
119 Shared.title(request,response,"uploaded mbox file");
|
|
120 %>
|
|
121 </head>
|
|
122 <body>
|
|
123 <h2>uploading mbox file to <%=forum.getSubjectHtml()%></h2>
|
|
124 <p>Results will be emailed to <%=mailErrorsTo%> after the import has completed.
|
|
125 <p>return to forum: <%=Jtp.link(forum)%>
|
|
126 </body>
|
|
127 </html>
|
|
128 <%
|
|
129 }
|
|
130 }
|
|
131 %>
|