Skip to content

Commit b5e1e00

Browse files
committed
Add exceptions to task commands
Exceptions are missing index, invalid index, invalid command and incomplete command caused by missing task or task time.
1 parent 0035506 commit b5e1e00

File tree

6 files changed

+203
-97
lines changed

6 files changed

+203
-97
lines changed

src/main/java/Duke.java

Lines changed: 168 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -27,101 +27,100 @@ public void chatDuke() {
2727
boolean saidBye = false;
2828
while (!saidBye) {
2929
String command = sc.nextLine();
30-
if (command.equals("list")) {
31-
this.printCommandList(allTasks);
32-
} else if (command.startsWith("mark")) {
33-
String[] str = command.split(" ");
34-
int taskIndex = Integer.parseInt(str[1]) - 1;
35-
Task oldTask = allTasks.get(taskIndex);
36-
if (oldTask.getTaskType().equals("[T]")) {
37-
Todo todo = new Todo(oldTask.getTaskNumber(),
38-
true, oldTask.getTask(),
39-
allTasks.size());
40-
allTasks.set(taskIndex, todo);
41-
todo.markAsDone();
42-
} else if (oldTask.getTaskType().equals("[D]")) {
43-
Deadline deadline = new Deadline(oldTask.getTaskNumber(),
44-
true, oldTask.getTask(),
45-
oldTask.getDeadline(), allTasks.size());
46-
allTasks.set(taskIndex, deadline);
47-
deadline.markAsDone();
48-
} else if (oldTask.getTaskType().equals("[E]")) {
49-
Event event = new Event(oldTask.getTaskNumber(),
50-
true, oldTask.getTask(),
51-
oldTask.getEventStartTime(),
52-
oldTask.getEventEndTime(), allTasks.size());
53-
allTasks.set(taskIndex, event);
54-
event.markAsDone();
55-
} else {
56-
Task task = new Task(oldTask.getTaskNumber(),
57-
true, oldTask.getTask(),
58-
allTasks.size());
59-
allTasks.set(taskIndex, task);
60-
task.markAsDone();
61-
}
62-
} else if (command.startsWith("unmark")) {
63-
String[] str = command.split(" ");
64-
int taskIndex = Integer.parseInt(str[1]) - 1;
65-
Task oldTask = allTasks.get(taskIndex);
66-
if (oldTask.getTaskType().equals("[T]")) {
67-
Todo todo = new Todo(oldTask.getTaskNumber(),
68-
false, oldTask.getTask(),
69-
allTasks.size());
70-
allTasks.set(taskIndex, todo);
71-
todo.markAsDone();
72-
} else if (oldTask.getTaskType().equals("[D]")) {
73-
Deadline deadline = new Deadline(oldTask.getTaskNumber(),
74-
false, oldTask.getTask(),
75-
oldTask.getDeadline(), allTasks.size());
76-
allTasks.set(taskIndex, deadline);
77-
deadline.markAsDone();
78-
} else if (oldTask.getTaskType().equals("[E]")) {
79-
Event event = new Event(oldTask.getTaskNumber(),
80-
false, oldTask.getTask(),
81-
oldTask.getEventStartTime(),
82-
oldTask.getEventEndTime(), allTasks.size());
83-
allTasks.set(taskIndex, event);
84-
event.markAsDone();
30+
31+
try {
32+
if (command.equals("list")) {
33+
this.printCommandList(allTasks);
34+
} else if (command.startsWith("mark")) {
35+
missingIndexException(command);
36+
invalidIndexException(command, allTasks.size());
37+
String[] str = command.split(" ");
38+
int taskIndex = Integer.parseInt(str[1]) - 1;
39+
Task oldTask = allTasks.get(taskIndex);
40+
if (oldTask.getTaskType().equals("[T]")) {
41+
Todo todo = new Todo(oldTask.getTaskNumber(),
42+
true, oldTask.getTask(),
43+
allTasks.size());
44+
allTasks.set(taskIndex, todo);
45+
todo.markAsDone();
46+
} else if (oldTask.getTaskType().equals("[D]")) {
47+
Deadline deadline = new Deadline(oldTask.getTaskNumber(),
48+
true, oldTask.getTask(),
49+
oldTask.getDeadline(), allTasks.size());
50+
allTasks.set(taskIndex, deadline);
51+
deadline.markAsDone();
52+
} else if (oldTask.getTaskType().equals("[E]")) {
53+
Event event = new Event(oldTask.getTaskNumber(),
54+
true, oldTask.getTask(),
55+
oldTask.getEventStartTime(),
56+
oldTask.getEventEndTime(), allTasks.size());
57+
allTasks.set(taskIndex, event);
58+
event.markAsDone();
59+
}
60+
} else if (command.startsWith("unmark")) {
61+
missingIndexException(command);
62+
invalidIndexException(command, allTasks.size());
63+
String[] str = command.split(" ");
64+
int taskIndex = Integer.parseInt(str[1]) - 1;
65+
Task oldTask = allTasks.get(taskIndex);
66+
if (oldTask.getTaskType().equals("[T]")) {
67+
Todo todo = new Todo(oldTask.getTaskNumber(),
68+
false, oldTask.getTask(),
69+
allTasks.size());
70+
allTasks.set(taskIndex, todo);
71+
todo.unmarkAsUndone();
72+
} else if (oldTask.getTaskType().equals("[D]")) {
73+
Deadline deadline = new Deadline(oldTask.getTaskNumber(),
74+
false, oldTask.getTask(),
75+
oldTask.getDeadline(), allTasks.size());
76+
allTasks.set(taskIndex, deadline);
77+
deadline.unmarkAsUndone();
78+
} else if (oldTask.getTaskType().equals("[E]")) {
79+
Event event = new Event(oldTask.getTaskNumber(),
80+
false, oldTask.getTask(),
81+
oldTask.getEventStartTime(),
82+
oldTask.getEventEndTime(), allTasks.size());
83+
allTasks.set(taskIndex, event);
84+
event.unmarkAsUndone();
85+
}
86+
} else if (command.startsWith("todo")) {
87+
emptyCommandException(command);
88+
String[] str = command.split("todo");
89+
String taskName = str[1];
90+
Todo todo = new Todo(allTasks.size(), false,
91+
taskName, allTasks.size() + 1);
92+
allTasks.add(todo);
93+
todo.printToDoTask();
94+
} else if (command.startsWith("deadline")) {
95+
emptyCommandException(command);
96+
missingTimingException(command);
97+
String[] str = command.split("/by");
98+
String taskName = str[0].split("deadline")[1];
99+
String taskDeadline = str[1];
100+
Deadline deadline = new Deadline(allTasks.size(), false,
101+
taskName, taskDeadline, allTasks.size() + 1);
102+
allTasks.add(deadline);
103+
deadline.printDeadlineTask();
104+
} else if (command.startsWith("event")) {
105+
emptyCommandException(command);
106+
missingTimingException(command);
107+
String[] str = command.split("/from");
108+
String taskName = str[0].split("event")[1];
109+
String[] eventStartEndTime = str[1].split("/to");
110+
String eventStartTime = eventStartEndTime[0];
111+
String eventEndTime = eventStartEndTime[1];
112+
Event event = new Event(allTasks.size(), false,
113+
taskName, eventStartTime, eventEndTime, allTasks.size() + 1);
114+
allTasks.add(event);
115+
event.printEventTask();
116+
} else if (command.equals("bye")){
117+
saidBye = true;
118+
this.printByeMessage();
85119
} else {
86-
Task task = new Task(oldTask.getTaskNumber(),
87-
false, oldTask.getTask(),
88-
allTasks.size());
89-
allTasks.set(taskIndex, task);
90-
task.markAsDone();
120+
invalidCommandException(command);
91121
}
92-
} else if (command.startsWith("todo")) {
93-
String[] str = command.split("todo");
94-
String taskName = str[1];
95-
Todo todo = new Todo(allTasks.size(), false,
96-
taskName, allTasks.size() + 1);
97-
allTasks.add(todo);
98-
todo.printToDoTask();
99-
} else if (command.startsWith("deadline")) {
100-
String[] str = command.split("/by");
101-
String taskName = str[0].split("deadline")[1];
102-
String taskDeadline = str[1];
103-
Deadline deadline = new Deadline(allTasks.size(), false,
104-
taskName, taskDeadline, allTasks.size() + 1);
105-
allTasks.add(deadline);
106-
deadline.printDeadlineTask();
107-
} else if (command.startsWith("event")) {
108-
String[] str = command.split("/from");
109-
String taskName = str[0].split("event")[1];
110-
String[] eventStartEndTime = str[1].split("/to");
111-
String eventStartTime = eventStartEndTime[0];
112-
String eventEndTime = eventStartEndTime[1];
113-
Event event = new Event(allTasks.size(), false,
114-
taskName, eventStartTime, eventEndTime, allTasks.size() + 1);
115-
allTasks.add(event);
116-
event.printEventTask();
117-
} else if (!command.equals("bye")) {
118-
this.echoCommand(command);
119-
Task task = new Task(allTasks.size(), false,
120-
command, allTasks.size());
121-
allTasks.add(task);
122-
} else {
123-
saidBye = true;
124-
this.printByeMessage();
122+
} catch (DukeException d) {
123+
System.out.println(d.getMessage());
125124
}
126125
}
127126
}
@@ -166,4 +165,80 @@ public void printByeMessage() {
166165
"\n\t____________________________________________________________");
167166
}
168167

168+
public void emptyCommandException(String command) throws DukeException {
169+
switch (command) {
170+
case "todo":
171+
throw new DukeException("\t____________________________________________________________" +
172+
"\n\t ☹ OOPS!!! The description of a todo cannot be empty." +
173+
"\n\t____________________________________________________________");
174+
case "deadline":
175+
throw new DukeException("\t____________________________________________________________" +
176+
"\n\t ☹ OOPS!!! The description of a deadline cannot be empty." +
177+
"\n\t____________________________________________________________");
178+
case "event":
179+
throw new DukeException("\t____________________________________________________________" +
180+
"\n\t ☹ OOPS!!! The description of an event cannot be empty." +
181+
"\n\t____________________________________________________________");
182+
}
183+
}
184+
185+
public void missingTimingException(String command) throws DukeException {
186+
if (command.startsWith("deadline") && !command.contains("/by")) {
187+
throw new DukeException("\t____________________________________________________________" +
188+
"\n\t ☹ OOPS!!! The timing of a deadline cannot be empty." +
189+
"\n\t____________________________________________________________");
190+
} else if (command.startsWith("event") && !command.contains("/from")) {
191+
throw new DukeException("\t____________________________________________________________" +
192+
"\n\t ☹ OOPS!!! The start time of an event cannot be empty." +
193+
"\n\t____________________________________________________________");
194+
} else if (command.startsWith("event") && !command.contains("/to")) {
195+
throw new DukeException("\t____________________________________________________________" +
196+
"\n\t ☹ OOPS!!! The end time of an event cannot be empty." +
197+
"\n\t____________________________________________________________");
198+
}
199+
}
200+
201+
public void missingIndexException(String command) throws DukeException {
202+
if (command.equals("mark")) {
203+
throw new DukeException("\t____________________________________________________________" +
204+
"\n\t ☹ OOPS!!! The task index to mark a task as done cannot be empty." +
205+
"\n\t____________________________________________________________");
206+
} else if (command.equals("unmark")) {
207+
throw new DukeException("\t____________________________________________________________" +
208+
"\n\t ☹ OOPS!!! The task index to unmark a task as not done cannot be empty." +
209+
"\n\t____________________________________________________________");
210+
}
211+
}
212+
213+
public void invalidIndexException(String command, int taskSize) throws DukeException {
214+
if (command.startsWith("mark") || command.startsWith("unmark")) {
215+
String index = command.split(" ")[1];
216+
int index1 = Integer.parseInt(index);
217+
if (index1 <= 0) {
218+
throw new DukeException("\t____________________________________________________________" +
219+
"\n\t ☹ OOPS!!! The task index to mark a task as done cannot be zero or less." +
220+
"\n\t____________________________________________________________");
221+
} else if (index.equals("")) {
222+
throw new DukeException("\t____________________________________________________________" +
223+
"\n\t ☹ OOPS!!! The task index to mark a task as done cannot be empty." +
224+
"\n\t____________________________________________________________");
225+
} else if (index1 > taskSize) {
226+
throw new DukeException("\t____________________________________________________________" +
227+
"\n\t ☹ OOPS!!! The task index to mark a task as done cannot be more than" +
228+
" number of tasks." +
229+
"\n\t____________________________________________________________");
230+
}
231+
}
232+
}
233+
234+
public void invalidCommandException(String command) throws DukeException {
235+
if (!command.startsWith("event") || !(command.startsWith("deadline")) ||
236+
!command.startsWith("todo") || command.startsWith("mark") ||
237+
!command.startsWith("unmark")) {
238+
throw new DukeException("\t____________________________________________________________" +
239+
"\n\t ☹ OOPS!!! I'm sorry, but I don't know what that means :-(" +
240+
"\n\t____________________________________________________________");
241+
}
242+
}
243+
169244
}

src/main/java/DukeException.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class DukeException extends Exception {
2+
DukeException(String message) {
3+
super(message);
4+
}
5+
}

text-ui-test/EXPECTED.TXT

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,25 @@ Hello from
55
| |_| | |_| | < __/
66
|____/ \__,_|_|\_\___|
77

8+
____________________________________________________________
9+
Got it. I've added this task:
10+
[T][ ] borrow book
11+
Now you have 1 tasks in the list.
12+
____________________________________________________________
13+
14+
____________________________________________________________
15+
Here are the tasks in your list:
16+
1.[T][ ] borrow book
17+
____________________________________________________________
18+
19+
____________________________________________________________
20+
Got it. I've added this task:
21+
[D][ ] return book (by: Sunday)
22+
Now you have 2 tasks in the list.
23+
____________________________________________________________
24+
25+
____________________________________________________________
26+
Got it. I've added this task:
27+
[E][ ] project meeting (from: Mon 2pm to: 4pm)
28+
Now you have 3 tasks in the list.
29+
____________________________________________________________

text-ui-test/input.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
todo borrow book
2+
list
3+
deadline return book /by Sunday
4+
event project meeting /from Mon 2pm /to 4pm

text-ui-test/runtest.bat

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ REM delete output from previous run
77
if exist ACTUAL.TXT del ACTUAL.TXT
88

