GestioneFAQController.java

package controller;

import model.beans.FAQ;
import model.beans.Utente;
import model.services.FaqService;
import model.services.FaqServiceImpl;
import model.services.ReportService;
import model.services.TipoReport;

import javax.servlet.ServletException;
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 = "GestioneFAQController",
        value = "/faq/*")
public final class GestioneFAQController extends HttpServlet {
   /**
    * Variabile per il service di FAQ.
    */
   private FaqService service;

   /**
    * Costruttore classe GestioneFAQController.
    *
    * @param newService il service che si interfaccia con i DAO
    */
   public GestioneFAQController(final FaqService newService) {
      service = newService;
   }

   /**
    * Costruttore classe GestioneFAQController.
    */
   public GestioneFAQController() {
      service = new FaqServiceImpl();
   }

   @Override
   public void doGet(final HttpServletRequest request,
                     final HttpServletResponse response)
           throws ServletException, IOException {

      String resource = "/WEB-INF/results/visualizzaFAQ.jsp";
      String path = request.getPathInfo();

      if (!path.equals("/visualizzaFAQ")) {
         HttpSession session = request.getSession(false);

         if (session != null && session.getAttribute("utente") != null) {
            Utente utente = (Utente) session.getAttribute("utente");

            if (!utente.isAdmin()) {
               response.sendError(HttpServletResponse.SC_UNAUTHORIZED,
                       "Non Autorizzato");
               return;
            } else {
               if (path.equals("/modificaFAQ")) {
                  request.setAttribute("faq", service
                          .visualizzaFaq(Integer
                                  .parseInt(
                                          request.getParameter("idFaq"))));
               } else if (!path.equals("/inserisciFAQ")) {
                  response.sendError(HttpServletResponse.SC_NOT_FOUND);
                  return;
               }

               resource = "/WEB-INF/results/formFAQ.jsp";
            }
         } else {
            response.sendRedirect(
                    request.getServletContext().getContextPath()
                            + "/autenticazione/login");
            return;
         }
      } else {
         request.setAttribute("faqList", service.visualizzaFaq());
      }

      request.getRequestDispatcher(resource).forward(request, response);
   }

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

      if (session != null && session.getAttribute("utente") != null) {
         Utente utente = (Utente) session.getAttribute("utente");

         switch (path) {
            case "/inserisciFAQ" -> {
               String domanda = request.getParameter("domanda");
               String risposta = request.getParameter("risposta");

               if (domanda == null || domanda.isBlank()
                       || risposta == null || domanda.isBlank()) {
                  response.sendError(HttpServletResponse.SC_BAD_REQUEST);
                  return;
               } else {
                  FAQ faq = new FAQ();
                  faq.setDomanda(domanda);
                  faq.setRisposta(risposta);
                  faq.setUtenteCreatore(utente);

                  if (service.inserisciFaq(faq)) {
                     ReportService.creaReport(request, TipoReport.INFO,
                             "Esito operazione:", "FAQ inserita con successo");
                  } else {
                     ReportService.creaReport(request, TipoReport.ERRORE,
                             "Esito operazione:", "FAQ non inserita");
                  }
               }
            }
            case "/modificaFAQ" -> {
               String domanda = request.getParameter("domanda");
               String risposta = request.getParameter("risposta");
               int idFAQ = Integer.parseInt(request.getParameter("idFaq"));

               if (domanda == null || domanda.isBlank()
                       || risposta == null || domanda.isBlank()) {
                  response.sendError(HttpServletResponse.SC_BAD_REQUEST);
                  return;
               }

               FAQ faq = new FAQ();
               faq.setIdFaq(idFAQ);
               faq.setDomanda(domanda);
               faq.setRisposta(risposta);
               faq.setUtenteCreatore(utente);

               if (service.modificaFaq(faq)) {
                  ReportService.creaReport(request, TipoReport.INFO,
                          "Esito operazione:", "FAQ modificata con successo");
               } else {
                  ReportService.creaReport(request, TipoReport.ERRORE,
                          "Esito operazione:", "FAQ non modificata");
               }
            }
            case "/eliminaFAQ" -> {
               FAQ faq = new FAQ();
               faq.setIdFaq(Integer.parseInt(request.getParameter("idFaq")));
               faq.setUtenteCreatore(utente);

               if (service.cancellaFaq(faq)) {
                  ReportService.creaReport(request, TipoReport.INFO,
                          "Esito operazione:", "FAQ eliminata con successo");
               } else {
                  ReportService.creaReport(request, TipoReport.ERRORE,
                          "Esito operazione:", "FAQ non eliminata");
               }
            }
            default -> {
               response.sendError(HttpServletResponse.SC_NOT_FOUND);
               return;
            }
         }

         response.sendRedirect(
                 request.getServletContext().getContextPath()
                         + "/faq/visualizzaFAQ");
      } else {
         response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
      }
   }
}