package com.andreiolar.abms.server; import java.io.File; import java.io.FileOutputStream; import java.io.StringReader; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import com.andreiolar.abms.client.exception.ComplaintSubmissionException; import com.andreiolar.abms.client.exception.MailException; import com.andreiolar.abms.client.rpc.DBSubmitComplaint; import com.andreiolar.abms.mail.MailSender; import com.andreiolar.abms.shared.UserDetails; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import com.itextpdf.text.Document; import com.itextpdf.text.PageSize; import com.itextpdf.text.html.simpleparser.HTMLWorker; import com.itextpdf.text.pdf.PdfWriter; @SuppressWarnings("deprecation") public class DBSubmitComplaintImpl extends RemoteServiceServlet implements DBSubmitComplaint { private static final long serialVersionUID = 817411178442933495L; public DBSubmitComplaintImpl() { } @Override public Boolean registerComplaint(UserDetails userInfo, String phoneNumber, String complaintTo, String complaint) throws Exception { Boolean result = null; Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; boolean isMailSend = true; String mailMessage = null; int inserted = 0; try { conn = MyConnection.getConnection(); try { String q = "insert into complaints(username, complaint_to, date, phone_number) values(?, ?, CURDATE(), ?)"; stmt = conn.prepareStatement(q); stmt.setString(1, userInfo.getUsername()); stmt.setString(2, complaintTo); stmt.setString(3, phoneNumber); inserted = stmt.executeUpdate(); stmt.close(); String q2 = "select email from user_info where username=?"; stmt = conn.prepareStatement(q2); stmt.setString(1, userInfo.getUsername()); rs = stmt.executeQuery(); String to = null; while (rs.next()) { to = rs.getString("email"); } String subject = "Complaint to " + complaintTo; String messageBody = "You have submitted a complaint to the " + complaintTo + ". <br>They will reach for you as soon as possible. Attached to thes E-Mail you have a PDF file containing your complaint details.<br><br>Regards,<br>Administration"; File myFile = generateComplaintPDFFile(userInfo, phoneNumber, complaintTo, complaint); try { MailSender.sendMail(subject, to, messageBody, myFile.getAbsolutePath()); } catch (Exception ex) { mailMessage = ex.getMessage(); isMailSend = false; } } catch (Exception ex) { throw new RuntimeException("Something went wrong: " + ex.getMessage(), ex); } } catch (SQLException ex) { throw new RuntimeException("Something went wrong: " + ex.getMessage(), ex); } finally { stmt.close(); conn.close(); } if (inserted > 0) { result = new Boolean(true); } if (result == null) { throw new ComplaintSubmissionException("Error subitting complaint!"); } if (!isMailSend) { throw new MailException("Unable to send mail: " + mailMessage); } return result; } private File generateComplaintPDFFile(UserDetails userInfo, String phoneNumber, String complaintTo, String complaint) throws Exception { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); String today = dateFormat.format(calendar.getTime()); String basePath = System.getProperty("user.dir"); File pdfFile = new File(basePath + "/files/complaints/" + userInfo.getUsername(), userInfo.getFirstName() + "_" + userInfo.getLastName() + "_" + complaintTo + "_" + today + ".pdf"); if (!pdfFile.exists()) { pdfFile.getParentFile().mkdirs(); } Document document = new Document(PageSize.LETTER); PdfWriter.getInstance(document, new FileOutputStream(pdfFile)); document.open(); HTMLWorker htmlWorker = new HTMLWorker(document); String personalInforamtionLabel = new String( "<p style=\"font-size:20px\">" + "<b><i><u>" + "Personal Information" + "</u></i></b>" + "</p><br>"); String personalInformation = new String("<p>" + "<b>" + "Name: " + "</b>" + userInfo.getFirstName() + " " + userInfo.getLastName() + "<br>" + "<b>" + "Phone Number: " + "</b>" + phoneNumber + "<br>" + "<b>" + "Personal Number: " + "</b>" + userInfo.getPersonalNumber() + "<br>" + "<b>" + "ID Series: " + "</b>" + userInfo.getIdSeries() + "<br><b>Complaint To: </b>" + complaintTo + "</p><br><br><br>"); String complaintLabel = new String("<p style=\"font-size:20px\">" + "<b><i><u>" + "Complaint" + "</u></i></b></p><br>"); String complaintText = new String("<p>" + complaint + "</p>"); String submittedOn = new String( "<br><br><br><p style=\"font-size:20px\">" + "<b><i><u>" + "Submitted on: " + today + "</u></i></b>" + "</p>"); StringBuilder sb = new StringBuilder(); sb.append(personalInforamtionLabel); sb.append(personalInformation); sb.append(complaintLabel); sb.append(complaintText); sb.append(submittedOn); htmlWorker.parse(new StringReader(sb.toString())); document.close(); return pdfFile; } }