Skip to content

Commit

Permalink
Merge branch 'branch-Level-7'
Browse files Browse the repository at this point in the history
# Conflicts:
#	src/main/java/Duke.java
  • Loading branch information
shannentan committed Mar 3, 2023
2 parents dfed5a4 + 099340f commit 8a73912
Show file tree
Hide file tree
Showing 8 changed files with 226 additions and 74 deletions.
8 changes: 6 additions & 2 deletions src/main/java/Deadline.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
public class Deadline extends Task {

protected String by;
protected String opening = "...\n" + "Got it. I've added this deadline:\n" + " [D][ ] ";

public Deadline(String description, String by) {
super(description);
this.by = by;
System.out.println(opening + description + "(by: " + by + ")");
}

@Override
public String toString() {
return ("[D]" + super.toString() + " (by: " + by + ")");
}

@Override
public String toSerialisedString() {
String isDoneStr = isDone ? "1" : "0";
return ("D|" + isDoneStr +"|" + description + "|" + by);
}
}
239 changes: 172 additions & 67 deletions src/main/java/Duke.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,47 @@
import exceptions.DukeException;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

import static messages.ErrorMessages.invalidCommandMessage;
import static messages.ErrorMessages.invalidIndexErrorMessage;
import static messages.ErrorMessages.missingInfoErrorMessage;
import static messages.newTaskMessages.createNewDeadlineMessage;
import static messages.newTaskMessages.createNewEventMessage;
import static messages.newTaskMessages.createNewTodoMessage;
import static messages.operationalMessages.openingMessage;
import static messages.operationalMessages.closingMessage;
import static messages.operationalMessages.markTaskMessage;
import static messages.operationalMessages.unmarkTaskMessage;
import static messages.operationalMessages.removeTaskMessage;

