forked from nus-cs2103-AY1920S1/addressbook-level3
/
ModelManager.java
79 lines (65 loc) · 2.07 KB
/
ModelManager.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package seedu.address.model;
import java.util.ArrayList;
import java.util.List;
import seedu.address.model.events.EventSource;
import seedu.address.model.listeners.ModelDataListener;
import seedu.address.model.tasks.TaskSource;
/**
* Represents a class that manages the {@link ModelData} of Horo.
* Horo's Storage, Ui and UndoRedoManager components implement the ModelDataListener interface
* which listens for any changes to this ModelData so that they can be updated accordingly.
*/
public class ModelManager {
private ModelData model;
private final List<ModelDataListener> modelDataListeners;
/**
* Creates a ModelManager.
*/
public ModelManager() {
super();
this.model = new ModelData();
this.modelDataListeners = new ArrayList<>();
}
/**
* Adds ModelDataListeners.
*/
public void addModelDataListener(ModelDataListener listener) {
this.modelDataListeners.add(listener);
}
/**
* Replaces the current ModelData with a deep copy of a ModelData provided.
* @param modelData a ModelData to replace this Model
*/
public void setModelData(ModelData modelData) {
// Deep copy and reassign model.
this.model = new ModelData(modelData);
// Notify all listeners whenever either the EventList or TaskList is changed.
this.modelDataListeners
.forEach(listener -> listener.onModelDataChange(this.getModelData()));
}
/**
* Returns an immutable, deep copy of Horo's events and tasks.
*
* @return a ModelLists
*/
public ModelData getModelData() {
return new ModelData(this.model);
}
/**
* Returns an immutable, deep copy of this Horo's events.
*
* @return a copy of the Horo's events
*/
public List<EventSource> getEvents() {
return this.model.getEvents();
}
/* Tasks */
/**
* Returns an immutable, deep copy of Horo's tasks.
*
* @return a copy of Horo's tasks
*/
public List<TaskSource> getTasks() {
return this.model.getTasks();
}
}