package com.andreiolar.abms.server; import java.io.File; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.FilenameUtils; import com.andreiolar.abms.mail.MailSender; import com.andreiolar.abms.utils.ExcelToPersonalView; public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = -9065632897517874244L; private static final String UPLOAD_DIRECTORY = System.getProperty("user.dir") + "/files/general"; @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // Process only multipart requests if (ServletFileUpload.isMultipartContent(req)) { // Create a factory for disk-based file items FileItemFactory factory = new DiskFileItemFactory(); // Create a new file uplolad handler ServletFileUpload upload = new ServletFileUpload(factory); // Parse the request try { List<FileItem> items = upload.parseRequest(req); for (FileItem item : items) { // process only file upload - discard other form item types if (item.isFormField()) { continue; } String fileName = item.getName(); // get only the file name, not the whole path if (fileName != null) { fileName = FilenameUtils.getName(fileName); } File uploadedFile = new File(UPLOAD_DIRECTORY, fileName); if (!uploadedFile.exists()) { uploadedFile.getParentFile().mkdirs(); } if (uploadedFile.createNewFile()) { item.write(uploadedFile); resp.setStatus(HttpServletResponse.SC_CREATED); resp.getWriter().print("The file was created successfully."); resp.flushBuffer(); sendMail(uploadedFile); } else { uploadedFile.delete(); item.write(uploadedFile); uploadedFile.createNewFile(); resp.setStatus(HttpServletResponse.SC_CREATED); resp.getWriter().print("The file was replaced successfully."); resp.flushBuffer(); sendMail(uploadedFile); } ExcelToPersonalView.processFile(uploadedFile); } } catch (Exception ex) { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "An error occured while craeting the file: " + ex.getMessage()); } } else { resp.sendError(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, "Request contents type is not supported by the servlet"); } } private void sendMail(File uploadedFile) { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = MyConnection.getConnection(); try { String q = "select first_name, last_name, email from user_info"; stmt = conn.prepareStatement(q); rs = stmt.executeQuery(); while (rs.next()) { String firstName = rs.getString("first_name"); String lastName = rs.getString("last_name"); String email = rs.getString("email"); if (firstName.contains("Administrator") || lastName.contains("Administrator")) { continue; } String subject = "Upkeep report for previous month"; String to = email; String message = "<p>" + "Hello " + firstName + " " + lastName + "," + "<br><br>" + "The upkeep report was just submitted and it's available to preview and download at Administration -> Monthly Costs" + "<br><br>" + "Best regards," + "<br>" + "Administration" + "</p>"; MailSender.sendMail(subject, to, message, null); } } catch (Exception ex) { ex.printStackTrace(); } finally { rs.close(); stmt.close(); } } catch (Exception ex) { ex.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }