diff --git a/src/main/java/florizz/command/RecommendCommand.java b/src/main/java/florizz/command/RecommendCommand.java index 13354636b3..95184829c2 100644 --- a/src/main/java/florizz/command/RecommendCommand.java +++ b/src/main/java/florizz/command/RecommendCommand.java @@ -56,12 +56,13 @@ public boolean execute(ArrayList bouquetList, Ui ui) throws FlorizzExce * @param bouquetList List that contains all bouquets * @return The chosen valid bouquetName */ - public String askBouquetName(Ui ui, ArrayList bouquetList) { + public String askBouquetName(Ui ui, ArrayList bouquetList) throws FlorizzException { boolean isValidName = false; String bouquetName = "placeHolder"; ui.printAskBouquetName(); while (!isValidName) { bouquetName = ui.getInput(); + Parser.checkRecommendExitCondition(bouquetName); if (bouquetList.contains(new Bouquet(bouquetName))) { System.out.println("Sorry a bouquet with this name already exists, please enter another name"); } else { @@ -91,18 +92,21 @@ private void addRandomFlowers(ArrayList eligibleFlowers, Bouquet recomme * Asks user for occasion * @return Occasion enum */ - private Flower.Occasion askOccasion(Ui ui) { + private Flower.Occasion askOccasion(Ui ui) throws FlorizzException{ logger.entering(RecommendCommand.class.getName(), "askOccasion"); boolean isValidFormat = false; boolean isValidOccasion = false; String occasionInput = "placeholder"; + ui.printAskOccasion(); while (!(isValidFormat && isValidOccasion)) { - occasionInput = ui.printAskOccasion(); + occasionInput = ui.getInput(); + Parser.checkRecommendExitCondition(occasionInput); isValidFormat = Parser.parseOccasion(occasionInput); isValidOccasion = Flower.isValidOccasion(occasionInput); // check if occasion is in our dictionary if (!isValidOccasion) { - System.out.println("This occasion does not exist."); + System.out.println("This occasion does not exist." + + "Type 'cancel' if you would like to exit the recommendation page"); } } @@ -116,20 +120,23 @@ private Flower.Occasion askOccasion(Ui ui) { * @param eligibleFlowers list of flowers to choose from * @return Colour enum */ - private Flower.Colour askColour(Ui ui, ArrayList eligibleFlowers) { + private Flower.Colour askColour(Ui ui, ArrayList eligibleFlowers) throws FlorizzException{ assert !eligibleFlowers.isEmpty() : "Eligible flowers should not be empty"; logger.entering(RecommendCommand.class.getName(), "askColour"); String colourInput = "placeHolder"; boolean isValidFormat = false; boolean isValidColour = false; + ui.printAskColour(eligibleFlowers); while (!(isValidColour && isValidFormat)) { - colourInput = ui.printAskColour(eligibleFlowers); + colourInput = ui.getInput(); + Parser.checkRecommendExitCondition(colourInput); isValidFormat = Parser.parseColour(colourInput); isValidColour = Flower.isValidColour(colourInput); // check if colour is in our dictionary if (!isValidColour) { - System.out.println("This colour does not exist."); + System.out.println("This colour does not exist. " + + "Type 'cancel' if you would like to exit the recommendation page"); } } @@ -144,7 +151,7 @@ private void askSaveBouquet(Ui ui, ArrayList bouquetList, boolean isValidFormat = false; boolean isValidInput = false; while (!(isValidInput && isValidFormat)) { - saveInput = ui.printAskSaveBouquet(recommendedBouquet); + saveInput = ui.printAskSaveBouquet(recommendedBouquet).toLowerCase(); isValidFormat = Parser.parseSaveBouquet(saveInput); isValidInput = (saveInput.equalsIgnoreCase("yes") || saveInput.equalsIgnoreCase("no")); } diff --git a/src/main/java/florizz/core/Parser.java b/src/main/java/florizz/core/Parser.java index e707c65cf0..a65cee151e 100644 --- a/src/main/java/florizz/core/Parser.java +++ b/src/main/java/florizz/core/Parser.java @@ -340,4 +340,15 @@ public static boolean parseSaveBouquet(String argument) { return true; } + + /** + * Checks if the user has entered the exit word for the recommend page + * @param input Input from the user + * @throws FlorizzException Thrown when the user has entered the exit word + */ + public static void checkRecommendExitCondition(String input) throws FlorizzException{ + if (input.equalsIgnoreCase("cancel")) { + throw new FlorizzException("Leaving recommend"); + } + } } diff --git a/src/main/java/florizz/core/Ui.java b/src/main/java/florizz/core/Ui.java index f35f4c6806..dc3aafdaf4 100644 --- a/src/main/java/florizz/core/Ui.java +++ b/src/main/java/florizz/core/Ui.java @@ -340,25 +340,27 @@ public void printIOError() { /** * ask user for occasion input - * @return String of occasion input */ - public String printAskOccasion() { + public void printAskOccasion() { System.out.println("For what occasion are you buying flowers for?"); this.printAllOccasions(); - return inputScanner.nextLine(); + System.out.println("Type 'cancel' if you would like to exit the recommendation page"); } + /** + * Prints prompt to ask user to input bouquet name for recommended bouquet + */ public void printAskBouquetName() { System.out.println("Great we managed to find some flowers for you!"); System.out.println("Before we carry on what would you like to call your bouquet?"); + System.out.println("Note: please take note 'cancel' cannot be used as a bouquet name"); } /** * ask user for colour input * @param eligibleFlowers list of flowers that are eligible for the occasion - * @return String of colour input */ - public String printAskColour(ArrayList eligibleFlowers) { + public void printAskColour(ArrayList eligibleFlowers) { System.out.println("What colour would you like your bouquets to be?"); // print all available colours in a given array list @@ -373,8 +375,8 @@ public String printAskColour(ArrayList eligibleFlowers) { for (String colour : colourList){ System.out.println("- " + colour); } + System.out.println("Type 'cancel' if you would like to exit the recommendation page"); printBreakLine(); - return inputScanner.nextLine(); } public String printAskSaveBouquet(Bouquet recommendedBouquet) {