public class Duke {
static String openingMessage = "Hello, I'm Duke!\n" + "What would you like to do today?";

static String closingMessage = "Bye! Have a nice day:D";
public static void main(String[] args) throws IOException {
ArrayList<Task> items = new ArrayList<>();

static String invalidIndexErrorMessage = "Please input a valid index!";
File f = new File("data/Duke.txt");
if (f.exists()) {
Scanner scan = new Scanner(f);
while (scan.hasNext()) {
String taskLine = scan.nextLine();
String[] taskArgs = taskLine.split("\\|");
if (taskArgs[0].equals("T")) {
items.add(loadNewTodo(taskArgs[1].trim(), taskArgs[2].trim()));
} else if (taskArgs[0].equals("D")) {
items.add(loadNewEvent(taskArgs[1].trim(), taskArgs[2].trim(), taskArgs[3].trim(), taskArgs[4].trim()));
} else {
taskArgs[0] = "E";
items.add(loadNewDeadline(taskArgs[1].trim(), taskArgs[2].trim(), taskArgs[3].trim()));
}
}
}

public static void main(String[] args) {
System.out.println(openingMessage);
Scanner response = new Scanner(System.in);
int counter = 0;
ArrayList<Task> items = new ArrayList<Task>();
String line = "";

while (!(line.equals("bye"))) {
Expand All @@ -25,79 +52,157 @@ public static void main(String[] args) {
break;
}
if (line.equals("list")) {
System.out.println("...\n" + "Here are the tasks in your list:");
for (int i = 0; i < counter; i++) {
System.out.println((i + 1) + "." + items.get(i));
}
displayList(items);
continue;
}
String arguments = lines[1];
String missingInfoErrorMessage = "There's missing information. What would you like to do today?";

if (command.equals("mark")) {
try {
int index = Integer.parseInt(arguments) - 1;
items.get(index).isDone = true;
System.out.println("...\n" + "Nice! I've marked this task as done:\n" + items.get(index));
} catch (NumberFormatException e) {
System.out.println(invalidIndexErrorMessage);
}
markTask(items, arguments);
} else if (command.equals("unmark")) {
try {
int index = Integer.parseInt(arguments) - 1;
items.get(index).isDone = false;
System.out.println("...\n" + "OK, I've marked this task as not done yet:\n" + items.get(index));
} catch (NumberFormatException e) {
System.out.println(invalidIndexErrorMessage);
}
unmarkTask(items, arguments);
} else if (command.equals("todo")) {
Todo newTodo = new Todo(arguments);
items.add(newTodo);
counter++;
addNewTodo(items, arguments);
} else if (command.equals("event")) {
try {
String[] eventInfo = arguments.split("/from ");
if (eventInfo.length < 2) {
throw new DukeException(missingInfoErrorMessage);
}
String[] eventDuration = eventInfo[1].split("/to ");
if (eventDuration.length < 2) {
throw new DukeException(missingInfoErrorMessage);
}
Event newEvent = new Event(eventInfo[0], eventDuration[0], eventDuration[1]);
items.add(newEvent);
counter++;
} catch (IndexOutOfBoundsException e) {
System.out.println(missingInfoErrorMessage);
} catch (DukeException e) {
System.out.println(e.getMessage());
}
addNewEvent(items, arguments);
} else if (command.equals("deadline")) {
try {
String[] deadlineInfo = arguments.split("/by ");
if (deadlineInfo.length < 2) {
throw new DukeException(missingInfoErrorMessage);
}
Deadline newDeadline = new Deadline(deadlineInfo[0], deadlineInfo[1]);
items.add(newDeadline);
counter++;
} catch (IndexOutOfBoundsException e) {
System.out.println(missingInfoErrorMessage);
} catch (DukeException e) {
System.out.println(e.getMessage());
}
addNewDeadline(items, arguments);
} else if (command.equals("remove")) {
try {
int index = Integer.parseInt(arguments) - 1;
items.remove(index);
counter--;
System.out.println("Okay, I've removed task " + (index + 1));
} catch (NumberFormatException e) {
System.out.println(invalidIndexErrorMessage);
}
removeTask(items, arguments);
} else {
System.out.println("Sorry, I don't understand that.");
System.out.println(invalidCommandMessage);
continue;
}
writeToFile(items);
}
System.out.println(closingMessage);
}

public static void writeToFile(ArrayList<Task> items) throws IOException {
FileWriter fw = new FileWriter("data/Duke.txt");
StringBuilder sb = new StringBuilder();
for (Task item : items) {
String newSerialisedTask = item.toSerialisedString();
sb.append(newSerialisedTask).append("\n");
}
String serialString = sb.toString();
fw.write(serialString);
fw.close();
}

public static void displayList(ArrayList<Task> items) {
System.out.println("...\n" + "Here are the tasks in your list:");
for (int i = 0; i < items.size(); i++) {
System.out.println((i + 1) + "." + items.get(i));
}
}

public static void markTask(ArrayList<Task> items, String arguments) {
try {
int index = Integer.parseInt(arguments) - 1;
items.get(index).isDone = true;
System.out.println(markTaskMessage + items.get(index));
} catch (NumberFormatException e) {
System.out.println(invalidIndexErrorMessage);
}
}

public static void unmarkTask(ArrayList<Task> items, String arguments) {
try {
int index = Integer.parseInt(arguments) - 1;
items.get(index).isDone = false;
System.out.println(unmarkTaskMessage + items.get(index));
} catch (NumberFormatException e) {
System.out.println(invalidIndexErrorMessage);
}
}

public static void removeTask(ArrayList<Task> items, String arguments) {
try {
int index = Integer.parseInt(arguments) - 1;
items.remove(index);
System.out.println(removeTaskMessage + (index + 1));
} catch (NumberFormatException e) {
System.out.println(invalidIndexErrorMessage);
}
}

public static Task createNewTodo(String arguments) {
System.out.println(createNewTodoMessage + arguments);
return new Todo(arguments);
}

public static void addNewTodo(ArrayList<Task> items, String arguments) {
Task newTask = createNewTodo(arguments);
items.add(newTask);
}

public static Task loadNewTodo(String isDoneString, String description) {
Todo readTodo = new Todo(description);
if (isDoneString.equals("1")) {
readTodo.isDone = true;
}
return readTodo;
}

public static Task createNewEvent(String arguments) throws DukeException {
try {
String[] eventInfo = arguments.split("/from ");
if (eventInfo.length < 2) {
throw new DukeException(missingInfoErrorMessage);
}
String[] eventDuration = eventInfo[1].split("/to ");
if (eventDuration.length < 2) {
throw new DukeException(missingInfoErrorMessage);
}
System.out.println(createNewEventMessage + eventInfo[0] + "(from: " + eventDuration[0] + " to: " + eventDuration[1] + ")");
return new Event(eventInfo[0], eventDuration[0], eventDuration[1]);

} catch (IndexOutOfBoundsException e) {
throw new DukeException(missingInfoErrorMessage);
}
}

public static void addNewEvent(ArrayList<Task> items, String arguments) {
try {
Task newEvent = createNewEvent(arguments);
items.add(newEvent);
} catch (DukeException e) {
System.out.println(e.getMessage());
}
}

public static Task loadNewEvent(String isDoneString, String description, String start, String end) {
Event readEvent = new Event(description, start, end);
if (isDoneString.equals("1")) {
readEvent.isDone = true;
}
return readEvent;
}

public static Task createNewDeadline(String arguments) throws DukeException {
String[] deadlineInfo = arguments.split("/by ");
if (deadlineInfo.length < 2) {
throw new DukeException(missingInfoErrorMessage);
}
System.out.println(createNewDeadlineMessage + deadlineInfo[0] + "(by: " + deadlineInfo[1] + ")");
return new Deadline(deadlineInfo[0], deadlineInfo[1]);
}

public static void addNewDeadline(ArrayList<Task> items, String arguments) {
try {
Task newDeadline = createNewDeadline(arguments);
items.add(newDeadline);
} catch (DukeException e) {
System.out.println(e.getMessage());
}
}

public static Task loadNewDeadline(String isDoneString, String description, String by) {
Deadline readDeadline = new Deadline(description, by);
if (isDoneString.equals("1")) {
readDeadline.isDone = true;
}
return readDeadline;
}
}
8 changes: 6 additions & 2 deletions src/main/java/Event.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
public class Event extends Task {
protected String start;
protected String end;
protected String opening = "...\n" + "Got it. I've added this event:\n" + " [E][ ] ";

public Event(String description, String start, String end) {
super(description);
this.start = start;
this.end = end;
System.out.println(opening + description + "(from: " + start + " to: " + end + ")");
}

@Override
public String toString() {
return ("[E]" + super.toString() + " (from: " + start + " to: " + end + ")");
}

@Override
public String toSerialisedString() {
String isDoneStr = isDone ? "1" : "0";
return ("E|" + isDoneStr + "|" + description + "|" + start + "|" + end);
}
}
4 changes: 3 additions & 1 deletion src/main/java/Task.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
public class Task {
public abstract class Task {
protected String description;
protected boolean isDone;

Expand All @@ -11,6 +11,8 @@ public String getStatusIcon() {
return (isDone ? "x" : " ");
}

public abstract String toSerialisedString();

public String toString() {
return ("[" + this.getStatusIcon() + "] " + description);
}
Expand Down
8 changes: 6 additions & 2 deletions src/main/java/Todo.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
public class Todo extends Task {
protected String opening = "...\n" + "Got it. I've added this task:\n" + " [T][ ] ";

public Todo(String description) {
super(description);
System.out.println(opening + description);
}

@Override
public String toString() {
return ("[T]" + super.toString());
}

@Override
public String toSerialisedString() {
String isDoneStr = isDone ? "1" : "0";
return ("T|" + isDoneStr +"|" + description);
}
}
10 changes: 10 additions & 0 deletions src/main/java/messages/ErrorMessages.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package messages;

public class ErrorMessages {
public static final String invalidIndexErrorMessage = "...\n" + "Please input a valid index!";

public static final String missingInfoErrorMessage = "...\n"
+ "There's missing information. What would you like to do today?";

public static final String invalidCommandMessage = "...\n" + "Sorry, I don't understand that.";
}
9 changes: 9 additions & 0 deletions src/main/java/messages/newTaskMessages.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package messages;

public class newTaskMessages {
public static final String createNewTodoMessage = "...\n" + "Got it. I've added this task:\n" + " [T][ ] ";

public static final String createNewEventMessage = "...\n" + "Got it. I've added this event:\n" + " [E][ ] ";

public static final String createNewDeadlineMessage = "...\n" + "Got it. I've added this deadline:\n" + " [D][ ] ";
}
14 changes: 14 additions & 0 deletions src/main/java/messages/operationalMessages.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package messages;

public class operationalMessages {
public static final String openingMessage = "...\n" + "Hello, I'm Duke!\n" + "What would you like to do today?";

public static final String closingMessage = "...\n" + "Bye! Have a nice day:D";

public static final String markTaskMessage = "...\n" + "Nice! I've marked this task as done:\n";

public static final String unmarkTaskMessage = "...\n" + "OK, I've marked this task as not done yet:\n";

public static final String removeTaskMessage = "...\n" + "Okay, I've removed task ";

}

0 comments on commit 8a73912

Please sign in to comment.