ComunicazioneEspertoServiceImpl.java
package it.unisa.c07.biblionet.comunicazioneEsperto.service;
import it.unisa.c07.biblionet.model.dao.GenereDAO;
import it.unisa.c07.biblionet.model.dao.utente.EspertoDAO;
import it.unisa.c07.biblionet.model.entity.Genere;
import it.unisa.c07.biblionet.model.entity.utente.Esperto;
import it.unisa.c07.biblionet.model.entity.utente.UtenteRegistrato;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @author Alessio Casolaro
* @author Antonio Della Porta
*/
@Service
@RequiredArgsConstructor
public class ComunicazioneEspertoServiceImpl
implements ComunicazioneEspertoService {
/**
* Si occupa delle funzioni CRUD per l'esperto.
*/
private final EspertoDAO espertoDAO;
/**
* Si occupa delle funzioni CRUD per il genere.
*/
private final GenereDAO genereDAO;
@Override
public final List<Esperto> getEspertiByGeneri(final List<Genere> generi) {
List<Esperto> allEsperti = new ArrayList<>();
List<Esperto> toReturn = new ArrayList<>();
for (UtenteRegistrato utente : espertoDAO.findAll()) {
if (utente.getTipo().equals("Esperto")) {
allEsperti.add((Esperto) utente);
}
}
for (Esperto esperto: allEsperti) {
for (Genere genere : esperto.getGeneri()) {
if (generi.contains(genere) && !toReturn.contains(esperto)) {
toReturn.add(esperto);
}
}
}
return toReturn;
}
/**
* Implementa la funzionalità che restituisce la lista
* di tutti gli Esperti del DB.
* @return la lista di esperti
*/
@Override
public List<Esperto> getAllEsperti() {
return espertoDAO.findAllEsperti();
}
/**
* Implementa la funzionalità che restituisce la lista
* di tutti gli Esperti del DB filtrati per nome.
* @name il nome con cui filtrare
* * @return la lista di esperti
*/
@Override
public List<Esperto> getEsperiByName(final String name) {
return espertoDAO.findByNomeLike(name);
}
/**
* Implementa la funzionalità che permette
* di visualizzare la lista completa dei libri
* prenotabili di un dato genere.
* @param gen Il nome del genere
* @return La lista di libri
*/
@Override
public List<Esperto> visualizzaEspertiPerGenere(
final String gen) {
String genere = gen.substring(0, 1).toUpperCase() + gen.substring(1);
List<Esperto> list = espertoDAO.findAllEsperti();
List<Esperto> list2 = new ArrayList<>();
Genere g = genereDAO.findByName(genere);
for (Esperto e : list) {
if (e.getGeneri().contains(g)) {
list2.add(e);
}
}
return list2;
}
}