package com.vst.webapp.servlet;
import com.vst.util.FileHelper;
import com.vst.util.db2sql;
import com.vst.webapp.listener.FileUploadListener;
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 javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
public class FileUploadServlet
extends HttpServlet
implements Servlet
{
private static final long serialVersionUID = 2740693677625051632L;
private final String ATTR_NAME = "LISTENER";
public FileUploadServlet()
{
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// System.out.println("DO GET !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
PrintWriter
out = response.getWriter();
HttpSession
session = request.getSession();
FileUploadListener
listener = null;
StringBuffer
buffy = new StringBuffer();
long
bytesRead = 0,
contentLength = 0;
// Make sure the session has started
if (session == null)
{
return;
}
else if (session != null)
{
// Check to see if we've created the listener object yet
listener = (FileUploadListener)session.getAttribute(ATTR_NAME);
if (listener == null) {
return;
} else {
// Get the meta information
bytesRead = listener.getBytesRead();
contentLength = listener.getContentLength();
}
}
response.setContentType("text/xml");
buffy.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
buffy.append("<response>\n");
buffy.append("\t<bytes_read>" + bytesRead + "</bytes_read>\n");
buffy.append("\t<content_length>" + contentLength + "</content_length>\n");
// Check to see if we're done
if (bytesRead == contentLength)
{
buffy.append("\t<finished />\n");
// No reason to keep listener in session since we're done
session.setAttribute(ATTR_NAME, null);
} else {
// Calculate the percent complete
long percentComplete = ((100 * bytesRead) / contentLength);
buffy.append("\t<percent_complete>" + percentComplete + "</percent_complete>\n");
System.out.println("####################################### " + percentComplete);
}
buffy.append("</response>\n");
out.println(buffy.toString());
out.flush();
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// System.out.println("DO POST !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
FileUploadListener listener = new FileUploadListener();
HttpSession session = request.getSession();
////
Cookie cookie = new Cookie("dumpLoaded", ""+(new java.util.Date().getTime()));
cookie.setValue("false");
cookie.setMaxAge(30*24*60*60);
response.addCookie(cookie);
////
session.setAttribute(ATTR_NAME, listener);
// upload seТцуrvlet allows to set upload listener
upload.setProgressListener(listener);
List uploadedItems = null;
FileItem fileItem = null;
String filePath = "c:\\temp"; // Path to store file on local system
File tmpf = new File(filePath);
if(!tmpf.exists()) {
tmpf.mkdir();
}
else if(!tmpf.isDirectory()) {
tmpf.delete();
tmpf.mkdir();
}
//tttttttttttttttttttttttttttttttttttttt
File dumpFile = null;
//tttttttttttttttttttttttttttttttttttttt
try
{
// iterate over all uploaded files
uploadedItems = upload.parseRequest(request);
Iterator i = uploadedItems.iterator();
while (i.hasNext())
{
fileItem = (FileItem) i.next();
if (fileItem.isFormField() == false)
{
if (fileItem.getSize() > 0)
{
File
uploadedFile = null;
String
myFullFileName = fileItem.getName(),
myFileName = "",
slashType = (myFullFileName.lastIndexOf("\\") > 0) ? "\\" : "/"; // Windows or UNIX
int
startIndex = myFullFileName.lastIndexOf(slashType);
// Ignore the path and get the filename
myFileName = myFullFileName.substring(startIndex + 1, myFullFileName.length());
// Create new File object
uploadedFile = new File(filePath, myFileName);
dumpFile = new File(filePath, myFileName);
// Write the uploaded file to the system
fileItem.write(uploadedFile);
}
}
}
////
cookie = new Cookie("dumpLoaded", ""+(new java.util.Date().getTime()));
cookie.setValue("true");
cookie.setMaxAge(30*24*60*60);
response.addCookie(cookie);
////
// tttttttttttttttttttttttttttttttttttttt
request.setAttribute("isLoaded", "true");
if (!db2sql.execDump(FileHelper.loadFileAsString(dumpFile,"UTF-8"),null, request, response)) {
request.setAttribute("sqlMistake", "true");
}
// db2sql.test();
if( dumpFile != null )
dumpFile.delete();
else
request.setAttribute("noFile", "true");
// tttttttttttttttttttttttttttttttttttttt
PrintWriter out = response.getWriter();
out.println( "<html><head><title></title> " +
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf8\"/></head>");
out.println("<body>");
out.println("<p align=center><font color='#008800'><b>Restore base completed!</b></font></p>");
out.println("</body>");
out.println("</html>");
out.flush();
out.close();
}
catch (FileUploadException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}