package nsf.playground.playground;
import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import lotus.domino.NotesException;
import lotus.domino.View;
import nsf.playground.impexp.JsonImport;
import com.ibm.commons.util.StringUtil;
import com.ibm.commons.util.io.LookAheadInputStream;
import com.ibm.commons.util.io.StreamUtil;
import com.ibm.xsp.model.domino.DominoUtils;
public class PreviewImportHandler extends PreviewHandler {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("GET Upload");
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
if(isMultipart) {
try {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(req);
String key = req.getParameter("type");
for(FileItem item: items) {
if(!item.isFormField()) {
String fileName = item.getName();
InputStream is = item.getInputStream();
try {
LookAheadInputStream lis = new LookAheadInputStream(is, 16);
if(!lis.startsWith("PK")) {
result(req, resp, HttpServletResponse.SC_BAD_REQUEST, "The uploaded file is not a zip file");
return;
}
JsonImport imp = new JsonImport(new JsonImport.ZipImportSource(lis));
// Delete all the documents
View view = DominoUtils.getCurrentDatabase().getView("AllSnippetsById");
try {
view.getAllEntriesByKey(key).removeAll(true);
} finally {
view.recycle();
}
// And import the new ones
imp.importDocuments(DominoUtils.getCurrentDatabase());
result(req, resp, HttpServletResponse.SC_OK, "");
} finally {
StreamUtil.close(is);
}
}
}
} catch(NotesException ex) {
throw new IOException(ex);
} catch(FileUploadException ex) {
throw new IOException(ex);
}
}
}
private void result(HttpServletRequest req, HttpServletResponse resp, int code, String message) throws ServletException, IOException {
resp.setStatus(code);
resp.setContentType("text/html");
String result = StringUtil.format("<html><body><textarea>{0}</textarea></body></html>",message);
Writer w = resp.getWriter();
w.write(result);
w.flush();
}
}