Skip to content

Commit 5d6c844

Browse files
authored
Merge pull request #2 from Shizheng001/Jar
OOP and Jar
2 parents 6663e80 + 5c10cf2 commit 5d6c844

14 files changed

Lines changed: 439 additions & 144 deletions

File tree

src/main/java/Deadline.java

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/main/java/Duke.java

Lines changed: 62 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,75 @@
1-
import java.util.Scanner;
2-
import java.util.ArrayList;
1+
import Duke.*;
2+
import DukeException.DukeException;
3+
import Parser.Parser;
4+
import Storage.Storage;
5+
import Ui.Ui;
6+
37

48
public class Duke {
9+
public static final String LOG_PATH = "./duke.txt";
10+
private Storage storage;
11+
private TaskList tasks;
12+
private Ui ui;
513

6-
/**
7-
* main method to run the program
8-
*
9-
* @param args command line arguments taken in
10-
*/
11-
public static void main(String[] args) {
12-
Scanner sc = new Scanner(System.in);
13-
System.out.println("Hello! I'm Duke\n"+ "What can I do for you?");
14-
ArrayList<Task> items = new ArrayList<>();
14+
public Duke(String filepath) {
15+
this.storage = new Storage(filepath);
16+
this.tasks = new TaskList(this.storage);
17+
this.ui = new Ui();
18+
}
1519

16-
while (true) {
17-
String input = sc.nextLine();
18-
try {
19-
errorHandling(input);
20-
if (input.equals("bye")) {
21-
bye();
22-
break;
23-
} else if (input.contains("done")) {
24-
System.out.println("Nice! I've marked this task as done: ");
20+
public static void main(String[] args) throws DukeException {
21+
try {
22+
new Duke(LOG_PATH).run();
23+
} catch (DukeException e) {
24+
throw new DukeException("unable to load file, probably wrong format.");
25+
}
26+
}
2527

26-
int taskNum = Integer.parseInt(input.substring(5));
27-
String name = items.get(taskNum - 1).getDescription();
28+
private void process(Parser p) {
2829

29-
Task type = items.get(taskNum - 1);
30-
items.remove(taskNum - 1);
31-
if (type instanceof Todo) {
32-
Todo markDone = new Todo(name, true);
33-
items.add(taskNum - 1, markDone);
34-
System.out.println(markDone);
35-
} else if (type instanceof Deadline) {
36-
Deadline markDone = new Deadline(name, true);
37-
items.add(taskNum - 1, markDone);
38-
System.out.println(markDone);
39-
} else {
40-
Event markDone = new Event(name, true);
41-
items.add(taskNum - 1, markDone);
42-
System.out.println(markDone);
43-
}
30+
switch (p.getCommand()) {
31+
case "delete":
32+
this.tasks.remove(p.getTaskNum());
33+
ui.printTaskRemovedMessage((p.getTaskNum()));
34+
break;
35+
case "done":
36+
Task done = this.tasks.get(p.getTaskNum());
37+
done.markDone();
38+
this.tasks.set(p.getTaskNum(), done);
39+
ui.printDoneMessage((done));
40+
break;
41+
case "add":
42+
this.tasks.add(p.getTask());
43+
ui.printTaskAddedMessage(p.getTask(), this.tasks.getSize());
44+
break;
45+
case "set":
46+
this.tasks.set(p.getTaskNum(), p.getTask());
47+
break;
48+
case "list":
49+
ui.printList(this.tasks);
50+
break;
51+
default:
52+
}
53+
}
4454

45-
} else if (input.equals("list")) {
46-
int n = 1;
47-
System.out.println("Here are the tasks in your list:");
48-
for (Task item : items) {
49-
System.out.println(n + ". " + item);
50-
n++;
51-
}
55+
public void run() throws DukeException {
56+
Ui.printGreeting();
5257

53-
} else if (input.length() >= 8 && input.substring(0,8).equals("deadline")) {
54-
items.add(new Deadline(input.substring(8)));
55-
} else if (input.length() >= 4 && input.substring(0,4).equals("todo")) {
56-
items.add(new Todo(input.substring(4)));
57-
} else if (input.length() >= 5 && input.substring(0,5).equals("event")) {
58-
items.add(new Event(input.substring(5)));
59-
} else if (input.length() >= 6 && input.substring(0,6).equals("delete")) {
60-
int taskToDelete = Integer.parseInt(input.substring(7));
61-
Task toRemove = items.get(taskToDelete - 1);
62-
items.remove(taskToDelete - 1);
63-
System.out.println("Noted. I've removed this task:\n "
64-
+ toRemove + "\nNow you have " + items.size() + " tasks in the list.");
58+
while (true) {
59+
String userInput = ui.getUserInput();
60+
Parser p;
6561

66-
} else {
67-
items.add(new Task(input));
68-
}
69-
} catch (Exception e) {
70-
System.out.println(e);
62+
try {
63+
p = Parser.parse(userInput);
64+
} catch (DukeException e) {
65+
System.out.println(e.getMessage());
66+
continue;
7167
}
68+
if (p.getCommand().equals("bye")) {
69+
break;
70+
}
71+
this.process(p);
7272
}
73-
}
74-
75-
/**
76-
* prints Goodbye message.
77-
*/
78-
public static void bye() {
79-
System.out.println("Bye. Hope to see you again soon!");
80-
}
81-
82-
public static void errorHandling(String input) throws DukeException {
83-
if (input.length() == 4 && input.equals("todo")) {
84-
throw new DukeException(" ☹ OOPS!!! The description of a todo cannot be empty.");
85-
} else if (input.length() == 8 && input.equals("deadline")) {
86-
throw new DukeException(" ☹ OOPS!!! The description of a deadline cannot be empty.");
87-
} else if (input.length() == 5 && input.equals("event")) {
88-
throw new DukeException(" ☹ OOPS!!! The description of a event cannot be empty.");
89-
} else if (input.length() >= 4 && input.substring(0,4).equals("blah")) {
90-
throw new DukeException("☹ OOPS!!! I'm sorry, but I don't know what that means :-(");
91-
} else if (input.isBlank()) {
92-
throw new DukeException(" ☹ OOPS!!! A Task cannot be empty.");
93-
} else {}
73+
Ui.printGoodbye();
9474
}
9575
}

src/main/java/Duke/Deadline.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package Duke;
2+
3+
import java.time.LocalDate;
4+
import java.time.format.DateTimeFormatter;
5+
6+
public class Deadline extends Task {
7+
private final LocalDate deadLine;
8+
9+
public Deadline(String description, String deadLine) {
10+
super(description);
11+
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-M-dd");
12+
this.deadLine = LocalDate.parse(deadLine.trim(), formatter);
13+
}
14+
15+
@Override
16+
public String encode() {
17+
return "D|" + super.encode() + " | " + this.deadLine.format(DateTimeFormatter.ofPattern("yyyy-M-dd"));
18+
}
19+
20+
@Override
21+
public String toString() {
22+
return "[D]" + super.toString() + " | " + " (by: " + this.deadLine.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + ")";
23+
}
24+
25+
}

src/main/java/Duke/Event.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package Duke;
2+
3+
import java.time.LocalDate;
4+
import java.time.format.DateTimeFormatter;
5+
6+
public class Event extends Task {
7+
private LocalDate eventTime;
8+
private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-M-dd");
9+
10+
public Event(String description, String eventTime) {
11+
super(description);
12+
this.eventTime = LocalDate.parse(eventTime.trim(), formatter);
13+
}
14+
@Override
15+
public String encode() {
16+
return "E|" + super.encode() + " | " + this.eventTime.format(DateTimeFormatter.ofPattern("yyyy-M-dd"));
17+
}
18+
19+
@Override
20+
public String toString() {
21+
return "[E]" + super.toString() + " (at: " + this.eventTime.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + ")";
22+
}
23+
}
24+
25+

src/main/java/Duke/Task.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package Duke;
2+
3+
public class Task {
4+
protected String description;
5+
protected boolean isDone;
6+
protected String dateTime;
7+
8+
public Task(String description) {
9+
this.description = description;
10+
this.isDone = false;
11+
}
12+
13+
public Task(String description, String dateTime) {
14+
this.description = description;
15+
this.dateTime = dateTime;
16+
}
17+
18+
public void markDone() {
19+
this.isDone = true;
20+
}
21+
public String getDoneStatus() {
22+
return (isDone ? "X" : " ");
23+
}
24+
25+
public String getDescription() {
26+
return this.description;
27+
}
28+
29+
public String encode() {
30+
if (isDone) {
31+
return "X|" + this.description ;
32+
} else {
33+
return " |" + this.description ;
34+
}
35+
}
36+
37+
public String toString() {
38+
return "[" + getDoneStatus() + "]" + getDescription();
39+
40+
}
41+
}

src/main/java/Duke/TaskList.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package Duke;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import Storage.Storage;
6+
7+
public class TaskList {
8+
private final Storage storage;
9+
private final List<Task> tasks;
10+
private int numOfTasks;
11+
12+
public TaskList(Storage storage) {
13+
this.storage = storage;
14+
this.tasks = new ArrayList<>();
15+
ArrayList<String> storedData = this.storage.load();
16+
for (String s : storedData) {
17+
this.tasks.add(loadData(s));
18+
}
19+
this.numOfTasks = this.tasks.size();
20+
}
21+
22+
private Task loadData(String data) {
23+
String[] dataArray = data.split("\\|");
24+
25+
//System.out.println(dataArray.length + " " + dataArray[0] + dataArray[1]);
26+
27+
Task task;
28+
29+
if (dataArray[0].equals("T")) {
30+
task = new Todo(dataArray[2]);
31+
} else if (dataArray[0].equals("D")) {
32+
task = new Deadline(dataArray[2], dataArray[3]);
33+
} else {
34+
task = new Event(dataArray[2], dataArray[3]);
35+
}
36+
if (dataArray[1].contains("X")) {
37+
task.markDone();
38+
}
39+
40+
return task;
41+
}
42+
43+
public Task get(int taskNumber) {
44+
return this.tasks.get(taskNumber - 1);
45+
}
46+
47+
public void add(Task task) {
48+
this.storage.add(task);
49+
this.tasks.add(task);
50+
this.numOfTasks = this.tasks.size();
51+
}
52+
public void remove(int index) {
53+
this.storage.remove(index);
54+
this.tasks.remove(index - 1);
55+
this.numOfTasks = this.tasks.size();
56+
}
57+
58+
public void set(int index, Task task) {
59+
this.storage.set(index, task);
60+
this.tasks.set(index - 1, task);
61+
}
62+
63+
public int getSize() {
64+
return this.numOfTasks;
65+
}
66+
67+
}
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1+
package Duke;
2+
3+
import java.time.format.DateTimeFormatter;
4+
15
public class Todo extends Task {
6+
27
public Todo(String description) {
38
super(description);
49
}
510

6-
public Todo(String description, boolean b) {
7-
super(description, b);
11+
@Override
12+
public String encode() {
13+
return "T|" + super.encode();
814
}
9-
15+
@Override
1016
public String toString() {
1117
return "[T]" + super.toString();
1218
}

src/main/java/DukeException.java renamed to src/main/java/DukeException/DukeException.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package DukeException;
2+
13
public class DukeException extends Exception {
24

35
public DukeException(String e) {

src/main/java/Event.java

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/main/java/META-INF/MANIFEST.MF

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Manifest-Version: 1.0
2+
Main-Class: Duke
3+

0 commit comments

Comments
 (0)