Coverage Summary for Class: Observable (it.polimi.ingsw.utils)

Class Class, % Method, % Line, %
Observable 100% (1/ 1) 100% (7/ 7) 100% (20/ 20)


1 package it.polimi.ingsw.utils; 2  3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6  7 /** 8  * Custom Observable Class 9  * 10  * @param <T> type of information that can be observed 11  */ 12 public class Observable<T> { 13  /** 14  * Simple observers'list 15  */ 16  private List<Observer<T>> observers = new ArrayList<>(); 17  /** 18  * Hashmap id-observer, used to send data to a specific observer 19  */ 20  private HashMap<String, Observer<T>> signedObserver = new HashMap<>(); 21  22  /** 23  * Add an observer 24  * 25  * @param observer observer to add 26  */ 27  public void addObservers(Observer<T> observer) { 28  observers.add(observer); 29  } 30  31  /** 32  * Add an observer with a key 33  * 34  * @param key key to bind with the observer 35  * @param observer observer to add 36  */ 37  38  public void addObservers(String key, Observer<T> observer) { 39  addObservers(observer); 40  signedObserver.put(key, observer); 41  } 42  43  /** 44  * Send data to all observers 45  * 46  * @param message data to send 47  */ 48  public void notify(T message) { 49  updateList(observers, message); 50  } 51  52  /** 53  * Send data to specific observers 54  * 55  * @param targetList observer id list 56  * @param message data to send 57  */ 58  public void notify(ArrayList<String> targetList, T message) { 59  List<Observer<T>> obsList = new ArrayList<>(); 60  signedObserver.forEach((k, v) -> { 61  if (targetList.contains(k)) 62  obsList.add(v); 63  }); 64  updateList(obsList, message); 65  } 66  67  /** 68  * Send data to a observers list 69  * 70  * @param obsList observer lists 71  * @param message data to send 72  */ 73  private void updateList(List<Observer<T>> obsList, T message) { 74  for (Observer<T> observer : obsList) 75  observer.update(message); 76  } 77 }