SaveMaglietta.java

package control.maglietta;

import model.maglietta.MagliettaBean;
import model.maglietta.MagliettaDAO;
import model.misura.MisuraBean;
import model.misura.MisuraDAO;

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

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.sql.SQLException;

@WebServlet("/SaveMaglietta")
@MultipartConfig
public class SaveMaglietta extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        final String ERROR_PAGE = "/pages/errorpage.jsp";
        final String PATH = req.getServletContext().getRealPath("/images/grafiche/");
        Path uploadDir = Paths.get(PATH).toAbsolutePath().normalize();

        String nome = req.getParameter("nome");
        String colore = req.getParameter("colore");
        String tipo = req.getParameter("tipo");
        int iva;
        try {
            iva = (int) Float.parseFloat(req.getParameter("IVA"));
        } catch (NumberFormatException | NullPointerException e) {
            req.getRequestDispatcher(ERROR_PAGE).forward(req, resp);
            return;
        }

        float prezzo;
        try {
            prezzo = Float.parseFloat(req.getParameter("prezzo"));
        } catch (NumberFormatException | NullPointerException e) {
            req.getRequestDispatcher(ERROR_PAGE).forward(req, resp);
            return;
        }
        String descrizione = req.getParameter("descrizione");

        Part grafica;
        try {
            grafica = req.getPart("grafica");
        } catch (IOException | ServletException e) {
            req.getRequestDispatcher(ERROR_PAGE).forward(req, resp);
            return;
        }

        MagliettaDAO magliettaDAO = new MagliettaDAO();

        String nomeFile;
        int extensionIndex = grafica.getSubmittedFileName().lastIndexOf(".");

        try {
            String estensione = grafica.getSubmittedFileName().substring(extensionIndex);
            nomeFile = magliettaDAO.getMaxID() + tipo + estensione;
        } catch (SQLException e) {
            req.getRequestDispatcher(ERROR_PAGE).forward(req, resp);
            return;
        }

        nomeFile = nomeFile.replaceAll("[^a-zA-Z0-9._-]", "_");

        String relativePath = "images/grafiche/" + nomeFile;

        Path destinationFile = uploadDir.resolve(nomeFile).normalize();

        if (!destinationFile.startsWith(uploadDir)) {
            req.getRequestDispatcher(ERROR_PAGE).forward(req, resp);
            return;
        }

        try (InputStream inputStream = grafica.getInputStream()) {
            Files.copy(inputStream, destinationFile);
        } catch (IOException e) {
            req.getRequestDispatcher(ERROR_PAGE).forward(req, resp);
            return;
        }

        MagliettaBean maglietta = new MagliettaBean();
        maglietta.setNome(nome);
        maglietta.setColore(colore);
        maglietta.setTipo(tipo);
        maglietta.setPrezzo(prezzo);
        maglietta.setIVA(iva);
        maglietta.setDescrizione(descrizione);
        maglietta.setGrafica(relativePath);

        String taglia = req.getParameter("taglia");
        int quantita;
        try {
            quantita = Integer.parseInt(req.getParameter("quantita"));
        } catch (NumberFormatException | NullPointerException e) {
            req.getRequestDispatcher(ERROR_PAGE).forward(req, resp);
            return;
        }

        MisuraDAO misuraDAO = new MisuraDAO();

        try {
            magliettaDAO.doSave(maglietta);
            MisuraBean misuraBean =
                    new MisuraBean(magliettaDAO.getMaxID() - 1, quantita, taglia);
            misuraDAO.doSave(misuraBean);
        } catch (SQLException e) {
            req.getRequestDispatcher(ERROR_PAGE).forward(req, resp);
            return;
        }

        resp.sendRedirect("./Catalogo");
    }
}