From d7bfa00e7693446388e9c651245eb30831108446 Mon Sep 17 00:00:00 2001 From: Eugene Chan Date: Sat, 30 Mar 2024 15:35:20 +0800 Subject: [PATCH 1/4] Shortened methods to make it more readable --- omni.txt | 17 +-- src/main/java/seedu/duke/Duke.java | 165 ++++++++++--------------- src/main/java/seedu/duke/FileSave.java | 59 +++------ src/main/java/seedu/duke/Parser.java | 110 +++++++---------- src/main/java/seedu/duke/Ui.java | 2 + 5 files changed, 130 insertions(+), 223 deletions(-) diff --git a/omni.txt b/omni.txt index 64a475eaad..978dd57540 100644 --- a/omni.txt +++ b/omni.txt @@ -1,13 +1,4 @@ -accommodation / 1 / nus rvrc / 2007-12-12 / 5 years / campus stay -accommodation / 0 / nus pgpr / 2017-10-12 / 5 years / campus stay -accommodation / 0 / nus utr / 2007-09-12 / 5 years / campus stay -landmark / 0 / berlin wall / 2009-12-15 / 5 hours / historic site -landmark / 0 / utown / 2016-08-14 / 10 hours / recreational centre -landmark / 0 / supper stretch / 2021-08-18 / 2 hours / tourist hotspot -food / 0 / utown mala / 2019-06-19 / 2 hours / spicy -food / 0 / pgpr mala / 2012-07-07 / 1 hours / spicy -food / 0 / pgpr waffle / 2006-03-09 / 0.5 hours / non-spicy -general / 0 / esplanade / 2016-03-19 / 3 hours / concert -general / 0 / merlion / 2018-04-07 / 2 hours / sightseeing -general / 0 / chinatown / 2015-02-21 / 5 hours / sightseeing -general / 0 / saizeriya / 2022-12-12 / 2 hours / +general / 0 / germany / 2023-12-12 / 1 week / +food / 0 / mala / 2023-12-12 / now / +accommodation / 0 / hotel / 2023-12-12 / now / +landmark / 0 / statue of liberty / 2023-12-12 / now / diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/duke/Duke.java index 7d626c9d9a..19b459614e 100644 --- a/src/main/java/seedu/duke/Duke.java +++ b/src/main/java/seedu/duke/Duke.java @@ -11,147 +11,114 @@ public class Duke { public static void main(String[] args) { Logger logger = Logger.getLogger("Main"); Ui.printGreeting(); - boolean userSaysBye = false; FileSave file = new FileSave("omni.txt"); TravelActivityList list = new TravelActivityList(); file.readFile(list); - String line; Scanner in = new Scanner(System.in); - while (!userSaysBye) { + while (true) { try { - line = in.nextLine(); + String line = in.nextLine(); assert line != null :"Input does not exist!"; String[] command = line.split(" "); logger.log(Level.INFO, command[0]); switch (command[0].toLowerCase()) { - case "list": - Ui.printLine(); Parser.getList(command, list); - Ui.printLine(); break; - case "add": - Ui.printLine(); Parser.addCommand(line, list); - Ui.printLine(); break; - case "accommodation": - Ui.printLine(); - Parser.activityCommand(line, list); - Ui.printLine(); - break; - case "food": - Ui.printLine(); - Parser.activityCommand(line, list); - Ui.printLine(); - break; - case "landmark": - Ui.printLine(); Parser.activityCommand(line, list); - Ui.printLine(); break; - case "delete": - Ui.printLine(); - Parser.deleteCommand(command, list); - Ui.printLine(); - break; - case "check": - Ui.printLine(); - Parser.checkCommand(command, list); - Ui.printLine(); - break; - case "uncheck": - Ui.printLine(); - Parser.uncheckCommand(command, list); - Ui.printLine(); - break; - case "find": - Ui.printLine(); - Parser.findCommand(command, list); - Ui.printLine(); - break; - case "tag": - Ui.printLine(); - Parser.tagCommand(line, list); - Ui.printLine(); - break; - case "untag": - Ui.printLine(); - Parser.removeTagCommand(command, list); - Ui.printLine(); - break; - - case "help": - Ui.printLine(); - Ui.helpCommand(); - Ui.printLine(); - break; - - case "bye": - Ui.printBye(); - userSaysBye = true; - break; - case "update": - Ui.printLine(); - Parser.updateCommand(line, list); - Ui.printLine(); - break; - case "findtag": - Ui.printLine(); - Parser.findTagCommand(line, list); - Ui.printLine(); - break; - case "findtype": - Ui.printLine(); - Parser.findTypeCommand(line, list); - Ui.printLine(); - break; - case "expense": - Ui.printLine(); - Parser.expenseCommand(line, list); - Ui.printLine(); - break; - case "removeexpense": - Ui.printLine(); - Parser.removeExpenseCommand(command, list); - Ui.printLine(); + invokeCommand(command, line, list); break; - + case "help": + Ui.helpCommand(); + break; + case "bye": + Ui.printBye(); + return; default: Ui.printLine(); System.out.println("This is not a valid command"); Ui.printLine(); } file.saveActivityList(list); - } catch (OmniException exception){ - Ui.printException(exception); - } catch (NoSuchElementException exception){ - Ui.printNoSuchElementException(exception); - } catch (NumberFormatException exception) { - Ui.printNumberTooLargeException(exception); - } catch (DateTimeException exception){ - Ui.printDateTimeExceptionError(); - } catch (IOException exception){ - Ui.printSavingError(); + } catch (OmniException | NoSuchElementException | NumberFormatException | DateTimeException + | IOException exception) { + handleException(exception); } } } + private static void invokeCommand(String[] command, String line, TravelActivityList list) throws OmniException, IOException { + Ui.printLine(); + switch (command[0].toLowerCase()) { + case "delete": + Parser.deleteCommand(command, list); + break; + case "check": + Parser.checkCommand(command, list); + break; + case "uncheck": + Parser.uncheckCommand(command, list); + break; + case "find": + Parser.findCommand(command, list); + break; + case "tag": + Parser.tagCommand(line, list); + break; + case "untag": + Parser.removeTagCommand(command, list); + break; + case "update": + Parser.updateCommand(line, list); + break; + case "findtag": + Parser.findTagCommand(line, list); + break; + case "findtype": + Parser.findTypeCommand(line, list); + break; + case "expense": + Parser.expenseCommand(line, list); + break; + case "removeexpense": + Parser.removeExpenseCommand(command, list); + break; + default: + throw new OmniException("Invalid command"); + } + Ui.printLine(); + } + + private static void handleException(Exception exception) { + if (exception instanceof OmniException) + Ui.printException((OmniException) exception); + else if (exception instanceof NoSuchElementException) + Ui.printNoSuchElementException((NoSuchElementException) exception); + else if (exception instanceof NumberFormatException) + Ui.printNumberTooLargeException((NumberFormatException) exception); + else if (exception instanceof DateTimeException) + Ui.printDateTimeExceptionError(); + else if (exception instanceof IOException) + Ui.printSavingError(); + } } diff --git a/src/main/java/seedu/duke/FileSave.java b/src/main/java/seedu/duke/FileSave.java index 94e7404dba..1b4142f30f 100644 --- a/src/main/java/seedu/duke/FileSave.java +++ b/src/main/java/seedu/duke/FileSave.java @@ -21,61 +21,32 @@ public void loadFileContents(TravelActivityList list) throws FileNotFoundExcepti Scanner s = new Scanner(f); while (s.hasNext()){ String[] line = s.nextLine().split(" / "); - switch (line[0].toLowerCase()){ + String type = line[0].toLowerCase(); + String description = line[2]; + LocalDate date = LocalDate.parse(line[3]); + String duration = line[4]; + String tag = (line.length == 6) ? line[5].trim() : ""; + TravelActivity activity; + switch (type) { case "accommodation": - TravelActivity accommodation; - if (line.length == 6) { - accommodation = new Accommodation(line[2], LocalDate.parse(line[3]), line[4], line[5].trim()); - } else { - accommodation = new Accommodation(line[2], LocalDate.parse(line[3]), line[4], ""); - } - list.addTravelActivity(accommodation); - if(line[1].equals("1")){ - accommodation.setActivityStatus(true); - } + activity = new Accommodation(description, date, duration, tag); break; case "food": - TravelActivity food; - if (line.length == 6) { - food = new Food(line[2], LocalDate.parse(line[3]), line[4], line[5].trim()); - } else { - food = new Food(line[2], LocalDate.parse(line[3]), line[4], ""); - } - - list.addTravelActivity(food); - if(line[1].equals("1")){ - food.setActivityStatus(true); - } + activity = new Food(description, date, duration, tag); break; case "landmark": - TravelActivity landmark; - if (line.length == 6) { - landmark = new Landmark(line[2], LocalDate.parse(line[3]), line[4], line[5].trim()); - } else { - landmark = new Landmark(line[2], LocalDate.parse(line[3]), line[4], ""); - } - list.addTravelActivity(landmark); - if(line[1].equals("1")){ - landmark.setActivityStatus(true); - } + activity = new Landmark(description, date, duration, tag); break; case "general": - TravelActivity newActivity; - if (line.length == 6) { - newActivity = new TravelActivity(line[2], LocalDate.parse(line[3]), - line[4], line[5].trim()); - } else { - newActivity = new TravelActivity(line[2], LocalDate.parse(line[3]), - line[4], ""); - } - list.addTravelActivity(newActivity); - if(line[1].equals("1")){ - newActivity.setActivityStatus(true); - } + activity = new TravelActivity(description, date, duration, tag); break; default: throw new FileNotFoundException("File is corrupted or has invalid format"); } + list.addTravelActivity(activity); + if (line[1].equals("1")) { + activity.setActivityStatus(true); + } } } diff --git a/src/main/java/seedu/duke/Parser.java b/src/main/java/seedu/duke/Parser.java index 5d4fca00cb..c7c5f3cee7 100644 --- a/src/main/java/seedu/duke/Parser.java +++ b/src/main/java/seedu/duke/Parser.java @@ -27,12 +27,14 @@ public static boolean isNumeric(String str) { * @param list List of travel activities. */ public static void getList(String[] command, TravelActivityList list) throws OmniException{ + Ui.printLine(); if (command.length == 1) { System.out.println("Here are the travel activities in your list:"); list.listTravelActivities(); } else { throw new OmniException("Do you mean the command list?"); } + Ui.printLine(); } /** @@ -42,65 +44,44 @@ public static void getList(String[] command, TravelActivityList list) throws Omn * @param list List of travel activities * @throws OmniException if command.length < 2 */ - public static void activityCommand(String line, TravelActivityList list) throws OmniException{ - //logger.log(Level.INFO, "activityCommand"); + public static void activityCommand(String line, TravelActivityList list) throws OmniException { + Ui.printLine(); String[] command = line.split(" "); String delimiter = command[0] + "| /date | /duration | /tag "; String[] input = line.split(delimiter); - //logger.log(Level.INFO, input[0] + " // " + input[1] + " // " + input[2] + " // " + input[3]); - if (input.length >= 4 && input[1].isBlank()) { + String description = input[1].trim(); + LocalDate date = LocalDate.parse(input[2]); + String duration = input[3].trim(); + String tag = (input.length > 4 && !input[4].isBlank()) ? input[4].trim() : ""; + if (input[1].isBlank()) { throw new OmniException("The description of accommodation cannot be empty!"); - } else if(input.length >= 4 && input[2].isBlank()){ + } else if (input[2].isBlank()) { throw new OmniException("The date cannot be empty!"); - } else if (input.length >= 4 && input[3].isBlank()){ + } else if (input[3].isBlank()) { throw new OmniException("The duration cannot be empty!"); - } else if (input.length >= 5 && input[4].isBlank()){ + } else if (input.length >= 5 && input[4].isBlank()) { throw new OmniException("The tag cannot be empty!"); - }else if (input.length >= 4 && !line.contains("/tag") ) { - if (command[0].equals("accommodation")) { - Accommodation newActivity = new Accommodation(input[1].trim(), LocalDate.parse(input[2]), - input[3].trim(), ""); - list.addTravelActivity(newActivity); - System.out.println("I added a new accommodation"); - System.out.println(newActivity); - } else if (command[0].equals("food")) { - Food newActivity = new Food(input[1].trim(), LocalDate.parse(input[2]), - input[3].trim(), ""); - list.addTravelActivity(newActivity); - System.out.println("I added a new restaurant"); - System.out.println(newActivity); - } else if (command[0].equals("landmark")) { - Landmark newActivity = new Landmark(input[1].trim(), LocalDate.parse(input[2]), - input[3].trim(), ""); - list.addTravelActivity(newActivity); - System.out.println("I added a new landmark"); - System.out.println(newActivity); - } - } else if(input.length >= 5 && line.contains("/tag") ){ - if (command[0].equals("accommodation")) { - Accommodation newActivity = new Accommodation(input[1].trim(), LocalDate.parse(input[2]), - input[3].trim(), input[4].trim()); - list.addTravelActivity(newActivity); + } + TravelActivity activity; + switch (command[0]) { + case "accommodation": + activity = new Accommodation(description, date, duration, tag); System.out.println("I added a new accommodation"); - System.out.println(newActivity); - } else if (command[0].equals("food")) { - Food newActivity = new Food(input[1].trim(), LocalDate.parse(input[2]), - input[3].trim(), input[4].trim()); - list.addTravelActivity(newActivity); + break; + case "food": + activity = new Food(description, date, duration, tag); System.out.println("I added a new restaurant"); - System.out.println(newActivity); - } else if (command[0].equals("landmark")) { - Landmark newActivity = new Landmark(input[1].trim(), LocalDate.parse(input[2]), - input[3].trim(), input[4].trim()); - list.addTravelActivity(newActivity); + break; + case "landmark": + activity = new Landmark(description, date, duration, tag); System.out.println("I added a new landmark"); - System.out.println(newActivity); - } - } else { - throw new OmniException("Please check that your command is in this format: accomodation DESCRIPTION " + - "/date YYYY-MM-DD /duration DURATION /tag TAG" + System.lineSeparator() - + "or accomodation DESCRIPTION /date YYYY-MM-DD /duration DURATION"); + break; + default: + throw new OmniException("Unknown activity type"); } + list.addTravelActivity(activity); + System.out.println(activity); + Ui.printLine(); } /** @@ -111,31 +92,26 @@ public static void activityCommand(String line, TravelActivityList list) throws * @throws OmniException if command.length < 2 */ public static void addCommand(String line, TravelActivityList list) throws OmniException{ + Ui.printLine(); String[] command = line.split("add | /date | /duration | /tag "); + String description = command[1].trim(); + LocalDate date = LocalDate.parse(command[2]); + String duration = command[3].trim(); + String tag = (command.length > 4 && !command[4].isBlank()) ? command[4].trim() : ""; logger.log(Level.INFO, command[0] + " // " + command[1]); - if (command.length >= 4 && command[1].isBlank()) { + if (command[1].isBlank()) { throw new OmniException("The description of add cannot be empty!"); - } else if(command.length >= 4 && command[2].isBlank()){ + } else if(command[2].isBlank()){ throw new OmniException("The date cannot be empty!"); - } else if (command.length >= 4 && command[3].isBlank()){ + } else if (command[3].isBlank()){ throw new OmniException("The duration cannot be empty!"); - } else if (command.length >= 4 && !line.contains("/tag") ) { - TravelActivity newActivity = new TravelActivity(command[1].trim(), LocalDate.parse(command[2]), - command[3].trim(), ""); - list.addTravelActivity(newActivity); - System.out.println("I added a new travel activity"); - System.out.println(newActivity); - } else if(command.length >= 5 && line.contains("/tag")){ - TravelActivity newActivity = new TravelActivity(command[1].trim(), LocalDate.parse(command[2]), - command[3].trim(), command[4].trim()); - list.addTravelActivity(newActivity); - System.out.println("I added a new travel activity"); - System.out.println(newActivity); - } else{ - throw new OmniException("Please check that your add command is in this format: add DESCRIPTION " + - "/date YYYY-MM-DD /duration DURATION" - + " or add DESCRIPTION /date YYYY-MM-DD /duration DURATION /tag TAG"); } + TravelActivity newActivity = new TravelActivity(description, date, duration, tag); + list.addTravelActivity(newActivity); + System.out.println("I added a new travel activity"); + System.out.println(newActivity); + + Ui.printLine(); } /** diff --git a/src/main/java/seedu/duke/Ui.java b/src/main/java/seedu/duke/Ui.java index dbf4453bf4..89c5a22f1c 100644 --- a/src/main/java/seedu/duke/Ui.java +++ b/src/main/java/seedu/duke/Ui.java @@ -56,9 +56,11 @@ public static void printNumberTooLargeException(NumberFormatException exception) } public static void helpCommand(){ + printLine(); System.out.println("These are the available commands!"); System.out.println("1. list\n2. add \n3. delete \n" + "4. find \n5. help\n6. bye\n"); + printLine(); } public static void printDateTimeExceptionError(){ From 3fec1b6313378fa52b07d2f3f032f3178b682534 Mon Sep 17 00:00:00 2001 From: Eugene Chan Date: Sat, 30 Mar 2024 15:39:34 +0800 Subject: [PATCH 2/4] Fixed indentation --- src/main/java/seedu/duke/Duke.java | 81 +++++++++++++++--------------- 1 file changed, 41 insertions(+), 40 deletions(-) diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/duke/Duke.java index 19b459614e..d1b2887ee2 100644 --- a/src/main/java/seedu/duke/Duke.java +++ b/src/main/java/seedu/duke/Duke.java @@ -68,56 +68,57 @@ public static void main(String[] args) { private static void invokeCommand(String[] command, String line, TravelActivityList list) throws OmniException, IOException { Ui.printLine(); switch (command[0].toLowerCase()) { - case "delete": - Parser.deleteCommand(command, list); - break; - case "check": - Parser.checkCommand(command, list); - break; - case "uncheck": - Parser.uncheckCommand(command, list); - break; - case "find": - Parser.findCommand(command, list); - break; - case "tag": - Parser.tagCommand(line, list); - break; - case "untag": - Parser.removeTagCommand(command, list); - break; - case "update": - Parser.updateCommand(line, list); - break; - case "findtag": - Parser.findTagCommand(line, list); - break; - case "findtype": - Parser.findTypeCommand(line, list); - break; - case "expense": - Parser.expenseCommand(line, list); - break; - case "removeexpense": - Parser.removeExpenseCommand(command, list); - break; - default: - throw new OmniException("Invalid command"); + case "delete": + Parser.deleteCommand(command, list); + break; + case "check": + Parser.checkCommand(command, list); + break; + case "uncheck": + Parser.uncheckCommand(command, list); + break; + case "find": + Parser.findCommand(command, list); + break; + case "tag": + Parser.tagCommand(line, list); + break; + case "untag": + Parser.removeTagCommand(command, list); + break; + case "update": + Parser.updateCommand(line, list); + break; + case "findtag": + Parser.findTagCommand(line, list); + break; + case "findtype": + Parser.findTypeCommand(line, list); + break; + case "expense": + Parser.expenseCommand(line, list); + break; + case "removeexpense": + Parser.removeExpenseCommand(command, list); + break; + default: + throw new OmniException("Invalid command"); } Ui.printLine(); } private static void handleException(Exception exception) { - if (exception instanceof OmniException) + if (exception instanceof OmniException) { Ui.printException((OmniException) exception); - else if (exception instanceof NoSuchElementException) + } else if (exception instanceof NoSuchElementException) { Ui.printNoSuchElementException((NoSuchElementException) exception); - else if (exception instanceof NumberFormatException) + } else if (exception instanceof NumberFormatException) { Ui.printNumberTooLargeException((NumberFormatException) exception); - else if (exception instanceof DateTimeException) + } else if (exception instanceof DateTimeException) { Ui.printDateTimeExceptionError(); - else if (exception instanceof IOException) + } else if (exception instanceof IOException) { Ui.printSavingError(); + } } } From 84fa2e8acdc9ccd19b04602e6980d434d03f6a24 Mon Sep 17 00:00:00 2001 From: Eugene Chan Date: Sat, 30 Mar 2024 15:41:34 +0800 Subject: [PATCH 3/4] Fixed indentation --- src/main/java/seedu/duke/Parser.java | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/seedu/duke/Parser.java b/src/main/java/seedu/duke/Parser.java index c7c5f3cee7..6769bcfc4c 100644 --- a/src/main/java/seedu/duke/Parser.java +++ b/src/main/java/seedu/duke/Parser.java @@ -64,20 +64,20 @@ public static void activityCommand(String line, TravelActivityList list) throws } TravelActivity activity; switch (command[0]) { - case "accommodation": - activity = new Accommodation(description, date, duration, tag); - System.out.println("I added a new accommodation"); - break; - case "food": - activity = new Food(description, date, duration, tag); - System.out.println("I added a new restaurant"); - break; - case "landmark": - activity = new Landmark(description, date, duration, tag); - System.out.println("I added a new landmark"); - break; - default: - throw new OmniException("Unknown activity type"); + case "accommodation": + activity = new Accommodation(description, date, duration, tag); + System.out.println("I added a new accommodation"); + break; + case "food": + activity = new Food(description, date, duration, tag); + System.out.println("I added a new restaurant"); + break; + case "landmark": + activity = new Landmark(description, date, duration, tag); + System.out.println("I added a new landmark"); + break; + default: + throw new OmniException("Unknown activity type"); } list.addTravelActivity(activity); System.out.println(activity); From 1a84b10c0879db22bce76ce010d600c5e6a9a0bd Mon Sep 17 00:00:00 2001 From: Eugene Chan Date: Sat, 30 Mar 2024 15:44:59 +0800 Subject: [PATCH 4/4] FIxed indentation --- src/main/java/seedu/duke/Duke.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/duke/Duke.java index d1b2887ee2..c32c7a005b 100644 --- a/src/main/java/seedu/duke/Duke.java +++ b/src/main/java/seedu/duke/Duke.java @@ -65,7 +65,8 @@ public static void main(String[] args) { } } } - private static void invokeCommand(String[] command, String line, TravelActivityList list) throws OmniException, IOException { + private static void invokeCommand(String[] command, + String line, TravelActivityList list) throws OmniException, IOException { Ui.printLine(); switch (command[0].toLowerCase()) { case "delete":