From ea51d5f56ff2414279d9b1b5405721356a8832df Mon Sep 17 00:00:00 2001 From: Wendelin Wemhoener Date: Tue, 17 Oct 2023 02:02:43 +0800 Subject: [PATCH 1/3] Refactor structure of review --- flashcard.txt | 0 .../java/seedu/duke/flashcard/FlashcardReview.java | 13 ------------- .../duke/flashcard/review/FlashcardReview.java | 2 ++ .../duke/flashcard/review/RandomReviewMode.java | 2 ++ .../ReviewDifficulty.java} | 2 ++ .../seedu/duke/flashcard/review/ReviewMode.java | 2 ++ .../review/SpacedRepetitionReviewMode.java | 2 ++ 7 files changed, 10 insertions(+), 13 deletions(-) create mode 100644 flashcard.txt delete mode 100644 src/main/java/seedu/duke/flashcard/FlashcardReview.java create mode 100644 src/main/java/seedu/duke/flashcard/review/FlashcardReview.java create mode 100644 src/main/java/seedu/duke/flashcard/review/RandomReviewMode.java rename src/main/java/seedu/duke/flashcard/{FlashcardDifficulty.java => review/ReviewDifficulty.java} (78%) create mode 100644 src/main/java/seedu/duke/flashcard/review/ReviewMode.java create mode 100644 src/main/java/seedu/duke/flashcard/review/SpacedRepetitionReviewMode.java diff --git a/flashcard.txt b/flashcard.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/java/seedu/duke/flashcard/FlashcardReview.java b/src/main/java/seedu/duke/flashcard/FlashcardReview.java deleted file mode 100644 index f904f267af..0000000000 --- a/src/main/java/seedu/duke/flashcard/FlashcardReview.java +++ /dev/null @@ -1,13 +0,0 @@ -package seedu.duke.flashcard; - -import java.time.LocalDateTime; - -public class FlashcardReview { - private LocalDateTime reviewDate; - private FlashcardDifficulty reviewDifficulty; - - public FlashcardReview(LocalDateTime reviewDate, FlashcardDifficulty reviewDifficulty) { - this.reviewDate = reviewDate; - this.reviewDifficulty = reviewDifficulty; - } -} diff --git a/src/main/java/seedu/duke/flashcard/review/FlashcardReview.java b/src/main/java/seedu/duke/flashcard/review/FlashcardReview.java new file mode 100644 index 0000000000..3d92bfda2c --- /dev/null +++ b/src/main/java/seedu/duke/flashcard/review/FlashcardReview.java @@ -0,0 +1,2 @@ +package seedu.duke.flashcard.review;public class FlashcardReview { +} diff --git a/src/main/java/seedu/duke/flashcard/review/RandomReviewMode.java b/src/main/java/seedu/duke/flashcard/review/RandomReviewMode.java new file mode 100644 index 0000000000..990deeb054 --- /dev/null +++ b/src/main/java/seedu/duke/flashcard/review/RandomReviewMode.java @@ -0,0 +1,2 @@ +package seedu.duke.flashcard.reviewmode;public class RandomReview { +} diff --git a/src/main/java/seedu/duke/flashcard/FlashcardDifficulty.java b/src/main/java/seedu/duke/flashcard/review/ReviewDifficulty.java similarity index 78% rename from src/main/java/seedu/duke/flashcard/FlashcardDifficulty.java rename to src/main/java/seedu/duke/flashcard/review/ReviewDifficulty.java index 6737254840..8c9876cb20 100644 --- a/src/main/java/seedu/duke/flashcard/FlashcardDifficulty.java +++ b/src/main/java/seedu/duke/flashcard/review/ReviewDifficulty.java @@ -1,3 +1,5 @@ +//@@author wendelinwemhoener + package seedu.duke.flashcard; public enum FlashcardDifficulty { diff --git a/src/main/java/seedu/duke/flashcard/review/ReviewMode.java b/src/main/java/seedu/duke/flashcard/review/ReviewMode.java new file mode 100644 index 0000000000..24591c2dbd --- /dev/null +++ b/src/main/java/seedu/duke/flashcard/review/ReviewMode.java @@ -0,0 +1,2 @@ +package seedu.duke.flashcard.reviewmode;public class ReviewMode { +} diff --git a/src/main/java/seedu/duke/flashcard/review/SpacedRepetitionReviewMode.java b/src/main/java/seedu/duke/flashcard/review/SpacedRepetitionReviewMode.java new file mode 100644 index 0000000000..e37cabda9f --- /dev/null +++ b/src/main/java/seedu/duke/flashcard/review/SpacedRepetitionReviewMode.java @@ -0,0 +1,2 @@ +package seedu.duke.flashcard.reviewmode;public class SpacedRepetitionReview { +} From e09c0c2b042a7478c1fb1ddff173da5b61623e8d Mon Sep 17 00:00:00 2001 From: Wendelin Wemhoener Date: Tue, 17 Oct 2023 02:19:27 +0800 Subject: [PATCH 2/3] Add code for different review modes --- build.gradle | 1 + docs/team/wendelinwemhoener.md | 2 +- flashcard.txt | 5 ++ src/main/java/seedu/duke/Duke.java | 3 ++ .../java/seedu/duke/flashcard/Flashcard.java | 10 ++-- .../flashcard/FlashcardCommandParser.java | 6 ++- .../duke/flashcard/FlashcardComponent.java | 13 ++++- .../seedu/duke/flashcard/FlashcardList.java | 2 + .../seedu/duke/flashcard/FlashcardUi.java | 2 + .../command/CreateFlashcardCommand.java | 5 ++ .../flashcard/command/FlashcardCommand.java | 2 + .../command/ListFlashcardsCommand.java | 8 ++- .../flashcard/command/StartReviewCommand.java | 53 ++++++++++++++++++- .../flashcard/command/UnknownCommand.java | 2 + .../flashcard/review/FlashcardReview.java | 15 +++++- .../flashcard/review/RandomReviewMode.java | 7 ++- .../flashcard/review/ReviewByTagMode.java | 4 ++ .../flashcard/review/ReviewDifficulty.java | 4 +- .../duke/flashcard/review/ReviewMode.java | 11 +++- .../review/SpacedRepetitionReviewMode.java | 6 ++- 20 files changed, 145 insertions(+), 16 deletions(-) create mode 100644 src/main/java/seedu/duke/flashcard/review/ReviewByTagMode.java diff --git a/build.gradle b/build.gradle index ea82051fab..593bf8299e 100644 --- a/build.gradle +++ b/build.gradle @@ -43,4 +43,5 @@ checkstyle { run{ standardInput = System.in + enableAssertions = true } diff --git a/docs/team/wendelinwemhoener.md b/docs/team/wendelinwemhoener.md index ab75b391b8..f0a26f0266 100644 --- a/docs/team/wendelinwemhoener.md +++ b/docs/team/wendelinwemhoener.md @@ -1,4 +1,4 @@ -# John Doe - Project Portfolio Page +# Wendelin Wemhoener - Project Portfolio Page ## Overview diff --git a/flashcard.txt b/flashcard.txt index e69de29bb2..0e4d4f627f 100644 --- a/flashcard.txt +++ b/flashcard.txt @@ -0,0 +1,5 @@ +dfdfdf | aaaaaaaaaaaaaaaaaaa | - | - | - +flash1 | dfdfdf | - | - | - +adfdf | dfdfdf | - | - | - +dfdfdf | dfdfdfdfdf | - | - | - +who is this | me | - | - | - diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/duke/Duke.java index b53271edf4..b804db0891 100644 --- a/src/main/java/seedu/duke/Duke.java +++ b/src/main/java/seedu/duke/Duke.java @@ -1,3 +1,5 @@ +//@@author wendelinwemhoener + package seedu.duke; import seedu.duke.flashcard.Flashcard; @@ -19,6 +21,7 @@ private void run() { Scanner scanner = new Scanner(System.in); String input; boolean shouldTerminate = false; + while (!shouldTerminate) { input = scanner.nextLine(); diff --git a/src/main/java/seedu/duke/flashcard/Flashcard.java b/src/main/java/seedu/duke/flashcard/Flashcard.java index ab7def40f9..d6b2cc7169 100644 --- a/src/main/java/seedu/duke/flashcard/Flashcard.java +++ b/src/main/java/seedu/duke/flashcard/Flashcard.java @@ -1,5 +1,9 @@ +//@@author wendelinwemhoener + package seedu.duke.flashcard; +import seedu.duke.flashcard.review.FlashcardReview; + import java.time.LocalDateTime; import java.util.ArrayList; @@ -29,11 +33,9 @@ public String getBackText() { } public String toString() { - return "-".repeat(80) + System.lineSeparator() - + "front text: " + frontText + System.lineSeparator() + return "front text: " + frontText + System.lineSeparator() + "back text: " + backText + System.lineSeparator() + "tags: " + tags.toString() + System.lineSeparator() - + "next review due on: " + nextReviewOn + System.lineSeparator() - + "-".repeat(80); + + "next review due on: " + nextReviewOn + System.lineSeparator(); } } diff --git a/src/main/java/seedu/duke/flashcard/FlashcardCommandParser.java b/src/main/java/seedu/duke/flashcard/FlashcardCommandParser.java index d71d62a9cf..3714be31e7 100644 --- a/src/main/java/seedu/duke/flashcard/FlashcardCommandParser.java +++ b/src/main/java/seedu/duke/flashcard/FlashcardCommandParser.java @@ -1,3 +1,5 @@ +//@@author wendelinwemhoener + package seedu.duke.flashcard; import seedu.duke.flashcard.command.FlashcardCommand; @@ -8,11 +10,13 @@ public class FlashcardCommandParser { public FlashcardCommand parseInput(String input) { + assert input != null : "input is null"; + if (input.startsWith("create flashcard")) { return new CreateFlashcardCommand(); } else if (input.startsWith("list flashcards")) { return new ListFlashcardsCommand(); - } else if (input.startsWith("start review")) { + } else if (input.startsWith("review flashcards")) { return new StartReviewCommand(); } diff --git a/src/main/java/seedu/duke/flashcard/FlashcardComponent.java b/src/main/java/seedu/duke/flashcard/FlashcardComponent.java index ae0c1e46fb..644f62dcac 100644 --- a/src/main/java/seedu/duke/flashcard/FlashcardComponent.java +++ b/src/main/java/seedu/duke/flashcard/FlashcardComponent.java @@ -1,3 +1,5 @@ +//@@author wendelinwemhoener + package seedu.duke.flashcard; import seedu.duke.flashcard.command.FlashcardCommand; @@ -16,6 +18,8 @@ public class FlashcardComponent { public FlashcardComponent(ArrayList flashcards) { parser = new FlashcardCommandParser(); + + //@@author junhyeong0411 storage = new FlashcardStorage("./flashcard.txt"); try { flashcardList = storage.loadFlashcards(); @@ -25,9 +29,8 @@ public FlashcardComponent(ArrayList flashcards) { flashcardList = new FlashcardList(flashcards); } - + //@@author wendelinwemhoener ui = new FlashcardUi(flashcardList); - } public boolean isResponsible(String input) { @@ -42,9 +45,15 @@ public boolean isResponsible(String input) { public void processInput(String input) { FlashcardCommand command = parser.parseInput(input); + assert !(command instanceof UnknownCommand) : "Command cannot be " + + "unknown"; + ui.executeCommand(command); + //@@author junhyeong0411 // save after every commands storage.saveFlashcards(flashcardList.getFlashcards()); + + //@@author wendelinwemhoener } } diff --git a/src/main/java/seedu/duke/flashcard/FlashcardList.java b/src/main/java/seedu/duke/flashcard/FlashcardList.java index 1222e40104..c6d317619e 100644 --- a/src/main/java/seedu/duke/flashcard/FlashcardList.java +++ b/src/main/java/seedu/duke/flashcard/FlashcardList.java @@ -1,3 +1,5 @@ +//@@author wendelinwemhoener + package seedu.duke.flashcard; import java.util.ArrayList; diff --git a/src/main/java/seedu/duke/flashcard/FlashcardUi.java b/src/main/java/seedu/duke/flashcard/FlashcardUi.java index 9da700b750..ea3c352ed4 100644 --- a/src/main/java/seedu/duke/flashcard/FlashcardUi.java +++ b/src/main/java/seedu/duke/flashcard/FlashcardUi.java @@ -1,3 +1,5 @@ +//@@author wendelinwemhoener + package seedu.duke.flashcard; import seedu.duke.flashcard.command.FlashcardCommand; diff --git a/src/main/java/seedu/duke/flashcard/command/CreateFlashcardCommand.java b/src/main/java/seedu/duke/flashcard/command/CreateFlashcardCommand.java index 2b08632b13..4dd52781e7 100644 --- a/src/main/java/seedu/duke/flashcard/command/CreateFlashcardCommand.java +++ b/src/main/java/seedu/duke/flashcard/command/CreateFlashcardCommand.java @@ -1,3 +1,5 @@ +//@@author wendelinwemhoener + package seedu.duke.flashcard.command; import seedu.duke.flashcard.Flashcard; @@ -15,5 +17,8 @@ public void execute(Scanner scanner, FlashcardList flashcardList) { Flashcard flashcard = new Flashcard(frontPageText, backPageText); flashcardList.add(flashcard); + + System.out.println(" Success! Flashcard has been added to your " + + "collection."); } } diff --git a/src/main/java/seedu/duke/flashcard/command/FlashcardCommand.java b/src/main/java/seedu/duke/flashcard/command/FlashcardCommand.java index 60702de680..a46427ca65 100644 --- a/src/main/java/seedu/duke/flashcard/command/FlashcardCommand.java +++ b/src/main/java/seedu/duke/flashcard/command/FlashcardCommand.java @@ -1,3 +1,5 @@ +//@@author wendelinwemhoener + package seedu.duke.flashcard.command; import seedu.duke.flashcard.FlashcardList; diff --git a/src/main/java/seedu/duke/flashcard/command/ListFlashcardsCommand.java b/src/main/java/seedu/duke/flashcard/command/ListFlashcardsCommand.java index 67a0b6f044..c4c97f88a4 100644 --- a/src/main/java/seedu/duke/flashcard/command/ListFlashcardsCommand.java +++ b/src/main/java/seedu/duke/flashcard/command/ListFlashcardsCommand.java @@ -1,3 +1,5 @@ +//@@author wendelinwemhoener + package seedu.duke.flashcard.command; import seedu.duke.flashcard.Flashcard; @@ -7,8 +9,12 @@ public class ListFlashcardsCommand extends FlashcardCommand { public void execute(Scanner scanner, FlashcardList flashcardList) { + System.out.println(" Here is a list of all your flashcards: "); + + System.out.println("-".repeat(80)); for (Flashcard flashcard : flashcardList.getFlashcards()) { - System.out.println(flashcard); + System.out.print(flashcard); + System.out.println("-".repeat(80)); } } } diff --git a/src/main/java/seedu/duke/flashcard/command/StartReviewCommand.java b/src/main/java/seedu/duke/flashcard/command/StartReviewCommand.java index e80a62a850..53b4a244a7 100644 --- a/src/main/java/seedu/duke/flashcard/command/StartReviewCommand.java +++ b/src/main/java/seedu/duke/flashcard/command/StartReviewCommand.java @@ -1,11 +1,62 @@ +//@@author wendelinwemhoener + package seedu.duke.flashcard.command; import seedu.duke.flashcard.FlashcardList; +import seedu.duke.flashcard.review.RandomReviewMode; +import seedu.duke.flashcard.review.ReviewByTagMode; +import seedu.duke.flashcard.review.ReviewMode; +import seedu.duke.flashcard.review.SpacedRepetitionReviewMode; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Scanner; public class StartReviewCommand extends FlashcardCommand { + private final ArrayList choices = new ArrayList<>(Arrays.asList( + "a", "b", "c")); + + private String getUserChoiceReviewMode(Scanner scanner) { + System.out.println(" How do you want to review your flashcards?"); + System.out.println(" a) random mode"); + System.out.println(" b) spaced repetition mode"); + System.out.println(" c) review by tag mode"); + + return scanner.nextLine(); + } + public void execute(Scanner scanner, FlashcardList flashcardList) { - System.out.println(""); + String choice = getUserChoiceReviewMode(scanner); + + if (!choices.contains(choice)) { + System.out.println(" Invalid choice! Your choice must be a, b " + + "or c!"); + return; + } + + ReviewMode reviewMode = createReviewMode(choice); + + if (reviewMode instanceof RandomReviewMode) { + + } else { + System.out.println("This review mode hasn't yet been implemented." + + " Sorry!"); + } + } + + private ReviewMode createReviewMode(String choice) { + ReviewMode reviewMode = null; + + if (choice.equals("a")) { + reviewMode = new RandomReviewMode(); + } else if (choice.equals("b")) { + reviewMode = new SpacedRepetitionReviewMode(); + } else if (choice.equals("c")) { + reviewMode = new ReviewByTagMode(); + } + + assert reviewMode != null; + + return reviewMode; } } diff --git a/src/main/java/seedu/duke/flashcard/command/UnknownCommand.java b/src/main/java/seedu/duke/flashcard/command/UnknownCommand.java index aacfffa67b..eae1929f30 100644 --- a/src/main/java/seedu/duke/flashcard/command/UnknownCommand.java +++ b/src/main/java/seedu/duke/flashcard/command/UnknownCommand.java @@ -1,3 +1,5 @@ +//@@author wendelinwemhoener + package seedu.duke.flashcard.command; import seedu.duke.flashcard.FlashcardList; diff --git a/src/main/java/seedu/duke/flashcard/review/FlashcardReview.java b/src/main/java/seedu/duke/flashcard/review/FlashcardReview.java index 3d92bfda2c..2686ac5cdd 100644 --- a/src/main/java/seedu/duke/flashcard/review/FlashcardReview.java +++ b/src/main/java/seedu/duke/flashcard/review/FlashcardReview.java @@ -1,2 +1,15 @@ -package seedu.duke.flashcard.review;public class FlashcardReview { +//@@author wendelinwemhoener + +package seedu.duke.flashcard.review; + +import java.time.LocalDateTime; + +public class FlashcardReview { + private LocalDateTime reviewDate; + private ReviewDifficulty reviewDifficulty; + + public FlashcardReview(LocalDateTime reviewDate, ReviewDifficulty reviewDifficulty) { + this.reviewDate = reviewDate; + this.reviewDifficulty = reviewDifficulty; + } } diff --git a/src/main/java/seedu/duke/flashcard/review/RandomReviewMode.java b/src/main/java/seedu/duke/flashcard/review/RandomReviewMode.java index 990deeb054..882ea6e7cc 100644 --- a/src/main/java/seedu/duke/flashcard/review/RandomReviewMode.java +++ b/src/main/java/seedu/duke/flashcard/review/RandomReviewMode.java @@ -1,2 +1,7 @@ -package seedu.duke.flashcard.reviewmode;public class RandomReview { +//@@author wendelinwemhoener + +package seedu.duke.flashcard.review; + +public class RandomReviewMode extends ReviewMode { + } diff --git a/src/main/java/seedu/duke/flashcard/review/ReviewByTagMode.java b/src/main/java/seedu/duke/flashcard/review/ReviewByTagMode.java new file mode 100644 index 0000000000..a8847b71e0 --- /dev/null +++ b/src/main/java/seedu/duke/flashcard/review/ReviewByTagMode.java @@ -0,0 +1,4 @@ +package seedu.duke.flashcard.review; + +public class ReviewByTagMode extends ReviewMode { +} diff --git a/src/main/java/seedu/duke/flashcard/review/ReviewDifficulty.java b/src/main/java/seedu/duke/flashcard/review/ReviewDifficulty.java index 8c9876cb20..36eaa54bbb 100644 --- a/src/main/java/seedu/duke/flashcard/review/ReviewDifficulty.java +++ b/src/main/java/seedu/duke/flashcard/review/ReviewDifficulty.java @@ -1,8 +1,8 @@ //@@author wendelinwemhoener -package seedu.duke.flashcard; +package seedu.duke.flashcard.review; -public enum FlashcardDifficulty { +public enum ReviewDifficulty { EASY, GOOD, HARD, diff --git a/src/main/java/seedu/duke/flashcard/review/ReviewMode.java b/src/main/java/seedu/duke/flashcard/review/ReviewMode.java index 24591c2dbd..92a1d906a8 100644 --- a/src/main/java/seedu/duke/flashcard/review/ReviewMode.java +++ b/src/main/java/seedu/duke/flashcard/review/ReviewMode.java @@ -1,2 +1,11 @@ -package seedu.duke.flashcard.reviewmode;public class ReviewMode { +//@@author wendelinwemhoener + +package seedu.duke.flashcard.review; + +public abstract class ReviewMode { + public void startReviewSession() { + + } + + public abstract void reviewSingleFlashcard(); } diff --git a/src/main/java/seedu/duke/flashcard/review/SpacedRepetitionReviewMode.java b/src/main/java/seedu/duke/flashcard/review/SpacedRepetitionReviewMode.java index e37cabda9f..552ff3ac27 100644 --- a/src/main/java/seedu/duke/flashcard/review/SpacedRepetitionReviewMode.java +++ b/src/main/java/seedu/duke/flashcard/review/SpacedRepetitionReviewMode.java @@ -1,2 +1,6 @@ -package seedu.duke.flashcard.reviewmode;public class SpacedRepetitionReview { +//@@author wendelinwemhoener + +package seedu.duke.flashcard.review; + +public class SpacedRepetitionReviewMode extends ReviewMode { } From eaa290162077ebcf91b4f51a025a43fbf842ef57 Mon Sep 17 00:00:00 2001 From: Wendelin Wemhoener Date: Tue, 17 Oct 2023 03:38:24 +0800 Subject: [PATCH 3/3] Implement random flashcard review mode --- flashcard.txt | 1 + .../java/seedu/duke/flashcard/Flashcard.java | 10 ++-- .../flashcard/command/StartReviewCommand.java | 13 ++--- .../flashcard/review/RandomReviewMode.java | 19 +++++++ .../flashcard/review/ReviewByTagMode.java | 14 +++++ .../duke/flashcard/review/ReviewMode.java | 52 ++++++++++++++++++- .../review/SpacedRepetitionReviewMode.java | 14 +++++ 7 files changed, 112 insertions(+), 11 deletions(-) diff --git a/flashcard.txt b/flashcard.txt index 0e4d4f627f..7d6e1f7532 100644 --- a/flashcard.txt +++ b/flashcard.txt @@ -3,3 +3,4 @@ flash1 | dfdfdf | - | - | - adfdf | dfdfdf | - | - | - dfdfdf | dfdfdfdfdf | - | - | - who is this | me | - | - | - +dfdfdfdaaaaaaaaaaaaa | dd | - | - | - diff --git a/src/main/java/seedu/duke/flashcard/Flashcard.java b/src/main/java/seedu/duke/flashcard/Flashcard.java index d6b2cc7169..8f6e09bc13 100644 --- a/src/main/java/seedu/duke/flashcard/Flashcard.java +++ b/src/main/java/seedu/duke/flashcard/Flashcard.java @@ -12,7 +12,11 @@ public class Flashcard { private String backText; private ArrayList tags; private ArrayList reviews; - private LocalDateTime nextReviewOn; + private LocalDateTime lastReviewOn; + + public void setLastReviewOn(LocalDateTime lastReviewOn) { + this.lastReviewOn = lastReviewOn; + } public Flashcard(String frontText, String backText) { this.frontText = frontText; @@ -21,7 +25,7 @@ public Flashcard(String frontText, String backText) { tags = new ArrayList<>(); reviews = new ArrayList<>(); - nextReviewOn = null; + lastReviewOn = null; } public String getFrontText() { @@ -36,6 +40,6 @@ public String toString() { return "front text: " + frontText + System.lineSeparator() + "back text: " + backText + System.lineSeparator() + "tags: " + tags.toString() + System.lineSeparator() - + "next review due on: " + nextReviewOn + System.lineSeparator(); + + "next review due on: " + lastReviewOn + System.lineSeparator(); } } diff --git a/src/main/java/seedu/duke/flashcard/command/StartReviewCommand.java b/src/main/java/seedu/duke/flashcard/command/StartReviewCommand.java index 53b4a244a7..1727848e41 100644 --- a/src/main/java/seedu/duke/flashcard/command/StartReviewCommand.java +++ b/src/main/java/seedu/duke/flashcard/command/StartReviewCommand.java @@ -3,6 +3,7 @@ package seedu.duke.flashcard.command; import seedu.duke.flashcard.FlashcardList; +import seedu.duke.flashcard.review.FlashcardReview; import seedu.duke.flashcard.review.RandomReviewMode; import seedu.duke.flashcard.review.ReviewByTagMode; import seedu.duke.flashcard.review.ReviewMode; @@ -34,25 +35,25 @@ public void execute(Scanner scanner, FlashcardList flashcardList) { return; } - ReviewMode reviewMode = createReviewMode(choice); + ReviewMode reviewMode = createReviewMode(choice, flashcardList); if (reviewMode instanceof RandomReviewMode) { - + reviewMode.startReviewSession(scanner); } else { System.out.println("This review mode hasn't yet been implemented." + " Sorry!"); } } - private ReviewMode createReviewMode(String choice) { + private ReviewMode createReviewMode(String choice, FlashcardList flashcardList) { ReviewMode reviewMode = null; if (choice.equals("a")) { - reviewMode = new RandomReviewMode(); + reviewMode = new RandomReviewMode(flashcardList); } else if (choice.equals("b")) { - reviewMode = new SpacedRepetitionReviewMode(); + reviewMode = new SpacedRepetitionReviewMode(flashcardList); } else if (choice.equals("c")) { - reviewMode = new ReviewByTagMode(); + reviewMode = new ReviewByTagMode(flashcardList); } assert reviewMode != null; diff --git a/src/main/java/seedu/duke/flashcard/review/RandomReviewMode.java b/src/main/java/seedu/duke/flashcard/review/RandomReviewMode.java index 882ea6e7cc..f05fbe9c97 100644 --- a/src/main/java/seedu/duke/flashcard/review/RandomReviewMode.java +++ b/src/main/java/seedu/duke/flashcard/review/RandomReviewMode.java @@ -2,6 +2,25 @@ package seedu.duke.flashcard.review; +import seedu.duke.flashcard.Flashcard; +import seedu.duke.flashcard.FlashcardList; + +import java.util.ArrayList; +import java.util.Random; + public class RandomReviewMode extends ReviewMode { + public RandomReviewMode(FlashcardList flashcardList) { + super(flashcardList); + } + + public String getReviewModeName() { + return "random review mode"; + } + + protected Flashcard pickFlashcard() { + ArrayList flashcards = flashcardList.getFlashcards(); + Random random = new Random(); + return flashcards.get(random.nextInt(flashcards.size())); + } } diff --git a/src/main/java/seedu/duke/flashcard/review/ReviewByTagMode.java b/src/main/java/seedu/duke/flashcard/review/ReviewByTagMode.java index a8847b71e0..9cddd67b15 100644 --- a/src/main/java/seedu/duke/flashcard/review/ReviewByTagMode.java +++ b/src/main/java/seedu/duke/flashcard/review/ReviewByTagMode.java @@ -1,4 +1,18 @@ package seedu.duke.flashcard.review; +import seedu.duke.flashcard.Flashcard; +import seedu.duke.flashcard.FlashcardList; + public class ReviewByTagMode extends ReviewMode { + public ReviewByTagMode(FlashcardList flashcardList) { + super(flashcardList); + } + + public String getReviewModeName() { + return "review by tag mode"; + } + + protected Flashcard pickFlashcard() { + return null; + } } diff --git a/src/main/java/seedu/duke/flashcard/review/ReviewMode.java b/src/main/java/seedu/duke/flashcard/review/ReviewMode.java index 92a1d906a8..b55b1421d0 100644 --- a/src/main/java/seedu/duke/flashcard/review/ReviewMode.java +++ b/src/main/java/seedu/duke/flashcard/review/ReviewMode.java @@ -2,10 +2,58 @@ package seedu.duke.flashcard.review; +import seedu.duke.flashcard.Flashcard; +import seedu.duke.flashcard.FlashcardList; + +import java.time.LocalDateTime; +import java.util.Scanner; + public abstract class ReviewMode { - public void startReviewSession() { + protected FlashcardList flashcardList; + + public ReviewMode(FlashcardList flashcardList) { + this.flashcardList = flashcardList; + } + + public abstract String getReviewModeName(); + + public void startReviewSession(Scanner scanner) { + System.out.println(" [Review session has been started]"); + System.out.println(" [Review mode is: " + getReviewModeName() + "]"); + System.out.println(); + + while (true) { + Flashcard flashcardToReview = pickFlashcard(); + printFlashcardFrontTextPrompt(flashcardToReview); + + String input = scanner.nextLine(); + boolean shouldTerminate = input.equals("quit") || input.equals("q"); + if (shouldTerminate) { + break; + } + + System.out.println(" The actual back text is: " + flashcardToReview.getBackText()); + System.out.println(); + + flashcardToReview.setLastReviewOn(LocalDateTime.now()); + } + + System.out.println(" Success! You have ended this review session."); } - public abstract void reviewSingleFlashcard(); + protected abstract Flashcard pickFlashcard(); + + protected void printFlashcardFrontTextPrompt(Flashcard flashcardToReview) { + System.out.println(" " + "-".repeat(76)); + System.out.println(" The front text is: " + flashcardToReview.getFrontText()); + System.out.println(); + + System.out.println(" [Think of the answer (the back text) in " + + "your head]"); + System.out.println(" [Press when you are ready to " + + "compare it,]"); + System.out.println(" [or enter 'q' or 'quit' to end this " + + "review session]"); + } } diff --git a/src/main/java/seedu/duke/flashcard/review/SpacedRepetitionReviewMode.java b/src/main/java/seedu/duke/flashcard/review/SpacedRepetitionReviewMode.java index 552ff3ac27..5584ede59b 100644 --- a/src/main/java/seedu/duke/flashcard/review/SpacedRepetitionReviewMode.java +++ b/src/main/java/seedu/duke/flashcard/review/SpacedRepetitionReviewMode.java @@ -2,5 +2,19 @@ package seedu.duke.flashcard.review; +import seedu.duke.flashcard.Flashcard; +import seedu.duke.flashcard.FlashcardList; + public class SpacedRepetitionReviewMode extends ReviewMode { + public SpacedRepetitionReviewMode(FlashcardList flashcardList) { + super(flashcardList); + } + + public String getReviewModeName() { + return "spaced repetition mode"; + } + + protected Flashcard pickFlashcard() { + return null; + } }