[ all classes ]
[ it.polimi.ingsw.utils ]
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 }