servlets.PrenotazioneServlet.java Source code

Java tutorial

Introduction

Here is the source code for servlets.PrenotazioneServlet.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package servlets;

import Bean.Prenotazione;
import com.lowagie.text.BadElementException;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Image;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;
import db.DBManager;
import funzioni.Email;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.MessagingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.glxn.qrgen.QRCode;
import net.glxn.qrgen.image.ImageType;
import static servlets.InvioServlet.servletContext;

/**
 *
 * @author Mattia
 */
public class PrenotazioneServlet extends HttpServlet {
    String email;
    ArrayList<Integer> posti = null;
    ArrayList<Integer> id_prenotazione = new ArrayList<>();
    private DBManager manager;

    @Override
    public void init() throws ServletException {
        // Inizializza il DBManager dagli attributi di Application
        this.manager = (DBManager) super.getServletContext().getAttribute("dbmanager");

    }

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException, DocumentException {

        HttpSession session = request.getSession(true);

        int[] id_prezzo = new int[50];
        double[] prezzo = new double[50];
        String[] tipoSconto = new String[50];

        int id_spettacolo = Integer.parseInt(request.getParameter("idShow"));
        int id_sala = Integer.parseInt(request.getParameter("idHall"));
        email = request.getParameter("email");
        String stringaPosti = request.getParameter("stringaPosti");

        double credito = manager.checkCredito(email);

        for (int i = 0; i < 50; i++) {
            tipoSconto[i] = (request.getParameter("" + i + ""));
            if (tipoSconto[i] != null) {

                id_prezzo[i] = manager.getId_prezzo(tipoSconto[i]);
                prezzo[i] = manager.getPrezzo(tipoSconto[i]);
                if (credito - prezzo[i] > 0) {
                    manager.setCredito(credito - prezzo[i], email);
                } else {
                    manager.setCredito(0, email);
                }
            }
        }

        this.parseRequestedSeats(stringaPosti);

        java.util.Date date = new java.util.Date();
        Timestamp data_ora_operazione = new Timestamp(date.getTime());

        for (int i = 0; i < posti.size(); i++) {

            if (manager.checkPrenotazione(id_spettacolo, ((id_sala - 1) * 50) + posti.get(i))
                    && manager.getData_ora(id_spettacolo).after(data_ora_operazione)) {
                manager.setPrenotazione(manager.getLastId_prenotazione() + 1, id_spettacolo, id_prezzo[i],
                        ((id_sala - 1) * 50) + posti.get(i), email);
                id_prenotazione.add(manager.getLastId_prenotazione());
            } else {
                request.setAttribute("errorMessage",
                        "Errore durante la prenotazione dei posti! Posto gi prenotato o spettacolo gi iniziato!");
                RequestDispatcher rd = request.getRequestDispatcher("/error.jsp");
                rd.forward(request, response);
            }
        }

        invioBiglietto(id_prenotazione);

        RequestDispatcher rdjsp = request.getRequestDispatcher("/prenotazione.jsp");
        rdjsp.forward(request, response);

    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            request.setAttribute("errorMessage",
                    "Errore durante la prenotazione dei posti! Posto gi prenotato o spettacolo gi iniziato!");
            RequestDispatcher rd = request.getRequestDispatcher("/error.jsp");
            rd.forward(request, response);
        } catch (DocumentException ex) {
            Logger.getLogger(PrenotazioneServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            request.setAttribute("errorMessage", "Errore durante la prenotazione dei posti! Posto gi prenotato!");
            RequestDispatcher rd = request.getRequestDispatcher("/error.jsp");
            rd.forward(request, response);
        } catch (DocumentException ex) {
            Logger.getLogger(PrenotazioneServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Metodo per processare la stringa dei posti che viene mandata in input con
     * una POST
     *
     * @param stringaPosti La stringa su cui eseguire lo splitting dei valori
     * @return Un ArrayList<Integer> contenete i posti che l'utente sta cercando
     * di prenotare
     */
    private ArrayList<Integer> parseRequestedSeats(String stringaPosti) throws SQLException {

        posti = new ArrayList<>();

        String delim = " ";
        String[] tokens = stringaPosti.split(delim);
        int t = 0;

        for (int i = 0; i < tokens.length; i++) {
            t = Integer.parseInt(tokens[i]);
            if (!posti.contains(t)) {
                posti.add(t);
            }
        }

        /*Debug*/ System.out.println("STRING LENGTH: " + tokens.length);
        /*Debug*/
        System.out.println(posti.toString());

        return posti;
    }

    private void invioBiglietto(ArrayList<Integer> id_prenotazione)
            throws DocumentException, FileNotFoundException {

        servletContext = getServletContext();

        ArrayList<Double> prezzo_pagato = new ArrayList<>();
        ArrayList<Integer> posto = new ArrayList<>();
        ArrayList<Integer> spettacolo = new ArrayList<>();
        ArrayList<Date> data = new ArrayList<>();
        ArrayList<String> emails = new ArrayList<>();
        ArrayList<String> titolo = new ArrayList<>();
        ArrayList<Date> data_spettacolo = new ArrayList<>();
        ArrayList<Integer> sala = new ArrayList<>();

        Prenotazione preno = null;

        try {
            for (int i = 0; i < id_prenotazione.size(); i++) {
                preno = manager.getPrenotazione(id_prenotazione.get(i));
                System.out.println(id_prenotazione.get(i));

                prezzo_pagato.add(preno.getId_prezzo());
                posto.add(preno.getId_posto() - ((preno.getSala() - 1) * 50));
                spettacolo.add(preno.getId_spettacolo());
                data.add(preno.getData_ora_prenotazione());
                emails.add(preno.getEmail());
                titolo.add(preno.getTitolo());
                data_spettacolo.add(preno.getData_ora_spettacolo());
                sala.add(preno.getSala());
            }

        } catch (SQLException ex) {
            Logger.getLogger(InvioServlet.class.getName()).log(Level.SEVERE, null, ex);
        }

        //int id=preno.getId_prenotazione();
        //creo il pdf per la prenotazione
        Document document = new Document();

        PdfWriter.getInstance(document, new FileOutputStream(servletContext.getRealPath("/") + "ticket.pdf"));
        System.out.println("Creazione file riuscita");

        document.open();

        //creo il paragrafo per il tiolo della pagina      
        for (int i = 0; i < id_prenotazione.size(); i++) {
            Paragraph p = new Paragraph("Biglietto n " + id_prenotazione.get(i));

            p.setAlignment(Element.ALIGN_CENTER);

            try {
                document.add(p);
                System.out.println("Scrittura file riuscita");
            } catch (DocumentException ex) {

            }

            //creo il paragrafo per i dati del biglietto
            p = new Paragraph("");
            p.setAlignment(Element.ALIGN_LEFT);
            p.add("Biglietto: " + id_prenotazione.get(i) + "\n");
            p.add("Utente: " + emails.get(i) + "\n");
            p.add("Prezzo pagato: " + prezzo_pagato.get(i) + "\n");
            p.add("Numero posto: " + posto.get(i) + "\n");
            p.add("Spettacolo: " + spettacolo.get(i) + "\n");
            p.add("Data: " + data.get(i) + "\n");
            p.add("Film: " + titolo.get(i) + "\n");
            p.add("Data spettacolo: " + data_spettacolo.get(i) + "\n");
            p.add("Sala: " + sala.get(i) + "\n");

            System.out.println("INFO INFO INFO" + id_prenotazione.get(i) + " " + emails.get(i) + " "
                    + prezzo_pagato.get(i) + " " + posto.get(i) + " " + spettacolo.get(i) + " " + data.get(i) + " "
                    + "FINE FINE FINE");

            try {
                document.add(p);
                System.out.println("Scrittura file riuscita");
            } catch (DocumentException ex) {

            }
        }
        //creo il qrcode e lo aggiungo alla pagina
        Image image = null;
        File file;
        Paragraph p = new Paragraph("");
        file = QRCode.from("Email:" + email + "\n" + "Prezzo:" + prezzo_pagato + "\n" + "Numero posto:" + posto
                + "\n" + "Spettacolo:" + spettacolo.get(0) + "\n" + "Data:" + data.get(0) + "\n" + "Film: "
                + titolo.get(0) + "\n" + "Data spettacolo: " + data_spettacolo.get(0) + "\n" + "Sala: "
                + sala.get(0)).to(ImageType.JPG).withSize(300, 300).file();
        try {
            image = Image.getInstance(file.getAbsolutePath());
        } catch (BadElementException | MalformedURLException ex) {
            // Logger.getLogger(SendTicket.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(PrenotazioneServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println(file.toString());
        try {
            document.add(image);
        } catch (DocumentException ex) {

        }

        try {
            document.add(p);
            document.newPage();
            System.out.println("Scrittura file riuscita");
        } catch (DocumentException ex) {

        }

        document.close();

        try {

            //invio la mail per la conferma della prenotazione con allegato il pdf
            Email.ticketEmail("smtp.gmail.com", "587", "cinemangiare@gmail.com", "Cinemangiaredb", email,
                    "Conferma acquisto biglietti",
                    "Gentile cliente," + "\n" + "le confermiamo la prenotazione presso il nostro cinema." + "\n"
                            + "In allegato trover il file pdf da stampare contenente i biglietti",
                    servletContext.getRealPath("/") + "ticket.pdf");
        } catch (Exception ex) {
            System.out.println("logan");
        }
    }
}