From d2a5f97e25ae99eb9701959413b7df838b28fab3 Mon Sep 17 00:00:00 2001 From: Chang Ji-xuan Date: Wed, 6 Sep 2023 23:21:51 +0800 Subject: [PATCH] Level 8 - deadline tasks now take in deadlines in YYYY/MM/DD format --- src/main/java/Deadline.java | 16 +++++++++++----- src/main/java/Duke.java | 34 +++++++++++++++++++++++----------- src/main/java/TaskReader.java | 3 ++- 3 files changed, 36 insertions(+), 17 deletions(-) diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index adfa8adfae..1ead9cc331 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -1,22 +1,28 @@ +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; public class Deadline extends Tasks { - private String deadline; + private LocalDate deadline; - public Deadline(String name, boolean isMarked, String deadline) { + + + public Deadline(String name, boolean isMarked, LocalDate deadline) { super(name, isMarked); this.deadline = deadline; } - public String getDeadline() { + + + public LocalDate getDeadline() { return deadline; } - public void setDeadline(String deadline) { + public void setDeadline(LocalDate deadline) { this.deadline = deadline; } @Override public String toString() { String status = isMarked ? "[X]" : "[ ]"; - return "[D]" + status + " " + name + " (by: " + deadline + ")"; + return "[D]" + status + " " + name + " (by: " + deadline.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + ")"; } } diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 4c16b7760a..df8baa7958 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,6 +1,10 @@ import java.util.Scanner; import java.util.ArrayList; import java.io.File; +import java.util.regex.Pattern; +import java.util.regex.Matcher; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; @@ -13,7 +17,7 @@ public class Duke { public static void main(String[] args) { String name = "Johnnythesnake"; - System.out.println("Hello I'm " + name + "\n" + "What can I do for you?"); + System.out.println("Hello I'm " + name + "\n" + "What can I do for you? Aside from completing your CS2103 project for you"); Scanner scanner = new Scanner(System.in); String filename = "tasks.txt"; // Create a File object with the filename @@ -25,7 +29,7 @@ public static void main(String[] args) { System.out.println(tasksList); } while (true) { - System.out.print("Enter a command: "); + System.out.println("Enter a command: "); String command = scanner.nextLine(); if (command.equalsIgnoreCase("bye")) { // bye exits the code Exit exit = new Exit(); @@ -76,6 +80,7 @@ public static void main(String[] args) { } else if (command.startsWith("deadline")) { // Split the input String descriptionDeadline = command.substring(8).trim(); // Remove "deadline" and leading spaces + if (descriptionDeadline.isEmpty()) { try { throw new EmptyDeadlineException(); @@ -88,18 +93,25 @@ public static void main(String[] args) { if (separatorIndex != -1) { // Ensure the separator exists in the input // Extract the task description and deadline + String description = descriptionDeadline.substring(0, separatorIndex).trim(); String deadline = descriptionDeadline.substring(separatorIndex + 4).trim(); - - // Create a new Deadline object - Deadline deadlineTask = new Deadline(description, false, deadline); - tasksList.add(deadlineTask); - - System.out.println("Got it. I've added this deadline:"); - System.out.println(" " + deadlineTask); - System.out.println("Now you have " + tasksList.size() + " tasks in the list."); + String pattern = "\\d{4}/\\d{2}/\\d{2}"; + Pattern datePattern = Pattern.compile(pattern); + Matcher matcher = datePattern.matcher(deadline); + if (matcher.find()) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + LocalDate localDateDeadline = LocalDate.parse(deadline, formatter); + Deadline deadlineTask = new Deadline(description,false, localDateDeadline); + tasksList.add(deadlineTask); + System.out.println("Got it. I've added this deadline:"); + System.out.println(" " + deadlineTask); + System.out.println("Now you have " + tasksList.size() + " tasks in the list."); + } else { + System.out.println("Please input your deadline in YYYY/MM/DD format"); + } } else { - System.out.println("Invalid input format for deadline command."); + System.out.println("Invalid input format for deadline. Please input in the following format: /by "); } } } else if (command.startsWith("event")) { diff --git a/src/main/java/TaskReader.java b/src/main/java/TaskReader.java index 554cc7ce0a..fb1a77e1a0 100644 --- a/src/main/java/TaskReader.java +++ b/src/main/java/TaskReader.java @@ -2,6 +2,7 @@ import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; +import java.time.LocalDate; public class TaskReader { public static ArrayList readTasksFromFile(String filename) { @@ -32,7 +33,7 @@ private static Tasks parseTaskFromLine(String line) { // Parse Deadline task String description = line.substring(6, line.indexOf("(by:")).trim(); boolean isMarked = line.charAt(4) == 'X'; - String deadline = extractDeadline(line); + LocalDate deadline = LocalDate.parse(extractDeadline(line)); return new Deadline(description, isMarked, deadline); } else if (line.startsWith("[E]")) { // Parse Event task