GestioneUtenteController.java
package controller;
import controller.utils.FileServlet;
import controller.utils.Validator;
import model.beans.Campagna;
import model.beans.Donazione;
import model.beans.Utente;
import model.beans.proxies.CampagnaProxy;
import model.beans.proxies.DonazioneProxy;
import model.beans.proxies.UtenteProxy;
import model.beans.proxyInterfaces.CampagnaInterface;
import model.services.CampagnaService;
import model.services.CampagnaServiceImpl;
import model.services.DonazioniService;
import model.services.DonazioniServiceImpl;
import model.services.ReportService;
import model.services.SegnalazioniService;
import model.services.SegnalazioniServiceImpl;
import model.services.TipoReport;
import model.services.UtenteService;
import model.services.UtenteServiceImpl;
import model.storage.ConPool;
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.HttpSession;
import java.io.IOException;
import java.time.LocalDate;
import java.util.List;
@WebServlet(name = "GestioneUtenteController",
value = "/GestioneUtenteController/*")
@MultipartConfig
public final class GestioneUtenteController extends HttpServlet {
/**
* Variabile per il service di Utente.
*/
private static UtenteService utenteService;
/**
* Costruttore per GestioneUtenteController.
*
* @param service il service di Utente.
*/
public GestioneUtenteController(final UtenteService service) {
utenteService = service;
}
/**
* Costruttore per GestioneUtenteController.
*/
public GestioneUtenteController() {
utenteService = new UtenteServiceImpl();
}
@Override
public void doGet(final HttpServletRequest request,
final HttpServletResponse response)
throws ServletException, IOException {
String path = request.getPathInfo() == null
? "/" : request.getPathInfo();
switch (path) {
case "/visualizzaDashboard" -> {
visualizzaDashboard(request, response);
}
case "/visualizzaDashboardAdmin" -> {
visualizzaDashboardAdmin(request, response);
}
default -> response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
}
@Override
public void doPost(final HttpServletRequest request,
final HttpServletResponse response)
throws IOException, ServletException {
String path = request.getPathInfo();
switch (path) {
case "/modificaProfilo" -> modificaProfilo(request, response);
case "/promuoviDeclassaUtente" -> promuoviDeclassaUtente(request,
response);
default -> response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
}
private void visualizzaDashboardAdmin(final HttpServletRequest request,
final HttpServletResponse response)
throws IOException, ServletException {
HttpSession session = request.getSession();
Utente userSession = (Utente) session.getAttribute("utente");
if (!new Validator(request).isValidBean(Utente.class,
userSession)) {
response.sendRedirect(request.getServletContext().getContextPath()
+ "/autenticazione/login");
} else {
if (!userSession.isAdmin()) {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED,
"Non autorizzato.");
} else {
SegnalazioniService segnalazioniService =
new SegnalazioniServiceImpl();
DonazioniService donazioniService = new DonazioniServiceImpl();
List<Donazione> list = donazioniService.visualizzaDonazioni();
DonazioneProxy proxy = new DonazioneProxy(new Donazione());
list.forEach(d -> {
proxy.setDonazione(d);
d.setUtente(proxy.getUtente());
});
CampagnaService cs = new CampagnaServiceImpl();
List<Campagna> lst = cs.getAllCampagne();
lst.forEach(c -> {
CampagnaInterface proxyCamp = new CampagnaProxy(c);
proxyCamp.getUtente();
});
request.setAttribute("campagneList", lst);
request.setAttribute("utentiList",
utenteService.visualizzaUtenti(userSession));
request.setAttribute("segnalazioniList",
segnalazioniService.trovaSegnalazioni());
request.setAttribute("donazioniList", list);
request.getRequestDispatcher("/WEB-INF/results/admin.jsp")
.forward(request, response);
}
}
}
private void visualizzaDashboard(final HttpServletRequest request,
final HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
Utente userSession = (Utente) session.getAttribute("utente");
if (!new Validator(request).isValidBean(Utente.class,
userSession)) {
response.sendRedirect(request.getServletContext().getContextPath()
+ "/autenticazione/login");
} else {
Utente ut = utenteService.visualizzaDashboardUtente(
userSession.getIdUtente());
UtenteProxy utenteProxy = new UtenteProxy(ut);
ut.setDonazioni(utenteProxy.getDonazioni());
ut.setCampagne(utenteProxy.getCampagne());
request.setAttribute("utente", ut);
request.getRequestDispatcher("/WEB-INF/results/profilo_utente.jsp")
.forward(request, response);
}
}
private void modificaProfilo(final HttpServletRequest request,
final HttpServletResponse response)
throws IOException, ServletException {
HttpSession session = request.getSession();
Utente userSession = (Utente) session.getAttribute("utente");
Utente utente = new Utente();
if (!new Validator(request).isValidBean(Utente.class, userSession)) {
response.sendRedirect(request.getServletContext().getContextPath()
+ "/autenticazione/login");
} else {
if (request.getParameter("password").equals(
request.getParameter("confermaPassword"))
&& request.getParameter("email").equals(
request.getParameter("confermaEmail"))) {
if (new Validator(request).assertUtente()) {
utente.setIdUtente(userSession
.getIdUtente());
utente.createPasswordHash(request.getParameter("password"));
utente.setEmail(request.getParameter("email"));
utente.setNome(request.getParameter("nome"));
utente.setCognome(request.getParameter("cognome"));
utente.setDataDiNascita(
LocalDate.parse(
request.getParameter("dataDiNascita")));
utente.setTelefono(request.getParameter("telefono"));
utente.setStrada(request.getParameter("indirizzo"));
utente.setCitta(request.getParameter("citta"));
utente.setCap(request.getParameter("cap"));
utente.setCf(request.getParameter("cf"));
utente.setAdmin(userSession.isAdmin());
List<String> listFoto = FileServlet.uploadFoto(request);
if (!listFoto.isEmpty()) {
utente.setFotoProfilo(listFoto.get(0));
} else {
utente.setFotoProfilo(userSession.getFotoProfilo());
}
if (utenteService.modificaProfilo(utente)) {
ReportService.creaReport(request, TipoReport.INFO,
"Esito operazione:",
"Modifica effettuata con successo");
} else {
ReportService.creaReport(request, TipoReport.ERRORE,
"Esito operazione:",
"Modifica non effettuata con successo");
}
session.setAttribute("utente", utente);
request.getRequestDispatcher(
"/WEB-INF/results/profilo_utente.jsp")
.forward(request, response);
} else {
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
}
} else {
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
}
}
}
private void promuoviDeclassaUtente(final HttpServletRequest request,
final HttpServletResponse response)
throws IOException, ServletException {
HttpSession session = request.getSession();
Utente userSession = (Utente) session.getAttribute("utente");
if (!new Validator(request).isValidBean(Utente.class,
userSession)) {
response.sendRedirect(request.getServletContext().getContextPath()
+ "/autenticazione/login");
} else {
if (!userSession.isAdmin()) {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED,
"Non Autorizzato");
} else {
String idUtente = request.getParameter("utentemod");
Utente ut;
if (idUtente != null) {
try {
ut = utenteService
.visualizzaDashboardUtente(
Integer.parseInt(idUtente));
} catch (NumberFormatException e) {
response.sendError(HttpServletResponse
.SC_INTERNAL_SERVER_ERROR);
return;
}
if (utenteService.promuoviDeclassaUtente(userSession, ut)) {
ReportService.creaReport(request, TipoReport.INFO,
"Esito operazione:",
"Modifica effettuata con successo");
} else {
ReportService.creaReport(request, TipoReport.ERRORE,
"Esito operazione:",
"Modifica non effettuata con successo");
}
visualizzaDashboardAdmin(request, response);
} else {
response.sendError(HttpServletResponse.
SC_INTERNAL_SERVER_ERROR);
}
}
}
}
@Override
public void destroy() {
ConPool.getInstance().closeDataSource();
super.destroy();
}
}