GestioneCategorieController.java

package controller;

import controller.utils.Validator;
import model.beans.Categoria;
import model.beans.Utente;
import model.services.CategoriaService;
import model.services.CategoriaServiceImpl;
import model.services.ReportService;
import model.services.TipoReport;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "GestioneCategorieController",
        value = "/categorie/*", loadOnStartup = 0)
public final class GestioneCategorieController extends HttpServlet {
   /**
    * Variabile per il service di Categoria.
    */
   private CategoriaService service;

   /**
    * Costruttore per il controller Categoria.
    *
    * @param newService istanza di una classe che implementa CategoriaService
    */
   public GestioneCategorieController(final CategoriaService newService) {
      this.service = newService;
   }

   /**
    * Costruttore per il controller Categoria.
    */
   public GestioneCategorieController() {
      service = new CategoriaServiceImpl();
   }

   @Override
   public void init() {
      this.getServletContext().setAttribute("categorieList",
              service.visualizzaCategorie());
   }

   @Override
   public void doPost(final HttpServletRequest request,
                      final HttpServletResponse response)
           throws IOException {
      String path = request.getPathInfo();
      HttpSession session = request.getSession();

      switch (path) {
         case "/inserisciCategoria" -> {
            if (!new Validator(request)
                    .isValidBean(Utente.class,
                            session.getAttribute("utente"))) {

               response.sendRedirect(request
                       .getServletContext().getContextPath()
                       + "/autenticazione/login");
               return;
            } else {
               Utente utente = (Utente) session.getAttribute("utente");

               if (!utente.isAdmin()) {
                  response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
                  return;
               } else {
                  String nomeCategoria = request.getParameter("nomeCategoria");

                  if (nomeCategoria.isBlank()) {
                     response.sendError(HttpServletResponse.SC_BAD_REQUEST);
                     return;
                  } else {
                     Categoria c = new Categoria();
                     c.setNome(nomeCategoria);

                     if (service.inserisciCategoria(c)) {
                        visualizzaCategorie(request);
                        ReportService.creaReport(request, TipoReport.INFO,
                                "Esito operazione:",
                                "Aggiunta categoria eseguita");
                     } else {
                        ReportService.creaReport(request, TipoReport.ERRORE,
                                "Esito operazione:",
                                "Aggiunta categoria non eseguita");
                     }
                  }
               }
            }
         }
         case "/modificaCategoria" -> {
            if (!new Validator(request)
                    .isValidBean(Utente.class,
                            session.getAttribute("utente"))) {

               response.sendRedirect(request.getServletContext()
                       .getContextPath() + "/autenticazione/login");
               return;
            } else {
               Utente utente = (Utente) session.getAttribute("utente");

               if (!utente.isAdmin()) {
                  response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
                  return;
               } else {
                  int idCategoria = Integer.parseInt(
                          request.getParameter("idCategoria"));
                  String nomeCategoria = request.getParameter("nomeCategoria");
                  Categoria categoria = new Categoria();
                  categoria.setIdCategoria(idCategoria);
                  categoria = service.visualizzaCategoria(categoria);
                  categoria.setNome(nomeCategoria);

                  if (service.modificaCategoria(categoria)) {
                     visualizzaCategorie(request);
                     ReportService.creaReport(request, TipoReport.INFO,
                             "Esito operazione:",
                             "Modifica categoria eseguita");
                  } else {
                     ReportService.creaReport(request, TipoReport.ERRORE,
                             "Esito operazione:",
                             "Modifica categoria non eseguita");
                  }
               }
            }
         }

         default -> {
            response.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
         }
      }
      response.sendRedirect(request.getServletContext().getContextPath()
              + "/GestioneUtenteController/visualizzaDashboardAdmin");
   }

   private void visualizzaCategorie(final HttpServletRequest request) {
      request.setAttribute("categorieList",
              service.visualizzaCategorie());
   }
}