ComunicazioneEspertoController.java

package it.unisa.c07.biblionet.comunicazioneEsperto.controller;

import it.unisa.c07.biblionet.comunicazioneEsperto.service.ComunicazioneEspertoService;
import it.unisa.c07.biblionet.model.entity.utente.Esperto;
import it.unisa.c07.biblionet.model.entity.utente.Lettore;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;

import java.util.List;

/**
 * @author Alessio Casolaro
 * @author Della Porta Antonio
 */
@Controller
@RequiredArgsConstructor
@SessionAttributes("loggedUser")
@RequestMapping("/comunicazione-esperto")
public class ComunicazioneEspertoController {

    /**
     * Il service per effettuare le operazioni di persistenza.
     */
    private final ComunicazioneEspertoService comunicazioneEspertoService;

    /**
     * Implementa la funzionalità di mostrare gli esperti in base
     * ai generi preferiti del lettore.
     * @param model utilizzato per gestire la sessione
     * @return la view contenente la lista
     */
    @RequestMapping(value = "/visualizza-esperti-genere",
                    method = RequestMethod.GET)
    public final String visualizzaEspertiGeneri(final Model model) {

        Lettore lettore = (Lettore) model.getAttribute("loggedUser");
        List<Esperto> listaEsperti = comunicazioneEspertoService.
                                       getEspertiByGeneri(lettore.getGeneri());
        model.addAttribute("esperti", listaEsperti);
        return "comunicazione-esperto/lista-esperti";
    }

    /**
     * Implementa la funzionalità di visualizzare tutti gli Esperti
     * presenti sulla piattaforma.
     * @param model il model per la richiesta
     * @return la view che visualizza tutti gli Esperti
     */
    @RequestMapping(value = "/lista-esperti", method = RequestMethod.GET)
    public final String visualizzaListaEsperti(final Model model) {
        List<Esperto> listaEsperti =
                comunicazioneEspertoService.getAllEsperti();
        model.addAttribute("listaEsperti", listaEsperti);
        return "comunicazione-esperto/lista-completa-esperti";
    }

    /**
     * Implementa la funzionalità di visualizzare tutti gli Esperti
     * presenti sulla piattaforma.
     * @param model il model per la richiesta
     * @param stringa il contenuto del filtro
     * @param filtro il nome del filtro
     * @return la view che visualizza tutti gli Esperti
     */
    @RequestMapping(value = "/ricerca", method = RequestMethod.GET)
    public final String visualizzaListaEspertiFiltrati(
            @RequestParam("stringa") final String stringa,
            @RequestParam("filtro") final String filtro,
                                    final Model model) {
        switch (filtro) {
            case "nome":
                model.addAttribute("listaEsperti", comunicazioneEspertoService.
                        getEsperiByName(stringa));
                break;
            case "genere":
                model.addAttribute("listaEsperti", comunicazioneEspertoService.
                        visualizzaEspertiPerGenere(stringa));
                break;
            default:
                model.addAttribute("listaEsperti", comunicazioneEspertoService.
                        getAllEsperti());
                break;
        }
        return "comunicazione-esperto/lista-completa-esperti";
    }
}