package eu.dnetlib.server;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;


@MultipartConfig(location="/var/lib/tomcat7/webapps/uoa-stats-config-1.0-SNAPSHOT/")
public class FileUpload extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public FileUpload() {
        super();
        // TODO Auto-generated constructor stub
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	       
		    response.setContentType("text/html;charset=UTF-8");

		    // Create path components to save the file
		    final String path = "/var/lib/tomcat7/webapps/uoa-stats-config-1.0-SNAPSHOT";

		    final Part filePart = request.getPart("uploadFileName");
		 
		    final String fileName = getFileName(filePart);
		    
		    
		    OutputStream out = null;
		    InputStream filecontent = null;
		    final PrintWriter writer = response.getWriter();
			if(!fileName.contains(".xml")){
				writer.print("TypeFailure");
				 if (out != null) 
			            out.close();
			        
			     if (filecontent != null)
			            filecontent.close();
			     
			     if (writer != null)
			            writer.close();
				return;
		    }
		    try {
		        out = new FileOutputStream(new File(path + File.separator
		                + fileName));
		        filecontent = filePart.getInputStream();

		        int read = 0;
		        final byte[] bytes = new byte[1024];

		        while ((read = filecontent.read(bytes)) != -1) {
		            out.write(bytes, 0, read);
		        }
		        writer.println(fileName);
		    } catch (FileNotFoundException fne) {
		        writer.println("");
		    } finally {
		        if (out != null) {
		            out.close();
		        }
		        if (filecontent != null) {
		            filecontent.close();
		        }
		        if (writer != null) {
		            writer.close();
		        }
		    }
		}

		private String getFileName(final Part part) {
		    final String partHeader = part.getHeader("Content-Disposition");
		
		    for (String content : part.getHeader("content-disposition").split(";")) {
		        if (content.trim().startsWith("filename")) {
		            return content.substring(
		                    content.indexOf('=') + 1).trim().replace("\"", "");
		        }
		    }
		    return null;
		}
}