99
REM compile the code into the bin folder
10-
javac -cp ..\src\main\java -Xlint:none -d ..\bin ..\src\main\java\*.java
10+
javac -cp \Users\leyaozhu\Documents\NUS\CS2103\ip\src\main\java -Xlint:none -d ..\bin ..\src\main\java\*.java
1111
IF ERRORLEVEL 1 (
1212
echo ********** BUILD FAILURE **********
1313
exit /b 1
1414
)
1515
REM no error here, errorlevel == 0
1616

1717
REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT
18-
java -classpath ..\bin Duke < input.txt > ACTUAL.TXT
18+
java -classpath \Users\leyaozhu\Documents\NUS\CS2103\ip\src\main\bin Duke < input.txt > ACTUAL.TXT
1919

2020
REM compare the output to the expected output
2121
FC ACTUAL.TXT EXPECTED.TXT

text-ui-test/runtest.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ then
1313
fi
1414

1515
# compile the code into the bin folder, terminates if error occurred
16-
if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java
16+
if ! javac -cp /Users/leyaozhu/Documents/NUS/CS2103/ip/src/main/java -Xlint:none -d /Users/leyaozhu/Documents/NUS/CS2103/ip/bin /Users/leyaozhu/Documents/NUS/CS2103/ip/src/main/java/*.java
1717
then
1818
echo "********** BUILD FAILURE **********"
1919
exit 1
2020
fi
2121

2222
# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT
23-
java -classpath ../bin Duke < input.txt > ACTUAL.TXT
23+
java -classpath /Users/leyaozhu/Documents/NUS/CS2103/ip/src/bin Duke < input.txt > ACTUAL.TXT
2424

2525
# convert to UNIX format
2626
cp EXPECTED.TXT EXPECTED-UNIX.TXT

0 commit comments

Comments
 (0)