forked from nus-cs2103-AY2122S1/ip
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TaskCollection.java
130 lines (112 loc) · 3.85 KB
/
TaskCollection.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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package duke.task;
import java.util.ArrayList;
import java.util.List;
import duke.Storage;
/**
* duke.task.TaskCollection represents the collection of tasks stored in the Duke application.
*/
public class TaskCollection {
private List<Task> tasks = new ArrayList<>();
private final Storage storage;
/**
* Creates a duke.task.TaskCollection that consists of a duke.Storage file at the specified pathname.
* @param pathname Pathname of the duke.Storage file
*/
public TaskCollection(String pathname) {
this.storage = new Storage(pathname);
this.tasks = this.getTasks();
}
/**
* Saves the List of Tasks into the duke.task.TaskCollection's duke.Storage file.
*/
public void saveTasks() {
StringBuilder taskCollectionString = new StringBuilder();
for (int index = 0; index < this.tasks.size(); index++) {
if (index > 0) {
taskCollectionString.append(System.lineSeparator());
}
taskCollectionString.append(this.tasks.get(index).toStorageString());
}
this.storage.write(taskCollectionString.toString());
}
/**
* Retrieves a List of all the Tasks saved.
* @return List of all Tasks.
*/
private List<Task> getTasks() {
String storageContents = this.storage.read();
return this.parse(storageContents);
}
/**
* Gets a List of Tasks that matches the given regex String.
* @param regex The regex String to match with
* @return The List of matching Tasks
*/
public List<Task> findTasks(String regex) {
List<Task> matchedTasks = new ArrayList<>();
for (Task task : this.tasks) {
if (task.descriptionMatches(regex)) {
matchedTasks.add(task);
}
}
return matchedTasks;
}
/**
* Parse a String of Tasks into a List.
* @param string The input String of Tasks
* @return The List of Tasks
*/
private List<Task> parse(String string) {
if (string == null) {
return new ArrayList<>();
}
String[] taskStrings = string.split(System.lineSeparator());
List<Task> taskList = new ArrayList<>();
for (String taskString : taskStrings) {
Task task = Task.fromStorageString(taskString);
taskList.add(task);
}
return taskList;
}
/**
* Adds a task to the duke.task.TaskCollection.
* @param task The task to be added.
*/
public void add(Task task) {
this.tasks.add(task);
}
/**
* Gets a task from the duke.task.TaskCollection.
* @param identifier The duke.task.Task's identifier.
*/
public Task get(int identifier) {
return this.tasks.get(identifier - 1);
}
/**
* Get the number of Tasks in the duke.task.TaskCollection.
* @return The size of the duke.task.TaskCollection.
*/
public Task delete(int identifier) {
Task deletedTask = this.tasks.remove(identifier - 1);
return deletedTask;
}
/**
* Get the number of Tasks in the duke.task.TaskCollection.
* @return The size of the duke.task.TaskCollection.
*/
public int size() {
return this.tasks.size();
}
/**
* Converts the duke.task.TaskCollection to its String representation.
* @return The String representation of the duke.task.TaskCollection.
*/
@Override
public String toString() {
String[] lines = new String[this.tasks.size()];
for (int index = 0; index < this.tasks.size(); index++) {
lines[index] = String.format("%d.%s", index + 1, this.tasks.get(index).toString());
}
return String.join(System.lineSeparator(), lines);
}
}