OrdineObserverServiceImpl.java
package it.unisa.thespoon.ordini.service;
import it.unisa.thespoon.model.entity.Ordine;
import it.unisa.thespoon.model.entity.Ristorante;
import it.unisa.thespoon.ordini.OrdineObserver;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Classe che espone i metodi del servizio Observer,
* questo servizio gestisce gli Observer, permettendo alle classi
* entità che dovrebbero farne uso di concentrarsi esclusivamente s
* sulla rappresentazione dei dati
*
* @author Jacopo Gennaro Esposito
* */
@Service
public class OrdineObserverServiceImpl implements OrdineObserverService {
private Map<Class<?>, List<OrdineObserver>> observersMap = new HashMap<>();
@Override
public void addObserver(Class<?> entityType, OrdineObserver observer) {
observersMap.computeIfAbsent(entityType, k -> new ArrayList<>()).add(observer);
}
@Override
public void removeObserver(Class<?> entityType, OrdineObserver observer) {
observersMap.computeIfPresent(entityType, (k, observers) -> {
observers.remove(observer);
return observers.isEmpty() ? null : observers;
});
}
@Override
public void notifyObservers(Ordine ordine, Ristorante ristorante) {
List<OrdineObserver> observers = observersMap.get(ordine.getClass());
if (observers != null) {
observers.forEach(observer -> observer.onOrdineStatoChanged(ordine, ristorante));
}
}
}