From 098c8c1b87107c66882f82124f183b388f50c6c3 Mon Sep 17 00:00:00 2001 From: TheHow Date: Thu, 2 Mar 2023 15:41:56 +0800 Subject: [PATCH 001/174] Add Dehao's info to AboutUs.md --- docs/AboutUs.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..a5b146fc7d 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,9 +1,6 @@ # About us -Display | Name | Github Profile | Portfolio ---------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +Display | Name | Github Profile | Portfolio +--------|:----------:|:------------------------------------:|:---------: +![](https://via.placeholder.com/100.png?text=Photo) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](photo_link) | Kong Dehao | [Github](https://github.com/kdh3799) | [Portfolio](docs/team/kongdehao.md) From e87f21319111b1cffd59c676a0f9baabe6198660 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Thu, 2 Mar 2023 21:21:35 +0800 Subject: [PATCH 002/174] Add my name to docs/AboutUs Signed-off-by: Vu Van Dung --- docs/AboutUs.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..d29d62f015 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,9 +1,5 @@ # About us -Display | Name | Github Profile | Portfolio ---------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +| Display | Name | Github Profile | Portfolio | +| --------------------------------------------------------------- | :---------: | :---------------------------------: | :-----------------------------: | +| ![](https://avatars.githubusercontent.com/u/44609036?v=4&s=100) | Vu Van Dung | [GitHub](https://github.com/joulev) | [Portfolio](https://joulev.dev) | From 5f007872654b07c301b6b0e9862a312eba87760f Mon Sep 17 00:00:00 2001 From: Zijin Date: Fri, 3 Mar 2023 15:54:54 +0800 Subject: [PATCH 003/174] Updated AboutUs to include Song Zijin --- docs/AboutUs.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..9e63dee79a 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,9 +1,5 @@ # About us -Display | Name | Github Profile | Portfolio ---------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +Display | Name | Github Profile | Portfolio +--------|:----------:|:--------------:|:---------: +![](https://avatars.githubusercontent.com/u/88227764?s=400&u=798d5cfe5960a07e7364c1c1efa4c3317205b6ca&v=4) | Song Zijin | [Github](https://github.com/SongZijin) | [Portfolio](docs/team/songzijin.md) From 621c3688b5c0460c64ad6135d6881cca1ab8945e Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 6 Mar 2023 15:54:57 +0800 Subject: [PATCH 004/174] Add Flashcard.java to construct a flashcard object --- src/main/java/Flashcard.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/Flashcard.java diff --git a/src/main/java/Flashcard.java b/src/main/java/Flashcard.java new file mode 100644 index 0000000000..313543ddc6 --- /dev/null +++ b/src/main/java/Flashcard.java @@ -0,0 +1,10 @@ +public class Flashcard { + private String question; + private String answer; + + public Flashcard(String question, String answer) { + this.question = question; + this.answer = answer; + } + +} From 1c21224e6b7c4f26a4d932d2a3b7e9bb5a1fbd9b Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 6 Mar 2023 16:18:22 +0800 Subject: [PATCH 005/174] Update constructor of Flashcard.java The current version will take in an input line of the format "add /q QUESTION /a ANSWER" and create a new flashcard object with QUESTION and ANSWER stored --- src/main/java/Flashcard.java | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/Flashcard.java b/src/main/java/Flashcard.java index 313543ddc6..6543925cc4 100644 --- a/src/main/java/Flashcard.java +++ b/src/main/java/Flashcard.java @@ -1,10 +1,23 @@ public class Flashcard { - private String question; - private String answer; + public static final String QUESTION_START_INDICATOR = "/q"; + public static final String ANSWER_START_INDICATOR = "/a"; + private String questionText; + private String answerText; - public Flashcard(String question, String answer) { - this.question = question; - this.answer = answer; + public Flashcard(String userInput) { + int positionOfStartOfQuestion = userInput.indexOf(QUESTION_START_INDICATOR); + int positionOfStartOfAnswer = userInput.indexOf(ANSWER_START_INDICATOR); + this.questionText = userInput.substring(positionOfStartOfQuestion + + QUESTION_START_INDICATOR.length(), positionOfStartOfAnswer).trim(); + this.answerText = userInput.substring(positionOfStartOfAnswer + + ANSWER_START_INDICATOR.length()).trim(); } + public String getQuestionText() { + return questionText; + } + + public String getAnswerText() { + return answerText; + } } From f57dc6aa89ead1e4c7d1edcf6d4e7ac00a72b6ac Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 6 Mar 2023 21:33:28 +0800 Subject: [PATCH 006/174] Add exceptions for add function --- .../objects/exceptions/EmptyFlashcardAnswerException.java | 4 ++++ .../objects/exceptions/EmptyFlashcardQuestionException.java | 4 ++++ .../objects/exceptions/InvalidAddFlashcardInputException.java | 4 ++++ 3 files changed, 12 insertions(+) create mode 100644 src/main/java/objects/exceptions/EmptyFlashcardAnswerException.java create mode 100644 src/main/java/objects/exceptions/EmptyFlashcardQuestionException.java create mode 100644 src/main/java/objects/exceptions/InvalidAddFlashcardInputException.java diff --git a/src/main/java/objects/exceptions/EmptyFlashcardAnswerException.java b/src/main/java/objects/exceptions/EmptyFlashcardAnswerException.java new file mode 100644 index 0000000000..18b5651e92 --- /dev/null +++ b/src/main/java/objects/exceptions/EmptyFlashcardAnswerException.java @@ -0,0 +1,4 @@ +package objects.exceptions; + +public class EmptyFlashcardAnswerException extends Exception{ +} diff --git a/src/main/java/objects/exceptions/EmptyFlashcardQuestionException.java b/src/main/java/objects/exceptions/EmptyFlashcardQuestionException.java new file mode 100644 index 0000000000..34922f9d36 --- /dev/null +++ b/src/main/java/objects/exceptions/EmptyFlashcardQuestionException.java @@ -0,0 +1,4 @@ +package objects.exceptions; + +public class EmptyFlashcardQuestionException extends Exception{ +} diff --git a/src/main/java/objects/exceptions/InvalidAddFlashcardInputException.java b/src/main/java/objects/exceptions/InvalidAddFlashcardInputException.java new file mode 100644 index 0000000000..9bc830cc6e --- /dev/null +++ b/src/main/java/objects/exceptions/InvalidAddFlashcardInputException.java @@ -0,0 +1,4 @@ +package objects.exceptions; + +public class InvalidAddFlashcardInputException extends Exception{ +} From 4f414df60fb16632bd9606843d503bbdb5b962f8 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 6 Mar 2023 21:35:56 +0800 Subject: [PATCH 007/174] Add abstract command object --- src/main/java/commands/Command.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/main/java/commands/Command.java diff --git a/src/main/java/commands/Command.java b/src/main/java/commands/Command.java new file mode 100644 index 0000000000..808c418397 --- /dev/null +++ b/src/main/java/commands/Command.java @@ -0,0 +1,13 @@ + +package commands; + +import objects.FlashcardList; +import ui.Ui; + +/** + * Represents a command that is instructed for the program to conduct. A Command + * Object specifies what the type of command is with its subclasses. + */ +public abstract class Command { + public abstract void execute(FlashcardList flashcardList, Ui display); +} \ No newline at end of file From ce98df6ab10b422648cc4bf418aedbdc16681876 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 6 Mar 2023 21:36:35 +0800 Subject: [PATCH 008/174] Add command objects for adding a new flashcard --- src/main/java/commands/AddCommand.java | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/main/java/commands/AddCommand.java diff --git a/src/main/java/commands/AddCommand.java b/src/main/java/commands/AddCommand.java new file mode 100644 index 0000000000..d7660e0737 --- /dev/null +++ b/src/main/java/commands/AddCommand.java @@ -0,0 +1,30 @@ +package commands; + +import objects.FlashcardList; +import ui.Ui; + +/** + * A type of command that will instruct to add a new element into the ArrayList + * of flashcards. + */ +public class AddCommand extends Command{ + String questionText; + String answerText; + + public AddCommand(String questionText, String answerText) { + this.questionText = questionText; + this.answerText = answerText; + } + + @Override + public String toString() { + return "Question to add: " + questionText + " Answer: " + answerText; + } + + @Override + public void execute(FlashcardList flashcardList, Ui display) { + flashcardList.addNewFlashcard(questionText,answerText); + display.printSuccessfulAddMessage(questionText,answerText); + } + +} From e3392d64ec301e37b5e44717c9247161f4c82bdf Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 6 Mar 2023 21:42:19 +0800 Subject: [PATCH 009/174] Implement basic structure for the whole application A structure similar to what is done in iP is implemented here, the code can only handle add command and unknown command for now. --- src/main/java/Main.java | 25 +++++++++ src/main/java/commands/UnknownCommand.java | 11 ++++ src/main/java/objects/FlashcardList.java | 18 +++++++ src/main/java/parser/Parser.java | 63 ++++++++++++++++++++++ src/main/java/ui/Ui.java | 45 ++++++++++++++++ 5 files changed, 162 insertions(+) create mode 100644 src/main/java/Main.java create mode 100644 src/main/java/commands/UnknownCommand.java create mode 100644 src/main/java/objects/FlashcardList.java create mode 100644 src/main/java/parser/Parser.java create mode 100644 src/main/java/ui/Ui.java diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 0000000000..993ed3eb27 --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,25 @@ +import commands.Command; +import objects.FlashcardList; +import parser.Parser; +import ui.Ui; + +public class Main { + private Ui ui; + private FlashcardList flashcardList; + private Parser parser; + + public Main() { + this.ui = new Ui(); + this.flashcardList = new FlashcardList(); + this.parser = new Parser(); + } + + public void run() { + String inputText = ui.getUserCommand(); + Command command = parser.parseCommand(inputText); + command.execute(flashcardList, ui); + } + public static void main() { + new Main().run(); + } +} diff --git a/src/main/java/commands/UnknownCommand.java b/src/main/java/commands/UnknownCommand.java new file mode 100644 index 0000000000..1dbc2bbbc6 --- /dev/null +++ b/src/main/java/commands/UnknownCommand.java @@ -0,0 +1,11 @@ +package commands; + +import objects.FlashcardList; +import ui.Ui; + +public class UnknownCommand extends Command{ + @Override + public void execute(FlashcardList flashcardList, Ui display) { + display.printInvalidInput(); + } +} diff --git a/src/main/java/objects/FlashcardList.java b/src/main/java/objects/FlashcardList.java new file mode 100644 index 0000000000..a3ea2c84d8 --- /dev/null +++ b/src/main/java/objects/FlashcardList.java @@ -0,0 +1,18 @@ +package objects; + +import objects.flashcard.Flashcard; + +import java.util.ArrayList; + +public class FlashcardList { + private ArrayList flashcards; + + public FlashcardList() { + this.flashcards = new ArrayList<>(); + } + + public void addNewFlashcard(String questionText, String answerText) { + Flashcard newFlashcard = new Flashcard(questionText,answerText); + flashcards.add(newFlashcard); + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java new file mode 100644 index 0000000000..f741302ce5 --- /dev/null +++ b/src/main/java/parser/Parser.java @@ -0,0 +1,63 @@ +package parser; + +import commands.AddCommand; +import commands.Command; +import commands.UnknownCommand; +import objects.exceptions.EmptyFlashcardAnswerException; +import objects.exceptions.EmptyFlashcardQuestionException; +import objects.exceptions.InvalidAddFlashcardInputException; + +public class Parser { + public static final String QUESTION_START_INDICATOR = "/q"; + public static final String ANSWER_START_INDICATOR = "/a"; + public Command parseCommand(String userInput) { + String commandPhrase = userInput.split(" ")[0]; + switch (commandPhrase) { + case "add": + try { + return reformatAddCommandInput(userInput); + } catch (InvalidAddFlashcardInputException e) { + System.out.println("The input is in an incorrect format, please follow the format in user guide"); + } catch (EmptyFlashcardQuestionException e) { + System.out.println("The question of this card is empty, please enter one."); + } catch (EmptyFlashcardAnswerException e) { + System.out.println("The answer for this flashcard is empty, please enter one."); + } + break; + default: + return new UnknownCommand(); + } + return new UnknownCommand(); + } + + /** + * Constructs an AddCommand from the input of the user, if the input is of an incorrect + * format, a respective exception will be thrown. + * + * @param userInput The input collected by Ui from the user. + * @return An AddCommand with the question and answer text extracted from user input. + * @throws InvalidAddFlashcardInputException If the start indicators cannot be found. + * @throws EmptyFlashcardQuestionException If the string is empty after QUESTION_START_INDICATOR. + * @throws EmptyFlashcardAnswerException If the string is empty after ANSWER_START_INDICATOR. + */ + public AddCommand reformatAddCommandInput(String userInput) + throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, + EmptyFlashcardAnswerException { + int positionOfStartOfQuestion = userInput.indexOf(QUESTION_START_INDICATOR); + int positionOfStartOfAnswer = userInput.indexOf(ANSWER_START_INDICATOR); + if (positionOfStartOfAnswer == -1 || positionOfStartOfQuestion == -1) { + throw new InvalidAddFlashcardInputException(); + } + String questionText = userInput.substring(positionOfStartOfQuestion + + QUESTION_START_INDICATOR.length(), positionOfStartOfAnswer).trim(); + String answerText = userInput.substring(positionOfStartOfAnswer + + ANSWER_START_INDICATOR.length()).trim(); + if (questionText.isEmpty()) { + throw new EmptyFlashcardQuestionException(); + } + if (answerText.isEmpty()) { + throw new EmptyFlashcardAnswerException(); + } + return new AddCommand(questionText,answerText); + } +} diff --git a/src/main/java/ui/Ui.java b/src/main/java/ui/Ui.java new file mode 100644 index 0000000000..b3e2094b6b --- /dev/null +++ b/src/main/java/ui/Ui.java @@ -0,0 +1,45 @@ +package ui; + +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Scanner; + +/* + Parts of the code below are copied and adapted from TextUi.java of addressbook-level2, + link of original code: + https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/ui/TextUi.java. + */ +public class Ui { + private final Scanner in; + private final PrintStream out; + + public Ui() { + this(System.in, System.out); + } + + public Ui(InputStream in, PrintStream out) { + this.in = new Scanner(in); + this.out = out; + } + + /** + * Prompts for the command and reads the text entered by the user. + * Ignores empty, pure whitespace, and comment lines. + * Echos the command back to the user. + * @return command (full line) entered by the user + */ + public String getUserCommand() { + return in.nextLine(); + } + + public void printSuccessfulAddMessage(String questionText, String answerText) { + System.out.println("A new card is now added:" + System.lineSeparator() + + "Question: " + questionText + System.lineSeparator() + + "Answer: " + answerText); + } + + public void printInvalidInput() { + System.out.println("The input is in an incorrect format."); + } + +} From 4be87ab0daab374608bb25fc046645041235f3a9 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 6 Mar 2023 21:42:56 +0800 Subject: [PATCH 010/174] Update Flashcard.java to better follow OOP standard --- src/main/java/Flashcard.java | 23 ------------------- .../java/objects/flashcard/Flashcard.java | 20 ++++++++++++++++ 2 files changed, 20 insertions(+), 23 deletions(-) delete mode 100644 src/main/java/Flashcard.java create mode 100644 src/main/java/objects/flashcard/Flashcard.java diff --git a/src/main/java/Flashcard.java b/src/main/java/Flashcard.java deleted file mode 100644 index 6543925cc4..0000000000 --- a/src/main/java/Flashcard.java +++ /dev/null @@ -1,23 +0,0 @@ -public class Flashcard { - public static final String QUESTION_START_INDICATOR = "/q"; - public static final String ANSWER_START_INDICATOR = "/a"; - private String questionText; - private String answerText; - - public Flashcard(String userInput) { - int positionOfStartOfQuestion = userInput.indexOf(QUESTION_START_INDICATOR); - int positionOfStartOfAnswer = userInput.indexOf(ANSWER_START_INDICATOR); - this.questionText = userInput.substring(positionOfStartOfQuestion + - QUESTION_START_INDICATOR.length(), positionOfStartOfAnswer).trim(); - this.answerText = userInput.substring(positionOfStartOfAnswer + - ANSWER_START_INDICATOR.length()).trim(); - } - - public String getQuestionText() { - return questionText; - } - - public String getAnswerText() { - return answerText; - } -} diff --git a/src/main/java/objects/flashcard/Flashcard.java b/src/main/java/objects/flashcard/Flashcard.java new file mode 100644 index 0000000000..10238c4638 --- /dev/null +++ b/src/main/java/objects/flashcard/Flashcard.java @@ -0,0 +1,20 @@ +package objects.flashcard; + + +public class Flashcard { + private String questionText; + private String answerText; + + public Flashcard(String questionText, String answerText) { + this.questionText = questionText; + this.answerText = answerText; + } + + public String getQuestionText() { + return questionText; + } + + public String getAnswerText() { + return answerText; + } +} From 76e7e227a61c462c48bd348026c3e84bb84c94ee Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 6 Mar 2023 21:43:29 +0800 Subject: [PATCH 011/174] Add unit testing codes for current functions --- .../java/objects/flashcard/FlashcardTest.java | 14 +++++++ src/test/java/parser/ParserTest.java | 42 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 src/test/java/objects/flashcard/FlashcardTest.java create mode 100644 src/test/java/parser/ParserTest.java diff --git a/src/test/java/objects/flashcard/FlashcardTest.java b/src/test/java/objects/flashcard/FlashcardTest.java new file mode 100644 index 0000000000..de6eb528af --- /dev/null +++ b/src/test/java/objects/flashcard/FlashcardTest.java @@ -0,0 +1,14 @@ + +package objects.flashcard; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + + +class FlashcardTest { + @Test + public void constructNewFlashcard_correctlyFormattedInputs_success() { + Flashcard testCard = new Flashcard("QUESTION","ANSWER"); + assertEquals("QUESTION", testCard.getQuestionText()); + assertEquals("ANSWER", testCard.getAnswerText()); + } +} \ No newline at end of file diff --git a/src/test/java/parser/ParserTest.java b/src/test/java/parser/ParserTest.java new file mode 100644 index 0000000000..aa88c1136a --- /dev/null +++ b/src/test/java/parser/ParserTest.java @@ -0,0 +1,42 @@ + +package parser; + +import commands.AddCommand; +import commands.Command; +import objects.exceptions.EmptyFlashcardAnswerException; +import objects.exceptions.EmptyFlashcardQuestionException; +import objects.exceptions.InvalidAddFlashcardInputException; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + + +class ParserTest { + @Test + public void parseAddCommand_correctlyFormattedInput_successful() { + Parser parser = new Parser(); + Command parsedCommand = parser.parseCommand("add /q Question /a Answer"); + Command expectedCommand = new AddCommand("Question", "Answer"); + assertEquals(expectedCommand.toString(), parsedCommand.toString()); + } + + @Test + public void parserAddCommand_incorrectFormattedInput_invalidInputException() { + Parser parser = new Parser(); + assertThrows(InvalidAddFlashcardInputException.class, + () -> parser.reformatAddCommandInput("add Question /a Answer")); + assertThrows(InvalidAddFlashcardInputException.class, + () -> parser.reformatAddCommandInput("add /q Question /w Answer")); + } + + @Test + public void parserAddCommand_partOfInputMissing_emptyInputPartException() { + Parser parser = new Parser(); + assertThrows(EmptyFlashcardAnswerException.class, + () -> parser.reformatAddCommandInput("add /q Question /a ")); + assertThrows(EmptyFlashcardQuestionException.class, + () -> parser.reformatAddCommandInput("add /q /a Answer")); + } + +} \ No newline at end of file From 46b2a6d298ab76b29a9608cf4e7f361ac61171dc Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 6 Mar 2023 21:54:17 +0800 Subject: [PATCH 012/174] Update files to meet the requirements of CheckStyle --- src/main/java/commands/Command.java | 2 +- src/test/java/objects/flashcard/FlashcardTest.java | 2 +- src/test/java/parser/ParserTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/commands/Command.java b/src/main/java/commands/Command.java index 808c418397..4fec6da4d7 100644 --- a/src/main/java/commands/Command.java +++ b/src/main/java/commands/Command.java @@ -10,4 +10,4 @@ */ public abstract class Command { public abstract void execute(FlashcardList flashcardList, Ui display); -} \ No newline at end of file +} diff --git a/src/test/java/objects/flashcard/FlashcardTest.java b/src/test/java/objects/flashcard/FlashcardTest.java index de6eb528af..dfe55dbe89 100644 --- a/src/test/java/objects/flashcard/FlashcardTest.java +++ b/src/test/java/objects/flashcard/FlashcardTest.java @@ -11,4 +11,4 @@ public void constructNewFlashcard_correctlyFormattedInputs_success() { assertEquals("QUESTION", testCard.getQuestionText()); assertEquals("ANSWER", testCard.getAnswerText()); } -} \ No newline at end of file +} diff --git a/src/test/java/parser/ParserTest.java b/src/test/java/parser/ParserTest.java index aa88c1136a..701bf30423 100644 --- a/src/test/java/parser/ParserTest.java +++ b/src/test/java/parser/ParserTest.java @@ -39,4 +39,4 @@ public void parserAddCommand_partOfInputMissing_emptyInputPartException() { () -> parser.reformatAddCommandInput("add /q /a Answer")); } -} \ No newline at end of file +} From ff66f5385091a7c50bf95585b3f06a38aa22dd91 Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Thu, 9 Mar 2023 14:54:35 +0800 Subject: [PATCH 013/174] Update Dehao profile picture in aboutus --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 9147eb3c86..0076c9cca0 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -2,7 +2,7 @@ Display | Name | Github Profile | Portfolio --------|:----------:|:------------------------------------:|:---------: -![](https://via.placeholder.com/100.png?text=Dehao) | Kong Dehao | [GitHub](https://github.com/kdh3799) | [Portfolio](docs/team/kongdehao.md) +![](https://avatars.githubusercontent.com/u/16986946) | Kong Dehao | [GitHub](https://github.com/kdh3799) | [Portfolio](docs/team/kongdehao.md) ![](https://avatars.githubusercontent.com/u/44609036?v=4&s=100) | Vu Van Dung | [GitHub](https://github.com/joulev) | [Portfolio](https://joulev.dev) ![](https://avatars.githubusercontent.com/u/88227764?s=400&u=798d5cfe5960a07e7364c1c1efa4c3317205b6ca&v=4) | Song Zijin | [Github](https://github.com/SongZijin) | [Portfolio](docs/team/songzijin.md) From 1016b9428594ed0cfc41260836aad5155a5a60d8 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Thu, 9 Mar 2023 15:01:57 +0800 Subject: [PATCH 014/174] Added entry in AboutUs.md and edited personal portfolio --- docs/AboutUs.md | 1 + docs/team/{johndoe.md => moseslee.md} | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) rename docs/team/{johndoe.md => moseslee.md} (54%) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 9147eb3c86..19b6ca37b8 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -5,4 +5,5 @@ Display | Name | Github Profile | Portfolio ![](https://via.placeholder.com/100.png?text=Dehao) | Kong Dehao | [GitHub](https://github.com/kdh3799) | [Portfolio](docs/team/kongdehao.md) ![](https://avatars.githubusercontent.com/u/44609036?v=4&s=100) | Vu Van Dung | [GitHub](https://github.com/joulev) | [Portfolio](https://joulev.dev) ![](https://avatars.githubusercontent.com/u/88227764?s=400&u=798d5cfe5960a07e7364c1c1efa4c3317205b6ca&v=4) | Song Zijin | [Github](https://github.com/SongZijin) | [Portfolio](docs/team/songzijin.md) +![](https://avatars.githubusercontent.com/u/72350236?v=4) | Moses Lee | [GitHub](https://github.com/moseslee9012) |[Portfolio](docs/team/moseslee.md) diff --git a/docs/team/johndoe.md b/docs/team/moseslee.md similarity index 54% rename from docs/team/johndoe.md rename to docs/team/moseslee.md index ab75b391b8..44e7db1f2d 100644 --- a/docs/team/johndoe.md +++ b/docs/team/moseslee.md @@ -1,4 +1,4 @@ -# John Doe - Project Portfolio Page +# Moses Lee - Project Portfolio Page ## Overview From 7f767468bbf1fca2837e03b852f67b6b358345be Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Thu, 9 Mar 2023 20:01:10 +0800 Subject: [PATCH 015/174] Reformat all Java source files according to style guide Signed-off-by: Vu Van Dung --- .gitignore | 3 ++ src/main/java/Main.java | 1 + src/main/java/commands/AddCommand.java | 6 ++-- src/main/java/commands/UnknownCommand.java | 2 +- src/main/java/objects/FlashcardList.java | 2 +- .../EmptyFlashcardAnswerException.java | 2 +- .../EmptyFlashcardQuestionException.java | 2 +- .../InvalidAddFlashcardInputException.java | 2 +- .../java/objects/flashcard/Flashcard.java | 1 - src/main/java/parser/Parser.java | 32 ++++++++++++------- src/main/java/seedu/duke/Duke.java | 6 ++-- src/main/java/ui/Ui.java | 12 +++---- .../java/objects/flashcard/FlashcardTest.java | 4 +-- src/test/java/parser/ParserTest.java | 1 - 14 files changed, 42 insertions(+), 34 deletions(-) diff --git a/.gitignore b/.gitignore index 2873e189e1..b2e4901bfd 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,9 @@ /out/ /*.iml +# VSCode setting files +.vscode/ + # Gradle build files /.gradle/ /build/ diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 993ed3eb27..627cc99c04 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -19,6 +19,7 @@ public void run() { Command command = parser.parseCommand(inputText); command.execute(flashcardList, ui); } + public static void main() { new Main().run(); } diff --git a/src/main/java/commands/AddCommand.java b/src/main/java/commands/AddCommand.java index d7660e0737..42021ad852 100644 --- a/src/main/java/commands/AddCommand.java +++ b/src/main/java/commands/AddCommand.java @@ -7,7 +7,7 @@ * A type of command that will instruct to add a new element into the ArrayList * of flashcards. */ -public class AddCommand extends Command{ +public class AddCommand extends Command { String questionText; String answerText; @@ -23,8 +23,8 @@ public String toString() { @Override public void execute(FlashcardList flashcardList, Ui display) { - flashcardList.addNewFlashcard(questionText,answerText); - display.printSuccessfulAddMessage(questionText,answerText); + flashcardList.addNewFlashcard(questionText, answerText); + display.printSuccessfulAddMessage(questionText, answerText); } } diff --git a/src/main/java/commands/UnknownCommand.java b/src/main/java/commands/UnknownCommand.java index 1dbc2bbbc6..6b069d704a 100644 --- a/src/main/java/commands/UnknownCommand.java +++ b/src/main/java/commands/UnknownCommand.java @@ -3,7 +3,7 @@ import objects.FlashcardList; import ui.Ui; -public class UnknownCommand extends Command{ +public class UnknownCommand extends Command { @Override public void execute(FlashcardList flashcardList, Ui display) { display.printInvalidInput(); diff --git a/src/main/java/objects/FlashcardList.java b/src/main/java/objects/FlashcardList.java index a3ea2c84d8..2eb0d23a16 100644 --- a/src/main/java/objects/FlashcardList.java +++ b/src/main/java/objects/FlashcardList.java @@ -12,7 +12,7 @@ public FlashcardList() { } public void addNewFlashcard(String questionText, String answerText) { - Flashcard newFlashcard = new Flashcard(questionText,answerText); + Flashcard newFlashcard = new Flashcard(questionText, answerText); flashcards.add(newFlashcard); } } diff --git a/src/main/java/objects/exceptions/EmptyFlashcardAnswerException.java b/src/main/java/objects/exceptions/EmptyFlashcardAnswerException.java index 18b5651e92..a0e0d01b27 100644 --- a/src/main/java/objects/exceptions/EmptyFlashcardAnswerException.java +++ b/src/main/java/objects/exceptions/EmptyFlashcardAnswerException.java @@ -1,4 +1,4 @@ package objects.exceptions; -public class EmptyFlashcardAnswerException extends Exception{ +public class EmptyFlashcardAnswerException extends Exception { } diff --git a/src/main/java/objects/exceptions/EmptyFlashcardQuestionException.java b/src/main/java/objects/exceptions/EmptyFlashcardQuestionException.java index 34922f9d36..c969163d4e 100644 --- a/src/main/java/objects/exceptions/EmptyFlashcardQuestionException.java +++ b/src/main/java/objects/exceptions/EmptyFlashcardQuestionException.java @@ -1,4 +1,4 @@ package objects.exceptions; -public class EmptyFlashcardQuestionException extends Exception{ +public class EmptyFlashcardQuestionException extends Exception { } diff --git a/src/main/java/objects/exceptions/InvalidAddFlashcardInputException.java b/src/main/java/objects/exceptions/InvalidAddFlashcardInputException.java index 9bc830cc6e..03e7ea69de 100644 --- a/src/main/java/objects/exceptions/InvalidAddFlashcardInputException.java +++ b/src/main/java/objects/exceptions/InvalidAddFlashcardInputException.java @@ -1,4 +1,4 @@ package objects.exceptions; -public class InvalidAddFlashcardInputException extends Exception{ +public class InvalidAddFlashcardInputException extends Exception { } diff --git a/src/main/java/objects/flashcard/Flashcard.java b/src/main/java/objects/flashcard/Flashcard.java index 10238c4638..cc7e682036 100644 --- a/src/main/java/objects/flashcard/Flashcard.java +++ b/src/main/java/objects/flashcard/Flashcard.java @@ -1,6 +1,5 @@ package objects.flashcard; - public class Flashcard { private String questionText; private String answerText; diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index f741302ce5..5c94871994 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -10,6 +10,7 @@ public class Parser { public static final String QUESTION_START_INDICATOR = "/q"; public static final String ANSWER_START_INDICATOR = "/a"; + public Command parseCommand(String userInput) { String commandPhrase = userInput.split(" ")[0]; switch (commandPhrase) { @@ -17,7 +18,8 @@ public Command parseCommand(String userInput) { try { return reformatAddCommandInput(userInput); } catch (InvalidAddFlashcardInputException e) { - System.out.println("The input is in an incorrect format, please follow the format in user guide"); + System.out.println( + "The input is in an incorrect format, please follow the format in user guide"); } catch (EmptyFlashcardQuestionException e) { System.out.println("The question of this card is empty, please enter one."); } catch (EmptyFlashcardAnswerException e) { @@ -31,14 +33,18 @@ public Command parseCommand(String userInput) { } /** - * Constructs an AddCommand from the input of the user, if the input is of an incorrect - * format, a respective exception will be thrown. + * Constructs an AddCommand from the input of the user, if the input is of an + * incorrect format, a respective exception will be thrown. * * @param userInput The input collected by Ui from the user. - * @return An AddCommand with the question and answer text extracted from user input. - * @throws InvalidAddFlashcardInputException If the start indicators cannot be found. - * @throws EmptyFlashcardQuestionException If the string is empty after QUESTION_START_INDICATOR. - * @throws EmptyFlashcardAnswerException If the string is empty after ANSWER_START_INDICATOR. + * @return An AddCommand with the question and answer text extracted from user + * input. + * @throws InvalidAddFlashcardInputException If the start indicators cannot be + * found. + * @throws EmptyFlashcardQuestionException If the string is empty after + * QUESTION_START_INDICATOR. + * @throws EmptyFlashcardAnswerException If the string is empty after + * ANSWER_START_INDICATOR. */ public AddCommand reformatAddCommandInput(String userInput) throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, @@ -48,16 +54,18 @@ public AddCommand reformatAddCommandInput(String userInput) if (positionOfStartOfAnswer == -1 || positionOfStartOfQuestion == -1) { throw new InvalidAddFlashcardInputException(); } - String questionText = userInput.substring(positionOfStartOfQuestion + - QUESTION_START_INDICATOR.length(), positionOfStartOfAnswer).trim(); - String answerText = userInput.substring(positionOfStartOfAnswer + - ANSWER_START_INDICATOR.length()).trim(); + String questionText = userInput + .substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length(), + positionOfStartOfAnswer) + .trim(); + String answerText = userInput + .substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length()).trim(); if (questionText.isEmpty()) { throw new EmptyFlashcardQuestionException(); } if (answerText.isEmpty()) { throw new EmptyFlashcardAnswerException(); } - return new AddCommand(questionText,answerText); + return new AddCommand(questionText, answerText); } } diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/duke/Duke.java index 5c74e68d59..145d372b9a 100644 --- a/src/main/java/seedu/duke/Duke.java +++ b/src/main/java/seedu/duke/Duke.java @@ -7,10 +7,8 @@ public class Duke { * Main entry-point for the java.duke.Duke application. */ public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" + String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + + "| | | | | | | |/ / _ \\\n" + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); System.out.println("What is your name?"); diff --git a/src/main/java/ui/Ui.java b/src/main/java/ui/Ui.java index b3e2094b6b..1a4811e833 100644 --- a/src/main/java/ui/Ui.java +++ b/src/main/java/ui/Ui.java @@ -23,9 +23,10 @@ public Ui(InputStream in, PrintStream out) { } /** - * Prompts for the command and reads the text entered by the user. - * Ignores empty, pure whitespace, and comment lines. - * Echos the command back to the user. + * Prompts for the command and reads the text entered by the user. Ignores + * empty, pure whitespace, and comment lines. Echos the command back to the + * user. + * * @return command (full line) entered by the user */ public String getUserCommand() { @@ -33,9 +34,8 @@ public String getUserCommand() { } public void printSuccessfulAddMessage(String questionText, String answerText) { - System.out.println("A new card is now added:" + System.lineSeparator() + - "Question: " + questionText + System.lineSeparator() + - "Answer: " + answerText); + System.out.println("A new card is now added:" + System.lineSeparator() + "Question: " + + questionText + System.lineSeparator() + "Answer: " + answerText); } public void printInvalidInput() { diff --git a/src/test/java/objects/flashcard/FlashcardTest.java b/src/test/java/objects/flashcard/FlashcardTest.java index dfe55dbe89..52595d3b48 100644 --- a/src/test/java/objects/flashcard/FlashcardTest.java +++ b/src/test/java/objects/flashcard/FlashcardTest.java @@ -1,13 +1,13 @@ package objects.flashcard; + import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; - class FlashcardTest { @Test public void constructNewFlashcard_correctlyFormattedInputs_success() { - Flashcard testCard = new Flashcard("QUESTION","ANSWER"); + Flashcard testCard = new Flashcard("QUESTION", "ANSWER"); assertEquals("QUESTION", testCard.getQuestionText()); assertEquals("ANSWER", testCard.getAnswerText()); } diff --git a/src/test/java/parser/ParserTest.java b/src/test/java/parser/ParserTest.java index 701bf30423..1b3ab6e792 100644 --- a/src/test/java/parser/ParserTest.java +++ b/src/test/java/parser/ParserTest.java @@ -11,7 +11,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; - class ParserTest { @Test public void parseAddCommand_correctlyFormattedInput_successful() { From 28a0d8f7ef4fabec22b3a46ae247018db567ab11 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Thu, 9 Mar 2023 20:28:06 +0800 Subject: [PATCH 016/174] Set up Clanki for use with Gradle Signed-off-by: Vu Van Dung --- .gitignore | 3 ++ build.gradle | 4 +- .../{Main.java => com/clanki/Clanki.java} | 19 ++++---- .../{ => com/clanki}/commands/AddCommand.java | 12 ++--- .../{ => com/clanki}/commands/Command.java | 6 +-- .../com/clanki/commands/UnknownCommand.java | 11 +++++ .../clanki}/objects/FlashcardList.java | 6 +-- .../EmptyFlashcardAnswerException.java | 4 ++ .../EmptyFlashcardQuestionException.java | 4 ++ .../InvalidAddFlashcardInputException.java | 4 +- .../clanki}/objects/flashcard/Flashcard.java | 3 +- .../java/{ => com/clanki}/parser/Parser.java | 46 +++++++++++-------- src/main/java/{ => com/clanki}/ui/Ui.java | 15 +++--- src/main/java/commands/UnknownCommand.java | 11 ----- .../EmptyFlashcardAnswerException.java | 4 -- .../EmptyFlashcardQuestionException.java | 4 -- src/main/java/seedu/duke/Duke.java | 21 --------- .../objects/flashcard/FlashcardTest.java | 6 +-- .../{ => com/clanki}/parser/ParserTest.java | 13 +++--- src/test/java/seedu/duke/DukeTest.java | 12 ----- 20 files changed, 93 insertions(+), 115 deletions(-) rename src/main/java/{Main.java => com/clanki/Clanki.java} (59%) rename src/main/java/{ => com/clanki}/commands/AddCommand.java (66%) rename src/main/java/{ => com/clanki}/commands/Command.java (73%) create mode 100644 src/main/java/com/clanki/commands/UnknownCommand.java rename src/main/java/{ => com/clanki}/objects/FlashcardList.java (67%) create mode 100644 src/main/java/com/clanki/objects/exceptions/EmptyFlashcardAnswerException.java create mode 100644 src/main/java/com/clanki/objects/exceptions/EmptyFlashcardQuestionException.java rename src/main/java/{ => com/clanki}/objects/exceptions/InvalidAddFlashcardInputException.java (61%) rename src/main/java/{ => com/clanki}/objects/flashcard/Flashcard.java (91%) rename src/main/java/{ => com/clanki}/parser/Parser.java (57%) rename src/main/java/{ => com/clanki}/ui/Ui.java (80%) delete mode 100644 src/main/java/commands/UnknownCommand.java delete mode 100644 src/main/java/objects/exceptions/EmptyFlashcardAnswerException.java delete mode 100644 src/main/java/objects/exceptions/EmptyFlashcardQuestionException.java delete mode 100644 src/main/java/seedu/duke/Duke.java rename src/test/java/{ => com/clanki}/objects/flashcard/FlashcardTest.java (76%) rename src/test/java/{ => com/clanki}/parser/ParserTest.java (81%) delete mode 100644 src/test/java/seedu/duke/DukeTest.java diff --git a/.gitignore b/.gitignore index 2873e189e1..b2e4901bfd 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,9 @@ /out/ /*.iml +# VSCode setting files +.vscode/ + # Gradle build files /.gradle/ /build/ diff --git a/build.gradle b/build.gradle index d5e548e85f..1a3333af86 100644 --- a/build.gradle +++ b/build.gradle @@ -29,11 +29,11 @@ test { } application { - mainClass = "seedu.duke.Duke" + mainClass = "com.clanki.Clanki" } shadowJar { - archiveBaseName = "duke" + archiveBaseName = "clanki" archiveClassifier = null } diff --git a/src/main/java/Main.java b/src/main/java/com/clanki/Clanki.java similarity index 59% rename from src/main/java/Main.java rename to src/main/java/com/clanki/Clanki.java index 993ed3eb27..0812669f8f 100644 --- a/src/main/java/Main.java +++ b/src/main/java/com/clanki/Clanki.java @@ -1,14 +1,16 @@ -import commands.Command; -import objects.FlashcardList; -import parser.Parser; -import ui.Ui; +package com.clanki; -public class Main { +import com.clanki.commands.Command; +import com.clanki.objects.FlashcardList; +import com.clanki.parser.Parser; +import com.clanki.ui.Ui; + +public class Clanki { private Ui ui; private FlashcardList flashcardList; private Parser parser; - public Main() { + public Clanki() { this.ui = new Ui(); this.flashcardList = new FlashcardList(); this.parser = new Parser(); @@ -19,7 +21,8 @@ public void run() { Command command = parser.parseCommand(inputText); command.execute(flashcardList, ui); } - public static void main() { - new Main().run(); + + public static void main(String[] args) { + new Clanki().run(); } } diff --git a/src/main/java/commands/AddCommand.java b/src/main/java/com/clanki/commands/AddCommand.java similarity index 66% rename from src/main/java/commands/AddCommand.java rename to src/main/java/com/clanki/commands/AddCommand.java index d7660e0737..6610e09182 100644 --- a/src/main/java/commands/AddCommand.java +++ b/src/main/java/com/clanki/commands/AddCommand.java @@ -1,13 +1,13 @@ -package commands; +package com.clanki.commands; -import objects.FlashcardList; -import ui.Ui; +import com.clanki.objects.FlashcardList; +import com.clanki.ui.Ui; /** * A type of command that will instruct to add a new element into the ArrayList * of flashcards. */ -public class AddCommand extends Command{ +public class AddCommand extends Command { String questionText; String answerText; @@ -23,8 +23,8 @@ public String toString() { @Override public void execute(FlashcardList flashcardList, Ui display) { - flashcardList.addNewFlashcard(questionText,answerText); - display.printSuccessfulAddMessage(questionText,answerText); + flashcardList.addNewFlashcard(questionText, answerText); + display.printSuccessfulAddMessage(questionText, answerText); } } diff --git a/src/main/java/commands/Command.java b/src/main/java/com/clanki/commands/Command.java similarity index 73% rename from src/main/java/commands/Command.java rename to src/main/java/com/clanki/commands/Command.java index 4fec6da4d7..5b4dff30f1 100644 --- a/src/main/java/commands/Command.java +++ b/src/main/java/com/clanki/commands/Command.java @@ -1,8 +1,8 @@ -package commands; +package com.clanki.commands; -import objects.FlashcardList; -import ui.Ui; +import com.clanki.objects.FlashcardList; +import com.clanki.ui.Ui; /** * Represents a command that is instructed for the program to conduct. A Command diff --git a/src/main/java/com/clanki/commands/UnknownCommand.java b/src/main/java/com/clanki/commands/UnknownCommand.java new file mode 100644 index 0000000000..9a3be9a679 --- /dev/null +++ b/src/main/java/com/clanki/commands/UnknownCommand.java @@ -0,0 +1,11 @@ +package com.clanki.commands; + +import com.clanki.objects.FlashcardList; +import com.clanki.ui.Ui; + +public class UnknownCommand extends Command { + @Override + public void execute(FlashcardList flashcardList, Ui display) { + display.printInvalidInput(); + } +} diff --git a/src/main/java/objects/FlashcardList.java b/src/main/java/com/clanki/objects/FlashcardList.java similarity index 67% rename from src/main/java/objects/FlashcardList.java rename to src/main/java/com/clanki/objects/FlashcardList.java index a3ea2c84d8..1db5d3d46e 100644 --- a/src/main/java/objects/FlashcardList.java +++ b/src/main/java/com/clanki/objects/FlashcardList.java @@ -1,6 +1,6 @@ -package objects; +package com.clanki.objects; -import objects.flashcard.Flashcard; +import com.clanki.objects.flashcard.Flashcard; import java.util.ArrayList; @@ -12,7 +12,7 @@ public FlashcardList() { } public void addNewFlashcard(String questionText, String answerText) { - Flashcard newFlashcard = new Flashcard(questionText,answerText); + Flashcard newFlashcard = new Flashcard(questionText, answerText); flashcards.add(newFlashcard); } } diff --git a/src/main/java/com/clanki/objects/exceptions/EmptyFlashcardAnswerException.java b/src/main/java/com/clanki/objects/exceptions/EmptyFlashcardAnswerException.java new file mode 100644 index 0000000000..9e3f7c1b0f --- /dev/null +++ b/src/main/java/com/clanki/objects/exceptions/EmptyFlashcardAnswerException.java @@ -0,0 +1,4 @@ +package com.clanki.objects.exceptions; + +public class EmptyFlashcardAnswerException extends Exception { +} diff --git a/src/main/java/com/clanki/objects/exceptions/EmptyFlashcardQuestionException.java b/src/main/java/com/clanki/objects/exceptions/EmptyFlashcardQuestionException.java new file mode 100644 index 0000000000..27e016c300 --- /dev/null +++ b/src/main/java/com/clanki/objects/exceptions/EmptyFlashcardQuestionException.java @@ -0,0 +1,4 @@ +package com.clanki.objects.exceptions; + +public class EmptyFlashcardQuestionException extends Exception { +} diff --git a/src/main/java/objects/exceptions/InvalidAddFlashcardInputException.java b/src/main/java/com/clanki/objects/exceptions/InvalidAddFlashcardInputException.java similarity index 61% rename from src/main/java/objects/exceptions/InvalidAddFlashcardInputException.java rename to src/main/java/com/clanki/objects/exceptions/InvalidAddFlashcardInputException.java index 9bc830cc6e..8cba875e1d 100644 --- a/src/main/java/objects/exceptions/InvalidAddFlashcardInputException.java +++ b/src/main/java/com/clanki/objects/exceptions/InvalidAddFlashcardInputException.java @@ -1,4 +1,4 @@ -package objects.exceptions; +package com.clanki.objects.exceptions; -public class InvalidAddFlashcardInputException extends Exception{ +public class InvalidAddFlashcardInputException extends Exception { } diff --git a/src/main/java/objects/flashcard/Flashcard.java b/src/main/java/com/clanki/objects/flashcard/Flashcard.java similarity index 91% rename from src/main/java/objects/flashcard/Flashcard.java rename to src/main/java/com/clanki/objects/flashcard/Flashcard.java index 10238c4638..6f5aad8c78 100644 --- a/src/main/java/objects/flashcard/Flashcard.java +++ b/src/main/java/com/clanki/objects/flashcard/Flashcard.java @@ -1,5 +1,4 @@ -package objects.flashcard; - +package com.clanki.objects.flashcard; public class Flashcard { private String questionText; diff --git a/src/main/java/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java similarity index 57% rename from src/main/java/parser/Parser.java rename to src/main/java/com/clanki/parser/Parser.java index f741302ce5..36a00f839a 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -1,15 +1,16 @@ -package parser; +package com.clanki.parser; -import commands.AddCommand; -import commands.Command; -import commands.UnknownCommand; -import objects.exceptions.EmptyFlashcardAnswerException; -import objects.exceptions.EmptyFlashcardQuestionException; -import objects.exceptions.InvalidAddFlashcardInputException; +import com.clanki.commands.AddCommand; +import com.clanki.commands.Command; +import com.clanki.commands.UnknownCommand; +import com.clanki.objects.exceptions.EmptyFlashcardAnswerException; +import com.clanki.objects.exceptions.EmptyFlashcardQuestionException; +import com.clanki.objects.exceptions.InvalidAddFlashcardInputException; public class Parser { public static final String QUESTION_START_INDICATOR = "/q"; public static final String ANSWER_START_INDICATOR = "/a"; + public Command parseCommand(String userInput) { String commandPhrase = userInput.split(" ")[0]; switch (commandPhrase) { @@ -17,7 +18,8 @@ public Command parseCommand(String userInput) { try { return reformatAddCommandInput(userInput); } catch (InvalidAddFlashcardInputException e) { - System.out.println("The input is in an incorrect format, please follow the format in user guide"); + System.out.println( + "The input is in an incorrect format, please follow the format in user guide"); } catch (EmptyFlashcardQuestionException e) { System.out.println("The question of this card is empty, please enter one."); } catch (EmptyFlashcardAnswerException e) { @@ -31,14 +33,18 @@ public Command parseCommand(String userInput) { } /** - * Constructs an AddCommand from the input of the user, if the input is of an incorrect - * format, a respective exception will be thrown. + * Constructs an AddCommand from the input of the user, if the input is of an + * incorrect format, a respective exception will be thrown. * * @param userInput The input collected by Ui from the user. - * @return An AddCommand with the question and answer text extracted from user input. - * @throws InvalidAddFlashcardInputException If the start indicators cannot be found. - * @throws EmptyFlashcardQuestionException If the string is empty after QUESTION_START_INDICATOR. - * @throws EmptyFlashcardAnswerException If the string is empty after ANSWER_START_INDICATOR. + * @return An AddCommand with the question and answer text extracted from user + * input. + * @throws InvalidAddFlashcardInputException If the start indicators cannot be + * found. + * @throws EmptyFlashcardQuestionException If the string is empty after + * QUESTION_START_INDICATOR. + * @throws EmptyFlashcardAnswerException If the string is empty after + * ANSWER_START_INDICATOR. */ public AddCommand reformatAddCommandInput(String userInput) throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, @@ -48,16 +54,18 @@ public AddCommand reformatAddCommandInput(String userInput) if (positionOfStartOfAnswer == -1 || positionOfStartOfQuestion == -1) { throw new InvalidAddFlashcardInputException(); } - String questionText = userInput.substring(positionOfStartOfQuestion + - QUESTION_START_INDICATOR.length(), positionOfStartOfAnswer).trim(); - String answerText = userInput.substring(positionOfStartOfAnswer + - ANSWER_START_INDICATOR.length()).trim(); + String questionText = userInput + .substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length(), + positionOfStartOfAnswer) + .trim(); + String answerText = userInput + .substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length()).trim(); if (questionText.isEmpty()) { throw new EmptyFlashcardQuestionException(); } if (answerText.isEmpty()) { throw new EmptyFlashcardAnswerException(); } - return new AddCommand(questionText,answerText); + return new AddCommand(questionText, answerText); } } diff --git a/src/main/java/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java similarity index 80% rename from src/main/java/ui/Ui.java rename to src/main/java/com/clanki/ui/Ui.java index b3e2094b6b..3bbcefc99a 100644 --- a/src/main/java/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -1,4 +1,4 @@ -package ui; +package com.clanki.ui; import java.io.InputStream; import java.io.PrintStream; @@ -23,9 +23,10 @@ public Ui(InputStream in, PrintStream out) { } /** - * Prompts for the command and reads the text entered by the user. - * Ignores empty, pure whitespace, and comment lines. - * Echos the command back to the user. + * Prompts for the command and reads the text entered by the user. Ignores + * empty, pure whitespace, and comment lines. Echos the command back to the + * user. + * * @return command (full line) entered by the user */ public String getUserCommand() { @@ -33,13 +34,11 @@ public String getUserCommand() { } public void printSuccessfulAddMessage(String questionText, String answerText) { - System.out.println("A new card is now added:" + System.lineSeparator() + - "Question: " + questionText + System.lineSeparator() + - "Answer: " + answerText); + System.out.println("A new card is now added:" + System.lineSeparator() + "Question: " + + questionText + System.lineSeparator() + "Answer: " + answerText); } public void printInvalidInput() { System.out.println("The input is in an incorrect format."); } - } diff --git a/src/main/java/commands/UnknownCommand.java b/src/main/java/commands/UnknownCommand.java deleted file mode 100644 index 1dbc2bbbc6..0000000000 --- a/src/main/java/commands/UnknownCommand.java +++ /dev/null @@ -1,11 +0,0 @@ -package commands; - -import objects.FlashcardList; -import ui.Ui; - -public class UnknownCommand extends Command{ - @Override - public void execute(FlashcardList flashcardList, Ui display) { - display.printInvalidInput(); - } -} diff --git a/src/main/java/objects/exceptions/EmptyFlashcardAnswerException.java b/src/main/java/objects/exceptions/EmptyFlashcardAnswerException.java deleted file mode 100644 index 18b5651e92..0000000000 --- a/src/main/java/objects/exceptions/EmptyFlashcardAnswerException.java +++ /dev/null @@ -1,4 +0,0 @@ -package objects.exceptions; - -public class EmptyFlashcardAnswerException extends Exception{ -} diff --git a/src/main/java/objects/exceptions/EmptyFlashcardQuestionException.java b/src/main/java/objects/exceptions/EmptyFlashcardQuestionException.java deleted file mode 100644 index 34922f9d36..0000000000 --- a/src/main/java/objects/exceptions/EmptyFlashcardQuestionException.java +++ /dev/null @@ -1,4 +0,0 @@ -package objects.exceptions; - -public class EmptyFlashcardQuestionException extends Exception{ -} diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/duke/Duke.java deleted file mode 100644 index 5c74e68d59..0000000000 --- a/src/main/java/seedu/duke/Duke.java +++ /dev/null @@ -1,21 +0,0 @@ -package seedu.duke; - -import java.util.Scanner; - -public class Duke { - /** - * Main entry-point for the java.duke.Duke application. - */ - public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); - System.out.println("What is your name?"); - - Scanner in = new Scanner(System.in); - System.out.println("Hello " + in.nextLine()); - } -} diff --git a/src/test/java/objects/flashcard/FlashcardTest.java b/src/test/java/com/clanki/objects/flashcard/FlashcardTest.java similarity index 76% rename from src/test/java/objects/flashcard/FlashcardTest.java rename to src/test/java/com/clanki/objects/flashcard/FlashcardTest.java index dfe55dbe89..78da832798 100644 --- a/src/test/java/objects/flashcard/FlashcardTest.java +++ b/src/test/java/com/clanki/objects/flashcard/FlashcardTest.java @@ -1,13 +1,13 @@ -package objects.flashcard; +package com.clanki.objects.flashcard; + import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; - class FlashcardTest { @Test public void constructNewFlashcard_correctlyFormattedInputs_success() { - Flashcard testCard = new Flashcard("QUESTION","ANSWER"); + Flashcard testCard = new Flashcard("QUESTION", "ANSWER"); assertEquals("QUESTION", testCard.getQuestionText()); assertEquals("ANSWER", testCard.getAnswerText()); } diff --git a/src/test/java/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java similarity index 81% rename from src/test/java/parser/ParserTest.java rename to src/test/java/com/clanki/parser/ParserTest.java index 701bf30423..533347cbf3 100644 --- a/src/test/java/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -1,17 +1,16 @@ -package parser; +package com.clanki.parser; -import commands.AddCommand; -import commands.Command; -import objects.exceptions.EmptyFlashcardAnswerException; -import objects.exceptions.EmptyFlashcardQuestionException; -import objects.exceptions.InvalidAddFlashcardInputException; +import com.clanki.commands.AddCommand; +import com.clanki.commands.Command; +import com.clanki.objects.exceptions.EmptyFlashcardAnswerException; +import com.clanki.objects.exceptions.EmptyFlashcardQuestionException; +import com.clanki.objects.exceptions.InvalidAddFlashcardInputException; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; - class ParserTest { @Test public void parseAddCommand_correctlyFormattedInput_successful() { diff --git a/src/test/java/seedu/duke/DukeTest.java b/src/test/java/seedu/duke/DukeTest.java deleted file mode 100644 index 2dda5fd651..0000000000 --- a/src/test/java/seedu/duke/DukeTest.java +++ /dev/null @@ -1,12 +0,0 @@ -package seedu.duke; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -import org.junit.jupiter.api.Test; - -class DukeTest { - @Test - public void sampleTest() { - assertTrue(true); - } -} From 9ddf52a9b422f47d757e9f2b2f2cf23a8303ed91 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Thu, 9 Mar 2023 20:32:56 +0800 Subject: [PATCH 017/174] Update text-ui-test Signed-off-by: Vu Van Dung --- text-ui-test/EXPECTED.TXT | 12 +++--------- text-ui-test/input.txt | 2 +- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 892cb6cae7..ccae3a65a2 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,9 +1,3 @@ -Hello from - ____ _ -| _ \ _ _| | _____ -| | | | | | | |/ / _ \ -| |_| | |_| | < __/ -|____/ \__,_|_|\_\___| - -What is your name? -Hello James Gosling +A new card is now added: +Question: hello +Answer: world diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index f6ec2e9f95..1d03d03d68 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1 +1 @@ -James Gosling \ No newline at end of file +add /q hello /a world From 6e9693f70087478acd1b9fff80a12d28b480b6e7 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Thu, 9 Mar 2023 22:48:32 +0800 Subject: [PATCH 018/174] Restructuring Signed-off-by: Vu Van Dung --- .../exceptions/EmptyFlashcardAnswerException.java | 2 +- .../exceptions/EmptyFlashcardQuestionException.java | 2 +- .../exceptions/InvalidAddFlashcardInputException.java | 2 +- .../java/com/clanki/objects/{flashcard => }/Flashcard.java | 2 +- src/main/java/com/clanki/objects/FlashcardList.java | 2 -- src/main/java/com/clanki/parser/Parser.java | 6 +++--- .../com/clanki/objects/{flashcard => }/FlashcardTest.java | 3 ++- src/test/java/com/clanki/parser/ParserTest.java | 7 ++++--- 8 files changed, 13 insertions(+), 13 deletions(-) rename src/main/java/com/clanki/{objects => }/exceptions/EmptyFlashcardAnswerException.java (62%) rename src/main/java/com/clanki/{objects => }/exceptions/EmptyFlashcardQuestionException.java (63%) rename src/main/java/com/clanki/{objects => }/exceptions/InvalidAddFlashcardInputException.java (64%) rename src/main/java/com/clanki/objects/{flashcard => }/Flashcard.java (91%) rename src/test/java/com/clanki/objects/{flashcard => }/FlashcardTest.java (91%) diff --git a/src/main/java/com/clanki/objects/exceptions/EmptyFlashcardAnswerException.java b/src/main/java/com/clanki/exceptions/EmptyFlashcardAnswerException.java similarity index 62% rename from src/main/java/com/clanki/objects/exceptions/EmptyFlashcardAnswerException.java rename to src/main/java/com/clanki/exceptions/EmptyFlashcardAnswerException.java index 9e3f7c1b0f..31b538623a 100644 --- a/src/main/java/com/clanki/objects/exceptions/EmptyFlashcardAnswerException.java +++ b/src/main/java/com/clanki/exceptions/EmptyFlashcardAnswerException.java @@ -1,4 +1,4 @@ -package com.clanki.objects.exceptions; +package com.clanki.exceptions; public class EmptyFlashcardAnswerException extends Exception { } diff --git a/src/main/java/com/clanki/objects/exceptions/EmptyFlashcardQuestionException.java b/src/main/java/com/clanki/exceptions/EmptyFlashcardQuestionException.java similarity index 63% rename from src/main/java/com/clanki/objects/exceptions/EmptyFlashcardQuestionException.java rename to src/main/java/com/clanki/exceptions/EmptyFlashcardQuestionException.java index 27e016c300..828a9c517e 100644 --- a/src/main/java/com/clanki/objects/exceptions/EmptyFlashcardQuestionException.java +++ b/src/main/java/com/clanki/exceptions/EmptyFlashcardQuestionException.java @@ -1,4 +1,4 @@ -package com.clanki.objects.exceptions; +package com.clanki.exceptions; public class EmptyFlashcardQuestionException extends Exception { } diff --git a/src/main/java/com/clanki/objects/exceptions/InvalidAddFlashcardInputException.java b/src/main/java/com/clanki/exceptions/InvalidAddFlashcardInputException.java similarity index 64% rename from src/main/java/com/clanki/objects/exceptions/InvalidAddFlashcardInputException.java rename to src/main/java/com/clanki/exceptions/InvalidAddFlashcardInputException.java index 8cba875e1d..352ab97fed 100644 --- a/src/main/java/com/clanki/objects/exceptions/InvalidAddFlashcardInputException.java +++ b/src/main/java/com/clanki/exceptions/InvalidAddFlashcardInputException.java @@ -1,4 +1,4 @@ -package com.clanki.objects.exceptions; +package com.clanki.exceptions; public class InvalidAddFlashcardInputException extends Exception { } diff --git a/src/main/java/com/clanki/objects/flashcard/Flashcard.java b/src/main/java/com/clanki/objects/Flashcard.java similarity index 91% rename from src/main/java/com/clanki/objects/flashcard/Flashcard.java rename to src/main/java/com/clanki/objects/Flashcard.java index 6f5aad8c78..8037b8af35 100644 --- a/src/main/java/com/clanki/objects/flashcard/Flashcard.java +++ b/src/main/java/com/clanki/objects/Flashcard.java @@ -1,4 +1,4 @@ -package com.clanki.objects.flashcard; +package com.clanki.objects; public class Flashcard { private String questionText; diff --git a/src/main/java/com/clanki/objects/FlashcardList.java b/src/main/java/com/clanki/objects/FlashcardList.java index 1db5d3d46e..6503fb76ca 100644 --- a/src/main/java/com/clanki/objects/FlashcardList.java +++ b/src/main/java/com/clanki/objects/FlashcardList.java @@ -1,7 +1,5 @@ package com.clanki.objects; -import com.clanki.objects.flashcard.Flashcard; - import java.util.ArrayList; public class FlashcardList { diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index 36a00f839a..de8dbf6ae2 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -3,9 +3,9 @@ import com.clanki.commands.AddCommand; import com.clanki.commands.Command; import com.clanki.commands.UnknownCommand; -import com.clanki.objects.exceptions.EmptyFlashcardAnswerException; -import com.clanki.objects.exceptions.EmptyFlashcardQuestionException; -import com.clanki.objects.exceptions.InvalidAddFlashcardInputException; +import com.clanki.exceptions.EmptyFlashcardAnswerException; +import com.clanki.exceptions.EmptyFlashcardQuestionException; +import com.clanki.exceptions.InvalidAddFlashcardInputException; public class Parser { public static final String QUESTION_START_INDICATOR = "/q"; diff --git a/src/test/java/com/clanki/objects/flashcard/FlashcardTest.java b/src/test/java/com/clanki/objects/FlashcardTest.java similarity index 91% rename from src/test/java/com/clanki/objects/flashcard/FlashcardTest.java rename to src/test/java/com/clanki/objects/FlashcardTest.java index 78da832798..42597151be 100644 --- a/src/test/java/com/clanki/objects/flashcard/FlashcardTest.java +++ b/src/test/java/com/clanki/objects/FlashcardTest.java @@ -1,7 +1,8 @@ -package com.clanki.objects.flashcard; +package com.clanki.objects; import org.junit.jupiter.api.Test; + import static org.junit.jupiter.api.Assertions.assertEquals; class FlashcardTest { diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index 533347cbf3..ad85d014dc 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -3,9 +3,10 @@ import com.clanki.commands.AddCommand; import com.clanki.commands.Command; -import com.clanki.objects.exceptions.EmptyFlashcardAnswerException; -import com.clanki.objects.exceptions.EmptyFlashcardQuestionException; -import com.clanki.objects.exceptions.InvalidAddFlashcardInputException; +import com.clanki.exceptions.EmptyFlashcardAnswerException; +import com.clanki.exceptions.EmptyFlashcardQuestionException; +import com.clanki.exceptions.InvalidAddFlashcardInputException; + import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; From be7d316c8ad583dec371640baebe6defd793813c Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Thu, 9 Mar 2023 23:01:27 +0800 Subject: [PATCH 019/174] Implement additional properties and methods of the Flashcard class Signed-off-by: Vu Van Dung --- .../java/com/clanki/objects/Flashcard.java | 46 ++++++++++++++++++- .../com/clanki/objects/FlashcardTest.java | 4 +- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/clanki/objects/Flashcard.java b/src/main/java/com/clanki/objects/Flashcard.java index 8037b8af35..6fa8232a95 100644 --- a/src/main/java/com/clanki/objects/Flashcard.java +++ b/src/main/java/com/clanki/objects/Flashcard.java @@ -1,19 +1,61 @@ package com.clanki.objects; +import java.time.LocalDate; + public class Flashcard { + private final double SPACED_REPETITION_FACTOR = 1.5; private String questionText; private String answerText; + private LocalDate dueDate; + private int currentPeriodInDays; public Flashcard(String questionText, String answerText) { this.questionText = questionText; this.answerText = answerText; + this.dueDate = LocalDate.now(); + this.currentPeriodInDays = 0; } - public String getQuestionText() { + public String getQuestion() { return questionText; } - public String getAnswerText() { + public void setQuestion(String questionText) { + this.questionText = questionText; + } + + public String getAnswer() { return answerText; } + + public void setAnswer(String answerText) { + this.answerText = answerText; + } + + public boolean isDueToday() { + return this.dueDate.isEqual(LocalDate.now()); + } + + /** + * Reset dueDate and currentPeriodInDays as if the + * card was just created. + */ + public void updateDueDateAfterIncorrectAnswer() { + this.dueDate = LocalDate.now(); + this.currentPeriodInDays = 0; + } + + /** + * Update dueDate and currentPeriodInDays according to + * the spaced repetition algorithm. Which is very simple, to be honest, but it + * does the job. + */ + public void updateDueDateAfterCorrectAnswer() { + if (this.currentPeriodInDays == 0) { + this.currentPeriodInDays = 1; + } else { + this.currentPeriodInDays *= SPACED_REPETITION_FACTOR; + } + this.dueDate = this.dueDate.plusDays(this.currentPeriodInDays); + } } diff --git a/src/test/java/com/clanki/objects/FlashcardTest.java b/src/test/java/com/clanki/objects/FlashcardTest.java index 42597151be..3875dbfc70 100644 --- a/src/test/java/com/clanki/objects/FlashcardTest.java +++ b/src/test/java/com/clanki/objects/FlashcardTest.java @@ -9,7 +9,7 @@ class FlashcardTest { @Test public void constructNewFlashcard_correctlyFormattedInputs_success() { Flashcard testCard = new Flashcard("QUESTION", "ANSWER"); - assertEquals("QUESTION", testCard.getQuestionText()); - assertEquals("ANSWER", testCard.getAnswerText()); + assertEquals("QUESTION", testCard.getQuestion()); + assertEquals("ANSWER", testCard.getAnswer()); } } From 917c2639aa3123646af8ef5ff8a6435e9b6d408e Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Thu, 9 Mar 2023 23:16:54 +0800 Subject: [PATCH 020/174] Add some tests and refine due date formula Signed-off-by: Vu Van Dung --- .../java/com/clanki/objects/Flashcard.java | 20 ++++++++++- .../com/clanki/objects/FlashcardTest.java | 36 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/objects/Flashcard.java b/src/main/java/com/clanki/objects/Flashcard.java index 6fa8232a95..3fa62637da 100644 --- a/src/main/java/com/clanki/objects/Flashcard.java +++ b/src/main/java/com/clanki/objects/Flashcard.java @@ -1,5 +1,6 @@ package com.clanki.objects; +import java.lang.Math; import java.time.LocalDate; public class Flashcard { @@ -16,6 +17,14 @@ public Flashcard(String questionText, String answerText) { this.currentPeriodInDays = 0; } + public Flashcard(String questionText, String answerText, LocalDate dueDate, + int currentPeriodInDays) { + this.questionText = questionText; + this.answerText = answerText; + this.dueDate = dueDate; + this.currentPeriodInDays = currentPeriodInDays; + } + public String getQuestion() { return questionText; } @@ -32,6 +41,14 @@ public void setAnswer(String answerText) { this.answerText = answerText; } + public LocalDate getDueDate() { + return dueDate; + } + + public int getCurrentPeriodInDays() { + return currentPeriodInDays; + } + public boolean isDueToday() { return this.dueDate.isEqual(LocalDate.now()); } @@ -54,7 +71,8 @@ public void updateDueDateAfterCorrectAnswer() { if (this.currentPeriodInDays == 0) { this.currentPeriodInDays = 1; } else { - this.currentPeriodInDays *= SPACED_REPETITION_FACTOR; + double newPeriod = this.currentPeriodInDays * SPACED_REPETITION_FACTOR; + this.currentPeriodInDays = (int) Math.ceil(newPeriod); } this.dueDate = this.dueDate.plusDays(this.currentPeriodInDays); } diff --git a/src/test/java/com/clanki/objects/FlashcardTest.java b/src/test/java/com/clanki/objects/FlashcardTest.java index 3875dbfc70..d8049e9422 100644 --- a/src/test/java/com/clanki/objects/FlashcardTest.java +++ b/src/test/java/com/clanki/objects/FlashcardTest.java @@ -5,11 +5,47 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.time.LocalDate; + class FlashcardTest { @Test public void constructNewFlashcard_correctlyFormattedInputs_success() { Flashcard testCard = new Flashcard("QUESTION", "ANSWER"); assertEquals("QUESTION", testCard.getQuestion()); assertEquals("ANSWER", testCard.getAnswer()); + assertEquals(LocalDate.now(), testCard.getDueDate()); + assertEquals(0, testCard.getCurrentPeriodInDays()); + assertEquals(true, testCard.isDueToday()); + } + + @Test + public void updateFlashcard_incorrectAnswer_shouldResetDatesToToday() { + Flashcard testCard = new Flashcard("QUESTION", "ANSWER", LocalDate.now(), 1); + testCard.updateDueDateAfterIncorrectAnswer(); + assertEquals(LocalDate.now(), testCard.getDueDate()); + assertEquals(0, testCard.getCurrentPeriodInDays()); + } + + @Test + public void updateFlashcard_correctAnswer_shouldUpdateDates() { + Flashcard testCard = new Flashcard("q1", "a1"); + testCard.updateDueDateAfterCorrectAnswer(); + assertEquals(LocalDate.now().plusDays(1), testCard.getDueDate()); + assertEquals(1, testCard.getCurrentPeriodInDays()); + + testCard = new Flashcard("q2", "a2", LocalDate.now(), 1); + testCard.updateDueDateAfterCorrectAnswer(); + assertEquals(LocalDate.now().plusDays(2), testCard.getDueDate()); + assertEquals(2, testCard.getCurrentPeriodInDays()); + + testCard = new Flashcard("q3", "a3", LocalDate.now(), 2); + testCard.updateDueDateAfterCorrectAnswer(); + assertEquals(LocalDate.now().plusDays(3), testCard.getDueDate()); + assertEquals(3, testCard.getCurrentPeriodInDays()); + + testCard = new Flashcard("q4", "a4", LocalDate.now(), 45); + testCard.updateDueDateAfterCorrectAnswer(); + assertEquals(LocalDate.now().plusDays(68), testCard.getDueDate()); + assertEquals(68, testCard.getCurrentPeriodInDays()); } } From 1718e245611ba543ae11d27de1d435ff5b848fa6 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Thu, 9 Mar 2023 23:20:19 +0800 Subject: [PATCH 021/174] Remove redundant import Why didn't VSCode flag this to me? Signed-off-by: Vu Van Dung --- src/main/java/com/clanki/objects/Flashcard.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/clanki/objects/Flashcard.java b/src/main/java/com/clanki/objects/Flashcard.java index 3fa62637da..08e47e7b58 100644 --- a/src/main/java/com/clanki/objects/Flashcard.java +++ b/src/main/java/com/clanki/objects/Flashcard.java @@ -1,6 +1,5 @@ package com.clanki.objects; -import java.lang.Math; import java.time.LocalDate; public class Flashcard { From 3971e9855af6a438ef28e14c1da074fd0541eda6 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Fri, 10 Mar 2023 22:58:01 +0800 Subject: [PATCH 022/174] Implement ByeCommand and infinite loop until 'bye' Signed-off-by: Vu Van Dung --- src/main/java/com/clanki/Clanki.java | 13 ++++++++++--- src/main/java/com/clanki/commands/AddCommand.java | 6 ------ src/main/java/com/clanki/commands/ByeCommand.java | 11 +++++++++++ src/main/java/com/clanki/parser/Parser.java | 3 +++ src/main/java/com/clanki/ui/Ui.java | 13 +++++++++---- 5 files changed, 33 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/clanki/commands/ByeCommand.java diff --git a/src/main/java/com/clanki/Clanki.java b/src/main/java/com/clanki/Clanki.java index 0812669f8f..4f49cce662 100644 --- a/src/main/java/com/clanki/Clanki.java +++ b/src/main/java/com/clanki/Clanki.java @@ -1,5 +1,6 @@ package com.clanki; +import com.clanki.commands.ByeCommand; import com.clanki.commands.Command; import com.clanki.objects.FlashcardList; import com.clanki.parser.Parser; @@ -17,9 +18,15 @@ public Clanki() { } public void run() { - String inputText = ui.getUserCommand(); - Command command = parser.parseCommand(inputText); - command.execute(flashcardList, ui); + while (true) { + String inputText = ui.getUserCommand(); + Command command = parser.parseCommand(inputText); + command.execute(flashcardList, ui); + + if (command instanceof ByeCommand) { + return; + } + } } public static void main(String[] args) { diff --git a/src/main/java/com/clanki/commands/AddCommand.java b/src/main/java/com/clanki/commands/AddCommand.java index 6610e09182..5da3bddb21 100644 --- a/src/main/java/com/clanki/commands/AddCommand.java +++ b/src/main/java/com/clanki/commands/AddCommand.java @@ -16,15 +16,9 @@ public AddCommand(String questionText, String answerText) { this.answerText = answerText; } - @Override - public String toString() { - return "Question to add: " + questionText + " Answer: " + answerText; - } - @Override public void execute(FlashcardList flashcardList, Ui display) { flashcardList.addNewFlashcard(questionText, answerText); display.printSuccessfulAddMessage(questionText, answerText); } - } diff --git a/src/main/java/com/clanki/commands/ByeCommand.java b/src/main/java/com/clanki/commands/ByeCommand.java new file mode 100644 index 0000000000..4c5dea1b86 --- /dev/null +++ b/src/main/java/com/clanki/commands/ByeCommand.java @@ -0,0 +1,11 @@ +package com.clanki.commands; + +import com.clanki.objects.FlashcardList; +import com.clanki.ui.Ui; + +public class ByeCommand extends Command { + @Override + public void execute(FlashcardList flashcardList, Ui display) { + display.printByeMessage(); + } +} diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index de8dbf6ae2..f54c83d867 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -1,6 +1,7 @@ package com.clanki.parser; import com.clanki.commands.AddCommand; +import com.clanki.commands.ByeCommand; import com.clanki.commands.Command; import com.clanki.commands.UnknownCommand; import com.clanki.exceptions.EmptyFlashcardAnswerException; @@ -26,6 +27,8 @@ public Command parseCommand(String userInput) { System.out.println("The answer for this flashcard is empty, please enter one."); } break; + case "bye": + return new ByeCommand(); default: return new UnknownCommand(); } diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 3bbcefc99a..a73739e313 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -11,7 +11,7 @@ */ public class Ui { private final Scanner in; - private final PrintStream out; + // private final PrintStream out; public Ui() { this(System.in, System.out); @@ -19,7 +19,7 @@ public Ui() { public Ui(InputStream in, PrintStream out) { this.in = new Scanner(in); - this.out = out; + // this.out = out; } /** @@ -34,8 +34,13 @@ public String getUserCommand() { } public void printSuccessfulAddMessage(String questionText, String answerText) { - System.out.println("A new card is now added:" + System.lineSeparator() + "Question: " - + questionText + System.lineSeparator() + "Answer: " + answerText); + System.out.println("A new card is now added:"); + System.out.println("Question: " + questionText); + System.out.println("Answer: " + answerText); + } + + public void printByeMessage() { + System.out.println("Bye. Don't forget to come back later to study!"); } public void printInvalidInput() { From 52e43cf0c2085449fd5e11379928cd2ca90a3e94 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Fri, 10 Mar 2023 23:02:25 +0800 Subject: [PATCH 023/174] Restore AddCommand.toString() Signed-off-by: Vu Van Dung --- src/main/java/com/clanki/commands/AddCommand.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/clanki/commands/AddCommand.java b/src/main/java/com/clanki/commands/AddCommand.java index 5da3bddb21..6522884254 100644 --- a/src/main/java/com/clanki/commands/AddCommand.java +++ b/src/main/java/com/clanki/commands/AddCommand.java @@ -16,6 +16,14 @@ public AddCommand(String questionText, String answerText) { this.answerText = answerText; } + /** + * For testing purposes only. + */ + @Override + public String toString() { + return "Question to add: " + questionText + " Answer: " + answerText; + } + @Override public void execute(FlashcardList flashcardList, Ui display) { flashcardList.addNewFlashcard(questionText, answerText); From 936a8787027ca585c06ce45bc2e0e79acfaeb47e Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Fri, 10 Mar 2023 23:05:30 +0800 Subject: [PATCH 024/174] Add tests Signed-off-by: Vu Van Dung --- .../java/com/clanki/parser/ParserTest.java | 18 ++++++++++++++++++ text-ui-test/EXPECTED.TXT | 2 ++ text-ui-test/input.txt | 2 ++ 3 files changed, 22 insertions(+) diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index ad85d014dc..223f04a8e9 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -2,7 +2,9 @@ package com.clanki.parser; import com.clanki.commands.AddCommand; +import com.clanki.commands.ByeCommand; import com.clanki.commands.Command; +import com.clanki.commands.UnknownCommand; import com.clanki.exceptions.EmptyFlashcardAnswerException; import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; @@ -11,6 +13,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; class ParserTest { @Test @@ -39,4 +42,19 @@ public void parserAddCommand_partOfInputMissing_emptyInputPartException() { () -> parser.reformatAddCommandInput("add /q /a Answer")); } + @Test + public void parserByeCommand_byeCommand_successful() { + Parser parser = new Parser(); + Command parsedCommand = parser.parseCommand("bye"); + assertTrue(parsedCommand instanceof ByeCommand); + parsedCommand = parser.parseCommand("bye whatever"); + assertTrue(parsedCommand instanceof ByeCommand); + } + + @Test + public void parserUnknownCommand_unknownCommand_successful() { + Parser parser = new Parser(); + Command parsedCommand = parser.parseCommand("unknown"); + assertTrue(parsedCommand instanceof UnknownCommand); + } } diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index ccae3a65a2..99824ba3d2 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,3 +1,5 @@ A new card is now added: Question: hello Answer: world +The input is in an incorrect format. +Bye. Don't forget to come back later to study! diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 1d03d03d68..35af388f25 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1 +1,3 @@ add /q hello /a world +foo 1 +bye From 6625332b39990cca045eb112733243c29b28f088 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Fri, 10 Mar 2023 23:15:02 +0800 Subject: [PATCH 025/174] Make SPACED_REPETITION_FACTOR a static constant Signed-off-by: Vu Van Dung --- src/main/java/com/clanki/objects/Flashcard.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/objects/Flashcard.java b/src/main/java/com/clanki/objects/Flashcard.java index 08e47e7b58..6b6b2403b1 100644 --- a/src/main/java/com/clanki/objects/Flashcard.java +++ b/src/main/java/com/clanki/objects/Flashcard.java @@ -3,7 +3,7 @@ import java.time.LocalDate; public class Flashcard { - private final double SPACED_REPETITION_FACTOR = 1.5; + private static final double SPACED_REPETITION_FACTOR = 1.5; private String questionText; private String answerText; private LocalDate dueDate; From 178ec6a22214ec9a209b7e8bdff91a91da035746 Mon Sep 17 00:00:00 2001 From: Zijin Date: Sat, 11 Mar 2023 09:46:00 +0800 Subject: [PATCH 026/174] Update parser to resolve bug The parser now translates an add command to question text and answer text correctly regardless of the sequence of the 2 commands. --- src/main/java/com/clanki/parser/Parser.java | 24 +++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index f54c83d867..0325dba896 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -57,12 +57,24 @@ public AddCommand reformatAddCommandInput(String userInput) if (positionOfStartOfAnswer == -1 || positionOfStartOfQuestion == -1) { throw new InvalidAddFlashcardInputException(); } - String questionText = userInput - .substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length(), - positionOfStartOfAnswer) - .trim(); - String answerText = userInput - .substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length()).trim(); + String questionText = ""; + String answerText = ""; + if (positionOfStartOfAnswer > positionOfStartOfQuestion) { + questionText = userInput + .substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length(), + positionOfStartOfAnswer) + .trim(); + answerText = userInput + .substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length()).trim(); + } else { + questionText = userInput + .substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length()).trim(); + answerText = userInput + .substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length(), + positionOfStartOfQuestion) + .trim(); + } + if (questionText.isEmpty()) { throw new EmptyFlashcardQuestionException(); } From 40ef17663a7c5adaa39f953a13fd6e84a09df097 Mon Sep 17 00:00:00 2001 From: Zijin Date: Sat, 11 Mar 2023 09:46:31 +0800 Subject: [PATCH 027/174] Include the new feature in unit testing --- src/test/java/com/clanki/parser/ParserTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index 223f04a8e9..958cba6b32 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -24,6 +24,14 @@ public void parseAddCommand_correctlyFormattedInput_successful() { assertEquals(expectedCommand.toString(), parsedCommand.toString()); } + @Test + public void parseAddCommand_answerBeforeQuestion_successful() { + Parser parser = new Parser(); + Command parsedCommand = parser.parseCommand("add /a Answer /q Question"); + Command expectedCommand = new AddCommand("Question", "Answer"); + assertEquals(expectedCommand.toString(), parsedCommand.toString()); + } + @Test public void parserAddCommand_incorrectFormattedInput_invalidInputException() { Parser parser = new Parser(); From 58a5fdd3a38707be476980013aada7b1557caf47 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Sat, 11 Mar 2023 13:10:58 +0800 Subject: [PATCH 028/174] Added DeleteCommand class, added deleteFlashcard method in FlashcardList --- src/main/java/com/clanki/commands/DeleteCommand.java | 12 ++++++++++++ src/main/java/com/clanki/objects/FlashcardList.java | 4 ++++ 2 files changed, 16 insertions(+) create mode 100644 src/main/java/com/clanki/commands/DeleteCommand.java diff --git a/src/main/java/com/clanki/commands/DeleteCommand.java b/src/main/java/com/clanki/commands/DeleteCommand.java new file mode 100644 index 0000000000..2129315818 --- /dev/null +++ b/src/main/java/com/clanki/commands/DeleteCommand.java @@ -0,0 +1,12 @@ +package com.clanki.commands; + +import com.clanki.objects.FlashcardList; +import com.clanki.ui.Ui; +public class DeleteCommand extends Command{ + + int index; + @Override + public void execute(FlashcardList flashcardList, Ui display) { + flashcardList.deleteFlashcard(index); + } +} diff --git a/src/main/java/com/clanki/objects/FlashcardList.java b/src/main/java/com/clanki/objects/FlashcardList.java index 6503fb76ca..b3a7acfdc4 100644 --- a/src/main/java/com/clanki/objects/FlashcardList.java +++ b/src/main/java/com/clanki/objects/FlashcardList.java @@ -13,4 +13,8 @@ public void addNewFlashcard(String questionText, String answerText) { Flashcard newFlashcard = new Flashcard(questionText, answerText); flashcards.add(newFlashcard); } + + public void deleteFlashcard(int index) { + flashcards.remove(index); + } } From 371e7a664bf75390a1dcd1e6a7b22034fcf4cc30 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Sat, 11 Mar 2023 14:16:34 +0800 Subject: [PATCH 029/174] Implemented delete function --- src/main/java/com/clanki/commands/DeleteCommand.java | 6 ++++++ src/main/java/com/clanki/parser/Parser.java | 4 ++++ src/main/java/com/clanki/ui/Ui.java | 2 ++ 3 files changed, 12 insertions(+) diff --git a/src/main/java/com/clanki/commands/DeleteCommand.java b/src/main/java/com/clanki/commands/DeleteCommand.java index 2129315818..0cf57ca9f0 100644 --- a/src/main/java/com/clanki/commands/DeleteCommand.java +++ b/src/main/java/com/clanki/commands/DeleteCommand.java @@ -5,8 +5,14 @@ public class DeleteCommand extends Command{ int index; + + public DeleteCommand(int index) { + this.index = index; + } @Override public void execute(FlashcardList flashcardList, Ui display) { flashcardList.deleteFlashcard(index); + display.printSuccessfulDelete(); + System.out.println(index); } } diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index 0325dba896..f6462cf7a5 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -3,6 +3,7 @@ import com.clanki.commands.AddCommand; import com.clanki.commands.ByeCommand; import com.clanki.commands.Command; +import com.clanki.commands.DeleteCommand; import com.clanki.commands.UnknownCommand; import com.clanki.exceptions.EmptyFlashcardAnswerException; import com.clanki.exceptions.EmptyFlashcardQuestionException; @@ -27,6 +28,9 @@ public Command parseCommand(String userInput) { System.out.println("The answer for this flashcard is empty, please enter one."); } break; + case "del": + int index = Integer.parseInt(userInput.split(" ")[1]); + return new DeleteCommand(index); case "bye": return new ByeCommand(); default: diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index a73739e313..3270fbe8f2 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -46,4 +46,6 @@ public void printByeMessage() { public void printInvalidInput() { System.out.println("The input is in an incorrect format."); } + + public void printSuccessfulDelete() {System.out.print("Got it. Deleted the flashcard at index "); } } From 7397259f36dbd1acad706ec4b9a28490062066de Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Sat, 11 Mar 2023 15:41:36 +0800 Subject: [PATCH 030/174] Add a class to systematically parse any input to command and options Signed-off-by: Vu Van Dung --- .../java/com/clanki/parser/ParsedInput.java | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/main/java/com/clanki/parser/ParsedInput.java diff --git a/src/main/java/com/clanki/parser/ParsedInput.java b/src/main/java/com/clanki/parser/ParsedInput.java new file mode 100644 index 0000000000..5d339012ee --- /dev/null +++ b/src/main/java/com/clanki/parser/ParsedInput.java @@ -0,0 +1,87 @@ +package com.clanki.parser; + +class Option { + private static final String BODY_SEPARATOR = " "; + + private String name; + private String value; + + public Option(String optionString) { + String[] parts = optionString.split(BODY_SEPARATOR, 2); + name = parts[0]; + value = parts[1]; + } + + public String getName() { + return name; + } + + public String getValue() { + return value; + } + + /** + * For testing purposes. + */ + @Override + public String toString() { + return "Option{" + "name='" + name + '\'' + ", value='" + value + '\'' + '}'; + } +} + +public class ParsedInput { + private static final String OPTION_INDICATOR = "/"; + private static final String OPTION_SEPARATOR = " " + OPTION_INDICATOR; + + private String command; + private String body; + private Option[] options; + + public ParsedInput(String input) { + // Assuming input = "command blah blah /opt1 hello /opt2 world blah bleh" + + // After trimming: + // parts = ["command blah blah", "opt1 hello", "opt2 world blah bleh"] + String[] parts = input.split(OPTION_SEPARATOR); + options = new Option[parts.length - 1]; + + for (int i = 0; i < parts.length; i++) { + Option option = new Option(parts[i]); + if (i == 0) { + command = option.getName(); + body = option.getValue(); + } else { + options[i - 1] = option; + } + } + } + + public String getCommand() { + assert command != null; + return command; + } + + public String getBody() { + return body; + } + + public String getOptionByName(String name) { + for (Option option : options) { + if (option.getName().equals(name)) { + return option.getValue(); + } + } + return null; + } + + /** + * For testing purposes. + */ + public String[] getOptionsAsStrings() { + String[] optionsAsStrings = new String[options.length]; + for (int i = 0; i < options.length; i++) { + optionsAsStrings[i] = options[i].toString(); + } + return optionsAsStrings; + } +} From f81b83598d2405b15957cda8da15d214e5307cbd Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Sat, 11 Mar 2023 15:42:46 +0800 Subject: [PATCH 031/174] Make all parser methods static Signed-off-by: Vu Van Dung --- src/main/java/com/clanki/Clanki.java | 4 +--- src/main/java/com/clanki/parser/Parser.java | 7 +++--- .../java/com/clanki/parser/ParserTest.java | 24 +++++++------------ 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/clanki/Clanki.java b/src/main/java/com/clanki/Clanki.java index 4f49cce662..38ce324fca 100644 --- a/src/main/java/com/clanki/Clanki.java +++ b/src/main/java/com/clanki/Clanki.java @@ -9,18 +9,16 @@ public class Clanki { private Ui ui; private FlashcardList flashcardList; - private Parser parser; public Clanki() { this.ui = new Ui(); this.flashcardList = new FlashcardList(); - this.parser = new Parser(); } public void run() { while (true) { String inputText = ui.getUserCommand(); - Command command = parser.parseCommand(inputText); + Command command = Parser.parseCommand(inputText); command.execute(flashcardList, ui); if (command instanceof ByeCommand) { diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index 0325dba896..6cb9d1a036 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -12,7 +12,7 @@ public class Parser { public static final String QUESTION_START_INDICATOR = "/q"; public static final String ANSWER_START_INDICATOR = "/a"; - public Command parseCommand(String userInput) { + public static Command parseCommand(String userInput) { String commandPhrase = userInput.split(" ")[0]; switch (commandPhrase) { case "add": @@ -49,7 +49,7 @@ public Command parseCommand(String userInput) { * @throws EmptyFlashcardAnswerException If the string is empty after * ANSWER_START_INDICATOR. */ - public AddCommand reformatAddCommandInput(String userInput) + public static AddCommand reformatAddCommandInput(String userInput) throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, EmptyFlashcardAnswerException { int positionOfStartOfQuestion = userInput.indexOf(QUESTION_START_INDICATOR); @@ -68,7 +68,8 @@ public AddCommand reformatAddCommandInput(String userInput) .substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length()).trim(); } else { questionText = userInput - .substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length()).trim(); + .substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length()) + .trim(); answerText = userInput .substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length(), positionOfStartOfQuestion) diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index 958cba6b32..58be29bfe7 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -18,51 +18,45 @@ class ParserTest { @Test public void parseAddCommand_correctlyFormattedInput_successful() { - Parser parser = new Parser(); - Command parsedCommand = parser.parseCommand("add /q Question /a Answer"); + Command parsedCommand = Parser.parseCommand("add /q Question /a Answer"); Command expectedCommand = new AddCommand("Question", "Answer"); assertEquals(expectedCommand.toString(), parsedCommand.toString()); } @Test public void parseAddCommand_answerBeforeQuestion_successful() { - Parser parser = new Parser(); - Command parsedCommand = parser.parseCommand("add /a Answer /q Question"); + Command parsedCommand = Parser.parseCommand("add /a Answer /q Question"); Command expectedCommand = new AddCommand("Question", "Answer"); assertEquals(expectedCommand.toString(), parsedCommand.toString()); } @Test public void parserAddCommand_incorrectFormattedInput_invalidInputException() { - Parser parser = new Parser(); assertThrows(InvalidAddFlashcardInputException.class, - () -> parser.reformatAddCommandInput("add Question /a Answer")); + () -> Parser.reformatAddCommandInput("add Question /a Answer")); assertThrows(InvalidAddFlashcardInputException.class, - () -> parser.reformatAddCommandInput("add /q Question /w Answer")); + () -> Parser.reformatAddCommandInput("add /q Question /w Answer")); } @Test public void parserAddCommand_partOfInputMissing_emptyInputPartException() { - Parser parser = new Parser(); assertThrows(EmptyFlashcardAnswerException.class, - () -> parser.reformatAddCommandInput("add /q Question /a ")); + () -> Parser.reformatAddCommandInput("add /q Question /a ")); assertThrows(EmptyFlashcardQuestionException.class, - () -> parser.reformatAddCommandInput("add /q /a Answer")); + () -> Parser.reformatAddCommandInput("add /q /a Answer")); } @Test public void parserByeCommand_byeCommand_successful() { - Parser parser = new Parser(); - Command parsedCommand = parser.parseCommand("bye"); + Command parsedCommand = Parser.parseCommand("bye"); assertTrue(parsedCommand instanceof ByeCommand); - parsedCommand = parser.parseCommand("bye whatever"); + parsedCommand = Parser.parseCommand("bye whatever"); assertTrue(parsedCommand instanceof ByeCommand); } @Test public void parserUnknownCommand_unknownCommand_successful() { - Parser parser = new Parser(); - Command parsedCommand = parser.parseCommand("unknown"); + Command parsedCommand = Parser.parseCommand("unknown"); assertTrue(parsedCommand instanceof UnknownCommand); } } From 2a390f1290005825fcb5929160d0f820a621ffd5 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Sat, 11 Mar 2023 15:57:18 +0800 Subject: [PATCH 032/174] Refactor parser logic to make use of ParsedInput Signed-off-by: Vu Van Dung --- .../java/com/clanki/parser/ParsedInput.java | 13 +++- src/main/java/com/clanki/parser/Parser.java | 72 ++++++++----------- .../java/com/clanki/parser/ParserTest.java | 8 +-- 3 files changed, 46 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/clanki/parser/ParsedInput.java b/src/main/java/com/clanki/parser/ParsedInput.java index 5d339012ee..fb75107b42 100644 --- a/src/main/java/com/clanki/parser/ParsedInput.java +++ b/src/main/java/com/clanki/parser/ParsedInput.java @@ -9,7 +9,7 @@ class Option { public Option(String optionString) { String[] parts = optionString.split(BODY_SEPARATOR, 2); name = parts[0]; - value = parts[1]; + value = parts.length > 1 ? parts[1] : null; } public String getName() { @@ -65,6 +65,17 @@ public String getBody() { return body; } + /** + * Returns the value of the option with the given name. + * + * Example: "command blah blah /opt1 hello /opt2 world blah bleh" then + * getOptionByName("opt2") returns "world blah bleh" and getOptionByName("foo") + * returns null. + * + * @param name The name of the option. + * @return The (trimmed) value of the option, or null if the option does not + * exist. Be careful that the option can be an empty string. + */ public String getOptionByName(String name) { for (Option option : options) { if (option.getName().equals(name)) { diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index 6cb9d1a036..9454d6a675 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -9,73 +9,61 @@ import com.clanki.exceptions.InvalidAddFlashcardInputException; public class Parser { - public static final String QUESTION_START_INDICATOR = "/q"; - public static final String ANSWER_START_INDICATOR = "/a"; + private static final String QUESTION_OPTION_IDENTIFIER = "q"; + private static final String ANSWER_OPTION_IDENTIFIER = "a"; public static Command parseCommand(String userInput) { - String commandPhrase = userInput.split(" ")[0]; - switch (commandPhrase) { + try { + return parseCommandStrict(userInput); + } catch (InvalidAddFlashcardInputException e) { + System.out.println( + "The input is in an incorrect format, please follow the format in user guide"); + } catch (EmptyFlashcardQuestionException e) { + System.out.println("The question of this card is empty, please enter one."); + } catch (EmptyFlashcardAnswerException e) { + System.out.println("The answer for this flashcard is empty, please enter one."); + } + return new UnknownCommand(); + } + + public static Command parseCommandStrict(String userInput) + throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, + EmptyFlashcardAnswerException { + ParsedInput parsedInput = new ParsedInput(userInput); + String command = parsedInput.getCommand(); + switch (command) { case "add": - try { - return reformatAddCommandInput(userInput); - } catch (InvalidAddFlashcardInputException e) { - System.out.println( - "The input is in an incorrect format, please follow the format in user guide"); - } catch (EmptyFlashcardQuestionException e) { - System.out.println("The question of this card is empty, please enter one."); - } catch (EmptyFlashcardAnswerException e) { - System.out.println("The answer for this flashcard is empty, please enter one."); - } - break; + return getAddCommand(parsedInput); case "bye": return new ByeCommand(); default: return new UnknownCommand(); } - return new UnknownCommand(); } /** * Constructs an AddCommand from the input of the user, if the input is of an * incorrect format, a respective exception will be thrown. * - * @param userInput The input collected by Ui from the user. + * @param parsedInput The input collected by Ui from the user, after being + * parsed with the ParsedInput class. * @return An AddCommand with the question and answer text extracted from user * input. * @throws InvalidAddFlashcardInputException If the start indicators cannot be * found. * @throws EmptyFlashcardQuestionException If the string is empty after - * QUESTION_START_INDICATOR. + * QUESTION_OPTION_IDENTIFIER. * @throws EmptyFlashcardAnswerException If the string is empty after - * ANSWER_START_INDICATOR. + * ANSWER_OPTION_IDENTIFIER. */ - public static AddCommand reformatAddCommandInput(String userInput) + public static AddCommand getAddCommand(ParsedInput parsedInput) throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, EmptyFlashcardAnswerException { - int positionOfStartOfQuestion = userInput.indexOf(QUESTION_START_INDICATOR); - int positionOfStartOfAnswer = userInput.indexOf(ANSWER_START_INDICATOR); - if (positionOfStartOfAnswer == -1 || positionOfStartOfQuestion == -1) { + String questionText = parsedInput.getOptionByName(QUESTION_OPTION_IDENTIFIER); + String answerText = parsedInput.getOptionByName(ANSWER_OPTION_IDENTIFIER); + if (questionText == null || answerText == null) { throw new InvalidAddFlashcardInputException(); } - String questionText = ""; - String answerText = ""; - if (positionOfStartOfAnswer > positionOfStartOfQuestion) { - questionText = userInput - .substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length(), - positionOfStartOfAnswer) - .trim(); - answerText = userInput - .substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length()).trim(); - } else { - questionText = userInput - .substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length()) - .trim(); - answerText = userInput - .substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length(), - positionOfStartOfQuestion) - .trim(); - } - if (questionText.isEmpty()) { throw new EmptyFlashcardQuestionException(); } diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index 58be29bfe7..d5da8a7d97 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -33,17 +33,17 @@ public void parseAddCommand_answerBeforeQuestion_successful() { @Test public void parserAddCommand_incorrectFormattedInput_invalidInputException() { assertThrows(InvalidAddFlashcardInputException.class, - () -> Parser.reformatAddCommandInput("add Question /a Answer")); + () -> Parser.parseCommandStrict("add Question /a Answer")); assertThrows(InvalidAddFlashcardInputException.class, - () -> Parser.reformatAddCommandInput("add /q Question /w Answer")); + () -> Parser.parseCommandStrict("add /q Question /w Answer")); } @Test public void parserAddCommand_partOfInputMissing_emptyInputPartException() { assertThrows(EmptyFlashcardAnswerException.class, - () -> Parser.reformatAddCommandInput("add /q Question /a ")); + () -> Parser.parseCommandStrict("add /q Question /a ")); assertThrows(EmptyFlashcardQuestionException.class, - () -> Parser.reformatAddCommandInput("add /q /a Answer")); + () -> Parser.parseCommandStrict("add /q /a Answer")); } @Test From cfefde22a87b05f137b7a0fb1dddc5f82a5b8d14 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Sat, 11 Mar 2023 16:00:59 +0800 Subject: [PATCH 033/174] Add missing r's to ParserTest tests Signed-off-by: Vu Van Dung --- src/test/java/com/clanki/parser/ParserTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index d5da8a7d97..ccff8e2f2e 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -17,14 +17,14 @@ class ParserTest { @Test - public void parseAddCommand_correctlyFormattedInput_successful() { + public void parserAddCommand_correctlyFormattedInput_successful() { Command parsedCommand = Parser.parseCommand("add /q Question /a Answer"); Command expectedCommand = new AddCommand("Question", "Answer"); assertEquals(expectedCommand.toString(), parsedCommand.toString()); } @Test - public void parseAddCommand_answerBeforeQuestion_successful() { + public void parserAddCommand_answerBeforeQuestion_successful() { Command parsedCommand = Parser.parseCommand("add /a Answer /q Question"); Command expectedCommand = new AddCommand("Question", "Answer"); assertEquals(expectedCommand.toString(), parsedCommand.toString()); From 95dd3efdf3d5fcc3a34faa77f503fe9341f65bae Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Sat, 11 Mar 2023 16:17:48 +0800 Subject: [PATCH 034/174] Add unit tests for ParsedInput Signed-off-by: Vu Van Dung --- .../java/com/clanki/parser/ParsedInput.java | 34 ++------ .../com/clanki/parser/ParsedInputTest.java | 84 +++++++++++++++++++ 2 files changed, 92 insertions(+), 26 deletions(-) create mode 100644 src/test/java/com/clanki/parser/ParsedInputTest.java diff --git a/src/main/java/com/clanki/parser/ParsedInput.java b/src/main/java/com/clanki/parser/ParsedInput.java index fb75107b42..5a8d13a97c 100644 --- a/src/main/java/com/clanki/parser/ParsedInput.java +++ b/src/main/java/com/clanki/parser/ParsedInput.java @@ -8,8 +8,8 @@ class Option { public Option(String optionString) { String[] parts = optionString.split(BODY_SEPARATOR, 2); - name = parts[0]; - value = parts.length > 1 ? parts[1] : null; + name = parts[0].trim(); + value = parts.length > 1 ? parts[1].trim() : ""; } public String getName() { @@ -19,14 +19,6 @@ public String getName() { public String getValue() { return value; } - - /** - * For testing purposes. - */ - @Override - public String toString() { - return "Option{" + "name='" + name + '\'' + ", value='" + value + '\'' + '}'; - } } public class ParsedInput { @@ -46,7 +38,7 @@ public ParsedInput(String input) { options = new Option[parts.length - 1]; for (int i = 0; i < parts.length; i++) { - Option option = new Option(parts[i]); + Option option = new Option(parts[i].trim()); if (i == 0) { command = option.getName(); body = option.getValue(); @@ -74,25 +66,15 @@ public String getBody() { * * @param name The name of the option. * @return The (trimmed) value of the option, or null if the option does not - * exist. Be careful that the option can be an empty string. + * exist. Be careful that the option can be an empty string. If an + * option is specified multiple times, the last one will be returned. */ public String getOptionByName(String name) { - for (Option option : options) { - if (option.getName().equals(name)) { - return option.getValue(); + for (int i = options.length - 1; i >= 0; i--) { + if (options[i].getName().equals(name)) { + return options[i].getValue(); } } return null; } - - /** - * For testing purposes. - */ - public String[] getOptionsAsStrings() { - String[] optionsAsStrings = new String[options.length]; - for (int i = 0; i < options.length; i++) { - optionsAsStrings[i] = options[i].toString(); - } - return optionsAsStrings; - } } diff --git a/src/test/java/com/clanki/parser/ParsedInputTest.java b/src/test/java/com/clanki/parser/ParsedInputTest.java new file mode 100644 index 0000000000..088de8c70f --- /dev/null +++ b/src/test/java/com/clanki/parser/ParsedInputTest.java @@ -0,0 +1,84 @@ +package com.clanki.parser; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ParsedInputTest { + @Test + public void getCommand_emptyInput_emptyString() { + ParsedInput parsedInput = new ParsedInput(""); + assertEquals("", parsedInput.getCommand()); + } + + @Test + public void getCommand_oneWordInput_oneWord() { + ParsedInput parsedInput = new ParsedInput("command"); + assertEquals("command", parsedInput.getCommand()); + } + + @Test + public void getCommand_multipleWordsInput_firstWord() { + ParsedInput parsedInput = new ParsedInput("command blah blah"); + assertEquals("command", parsedInput.getCommand()); + } + + @Test + public void getCommand_withSlash_hasTheSlash() { + ParsedInput parsedInput = new ParsedInput("command/blah blah"); + assertEquals("command/blah", parsedInput.getCommand()); + } + + @Test + public void getBody_emptyInput_emptyString() { + ParsedInput parsedInput = new ParsedInput(""); + assertEquals("", parsedInput.getBody()); + } + + @Test + public void getBody_oneWordInput_emptyString() { + ParsedInput parsedInput = new ParsedInput("command"); + assertEquals("", parsedInput.getBody()); + } + + @Test + public void getBody_multipleWordsInput_allWords() { + ParsedInput parsedInput = new ParsedInput("command blah blah"); + assertEquals("blah blah", parsedInput.getBody()); + } + + @Test + public void getBody_optionsWithoutBody_beNull() { + ParsedInput parsedInput = new ParsedInput("command /blah blah"); + assertEquals("", parsedInput.getBody()); + } + + @Test + public void getBody_optionsWithBody_beCorrect() { + ParsedInput parsedInput = new ParsedInput("command a b /blah blah"); + assertEquals("a b", parsedInput.getBody()); + } + + @Test + public void getBody_optionsWithBodyAndTrailingSpaces_beCorrect() { + ParsedInput parsedInput = new ParsedInput("command a b /blah blah "); + assertEquals("a b", parsedInput.getBody()); + } + + @Test + public void getOptionByName_normalScenarios_beCorrect() { + ParsedInput parsedInput = new ParsedInput( + "command /opt1 blah /opt2 /opt3 bleh "); + assertEquals("blah", parsedInput.getOptionByName("opt1")); + assertEquals("", parsedInput.getOptionByName("opt2")); + assertEquals("bleh", parsedInput.getOptionByName("opt3")); + assertEquals(null, parsedInput.getOptionByName("opt4")); + } + + @Test + public void getOptionByName_sameOptionMultipleTimes_selectLast() { + ParsedInput parsedInput = new ParsedInput( + "command /opt1 blah /opt2 /opt3 bleh /opt1 bleh "); + assertEquals("bleh", parsedInput.getOptionByName("opt1")); + } +} From 510d38d5d4bd69d834cfa1566bedf70cbabe5efd Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Sun, 12 Mar 2023 13:22:52 +0800 Subject: [PATCH 035/174] Added Javienne Yeo to AboutUs --- docs/AboutUs.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..e147898f7a 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,9 +1,9 @@ # About us -Display | Name | Github Profile | Portfolio ---------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +Display | Name | Github Profile | Portfolio +--------|:------------:|:--------------:|:---------: +![](https://via.placeholder.com/100.png?text=Photo) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://avatars.githubusercontent.com/u/88180884?s=400&v=4) | Javienne Yeo | [Github](https://github.com/javienneyeo) | [Portfolio](docs/team/javienneyeo.md) From 75bdc0d5ec522357c4a2a8489cb8c34f796a6509 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Sun, 12 Mar 2023 13:58:07 +0800 Subject: [PATCH 036/174] Update AboutUs.md Signed-off-by: Vu Van Dung --- docs/AboutUs.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 1d04174f50..ac510b20ad 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,10 +1,9 @@ # About us -Display | Name | Github Profile | Portfolio ---------|:----------:|:------------------------------------:|:---------: -![](https://avatars.githubusercontent.com/u/16986946) | Kong Dehao | [GitHub](https://github.com/kdh3799) | [Portfolio](docs/team/kongdehao.md) -![](https://avatars.githubusercontent.com/u/44609036?v=4&s=100) | Vu Van Dung | [GitHub](https://github.com/joulev) | [Portfolio](https://joulev.dev) -![](https://avatars.githubusercontent.com/u/88227764?s=400&u=798d5cfe5960a07e7364c1c1efa4c3317205b6ca&v=4) | Song Zijin | [Github](https://github.com/SongZijin) | [Portfolio](docs/team/songzijin.md) -![](https://avatars.githubusercontent.com/u/72350236?v=4) | Moses Lee | [GitHub](https://github.com/moseslee9012) |[Portfolio](docs/team/moseslee.md) -![](https://avatars.githubusercontent.com/u/88180884?s=400&v=4) | Javienne Yeo | [Github](https://github.com/javienneyeo) | [Portfolio](docs/team/javienneyeo.md) - +| Display | Name | GitHub Profile | Portfolio | +| :------------------------------------------------------------------------------------------ | :----------- | :---------------------------------------- | :------------------------------------ | +| ![](https://avatars.githubusercontent.com/u/16986946?v=4&s=100) | Kong Dehao | [GitHub](https://github.com/kdh3799) | [Portfolio](docs/team/kongdehao.md) | +| ![](https://avatars.githubusercontent.com/u/44609036?v=4&s=100) | Vu Van Dung | [GitHub](https://github.com/joulev) | [Portfolio](https://joulev.dev) | +| ![](https://avatars.githubusercontent.com/u/88227764?v=4&s=100) | Song Zijin | [GitHub](https://github.com/SongZijin) | [Portfolio](docs/team/songzijin.md) | +| ![](https://avatars.githubusercontent.com/u/72350236?v=4&s=100) | Moses Lee | [GitHub](https://github.com/moseslee9012) | [Portfolio](docs/team/moseslee.md) | +| | Javienne Yeo | [GitHub](https://github.com/javienneyeo) | [Portfolio](docs/team/javienneyeo.md) | From 74717ddd5a76a41289cdd5952a4f0923ab986cf0 Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Sun, 12 Mar 2023 23:53:52 +0800 Subject: [PATCH 037/174] Add function of reviewing flashcards --- src/main/java/com/clanki/Clanki.java | 5 ++ .../java/com/clanki/commands/AddCommand.java | 3 + .../java/com/clanki/commands/ByeCommand.java | 3 + .../java/com/clanki/commands/Command.java | 3 + .../com/clanki/commands/ReviewCommand.java | 49 +++++++++++++++ .../com/clanki/commands/UnknownCommand.java | 3 + .../java/com/clanki/objects/Flashcard.java | 9 +++ .../com/clanki/objects/FlashcardList.java | 3 + src/main/java/com/clanki/parser/Parser.java | 60 ++++++++----------- src/main/java/com/clanki/ui/Ui.java | 11 ++++ 10 files changed, 113 insertions(+), 36 deletions(-) create mode 100644 src/main/java/com/clanki/commands/ReviewCommand.java diff --git a/src/main/java/com/clanki/Clanki.java b/src/main/java/com/clanki/Clanki.java index 4f49cce662..e6f6f4027c 100644 --- a/src/main/java/com/clanki/Clanki.java +++ b/src/main/java/com/clanki/Clanki.java @@ -2,14 +2,19 @@ import com.clanki.commands.ByeCommand; import com.clanki.commands.Command; +import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; import com.clanki.parser.Parser; import com.clanki.ui.Ui; +import java.util.ArrayList; + public class Clanki { private Ui ui; private FlashcardList flashcardList; private Parser parser; + private ArrayList flashcardsForToday; + private int currentFlashcardIndex; public Clanki() { this.ui = new Ui(); diff --git a/src/main/java/com/clanki/commands/AddCommand.java b/src/main/java/com/clanki/commands/AddCommand.java index 6522884254..3907e9d944 100644 --- a/src/main/java/com/clanki/commands/AddCommand.java +++ b/src/main/java/com/clanki/commands/AddCommand.java @@ -1,8 +1,11 @@ package com.clanki.commands; +import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; +import java.util.ArrayList; + /** * A type of command that will instruct to add a new element into the ArrayList * of flashcards. diff --git a/src/main/java/com/clanki/commands/ByeCommand.java b/src/main/java/com/clanki/commands/ByeCommand.java index 4c5dea1b86..83ada22143 100644 --- a/src/main/java/com/clanki/commands/ByeCommand.java +++ b/src/main/java/com/clanki/commands/ByeCommand.java @@ -1,8 +1,11 @@ package com.clanki.commands; +import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; +import java.util.ArrayList; + public class ByeCommand extends Command { @Override public void execute(FlashcardList flashcardList, Ui display) { diff --git a/src/main/java/com/clanki/commands/Command.java b/src/main/java/com/clanki/commands/Command.java index 5b4dff30f1..886edddbb6 100644 --- a/src/main/java/com/clanki/commands/Command.java +++ b/src/main/java/com/clanki/commands/Command.java @@ -1,9 +1,12 @@ package com.clanki.commands; +import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; +import java.util.ArrayList; + /** * Represents a command that is instructed for the program to conduct. A Command * Object specifies what the type of command is with its subclasses. diff --git a/src/main/java/com/clanki/commands/ReviewCommand.java b/src/main/java/com/clanki/commands/ReviewCommand.java new file mode 100644 index 0000000000..bf19a5366b --- /dev/null +++ b/src/main/java/com/clanki/commands/ReviewCommand.java @@ -0,0 +1,49 @@ +package com.clanki.commands; + +import com.clanki.objects.Flashcard; +import com.clanki.objects.FlashcardList; +import com.clanki.ui.Ui; + +import java.util.ArrayList; +import java.util.Objects; + +public class ReviewCommand extends Command { + @Override + public void execute(FlashcardList flashcardList, Ui display) { + ArrayList fullFlashcardList = flashcardList.getFlashCards(); + for (int i = 0; i< fullFlashcardList.size();i++) { + Flashcard flashcard = fullFlashcardList.get(i); + if (flashcard.isDueBeforeToday()) { + reviewCurrentFlashcard(display, flashcard); + } + } + display.print("Congrats! You have reviewed all the flashcards due today!"); + } + + private static void reviewCurrentFlashcard(Ui display, Flashcard flashcard) { + boolean isCurrentCardPassed = false; + display.print("Let's see the next flashcard!"); + while(!isCurrentCardPassed){ + display.print("Question for the current flashcard is: ", flashcard.getQuestion()); + display.print("Are you ready to view the answer?"); + String viewAnswerCommand = display.getUserCommand(); + if(Objects.equals(viewAnswerCommand, "answer") || Objects.equals(viewAnswerCommand, "a")){ + display.print(flashcard.getAnswer(), "Have you got this correct?"); + String ifCorrectAnswerCommand = display.getUserCommand(); + if (Objects.equals(ifCorrectAnswerCommand, "yes")||Objects.equals(ifCorrectAnswerCommand, "y")) { + display.print("Great, you got it right!"); + flashcard.updateDueDateAfterCorrectAnswer(); + isCurrentCardPassed = true; + } else if (Objects.equals(ifCorrectAnswerCommand, "n")) { + display.print("No worries, we will try it next time."); + flashcard.updateDueDateAfterIncorrectAnswer(); + isCurrentCardPassed = true; + }else{ + display.printInvalidInput(); + } + }else{ + display.printInvalidInput(); + } + } + } +} diff --git a/src/main/java/com/clanki/commands/UnknownCommand.java b/src/main/java/com/clanki/commands/UnknownCommand.java index 9a3be9a679..50ad8726eb 100644 --- a/src/main/java/com/clanki/commands/UnknownCommand.java +++ b/src/main/java/com/clanki/commands/UnknownCommand.java @@ -1,8 +1,11 @@ package com.clanki.commands; +import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; +import java.util.ArrayList; + public class UnknownCommand extends Command { @Override public void execute(FlashcardList flashcardList, Ui display) { diff --git a/src/main/java/com/clanki/objects/Flashcard.java b/src/main/java/com/clanki/objects/Flashcard.java index 6b6b2403b1..b538c4e042 100644 --- a/src/main/java/com/clanki/objects/Flashcard.java +++ b/src/main/java/com/clanki/objects/Flashcard.java @@ -52,6 +52,15 @@ public boolean isDueToday() { return this.dueDate.isEqual(LocalDate.now()); } + /** + * this function checks if the flashcard is due or overdue + * Sometimes the user may not clear all flashcards on time, so we may have cards overdue + * @return true if the card is due or overdue + */ + public boolean isDueBeforeToday(){ + return !LocalDate.now().isBefore(this.getDueDate()); + } + /** * Reset dueDate and currentPeriodInDays as if the * card was just created. diff --git a/src/main/java/com/clanki/objects/FlashcardList.java b/src/main/java/com/clanki/objects/FlashcardList.java index 6503fb76ca..084d9edb9d 100644 --- a/src/main/java/com/clanki/objects/FlashcardList.java +++ b/src/main/java/com/clanki/objects/FlashcardList.java @@ -13,4 +13,7 @@ public void addNewFlashcard(String questionText, String answerText) { Flashcard newFlashcard = new Flashcard(questionText, answerText); flashcards.add(newFlashcard); } + public ArrayList getFlashCards(){ + return flashcards; + } } diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index 0325dba896..cc0256e98f 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -1,9 +1,6 @@ package com.clanki.parser; -import com.clanki.commands.AddCommand; -import com.clanki.commands.ByeCommand; -import com.clanki.commands.Command; -import com.clanki.commands.UnknownCommand; +import com.clanki.commands.*; import com.clanki.exceptions.EmptyFlashcardAnswerException; import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; @@ -15,22 +12,23 @@ public class Parser { public Command parseCommand(String userInput) { String commandPhrase = userInput.split(" ")[0]; switch (commandPhrase) { - case "add": - try { - return reformatAddCommandInput(userInput); - } catch (InvalidAddFlashcardInputException e) { - System.out.println( - "The input is in an incorrect format, please follow the format in user guide"); - } catch (EmptyFlashcardQuestionException e) { - System.out.println("The question of this card is empty, please enter one."); - } catch (EmptyFlashcardAnswerException e) { - System.out.println("The answer for this flashcard is empty, please enter one."); - } - break; - case "bye": - return new ByeCommand(); - default: - return new UnknownCommand(); + case "add": + try { + return reformatAddCommandInput(userInput); + } catch (InvalidAddFlashcardInputException e) { + System.out.println("The input is in an incorrect format, please follow the format in user guide"); + } catch (EmptyFlashcardQuestionException e) { + System.out.println("The question of this card is empty, please enter one."); + } catch (EmptyFlashcardAnswerException e) { + System.out.println("The answer for this flashcard is empty, please enter one."); + } + break; + case "review": + return new ReviewCommand(); + case "bye": + return new ByeCommand(); + default: + return new UnknownCommand(); } return new UnknownCommand(); } @@ -41,7 +39,7 @@ public Command parseCommand(String userInput) { * * @param userInput The input collected by Ui from the user. * @return An AddCommand with the question and answer text extracted from user - * input. + * input. * @throws InvalidAddFlashcardInputException If the start indicators cannot be * found. * @throws EmptyFlashcardQuestionException If the string is empty after @@ -49,9 +47,7 @@ public Command parseCommand(String userInput) { * @throws EmptyFlashcardAnswerException If the string is empty after * ANSWER_START_INDICATOR. */ - public AddCommand reformatAddCommandInput(String userInput) - throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, - EmptyFlashcardAnswerException { + public AddCommand reformatAddCommandInput(String userInput) throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, EmptyFlashcardAnswerException { int positionOfStartOfQuestion = userInput.indexOf(QUESTION_START_INDICATOR); int positionOfStartOfAnswer = userInput.indexOf(ANSWER_START_INDICATOR); if (positionOfStartOfAnswer == -1 || positionOfStartOfQuestion == -1) { @@ -60,19 +56,11 @@ public AddCommand reformatAddCommandInput(String userInput) String questionText = ""; String answerText = ""; if (positionOfStartOfAnswer > positionOfStartOfQuestion) { - questionText = userInput - .substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length(), - positionOfStartOfAnswer) - .trim(); - answerText = userInput - .substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length()).trim(); + questionText = userInput.substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length(), positionOfStartOfAnswer).trim(); + answerText = userInput.substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length()).trim(); } else { - questionText = userInput - .substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length()).trim(); - answerText = userInput - .substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length(), - positionOfStartOfQuestion) - .trim(); + questionText = userInput.substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length()).trim(); + answerText = userInput.substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length(), positionOfStartOfQuestion).trim(); } if (questionText.isEmpty()) { diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index a73739e313..c0c01c93f9 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -46,4 +46,15 @@ public void printByeMessage() { public void printInvalidInput() { System.out.println("The input is in an incorrect format."); } + + /** + * reused from Kong Dehao ip + * for general printing to console + * @param message multiple strings to be shown to user + */ + public void print(String... message) { + for (String m : message) { + System.out.println(m); + } + } } From e70d563f55dc8efa02356f3a81c1e7d88f2885c0 Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Mon, 13 Mar 2023 00:03:15 +0800 Subject: [PATCH 038/174] Reformatted files --- src/main/java/com/clanki/Clanki.java | 14 ++++---- .../java/com/clanki/commands/AddCommand.java | 3 -- .../java/com/clanki/commands/ByeCommand.java | 6 ++-- .../java/com/clanki/commands/Command.java | 4 --- .../com/clanki/commands/ReviewCommand.java | 34 +++++++++---------- .../com/clanki/commands/UnknownCommand.java | 4 +-- .../java/com/clanki/objects/Flashcard.java | 6 ++-- .../com/clanki/objects/FlashcardList.java | 5 +-- src/main/java/com/clanki/ui/Ui.java | 3 +- 9 files changed, 35 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/clanki/Clanki.java b/src/main/java/com/clanki/Clanki.java index e6f6f4027c..0b21b5b360 100644 --- a/src/main/java/com/clanki/Clanki.java +++ b/src/main/java/com/clanki/Clanki.java @@ -10,9 +10,9 @@ import java.util.ArrayList; public class Clanki { - private Ui ui; - private FlashcardList flashcardList; - private Parser parser; + private final Ui ui; + private final FlashcardList flashcardList; + private final Parser parser; private ArrayList flashcardsForToday; private int currentFlashcardIndex; @@ -22,6 +22,10 @@ public Clanki() { this.parser = new Parser(); } + public static void main(String[] args) { + new Clanki().run(); + } + public void run() { while (true) { String inputText = ui.getUserCommand(); @@ -33,8 +37,4 @@ public void run() { } } } - - public static void main(String[] args) { - new Clanki().run(); - } } diff --git a/src/main/java/com/clanki/commands/AddCommand.java b/src/main/java/com/clanki/commands/AddCommand.java index 3907e9d944..6522884254 100644 --- a/src/main/java/com/clanki/commands/AddCommand.java +++ b/src/main/java/com/clanki/commands/AddCommand.java @@ -1,11 +1,8 @@ package com.clanki.commands; -import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; -import java.util.ArrayList; - /** * A type of command that will instruct to add a new element into the ArrayList * of flashcards. diff --git a/src/main/java/com/clanki/commands/ByeCommand.java b/src/main/java/com/clanki/commands/ByeCommand.java index 83ada22143..59f493245e 100644 --- a/src/main/java/com/clanki/commands/ByeCommand.java +++ b/src/main/java/com/clanki/commands/ByeCommand.java @@ -1,12 +1,10 @@ package com.clanki.commands; -import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; -import java.util.ArrayList; - -public class ByeCommand extends Command { +public class +ByeCommand extends Command { @Override public void execute(FlashcardList flashcardList, Ui display) { display.printByeMessage(); diff --git a/src/main/java/com/clanki/commands/Command.java b/src/main/java/com/clanki/commands/Command.java index 886edddbb6..1e843c8316 100644 --- a/src/main/java/com/clanki/commands/Command.java +++ b/src/main/java/com/clanki/commands/Command.java @@ -1,12 +1,8 @@ - package com.clanki.commands; -import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; -import java.util.ArrayList; - /** * Represents a command that is instructed for the program to conduct. A Command * Object specifies what the type of command is with its subclasses. diff --git a/src/main/java/com/clanki/commands/ReviewCommand.java b/src/main/java/com/clanki/commands/ReviewCommand.java index bf19a5366b..e58d8dd5ad 100644 --- a/src/main/java/com/clanki/commands/ReviewCommand.java +++ b/src/main/java/com/clanki/commands/ReviewCommand.java @@ -8,29 +8,17 @@ import java.util.Objects; public class ReviewCommand extends Command { - @Override - public void execute(FlashcardList flashcardList, Ui display) { - ArrayList fullFlashcardList = flashcardList.getFlashCards(); - for (int i = 0; i< fullFlashcardList.size();i++) { - Flashcard flashcard = fullFlashcardList.get(i); - if (flashcard.isDueBeforeToday()) { - reviewCurrentFlashcard(display, flashcard); - } - } - display.print("Congrats! You have reviewed all the flashcards due today!"); - } - private static void reviewCurrentFlashcard(Ui display, Flashcard flashcard) { boolean isCurrentCardPassed = false; display.print("Let's see the next flashcard!"); - while(!isCurrentCardPassed){ + while (!isCurrentCardPassed) { display.print("Question for the current flashcard is: ", flashcard.getQuestion()); display.print("Are you ready to view the answer?"); String viewAnswerCommand = display.getUserCommand(); - if(Objects.equals(viewAnswerCommand, "answer") || Objects.equals(viewAnswerCommand, "a")){ + if (Objects.equals(viewAnswerCommand, "answer") || Objects.equals(viewAnswerCommand, "a")) { display.print(flashcard.getAnswer(), "Have you got this correct?"); String ifCorrectAnswerCommand = display.getUserCommand(); - if (Objects.equals(ifCorrectAnswerCommand, "yes")||Objects.equals(ifCorrectAnswerCommand, "y")) { + if (Objects.equals(ifCorrectAnswerCommand, "yes") || Objects.equals(ifCorrectAnswerCommand, "y")) { display.print("Great, you got it right!"); flashcard.updateDueDateAfterCorrectAnswer(); isCurrentCardPassed = true; @@ -38,12 +26,24 @@ private static void reviewCurrentFlashcard(Ui display, Flashcard flashcard) { display.print("No worries, we will try it next time."); flashcard.updateDueDateAfterIncorrectAnswer(); isCurrentCardPassed = true; - }else{ + } else { display.printInvalidInput(); } - }else{ + } else { display.printInvalidInput(); } } } + + @Override + public void execute(FlashcardList flashcardList, Ui display) { + ArrayList fullFlashcardList = flashcardList.getFlashCards(); + for (int i = 0; i < fullFlashcardList.size(); i++) { + Flashcard flashcard = fullFlashcardList.get(i); + if (flashcard.isDueBeforeToday()) { + reviewCurrentFlashcard(display, flashcard); + } + } + display.print("Congrats! You have reviewed all the flashcards due today!"); + } } diff --git a/src/main/java/com/clanki/commands/UnknownCommand.java b/src/main/java/com/clanki/commands/UnknownCommand.java index 50ad8726eb..17220c26f3 100644 --- a/src/main/java/com/clanki/commands/UnknownCommand.java +++ b/src/main/java/com/clanki/commands/UnknownCommand.java @@ -1,14 +1,12 @@ package com.clanki.commands; -import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; -import java.util.ArrayList; - public class UnknownCommand extends Command { @Override public void execute(FlashcardList flashcardList, Ui display) { display.printInvalidInput(); } } + diff --git a/src/main/java/com/clanki/objects/Flashcard.java b/src/main/java/com/clanki/objects/Flashcard.java index b538c4e042..6caa29ac73 100644 --- a/src/main/java/com/clanki/objects/Flashcard.java +++ b/src/main/java/com/clanki/objects/Flashcard.java @@ -16,8 +16,7 @@ public Flashcard(String questionText, String answerText) { this.currentPeriodInDays = 0; } - public Flashcard(String questionText, String answerText, LocalDate dueDate, - int currentPeriodInDays) { + public Flashcard(String questionText, String answerText, LocalDate dueDate, int currentPeriodInDays) { this.questionText = questionText; this.answerText = answerText; this.dueDate = dueDate; @@ -55,9 +54,10 @@ public boolean isDueToday() { /** * this function checks if the flashcard is due or overdue * Sometimes the user may not clear all flashcards on time, so we may have cards overdue + * * @return true if the card is due or overdue */ - public boolean isDueBeforeToday(){ + public boolean isDueBeforeToday() { return !LocalDate.now().isBefore(this.getDueDate()); } diff --git a/src/main/java/com/clanki/objects/FlashcardList.java b/src/main/java/com/clanki/objects/FlashcardList.java index 084d9edb9d..1f22cb0daf 100644 --- a/src/main/java/com/clanki/objects/FlashcardList.java +++ b/src/main/java/com/clanki/objects/FlashcardList.java @@ -3,7 +3,7 @@ import java.util.ArrayList; public class FlashcardList { - private ArrayList flashcards; + private final ArrayList flashcards; public FlashcardList() { this.flashcards = new ArrayList<>(); @@ -13,7 +13,8 @@ public void addNewFlashcard(String questionText, String answerText) { Flashcard newFlashcard = new Flashcard(questionText, answerText); flashcards.add(newFlashcard); } - public ArrayList getFlashCards(){ + + public ArrayList getFlashCards() { return flashcards; } } diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index c0c01c93f9..75333c8161 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -26,7 +26,7 @@ public Ui(InputStream in, PrintStream out) { * Prompts for the command and reads the text entered by the user. Ignores * empty, pure whitespace, and comment lines. Echos the command back to the * user. - * + * * @return command (full line) entered by the user */ public String getUserCommand() { @@ -50,6 +50,7 @@ public void printInvalidInput() { /** * reused from Kong Dehao ip * for general printing to console + * * @param message multiple strings to be shown to user */ public void print(String... message) { From 5b4d680475451226a4ebe87576da7f89959627ca Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Mon, 13 Mar 2023 00:12:03 +0800 Subject: [PATCH 039/174] Reformat again for code style --- .../java/com/clanki/commands/ByeCommand.java | 3 +- src/main/java/com/clanki/parser/Parser.java | 45 ++++++++++--------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/clanki/commands/ByeCommand.java b/src/main/java/com/clanki/commands/ByeCommand.java index 59f493245e..4c5dea1b86 100644 --- a/src/main/java/com/clanki/commands/ByeCommand.java +++ b/src/main/java/com/clanki/commands/ByeCommand.java @@ -3,8 +3,7 @@ import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; -public class -ByeCommand extends Command { +public class ByeCommand extends Command { @Override public void execute(FlashcardList flashcardList, Ui display) { display.printByeMessage(); diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index cc0256e98f..d4b523ec49 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -12,23 +12,23 @@ public class Parser { public Command parseCommand(String userInput) { String commandPhrase = userInput.split(" ")[0]; switch (commandPhrase) { - case "add": - try { - return reformatAddCommandInput(userInput); - } catch (InvalidAddFlashcardInputException e) { - System.out.println("The input is in an incorrect format, please follow the format in user guide"); - } catch (EmptyFlashcardQuestionException e) { - System.out.println("The question of this card is empty, please enter one."); - } catch (EmptyFlashcardAnswerException e) { - System.out.println("The answer for this flashcard is empty, please enter one."); - } - break; - case "review": - return new ReviewCommand(); - case "bye": - return new ByeCommand(); - default: - return new UnknownCommand(); + case "add": + try { + return reformatAddCommandInput(userInput); + } catch (InvalidAddFlashcardInputException e) { + System.out.println("The input is in an incorrect format, please follow the format in user guide"); + } catch (EmptyFlashcardQuestionException e) { + System.out.println("The question of this card is empty, please enter one."); + } catch (EmptyFlashcardAnswerException e) { + System.out.println("The answer for this flashcard is empty, please enter one."); + } + break; + case "review": + return new ReviewCommand(); + case "bye": + return new ByeCommand(); + default: + return new UnknownCommand(); } return new UnknownCommand(); } @@ -47,7 +47,8 @@ public Command parseCommand(String userInput) { * @throws EmptyFlashcardAnswerException If the string is empty after * ANSWER_START_INDICATOR. */ - public AddCommand reformatAddCommandInput(String userInput) throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, EmptyFlashcardAnswerException { + public AddCommand reformatAddCommandInput(String userInput) + throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, EmptyFlashcardAnswerException { int positionOfStartOfQuestion = userInput.indexOf(QUESTION_START_INDICATOR); int positionOfStartOfAnswer = userInput.indexOf(ANSWER_START_INDICATOR); if (positionOfStartOfAnswer == -1 || positionOfStartOfQuestion == -1) { @@ -56,11 +57,15 @@ public AddCommand reformatAddCommandInput(String userInput) throws InvalidAddFla String questionText = ""; String answerText = ""; if (positionOfStartOfAnswer > positionOfStartOfQuestion) { - questionText = userInput.substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length(), positionOfStartOfAnswer).trim(); + questionText = userInput + .substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length(), positionOfStartOfAnswer) + .trim(); answerText = userInput.substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length()).trim(); } else { questionText = userInput.substring(positionOfStartOfQuestion + QUESTION_START_INDICATOR.length()).trim(); - answerText = userInput.substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length(), positionOfStartOfQuestion).trim(); + answerText = userInput + .substring(positionOfStartOfAnswer + ANSWER_START_INDICATOR.length(), positionOfStartOfQuestion) + .trim(); } if (questionText.isEmpty()) { From 031c85e301cb912887c3ee22029b4e379cf6368f Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Mon, 13 Mar 2023 00:15:42 +0800 Subject: [PATCH 040/174] reformat parser import for code style --- src/main/java/com/clanki/parser/Parser.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index d4b523ec49..ae731b07ee 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -1,6 +1,11 @@ package com.clanki.parser; -import com.clanki.commands.*; + +import com.clanki.commands.ByeCommand; +import com.clanki.commands.Command; +import com.clanki.commands.ReviewCommand; +import com.clanki.commands.UnknownCommand; +import com.clanki.commands.AddCommand; import com.clanki.exceptions.EmptyFlashcardAnswerException; import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; @@ -47,7 +52,7 @@ public Command parseCommand(String userInput) { * @throws EmptyFlashcardAnswerException If the string is empty after * ANSWER_START_INDICATOR. */ - public AddCommand reformatAddCommandInput(String userInput) + public Command reformatAddCommandInput(String userInput) throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, EmptyFlashcardAnswerException { int positionOfStartOfQuestion = userInput.indexOf(QUESTION_START_INDICATOR); int positionOfStartOfAnswer = userInput.indexOf(ANSWER_START_INDICATOR); From cf7bedd882e82ec78cc3a0af9706c4df867487f5 Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Mon, 13 Mar 2023 00:26:16 +0800 Subject: [PATCH 041/174] Reformat parser javadoc indent for code style --- src/main/java/com/clanki/parser/Parser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index ae731b07ee..2238a82778 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -44,7 +44,7 @@ public Command parseCommand(String userInput) { * * @param userInput The input collected by Ui from the user. * @return An AddCommand with the question and answer text extracted from user - * input. + * input. * @throws InvalidAddFlashcardInputException If the start indicators cannot be * found. * @throws EmptyFlashcardQuestionException If the string is empty after From b900a0c8103502142134643ff1c187baf2cc7a72 Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Mon, 13 Mar 2023 00:54:54 +0800 Subject: [PATCH 042/174] Add Junit test in ParserTest for reviewCommand --- src/test/java/com/clanki/parser/ParserTest.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index 958cba6b32..5eb666be4f 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -1,10 +1,7 @@ package com.clanki.parser; -import com.clanki.commands.AddCommand; -import com.clanki.commands.ByeCommand; -import com.clanki.commands.Command; -import com.clanki.commands.UnknownCommand; +import com.clanki.commands.*; import com.clanki.exceptions.EmptyFlashcardAnswerException; import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; @@ -58,6 +55,12 @@ public void parserByeCommand_byeCommand_successful() { parsedCommand = parser.parseCommand("bye whatever"); assertTrue(parsedCommand instanceof ByeCommand); } + @Test + public void parserReviewCommand_reviewCommand_successful() { + Parser parser = new Parser(); + Command parsedCommand = parser.parseCommand("review"); + assertTrue(parsedCommand instanceof ReviewCommand); + } @Test public void parserUnknownCommand_unknownCommand_successful() { From 1b5bc89fbcdd0ceb0552c9f8ab8a4311a9e24c7b Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Mon, 13 Mar 2023 00:58:31 +0800 Subject: [PATCH 043/174] Reformat import for ParserTest for code style --- src/test/java/com/clanki/parser/ParserTest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index 5eb666be4f..1d93dff33e 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -1,7 +1,11 @@ package com.clanki.parser; -import com.clanki.commands.*; +import com.clanki.commands.AddCommand; +import com.clanki.commands.ByeCommand; +import com.clanki.commands.Command; +import com.clanki.commands.ReviewCommand; +import com.clanki.commands.UnknownCommand; import com.clanki.exceptions.EmptyFlashcardAnswerException; import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; From ba6bb473e7bda565b401527599c2e131e53dfc9c Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Mon, 13 Mar 2023 01:22:37 +0800 Subject: [PATCH 044/174] Add text-ui-test for reviewCommand, bugs present --- text-ui-test/EXPECTED.TXT | 12 ++++++++++-- text-ui-test/input.txt | 5 ++++- text-ui-test/runtest.bat | 1 + 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 99824ba3d2..b8a51de2be 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,5 +1,13 @@ A new card is now added: -Question: hello -Answer: world +Question: q1 +Answer: a1 +Let's see the next flashcard! +Question for the current flashcard is: +q1 +Are you ready to view the answer? +a1 +Have you got this correct? +Great, you got it right! +Congrats! You have reviewed all the flashcards due today! The input is in an incorrect format. Bye. Don't forget to come back later to study! diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 35af388f25..8a8b92199d 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1,3 +1,6 @@ -add /q hello /a world +add /q q1 /a a1 +review +a +y foo 1 bye diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat index 25ac7a2989..c635c04c28 100644 --- a/text-ui-test/runtest.bat +++ b/text-ui-test/runtest.bat @@ -17,3 +17,4 @@ java -jar %jarloc% < ..\..\text-ui-test\input.txt > ..\..\text-ui-test\ACTUAL.TX cd ..\..\text-ui-test FC ACTUAL.TXT EXPECTED.TXT >NUL && ECHO Test passed! || Echo Test failed! +FC ACTUAL.TXT EXPECTED.TXT \ No newline at end of file From 61563972a193594d50c5a3b36f1e4a749d2a929e Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Mon, 13 Mar 2023 09:31:34 +0800 Subject: [PATCH 045/174] Modify ReviewCommand to trim space at the end of sout to pass text ui test --- src/main/java/com/clanki/commands/ReviewCommand.java | 2 +- text-ui-test/EXPECTED.TXT | 10 ++++++++++ text-ui-test/input.txt | 3 +++ text-ui-test/runtest.bat | 3 +-- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/clanki/commands/ReviewCommand.java b/src/main/java/com/clanki/commands/ReviewCommand.java index e58d8dd5ad..42fcde9d5d 100644 --- a/src/main/java/com/clanki/commands/ReviewCommand.java +++ b/src/main/java/com/clanki/commands/ReviewCommand.java @@ -12,7 +12,7 @@ private static void reviewCurrentFlashcard(Ui display, Flashcard flashcard) { boolean isCurrentCardPassed = false; display.print("Let's see the next flashcard!"); while (!isCurrentCardPassed) { - display.print("Question for the current flashcard is: ", flashcard.getQuestion()); + display.print("Question for the current flashcard is:", flashcard.getQuestion()); display.print("Are you ready to view the answer?"); String viewAnswerCommand = display.getUserCommand(); if (Objects.equals(viewAnswerCommand, "answer") || Objects.equals(viewAnswerCommand, "a")) { diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index b8a51de2be..0bbe74ef79 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,6 +1,9 @@ A new card is now added: Question: q1 Answer: a1 +A new card is now added: +Question: q1 +Answer: a1 Let's see the next flashcard! Question for the current flashcard is: q1 @@ -8,6 +11,13 @@ Are you ready to view the answer? a1 Have you got this correct? Great, you got it right! +Let's see the next flashcard! +Question for the current flashcard is: +q1 +Are you ready to view the answer? +a1 +Have you got this correct? +No worries, we will try it next time. Congrats! You have reviewed all the flashcards due today! The input is in an incorrect format. Bye. Don't forget to come back later to study! diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 8a8b92199d..68841312f6 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1,6 +1,9 @@ add /q q1 /a a1 +add /q q1 /a a1 review a y +a +n foo 1 bye diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat index c635c04c28..53335711a1 100644 --- a/text-ui-test/runtest.bat +++ b/text-ui-test/runtest.bat @@ -16,5 +16,4 @@ java -jar %jarloc% < ..\..\text-ui-test\input.txt > ..\..\text-ui-test\ACTUAL.TX cd ..\..\text-ui-test -FC ACTUAL.TXT EXPECTED.TXT >NUL && ECHO Test passed! || Echo Test failed! -FC ACTUAL.TXT EXPECTED.TXT \ No newline at end of file +FC ACTUAL.TXT EXPECTED.TXT >NUL && ECHO Test passed! || Echo Test failed! \ No newline at end of file From 4352a082cbcda7dfcf4865070e3bfd307cbe8f19 Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Mon, 13 Mar 2023 09:47:44 +0800 Subject: [PATCH 046/174] Modify according to PR comments --- src/main/java/com/clanki/Clanki.java | 2 -- .../com/clanki/commands/ReviewCommand.java | 36 +++++++++---------- .../com/clanki/objects/FlashcardList.java | 3 +- src/main/java/com/clanki/ui/Ui.java | 2 +- 4 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/clanki/Clanki.java b/src/main/java/com/clanki/Clanki.java index 0b21b5b360..4149d5310e 100644 --- a/src/main/java/com/clanki/Clanki.java +++ b/src/main/java/com/clanki/Clanki.java @@ -13,8 +13,6 @@ public class Clanki { private final Ui ui; private final FlashcardList flashcardList; private final Parser parser; - private ArrayList flashcardsForToday; - private int currentFlashcardIndex; public Clanki() { this.ui = new Ui(); diff --git a/src/main/java/com/clanki/commands/ReviewCommand.java b/src/main/java/com/clanki/commands/ReviewCommand.java index 42fcde9d5d..3e97a13830 100644 --- a/src/main/java/com/clanki/commands/ReviewCommand.java +++ b/src/main/java/com/clanki/commands/ReviewCommand.java @@ -5,33 +5,29 @@ import com.clanki.ui.Ui; import java.util.ArrayList; -import java.util.Objects; public class ReviewCommand extends Command { private static void reviewCurrentFlashcard(Ui display, Flashcard flashcard) { boolean isCurrentCardPassed = false; - display.print("Let's see the next flashcard!"); + display.printlnSeveralStrings("Let's see the next flashcard!"); while (!isCurrentCardPassed) { - display.print("Question for the current flashcard is:", flashcard.getQuestion()); - display.print("Are you ready to view the answer?"); - String viewAnswerCommand = display.getUserCommand(); - if (Objects.equals(viewAnswerCommand, "answer") || Objects.equals(viewAnswerCommand, "a")) { - display.print(flashcard.getAnswer(), "Have you got this correct?"); - String ifCorrectAnswerCommand = display.getUserCommand(); - if (Objects.equals(ifCorrectAnswerCommand, "yes") || Objects.equals(ifCorrectAnswerCommand, "y")) { - display.print("Great, you got it right!"); - flashcard.updateDueDateAfterCorrectAnswer(); - isCurrentCardPassed = true; - } else if (Objects.equals(ifCorrectAnswerCommand, "n")) { - display.print("No worries, we will try it next time."); - flashcard.updateDueDateAfterIncorrectAnswer(); - isCurrentCardPassed = true; - } else { - display.printInvalidInput(); - } + display.printlnSeveralStrings("Question for the current flashcard is:", flashcard.getQuestion()); + display.printlnSeveralStrings("Are you ready to view the answer?"); + display.getUserCommand(); + display.printlnSeveralStrings(flashcard.getAnswer(), "Have you got this correct?"); + String answerIfCorrect = display.getUserCommand(); + if (answerIfCorrect.equals("yes") || answerIfCorrect.equals("y")) { + display.printlnSeveralStrings("Great, you got it right!"); + flashcard.updateDueDateAfterCorrectAnswer(); + isCurrentCardPassed = true; + } else if (answerIfCorrect.equals("n")) { + display.printlnSeveralStrings("No worries, we will try it next time."); + flashcard.updateDueDateAfterIncorrectAnswer(); + isCurrentCardPassed = true; } else { display.printInvalidInput(); } + } } @@ -44,6 +40,6 @@ public void execute(FlashcardList flashcardList, Ui display) { reviewCurrentFlashcard(display, flashcard); } } - display.print("Congrats! You have reviewed all the flashcards due today!"); + display.printlnSeveralStrings("Congrats! You have reviewed all the flashcards due today!"); } } diff --git a/src/main/java/com/clanki/objects/FlashcardList.java b/src/main/java/com/clanki/objects/FlashcardList.java index 1f22cb0daf..8a0bbbb304 100644 --- a/src/main/java/com/clanki/objects/FlashcardList.java +++ b/src/main/java/com/clanki/objects/FlashcardList.java @@ -3,7 +3,7 @@ import java.util.ArrayList; public class FlashcardList { - private final ArrayList flashcards; + private ArrayList flashcards; public FlashcardList() { this.flashcards = new ArrayList<>(); @@ -13,7 +13,6 @@ public void addNewFlashcard(String questionText, String answerText) { Flashcard newFlashcard = new Flashcard(questionText, answerText); flashcards.add(newFlashcard); } - public ArrayList getFlashCards() { return flashcards; } diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 75333c8161..9a6ab5c193 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -53,7 +53,7 @@ public void printInvalidInput() { * * @param message multiple strings to be shown to user */ - public void print(String... message) { + public void printlnSeveralStrings(String... message) { for (String m : message) { System.out.println(m); } From 4935709a8b67792282f9bf3df4df52d90c694387 Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Mon, 13 Mar 2023 09:50:33 +0800 Subject: [PATCH 047/174] Reformat for code style --- src/main/java/com/clanki/Clanki.java | 3 --- src/main/java/com/clanki/objects/FlashcardList.java | 3 ++- src/main/java/com/clanki/parser/Parser.java | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/clanki/Clanki.java b/src/main/java/com/clanki/Clanki.java index 4149d5310e..4838704158 100644 --- a/src/main/java/com/clanki/Clanki.java +++ b/src/main/java/com/clanki/Clanki.java @@ -2,13 +2,10 @@ import com.clanki.commands.ByeCommand; import com.clanki.commands.Command; -import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; import com.clanki.parser.Parser; import com.clanki.ui.Ui; -import java.util.ArrayList; - public class Clanki { private final Ui ui; private final FlashcardList flashcardList; diff --git a/src/main/java/com/clanki/objects/FlashcardList.java b/src/main/java/com/clanki/objects/FlashcardList.java index 8a0bbbb304..1f22cb0daf 100644 --- a/src/main/java/com/clanki/objects/FlashcardList.java +++ b/src/main/java/com/clanki/objects/FlashcardList.java @@ -3,7 +3,7 @@ import java.util.ArrayList; public class FlashcardList { - private ArrayList flashcards; + private final ArrayList flashcards; public FlashcardList() { this.flashcards = new ArrayList<>(); @@ -13,6 +13,7 @@ public void addNewFlashcard(String questionText, String answerText) { Flashcard newFlashcard = new Flashcard(questionText, answerText); flashcards.add(newFlashcard); } + public ArrayList getFlashCards() { return flashcards; } diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index 2238a82778..bc84c4747c 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -1,11 +1,11 @@ package com.clanki.parser; +import com.clanki.commands.AddCommand; import com.clanki.commands.ByeCommand; import com.clanki.commands.Command; import com.clanki.commands.ReviewCommand; import com.clanki.commands.UnknownCommand; -import com.clanki.commands.AddCommand; import com.clanki.exceptions.EmptyFlashcardAnswerException; import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; From f711d4bdf58c9954277b00d73a3fb4ef5359396e Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Mon, 13 Mar 2023 15:22:12 +0800 Subject: [PATCH 048/174] Added function to update flashcards --- .../com/clanki/commands/UpdateCommand.java | 72 +++++++++++++++++++ src/main/java/com/clanki/parser/Parser.java | 8 +-- 2 files changed, 75 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/clanki/commands/UpdateCommand.java diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java new file mode 100644 index 0000000000..d9d7c1769d --- /dev/null +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -0,0 +1,72 @@ +package com.clanki.commands; + +import com.clanki.objects.Flashcard; +import com.clanki.objects.FlashcardList; +import com.clanki.ui.Ui; + +import java.util.ArrayList; +import java.util.Scanner; + +public class UpdateCommand extends Command { + + String query; + ArrayList matchingFlashcards = new ArrayList<>(); + + public UpdateCommand(String userInput) { + super(); + this.query = userInput.split(" ", 2)[1]; + } + + public void printFlashCard(Flashcard flashcard) { + System.out.println("Q: " + flashcard.getQuestion()); + System.out.println("A: " + flashcard.getAnswer()); + } + + public void printFlashCards(ArrayList flashcards) { + for (int i = 0; i < flashcards.size(); i++) { + System.out.println("[" + (i + 1) + "]"); + printFlashCard(flashcards.get(i)); + } + } + public void findFlashcard(ArrayList flashcards, String query) { + for (int i = 0; i < flashcards.size(); i++) { + Flashcard currentFlashcard = flashcards.get(i); + if (currentFlashcard.getQuestion().contains(query) || currentFlashcard.getAnswer().contains(query)) { + matchingFlashcards.add(currentFlashcard); + } + } + } + + public static String getInput() { + Scanner input = new Scanner(System.in); + String userText = input.nextLine(); + return userText; + } + + public int implementUpdate(ArrayList flashcards, String userText) { + String[] userTexts = userText.split(" ", 3); + int indexInMatchList = Integer.parseInt(userTexts[0]) - 1; + Flashcard flashcardToChange = matchingFlashcards.get(indexInMatchList); + int index = flashcards.indexOf(flashcardToChange); + if (userTexts[1].contains("q")) { + flashcards.get(index).setQuestion(userTexts[2]); + } + if (userTexts[1].contains("a")) { + flashcards.get(index).setAnswer(userTexts[2]); + } + return index; + } + + @Override + public void execute(FlashcardList flashcardList, Ui display) { + ArrayList flashcards = flashcardList.getFlashCards(); + findFlashcard(flashcards, query); + System.out.println("Found " + matchingFlashcards.size() + " cards with the query \"" + query + "\": "); + printFlashCards(matchingFlashcards); + System.out.println("Which flashcard do you want to update?"); + String userText = getInput(); + int index = implementUpdate(flashcards, userText); + System.out.println("Understood. The card has been updated to"); + printFlashCard(flashcards.get(index)); + } +} diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index bc84c4747c..ac9f0b77cc 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -1,11 +1,7 @@ package com.clanki.parser; -import com.clanki.commands.AddCommand; -import com.clanki.commands.ByeCommand; -import com.clanki.commands.Command; -import com.clanki.commands.ReviewCommand; -import com.clanki.commands.UnknownCommand; +import com.clanki.commands.*; import com.clanki.exceptions.EmptyFlashcardAnswerException; import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; @@ -32,6 +28,8 @@ public Command parseCommand(String userInput) { return new ReviewCommand(); case "bye": return new ByeCommand(); + case "update": + return new UpdateCommand(userInput); default: return new UnknownCommand(); } From eeb1fdaf70b4c20114c1ab55feab12604b3d0e8a Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Mon, 13 Mar 2023 17:47:09 +0800 Subject: [PATCH 049/174] changed import * --- src/main/java/com/clanki/parser/Parser.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index ac9f0b77cc..60b81e5bfc 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -1,7 +1,6 @@ package com.clanki.parser; - -import com.clanki.commands.*; +import com.clanki.commands.Command; import com.clanki.exceptions.EmptyFlashcardAnswerException; import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; From 23f46a65ac72a943d53b39d6396586fc44c6d47d Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Mon, 13 Mar 2023 17:51:44 +0800 Subject: [PATCH 050/174] Added imports --- src/main/java/com/clanki/parser/Parser.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index 60b81e5bfc..7b8e2aca33 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -1,6 +1,11 @@ package com.clanki.parser; +import com.clanki.commands.AddCommand; +import com.clanki.commands.ByeCommand; import com.clanki.commands.Command; +import com.clanki.commands.ReviewCommand; +import com.clanki.commands.UnknownCommand; +import com.clanki.commands.UpdateCommand; import com.clanki.exceptions.EmptyFlashcardAnswerException; import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; From d2a2c94f237fcdd3cf437844678913e15e0b8a45 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Mon, 13 Mar 2023 18:12:13 +0800 Subject: [PATCH 051/174] Add text-ui-test for UpdateCommand --- text-ui-test/EXPECTED.TXT | 13 ++++++++++++- text-ui-test/input.txt | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 0bbe74ef79..66506bb4e6 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -4,6 +4,17 @@ Answer: a1 A new card is now added: Question: q1 Answer: a1 +Found 2 cards with the query "q1": +[1] +Q: q1 +A: a1 +[2] +Q: q1 +A: a1 +Which flashcard do you want to update? +Understood. The card has been updated to +Q: q2 +A: a1 Let's see the next flashcard! Question for the current flashcard is: q1 @@ -13,7 +24,7 @@ Have you got this correct? Great, you got it right! Let's see the next flashcard! Question for the current flashcard is: -q1 +q2 Are you ready to view the answer? a1 Have you got this correct? diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 68841312f6..6b557291b1 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1,5 +1,7 @@ add /q q1 /a a1 add /q q1 /a a1 +update q1 +2 /q q2 review a y From 17bd74c74a8e9b3e53d5f6c1bcbca3054efce2f7 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Mon, 13 Mar 2023 20:23:16 +0800 Subject: [PATCH 052/174] Add Junit test for updateCommand --- src/main/java/com/clanki/commands/UpdateCommand.java | 1 - src/test/java/com/clanki/parser/ParserTest.java | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index d9d7c1769d..83a5b073a1 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -8,7 +8,6 @@ import java.util.Scanner; public class UpdateCommand extends Command { - String query; ArrayList matchingFlashcards = new ArrayList<>(); diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index 1d93dff33e..adebc5b570 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -6,6 +6,7 @@ import com.clanki.commands.Command; import com.clanki.commands.ReviewCommand; import com.clanki.commands.UnknownCommand; +import com.clanki.commands.UpdateCommand; import com.clanki.exceptions.EmptyFlashcardAnswerException; import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; @@ -72,4 +73,11 @@ public void parserUnknownCommand_unknownCommand_successful() { Command parsedCommand = parser.parseCommand("unknown"); assertTrue(parsedCommand instanceof UnknownCommand); } + + @Test + public void parserUpdateCommand_updateCommand_successful() { + Parser parser = new Parser(); + Command parsedCommand = parser.parseCommand("update"); + assertTrue(parsedCommand instanceof UpdateCommand); + } } From 6eed601ddf6a8a69a22d59883f658911fa212a26 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Mon, 13 Mar 2023 20:50:24 +0800 Subject: [PATCH 053/174] Fixed error --- src/main/java/com/clanki/commands/UpdateCommand.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 83a5b073a1..a3396296f6 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -13,7 +13,7 @@ public class UpdateCommand extends Command { public UpdateCommand(String userInput) { super(); - this.query = userInput.split(" ", 2)[1]; + this.query = userInput.split(" ")[1]; } public void printFlashCard(Flashcard flashcard) { @@ -38,8 +38,7 @@ public void findFlashcard(ArrayList flashcards, String query) { public static String getInput() { Scanner input = new Scanner(System.in); - String userText = input.nextLine(); - return userText; + return input.nextLine(); } public int implementUpdate(ArrayList flashcards, String userText) { From f41b5dacd7fcfb53a9f1803ab8dafab1992a6ad3 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Mon, 13 Mar 2023 20:59:21 +0800 Subject: [PATCH 054/174] Added query after update in ParserTest --- src/test/java/com/clanki/parser/ParserTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index adebc5b570..7bd7df588a 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -77,7 +77,7 @@ public void parserUnknownCommand_unknownCommand_successful() { @Test public void parserUpdateCommand_updateCommand_successful() { Parser parser = new Parser(); - Command parsedCommand = parser.parseCommand("update"); + Command parsedCommand = parser.parseCommand("update Question"); assertTrue(parsedCommand instanceof UpdateCommand); } } From ff5a9cada2f03309768e9cf6c2978de6ee9003bb Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Mon, 13 Mar 2023 21:16:00 +0800 Subject: [PATCH 055/174] Removed getInput method --- src/main/java/com/clanki/commands/UpdateCommand.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index a3396296f6..5967257b79 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -36,11 +36,6 @@ public void findFlashcard(ArrayList flashcards, String query) { } } - public static String getInput() { - Scanner input = new Scanner(System.in); - return input.nextLine(); - } - public int implementUpdate(ArrayList flashcards, String userText) { String[] userTexts = userText.split(" ", 3); int indexInMatchList = Integer.parseInt(userTexts[0]) - 1; @@ -62,7 +57,7 @@ public void execute(FlashcardList flashcardList, Ui display) { System.out.println("Found " + matchingFlashcards.size() + " cards with the query \"" + query + "\": "); printFlashCards(matchingFlashcards); System.out.println("Which flashcard do you want to update?"); - String userText = getInput(); + String userText = display.getUserCommand(); int index = implementUpdate(flashcards, userText); System.out.println("Understood. The card has been updated to"); printFlashCard(flashcards.get(index)); From 108670f182f0db5ee436e352d7d1422372c20ac6 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Mon, 13 Mar 2023 22:57:04 +0800 Subject: [PATCH 056/174] Corrected wrong comment format in Parser class --- src/main/java/com/clanki/parser/Parser.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index f507698e59..a395b22300 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -47,8 +47,7 @@ public Command parseCommand(String userInput) { * incorrect format, a respective exception will be thrown. * * @param userInput The input collected by Ui from the user. - * @return An AddCommand with the question and answer text extracted from user - * input. + * @return An AddCommand with the question and answer text extracted from user input. * @throws InvalidAddFlashcardInputException If the start indicators cannot be * found. * @throws EmptyFlashcardQuestionException If the string is empty after From 068249707681373ad9034b4f4cc888964c1e8be0 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 14 Mar 2023 09:02:36 +0800 Subject: [PATCH 057/174] Removed unused import --- src/main/java/com/clanki/commands/UpdateCommand.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 5967257b79..34d8494cd7 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -5,7 +5,6 @@ import com.clanki.ui.Ui; import java.util.ArrayList; -import java.util.Scanner; public class UpdateCommand extends Command { String query; From 8c2e0a96986e52c53d242366c56cd523968da477 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 14 Mar 2023 21:22:29 +0800 Subject: [PATCH 058/174] Changed EXPECTED.TXT file --- src/main/java/com/clanki/commands/UpdateCommand.java | 1 + src/main/java/com/clanki/ui/Ui.java | 2 ++ text-ui-test/EXPECTED.TXT | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 34d8494cd7..82c2200d54 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -26,6 +26,7 @@ public void printFlashCards(ArrayList flashcards) { printFlashCard(flashcards.get(i)); } } + public void findFlashcard(ArrayList flashcards, String query) { for (int i = 0; i < flashcards.size(); i++) { Flashcard currentFlashcard = flashcards.get(i); diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 9a6ab5c193..67094a8968 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -1,5 +1,7 @@ package com.clanki.ui; +import com.clanki.objects.Flashcard; + import java.io.InputStream; import java.io.PrintStream; import java.util.Scanner; diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 66506bb4e6..4b60526b06 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -31,4 +31,4 @@ Have you got this correct? No worries, we will try it next time. Congrats! You have reviewed all the flashcards due today! The input is in an incorrect format. -Bye. Don't forget to come back later to study! +Bye. Don't forget to come back later to study! \ No newline at end of file From 1992ca00fc16b5922ff20f298c9e6eccaf4218cb Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 14 Mar 2023 21:24:55 +0800 Subject: [PATCH 059/174] Removed unused import statement --- src/main/java/com/clanki/ui/Ui.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 67094a8968..9a6ab5c193 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -1,7 +1,5 @@ package com.clanki.ui; -import com.clanki.objects.Flashcard; - import java.io.InputStream; import java.io.PrintStream; import java.util.Scanner; From 4f02babdade808fed950b93839c2747bd725692e Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 14 Mar 2023 21:27:17 +0800 Subject: [PATCH 060/174] Added new line at the end of EXPECTED.TXT --- text-ui-test/EXPECTED.TXT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 4b60526b06..66506bb4e6 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -31,4 +31,4 @@ Have you got this correct? No worries, we will try it next time. Congrats! You have reviewed all the flashcards due today! The input is in an incorrect format. -Bye. Don't forget to come back later to study! \ No newline at end of file +Bye. Don't forget to come back later to study! From 7cf48b82b724e12a33b32e879312d10095bd2f07 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 14 Mar 2023 21:41:14 +0800 Subject: [PATCH 061/174] Removed trailing spaces at the end of printed line --- src/main/java/com/clanki/commands/UpdateCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 82c2200d54..0423c3f113 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -54,7 +54,7 @@ public int implementUpdate(ArrayList flashcards, String userText) { public void execute(FlashcardList flashcardList, Ui display) { ArrayList flashcards = flashcardList.getFlashCards(); findFlashcard(flashcards, query); - System.out.println("Found " + matchingFlashcards.size() + " cards with the query \"" + query + "\": "); + System.out.println("Found " + matchingFlashcards.size() + " cards with the query \"" + query + "\":"); printFlashCards(matchingFlashcards); System.out.println("Which flashcard do you want to update?"); String userText = display.getUserCommand(); From c51c5573607f4722767b3218fcb4f32ea76a330f Mon Sep 17 00:00:00 2001 From: Zijin Date: Tue, 14 Mar 2023 21:58:05 +0800 Subject: [PATCH 062/174] Include a welcome message that will be printed when starting --- src/main/java/com/clanki/Clanki.java | 1 + src/main/java/com/clanki/ui/Ui.java | 4 ++++ text-ui-test/EXPECTED.TXT | 1 + 3 files changed, 6 insertions(+) diff --git a/src/main/java/com/clanki/Clanki.java b/src/main/java/com/clanki/Clanki.java index 4838704158..80ffc3edc1 100644 --- a/src/main/java/com/clanki/Clanki.java +++ b/src/main/java/com/clanki/Clanki.java @@ -22,6 +22,7 @@ public static void main(String[] args) { } public void run() { + ui.printWelcomeMessage(); while (true) { String inputText = ui.getUserCommand(); Command command = parser.parseCommand(inputText); diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 6958873997..aa5ae77f22 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -43,6 +43,10 @@ public void printByeMessage() { System.out.println("Bye. Don't forget to come back later to study!"); } + public void printWelcomeMessage() { + System.out.println("Welcome to Clanki! Time to start studying!"); + } + public void printInvalidInput() { System.out.println("The input is in an incorrect format."); } diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 66506bb4e6..683ccae3b9 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,3 +1,4 @@ +Welcome to Clanki! Time to start studying! A new card is now added: Question: q1 Answer: a1 From bc94509aa7a4469eaf287b43712e09de1ba9df45 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Thu, 16 Mar 2023 14:19:30 +0800 Subject: [PATCH 063/174] Configure other commands to use the new parser Signed-off-by: Vu Van Dung --- .../com/clanki/commands/UpdateCommand.java | 4 +-- src/main/java/com/clanki/parser/Parser.java | 30 ++++++++++++++----- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 064eec9f1f..e1a7f8743e 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -10,9 +10,9 @@ public class UpdateCommand extends Command { String query; ArrayList matchingFlashcards = new ArrayList<>(); - public UpdateCommand(String userInput) { + public UpdateCommand(String query) { super(); - this.query = userInput.split(" ")[1]; + this.query = query; } public void printFlashCard(Flashcard flashcard) { diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index aa4b155a12..ff4d2e1743 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -37,15 +37,14 @@ public static Command parseCommandStrict(String userInput) switch (command) { case "add": return getAddCommand(parsedInput); - case "del": - int index = Integer.parseInt(userInput.split(" ")[1]); - return new DeleteCommand(index); case "review": - return new ReviewCommand(); - case "bye": - return new ByeCommand(); + return getReviewCommand(parsedInput); case "update": - return new UpdateCommand(userInput); + return getUpdateCommand(parsedInput); + case "del": + return getDeleteCommand(parsedInput); + case "bye": + return getByeCommand(parsedInput); default: return new UnknownCommand(); } @@ -82,4 +81,21 @@ public static AddCommand getAddCommand(ParsedInput parsedInput) } return new AddCommand(questionText, answerText); } + + public static ReviewCommand getReviewCommand(ParsedInput parsedInput) { + return new ReviewCommand(); + } + + public static UpdateCommand getUpdateCommand(ParsedInput parsedInput) { + return new UpdateCommand(parsedInput.getBody()); + } + + public static DeleteCommand getDeleteCommand(ParsedInput parsedInput) { + int index = Integer.parseInt(parsedInput.getBody()); + return new DeleteCommand(index); + } + + public static ByeCommand getByeCommand(ParsedInput parsedInput) { + return new ByeCommand(); + } } From cd1f06896fcfce8f7d890840fd37fb85ee7a5e48 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Thu, 16 Mar 2023 15:07:10 +0800 Subject: [PATCH 064/174] Enable assertions during run task Signed-off-by: Vu Van Dung --- build.gradle | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 1a3333af86..fd935b8b8a 100644 --- a/build.gradle +++ b/build.gradle @@ -41,6 +41,7 @@ checkstyle { toolVersion = '10.2' } -run{ +run { standardInput = System.in + enableAssertions = true } From 8eb1798090266a79c6861683d2d48622db9154e6 Mon Sep 17 00:00:00 2001 From: Zijin Date: Thu, 16 Mar 2023 15:24:05 +0800 Subject: [PATCH 065/174] Include some assertion for AddCommand and Parser --- src/main/java/com/clanki/commands/AddCommand.java | 2 ++ src/main/java/com/clanki/parser/Parser.java | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/commands/AddCommand.java b/src/main/java/com/clanki/commands/AddCommand.java index 6522884254..a9100a2059 100644 --- a/src/main/java/com/clanki/commands/AddCommand.java +++ b/src/main/java/com/clanki/commands/AddCommand.java @@ -12,7 +12,9 @@ public class AddCommand extends Command { String answerText; public AddCommand(String questionText, String answerText) { + assert !questionText.isEmpty() : "question text should not be empty"; this.questionText = questionText; + assert !answerText.isEmpty() : "answer text should not be empty"; this.answerText = answerText; } diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index ff4d2e1743..325b4e4c78 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -34,6 +34,7 @@ public static Command parseCommandStrict(String userInput) EmptyFlashcardAnswerException { ParsedInput parsedInput = new ParsedInput(userInput); String command = parsedInput.getCommand(); + assert !command.isEmpty() : "The command string must not be empty"; switch (command) { case "add": return getAddCommand(parsedInput); @@ -57,7 +58,7 @@ public static Command parseCommandStrict(String userInput) * @param parsedInput The input collected by Ui from the user, after being * parsed with the ParsedInput class. * @return An AddCommand with the question and answer text extracted from user - * input. + * input. * @throws InvalidAddFlashcardInputException If the start indicators cannot be * found. * @throws EmptyFlashcardQuestionException If the string is empty after From f0831095e30f62a440d45fd0406dd75a66b245d1 Mon Sep 17 00:00:00 2001 From: Zijin Date: Thu, 16 Mar 2023 15:28:15 +0800 Subject: [PATCH 066/174] Update code to follow check style rules --- src/main/java/com/clanki/parser/Parser.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index 325b4e4c78..acab8d985d 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -57,8 +57,7 @@ public static Command parseCommandStrict(String userInput) * * @param parsedInput The input collected by Ui from the user, after being * parsed with the ParsedInput class. - * @return An AddCommand with the question and answer text extracted from user - * input. + * @return An AddCommand with the question and answer text extracted from user input * @throws InvalidAddFlashcardInputException If the start indicators cannot be * found. * @throws EmptyFlashcardQuestionException If the string is empty after From 3fe66fd4f118a58918b382d7375a0d3cd9cd973e Mon Sep 17 00:00:00 2001 From: Zijin Date: Thu, 16 Mar 2023 15:54:10 +0800 Subject: [PATCH 067/174] Update code to include logging inside code --- src/main/java/com/clanki/commands/AddCommand.java | 6 ++++++ src/main/java/com/clanki/parser/Parser.java | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/src/main/java/com/clanki/commands/AddCommand.java b/src/main/java/com/clanki/commands/AddCommand.java index a9100a2059..5eedb9a1ff 100644 --- a/src/main/java/com/clanki/commands/AddCommand.java +++ b/src/main/java/com/clanki/commands/AddCommand.java @@ -3,11 +3,15 @@ import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; +import java.util.logging.Level; +import java.util.logging.Logger; + /** * A type of command that will instruct to add a new element into the ArrayList * of flashcards. */ public class AddCommand extends Command { + private static Logger logger = Logger.getLogger("AddCommand"); String questionText; String answerText; @@ -28,7 +32,9 @@ public String toString() { @Override public void execute(FlashcardList flashcardList, Ui display) { + logger.log(Level.INFO, "Start to add new flashcard to list of flashcards."); flashcardList.addNewFlashcard(questionText, answerText); + logger.log(Level.INFO, "Start to print when flashcard successfully added."); display.printSuccessfulAddMessage(questionText, answerText); } } diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index acab8d985d..44b26d786e 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -11,9 +11,13 @@ import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; +import java.util.logging.Level; +import java.util.logging.Logger; + public class Parser { private static final String QUESTION_OPTION_IDENTIFIER = "q"; private static final String ANSWER_OPTION_IDENTIFIER = "a"; + private static Logger logger = Logger.getLogger("Parser"); public static Command parseCommand(String userInput) { try { @@ -68,15 +72,19 @@ public static Command parseCommandStrict(String userInput) public static AddCommand getAddCommand(ParsedInput parsedInput) throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, EmptyFlashcardAnswerException { + logger.log(Level.INFO, "Start to parse input to obtain question text."); String questionText = parsedInput.getOptionByName(QUESTION_OPTION_IDENTIFIER); + logger.log(Level.INFO, "Start to parse input to obtain answer text."); String answerText = parsedInput.getOptionByName(ANSWER_OPTION_IDENTIFIER); if (questionText == null || answerText == null) { throw new InvalidAddFlashcardInputException(); } if (questionText.isEmpty()) { + logger.log(Level.INFO, "No input at question text detected."); throw new EmptyFlashcardQuestionException(); } if (answerText.isEmpty()) { + logger.log(Level.INFO, "No input at answer text detected."); throw new EmptyFlashcardAnswerException(); } return new AddCommand(questionText, answerText); From a4ef384050f3ed04d484e30e2c18d71956278303 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 20 Mar 2023 12:23:55 +0800 Subject: [PATCH 068/174] Update output after add command to follow requirment --- src/main/java/com/clanki/ui/Ui.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 1c8d22cffe..c2f2fdf714 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -34,9 +34,9 @@ public String getUserCommand() { } public void printSuccessfulAddMessage(String questionText, String answerText) { - System.out.println("A new card is now added:"); - System.out.println("Question: " + questionText); - System.out.println("Answer: " + answerText); + System.out.println("You have added the following card:"); + System.out.println("Q: " + questionText); + System.out.println("A: " + answerText); } public void printByeMessage() { From 5ae846c2067e6f87785faef0d6531c4e63aef9d8 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 20 Mar 2023 12:43:03 +0800 Subject: [PATCH 069/174] Update relevant files to automatically capitalise first letter --- .../java/com/clanki/commands/AddCommand.java | 4 +-- .../com/clanki/commands/UpdateCommand.java | 10 +++--- text-ui-test/EXPECTED.TXT | 32 +++++++++---------- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/clanki/commands/AddCommand.java b/src/main/java/com/clanki/commands/AddCommand.java index 5eedb9a1ff..41bc8a9f1e 100644 --- a/src/main/java/com/clanki/commands/AddCommand.java +++ b/src/main/java/com/clanki/commands/AddCommand.java @@ -17,9 +17,9 @@ public class AddCommand extends Command { public AddCommand(String questionText, String answerText) { assert !questionText.isEmpty() : "question text should not be empty"; - this.questionText = questionText; + this.questionText = questionText.substring(0, 1).toUpperCase() + questionText.substring(1); assert !answerText.isEmpty() : "answer text should not be empty"; - this.answerText = answerText; + this.answerText = answerText.substring(0, 1).toUpperCase() + answerText.substring(1); } /** diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index e1a7f8743e..90ee793462 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -30,8 +30,8 @@ public void printFlashCards(ArrayList flashcards) { public void findFlashcard(ArrayList flashcards, String query) { for (int i = 0; i < flashcards.size(); i++) { Flashcard currentFlashcard = flashcards.get(i); - if (currentFlashcard.getQuestion().contains(query) - || currentFlashcard.getAnswer().contains(query)) { + if (currentFlashcard.getQuestion().toLowerCase().contains(query.toLowerCase()) + || currentFlashcard.getAnswer().toLowerCase().contains(query.toLowerCase())) { matchingFlashcards.add(currentFlashcard); } } @@ -43,10 +43,12 @@ public int implementUpdate(ArrayList flashcards, String userText) { Flashcard flashcardToChange = matchingFlashcards.get(indexInMatchList); int index = flashcards.indexOf(flashcardToChange); if (userTexts[1].contains("q")) { - flashcards.get(index).setQuestion(userTexts[2]); + flashcards.get(index).setQuestion(userTexts[2].substring(0, 1).toUpperCase() + + userTexts[2].substring(1)); } if (userTexts[1].contains("a")) { - flashcards.get(index).setAnswer(userTexts[2]); + flashcards.get(index).setAnswer(userTexts[2].substring(0, 1).toUpperCase() + + userTexts[2].substring(1)); } return index; } diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 683ccae3b9..dee135244f 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,33 +1,33 @@ Welcome to Clanki! Time to start studying! -A new card is now added: -Question: q1 -Answer: a1 -A new card is now added: -Question: q1 -Answer: a1 +You have added the following card: +Q: Q1 +A: A1 +You have added the following card: +Q: Q1 +A: A1 Found 2 cards with the query "q1": [1] -Q: q1 -A: a1 +Q: Q1 +A: A1 [2] -Q: q1 -A: a1 +Q: Q1 +A: A1 Which flashcard do you want to update? Understood. The card has been updated to -Q: q2 -A: a1 +Q: Q2 +A: A1 Let's see the next flashcard! Question for the current flashcard is: -q1 +Q1 Are you ready to view the answer? -a1 +A1 Have you got this correct? Great, you got it right! Let's see the next flashcard! Question for the current flashcard is: -q2 +Q2 Are you ready to view the answer? -a1 +A1 Have you got this correct? No worries, we will try it next time. Congrats! You have reviewed all the flashcards due today! From f6c848ea0e2f266598fc1ca8473223adb46e5335 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 20 Mar 2023 15:28:04 +0800 Subject: [PATCH 070/174] Update DeveloperGuide.md to include descriptions about add flashcard function --- docs/DeveloperGuide.md | 61 +++++++++++++++++++++++++--- docs/umlDiagrams/AddFlashcard-0.png | Bin 0 -> 32121 bytes docs/umlDiagrams/AddFlashcard.puml | 51 +++++++++++++++++++++++ 3 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 docs/umlDiagrams/AddFlashcard-0.png create mode 100644 docs/umlDiagrams/AddFlashcard.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 64e1f0ed2b..5d68f391bb 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -2,14 +2,65 @@ ## Acknowledgements -{list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well} +{list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the +original source as well} ## Design & implementation {Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.} +### Add Flashcard Feature + +#### Current implementation + +The current add flashcard allows the user to add a flashcard to the list of flashcards, +it is implemented through the following steps: + +Step 1: +The input of user is collected by `getUserCommand()` inside class `Ui`. + +Step 2: +The input string will be converted into a `Command` object by being passed through +`parseCommand(String userInput)` inside `Paser`. + +In this case, an `AddCommand` will be created and returned. + +Step 3: +The `execute()` function of `AddCommand` will run, calling `addNewFlashcard(questionText, answerText)` +of class `FlashcardList` to create and add the new flashcard to the list. + +Then it will also call `printSuccessfulAddMessage(questionText, answerText)` of class `Ui` +to display text indicating the successful adding function to the user. + +At this point, the adding process is completed and the program is ready to take another +command. + +The following sequence diagram show how the add operation work: +![AddFlashcard-0.png](umlDiagrams%2FAddFlashcard-0.png) + +#### Reason for current implementation + +Through using `AddCommand` class, which extends `Command` class it increases the level of +abstraction as the code can now perform the various commands on a class level. + +Moreover, since the creating of new `Flashcard` of object and adding of the newly created +flashcard are both done in the same class as where the flashcards are stored, this reduces +coupling in the program as the `AddCommand` will not have access to the inner structure of +`FlashcardList`, which stores the list of flashcards. + +#### Alternative implementation + +- Alternative 1: Have the add command function directly in `FlashcardList` + - Pros: Easy to implement + - Cons: Will require another function in another program to differentiate it from other + commands +- Alternative 2: Have the constructor of `Flashcard` include adding the card to list of flashcards + - Pros: Simplifies code + - Cons: Will cause trouble when temporary flashcard (that need not be stored) are + created ## Product scope + ### Target user profile {Describe the target user profile} @@ -20,10 +71,10 @@ ## User Stories -|Version| As a ... | I want to ... | So that I can ...| -|--------|----------|---------------|------------------| -|v1.0|new user|see usage instructions|refer to them when I forget how to use the application| -|v2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list| +| Version | As a ... | I want to ... | So that I can ... | +|---------|----------|---------------------------|-------------------------------------------------------------| +| v1.0 | new user | see usage instructions | refer to them when I forget how to use the application | +| v2.0 | user | find a to-do item by name | locate a to-do without having to go through the entire list | ## Non-Functional Requirements diff --git a/docs/umlDiagrams/AddFlashcard-0.png b/docs/umlDiagrams/AddFlashcard-0.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc0bd5647a82aa0c60d6b6b5981571ecd359ea3 GIT binary patch literal 32121 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 :Clanki" as Main +participant ":Ui" as Ui +participant ":Parser" as Parser +participant ":Add Command" as AddCommand +participant ":Flashcard List" as FlashcardList + +activate Main +Main -> Ui : User input +activate Ui + +Ui -> Main : userInput : String +deactivate Ui + +Main -> Parser : parseInput(userInput) +activate Parser + +create AddCommand +Parser -> AddCommand : AddCommand(question, answer) +activate AddCommand + +AddCommand -> Parser +deactivate AddCommand + +Parser -> Main : command : AddCommand +deactivate Parser + +Main -> AddCommand : execute() +activate AddCommand + +AddCommand -> FlashcardList : addNewFlashcard(question, answer) +activate FlashcardList + +FlashcardList -> AddCommand +deactivate FlashcardList + +AddCommand -> Ui : printSuccessfulAddMessage(question, answer) +activate Ui + +Main<- Ui : Display message +Ui -> AddCommand +deactivate Ui + +AddCommand -> Main +deactivate AddCommand + + + +@enduml \ No newline at end of file From c516fed9c596fbb152bea494dd8d611a4738ef49 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 20 Mar 2023 16:37:01 +0800 Subject: [PATCH 071/174] Add encoder to convert FlashcardList to storable format --- .../clanki/storage/FlashcardListEncoder.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/main/java/com/clanki/storage/FlashcardListEncoder.java diff --git a/src/main/java/com/clanki/storage/FlashcardListEncoder.java b/src/main/java/com/clanki/storage/FlashcardListEncoder.java new file mode 100644 index 0000000000..11dc412a37 --- /dev/null +++ b/src/main/java/com/clanki/storage/FlashcardListEncoder.java @@ -0,0 +1,40 @@ +package com.clanki.storage; + +import com.clanki.objects.Flashcard; +import com.clanki.objects.FlashcardList; + +import java.util.ArrayList; +import java.util.List; + +/** + * This class modifies the list of flashcards from FlashcardList into a storable format. + * Many portions of the code in this class are modified from the link below: (addressbook-level2) + * https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/storage/AddressBookEncoder.java + */ +public class FlashcardListEncoder { + /** + * Encodes all the {@code Flashcards} in the {@code toSave} into a list of decodable and readable + * string presentation for storage. + */ + public static List encodeAddressBook(FlashcardList toSave) { + final List encodedFlashcards = new ArrayList<>(); + toSave.getFlashCards().forEach(flashcard -> encodedFlashcards.add(encodeFlashcardToString(flashcard))); + return encodedFlashcards; + } + + /** + * Encodes the {@code flashcard} into a decodable and readable string representation. + */ + private static String encodeFlashcardToString(Flashcard flashcard) { + final StringBuilder encodedFlashcardBuilder = new StringBuilder(); + + encodedFlashcardBuilder.append(" q/").append(flashcard.getQuestion()); + encodedFlashcardBuilder.append(" a/").append(flashcard.getAnswer()); + + encodedFlashcardBuilder.append(" d/").append(flashcard.getDueDate().toString()); + + encodedFlashcardBuilder.append(" t/").append(flashcard.getCurrentPeriodInDays()); + + return encodedFlashcardBuilder.toString(); + } +} From 68e17b9ed8283897ecf4759960988b3fe718c15a Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 20 Mar 2023 16:38:41 +0800 Subject: [PATCH 072/174] Add decoder and relevant exceptions Decoder will transform the stored text file into an ArrayList --- .../InvalidStorageFilePathException.java | 12 ++++ .../exceptions/StorageOperationException.java | 13 +++++ .../clanki/storage/FlashcardListDecoder.java | 57 +++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 src/main/java/com/clanki/exceptions/InvalidStorageFilePathException.java create mode 100644 src/main/java/com/clanki/exceptions/StorageOperationException.java create mode 100644 src/main/java/com/clanki/storage/FlashcardListDecoder.java diff --git a/src/main/java/com/clanki/exceptions/InvalidStorageFilePathException.java b/src/main/java/com/clanki/exceptions/InvalidStorageFilePathException.java new file mode 100644 index 0000000000..2bb0a26281 --- /dev/null +++ b/src/main/java/com/clanki/exceptions/InvalidStorageFilePathException.java @@ -0,0 +1,12 @@ +package com.clanki.exceptions; + +public class InvalidStorageFilePathException extends Exception { + /** + * Signals that the given file path does not fulfill the storage filepath constraints. + * Copied from: + * https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/storage/StorageFile.java + */ + public InvalidStorageFilePathException(String message) { + super(message); + } +} diff --git a/src/main/java/com/clanki/exceptions/StorageOperationException.java b/src/main/java/com/clanki/exceptions/StorageOperationException.java new file mode 100644 index 0000000000..e0a8834adb --- /dev/null +++ b/src/main/java/com/clanki/exceptions/StorageOperationException.java @@ -0,0 +1,13 @@ +package com.clanki.exceptions; + +/** + * Signals that some error has occured while trying to convert and read/write data between the application + * and the storage file. + * Copied from: + * https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/storage/StorageFile.java + */ +public class StorageOperationException extends Exception { + public StorageOperationException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/src/main/java/com/clanki/storage/FlashcardListDecoder.java b/src/main/java/com/clanki/storage/FlashcardListDecoder.java new file mode 100644 index 0000000000..c69fec35a7 --- /dev/null +++ b/src/main/java/com/clanki/storage/FlashcardListDecoder.java @@ -0,0 +1,57 @@ +package com.clanki.storage; + +import com.clanki.exceptions.StorageOperationException; +import com.clanki.objects.Flashcard; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * This class modifies the list of flashcards from stored text into an ArrayList in FlashcardList. + * Many portions of the code in this class are modified from the link below: (addressbook-level2) + * https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/storage/AddressBookDecoder.java + */ +public class FlashcardListDecoder { + public static final Pattern PERSON_DATA_ARGS_FORMAT = // '/' forward slashes are reserved for delimiter prefixes + Pattern.compile(" q/(?[^/]+)" + " a/(?[^/]+)" + + " d/ (?[^/]+)" + + " p/ (?[^/]+)"); + + + /** + * Decodes {@code encodedFlashcardList} into an {@code ArrayList} containing the decoded flashcards. + * + * @throws StorageOperationException if the {@code encodedFlashcardList} is in an invalid format. + */ + public static ArrayList decodeAddressBook(List encodedFlashcardList) + throws StorageOperationException { + final ArrayList decodedFlashcard = new ArrayList<>(); + for (String encodedFlashcard : encodedFlashcardList) { + decodedFlashcard.add(decodeFlashcardFromString(encodedFlashcard)); + } + return decodedFlashcard; + } + + /** + * Decodes {@code encodedFlashcard} into a {@code Flashcard}. + * + * @throws StorageOperationException if {@code encodedFlashcard} is in an invalid format. + */ + private static Flashcard decodeFlashcardFromString(String encodedFlashcard) + throws StorageOperationException { + final Matcher matcher = PERSON_DATA_ARGS_FORMAT.matcher(encodedFlashcard); + if (!matcher.matches()) { + throw new StorageOperationException("Encoded person in invalid format. Unable to decode."); + } + + return new Flashcard(matcher.group("question"), matcher.group("answer"), + LocalDate.parse(matcher.group("dueDate")), + Integer.parseInt(matcher.group("currentPeriod")) + ); + } + + +} From 13357d84291a213b1626a99dcdf3b16192a9eccf Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 20 Mar 2023 16:39:38 +0800 Subject: [PATCH 073/174] Add a new StorageFile class To string the encoder and decoder together when saving and loading the stored file --- .../java/com/clanki/storage/StorageFile.java | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 src/main/java/com/clanki/storage/StorageFile.java diff --git a/src/main/java/com/clanki/storage/StorageFile.java b/src/main/java/com/clanki/storage/StorageFile.java new file mode 100644 index 0000000000..714dfa408e --- /dev/null +++ b/src/main/java/com/clanki/storage/StorageFile.java @@ -0,0 +1,97 @@ +package com.clanki.storage; + +import com.clanki.exceptions.InvalidStorageFilePathException; +import com.clanki.exceptions.StorageOperationException; +import com.clanki.objects.Flashcard; +import com.clanki.objects.FlashcardList; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +/** + * This class manages the storing of FlashcardList and the recovering of stored + * data each time the application first start up. + * Many portions of the code in this class are modified from the link below: (addressbook-level2) + * https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/storage/StorageFile.java + */ +public class StorageFile { + /** + * Default file path used if the user doesn't provide the file name. + */ + public static final String DEFAULT_STORAGE_FILEPATH = "flashcardList.txt"; + + + public final Path path; + + /** + * @throws InvalidStorageFilePathException if the default path is invalid + */ + public StorageFile() throws InvalidStorageFilePathException { + this(DEFAULT_STORAGE_FILEPATH); + } + + /** + * @throws InvalidStorageFilePathException if the given file path is invalid + */ + public StorageFile(String filePath) throws InvalidStorageFilePathException { + path = Paths.get(filePath); + if (!isValidPath(path)) { + throw new InvalidStorageFilePathException("Storage file should end with '.txt'"); + } + } + + /** + * Returns true if the given path is acceptable as a storage file. + * The file path is considered acceptable if it ends with '.txt' + */ + private static boolean isValidPath(Path filePath) { + return filePath.toString().endsWith(".txt"); + } + + /** + * Saves the {@code addressBook} data to the storage file. + * + * @throws StorageOperationException if there were errors converting and/or storing data to file. + */ + public void save(FlashcardList flashcardList) throws StorageOperationException { + try { + List encodedAddressBook = FlashcardListEncoder.encodeAddressBook(flashcardList); + Files.write(path, encodedAddressBook); + } catch (IOException ioe) { + throw new StorageOperationException("Error writing to file: " + path); + } + } + + /** + * Loads the {@code AddressBook} data from this storage file, and then returns it. + * Returns an empty {@code AddressBook} if the file does not exist, or is not a regular file. + * + * @throws StorageOperationException if there were errors reading and/or converting data from file. + */ + public ArrayList load() throws StorageOperationException { + + if (!Files.exists(path) || !Files.isRegularFile(path)) { + return new ArrayList<>(); + } + + try { + return FlashcardListDecoder.decodeAddressBook(Files.readAllLines(path)); + } catch (FileNotFoundException fnfe) { + throw new AssertionError("A non-existent file scenario is already handled earlier."); + // other errors + } catch (IOException ioe) { + throw new StorageOperationException("Error writing to file: " + path); + } + } + + public String getPath() { + return path.toString(); + } + + +} From 97c456f733329071a80b151f6559a7d3f6718eb4 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 20 Mar 2023 16:56:30 +0800 Subject: [PATCH 074/174] Implement the save and load system in a very simple way --- src/main/java/com/clanki/Clanki.java | 21 +++++++++++++++---- .../com/clanki/objects/FlashcardList.java | 9 ++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/clanki/Clanki.java b/src/main/java/com/clanki/Clanki.java index f8679c2730..658b9be9a4 100644 --- a/src/main/java/com/clanki/Clanki.java +++ b/src/main/java/com/clanki/Clanki.java @@ -2,17 +2,27 @@ import com.clanki.commands.ByeCommand; import com.clanki.commands.Command; +import com.clanki.exceptions.InvalidStorageFilePathException; +import com.clanki.exceptions.StorageOperationException; import com.clanki.objects.FlashcardList; import com.clanki.parser.Parser; +import com.clanki.storage.StorageFile; import com.clanki.ui.Ui; public class Clanki { private Ui ui; private FlashcardList flashcardList; + private StorageFile storageFile; public Clanki() { - this.ui = new Ui(); - this.flashcardList = new FlashcardList(); + try { + this.ui = new Ui(); + storageFile = new StorageFile(); + this.flashcardList = new FlashcardList(storageFile.load()); + ui.printWelcomeMessage(); + } catch (InvalidStorageFilePathException | StorageOperationException e) { + System.out.println(e.getMessage()); + } } public static void main(String[] args) { @@ -20,12 +30,15 @@ public static void main(String[] args) { } public void run() { - ui.printWelcomeMessage(); while (true) { String inputText = ui.getUserCommand(); Command command = Parser.parseCommand(inputText); command.execute(flashcardList, ui); - + try { + storageFile.save(flashcardList); + } catch (StorageOperationException e) { + System.out.println(e.getMessage()); + } if (command instanceof ByeCommand) { return; } diff --git a/src/main/java/com/clanki/objects/FlashcardList.java b/src/main/java/com/clanki/objects/FlashcardList.java index 95e451482b..e37e213bbd 100644 --- a/src/main/java/com/clanki/objects/FlashcardList.java +++ b/src/main/java/com/clanki/objects/FlashcardList.java @@ -1,14 +1,23 @@ package com.clanki.objects; +import com.clanki.exceptions.InvalidStorageFilePathException; +import com.clanki.exceptions.StorageOperationException; +import com.clanki.storage.StorageFile; + import java.util.ArrayList; public class FlashcardList { private final ArrayList flashcards; + public FlashcardList() { this.flashcards = new ArrayList<>(); } + public FlashcardList(ArrayList flashcards) { + this.flashcards = flashcards; + } + public void addNewFlashcard(String questionText, String answerText) { Flashcard newFlashcard = new Flashcard(questionText, answerText); flashcards.add(newFlashcard); From 2800fc9afd8d8cb8fcaa162af0e5e316e29ca7d4 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 20 Mar 2023 17:40:39 +0800 Subject: [PATCH 075/174] Update encoder and decoder to fix bug The current period was previously encoded with 't/', which cannot be detected by the decoder --- .../java/com/clanki/storage/FlashcardListDecoder.java | 10 +++++----- .../java/com/clanki/storage/FlashcardListEncoder.java | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/clanki/storage/FlashcardListDecoder.java b/src/main/java/com/clanki/storage/FlashcardListDecoder.java index c69fec35a7..c3e2768a48 100644 --- a/src/main/java/com/clanki/storage/FlashcardListDecoder.java +++ b/src/main/java/com/clanki/storage/FlashcardListDecoder.java @@ -15,10 +15,10 @@ * https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/storage/AddressBookDecoder.java */ public class FlashcardListDecoder { - public static final Pattern PERSON_DATA_ARGS_FORMAT = // '/' forward slashes are reserved for delimiter prefixes - Pattern.compile(" q/(?[^/]+)" + " a/(?[^/]+)" - + " d/ (?[^/]+)" - + " p/ (?[^/]+)"); + public static final Pattern FLASHCARD_ARGS_FORMAT = // '/' forward slashes are reserved for delimiter prefixes + Pattern.compile("q/(?[^/]+)" + " a/(?[^/]+)" + + " d/(?[^/]+)" + + " p/(?[^/]+)"); /** @@ -42,7 +42,7 @@ public static ArrayList decodeAddressBook(List encodedFlashca */ private static Flashcard decodeFlashcardFromString(String encodedFlashcard) throws StorageOperationException { - final Matcher matcher = PERSON_DATA_ARGS_FORMAT.matcher(encodedFlashcard); + final Matcher matcher = FLASHCARD_ARGS_FORMAT.matcher(encodedFlashcard); if (!matcher.matches()) { throw new StorageOperationException("Encoded person in invalid format. Unable to decode."); } diff --git a/src/main/java/com/clanki/storage/FlashcardListEncoder.java b/src/main/java/com/clanki/storage/FlashcardListEncoder.java index 11dc412a37..02a9a7d3d0 100644 --- a/src/main/java/com/clanki/storage/FlashcardListEncoder.java +++ b/src/main/java/com/clanki/storage/FlashcardListEncoder.java @@ -28,12 +28,12 @@ public static List encodeAddressBook(FlashcardList toSave) { private static String encodeFlashcardToString(Flashcard flashcard) { final StringBuilder encodedFlashcardBuilder = new StringBuilder(); - encodedFlashcardBuilder.append(" q/").append(flashcard.getQuestion()); + encodedFlashcardBuilder.append("q/").append(flashcard.getQuestion()); encodedFlashcardBuilder.append(" a/").append(flashcard.getAnswer()); encodedFlashcardBuilder.append(" d/").append(flashcard.getDueDate().toString()); - encodedFlashcardBuilder.append(" t/").append(flashcard.getCurrentPeriodInDays()); + encodedFlashcardBuilder.append(" p/").append(flashcard.getCurrentPeriodInDays()); return encodedFlashcardBuilder.toString(); } From ead8d0d4c079bf94e8c840f630b69d19d827f0e8 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 20 Mar 2023 17:50:59 +0800 Subject: [PATCH 076/174] Update files to follow checkStyle requirements --- .../java/com/clanki/exceptions/StorageOperationException.java | 3 ++- src/main/java/com/clanki/objects/FlashcardList.java | 4 ---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/clanki/exceptions/StorageOperationException.java b/src/main/java/com/clanki/exceptions/StorageOperationException.java index e0a8834adb..725324dd0d 100644 --- a/src/main/java/com/clanki/exceptions/StorageOperationException.java +++ b/src/main/java/com/clanki/exceptions/StorageOperationException.java @@ -1,3 +1,4 @@ + package com.clanki.exceptions; /** @@ -10,4 +11,4 @@ public class StorageOperationException extends Exception { public StorageOperationException(String message) { super(message); } -} \ No newline at end of file +} diff --git a/src/main/java/com/clanki/objects/FlashcardList.java b/src/main/java/com/clanki/objects/FlashcardList.java index e37e213bbd..d23ea2acf3 100644 --- a/src/main/java/com/clanki/objects/FlashcardList.java +++ b/src/main/java/com/clanki/objects/FlashcardList.java @@ -1,9 +1,5 @@ package com.clanki.objects; -import com.clanki.exceptions.InvalidStorageFilePathException; -import com.clanki.exceptions.StorageOperationException; -import com.clanki.storage.StorageFile; - import java.util.ArrayList; public class FlashcardList { From 8227ea03b72f54ed4652b5d42dabdc5533ff7657 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 20 Mar 2023 21:47:05 +0800 Subject: [PATCH 077/174] Add JUnit tests for the encoder and decoder --- .../clanki/storage/FlashcardListDecoder.java | 2 +- .../java/com/clanki/storage/StorageFile.java | 2 +- .../storage/FlashcardListDecoderTest.java | 74 +++++++++++++++++++ .../storage/FlashcardListEncoderTest.java | 35 +++++++++ 4 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/clanki/storage/FlashcardListDecoderTest.java create mode 100644 src/test/java/com/clanki/storage/FlashcardListEncoderTest.java diff --git a/src/main/java/com/clanki/storage/FlashcardListDecoder.java b/src/main/java/com/clanki/storage/FlashcardListDecoder.java index c3e2768a48..d89352edbb 100644 --- a/src/main/java/com/clanki/storage/FlashcardListDecoder.java +++ b/src/main/java/com/clanki/storage/FlashcardListDecoder.java @@ -26,7 +26,7 @@ public class FlashcardListDecoder { * * @throws StorageOperationException if the {@code encodedFlashcardList} is in an invalid format. */ - public static ArrayList decodeAddressBook(List encodedFlashcardList) + public static ArrayList decodeFlashcardList(List encodedFlashcardList) throws StorageOperationException { final ArrayList decodedFlashcard = new ArrayList<>(); for (String encodedFlashcard : encodedFlashcardList) { diff --git a/src/main/java/com/clanki/storage/StorageFile.java b/src/main/java/com/clanki/storage/StorageFile.java index 714dfa408e..86d9464b0a 100644 --- a/src/main/java/com/clanki/storage/StorageFile.java +++ b/src/main/java/com/clanki/storage/StorageFile.java @@ -80,7 +80,7 @@ public ArrayList load() throws StorageOperationException { } try { - return FlashcardListDecoder.decodeAddressBook(Files.readAllLines(path)); + return FlashcardListDecoder.decodeFlashcardList(Files.readAllLines(path)); } catch (FileNotFoundException fnfe) { throw new AssertionError("A non-existent file scenario is already handled earlier."); // other errors diff --git a/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java b/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java new file mode 100644 index 0000000000..c4abfbd03b --- /dev/null +++ b/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java @@ -0,0 +1,74 @@ + +package com.clanki.storage; + +import com.clanki.exceptions.StorageOperationException; +import com.clanki.objects.Flashcard; +import com.clanki.objects.FlashcardList; +import org.junit.jupiter.api.Test; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +import static com.clanki.storage.FlashcardListDecoder.decodeFlashcardList; +import static com.clanki.storage.FlashcardListEncoder.encodeAddressBook; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + + +class FlashcardListDecoderTest { + + @Test + void decodeFlashcardList_correctInput_correctOutput() { + List storedString = new ArrayList<>(); + storedString.add("q/q1 a/a1 d/" + LocalDate.now().toString() + " p/0"); + storedString.add("q/q2 a/a2 d/" + LocalDate.now().toString() + " p/0"); + try { + ArrayList decodedFlashcardList = decodeFlashcardList(storedString); + Flashcard testCard1 = decodedFlashcardList.get(0); + assertEquals("q1", testCard1.getQuestion()); + assertEquals("a1", testCard1.getAnswer()); + assertEquals(LocalDate.now(), testCard1.getDueDate()); + assertEquals(0, testCard1.getCurrentPeriodInDays()); + Flashcard testCard2 = decodedFlashcardList.get(1); + assertEquals("q2", testCard2.getQuestion()); + assertEquals("a2", testCard2.getAnswer()); + assertEquals(LocalDate.now(), testCard2.getDueDate()); + assertEquals(0, testCard2.getCurrentPeriodInDays()); + } catch (StorageOperationException e) { + throw new RuntimeException(e); + } + } + + @Test + void decodeAddressBook_encodeInput_decodeOutput() { + FlashcardList flashcardList = new FlashcardList(); + flashcardList.addNewFlashcard("q1", "a1"); + flashcardList.addNewFlashcard("q2", "a2"); + List encodedResult = encodeAddressBook(flashcardList); + try { + ArrayList decodedFlashcardList = decodeFlashcardList(encodedResult); + Flashcard testCard1 = decodedFlashcardList.get(0); + assertEquals("q1", testCard1.getQuestion()); + assertEquals("a1", testCard1.getAnswer()); + assertEquals(LocalDate.now(), testCard1.getDueDate()); + assertEquals(0, testCard1.getCurrentPeriodInDays()); + Flashcard testCard2 = decodedFlashcardList.get(1); + assertEquals("q2", testCard2.getQuestion()); + assertEquals("a2", testCard2.getAnswer()); + assertEquals(LocalDate.now(), testCard2.getDueDate()); + assertEquals(0, testCard2.getCurrentPeriodInDays()); + } catch (StorageOperationException e) { + throw new RuntimeException(e); + } + } + + @Test + void decodeAddressBook_invalidInput_exception() { + List storedString = new ArrayList<>(); + storedString.add("q1 a/a1 d/" + LocalDate.now().toString() + " p/0"); + assertThrows(StorageOperationException.class, + () -> decodeFlashcardList(storedString)); + } + +} \ No newline at end of file diff --git a/src/test/java/com/clanki/storage/FlashcardListEncoderTest.java b/src/test/java/com/clanki/storage/FlashcardListEncoderTest.java new file mode 100644 index 0000000000..c9046793c0 --- /dev/null +++ b/src/test/java/com/clanki/storage/FlashcardListEncoderTest.java @@ -0,0 +1,35 @@ + +package com.clanki.storage; + +import com.clanki.objects.FlashcardList; +import org.junit.jupiter.api.Test; + +import java.time.LocalDate; +import java.util.List; + +import static com.clanki.storage.FlashcardListEncoder.encodeAddressBook; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class FlashcardListEncoderTest { + + @Test + void encodeAddressBook_correctInput_correctOutput() { + FlashcardList flashcardList = new FlashcardList(); + flashcardList.addNewFlashcard("q1", "a1"); + flashcardList.addNewFlashcard("q2", "a2"); + List encodedResult = encodeAddressBook(flashcardList); + String line1 = "q/q1 a/a1 d/" + LocalDate.now().toString() + " p/0"; + String line2 = "q/q2 a/a2 d/" + LocalDate.now().toString() + " p/0"; + assertEquals(line1, encodedResult.get(0)); + assertEquals(line2, encodedResult.get(1)); + } + + @Test + void encodeAddressBook_emptyInput() { + FlashcardList flashcardList = new FlashcardList(); + List encodedResult = encodeAddressBook(flashcardList); + assertTrue(encodedResult.isEmpty()); + } + +} \ No newline at end of file From fb17c1cb8d4a76b9c011ba34485bcd5533ed9edd Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 20 Mar 2023 21:51:26 +0800 Subject: [PATCH 078/174] Update file for checkstyle requirements --- src/test/java/com/clanki/storage/FlashcardListDecoderTest.java | 2 +- src/test/java/com/clanki/storage/FlashcardListEncoderTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java b/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java index c4abfbd03b..623f65c689 100644 --- a/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java +++ b/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java @@ -71,4 +71,4 @@ void decodeAddressBook_invalidInput_exception() { () -> decodeFlashcardList(storedString)); } -} \ No newline at end of file +} diff --git a/src/test/java/com/clanki/storage/FlashcardListEncoderTest.java b/src/test/java/com/clanki/storage/FlashcardListEncoderTest.java index c9046793c0..d95545de1e 100644 --- a/src/test/java/com/clanki/storage/FlashcardListEncoderTest.java +++ b/src/test/java/com/clanki/storage/FlashcardListEncoderTest.java @@ -32,4 +32,4 @@ void encodeAddressBook_emptyInput() { assertTrue(encodedResult.isEmpty()); } -} \ No newline at end of file +} From b001a2d506ea164a4889c66119042134ec1cb40b Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Wed, 22 Mar 2023 20:12:13 +0800 Subject: [PATCH 079/174] Implemented delete by query --- flashcardList.txt | 3 ++ .../com/clanki/commands/DeleteCommand.java | 43 +++++++++++++++++-- src/main/java/com/clanki/parser/Parser.java | 4 +- src/main/java/com/clanki/ui/Ui.java | 4 +- 4 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 flashcardList.txt diff --git a/flashcardList.txt b/flashcardList.txt new file mode 100644 index 0000000000..e5bcdb074f --- /dev/null +++ b/flashcardList.txt @@ -0,0 +1,3 @@ +q/test a/onef d/2023-03-23 p/1 +q/first a/1 d/2023-03-23 p/1 +q/first a/3 d/2023-03-23 p/1 diff --git a/src/main/java/com/clanki/commands/DeleteCommand.java b/src/main/java/com/clanki/commands/DeleteCommand.java index 4fa9b985be..b5bd44b922 100644 --- a/src/main/java/com/clanki/commands/DeleteCommand.java +++ b/src/main/java/com/clanki/commands/DeleteCommand.java @@ -1,19 +1,54 @@ package com.clanki.commands; +import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; +import java.util.ArrayList; + public class DeleteCommand extends Command { + + ArrayList matchingFlashcards = new ArrayList<>(); + String query; int index; - public DeleteCommand(int index) { + public DeleteCommand(String query) { + this.query = query; this.index = index; } + public void findFlashcard(ArrayList flashcards, String query) { + for (int i = 0; i < flashcards.size(); i++) { + Flashcard currentFlashcard = flashcards.get(i); + if (currentFlashcard.getQuestion().contains(query) + || currentFlashcard.getAnswer().contains(query)) { + matchingFlashcards.add(currentFlashcard); + } + } + } + + public void printFlashCard(Flashcard flashcard) { + System.out.println("Q: " + flashcard.getQuestion()); + System.out.println("A: " + flashcard.getAnswer()); + } + + public void printFlashCardList(ArrayList flashcards) { + for (int i = 0; i < flashcards.size(); i++) { + System.out.println("[" + (i + 1) + "]"); + printFlashCard(flashcards.get(i)); + } + } + @Override public void execute(FlashcardList flashcardList, Ui display) { - flashcardList.deleteFlashcard(index); - display.printSuccessfulDelete(); - System.out.println(index); + ArrayList flashcards = flashcardList.getFlashCards(); + findFlashcard(flashcards, query); + System.out.println("Found " + matchingFlashcards.size() + " cards with query \"" + query + "\":"); + printFlashCardList(matchingFlashcards); + System.out.println("Which one do you want to delete?"); + + int index = Integer.parseInt(display.getUserCommand()); + flashcardList.deleteFlashcard(flashcards.indexOf(matchingFlashcards.get(index - 1))); + display.printSuccessfulDelete(index); } } diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index 44b26d786e..2596e4f822 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -99,8 +99,8 @@ public static UpdateCommand getUpdateCommand(ParsedInput parsedInput) { } public static DeleteCommand getDeleteCommand(ParsedInput parsedInput) { - int index = Integer.parseInt(parsedInput.getBody()); - return new DeleteCommand(index); + String query = parsedInput.getBody(); + return new DeleteCommand(query); } public static ByeCommand getByeCommand(ParsedInput parsedInput) { diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 1c8d22cffe..815b2e91d2 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -51,8 +51,8 @@ public void printInvalidInput() { System.out.println("The input is in an incorrect format."); } - public void printSuccessfulDelete() { - System.out.print("Got it. Deleted the flashcard at index "); + public void printSuccessfulDelete(int index) { + System.out.println("Got it. Deleted the flashcard at index " + index); } /** From 8fb4ee60dba0c19137dfe9a0330a2ce5a77768a1 Mon Sep 17 00:00:00 2001 From: Zijin Date: Wed, 22 Mar 2023 22:38:59 +0800 Subject: [PATCH 080/174] Update to include JUnit test for capitalisation --- src/test/java/com/clanki/parser/ParserTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index 7059e7a69f..dafef864cd 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -23,6 +23,9 @@ public void parserAddCommand_correctlyFormattedInput_successful() { Command parsedCommand = Parser.parseCommand("add /q Question /a Answer"); Command expectedCommand = new AddCommand("Question", "Answer"); assertEquals(expectedCommand.toString(), parsedCommand.toString()); + Command parsedCommandNonCap = Parser.parseCommand("add /q question /a answer"); + Command expectedCommandCap = new AddCommand("Question", "Answer"); + assertEquals(expectedCommandCap.toString(), parsedCommandNonCap.toString()); } @Test From 3af44d9aa346407885c1fcf3e6bce15fa6e75d96 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Thu, 23 Mar 2023 15:49:55 +0800 Subject: [PATCH 081/174] Removed flashcardList.txt file --- flashcardList.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/flashcardList.txt b/flashcardList.txt index e5bcdb074f..e69de29bb2 100644 --- a/flashcardList.txt +++ b/flashcardList.txt @@ -1,3 +0,0 @@ -q/test a/onef d/2023-03-23 p/1 -q/first a/1 d/2023-03-23 p/1 -q/first a/3 d/2023-03-23 p/1 From 482fcbb6960664beaacb50cbbabe7c4f0d1d7fee Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Thu, 23 Mar 2023 16:48:41 +0800 Subject: [PATCH 082/174] Add user guide from the gist Signed-off-by: Vu Van Dung --- docs/UserGuide.md | 153 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 130 insertions(+), 23 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index abd9fbe891..d1b21ad9ea 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -1,42 +1,149 @@ -# User Guide +# Clanki User Guide -## Introduction +Clanki is a command-line interface (CLI) application for managing +flashcards. It allows users to create, manage and study flashcards +to assist them with memorisation by using a technique called +[spaced repetition](https://en.wikipedia.org/wiki/Spaced_repetition). -{Give a product intro} +## Quick start -## Quick Start +- Ensure you have Java 11 or above installed. +- Other steps TBD -{Give steps to get started quickly} +## Features -1. Ensure that you have Java 11 or above installed. -1. Down the latest version of `Duke` from [here](http://link.to/duke). +> Formatting of output is still TBD, but command syntax probably +> won't change much. -## Features +> Square brackets indicate optional sections of the symtax. -{Give detailed description of each feature} +### Adding a flashcard -### Adding a todo: `todo` -Adds a new item to the list of todo items. +``` +add /q QUESTION /a ANSWER +``` -Format: `todo n/TODO_NAME d/DEADLINE` +- `QUESTION` will be displayed when reviewing. For how the + reviewing process works, see "Review flashcards" section below. -* The `DEADLINE` can be in a natural language format. -* The `TODO_NAME` cannot contain punctuation. +#### Example -Example of usage: +``` +> add /q What is the worst fruit? /a Durian +You have added the following card: +Q: What is the worst fruit? +A: Durian +``` -`todo n/Write the rest of the User Guide d/next week` +### Review flashcards -`todo n/Refactor the User Guide to remove passive voice d/13/04/2020` +``` +review +``` -## FAQ +- Flashcards that are due on the day will be displayed one after + another, queued in a randomised order. -**Q**: How do I transfer my data to another computer? +- When the user has recalled the answer for a card, or has given + up on doing so, they can then press Enter. -**A**: {your answer here} +- The app will then show the answer and ask the user if they got + it right. They can then type `y`/`n` to indicate that they remembered + the answer correctly, or they couldn't remember the correct answer, + respectively. -## Command Summary + * If `y` is indicated, the card is then set to a new due date -{Give a 'cheat sheet' of commands here} + in the future. -* Add todo `todo n/TODO_NAME d/DEADLINE` + * Otherwise, the card is pushed back to the today's + + queue for reviewing later, until the user can get it correct. When + the user has got it correct, the new date is set to tomorrow. + +- Then the review session continues with the next card in the queue. + +#### Example + +``` +> review +There are 10 cards available for review today. +--- +Q: What is the worst fruit? (ENTER to show answer) +A: Durian +Did you get it right? (y/n) n +The card will be asked later today. +--- +Q: What is the Japanese word for "fruit"? (ENTER to show answer) +A: 果物 +Did you get it right? (y/n) y +The card will be asked on 20 February 2023 +--- +Q: What is the worst fruit? (ENTER to show answer) +A: Durian +Did you get it right? (y/n) y +The card will be asked tomorrow. +--- +You have finished reviewing for today. Congratulations. +``` + +### Update flashcards + +``` +update /q QUERY +``` + +- `QUERY` can be part of the card's question or answer. + +- A list of cards that contain this query will be listed, with an + index assigned to each. + +- The user can then type the index of the card they wish to update + with the following syntax + + ``` + INDEX [/q NEW_QUESTION] [/a NEW_ANSWER] [/d NEW_DUE_DATE] + ``` + +#### Example + +``` +> update fruit +Found 2 cards with the query "fruit": +[1] Q: What is the worst fruit? + A: Durian +[2] Q: What is the Japanese word for "fruit"? + A: 果物 +Which one do you want to update? 1 /q What is the best fruit? +Understood. The card has been updated to + Q: What is the best fruit? + A: Durian + D: 29 February 2023 +``` + +### Delete flashcards + +``` +delete /q QUERY +``` + +- `QUERY` can be part of the card's question or answer. + +- A list of cards that contain this query will be listed, with an + index assigned to each. + +- The user can then type the index of the card they wish to delete. + The card with that index (on that list) is then deleted. + +#### Example + +``` +> delete fruit +Found 2 cards with the query "fruit": +[1] Q: What is the best fruit? + A: Durian +[2] Q: What is the Japanese word for "fruit"? + A: 果物 +Which one do you want to delete? 2 +Understood. The card has been deleted. +``` From 1e6ec2fd1e9275874477e113aac69c4432efeafa Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Fri, 24 Mar 2023 11:59:13 +0800 Subject: [PATCH 083/174] added flashcardList.txt to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b2e4901bfd..3c4103bf07 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ bin/ /text-ui-test/ACTUAL.TXT text-ui-test/EXPECTED-UNIX.TXT +flashcardList.txt From 04d8752413091c344cc70b9eb207bf2b6544124a Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Fri, 24 Mar 2023 12:00:30 +0800 Subject: [PATCH 084/174] Revert "Removed flashcardList.txt file" This reverts commit 3af44d9aa346407885c1fcf3e6bce15fa6e75d96. --- flashcardList.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/flashcardList.txt b/flashcardList.txt index e69de29bb2..e5bcdb074f 100644 --- a/flashcardList.txt +++ b/flashcardList.txt @@ -0,0 +1,3 @@ +q/test a/onef d/2023-03-23 p/1 +q/first a/1 d/2023-03-23 p/1 +q/first a/3 d/2023-03-23 p/1 From 138c05ab9f2a8cc6dfa3f1e1ab2aee4d3be83789 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Fri, 24 Mar 2023 15:19:36 +0800 Subject: [PATCH 085/174] Added developer's guide for DeleteCommand. --- docs/DeveloperGuide.md | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 5d68f391bb..b483800647 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -21,7 +21,7 @@ The input of user is collected by `getUserCommand()` inside class `Ui`. Step 2: The input string will be converted into a `Command` object by being passed through -`parseCommand(String userInput)` inside `Paser`. +`parseCommand(String userInput)` inside `Parser`. In this case, an `AddCommand` will be created and returned. @@ -59,6 +59,46 @@ coupling in the program as the `AddCommand` will not have access to the inner st - Cons: Will cause trouble when temporary flashcard (that need not be stored) are created +### Delete Flashcard Feature + +#### Current implementation + +The current delete flashcard allows the user to remove a flashcard from the list of flashcards, +it is implemented through the following steps: + +Step 1: The input of user is collected by `getUserCommand()` inside class `Ui`. + +Step 2: The input string will be converted into a `Command` object by being passed through +`parseCommand(String userInput)` inside `Parser`. + +In this case, a `DeleteCommnad` will be created and returned. + +Step 3: The `execute()` function of `DeleteCommand` will run, creating a copy of the list of flashcards. +Then `findFlashcards(flashcards, query)` is called to find the flashcards with questions matching the query, +before calling `printFlashcardList(matchingFlashcards)` to display the found flashcards. + +User input is taken to get the index of the flashcard to be removed. `deleteFlashcard` is called from +class `flashcardList` to remove the flashcard from the original list of flashcards. Finally +`printSuccessfulDelete` is called from class `Ui` to indicate a successful removal of the flashcard. + +The deletion process is now completed and the program will await another command. + +#### Reason for current implementation + +Through using `DeleteCommand` class, which extends `Command` class it increases the level of +abstraction as the code can now perform the various commands on a class level. + +In order to minimise the time for users to search for the flashcard to delete, they are able +to first search for a sub-list of flashcards with matching questions as the query. This method +makes the deletion process simple even if the user does not remember the index of the flashcard. + +#### Alternative implementation + +- Alternative 1: Delete flashcard by index from the start + - Pros: Easy to implement and simplifies code + - Cons: Cumbersome to delete if user forgets the flashcard's index and has to search + through the whole list of flashcards. + ## Product scope ### Target user profile From 30e31ad032a011b5175efe5842d1dd8d5630f33f Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Fri, 24 Mar 2023 15:28:31 +0800 Subject: [PATCH 086/174] Added test for successful DeleteCommand --- src/test/java/com/clanki/parser/ParserTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index dafef864cd..2b6bfde435 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -4,6 +4,7 @@ import com.clanki.commands.AddCommand; import com.clanki.commands.ByeCommand; import com.clanki.commands.Command; +import com.clanki.commands.DeleteCommand; import com.clanki.commands.ReviewCommand; import com.clanki.commands.UnknownCommand; import com.clanki.commands.UpdateCommand; @@ -76,4 +77,10 @@ public void parserUpdateCommand_updateCommand_successful() { Command parsedCommand = Parser.parseCommand("update Question"); assertTrue(parsedCommand instanceof UpdateCommand); } + + @Test + public void parserDeleteCommand_deleteCommand_successful() { + Command parsedCommand = Parser.parseCommand("del query"); + assertTrue(parsedCommand instanceof DeleteCommand); + } } From e9da01d4063b424f980f2f3bce633628e86b847d Mon Sep 17 00:00:00 2001 From: Zijin Date: Sat, 25 Mar 2023 15:55:29 +0800 Subject: [PATCH 087/174] Update decoder to automatically delete stored data of incorrect format --- .../clanki/storage/FlashcardListDecoder.java | 9 ++- .../java/com/clanki/storage/StorageFile.java | 2 - .../storage/FlashcardListDecoderTest.java | 62 ++++++++++--------- 3 files changed, 38 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/clanki/storage/FlashcardListDecoder.java b/src/main/java/com/clanki/storage/FlashcardListDecoder.java index d89352edbb..7f62207691 100644 --- a/src/main/java/com/clanki/storage/FlashcardListDecoder.java +++ b/src/main/java/com/clanki/storage/FlashcardListDecoder.java @@ -26,11 +26,14 @@ public class FlashcardListDecoder { * * @throws StorageOperationException if the {@code encodedFlashcardList} is in an invalid format. */ - public static ArrayList decodeFlashcardList(List encodedFlashcardList) - throws StorageOperationException { + public static ArrayList decodeFlashcardList(List encodedFlashcardList) { final ArrayList decodedFlashcard = new ArrayList<>(); for (String encodedFlashcard : encodedFlashcardList) { - decodedFlashcard.add(decodeFlashcardFromString(encodedFlashcard)); + try { + decodedFlashcard.add(decodeFlashcardFromString(encodedFlashcard)); + } catch (StorageOperationException e) { + System.out.println("Some flashcards are formatted incorrectly, they will be deleted."); + } } return decodedFlashcard; } diff --git a/src/main/java/com/clanki/storage/StorageFile.java b/src/main/java/com/clanki/storage/StorageFile.java index 86d9464b0a..0afe084f11 100644 --- a/src/main/java/com/clanki/storage/StorageFile.java +++ b/src/main/java/com/clanki/storage/StorageFile.java @@ -78,12 +78,10 @@ public ArrayList load() throws StorageOperationException { if (!Files.exists(path) || !Files.isRegularFile(path)) { return new ArrayList<>(); } - try { return FlashcardListDecoder.decodeFlashcardList(Files.readAllLines(path)); } catch (FileNotFoundException fnfe) { throw new AssertionError("A non-existent file scenario is already handled earlier."); - // other errors } catch (IOException ioe) { throw new StorageOperationException("Error writing to file: " + path); } diff --git a/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java b/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java index 623f65c689..61c841a928 100644 --- a/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java +++ b/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java @@ -23,21 +23,17 @@ void decodeFlashcardList_correctInput_correctOutput() { List storedString = new ArrayList<>(); storedString.add("q/q1 a/a1 d/" + LocalDate.now().toString() + " p/0"); storedString.add("q/q2 a/a2 d/" + LocalDate.now().toString() + " p/0"); - try { - ArrayList decodedFlashcardList = decodeFlashcardList(storedString); - Flashcard testCard1 = decodedFlashcardList.get(0); - assertEquals("q1", testCard1.getQuestion()); - assertEquals("a1", testCard1.getAnswer()); - assertEquals(LocalDate.now(), testCard1.getDueDate()); - assertEquals(0, testCard1.getCurrentPeriodInDays()); - Flashcard testCard2 = decodedFlashcardList.get(1); - assertEquals("q2", testCard2.getQuestion()); - assertEquals("a2", testCard2.getAnswer()); - assertEquals(LocalDate.now(), testCard2.getDueDate()); - assertEquals(0, testCard2.getCurrentPeriodInDays()); - } catch (StorageOperationException e) { - throw new RuntimeException(e); - } + ArrayList decodedFlashcardList = decodeFlashcardList(storedString); + Flashcard testCard1 = decodedFlashcardList.get(0); + assertEquals("q1", testCard1.getQuestion()); + assertEquals("a1", testCard1.getAnswer()); + assertEquals(LocalDate.now(), testCard1.getDueDate()); + assertEquals(0, testCard1.getCurrentPeriodInDays()); + Flashcard testCard2 = decodedFlashcardList.get(1); + assertEquals("q2", testCard2.getQuestion()); + assertEquals("a2", testCard2.getAnswer()); + assertEquals(LocalDate.now(), testCard2.getDueDate()); + assertEquals(0, testCard2.getCurrentPeriodInDays()); } @Test @@ -46,21 +42,17 @@ void decodeAddressBook_encodeInput_decodeOutput() { flashcardList.addNewFlashcard("q1", "a1"); flashcardList.addNewFlashcard("q2", "a2"); List encodedResult = encodeAddressBook(flashcardList); - try { - ArrayList decodedFlashcardList = decodeFlashcardList(encodedResult); - Flashcard testCard1 = decodedFlashcardList.get(0); - assertEquals("q1", testCard1.getQuestion()); - assertEquals("a1", testCard1.getAnswer()); - assertEquals(LocalDate.now(), testCard1.getDueDate()); - assertEquals(0, testCard1.getCurrentPeriodInDays()); - Flashcard testCard2 = decodedFlashcardList.get(1); - assertEquals("q2", testCard2.getQuestion()); - assertEquals("a2", testCard2.getAnswer()); - assertEquals(LocalDate.now(), testCard2.getDueDate()); - assertEquals(0, testCard2.getCurrentPeriodInDays()); - } catch (StorageOperationException e) { - throw new RuntimeException(e); - } + ArrayList decodedFlashcardList = decodeFlashcardList(encodedResult); + Flashcard testCard1 = decodedFlashcardList.get(0); + assertEquals("q1", testCard1.getQuestion()); + assertEquals("a1", testCard1.getAnswer()); + assertEquals(LocalDate.now(), testCard1.getDueDate()); + assertEquals(0, testCard1.getCurrentPeriodInDays()); + Flashcard testCard2 = decodedFlashcardList.get(1); + assertEquals("q2", testCard2.getQuestion()); + assertEquals("a2", testCard2.getAnswer()); + assertEquals(LocalDate.now(), testCard2.getDueDate()); + assertEquals(0, testCard2.getCurrentPeriodInDays()); } @Test @@ -71,4 +63,14 @@ void decodeAddressBook_invalidInput_exception() { () -> decodeFlashcardList(storedString)); } + @Test + void decodeAddressBook_correctAndInvalidInput_correctOutput() { + List storedString = new ArrayList<>(); + storedString.add("q1 a/a1 d/" + LocalDate.now().toString() + " p/0"); + storedString.add("q/q2 a/a2 d/" + LocalDate.now().toString() + " p/0"); + ArrayList decodedFlashcardList = decodeFlashcardList(storedString); + assertEquals(1, decodedFlashcardList.size()); + assertEquals("q2", decodedFlashcardList.get(0).getQuestion()); + } + } From 686a79119cc8ff4720bd625c6ef69a2247946eb0 Mon Sep 17 00:00:00 2001 From: Zijin Date: Sat, 25 Mar 2023 16:09:22 +0800 Subject: [PATCH 088/174] Update UserGuide.md to include how to exit the program --- docs/UserGuide.md | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index d1b21ad9ea..f73689f338 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -7,14 +7,22 @@ to assist them with memorisation by using a technique called ## Quick start -- Ensure you have Java 11 or above installed. -- Other steps TBD +1. Ensure you have Java 11 or above installed. +2. Download the latest version of Clanki from [here](https://github.com/AY2223S2-CS2113-T15-4/tp/releases/tag/v1.0). +3. Copy the file to the folder you want to use as the home folder for Clanki. +4. Open a command terminal, `cd` into the folder you put the jar file in, and use the `java -jar clanki.jar` + command to run the application. + You should be greeted with `Welcome to Clanki! Time to start studying!` after a few seconds. +5. Type the command in the command box and press Enter to execute it. + Some example commands you can try: + - `add /q What is the worst fruit? /a Durian`: Add a flashcard with Question: What is the worst fruit? + and Answer: Durian to the list of flashcards. + - `review`: Go through the flashcards that are due today. + - `bye`: Exit the app. +6. Refer to the Features below for details of each command. ## Features -> Formatting of output is still TBD, but command syntax probably -> won't change much. - > Square brackets indicate optional sections of the symtax. ### Adding a flashcard @@ -147,3 +155,11 @@ Found 2 cards with the query "fruit": Which one do you want to delete? 2 Understood. The card has been deleted. ``` + +### Exit program + +``` +bye +``` + +Exits the program. From 78a1988c4b3016122b73a9ddf1eb04462dd02c1e Mon Sep 17 00:00:00 2001 From: Zijin Date: Sat, 25 Mar 2023 16:14:26 +0800 Subject: [PATCH 089/174] Remove test that is no longer valid --- .../java/com/clanki/storage/FlashcardListDecoderTest.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java b/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java index 61c841a928..8c8c95f6f6 100644 --- a/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java +++ b/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java @@ -55,14 +55,6 @@ void decodeAddressBook_encodeInput_decodeOutput() { assertEquals(0, testCard2.getCurrentPeriodInDays()); } - @Test - void decodeAddressBook_invalidInput_exception() { - List storedString = new ArrayList<>(); - storedString.add("q1 a/a1 d/" + LocalDate.now().toString() + " p/0"); - assertThrows(StorageOperationException.class, - () -> decodeFlashcardList(storedString)); - } - @Test void decodeAddressBook_correctAndInvalidInput_correctOutput() { List storedString = new ArrayList<>(); From 7ee819ee9eff791b0d430330f3be2d5c08612be6 Mon Sep 17 00:00:00 2001 From: Zijin Date: Sat, 25 Mar 2023 16:16:24 +0800 Subject: [PATCH 090/174] Update code to follow checkstyle requirements --- src/test/java/com/clanki/storage/FlashcardListDecoderTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java b/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java index 8c8c95f6f6..1beb2c9565 100644 --- a/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java +++ b/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java @@ -1,7 +1,6 @@ package com.clanki.storage; -import com.clanki.exceptions.StorageOperationException; import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; import org.junit.jupiter.api.Test; @@ -13,7 +12,6 @@ import static com.clanki.storage.FlashcardListDecoder.decodeFlashcardList; import static com.clanki.storage.FlashcardListEncoder.encodeAddressBook; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; class FlashcardListDecoderTest { From fccc1e45cae160415df6b7a3d1d602e3c5f0e057 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Sun, 26 Mar 2023 09:37:09 +0800 Subject: [PATCH 091/174] Removed flashcardList.txt --- flashcardList.txt | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 flashcardList.txt diff --git a/flashcardList.txt b/flashcardList.txt deleted file mode 100644 index e5bcdb074f..0000000000 --- a/flashcardList.txt +++ /dev/null @@ -1,3 +0,0 @@ -q/test a/onef d/2023-03-23 p/1 -q/first a/1 d/2023-03-23 p/1 -q/first a/3 d/2023-03-23 p/1 From 821f1bce282827e2134303a4921f3dca5dace388 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Mon, 27 Mar 2023 14:07:22 +0800 Subject: [PATCH 092/174] Added update flashcard in developer guide --- docs/DeveloperGuide.md | 43 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index b483800647..070a6d02c1 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -99,6 +99,49 @@ makes the deletion process simple even if the user does not remember the index o - Cons: Cumbersome to delete if user forgets the flashcard's index and has to search through the whole list of flashcards. +### Update Flashcard Feature + +#### Current implementation + +The current update flashcard feature allows users search for a specific flashcard and update the contents of this +flashcard. +It is implemented through the following steps: + +Step 1: +The input of user is collected by `getUserCommand()` inside class `Ui`. + +Step 2: +The input string will be converted into a `Command` object by being passed through +`parseCommand(String userInput)` inside `Parser`. + +In this case, an `UpdateCommand` will be created and returned. + +Step 3: +The `execute()` function of `UpdateCommand` will run, creating an ArrayList of flashcards. Then +`findFlashcard(flashcards, query)` is called to find flashcards that contain questions or answers that match `query`, +after which it will call `printFlashCards(matchingFlashcards)` in `UpdateCommand` class to display the flashcards +found. + +The index of the flashcard to be updated is taken from the user input, which is collected by `getUserCommand()`. +`implementUpdate(flashcards, userText)` is then called to update the question or answer of the flashcard. Finally, +`printFlashCard(flashcards.get(index))` will be called which prints the flashcard that was updated with its new content. + +At this point, the update flashcard process is completed and the program is read to take another command. + +#### Reason for current implementation + +Implementing the update flashcard in an `UpdateCommand` class makes it easier during the debugging process related to +update flashcard feature alone as most of the methods and attributes are within this `UpdateCommand` class. + +#### Alternative implementation + +- Alternative 1: Instead of creating a new arrayList `matchingFlashcards` that store flashcards containing the + `query` and then printing the list of flashcards, directly print the flashcards when there is a match with the query` + - Pros: Easier to implement + - Cons: Harder to track the total number of flashcards that has `query` and will need to have another way to track + the index of the matching flashcards. it will also be more confusing as the index of the user input is not + aligned with the index of the arrayList that contains all the flashcards + ## Product scope ### Target user profile From a429c8c51ae65960488e500ffc707f15e1e4ff25 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Mon, 27 Mar 2023 16:26:37 +0800 Subject: [PATCH 093/174] Handle exceptions in update command --- .../com/clanki/commands/UpdateCommand.java | 25 +++++++++++++------ .../exceptions/NoQueryInInputException.java | 4 +++ src/main/java/com/clanki/parser/Parser.java | 14 ++++++++--- 3 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/clanki/exceptions/NoQueryInInputException.java diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 90ee793462..08221c4409 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -57,13 +57,22 @@ public int implementUpdate(ArrayList flashcards, String userText) { public void execute(FlashcardList flashcardList, Ui display) { ArrayList flashcards = flashcardList.getFlashCards(); findFlashcard(flashcards, query); - System.out.println( - "Found " + matchingFlashcards.size() + " cards with the query \"" + query + "\":"); - printFlashCards(matchingFlashcards); - System.out.println("Which flashcard do you want to update?"); - String userText = display.getUserCommand(); - int index = implementUpdate(flashcards, userText); - System.out.println("Understood. The card has been updated to"); - printFlashCard(flashcards.get(index)); + if (matchingFlashcards.size() > 0) { + System.out.println( + "Found " + matchingFlashcards.size() + " cards with the query \"" + query + "\":"); + printFlashCards(matchingFlashcards); + System.out.println("Which flashcard do you want to update?"); + String userText = display.getUserCommand(); + int index = 0; + try { + index = implementUpdate(flashcards, userText); + System.out.println("Understood. The card has been updated to"); + printFlashCard(flashcards.get(index)); + } catch (IndexOutOfBoundsException e) { + System.out.println("Please enter the input in the correct format as shown in the user guide."); + } + } else { + System.out.println("There are no flashcards with the query \"" + query + "\"."); + } } } diff --git a/src/main/java/com/clanki/exceptions/NoQueryInInputException.java b/src/main/java/com/clanki/exceptions/NoQueryInInputException.java new file mode 100644 index 0000000000..72f3981da4 --- /dev/null +++ b/src/main/java/com/clanki/exceptions/NoQueryInInputException.java @@ -0,0 +1,4 @@ +package com.clanki.exceptions; + +public class NoQueryInInputException extends Exception { +} diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index 2596e4f822..d0314ea469 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -10,6 +10,7 @@ import com.clanki.exceptions.EmptyFlashcardAnswerException; import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; +import com.clanki.exceptions.NoQueryInInputException; import java.util.logging.Level; import java.util.logging.Logger; @@ -29,13 +30,15 @@ public static Command parseCommand(String userInput) { System.out.println("The question of this card is empty, please enter one."); } catch (EmptyFlashcardAnswerException e) { System.out.println("The answer for this flashcard is empty, please enter one."); + } catch (NoQueryInInputException e) { + System.out.println("Please enter a query to be searched in the list of flashcards."); } return new UnknownCommand(); } public static Command parseCommandStrict(String userInput) throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, - EmptyFlashcardAnswerException { + EmptyFlashcardAnswerException, NoQueryInInputException { ParsedInput parsedInput = new ParsedInput(userInput); String command = parsedInput.getCommand(); assert !command.isEmpty() : "The command string must not be empty"; @@ -94,13 +97,16 @@ public static ReviewCommand getReviewCommand(ParsedInput parsedInput) { return new ReviewCommand(); } - public static UpdateCommand getUpdateCommand(ParsedInput parsedInput) { + public static UpdateCommand getUpdateCommand(ParsedInput parsedInput) throws NoQueryInInputException { + String query = parsedInput.getBody(); + if (query.isEmpty()) { + throw new NoQueryInInputException(); + } return new UpdateCommand(parsedInput.getBody()); } public static DeleteCommand getDeleteCommand(ParsedInput parsedInput) { - String query = parsedInput.getBody(); - return new DeleteCommand(query); + return new DeleteCommand(parsedInput.getBody()); } public static ByeCommand getByeCommand(ParsedInput parsedInput) { From 53a41a925eac340686e26a74e5cf663ced4a463b Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Mon, 27 Mar 2023 16:33:31 +0800 Subject: [PATCH 094/174] Added exceptions in update command --- .../java/com/clanki/exceptions/NoQueryInInputException.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/exceptions/NoQueryInInputException.java b/src/main/java/com/clanki/exceptions/NoQueryInInputException.java index 72f3981da4..2f3eedb908 100644 --- a/src/main/java/com/clanki/exceptions/NoQueryInInputException.java +++ b/src/main/java/com/clanki/exceptions/NoQueryInInputException.java @@ -1,4 +1,4 @@ package com.clanki.exceptions; public class NoQueryInInputException extends Exception { -} +} \ No newline at end of file From e068e4d0d8211d37ad966bb2dedfb08e8d937d4e Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Mon, 27 Mar 2023 16:37:08 +0800 Subject: [PATCH 095/174] Added newline in NoQueryInInputException class --- .../java/com/clanki/exceptions/NoQueryInInputException.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/exceptions/NoQueryInInputException.java b/src/main/java/com/clanki/exceptions/NoQueryInInputException.java index 2f3eedb908..72f3981da4 100644 --- a/src/main/java/com/clanki/exceptions/NoQueryInInputException.java +++ b/src/main/java/com/clanki/exceptions/NoQueryInInputException.java @@ -1,4 +1,4 @@ package com.clanki.exceptions; public class NoQueryInInputException extends Exception { -} \ No newline at end of file +} From 373cbfb8bc5c733fa2d4d999ce177750ed784ecb Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Mon, 27 Mar 2023 23:51:30 +0800 Subject: [PATCH 096/174] Added uml diagram for DeleteFlashcard in DG --- docs/DeveloperGuide.md | 9 ++-- docs/umlDiagrams/DeleteFlashcard.png | Bin 0 -> 22591 bytes docs/umlDiagrams/DeleteFlashcard.puml | 57 ++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 docs/umlDiagrams/DeleteFlashcard.png create mode 100644 docs/umlDiagrams/DeleteFlashcard.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index b483800647..e1c2ba8a3e 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -35,7 +35,7 @@ to display text indicating the successful adding function to the user. At this point, the adding process is completed and the program is ready to take another command. -The following sequence diagram show how the add operation work: +The following sequence diagram show how the add operation works: ![AddFlashcard-0.png](umlDiagrams%2FAddFlashcard-0.png) #### Reason for current implementation @@ -78,11 +78,14 @@ Then `findFlashcards(flashcards, query)` is called to find the flashcards with q before calling `printFlashcardList(matchingFlashcards)` to display the found flashcards. User input is taken to get the index of the flashcard to be removed. `deleteFlashcard` is called from -class `flashcardList` to remove the flashcard from the original list of flashcards. Finally +class `flashcardList` to remove the flashcard from the original list of flashcards. Finally `printSuccessfulDelete` is called from class `Ui` to indicate a successful removal of the flashcard. The deletion process is now completed and the program will await another command. +An overview of how the Delete operation works is shown with the following sequence diagram +![DeleteFlashcard.png](umlDiagrams%2FDeleteFlashcard.png) + #### Reason for current implementation Through using `DeleteCommand` class, which extends `Command` class it increases the level of @@ -97,7 +100,7 @@ makes the deletion process simple even if the user does not remember the index o - Alternative 1: Delete flashcard by index from the start - Pros: Easy to implement and simplifies code - Cons: Cumbersome to delete if user forgets the flashcard's index and has to search - through the whole list of flashcards. + through the whole list of flashcards. ## Product scope diff --git a/docs/umlDiagrams/DeleteFlashcard.png b/docs/umlDiagrams/DeleteFlashcard.png new file mode 100644 index 0000000000000000000000000000000000000000..3c9007ca586ed7d76d51364b723cc5714e33e166 GIT binary patch literal 22591 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 literal 0 HcmV?d00001 diff --git a/docs/umlDiagrams/DeleteFlashcard.puml b/docs/umlDiagrams/DeleteFlashcard.puml new file mode 100644 index 0000000000..e6716b99d2 --- /dev/null +++ b/docs/umlDiagrams/DeleteFlashcard.puml @@ -0,0 +1,57 @@ +@startuml +'https://plantuml.com/class-diagram + +!define LOGIC_COLOR #3333C4 +!define LOGIC_COLOR_T1 #7777DB +!define LOGIC_COLOR_T2 #5252CE +!define LOGIC_COLOR_T3 #1616B0 +!define LOGIC_COLOR_T4 #101086 + +participant "<> :Clanki" as Main +participant ":Ui" as Ui +participant ":Parser" as Parser +participant ":Delete Command" as DeleteCommand +participant ":Flashcard List" as FlashcardList + +activate Main +Main -> Ui : User input +activate Ui + +Ui -> Main : userInput : String +deactivate Ui + +Main -> Parser : parseInput(userInput) +activate Parser + +create DeleteCommand +Parser -> DeleteCommand :DeleteCommand(query) +activate DeleteCommand + +DeleteCommand -> Parser +deactivate DeleteCommand + +Parser -> Main : command : DeleteCommand +deactivate Parser + +Main -> DeleteCommand : execute() +activate DeleteCommand + +DeleteCommand -> FlashcardList : getFlashcards() +activate FlashcardList + +FlashcardList -> DeleteCommand +deactivate FlashcardList + +DeleteCommand -> Ui : printSuccessfulDelete(index) +activate Ui + +Ui -> Main : Display Message +Ui -> DeleteCommand +deactivate Ui + +DeleteCommand -> Main +deactivate DeleteCommand + + + +@enduml \ No newline at end of file From bb7f3059fd8137583692c470430254766cf569f3 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Tue, 28 Mar 2023 09:31:15 +0800 Subject: [PATCH 097/174] Improved review command Signed-off-by: Vu Van Dung --- .../com/clanki/commands/DeleteCommand.java | 5 +- .../com/clanki/commands/ReviewCommand.java | 53 +++++++++---------- .../com/clanki/objects/FlashcardQueue.java | 34 ++++++++++++ 3 files changed, 60 insertions(+), 32 deletions(-) create mode 100644 src/main/java/com/clanki/objects/FlashcardQueue.java diff --git a/src/main/java/com/clanki/commands/DeleteCommand.java b/src/main/java/com/clanki/commands/DeleteCommand.java index b5bd44b922..968af4d881 100644 --- a/src/main/java/com/clanki/commands/DeleteCommand.java +++ b/src/main/java/com/clanki/commands/DeleteCommand.java @@ -10,11 +10,9 @@ public class DeleteCommand extends Command { ArrayList matchingFlashcards = new ArrayList<>(); String query; - int index; public DeleteCommand(String query) { this.query = query; - this.index = index; } public void findFlashcard(ArrayList flashcards, String query) { @@ -43,7 +41,8 @@ public void printFlashCardList(ArrayList flashcards) { public void execute(FlashcardList flashcardList, Ui display) { ArrayList flashcards = flashcardList.getFlashCards(); findFlashcard(flashcards, query); - System.out.println("Found " + matchingFlashcards.size() + " cards with query \"" + query + "\":"); + System.out.println( + "Found " + matchingFlashcards.size() + " cards with query \"" + query + "\":"); printFlashCardList(matchingFlashcards); System.out.println("Which one do you want to delete?"); diff --git a/src/main/java/com/clanki/commands/ReviewCommand.java b/src/main/java/com/clanki/commands/ReviewCommand.java index 3e97a13830..0dd384e9b8 100644 --- a/src/main/java/com/clanki/commands/ReviewCommand.java +++ b/src/main/java/com/clanki/commands/ReviewCommand.java @@ -2,44 +2,39 @@ import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; +import com.clanki.objects.FlashcardQueue; import com.clanki.ui.Ui; -import java.util.ArrayList; - public class ReviewCommand extends Command { - private static void reviewCurrentFlashcard(Ui display, Flashcard flashcard) { - boolean isCurrentCardPassed = false; - display.printlnSeveralStrings("Let's see the next flashcard!"); - while (!isCurrentCardPassed) { - display.printlnSeveralStrings("Question for the current flashcard is:", flashcard.getQuestion()); - display.printlnSeveralStrings("Are you ready to view the answer?"); + @Override + public void execute(FlashcardList flashcardList, Ui display) { + FlashcardQueue flashcardQueue = new FlashcardQueue(flashcardList.getFlashCards()); + if (flashcardQueue.isEmpty()) { + display.printlnSeveralStrings("There are no cards available for review today."); + return; + } + display.printlnSeveralStrings(String + .format("There are %d cards available for review today.", flashcardQueue.size())); + while (!flashcardQueue.isEmpty()) { + display.printlnSeveralStrings("---"); + Flashcard currentFlashcard = flashcardQueue.popFlashcard(); + System.out.printf("Q: %s (ENTER to view answer)", currentFlashcard.getQuestion()); display.getUserCommand(); - display.printlnSeveralStrings(flashcard.getAnswer(), "Have you got this correct?"); - String answerIfCorrect = display.getUserCommand(); - if (answerIfCorrect.equals("yes") || answerIfCorrect.equals("y")) { + display.printlnSeveralStrings(String.format("A: %s", currentFlashcard.getAnswer())); + System.out.print("Did you get it right? (y/n) "); + String answerIfCorrect = display.getUserCommand().toLowerCase(); + if (answerIfCorrect.equals("y")) { display.printlnSeveralStrings("Great, you got it right!"); - flashcard.updateDueDateAfterCorrectAnswer(); - isCurrentCardPassed = true; + currentFlashcard.updateDueDateAfterCorrectAnswer(); } else if (answerIfCorrect.equals("n")) { - display.printlnSeveralStrings("No worries, we will try it next time."); - flashcard.updateDueDateAfterIncorrectAnswer(); - isCurrentCardPassed = true; + display.printlnSeveralStrings("No worries, we will try again later today."); + currentFlashcard.updateDueDateAfterIncorrectAnswer(); + flashcardQueue.pushFlashcard(currentFlashcard); } else { display.printInvalidInput(); } - - } - } - - @Override - public void execute(FlashcardList flashcardList, Ui display) { - ArrayList fullFlashcardList = flashcardList.getFlashCards(); - for (int i = 0; i < fullFlashcardList.size(); i++) { - Flashcard flashcard = fullFlashcardList.get(i); - if (flashcard.isDueBeforeToday()) { - reviewCurrentFlashcard(display, flashcard); - } } - display.printlnSeveralStrings("Congrats! You have reviewed all the flashcards due today!"); + display.printlnSeveralStrings("---", + "Congrats! You have reviewed all the flashcards due today!"); } } diff --git a/src/main/java/com/clanki/objects/FlashcardQueue.java b/src/main/java/com/clanki/objects/FlashcardQueue.java new file mode 100644 index 0000000000..f0dc87f9a1 --- /dev/null +++ b/src/main/java/com/clanki/objects/FlashcardQueue.java @@ -0,0 +1,34 @@ +package com.clanki.objects; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.Queue; + +public class FlashcardQueue { + private final Queue flashcards; + + public FlashcardQueue(ArrayList flashcards) { + this.flashcards = new LinkedList<>(); + for (Flashcard flashcard : flashcards) { + if (flashcard.isDueBeforeToday()) { + this.flashcards.add(flashcard); + } + } + } + + public void pushFlashcard(Flashcard flashcard) { + flashcards.add(flashcard); + } + + public Flashcard popFlashcard() { + return flashcards.poll(); + } + + public boolean isEmpty() { + return flashcards.isEmpty(); + } + + public int size() { + return flashcards.size(); + } +} From 543770d5891af344224d2f504c7dc85d7de7ff57 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Tue, 28 Mar 2023 09:36:50 +0800 Subject: [PATCH 098/174] Update EXPECTED.txt Signed-off-by: Vu Van Dung --- text-ui-test/EXPECTED.TXT | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index dee135244f..7bed8b0e3d 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -16,20 +16,15 @@ Which flashcard do you want to update? Understood. The card has been updated to Q: Q2 A: A1 -Let's see the next flashcard! -Question for the current flashcard is: -Q1 -Are you ready to view the answer? -A1 -Have you got this correct? -Great, you got it right! -Let's see the next flashcard! -Question for the current flashcard is: -Q2 -Are you ready to view the answer? -A1 -Have you got this correct? -No worries, we will try it next time. +There are 2 cards available for review today. +--- +Q: Q1 (ENTER to view answer)A: A1 +Did you get it right? (y/n) Great, you got it right! +--- +Q: Q2 (ENTER to view answer)A: A1 +Did you get it right? (y/n) No worries, we will try again later today. +--- +Q: Q2 (ENTER to view answer)A: A1 +Did you get it right? (y/n) The input is in an incorrect format. +--- Congrats! You have reviewed all the flashcards due today! -The input is in an incorrect format. -Bye. Don't forget to come back later to study! From 4aadf9d84c229566c336846e386c8433760185f0 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 28 Mar 2023 09:50:53 +0800 Subject: [PATCH 099/174] Changed update command of user guide --- docs/UserGuide.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index f73689f338..00c86a0fd3 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -118,15 +118,17 @@ update /q QUERY ``` > update fruit Found 2 cards with the query "fruit": -[1] Q: What is the worst fruit? - A: Durian -[2] Q: What is the Japanese word for "fruit"? - A: 果物 -Which one do you want to update? 1 /q What is the best fruit? +[1] +Q: What is the worst fruit? +A: Durian +[2] +Q: What is the Japanese word for "fruit"? +A: 果物 +Which flashcard do you want to update? 1 /q What is the best fruit? Understood. The card has been updated to - Q: What is the best fruit? - A: Durian - D: 29 February 2023 +Q: What is the best fruit? +A: Durian +D: 29 February 2023 ``` ### Delete flashcards From c91b1cf5597949898dbab5a00b7a5f9f4cf271a3 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Tue, 28 Mar 2023 09:57:10 +0800 Subject: [PATCH 100/174] Add developer guide on parsers Signed-off-by: Vu Van Dung --- docs/DeveloperGuide.md | 70 +++++++++++++++++++++++++++++++++--------- 1 file changed, 55 insertions(+), 15 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 57219e4028..25bed08563 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -51,13 +51,13 @@ coupling in the program as the `AddCommand` will not have access to the inner st #### Alternative implementation - Alternative 1: Have the add command function directly in `FlashcardList` - - Pros: Easy to implement - - Cons: Will require another function in another program to differentiate it from other - commands + - Pros: Easy to implement + - Cons: Will require another function in another program to differentiate it from other + commands - Alternative 2: Have the constructor of `Flashcard` include adding the card to list of flashcards - - Pros: Simplifies code - - Cons: Will cause trouble when temporary flashcard (that need not be stored) are - created + - Pros: Simplifies code + - Cons: Will cause trouble when temporary flashcard (that need not be stored) are + created ### Delete Flashcard Feature @@ -98,9 +98,9 @@ makes the deletion process simple even if the user does not remember the index o #### Alternative implementation - Alternative 1: Delete flashcard by index from the start - - Pros: Easy to implement and simplifies code - - Cons: Cumbersome to delete if user forgets the flashcard's index and has to search - through the whole list of flashcards. + - Pros: Easy to implement and simplifies code + - Cons: Cumbersome to delete if user forgets the flashcard's index and has to search + through the whole list of flashcards. ### Update Flashcard Feature @@ -140,10 +140,50 @@ update flashcard feature alone as most of the methods and attributes are within - Alternative 1: Instead of creating a new arrayList `matchingFlashcards` that store flashcards containing the `query` and then printing the list of flashcards, directly print the flashcards when there is a match with the query` - - Pros: Easier to implement - - Cons: Harder to track the total number of flashcards that has `query` and will need to have another way to track - the index of the matching flashcards. it will also be more confusing as the index of the user input is not - aligned with the index of the arrayList that contains all the flashcards + - Pros: Easier to implement + - Cons: Harder to track the total number of flashcards that has `query` and will need to have another way to track + the index of the matching flashcards. it will also be more confusing as the index of the user input is not + aligned with the index of the arrayList that contains all the flashcards + +### Parser + +#### Current implementation + +The parser mostly relies on the `ParsedInput` class, which can parse any user provided string input in the format of Windows command prompt commands (`command body /opt-key opt-value`). + +##### `ParsedInput` + +Initiated with a string `input`, it splits the input to sections that are of use. From there it splits each section further to a "title" (denoted with `=` below) and a "body" (denoted with `-` below) part. + +``` +command blah blah /opt1 hello /opt2 world blah bleh +| Part 1 | | Part 2 | | Part 3 | +|=====| |-------| |==| |---| |==| |-------------| +``` + +Then these small subparts are grouped together to a format where the command part of the command, the body part and the options can be retrieved programmatically. + +The command and body can be read with `getCommand()` and `getBody()` respectively. `getCommand()` is guaranteed to be non-null. + +The options can be read with `getOptionByName(optionKeyName)`. The reason we don't have specific `getDate` or `getQuestion` command is because we don't know what the user will input and what options we will require for each command. So depending on the command, we retrieve the option accordingly with e.g. + +```java +"command blah blah /opt1 hello /opt2 world blah bleh" +getOptionByName("opt2") // -> "world blah bleh" +getOptionByName("opt3") // -> null +``` + +##### `Parser` + +This is now just a matter of wrapping `ParsedInput` with suitable error handling and logic such that each command will be used to initiated a corresponding command class (e.g. `AddCommand`), while errors are handled gracefully. + +#### Reason for current implementation + +We need an intuitive, safe and declarative way to parse the user input. Alternative implementations that can only parse specific commands with specific options are more imperative, less readable, less maintainable and overall just a pain to handle. That's why the two classes are here. + +#### Alternative implementation + +No. ## Product scope @@ -158,7 +198,7 @@ update flashcard feature alone as most of the methods and attributes are within ## User Stories | Version | As a ... | I want to ... | So that I can ... | -|---------|----------|---------------------------|-------------------------------------------------------------| +| ------- | -------- | ------------------------- | ----------------------------------------------------------- | | v1.0 | new user | see usage instructions | refer to them when I forget how to use the application | | v2.0 | user | find a to-do item by name | locate a to-do without having to go through the entire list | @@ -168,7 +208,7 @@ update flashcard feature alone as most of the methods and attributes are within ## Glossary -* *glossary item* - Definition +- _glossary item_ - Definition ## Instructions for manual testing From f14a2d33d26e23b3561e147829567c1466ccd2ea Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 28 Mar 2023 10:10:47 +0800 Subject: [PATCH 101/174] Added exceptions to deal with incorrect user input format --- src/main/java/com/clanki/commands/UpdateCommand.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 08221c4409..7ff5695969 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -68,8 +68,10 @@ public void execute(FlashcardList flashcardList, Ui display) { index = implementUpdate(flashcards, userText); System.out.println("Understood. The card has been updated to"); printFlashCard(flashcards.get(index)); - } catch (IndexOutOfBoundsException e) { + } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Please enter the input in the correct format as shown in the user guide."); + } catch (IndexOutOfBoundsException e) { + System.out.println("You have selected an index out of the list. There are only " + matchingFlashcards.size() + " flashcards that match the query."); } } else { System.out.println("There are no flashcards with the query \"" + query + "\"."); From 753fcc46d946fd868ea53a492efb59c8f92a0a4f Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 28 Mar 2023 10:41:46 +0800 Subject: [PATCH 102/174] Shift line down --- src/main/java/com/clanki/commands/UpdateCommand.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 7ff5695969..3562be6649 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -71,7 +71,9 @@ public void execute(FlashcardList flashcardList, Ui display) { } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Please enter the input in the correct format as shown in the user guide."); } catch (IndexOutOfBoundsException e) { - System.out.println("You have selected an index out of the list. There are only " + matchingFlashcards.size() + " flashcards that match the query."); + System.out.println( + "You have selected an index out of the list. There are only " + matchingFlashcards.size() + + " flashcards that match the query."); } } else { System.out.println("There are no flashcards with the query \"" + query + "\"."); From 1e10df645689c6619790403689c38bca1f9dc948 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 28 Mar 2023 10:53:01 +0800 Subject: [PATCH 103/174] Reduce length of sentence --- src/main/java/com/clanki/commands/UpdateCommand.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 3562be6649..112efbc5b3 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -71,9 +71,8 @@ public void execute(FlashcardList flashcardList, Ui display) { } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Please enter the input in the correct format as shown in the user guide."); } catch (IndexOutOfBoundsException e) { - System.out.println( - "You have selected an index out of the list. There are only " + matchingFlashcards.size() + - " flashcards that match the query."); + System.out.print("You have selected an index out of the list. "); + System.out.println("There are only " + matchingFlashcards.size() + " flashcards that match the query."); } } else { System.out.println("There are no flashcards with the query \"" + query + "\"."); From b7a656ed7d9145a5557eb28286925c39b288315c Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 28 Mar 2023 11:05:42 +0800 Subject: [PATCH 104/174] Added exceptions to deal with incorrect user input --- src/main/java/com/clanki/commands/UpdateCommand.java | 10 +++++++++- .../com/clanki/exceptions/InvalidInputException.java | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/clanki/exceptions/InvalidInputException.java diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 112efbc5b3..aadb12f13e 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -1,5 +1,6 @@ package com.clanki.commands; +import com.clanki.exceptions.InvalidInputException; import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; @@ -37,7 +38,7 @@ public void findFlashcard(ArrayList flashcards, String query) { } } - public int implementUpdate(ArrayList flashcards, String userText) { + public int implementUpdate(ArrayList flashcards, String userText) throws InvalidInputException { String[] userTexts = userText.split(" ", 3); int indexInMatchList = Integer.parseInt(userTexts[0]) - 1; Flashcard flashcardToChange = matchingFlashcards.get(indexInMatchList); @@ -50,6 +51,9 @@ public int implementUpdate(ArrayList flashcards, String userText) { flashcards.get(index).setAnswer(userTexts[2].substring(0, 1).toUpperCase() + userTexts[2].substring(1)); } + if (!userTexts[1].contains("a") && !userTexts[1].contains("q")) { + throw new InvalidInputException(); + } return index; } @@ -70,9 +74,13 @@ public void execute(FlashcardList flashcardList, Ui display) { printFlashCard(flashcards.get(index)); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Please enter the input in the correct format as shown in the user guide."); + } catch (NumberFormatException e) { + System.out.println("Please enter the index of the flashcard you want to update."); } catch (IndexOutOfBoundsException e) { System.out.print("You have selected an index out of the list. "); System.out.println("There are only " + matchingFlashcards.size() + " flashcards that match the query."); + } catch (InvalidInputException e) { + System.out.println("Please enter the input in the correct format as shown in the user guide."); } } else { System.out.println("There are no flashcards with the query \"" + query + "\"."); diff --git a/src/main/java/com/clanki/exceptions/InvalidInputException.java b/src/main/java/com/clanki/exceptions/InvalidInputException.java new file mode 100644 index 0000000000..55ce936bee --- /dev/null +++ b/src/main/java/com/clanki/exceptions/InvalidInputException.java @@ -0,0 +1,4 @@ +package com.clanki.exceptions; + +public class InvalidInputException extends Exception { +} From bd591f754f46f8ab510fda0107e72327f5e29342 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 28 Mar 2023 14:36:36 +0800 Subject: [PATCH 105/174] Added change date functionality for update command --- src/main/java/com/clanki/commands/UpdateCommand.java | 9 ++++++++- src/main/java/com/clanki/objects/Flashcard.java | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index aadb12f13e..3148406468 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -5,6 +5,7 @@ import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; +import java.time.LocalDate; import java.util.ArrayList; public class UpdateCommand extends Command { @@ -19,6 +20,7 @@ public UpdateCommand(String query) { public void printFlashCard(Flashcard flashcard) { System.out.println("Q: " + flashcard.getQuestion()); System.out.println("A: " + flashcard.getAnswer()); + System.out.println("D: " + flashcard.getDueDate()); } public void printFlashCards(ArrayList flashcards) { @@ -51,7 +53,12 @@ public int implementUpdate(ArrayList flashcards, String userText) thr flashcards.get(index).setAnswer(userTexts[2].substring(0, 1).toUpperCase() + userTexts[2].substring(1)); } - if (!userTexts[1].contains("a") && !userTexts[1].contains("q")) { + if (userTexts[1].contains("d")) { + String date = userTexts[2]; + LocalDate dateToChange = LocalDate.parse(date); + flashcards.get(index).setDueDate(dateToChange); + } + if (!userTexts[1].contains("a") && !userTexts[1].contains("q") && !userTexts[1].contains("d")) { throw new InvalidInputException(); } return index; diff --git a/src/main/java/com/clanki/objects/Flashcard.java b/src/main/java/com/clanki/objects/Flashcard.java index 6caa29ac73..ff39b26609 100644 --- a/src/main/java/com/clanki/objects/Flashcard.java +++ b/src/main/java/com/clanki/objects/Flashcard.java @@ -43,6 +43,10 @@ public LocalDate getDueDate() { return dueDate; } + public void setDueDate(LocalDate dueDate) { + this.dueDate = dueDate; + } + public int getCurrentPeriodInDays() { return currentPeriodInDays; } From 4a7b9dd788d587b566aa50c576d57a1c5f339a06 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 28 Mar 2023 14:41:52 +0800 Subject: [PATCH 106/174] Handle wrong date format from user input --- src/main/java/com/clanki/commands/UpdateCommand.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 3148406468..390018419d 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -6,6 +6,7 @@ import com.clanki.ui.Ui; import java.time.LocalDate; +import java.time.format.DateTimeParseException; import java.util.ArrayList; public class UpdateCommand extends Command { @@ -79,15 +80,15 @@ public void execute(FlashcardList flashcardList, Ui display) { index = implementUpdate(flashcards, userText); System.out.println("Understood. The card has been updated to"); printFlashCard(flashcards.get(index)); - } catch (ArrayIndexOutOfBoundsException e) { + } catch (ArrayIndexOutOfBoundsException | InvalidInputException e) { System.out.println("Please enter the input in the correct format as shown in the user guide."); } catch (NumberFormatException e) { System.out.println("Please enter the index of the flashcard you want to update."); } catch (IndexOutOfBoundsException e) { System.out.print("You have selected an index out of the list. "); System.out.println("There are only " + matchingFlashcards.size() + " flashcards that match the query."); - } catch (InvalidInputException e) { - System.out.println("Please enter the input in the correct format as shown in the user guide."); + } catch (DateTimeParseException e) { + System.out.println("Please enter the date in the format: yyyy-mm-dd"); } } else { System.out.println("There are no flashcards with the query \"" + query + "\"."); From d1ff26f1c4deaa9da11b3aa7972e387f1bac0d8a Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 28 Mar 2023 14:51:20 +0800 Subject: [PATCH 107/174] Changed expected.txt --- text-ui-test/EXPECTED.TXT | 3 +++ 1 file changed, 3 insertions(+) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index dee135244f..c1f20333a9 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -9,13 +9,16 @@ Found 2 cards with the query "q1": [1] Q: Q1 A: A1 +D: 2023-03-28 [2] Q: Q1 A: A1 +D: 2023-03-28 Which flashcard do you want to update? Understood. The card has been updated to Q: Q2 A: A1 +D: 2023-03-28 Let's see the next flashcard! Question for the current flashcard is: Q1 From 9c4f63d028c0d5961378be3a2f0937c2b68308c8 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 28 Mar 2023 14:58:35 +0800 Subject: [PATCH 108/174] Updated the user guide for update command --- docs/UserGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 00c86a0fd3..5423a9aa54 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -128,7 +128,7 @@ Which flashcard do you want to update? 1 /q What is the best fruit? Understood. The card has been updated to Q: What is the best fruit? A: Durian -D: 29 February 2023 +D: 2023-02-29 ``` ### Delete flashcards From a5a3955f009f85b18dfb895cb14ce2d44a6ab457 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 28 Mar 2023 15:05:10 +0800 Subject: [PATCH 109/174] Changed update command --- docs/UserGuide.md | 2 ++ src/main/java/com/clanki/commands/UpdateCommand.java | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 5423a9aa54..9659f00191 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -121,9 +121,11 @@ Found 2 cards with the query "fruit": [1] Q: What is the worst fruit? A: Durian +D: 2023-02-29 [2] Q: What is the Japanese word for "fruit"? A: 果物 +D: 2023-02-29 Which flashcard do you want to update? 1 /q What is the best fruit? Understood. The card has been updated to Q: What is the best fruit? diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 390018419d..134d899f1a 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -46,6 +46,9 @@ public int implementUpdate(ArrayList flashcards, String userText) thr int indexInMatchList = Integer.parseInt(userTexts[0]) - 1; Flashcard flashcardToChange = matchingFlashcards.get(indexInMatchList); int index = flashcards.indexOf(flashcardToChange); + if (!userTexts[1].equals("/a") && !userTexts[1].equals("/q") && !userTexts[1].equals("/d")) { + throw new InvalidInputException(); + } if (userTexts[1].contains("q")) { flashcards.get(index).setQuestion(userTexts[2].substring(0, 1).toUpperCase() + userTexts[2].substring(1)); @@ -59,9 +62,6 @@ public int implementUpdate(ArrayList flashcards, String userText) thr LocalDate dateToChange = LocalDate.parse(date); flashcards.get(index).setDueDate(dateToChange); } - if (!userTexts[1].contains("a") && !userTexts[1].contains("q") && !userTexts[1].contains("d")) { - throw new InvalidInputException(); - } return index; } From 02c4a584fb1feb32eb432bdb1f9e27c1f04025cc Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Tue, 28 Mar 2023 23:50:00 +0800 Subject: [PATCH 110/174] Update text-ui-test Signed-off-by: Vu Van Dung --- text-ui-test/EXPECTED.TXT | 20 +++++++++++--------- text-ui-test/input.txt | 6 ++++-- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 213c11876f..552ecc9fb0 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -5,29 +5,31 @@ A: A1 You have added the following card: Q: Q1 A: A1 -Found 3 cards with the query "q1": +Found 2 cards with the query "q1": [1] Q: Q1 A: A1 +D: 2023-03-28 [2] Q: Q1 A: A1 -[3] -Q: Q1 -A: A1 +D: 2023-03-28 Which flashcard do you want to update? Understood. The card has been updated to Q: Q2 A: A1 -There are 3 cards available for review today. +D: 2023-03-28 +There are 2 cards available for review today. --- -Q: Q2 (ENTER to view answer)A: A1 +Q: Q1 (ENTER to view answer)A: A1 Did you get it right? (y/n) Great, you got it right! --- Q: Q2 (ENTER to view answer)A: A1 Did you get it right? (y/n) No worries, we will try again later today. --- -Q: Q1 (ENTER to view answer)A: A1 -Did you get it right? (y/n) The input is in an incorrect format. +Q: Q2 (ENTER to view answer)A: A1 +Did you get it right? (y/n) Great, you got it right! --- -Q: Q2 (ENTER to view answer) +Congrats! You have reviewed all the flashcards due today! +The input is in an incorrect format. +Bye. Don't forget to come back later to study! diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 6b557291b1..b012319c16 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -3,9 +3,11 @@ add /q q1 /a a1 update q1 2 /q q2 review -a + y -a + n + +y foo 1 bye From 8d8e4fde2372565f52b17b3bf929d36a92c632c7 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Wed, 29 Mar 2023 10:34:38 +0800 Subject: [PATCH 111/174] Add query by date --- docs/UserGuide.md | 2 +- docs/umlDiagrams/AddFlashcard.puml | 2 +- docs/umlDiagrams/UpdateFlashcard.png | Bin 0 -> 24352 bytes docs/umlDiagrams/UpdateFlashcard.puml | 48 ++++++++++++++++++ .../com/clanki/commands/UpdateCommand.java | 3 +- 5 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 docs/umlDiagrams/UpdateFlashcard.png create mode 100644 docs/umlDiagrams/UpdateFlashcard.puml diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 9659f00191..5eb5fc18bc 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -101,7 +101,7 @@ You have finished reviewing for today. Congratulations. update /q QUERY ``` -- `QUERY` can be part of the card's question or answer. +- `QUERY` can be the card's date or be part of the card's question or answer. - A list of cards that contain this query will be listed, with an index assigned to each. diff --git a/docs/umlDiagrams/AddFlashcard.puml b/docs/umlDiagrams/AddFlashcard.puml index c15a1ac24c..ecbb5e3058 100644 --- a/docs/umlDiagrams/AddFlashcard.puml +++ b/docs/umlDiagrams/AddFlashcard.puml @@ -39,7 +39,7 @@ deactivate FlashcardList AddCommand -> Ui : printSuccessfulAddMessage(question, answer) activate Ui -Main<- Ui : Display message +Main <- Ui : Display message Ui -> AddCommand deactivate Ui diff --git a/docs/umlDiagrams/UpdateFlashcard.png b/docs/umlDiagrams/UpdateFlashcard.png new file mode 100644 index 0000000000000000000000000000000000000000..360c177fc55827372ecf955432bc622c7a3f4379 GIT binary patch literal 24352 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 literal 0 HcmV?d00001 diff --git a/docs/umlDiagrams/UpdateFlashcard.puml b/docs/umlDiagrams/UpdateFlashcard.puml new file mode 100644 index 0000000000..73e1d5ac19 --- /dev/null +++ b/docs/umlDiagrams/UpdateFlashcard.puml @@ -0,0 +1,48 @@ +@startuml +'https://plantuml.com/sequence-diagram + +participant "<> :Clanki" as Main +participant ":Ui" as Ui +participant ":Parser" as Parser +participant ":Update Command" as UpdateCommand +participant ":FlashcardList" as FlashcardList + +activate Main +Main -> Ui : User input +activate Ui + +Ui -> Main : userInput : String +deactivate Ui + +Main -> Parser : parseInput(userInput) +activate Parser + +create UpdateCommand +Parser -> UpdateCommand : UpdateCommand(query) +activate UpdateCommand + +UpdateCommand -> Parser +deactivate UpdateCommand + +Parser -> Main : command : UpdateCommand +deactivate Parser + +Main -> UpdateCommand: execute() +activate UpdateCommand + +UpdateCommand -> FlashcardList : getFlashcards() +activate FlashcardList + +FlashcardList -> UpdateCommand +deactivate FlashcardList + +UpdateCommand -> Ui : User input +activate Ui + +Ui -> UpdateCommand : userText : String +deactivate Ui + +UpdateCommand-> Main +deactivate UpdateCommand + +@enduml \ No newline at end of file diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 134d899f1a..c572c5aed2 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -35,7 +35,8 @@ public void findFlashcard(ArrayList flashcards, String query) { for (int i = 0; i < flashcards.size(); i++) { Flashcard currentFlashcard = flashcards.get(i); if (currentFlashcard.getQuestion().toLowerCase().contains(query.toLowerCase()) - || currentFlashcard.getAnswer().toLowerCase().contains(query.toLowerCase())) { + || currentFlashcard.getAnswer().toLowerCase().contains(query.toLowerCase()) || + currentFlashcard.getDueDate().toString().equals(query)) { matchingFlashcards.add(currentFlashcard); } } From d272e25507308adcf50796ef2fb308c86a839481 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Wed, 29 Mar 2023 11:28:10 +0800 Subject: [PATCH 112/174] Added diagram for update command --- docs/DeveloperGuide.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 25bed08563..a05bfb91e4 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -131,6 +131,9 @@ The index of the flashcard to be updated is taken from the user input, which is At this point, the update flashcard process is completed and the program is read to take another command. +An overview of how the Update command works is shown with the following sequence diagram +![UpdateFlashcard.png](umlDiagrams%2FUpdateFlashcard.png) + #### Reason for current implementation Implementing the update flashcard in an `UpdateCommand` class makes it easier during the debugging process related to From 0c0da079608ca46cb81f5d805f6765b8814f8729 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Wed, 29 Mar 2023 11:37:35 +0800 Subject: [PATCH 113/174] Change date --- text-ui-test/EXPECTED.TXT | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index c1f20333a9..a2d073415f 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -9,16 +9,16 @@ Found 2 cards with the query "q1": [1] Q: Q1 A: A1 -D: 2023-03-28 +D: 2023-03-29 [2] Q: Q1 A: A1 -D: 2023-03-28 +D: 2023-03-29 Which flashcard do you want to update? Understood. The card has been updated to Q: Q2 A: A1 -D: 2023-03-28 +D: 2023-03-29 Let's see the next flashcard! Question for the current flashcard is: Q1 From 794637cfebf13951cd2019476bd65c25b74628f7 Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Wed, 29 Mar 2023 21:03:02 +0800 Subject: [PATCH 114/174] Add ReviewFlashcard to DeveloperGuide --- .gitignore | 1 + docs/DeveloperGuide.md | 63 ++++++++++++++++++ docs/umlDiagrams/ReviewFlashcard-0.png | Bin 0 -> 95284 bytes docs/umlDiagrams/ReviewFlashcard.puml | 85 +++++++++++++++++++++++++ 4 files changed, 149 insertions(+) create mode 100644 docs/umlDiagrams/ReviewFlashcard-0.png create mode 100644 docs/umlDiagrams/ReviewFlashcard.puml diff --git a/.gitignore b/.gitignore index b2e4901bfd..3c4103bf07 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ bin/ /text-ui-test/ACTUAL.TXT text-ui-test/EXPECTED-UNIX.TXT +flashcardList.txt diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 5d68f391bb..62bf6ec4e4 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -59,6 +59,69 @@ coupling in the program as the `AddCommand` will not have access to the inner st - Cons: Will cause trouble when temporary flashcard (that need not be stored) are created +### Review Flashcard Feature + +#### Current implementation + +The current review flashcard allows the user to review all the flashcards that are due today or before, +it is implemented through the following steps: + +Step 1: +The input of user is collected by `getUserCommand()` inside class `Ui`. + +Step 2: +The input string will be converted into a `Command` object by being passed through +`parseCommand(String userInput)` inside `Paser`. + +In this case, an `ReviewCommand` will be created and returned. + +Step 3: +The `execute()` function of `ReviewCommand` will run, calling `getFlashCards()` +of class `FlashcardList` to get the list of the flashcards. + +Then it will iterate through the `FlashcardList` and call the function `isDueBeforeToday()` of class `Flashcard` to +check if the flashcard is due by today. + +If the flashcard is due by today, `reviewCurrentFlashcard(Ui display, Flashcard flashcard)` of class `ReviewCommand` +will be called to review the card. + +First, the `Ui` will display the question of the current card by calling the `getQuestion()` method of +class `Flashcard`, and ask user if user is ready to view the answer. After user enters any keyboard input, the answer of +the current card will be shown by calling the `getAnswer()` method of class `Flashcard`, and `Ui` will ask the user if +he/she has got the card correct. If the user inputs "y" or "yes", then the current `Flashcard` is considered to be +cleared and `updateDueDateAfterCorrectAnswer()` of `Flashcard` will be called to update its `dueDate`. Then Clanki will +let user review the next `Flashcard`. If the user inputs "n", then the card is considered to be not cleared +and `updateDueDateAfterIncorrectAnswer()` will be called to update its `dueDate`. Then Clanki will let user review the +next `Flashcard`. This process will repeat until all the `Flashcards` in the `FlashcardList` are iterated. + +After the whole `FlashcardList` has been iterated through, a message congratulating the user that he/she has completed +the reviewing task will be displayed. + +At this point, the reviewing process is completed and the program is ready to take another command. + +The following sequence diagram show how the review operation work: +![ReviewFlashcard-0.png](umlDiagrams%2FReviewFlashcard-0.png) + +#### Reason for current implementation + +Through using `ReivewCommand` class, which extends `Command` class it increases the level of +abstraction as the code can now perform the various commands on a class level. + +Moreover, `ReviewCommand` only has access to the public methods of `FlashcardList` and `Flashcard`, this reduces +coupling in the program as the `ReviewCommand` will not have access to the inner structure of +`FlashcardList` and `Flashcard`. + +#### Alternative implementation + +- Alternative 1: Have the review command function directly in `FlashcardList` + - Pros: Easy to implement + - Cons: Will require another function in another program to differentiate it from other + commands +- Alternative 2: After entering the `ReviewCommand`, go back to `Clanki.run()` and take further commands for review + process + - Pros: Simplifies code in `ReviewCommand` + - Cons: Will have to pass around a lot of parameters and variables + ## Product scope ### Target user profile diff --git a/docs/umlDiagrams/ReviewFlashcard-0.png b/docs/umlDiagrams/ReviewFlashcard-0.png new file mode 100644 index 0000000000000000000000000000000000000000..29f9bbe48bf95c44680cf2d9055ce2f1366234ca GIT binary patch literal 95284 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 qP!S!RtW%6~2>Ty{z2ox$ literal 0 HcmV?d00001 diff --git a/docs/umlDiagrams/ReviewFlashcard.puml b/docs/umlDiagrams/ReviewFlashcard.puml new file mode 100644 index 0000000000..9c9addfe85 --- /dev/null +++ b/docs/umlDiagrams/ReviewFlashcard.puml @@ -0,0 +1,85 @@ +@startuml +'https://plantuml.com/sequence-diagram + +participant "<> :Clanki" as Main +participant ":Ui" as Ui +participant ":Parser" as Parser +participant ":Review Command" as ReviewCommand +participant ":Flashcard List" as FlashcardList +participant ":Flashcard" as Flashcard + +activate Main +Main -> Ui : User input +activate Ui + +Ui -> Main : userInput : String + +Main -> Parser : parseInput(userInput) +activate Parser + +create ReviewCommand +Parser -> ReviewCommand : ReviewCommand() +activate ReviewCommand + +ReviewCommand --> Parser +deactivate ReviewCommand + +Parser --> Main : command : ReviewCommand +deactivate Parser + +Main -> ReviewCommand : execute() +activate ReviewCommand + +ReviewCommand -> FlashcardList : getFlashCards() +activate FlashcardList + +FlashcardList --> ReviewCommand : fullFlashcardList : ArrayList +activate fullFlashcardList +deactivate FlashcardList + +loop until fullFlashcardList has been fully iterated + ReviewCommand -> Flashcard : isDueBeforeToday() + activate Flashcard + opt ReviewCommand -> Flashcard : isDueBeforeToday() == True + Flashcard -> ReviewCommand : reviewCurrentFlashcard(display, flashcard) + loop while !isCurrentCardPassed + ReviewCommand -> Ui : printlnSeveralStrings("Question for the current flashcard is:", flashcard.getQuestion()) + Ui -> Flashcard : getQuestion + Flashcard --> Ui + Ui --> ReviewCommand + ReviewCommand -> Ui : getUserCommand() + Ui --> ReviewCommand + ReviewCommand -> Ui : printlnSeveralStrings(flashcard.getAnswer(), "Have you got this correct?"); + Ui -> Flashcard : getAnswer() + Flashcard --> Ui + Ui --> ReviewCommand + ReviewCommand -> Ui : getUserCommand() + Ui --> ReviewCommand : answerIfCorrect : String + alt answerIfCorrect.equals("yes") || answerIfCorrect.equals("y") + ReviewCommand -> Ui :printlnSeveralStrings("Great, you got it right!") + Ui --> ReviewCommand + ReviewCommand -> Flashcard : updateDueDateAfterCorrectAnswer() + Flashcard --> ReviewCommand + ReviewCommand -> ReviewCommand : isCurrentCardPassed = true + else answerIfCorrect.equals("n") + ReviewCommand -> Ui : printlnSeveralStrings("No worries, we will try it next time.") + Ui --> ReviewCommand + ReviewCommand -> Flashcard : updateDueDateAfterIncorrectAnswer() + Flashcard --> ReviewCommand + ReviewCommand -> ReviewCommand : isCurrentCardPassed = true + else + ReviewCommand -> Ui : printInvalidInput() + Ui --> ReviewCommand + end + deactivate Flashcard + end +destroy fullFlashcardList +end + +ReviewCommand -> Ui : printlnSeveralStrings("Congrats! You have reviewed all the flashcards due today!") +Ui --> ReviewCommand +deactivate Ui +ReviewCommand -> Main +deactivate ReviewCommand + +@enduml \ No newline at end of file From c78be53b391ea41994d060a738fbd053675f28e4 Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Wed, 29 Mar 2023 21:22:14 +0800 Subject: [PATCH 115/174] Add flashcardlist.txt to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b2e4901bfd..3c4103bf07 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ bin/ /text-ui-test/ACTUAL.TXT text-ui-test/EXPECTED-UNIX.TXT +flashcardList.txt From 51f2f608d3b9489b53224899d1e225a393d6ecc0 Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Wed, 29 Mar 2023 21:50:24 +0800 Subject: [PATCH 116/174] Edit EXPECTED.TXT --- text-ui-test/EXPECTED.TXT | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 552ecc9fb0..db8dab5b8e 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -9,16 +9,16 @@ Found 2 cards with the query "q1": [1] Q: Q1 A: A1 -D: 2023-03-28 +D: 2023-03-29 [2] Q: Q1 A: A1 -D: 2023-03-28 +D: 2023-03-29 Which flashcard do you want to update? Understood. The card has been updated to Q: Q2 A: A1 -D: 2023-03-28 +D: 2023-03-29 There are 2 cards available for review today. --- Q: Q1 (ENTER to view answer)A: A1 From 5279276c71c4d8008fdf3194f0ade327a0c16102 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Wed, 29 Mar 2023 22:32:59 +0800 Subject: [PATCH 117/174] Changed expected --- text-ui-test/EXPECTED.TXT | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index a2d073415f..7e5a6608e7 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,3 +1,4 @@ +Some flashcards are formatted incorrectly, they will be deleted. Welcome to Clanki! Time to start studying! You have added the following card: Q: Q1 @@ -19,20 +20,17 @@ Understood. The card has been updated to Q: Q2 A: A1 D: 2023-03-29 -Let's see the next flashcard! -Question for the current flashcard is: -Q1 -Are you ready to view the answer? -A1 -Have you got this correct? -Great, you got it right! -Let's see the next flashcard! -Question for the current flashcard is: -Q2 -Are you ready to view the answer? -A1 -Have you got this correct? -No worries, we will try it next time. +There are 2 cards available for review today. +--- +Q: Q1 (ENTER to view answer)A: A1 +Did you get it right? (y/n) Great, you got it right! +--- +Q: Q2 (ENTER to view answer)A: A1 +Did you get it right? (y/n) No worries, we will try again later today. +--- +Q: Q2 (ENTER to view answer)A: A1 +Did you get it right? (y/n) Great, you got it right! +--- Congrats! You have reviewed all the flashcards due today! The input is in an incorrect format. Bye. Don't forget to come back later to study! From 06ed2106b1e006424b5cde5208a315d7a3dc78a9 Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Wed, 29 Mar 2023 22:35:41 +0800 Subject: [PATCH 118/174] Edit DeveloperGuide to fit to latest version of reviewflashcard --- docs/DeveloperGuide.md | 59 ++++++++++--------- docs/umlDiagrams/ReviewFlashcard-0.png | Bin 95284 -> 0 bytes docs/umlDiagrams/ReviewFlashcard-1.png | Bin 0 -> 82031 bytes docs/umlDiagrams/ReviewFlashcard.puml | 75 ++++++++++++++----------- 4 files changed, 75 insertions(+), 59 deletions(-) delete mode 100644 docs/umlDiagrams/ReviewFlashcard-0.png create mode 100644 docs/umlDiagrams/ReviewFlashcard-1.png diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index d2cbfe784c..a574a625bd 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -51,13 +51,13 @@ coupling in the program as the `AddCommand` will not have access to the inner st #### Alternative implementation - Alternative 1: Have the add command function directly in `FlashcardList` - - Pros: Easy to implement - - Cons: Will require another function in another program to differentiate it from other - commands + - Pros: Easy to implement + - Cons: Will require another function in another program to differentiate it from other + commands - Alternative 2: Have the constructor of `Flashcard` include adding the card to list of flashcards - - Pros: Simplifies code - - Cons: Will cause trouble when temporary flashcard (that need not be stored) are - created + - Pros: Simplifies code + - Cons: Will cause trouble when temporary flashcard (that need not be stored) are + created ### Delete Flashcard Feature @@ -98,9 +98,9 @@ makes the deletion process simple even if the user does not remember the index o #### Alternative implementation - Alternative 1: Delete flashcard by index from the start - - Pros: Easy to implement and simplifies code - - Cons: Cumbersome to delete if user forgets the flashcard's index and has to search - through the whole list of flashcards. + - Pros: Easy to implement and simplifies code + - Cons: Cumbersome to delete if user forgets the flashcard's index and has to search + through the whole list of flashcards. ### Update Flashcard Feature @@ -140,20 +140,22 @@ update flashcard feature alone as most of the methods and attributes are within - Alternative 1: Instead of creating a new arrayList `matchingFlashcards` that store flashcards containing the `query` and then printing the list of flashcards, directly print the flashcards when there is a match with the query` - - Pros: Easier to implement - - Cons: Harder to track the total number of flashcards that has `query` and will need to have another way to track - the index of the matching flashcards. it will also be more confusing as the index of the user input is not - aligned with the index of the arrayList that contains all the flashcards + - Pros: Easier to implement + - Cons: Harder to track the total number of flashcards that has `query` and will need to have another way to track + the index of the matching flashcards. it will also be more confusing as the index of the user input is not + aligned with the index of the arrayList that contains all the flashcards ### Parser #### Current implementation -The parser mostly relies on the `ParsedInput` class, which can parse any user provided string input in the format of Windows command prompt commands (`command body /opt-key opt-value`). +The parser mostly relies on the `ParsedInput` class, which can parse any user provided string input in the format of +Windows command prompt commands (`command body /opt-key opt-value`). ##### `ParsedInput` -Initiated with a string `input`, it splits the input to sections that are of use. From there it splits each section further to a "title" (denoted with `=` below) and a "body" (denoted with `-` below) part. +Initiated with a string `input`, it splits the input to sections that are of use. From there it splits each section +further to a "title" (denoted with `=` below) and a "body" (denoted with `-` below) part. ``` command blah blah /opt1 hello /opt2 world blah bleh @@ -161,25 +163,32 @@ command blah blah /opt1 hello /opt2 world blah bleh |=====| |-------| |==| |---| |==| |-------------| ``` -Then these small subparts are grouped together to a format where the command part of the command, the body part and the options can be retrieved programmatically. +Then these small subparts are grouped together to a format where the command part of the command, the body part and the +options can be retrieved programmatically. -The command and body can be read with `getCommand()` and `getBody()` respectively. `getCommand()` is guaranteed to be non-null. +The command and body can be read with `getCommand()` and `getBody()` respectively. `getCommand()` is guaranteed to be +non-null. -The options can be read with `getOptionByName(optionKeyName)`. The reason we don't have specific `getDate` or `getQuestion` command is because we don't know what the user will input and what options we will require for each command. So depending on the command, we retrieve the option accordingly with e.g. +The options can be read with `getOptionByName(optionKeyName)`. The reason we don't have specific `getDate` +or `getQuestion` command is because we don't know what the user will input and what options we will require for each +command. So depending on the command, we retrieve the option accordingly with e.g. ```java "command blah blah /opt1 hello /opt2 world blah bleh" -getOptionByName("opt2") // -> "world blah bleh" -getOptionByName("opt3") // -> null + getOptionByName("opt2") // -> "world blah bleh" + getOptionByName("opt3") // -> null ``` ##### `Parser` -This is now just a matter of wrapping `ParsedInput` with suitable error handling and logic such that each command will be used to initiated a corresponding command class (e.g. `AddCommand`), while errors are handled gracefully. +This is now just a matter of wrapping `ParsedInput` with suitable error handling and logic such that each command will +be used to initiated a corresponding command class (e.g. `AddCommand`), while errors are handled gracefully. #### Reason for current implementation -We need an intuitive, safe and declarative way to parse the user input. Alternative implementations that can only parse specific commands with specific options are more imperative, less readable, less maintainable and overall just a pain to handle. That's why the two classes are here. +We need an intuitive, safe and declarative way to parse the user input. Alternative implementations that can only parse +specific commands with specific options are more imperative, less readable, less maintainable and overall just a pain to +handle. That's why the two classes are here. #### Alternative implementation @@ -214,7 +223,7 @@ will be called to review the card. First, the `Ui` will display the question of the current card by calling the `getQuestion()` method of class `Flashcard`, and ask user if user is ready to view the answer. After user enters any keyboard input, the answer of the current card will be shown by calling the `getAnswer()` method of class `Flashcard`, and `Ui` will ask the user if -he/she has got the card correct. If the user inputs "y" or "yes", then the current `Flashcard` is considered to be +he/she has got the card correct. If the user inputs "y", then the current `Flashcard` is considered to be cleared and `updateDueDateAfterCorrectAnswer()` of `Flashcard` will be called to update its `dueDate`. Then Clanki will let user review the next `Flashcard`. If the user inputs "n", then the card is considered to be not cleared and `updateDueDateAfterIncorrectAnswer()` will be called to update its `dueDate`. Then Clanki will let user review the @@ -226,7 +235,7 @@ the reviewing task will be displayed. At this point, the reviewing process is completed and the program is ready to take another command. The following sequence diagram show how the review operation work: -![ReviewFlashcard-0.png](umlDiagrams%2FReviewFlashcard-0.png) +![ReviewFlashcard-0.png](umlDiagrams%2FReviewFlashcard-1.png) #### Reason for current implementation @@ -261,7 +270,7 @@ coupling in the program as the `ReviewCommand` will not have access to the inner ## User Stories | Version | As a ... | I want to ... | So that I can ... | -| ------- | -------- | ------------------------- | ----------------------------------------------------------- | +|---------|----------|---------------------------|-------------------------------------------------------------| | v1.0 | new user | see usage instructions | refer to them when I forget how to use the application | | v2.0 | user | find a to-do item by name | locate a to-do without having to go through the entire list | diff --git a/docs/umlDiagrams/ReviewFlashcard-0.png b/docs/umlDiagrams/ReviewFlashcard-0.png deleted file mode 100644 index 29f9bbe48bf95c44680cf2d9055ce2f1366234ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95284 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 qP!S!RtW%6~2>Ty{z2ox$ diff --git a/docs/umlDiagrams/ReviewFlashcard-1.png b/docs/umlDiagrams/ReviewFlashcard-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9d7d65d4048c3625285045998e43fc943ebdb027 GIT binary patch literal 82031 zcmZ^LcOcd6|97cVIA%DA?7bx;BAaAKW=7eRJu*8STc~Jg*xA`5dy^<+gzOTsw=$mh zQFp)letysM$M<`ej`O+Bb-l;y{d&Ew6RxSQM2LSD|Jbo(gjba1wT~S;p$Gp%4_c z%2|CeR-O;_%L~i>uO$516dmhgt5O%C)Y089dT`8oZ|B+S^r}~Lu!t(PgqmT)k8r^( zqL`RZ7(DBF1sCt!)hY#2bI}=x+|MNxC4q5|SHdz*25nV&24QUd{D~L|n=e-rsy0bZ zH=YR5*zF_RW~Y1Fn_2YEclHFGbE`AaiHk4KlUmn*DJj|6i6QS{xycnG@kTAg^x2Da zlxgrl<3X8CVMLdzIxUJ?>ei_zXDY_KB{Ocw;cAqKPB4|e#<+Ty;3Tl?gb+2HS!!*t zxpW~SvM`8T=dI#}_)3|OAGz0QA3sG38p)(}Q(x+NEH7{HjA5o@Tm9LmR2xKp`lzmN z9z*L--QXXauTmF3a9{XANMX2xo+ggUZJ-SHHBlqFNuBym^~Cu({3lNoxh?lEWuAY0 z!{XSQmav28)T3|qRsPL1OTOk@Om`g6tfv$yC?((Izs@qK$h;>-6KFZ~Li=WdJb`ma z1nb>b^Xk9epQOM^rDtr=vNIEECEI$z5S4}#KW@c*t8BLP3E$e@c1o-Kw1&b8*BEmk zbHH}O;nmaHcn;G$E~-RBE>Z?wE&c9Kf)=A7$;K@?eD^m}@ zb=CO5kF&q>X1`U+0@+o6`}PMS#u0g14)5O^PN_=YbYm^n3B|9Lh^H*LYhFv~9X(%u z@(NOaX5Z>UtctlswR{#`ZPjzSS|$GTS2?;U7a!&i@7OK1m*yBL6~v-idyk1G?RecJ z^8GL>dzk-O-9>$AqPfc7m>dl8$StAnFJgc z^`mloL%$?_HHQiF^ykTz#60eW&<0+~^c9=n$!i3Yt`SpPYx#}G^lrAslV9sdn%MfW ze|BZ76y3OKg&IRB7z{qWcrk;f0pBn3PBfSV(ga@$Ek* zE>{cZQN@-kyf}93-mxq4GCE!+3olRW>kQVG*ZC}SZohiy`tizAxbPWa#goWDrG`Kz z{0Jrzg_aP~`!y{n?(0!CiVY$75h;O5X2)&0^hu8^#7&tsWa36JadmFLUzoP|BE+E8 zG1j!~H_%kPHEf?>x|Q(k(BJyW>BZfp)d2{+O9Ep4MN8x)YW$d4{&)sdq(Rg)< zg2d_T*LTX2>J1IaqK;#IUw&jyHHWVdKfUd6hK`QWE}O?Jzi@e&@VXm5!KE{#q?~kw zj2ImObMv2f<(t&a2b+C<87ZsPP?PH*LW7Ff7p7OIC#Rer;ZNuxF*u4!rrI1Xn^KEI zuF|(oWruWk7ZAT%eERe~{e-TB=TiTjY?t0=LaSO@T2seKWtD?TQK;1h!RtTqszT0@ zFS|Y)D!dir@m%}r=eF3`M^nj<)@JmO8>_3I{HZt2FMcl6gZDh;xE$kBRO7Q9Y2-^k zQl|T@ZEU=5zUw)Ow%^KT|2p$o56$Y2mR3Kmn=YPWeQK8T&%11nX6&DxwG1S-?Ue3c zd0;)Wx3|~ATN{&IT7Tj+QN(F^Ttat`9|kI5l(&)T42 z2c5fduA))Oecd=YrwkcjS7=M>wUZEMgiGqP;pgxMr+Ev=ZP4(Q$1^MZn|&dy!!Ue$K}uQ{(-*$(dQV62{B5cF_!yVIAsnjrjKtGA}g&&DRoLrrVA z!ueNo_^19z*YA7=MHcZ^2u`DkhM=}ex4G9QZZ7jxch}XKQ>{|$zS*FkCRV!tc=o*f z*I->IA;J9em%02K->1oVV@b51#oa^){2DoAn!>Z~PBQ1%{b}DsBf4Zi*r%!#Ex)la zmv-ae`I%_TN9>15CYM~WbTK5}Hm6sADuf*NetM)|Gy*F#gozqBPxpQdE-NbRuaV_G zwUd|Id^a&to|yEyJ1+CJRSKLn7ujv3yxSR_RO$)?xSJ)GMS07YfPD$2`ii>ZIkJ1U^?3%Ghc%WLt#!(i_1zYa| zH)3qXK4kllYF{)o^ZqF}$#DYtLdx&W3|A@Qrl){^mtV|%HCa5OPmPPMJ+Vc+WMiTh2opn_{I-WT+?E4_xZqodHodVJq;NRcao-DUOo;*_}04mMVzkQ zT!Uy7)j2hBsv0^mlqd=AAu~<1${>!#5!AXMP#IqY!L?w>noJ>Nd^*bkDHg%U*DYhLJ?DUeP+dnQUrjIQgcU_K9Or%QC-f2To`b54Zl zE)~^Rht;Y0gnsgGcIf%Ey9!h)8D92iu^Bosk_ZLN{&49J4xL}MH(OdEN9m+!Lz)D6 zG{u~Q%=wKgXs=n{x|N}M?(Ac}8#y%>d7Qp=B*vnjG_g@+e|qC}Lw-6LaUCb!fI(+r zXH^I)2&1vqjT-OuiH1A#rJBd9_W}_n)lY9)S_YLPa!E~t3SiS6uXZE72*#Ki8Zv0l zy2 zi|RdodMW`P64tKg<;^SPF2&LqmWo_&Qqwe#g_Rr|Bt~_*DI7EVTJt3vc@3O_ymat9 z^ZopjxWQhND=AUue);8Gzx{K=nN-_%kJnvI>!|)b(&i~hb49P5IVn1O6(Wm{E=Mc6 zZY7z&&f#8uTf#O1|MWSGOxJsZlrD30o{Ah@g;mWDh>4A?oHsIr6eO;o;rVW{az4xv!0(R13Ah4T+_PEs^!)!nw~LQ z6vvl?3WuSeR~}j6_9t8r99S@vLFSUH6id%uGRZEruc}wnhv@fya-t#~KvgWG0Hk?x=ur zvXlrhUbyTje0>yhZ!&aOO!H>X(A{IL6HB$^9_a>ZT5nNdE|YhBXrnLhZyd%_U-r*- zx)+imOCgV&|JIx(Df9H+*%gPB3=3!d9LdS8^;Q0&LrKNeY?$y7(KB}|z$V)<8 z$A@6;?M=6T`0!2>p3_skJtlgY`)7ske0qHw3KoOYjtjFs!`Mm9H&TAawY#tBYegoz z(A&prPYn%Stfx4Co=y&br1Zz>0JQ$ot$X1=2j~PX%r_hZVXMO8bgT47Kx^)*ko4oC`%W#-*iw z$-zZNMP3d0#O-E~w3U{oOZ- zSXm7i0_jqo1Hzu+t<+c!{|2e?cv2-$HQ}svmY!f5#^DbTR`4qd2!>gfJF^Sp1!kVG#os? zv5M07?)4WICL=KM;!{=jiVx<;OJ@P-n0CIWtiFh)hggL}XEkr5>AusPqVn)_d$z6< zHw_*-i5H~lM5FXuS%xKO5f~v#R#w_oVPe8`RU*6j7Z!$QtSgKtj%^ksl1Eav1o7DC zcm5L>OH-$Jl-GA?l+>%-L+J~51FTG&N9NGDlb_-ZGBo4t#tBa_1cH7SR=aRG4V_R(;2-y}d0g&X(}-)rp~hMno&dKt}?= zm&!Z9;d@7BYVZm5#0FAVNZwnw!H8_j62M->Awy_|XCbLQfC9 z*hq$kX>?Q+dHIgi-k$&N;1%76H*e+3D=35?VQ)n*FALR9%SER&`oGgaRe1-|X-f?; zc{&LcADuX-qkpNi)4Yy_rlzu&R~%hNs#45orTbOa{G5oDm9VDJ7`vE)4GiV%338IZ zLk!VD{c$qc_O_&ar3(w>9%|L)b-~%K!^~nW{aU9GK_~8}Y%I@mk@pPk8AgoqNk!!k_f(S+Dx`Soktai8W;lZ;eJI3m z%?7P4ANYx>fss@;Ox_Ihm7qP2s|v}Q{6PB(Qir)=#DP_eMHcq~ZdB}x3!4&&iW7tMvWpPTmPT95qq ze~wn)y=H7Ur@ZpO=imF<{tm~q+N-USUGy3}aENpBj3X0^$&xN;qHf9TbwwGML ze-OU&rNVyj4IUm|Bip#&_Gn8a<>=^WUS6J7-jzpep37qj=G#l7)*oMu7T#)u{|pTe zOZo1Q#QSW{1309&p?y^5^B)8t1FSUMEuMt+3mRG(SC!M^k z{_m)G@CNbv^=sK4jIXn^b5jW6gNuGYFI;#7i)CbF^x0Y{EGco*D|DKa)lZu7!>AA< z35bYVr+U+`64Q#^Yy2^of2(J3aJ!8@K*z}J<10y9bUMSo!ijv&aN@bB<5|%=w3L+F zQ!PjhjgJTWzs4)w?Kft7^h*N{59U5)$dU2#@VvSl@apkn5wrSZ`V*O2sTYhm-r?xw z>L1Tr7%6vjaNsFf?tCUh(g5AG5vS)v`qd{FXt3dl+jA9;oq>_Dp`|7LR$KHVHnlT! z#|>({ON)!wS0qC1xE&)MQOibHUPpT4N zu471A(K|0vQ>V*rk7z!9`t);^r=y;pUZ%Oa`iIr&w#CK8$cTswBb-VPA3frJ<9w79 zMa;IyTwDwpW~#S?iJKewtJbC`<;xf2Rq>;LR!JK+FmrNRfx*8yJswxSKp_%Ec=p0< ze~#W2DXs>krGICL_9BlazVyl44h{@~rS^j&!os5k=0UUP3r{*0$NwuwA}~A!=1n0% z*@Tkb8v+6XnaL^YFU8MEcyzvh|KrPBR}G5MDo@Ju(o8O$8e)u?xRXa^LAf1=HANy` z`ug?j&qZ$A^=J1(o47Mtc}~(>M~w1wjvl|WZhFz}k+P|j?0bn$vbdahf6B&n5lv|b z%-3qqqiIC>SXmWZlL0t!cOCJH5H*%6nN#Nce3m8)MUYrMe+p`B+`zVx{;H7jcled4s{!-o%D zzP6KgiCbA&B}6VObfDTzk27FmA08D!@@EDU>)$^HA6BkTwM4ROykdBikl?+wFx1#6 zo80*E@*yoL>FUCe&{ujm0En?1y?lJs4saG38i|TZN=W-+T^M+OZvGh5ul8Ji)s1uh z?%lgx3BpwYhqan1IxpAdEH_iMEgfvAsY`~E zWq)6&2vG)~QK#;1FWt}zQUUz7yvO>lRWgiOUwzCY!^Xm5vGnDwl$6xC|F1=Jl?!{^Zp5c zIj|CZd=PmQl>$OSk@xTC>E=8xFE6hgFDbcjA;simBqe`Yaj}HcgtWSPwC2>*)XiJB z9zA%_Q{&^gL)*&v0*PUUcI!0L`D|upMt@;2pMH&MgwoVEc_`^2mTOwW95tS=x6x3S zXfN1kT3DpXCQBzniGT7$PhP(H#YNXIqod}AZ87wEwKYrxNL3Y;#+0BSIXI~w19|If zYXxF%v)!-`JHw=(j&neF*Z~s=lRKS+2M@~6&yO*wy&fm{6K4MP$!pC-W0mg6-f&+n zt)4;CfV`oE|E$6q9f{(VJ$3yw5_1)C>Qv)a)cyO(ZZE~%4NL9f%Off(#Nyi8+PH;z zR+dJq^cP_7yuB-(s3}zwF5pRJlu5&UZb{AKG}#zD@7orAF4;2y#bLZifye5*)Dh3^ z_iKv+Rl2R$@tew&l(Ry4{oJs1c>d_o`eONbBaU@fg8Rxu14NbA=f#n7N*?`tje7Ye zYA?h{YxOG;vLE2oJP!~2Hhw{{>6Lop^)0|nclGqt+eYS$)cBNpYh`(> zE6m#O?W|^HWvRq-MpFx&8k_s^134lW{^ZG%pZuT8Zqq0}efI3FO%GGaK(;RT{Vo3^ zh7uF2B3Fre`uus-ol$WkBcq1Qj+fge>v_0lg|pjV-#s!azvJ%gOqv&8gjmx%233IN z2wx~fpq@T_I5jhK$|&2ku6D&sNr8lxmWMB!{JfCR;F}virl;4}zFqC%;{0!7*&3Lc znI*-?$3J+W1vAQUx#Qvf_IM=soG=y&JzzeR>-=P;cBnnWBvuPk*G z^=4hm08TyZ>eW*-qMl2}`bo0M0O(%NaE0str@8@h0HAzlyw-1`9u1`l$vT*C3T-<& zGEz>8nR$Aq>p6hJy9axB&CDhsFUG3xGV36b$foNE1fruH^)xp2-p^m#%K{|MD^-b`@YNvD=$x}hbZ=b`sC{3QUI|R&L}e|D=Qlq7}#gM z@ZrV9V#o1X=;z6nB_4CVtPMDYPhY(7U73*CG}LLG$v3T29K3Sn3Wx9Jd_Pp$9(TZA zSg;2%7jlmBtX?m+qpclvvkx3fA8xUsaP#JIrh zctYUW4^IVeb;NOgwp;jI2uZlUv9a*wtx&aQLA}S~@O|2gE{nsZyoM#xFZ1gT&c@eN zS66y26X6Moic)%C5Ec%;PfbMy(+MXzzIkl1RhO)1ds2Q=D6w3R2q4p&E%+r-jjUH6 zM^OploRFr3I)Or=KuFkFUnk=!aGq`j`1EtNjXp0oS95nc;P6+9LS(^WETh~+oVvO? zN9TtR*y`^*g-K3k+`?r&I5?oAqic+fJIaeozw^Qti9s{EE{{pl&^(9U$->Uw)C56& zf;b5Ab7zM`*LuOs(A?bINs8kJ^u!un=~qyGP9iS|36UKT-T-WZk3>!ewzRb9FANob zhrWG*S94#KgG0Gnf;8&LSmM3pG$yE!~3WXvFXiN#oTNW8H#aR_=#Eg5kEnWt*W8 zLK-tPAYXkX4U&L>R@^PKre+_o0L=v(l2w#LCOkupief&eCL6Fklo0#TO5wFw<%a%~ zNCI5kr$W}z+LmZ1DT@MJB*sP-zb%UT#3MO#pep-DN9zJiM<1A>=M@-Jm&&2#Lf}M4 zN4HyBT88tiwBDz|_6s|^I|@hRSG4jl&i(uM&25FOI`!-P_uC&Zm){vpc=!;f!SJn1 z`Y_I<({~-*C)Xg__V@Rp5hc43(_QMeMFVo&T3?p{6pxCGjC_8<_6$9JjEGUGU9fma zNXR>`Q-o(REnUw=H4-k&K{^!3>6^jl(1515Ij<{2eVTx(!1fcH7fmyf9PcO&gur;B zm@|$#-s1a@AC>B;*gZ~0QbA#S;AD!;I;)SbcpWm+eq*nju_cJ;v%+=_fe7HL8>b-d z9vnh6k)1gc7!<_J#H4-gn%1jVucQJF_JWa=V>LdMk#FC=<-VQ^6@cv|G7^i_-$EX&ufmDftPTGvyb6`5o!Oq$s3?N2hig-S zDyLG;kbGE)r(9m7L_K}=${*T%S7St(G|9PhqnTRF%*?5^e!uYROj8LjPr@{Q=67!0 zK<0+%Oa{b07rb?fyg>2(SyTVr^tW$!VWv@d626Pa{udnL8JNK|cUspG+D?l?&?#Y? zZfRqk<6`3CDXC|<49gr0AgJI3%nG(hJlk;apO*Hk}gZ_i9s zl7n4%7EOy69u`Kfp{XlKeyX6^e)lN_-krQ8^PGaa~C zy2@>9`Et^2+5St5V~gys*kqN5k`OAt|7CBV*v?*4SVKzcSMw)%Tuz!lPmUwv)sz5X zbJy%o|KmJonB?&=5V7W|Eq26MFk0B5VT6D0b=BFq&?b*9I5-%F@iR{zA4{n8TAhNy zRQ|B1VhUQd-@)F+^E*D@KfLVg({U!0%|83*t%h*_Eb^HlgGmLr}^5G<{Pb0!c(K71aryl^nkXDi*XU z<~Q=n@v_K1^%7~$`rjMLXo}P^8U`p*etRUOGn|Zl;LQ!6^_i}{J>RdvrGT$5`)u)? zhoW)s);Te!2`CBrzhFWqUmDrI$`JsqT}LMls*5I>mygdfMEqwEL%ZhY=GsGpgIU?w zpq&T`2?>dd4}bc!4(Y{l`RT|Gz6VC zDzSO+;swF@S%CTSd600iB065XYu}(aUq0MhCuLUr`t4gX3kL^oKh#oD`vD#=BNden zY!d?lL9Xw5zRCW_fP-s&?_vMg)L-DfYbwhmxJ)B#M}Dd3dY)lsoyEH|xeBFqd*Aq> z2_=Z!HiSMRz@^h9kQBbPwM8`vlU~5jId)uAm_uUDNnnRI8EV1o?(S|F^=^@s%uG)+ zyV+S=Lq)0aY?V=t*N#8{@7(pJ`eiK87I&wb4Hm^y$f>+sCL6yEe@oApZu{sq*W1-c zPR|@!<3nt(ms#Nk^waSZArbiLW@yY&j>P688Y^F`KGV)ne~H1IjJx1C<_ql( z$D$#}*^@xPcmhUR$-8&&7_HQ%jgwhU$!2zYC=rkTr!0LjW}YSapkmT!U1d zmzKumcWyvXBl?@X%+N4Z3JMC!X54Cx!XqZ8T*D}%wRyS+%GwV0m4d4?zAssIsh0c* z>+R2>78G2CPn`yWUVr|$z=aE^c0Ye+IT7?zOY2EVj;^MPYG>aVKjbYv0k5WP`yfs* zccZ_*KQu}hN$&v2wz091mzUSn)YR7QeJSDjb8FGw(J@9=e*z|YI04G!n?OKiI$Bx= zKit^ZIDX>P=g*&$IE93YJ3CdA_W?|TFhqVko432E=>!UQoy?9)S0fV_Wn*U-Q3rb= zuhcHRV}_=p8b~>(4+E@FjgHwO1oBBFd4gey4JnTkj5xp~$PNNXYGeq$#HcL|8ho{{ zVl-{O*B}lv(}$*h^6X+iP^n66Ka~X>HULk@u5n=AMszvOw9+lr$J6I>-2@mS%$=v2 z=U%_gQ&T%E^{X0>=eD)M4?cdpZKSMJCsX|ZW)2yf-CxVr>d!@#MtwjA=;V<)umYmo!%eo;{gH=95%flw9n-|Hh||1dms5hTwnt<+W|ibw8ceyv@#wZ_EU zC%xR<%9JndnbfCv9G1TJQ8Fv-gC6jua!ns;VlAM?XntbZihLE5)*k${@1Zb{ z%8m=Yft%%9!Yjb~jjmcPxky_7iIW1=K&j6*zc7u+o;V*LHTCDu5fn5*K^pGMV@RxH z1RZ+UXW7%0hLE_pu#hZ4cE7LBfsCy9s|BJu&tp+s;L_8SjPG}ns~l_R$}J=FZ3sX_ zfy5R%->uS4d;V}cAW=!)SXm=rW3bNOWxnq%_*(!$NxHD$42Q~Iu1h*aSSxEaUdtTY zviYO@=dVx>oeY7~#2(iiqgAUs&OsTdahp3UBj>ra@#OV?o5adnn1}Iq7Zw~Q(FC)7 zMV9ZUrl*6~($ZKmX)Lt7W~Lzpfds)|U`{s^6c*mx+g(@bKUAjpLiDBjF17^-v;ZLD z(7jCSI@_HL{U9wZjYC%>6!&A?$yq84%; z)9yaij2CtKIR|+J)IVbC^CyD=?)!>kbnxE2d&jyj{jdy?O~&Ii-MVP~fu*7{no7hW zPS$;&{LDZ`4Dw-od>0rmG;t#XCmYt^m~@fwtc22k0WOzQN9erWsr`gYyQlg26N%2{ z7T7g~-0oJvP3eALJ|1mc>l;-036!J)Mdj};k(~O~e!s3jKtIU3_8pnr2*w)RXW*Z~ zARty5=+B;IesSlL{~p1~jmBVdg4Amnd_Zl0b}7&SMV8$GF?Y#rma5Nbq^w52+WiOm z0&na`MJKFG02QJSXEO$v3c$~Krge1JxlELlTY}0H0kC86$mpbeISh3x5%_u-AtBd; zP5yN-kGxLbH!ilygEPkOPdA#hs=ernih*P+5NyB+*mHjAq(*J~9yJcOp;Q32>Z4U7 zp&^Q%bG>=?gG=)!zP?1Ij^lV`>^!o3gKsvAN)~8oeeolm8uIHzbgH=n<_UO6y12kR zk!PgQVuX~Zv^g31Ty%MU&@pyqCJ@o60!1cEb2MHV8OQdgzm-Ub$0jBQ0KGTq%gCsU zBM;d7wfm2OML=XuuZ*C+`1zdxL%|KkTK<*BjKqWSU?k^ss~WnA_eSL@7mqcI+^HwU zo}!04ZHHrTKbfu$fLKDImOuq~-UkHfa}tI~-oC8$mO#XNGoM8NpTOh%5cY9%b`}xoE-S@&+uh;QXZT9Y z{NnPVQf@jzh3tQTmOP<6Nn!)&5q+6jP3`SAz=!dh*7lXvzkhNq*l4z~acaVK-US!+ z^-8ifA3s06&b54eA}NIXHJeM!FA@@J{Ho|#fRRzkJYlJ-QpxK88qAH>DeQvAWwM zW8K|0?pGWf9zq&#lC^~rhuT_0RVJgO%h24PKq`VRA08In`-#56a(`d0x7VKtAAj%* z{<#}fkJB{?DI^>1vEB|(E*4IG21cyp#AsoTZf$K1!exvPeESy5%bKG>R{^%x)6ET} zlF)YaQ{YH^1ppE4r#Kgq6Z>)RLueaVxv;EVru-r8R z8{4Uw!79(?i3zjGi{1c%7g-R8*D0Y7cZEf*i z+w|Q7Np`P1mbb_>uBFTU7x11x&&4)VREDQJLVnI~t~osW(0csec=u}!CRB-5oZNTe zb5^$6X(HvD1Z^>TH8^LOO#gt{2VyXAp3teNsKBMJpH&OPYJyliEI%dSO_rkZXB|w= zR5k96e?dAHZL<)imaFgld$C6^lKuArk6tq?{Wr2@!lPENoVAzYdFFgmCIv#8ie z1c+~llPC2J3_uR+2gL}|Mn_sU8!u{1e6pDI&oYV%q-khqjEqLG(W$8gBXqI#NAJw~ zVE{)!x$?8Kx4nBe7l?0B5GI=|ix{v_8;EmPyL$CK^torxo*CG87g=7l+zcUV{sXF! zNb(PeQwRjuiPG<`&ydK_5_|E1{qSY-3Fkj`sRgHhH!d#j0khIsYUh7`7Rg!p39&s^;bQ;z+FhO~|=m z)I0xYR3f?fpF;?v{kslqw7Hz?2wbcqzc&h&_CNwnPpjgp38$FD(zP=7K1JH3k9A+S3wEH*0WFmI9%hQfM~_lX zI=i|Q5R5T=pkM$|a2_~8cf{@a!F+xTa8C3CUHJ4V)mKnn(T~ToGPra+{ow6@p7R_$ zv_qdbMF8?^sCNI%_~F4e$bWcuyOJN5C}|{0QDlQSGyCoR6IsSBR%T|oVkH6%$xxf) z&!f%?&%+w#@l_!5F>!?Af{=pkoj4#Zm>I6b1LtmSW%W8E!^qI^W+C8b&{y3&JWDaq0pvu$mWrfTePnHw_Rfknd9EQ%=!}NRt z2gmtySkaePYy-ffd5_bNt^jkn;91jonLD~ZWh}T1= zTWwKNRs!fAKhPU`QV@z#UMmxz-`!LK;j18qj9uLUMtfj61+L145WsMWck*X*IN4K4 zJ-tC76|lzMuP2hQ0UgoF;{;;_G-Ek7DJi;{3s#*^0ZHE!cxu})IwHC5>e(b+v-Q|H-1N@26Eo)X=pgo9q5mp3xmwFutIky z)YnUIG7Xb1DJW}bEDsg4@3FzC8QG51yBaKl5XAuzeFr&-ohEZ}hrcf@Tyh+{1WE;Y zG%&69j~+fux;fnz6MF9EDh%Z5MoCV5D==^u)WCGZXj*Kgwp}i*IB5Y<;p*lF!;Ad8 z2nudYa-gvNfHVnEa^2;QrWG$AJRsdGO-f3F+BN^a6n;M@BEqgWExZ8NR9-@S8yEFC zRf(8~?xM@d`^-Ugz+%E=)~%*93*mXeQ1a^4Cw!7l6Za~=VdWh-VoS_Xae&YV26585 z9jtK&8HxUeMHYBz_>pkrL7febK-|S!7EAj&KNE9iLYd2ggvf;4*xUrZFk5@G6Z0A| zRu@3unq{J6XH4q9vyzNPA0Lo?)qPe421%G^H$mNk8T0h%(=s2D;$exUZ|m%9=#)3Y)wMH_>R)p_Q&|JpltP(;zK=4Kpo19>Abkh(3A@{mZp z=_{&ttlJm4bcr?+G|LtBO&&bd=emFZ{TYy9LAO%?{wR+0)h|YQ;@C<=(@60ux#+DRM!|tov3qdDV5B7_ah^#e0R^Yed+4D4f{tU;-LAl7kCpUX6EAJ zVnO1ka!Rk1r4OTK|@aW}BgjGVx-Ct3_}~04XvLCjq0$B&vS?$b|J3_b5NoZlVF! z04=Mis0czxPI3yAP1x71m6iWrqa~(r$+xw(&bU!56Le}=`2E;STOTL@zvgrDVW0&4 znlbe;7j%YrASEySu0%RKn!8)ZNs*CP!P>*a!&AF6g#>$sGi!~a-FFD*G!`#n zB|Mt#Fe#}fN{x<<)q$K?}Qa8f!_@s z3#7i{eB3AbS3`!Ko;{8QnwH3~{q(Y7Y|!qHM8kALeGnlhz{$~)u43u$e*k^1&<<#c zDR*7;e-{G$G{Ehs$jJB5Ne_Td)R&)`YzqCDcv)!%h&c!|pVg^g&0R=)y*I`HS_s#` zN(6b>4sztN>_IrG%uJ4CLv3wsL&JnvXtk^GYY)Kb>1$_~t*IZ3MG}8}8CVsI?ey^k z5IRarg^jy_TCZBJt#bWNl>P17w}wM;x7mrMr7_^H0S1R)FaXcGKtuyVibMv=VS9@9 zH(khUDC@7zTjHajvSG>)2RE7U+FxY$`?Vxu> zg@t{7>zWZ1bVB9D%a_n!`Aw?Bd;t|;*}2@8!uF^*qBVBo_50!Bkn7z?Xymu8ONf&* z3t%EC7dXU@C1Ygp{TO3V{)<%+u|;q;VQfb*O&X|r;4QWnM+R@SKtIwda+}jWaRQ(W z9m6CJ#*~`hw0w=UO-_M;sUny{q&07G(rX4aWD(ZruAgRc4TyuTyjrhbwe#8*g z=J@B>!OI3%;OF)-)^QdPa0vPYI}3~3(wB=sqmGTy*=yl&%3DEe{{;Da$gHv80#P^h}<5=^-E7n1AuR{Wpd=; zbAc@kqhq*%JPB+bNh-jpnQz~CO>2$4?%e|54W$@j2k=eXFnz#Y;cr7g=FIFY+#m@Q z&%6k@0Wv7r1q!!?#nCuN`W@{& zUXqgt#3+~>8iSEj6uQTut}!7P0-^JP@>*L{Q?nvX$9e9^rj)gW;^4&At?*-{3ot#S z(K7JyjLICqzg}5n%=V`2w+j1@cS;n{(Nu~|5JUn49}^}vA_ET4)OS^ZkOE3raaq}i z_wS2KOBd4{!B*FP447_bX?9HeaXbTtj|i1rV~`gNlQlUKL>-BC?Z<0tz@dWe0erFl zj4#-=a2`WAKz|Moe+MRoYuefu^aTIRSy=ZINao7Ij9?mL^oDXSo=9r7F@SgE)dIZ! z#~!7v#<9PRLk;uTQ5pK9QYh0ZI==jmPwGr)j}iOPu7S@I>$Z}`)jAK)GW`eo!%T;HKKwivyv!;qxwq;3Pz8W9=Ul3w?qjjK7`GU$(Q z^k@`$AVyDL1K0-RbslgXSj3{aLI|iIK6^Iz^()JpeLmnjXa#R#tlmNQ==lZ42f&6N zOJB0ys;~n%fto<^ge!h*Yz&y~wY9Z~@Nm+6?h}7M1XSd(X3kq1Alpi%&3{h}sCEB= zLP4}QH8m}Nc^gz+RrL$B@>iGc;vg^i?i6^Fl_F5&C@$T@_b1gR^Vjka zt>EHmX~C-j?)(xzKk+Us49p~;f2g{y14;KfEv>n=6?~X0K!V#~VIo|gcQOI?`kaBq%9_fnyq%_b-6M5=v8Y_wX>l{3=K!(K}!6AqKLpS-*S8 z3J~B1Xb=Dsdcv#*Q@SRj0S|%$;43V1G7Mt7!Bl?&lv2eQx*F$c#V9f(us-k_S7_Rp zgB}10Ht6t(L^9-$dn5eX<5@}98C9=%ZTDRYl$c##rsey`GMfYWrpr)xfBdNO-n2`f zj}VaWy3rEPt=9(^&t4FW1Wm%#qA4JAA?vWyAG8E*cfRhH7R0mWW~?yd__?5=sY$Nb z9(x-Gm!so*=dO%4N2d7r9K{3n@ z#c-Su(M?-!h76ZJwzkf|kZEFK0tKa~r>CF>>WEAqjDAc-^-$@!xw%W8J$Qh9DvU`l zF9(>ox|V{CL0}CORGBO0Xh{7L=qi9Mp|l5p9QGAc(V8{X69De&=Vz z2Hg#q7wPDhCMOHQoHg0}JU@RKinFAoBv@1-my+CKLtx&>NK4Bs?*P+Kxg-7gf*QeF zt(cII6sb$ZBb9I8HuOTHIdLCJM5K5Q_XSBD0P)Fy%wv?GE@j!cmdt(s&RznZ83ErN zCmuz4`Aa@q4iJ<2mz<|gUT@HZ)${6r+f+#W%o>gjs%e0yC*;4i!7_XdvK%0=1Q?ZH zz8nqRUs3rcba(A5h~Vu%K(>_6VMq`W5y`op7kDk=dX_oXe~wj!j|eAq>QtcPAo;c- z_Y}T8{06;}3aqiYA3phmdj!}zQ9(gxclZ8F0a-ziIeX#gB_Za>6-;YY5`Nn{J#>yN| zpO076Uxggo0n~oKIOBW_DHzq1VnU$u={321RaOR5rI(@<4wghZ0yYnOe%&~Fv9^iy z@msg@ImqAki?lQw6A{OdsJ%Ze2TS?SqgcMR)cPF^-_#lHT^c<+s0*Vf{$~@Q&yc-r z%qWhHqb!kTp-(hDnDzi7>950A{@v_8pLno_b@JFX+csRoq(D?=KGaI?^$(`9VHW@M zVYn8lWRN=DIGYrI2uS;sYda-KsO*ncAH!S@UfRcNG#KpV@4EnBD@rC9Ts+-wlUU)`d^>3p{8Ax7vub z&XIzA3a2;Kd;S(y{R3_i7+|1}+}+%oSHIQF@0wu6a`2X!nvMfy5OH01SP(u)5@MeF zpWa#*Sq6uK!P1afl>MluadBT47yZ7rKVYJ0UjVo!Az_qNBu!7B2mu8{+V#&|;^JrH zgG*s}!NsH%>OAE6_W@ z6~NSuzZ*(S4*;9y8E_cZ78VSy`#;?`0=FK3spf4^P>{B}V)wwnb(^xaWCWKD`X}~A z1(vK8?mf^MMXvXLWRLmCU*HU{d2fsdM3WBs|ygbC8^+&x zK`0tw78fHuMkZ zCxHxxhK6^BioQW#Q;A0akws4(MtL4i1qNLG=3zLahOv~Cl%x=wU0|&sXn<*irb@6t z;?9r|i^b&lkvK3~!7$8(lt%*pCNnr&ZcuE+glwLHZq_mkmq#ipD^r?3E{|WnRt_x< zoQc0bAnrEY2t9@&;1m%dW%c`60dz(7jcY=qwfoKWNwprkjwfhuuK^8g&Gww2Ly?jKh_TjZ7~s|;eT-VKAj{j+?uQXb%%Cfta396^ma%O>;>#EZ|#Sl-!jTw z9CYm7{NY*1n0--fgOmr18p`W?<2$R@pteLR_GQqFfOEGFdzYE*`t=)y{h+PQyQDP) zjZVZ-^~23hakm1yk%9AKJ8_jVj6FD;WSmB3>7!7vADoXGORzygDSwHo@LIi@IR+hs zbQfrC0#f5L2Wk|f6HM4lNUWuktGTUhI_ww{27z|~6hJZF0{Rw)G+fjU`0v1ZqM)P% z8b7W^Xp#)fMR0L}U;a54u&7M6#44);AEyLePd zQMliKKyw6Bgy*2k?0(P3{lfB{QGa-%tIr;$m zu}d+6x7bppXq~~tlG62HcjMDx(6jW{R-ick0)<$s2ri=U&?fvG89&f-b%0wJ=*5?k zKDrgM_jU5ep6p26Y}R)O>>R5JoqRCw!XhDYx`M5BynI<2djSYgEL+0u|6R3U^zJjp z%)`YjGTAb~%K!-~Y zyKrF%Cd~Pa@CT+qZN1T=QAw99RpuZI1muzl$42=1N?zg7pN;J5YSOpRh378 zO$qqRBTBWVensFI&rP!xEye?|I?0R0gem6c<*n+?$|m{7kbag?a~yyh{ry+gBLw<1 zL5R&azCt6h<)d$iz4g3JAGK!QqzHuKNKeo1%A^2L)F6fP>Kl4QN7pWV?eheW!Ms(e zDBQ&$DwAy;C<}E;A(F)Zjsv%Di%Uup`$ygwOwUc7he!0pG30_u+Xpi9jW=+ieB586 zNG3=zu;*Y-BR~Z%50__Q8`a;AZnUGq)ki$@;U)4i)b|xYyz)66+f>J20;>lGRUsEw zSA`t-%7B-87`V8)J00`m&RFNx+S(kX58StfYw+OgI|1KA0J+^?%@0mw*e=K6ulHM! zl-fzoDP0t2TW6-uTY$~QBAV_#InN4w=|Y}liHN`*vk*iv5167u3UDY##jrRgR(BQH@x2_Y}lD`~P%Y zb!h0B^yDa%Nv*HJ{({2>?dTy=**i0^57;euTTKh(mn|B*j9?oIoWOHdaN?)u;QKu=d|yVNfVpr7zBS|8UW#*Q)cxnTgsl0b z@f6Q{Z-8Ad18y+TbiKOxsJmctFp@G~eo)d!+;%C>&ebqU>Tf$bf@N#RrB6Zw1wXo0 zmB(!|vPUrIkyB9E8krdz7p+LcwU3Nz+Do=?KoL)Tkqg(Jhd#LiGWOp|bUF?&cs(Q0 z!(nKO+qg#3S4=gNI9ye&OOZ`P#CCJOi(R9YDZl1zWv#3`uUCJzT47X89BZaMAN&V>YA$n*-;xKW z80h(zFW}--AYiHsdObKGm-+<*?fO6rD)cNlARcdxi*(E|5`o3PCEfA=#zdUH;>gWc zDiVr2yNiQmDf5p#mJhb;)_!@xobY>^P*Gg=?7_b5%3V@YQfe~SD@IY-8WGX8ZhKx8 zUM5n1Cl-*%*|5Nuky8lgv8zgMVli@ij5 z)a`$x?$m9-!De?G#Zt)r1+3jr^OD{HQE;o8J&IX887N7tTz|CQ@78AZEE|+HELJ- z(|+$9d?X->kLD>u5b?Ul$H#kn*M8*J!K1B!wcR{0PJ*vq;?bZ|a{HU(Dn-)nQmm{k z{rwbtncLfldC8LcHH@=7`#&Z6YYmDc_W5%x0mEM7uc*JA{P$`9+Q8vPJ?&)e@c@3! zf906R~LCy9k*xq|GP_;F=MbrSV8>BJmr5vM0-n28@`$WLP6ai#q-Xc zCGgDxYyT=SG2h@#!0+UV`F%iF45pNY<&X4?j%|fyI2oWUKxpmDH@z$-wliwz9fp0n z@>e3>f=ir|(K<#)yM9f3L(1iA7`TYDvTWhoaXLFY!FkK^CN1XZ-H+nv(Zi{*ivPpg zcZcQN_wVbft93P1S81q3DwPsxXlF-L8b*VJqKvlE(jsw(2u&p9N=X{pB2pohh8B`i zl7`mr{6yA$e~<6?uitY#$8#JH=^CH+`!&w7kb(CVBVn{Rj<+*y6P0ItAVC2{s(zA1@8K^W_*3UUnu7c3nDsddZP* zhoFMg(<_0F?t%6CINP9?V{?czeWm==9?J9$u9%&F@ZiDa&aWBxUykhxs{Q#Z@06a} z!~Fe6=H}lh=_9B9{MS2AO4PE>T(Gr=ga16s$zHmD9vc&l|2hR51;oGlGUCpJ%`H8( zi*HtoVKAP9Md-&(WMGNh{M@>!qNvB)#Wq>gV}i~#e-EQXa!ZvqFv-%svEpJ3GDduS z%y9Q!wnlStLEY7G&yut5Xlwkhh&ncx;h#`MO`^S!1tPI8%0J>-pm zFMDaxdmWVLqUun_Ef^?4C*GQoi`Rz^$9Y&_Mxp4Dh8NF(ZCB+H|9&m2)^g(fn;CY_ z&1V@^Al`6O$DSh?w@SF5;y>9ZMz5R4lRO`EUR3Ra6WPM1?^N5LubwOP0_&|$7pG)jGtlhT@eifG= zX+%bskwjN`&;X~NSK7tM#6(#TKqfh<}uB_I6Gue>m<^v*b5hOFdOBB8TQasKt7{Z^Ft4;ExBaL zlBG+{x;WC#Mn@02ar&Nrj}}bojmSdT{*!*=Nk(nxVnDH>B}PA3evHB|pNDR(BH<7) zdI5oNWn$Mh#6m`|aVQf#kAeCzbgzkEynqcSEqU0{*%|Z{5CH}sqa&M=+{p>UQ!9t_ zyQXg%&;9aKcPv_?rA?8uA4ZCd#Z8UI6`$7vwmPq#syo!*ruSKSX9p;PsV`bn^mMa1 zKW=5991joIb+6Z_6+$MPegD2rs^)0tKhV_xn-RJ&((L{Q%GpAaqM0Mlwot$+KpkEe z7TSOa#J$~UXt=*FO=QPMlxV@vQFre}hwtc#bjx)eAthn4MJsR*u?XG1>L$=^Nx>r{ z9`$_6egmD4K{Z6$3e1^ft7~IlFxK2>#3Qc)Q!`-sIH(Btq9^RVf>#9{^iOn6?AMy? z&|)(yY>5gXp?|itvMS~ccIOTnz^H)|+g+Rpu+JqIm!lPfMFH^P7cY2jldh7y)$B@{ z&7M_Nm9M9_#Q4;}HsV+@=ex%bCk`uVBNBAZU0q@4k9m+ccXm>uDQWa9PdxYfqlzue z67^Y0Oq)-Q6-;>p-2NPs$t6p}Bvf<0&!`El5K$Hc!Ekr&$AZa^1^trRjI~ZqPOUp= zg?^J?;_6+10pQVYxx0t&=0?YEfbqB-$8;xp_xlCb>bwjx-S@_CY66OgQ~sSrBphIN z0BOy;SwG@S59vS_}N)DCp6LE20YJ!P}HHBzAtvx(#V zC7imeX?wE8_eprGVk1+@z?HN}y(m4k4f2N_S>~ zMSMueYSe?aS8%qb&PPSf@(ie|P1~xjre<|ydn>f-w*KhQgU$vA1ub=|uZCH|joS}q zFXi}Z>kj}fS>gA=_08@doMpTDDaXeb#`zQ<#N8s_ zU%g*flkMkM5j33X-01cwN}TA_K{1^9@`^+V?sDHua72z+$MH{YU`_Ga>%YGx&;M-O zei*0RzP;bgO*xukmkBZ!--ri>+H-Q?jzIqvBAEG2K}@>>PKXD7gXP-M^*Rf{=O`g6 zcEO#huGJc|HcB$_4T$3Qd_g^U>{9;3Ah!cr7cSXdyLM$Nc?~);r?|jus~S2L6njSU zvUXMq0yp_SQS>Ds3}I(x*4{?bZhN3@_DXmmYx5iOz7U^J+dwPor9a^kK zgy+%MtodwnS9oCX;!*OID=hm}AKd`Nd3u;U+l2A=#InY6dV*3RIVvg&FQIeHh!h+U zF3uw$z$O51XOo~)Xhn!}DA z2A5Z;Vg?@Y9!kV3cqO&p6H&4()gsd8D2e2FLN|fyoUhck&x>YZh{|K2Gt7%yG!UIk z+b{|Fj4YuaynQc^Zf2DCV4B#Vgsv|evgh|~mb^r+zl4|8RP(*;(D_u88(=e2WE?mt z5kNNQARRFtvnl>pu_(C+NUC5mcR&7HG*|}f$t>@O+N)neAk_BFYwXc?rt@(!3h@%ncj>F zQK>^y4c>h;nL9px!tn626`!J4>5pl#kNBgI|E z9fe*WZ+>_2jI#2v-AdtfN|~zhc7;KScBE})+OBWq}cUkJfdzO=&Ar1_h_{_55EJV!uTK{I12r&}X@I|{e^+SRLSvVMWk6hVJ+^7eaZ zjbCo)V+btYd41oJO3ruBgkKmX>tdunlnYSPB|G*Lbve>B6q z2b2@IKunsPK6#Q;IdUa_=s=I><4F4mDrVIQFa&%fN&>sp3TIGB0D*@)q#zFwVzONl zyhJ<&lpNUfjqni(_83i-R2fL+O%a$}y1(-Ybtmj8IY2|WT1+xRa8$mt9|i?q12{`v zPg-e@=)Qh=>$d*__wJW#o4-*j&MiLq(H7)n%%|ELb;ukqH6D%q`=e%9igjK`)6t)R z_fA0l1Um`WC6g=bK=887THXw*4Q5FyVq&c*8ltqKzd^rJOuA-pp47Xyo+iHU3WyS@ zfZsqlQI^E-v~cm_KBTJbi8_4!kPavug-EvZ-8(x7;d#<0AU4EcuI*yXC*m>O+Ln*$ zu*MoVxDvy^IGn|#^jwtxp;J#?aXL`<=`v`IcJeqeM8MZYdR0V%oheA?LI=fGKp;CX zLKYm{7VrU#EX1c6v=84c{0Lxe`gKB!Vy~bG$t=F8MJMkva?Z^I18dNFR#aHH=_SXi zkf<8%_cTkGtX zHY>u2VX&0$Sbfp`lHGjNl+@Gpb-?Q%eCu9hHi^nYKqyPW{vlf?st?f&pw0ZvE#?c# zpD@0N(Oz3t7D&M}UDnP|&o)c1Y*WZbBd2~0ixIVj>)QIB0^@i|l@vUoHmjAF($&n1 zt`P1eOsZ)oCQeL|3YJAkEaqf^G4qmXdi^rD6~PC?48NZ~JHAHaZY z*Or_^yPNvTl9Di7s?*e$l$3-oKf-wuBFk*UbJC^{o0~;=pz8;|R=R+oTyAFNV`;VE@Q6re$CJh6=6JCqkB@pEHu(%>%`y-LyS3&PLB1ZZ;zeW zK1Pz*Gas={XBu9hMEfV>-xP)eC;}+}X3{_Ydrp;`b5EFgjSX zdIf7G#_zAY%ENoAY`c=HQIx>j(xMIa_V#C-+YM~l`c;oxHe9Owbg7=#&HqT-p3=zb z(0?LMgceA^r;F=rk@Q2pd9qx(EMrCUgkK}Q+W5EkWvFmD!G9xlUBxGG-J!P79V}n4 zfIOR#J18sh5ZAJoMuVQ#XQH1l7O=GnYEQves6AA{|3(+)V6(f8(r}e=3@8$Z#&4v1 zP($?!U2O|SnrCf(21Sa^Q;YDVLQfR?hw{2z9=GL`$!_dw+;+_o@OD zCY{h95>^BzSGBRJsi~DcYGLdIyG1dnO-(s>Goc%dC%4N-Ho!}%^=ew)X3l#DomdBI z(AEmrqG-gSKfw+fLu3AYhFr&bpsd^dWVs<0k%7A1CcrsI`skm^NijKT>BndrSVPnAVxV9bm-nH}LPVw{M+>rb;M$~@ z^(wD0)xz0n`2AT1kLYW) z{(f@dhh0y?l;vT*`HCbHS);t=9PS%z{oA?E+4&cH2a%QGI#45KtAv3Ot9-9z4po=b z7fzlNN%L-MZDZ%+c=`Z{7tBr|h~D$+<{XDMMf9n(2GQr*M}x?Al=i-(%DF9J%MVE7 zDb?YBUaqrf1l<^LG5+upDN$8Gl%eRcom&&CfeX<{Ucc#p`?oT4p+2?e01j5zbM-8Amw zbUgiK$V*B3x??UEa6GPER2kGUjGegU;i%89_y`2(S!vUEQ*X{!9y=1oR4B!Kyux8> zoZXF`rG#bnLhg>$BEoW9aw_t%6R!))W>I(z$H2ct{39i6v}wW4lf@*6UeGS?&N%6e zgPgkD{Xx>Y_B%y~;i-cjyL*QbMw~bbuA%1A2x()I{L4g=N-wLOKu-x;W2S= zJqe|!57;tS(Xzo@xqc+puH(7h350YZh{yj@`+KzCHSpj&R;lYs%-?9{(( zgI<(@VkIHV<^B<%L;JB4aW~Vk zZ%A!Ho1<7+H`4HCYSR7fXp{te;*Y<<0CrM9PkVL{IUF;3Th6vup0bk=m@g|1RexF- z%g&35Vi*V6#5&Iwb9jSEwi>9A1E0d$i>X5C~;K`u2IH8tgj#mEgOZPSNmErTX zSA{AF)1i|koGdKdz7lX?D2oC92TsfU$~r#RWxii)H{-!Qw50AIWMgGTc_#;QmC^d) zyyIF+mdvJxo{G=wSIWLb)82F@T7#8R$``B@s;9kcOUV9=!hlUC@NLjnQQ^T?yiE%@=-&sSJH zAZ2PxoYGhwUPc&bVwT%D2SX*{?q$+MmITfbDR<0t%k6#?L#Q6_0KZ1ly7@uYL++G> z5lvlPUQp9-KYSQPLGv}BuJzt^clCLmLU*p+`$sA*XesB z<4LsimoHUX1q~5gy5XeXe;bv;8(PIYHaeQ$p>;!z{)rz2A}tE>iEMPOetumwBywsW zMV2HxMJSf2#4{=i%Jd=syiQb&vwp#7?8Lmi)LA5x-!9UoES=qOkl;wtWpDr&59X?p z|N5<42&zP0ch8hzi6@t#(ha0K z&cE}XfRyc=#R9T>&qx_3;&DNwY)!-frS#wL`W13}o$J@(VSXlXBHfa@p;wAT(h&38 z3#dmRI{?vvuRfY+Ox_kOe4GF4j65f87?7C$W~cP;-<*2 zZ>p4F!P@8bkC9lUnZLJ2=txVKozj3tnd$o<80(8WziCKs;Dl`I8#)#g#;bd5NEwd2 zG9w_%D0U=+tZDuj2$>6QFT-KmPE=xJJR`w~qlDHvl-% zt_?X;*H_^#J|}5W`F*I4qx<3c=%_O^=r-G6&6CYXtETG_R~<^`I6((k5p4|v&-0n8 zl)$sICI5P`1kX{Y|MOQ&Kdev+K2A{mUys*y1CG+n^VX+Q;5-U3%;}t32X9!E`2v9$ zKsrlZiN41QEHLEu7!@O?lB`k#xBE?e#s7GF_o*VHURWLC+0JA{?T#tafJbvsJ-?a z7_BJ?iHO|#B<=@+I_LKzWnwKhpL1Uj3$!Z%!!Lm+9qOs)UPKsn>|!_|_WH0Nr4Vjl z=j5!BY**oy9p7FdZl4(-^^2&YjPfmxOssLbR8{qc*4@Cpx?>Uf=QbEbaQ0ORY{lnzYK2`bt#$P0ZX zsc%X(Q+4aHD3ZCpX8n4eYu2J@7~wnI1*r~BBcWo!v>W8O;fp7h2%lJ-23E4&y@2SO zmP^IvuR~Ne|B4Io7le>u*$R+;;f4z@@$+bL_4L6t&*9^%1@(@k0oB4Dd?1(HqeqXT z!?%C>v$6jCQS+?bx3Rv0@~h~0!@Brmn}I7ce8gi`NJW9uF*yifp9h;2?a=v4K=ki{ zS3_%sBLGF#ilKmJY~T=H$H0eCpGaDv(ynJ7o}OV$Y}ubXo-v7xqW}i6=h6Fm*?6fV zk%JE-KWl(TlVZ-oMu#IepMxlL+Jj@0o}MnC%)#RwWNd4S!3bSS|Ce*yeYp>?pp!n{ zC?gqv6rZ8^>#>R*4i4}M^8sp)|7eZ((=+g2RmT?^{T7Y5^Xtr_bok<#I_c1Cib!nq z6KxC?D&iNUm<3nrL_ZTy+QPb!`$DjeOs`|92H$#P>(vzfGAxvtJ$v>YfG4k0fnc13UWXbOHv9XKR1t~tgsLI3Bbv$CV6Ah>g zO1+J1)&Kw%4{v~Z+2=xHzOLTa!$W18EKU2+(T%o&7Ob22j=1DN$s>_vpJ81Cu4+q) zX?yBOhv-yj5%0~}4z6wr5&2q2zVT8+HHt5~Eac+MOPAkh4%@1J-4d1qKH@#ix%_p8 zfS*6_St+q9bhm|Ax9nxn#-4NQkfPHYU`ZY7QM8vQ*ko&*ZcTKUZdDD0jxL82Trsnq z$Qc?IwtGr&(_2L=HiP^7AiZ)q3K;&&(2#kS^fWT`R!ivfHrbi%;gF%-^jv0BYS2q? z!^{W#@UjT*81*+|iV-$oUT)K510 zzt5>!#fj;*%gx|1H3rJPc}}-{MhEa#1FhOPHY0W2v`ExvX*vYsE5@`|`D zUPWm@j3%gGafwEs-_YZ?1YIoas)$_8V<>FR+2&qdvg?^J8{6`&idIc=VypURHL18J z7hA&6lo0UO?HmzBSx+t!;m}CmZZ<1TT1}fI7AnBEFGoOYRirm`NMEDhC(-7l@JSkl z03?y_C>62l*~+WmAib0#RQlPDABL16*R|DZh{h*np(IeMkBPJx4Da+C8Fbwojq@!Yw9_lUW4Lf=s$!?n&sj)S^cT7K5e2yu;b!g5BAZ%_-mzO0T$Ft#tuw$_UgbFNqC7$TTj z6)rPt&v@q2OF}o|%_~$^>Qr0u>VJ?e6ya|VR+rlMUL`?g&m+-_;FZ;qt0|@aDw}!zp?@{rj&eyRADTL*^bGYTRG;3f&=L5ZA+8>$ak-!unGXxwr;i?c!Gbdjk*D zO1FAx8`jG>8Nx3_SosAEG#<@+35y=zY|TwyOGmKR!{49K>$&yBbVTT;YmYyZu(Gl5 z7wFmgw0%vR0rVQooSfy`K=$&$td~((I;(FarKefN3Q$$M=lqSV1|nZ!SenuBW>wgY z=9)w&@;2t|v!y0GGd(KXyMrle56*Gd9@SK{5_@*F`y0TLdzU1-BsWTN(0PT}E~18h z>o~KhbmJz^EoLfVc8Bv`l`h`zV!nkf(RjL`f1+OPojz0T$5fMCGm1)4WN=S}9!RhZ zCx;6aBL4)F!xviM|14)~d+63xE#4%awk=;qnNnUX$JE>IDfBv6T&LJ&s&MZ%N719~ z%u0oWKvfnR#E7{uE#szUW1zIjUVm55%JH_f>4mt8jW{6VmngFXH$j>pDkQWwV`>41 zyJQdVz4z#Uk4${6%WnJnsafcrLAvE?91h`Jn)b*=+Cu=rajFLysZx{j$8NERm$U>k z1wz%-N@ey7)@Y47<4Tncm8hq9*>z@ncF4wO(H6Msl?fn*9XOiU(8D>TK&J|{jM3p^ z?TrxYY^i5Jj!U;Y#I5iQ@Yd>NvBTI7`dJlMC-10 zF`}`rroiKT?o!@w0Syq@>hT&e#7-=}MiUkm9E!zEgh%+95TEufXo)R+v>AlT9naj@ zNcYihakeDiUQ1ZJ$$EloG3rD?7yi+7lcAGvVCnUuK5>D(C=WVWqZONidtk-U*mH+; zH((;PJS}v$tFw*tD$KrFUevtE98G$D-RXV46d>%`tf3#-$1W`0{ro5$eKht4QI2Dv zu%NIov-H|7;qA;c?a!_}d5LAMZP&8}ZPV)o9q`>nerw&l*h%z&bW3Y!okSXI?boo5 zvZcq&P>kQZlmxrIae04!6=kw1?_!3h;pO3pCsPNqjSw1lr8|N~hihzp0P&V@%_q_(vhqSZv#E|5H-sYL1pgrW zdPISFU}xu!`dRx38@-45rgL@`1xU4?E>w1QYo4Rwb;!jNrp*yV4(RW9QQ=VzR@77PKUf;d?ZTmWfX<9X;v_lF+7Smi2A)yzz;EXxk+f9~RB zOki>KLPOww+*OXqQ1o|YOZISSVczJvm$(#FfS*4k{42&Fgi6DnVLm5#N>m+FjH>dC z9&*D2kQHuT%bYrOWPkD&j%vTZq+{#t3 z<+{wt;>3N4q?FSm<4e|Ei@BoxJAP3^axEz8Wgvq*G#5P8nq3AxK(#UZ8@f)h<;yoW ze-ms<#=x`u+|A6T>g5#QTWs08R@a6erucrd$h23l$c(7q=%3kW>je|%8boO|4*R6WCt~LdnxQzdND}@70C~Pi>eA86#>dbC{Dv% zjcYAh{97Vs@T25MvegcL)NG)p5MrXv5TS;~0pHx@en9g-0jK0pIU@s1I1qlLAR4c% zKWF~n6#;t9{tNWlv113Uni}is>ORACipyjv5V;v(X^o;)yf!9){{G{1YnvMTzX6gN zbR+)l8%)8}1Q5hsOwz5cfWW{0;9YtlzR|Ms z@*CC^f^P)x-dCRvgUSv020~}2sI&f!)y0&POifKOm~v&GoHk&URzH^_Y)ZL)Zg>5v6rdi?Ia7f?6V*IQ(+UbV_D2LOaZ0rUn8 zjEv#6V4{w6JY+9t-%~np+vVSHgg1%Yen#1&-^SqPwtO`WjU$j0V)$xy1kOGBB|w+v zsGhzNGk4(m@t3CG49+jviSv4U`4FAOB;Uq=ec1qtwLiN=q)4u_~d3aK^FIxv&b3nTOq6m`6Fb(QNi2~@c2edva z&tS5q*B~=1M!;pi8QcvF!$-V@_O~pYkJzviL6zU40^!%ry+K?9I)5IgR%pD?q}E|p z9Mg|Lhgc{*0POK$G!Vp~uYoB_FUzisN z!QK1!?{8T5{=kh_QF!xummKZ{WKnTw&6+i^yTTHZ0mW0CWdm;@RGB%CuTr$XThxXUp~pS9VO)RGf?hM8N%cB_JeP!(2xKFs2IbXh_*dI z^yG}fljTeBY#){XfPK%%(2z~h$0VYajLHK_8s4`(X_~$^iKbdS@EJAYY3=R3wQpWf z_S`o4gaA9@=eE1Lw~J^sPlJaHXm zr@w`BK*)gz&ttn8 zn`(XwlL^?DH3-x$VFa>SDC7vV2E`4IC(aqPw+Q9eTGHtMGk}*mp)8wPS^wru0j|4< z+98bMT!!qR5PspzcJTZ`-wDyf;qehyS7}idmw3ERe=&#}TexW4H(FJz3}2q$-!5`Y zB_aKTU|G%pX4rC;canh#Dr38ih@E-5_9IaTm~{Z_gGJ^3E(r%f#)Rx^`1i2ukbz|i zr6}&-b#{h+Ks{*yb)a1ktq^ENgRm?Ow=}Dcn0ai6X_So{06hfiN8Z07_owXc6(VlJ zsjd7hbjkN~b2s0zs;#Rdqy=)2PkbI8F7O^stA2nMFm#xV=`!979Pnd9Zz1N9&H=@Z zJNw)@XKW6!UFrbyfT2nV-K|UcD*xNyqgk?y^i`@$UJGiG?*dWmE z*fBrtJ~}u^&8I52srj$NG>yd4rH5c<7r9;Dg6l~^@xPIOlhWyFX$TLtID^jo)*i7K zkM{q@aEbfHy$16445|t28=z(4I02ytt_q)0H3uf1n3WRL1ifgHp&f?!Z<1H|ZOKhv z^}YCet{;i*d3^a@-&znvL|n+!Zv42*A5-gKac&wV=psQt(UklN>-<(C6aR|l>E!UR z&dyH2IHMyY(Tg_kgH`4JA$Z&*{!w(6k;v^z#c=#O=CjH|{l7CP5*I70@AmlrsnF@6 zS`7a8{h7Jszt;lo(+g#kM}KKQW{q@&U7E$iWMtfPJ{=-*WyMj zvv}HS?C4QTK5!8G^=c=!uo3i<5ya_V568tq0bqJq>x;3GnWMjGL~3XNRLm3GiREPC zS9RXXWNOoUgplF-(xfy8tB3>yj$Ipfh!2FOb@~@G#gVD31nm>`*;0%lKK{n|eoQkY z$s}r9h(&))f6P@!m$tdQ##id^?`((9cAJDWUCPpm<%EF|JNIZ=g)BE(-#|D)bOTyOM_MgD~u>`kD zPDeWPj_4kLfM0N@{(>|VeZ{*s^aHOtkV$nY`=0BFTFKI&t-;#EtyWgAkzW-eEB%k2Z&Ul zE2q8|OrA@r0zyz435ma;kkA;gb31jiI~a=y)Fe=E&VC`Fbv1pl)H~z^BMk$T4M_{X z0do-WM#3NM$*6jGe9l2M#`vX>e)ppXQjojp3x!Azg$KJD>n{mletNb6xAn1*ux6bP zw4Lc@{TLk3@!Zr=nvRZeH0KhIT}M1N)ws~vq^y&sN%V;H(rkO){)4SrqwnM3M0p78 zN9>Wh6kF)}K!Sx!$XI8|$}f~X0CO#q!KoK@S*_hG^XrO`w|{pZ2KQYU=Bh-;P@pYj{K=LcJ`WG_8Y(#0P4f-w=^a@R~58~DowTVor!*vCdd~>fl$sy!H_7nr8 zEl$B!7xfVKiX8#DW$RzR1`N{rGctEELK12PhekjZByp;`u1K_q?GuFB+r~+Zj7m0z zM^Q)t13eDF2@XGm{tt2~F$>I;=-*OUVId~Vp39YZta+jXGZKh?Sd!^)Sub8n3Dog) zWwi-c9y^?kl?zh*k(-}pVILukJ?s=nt}&^uiRnPndwWN|eY4{`K1Z(`Yk)9Hz@#Ge zt#wv9a}p~H3*k#f3^&+aM0o`L5p_MP{IBI&lZvq2=<$MgdZNez7_YrRZc}IZOvzYe zKU1|3$9RW-_Jkfyp#~<39*<$eG&lx%3a%yQJ3{19?o%>6orYJ&oY0Z9#H?e7M*3|H zY)k?A!=0xD#joNbS$LT{9JE`F!kt4KQP)j-rq*ArO!FdU8^XfS>lNQa^AJof=0MHPMuE?kKJIr-f_~U+nzqHVhp_Jn z>86I#!mCG8d+7k9GA{sT0RxI_aODlB{W5Gx9~ z%$X?IEV}qxhk)X1V65x{3fki`uvcKkx)Xt{92^f2(fWLc)q4b4ncFlW zN*xNQZNoZ2V}TX2T%VYit&W3XePIi25aPqiii+7G*9EV2Y!7l(?C7c{IKGGTdNz+A znL`b=weJ9gmDwP=id6~Ko01jn8yXx%4`aopi5V6X7~jg&wzC3`xX{*<$?KOONO#eV zW|CqJ_+7Mb#d4ZZq4pI_O+pR8bqd1B_!45n2|}u_N;N5==nT_xll^PxU-MPJvmw^h zV0~C=6%x#1tIRdB!3VGvgzio)EIb=y<2V`sdZ3=Bv2y4%2u7}1(Ezukmnb=1c?H-U zP~Vn{=DO-5z6M9ZFK`^wcYA?3mU(|Iy@ql{=aI{%)}6$=GFx$OdoY_**fs zT$Py5wg`#2zGa0$t%``22+8FTLAS88-)%UuF>e_cwH`LcNDO-06e)(m>UN~uW3M6% z(`?+^tIF#~aD1=^k#2&oPXaSl2d6LpA9y}5k%IxhKPR^7wBxf9_QzP^<+OIi`$km7 zOzOC+<+5gv8ykhXt0DHr+rE+YWt-+2I%hXZ5X*HkYauJ za{?-!Eb09ReQP)oSzZ8{?3)29ZCi!>Q9ojOnRk7P9!-T~qEXm^0kurE1z{^!N_i=aP-MHx8VtDgoXK`;|LC37|@ zA$_;!8WZ^!=L~l-#hc3n_UWetE=#ODj(1r2bVle?)IWH6>24FGXI^4;Bcbugc@c}b zqS3Lj8`jHS;Bgby)`@_2P&&YXZU|bTmzOlTW|T`M2a`ir#38ho|J_m<)QP0&t`IZNhiX^B>hlyGW2MGb-0 zu>Jsi`Y=xlj1&7V)|ZfMqbjC$-`srr@_?Vn*BQ-S;)2yriRbwJq**-|qB7HGG>B$^ zEYX@je?GL)4pV+_5oV^%v~Ar``ogDyrd@BFcL^dI8L9_HydFJz1fvir))Q)A1&L*k zXk6jYLxaHooAy#HQM5Ua5NbZeVHrfho?o6lDo*tZ7On95tKN3qWI+wxI>0y$1)mo}IsoNODP$lh=CBOLv&0FJw!G7cJ3?d4!31TY z*e1Z!7CTW`6LRuTz`q!8=I3i9(|_vidGY|xt#n#fPt+JlsHW#QR0QbXnX2gcwO(guez#!u63ca}dV-&&z$+ zRZgSL^I<<4HUY>1BC-&c-RD_%?AnFm?i=b3JeW;bng(Q5>azBWX({5*TYIf~P#)gR zDSJBzMDc*4tT~;#`>(CX94?MvET#UX%ODpcX+VMv`V-cT*;|VAcVRRArRn$)%_trfB^L-Gi+fET!gemWS zz5@hkJADscj+o;3`BuOG$VDwbO)ahM&3i(=a|S;G@d-k4=`;U7@`Xc|_M-eR=eQDu z{sI)OWNy$CU_$3#=;QA%_(Q+>`%A%j`*)z>_n-cm3je3fGyTZEBg&r!3ExjCCXDE% zmBT7H+ca_6Ncl80N(apOub|T`1ZWb8SnGLBlPsiaKx%c>yNhPDDY% zBWb|Q%-q$SyIhX;h&C;CNK{{K5b!g|=DZN1j-ckgcTWjaV&h)QMHSa}qMxViN2hLp zEnrZCP=Y37#sreMyY0Y!yG%q*xT#x?%li;F1Xw$fH@RdIm#L*GBgoM z0n?QwImoTaWa^yn1;?THp=+zZr&S!oA#TKi!GVFCeeVI;0&K(z=h-l#gZj;5o31XY z^R``CIG_VnU=Ef0{M)B;+ULS9vMG5jPq{N;hJf_l)q|bS6yEhnESRYb3B$|ro+rTd9K0DtiG;FBO0jLkRI1YNZ$ZHr}k zA?nh)8=LpTrk~jmEf*^)9LFl|gFi|tt4V9Dy|$`8-GZ!+;G|cDwPRNl5o~@*S#ppzh_HRZxR0uv7(0G67i z7`34%lP5&u8yf$?haw*=T}4@XkEls|dp{5^%CLL`i(EuPy4JEOoOO7iohnwDr0u)Y zfTgL|_uXMY^76EfOo@FO{`10o|03|LfOccb&;f7(09W%s>Ke++$GHbf$A2A&1^JNv zJ3PCHz2_fC=GfY4IQnCkv*TlKCE}|>bv*MZFSlR{AyYZ+d{m~kRs6=x_o1pkV)f_; zENVps?KXSnFELyEvtTAV$hHeCYbnX(?!V&l-~Rw{4y%xz2Cgkv-UPxlS)52Wbp~sG`$f}#*>^-TC}m`1&=XC22cPQLzT4kf!D&k{8N95Hy?JkBHh8faVEmync?)=4p%~g10X$U6BoIpJ)os zyj9USiL!{FpW5pA7$&|^k+O4e5S18eaOl;&hClUw{Md-?Dr*EJtET`vW(QtYJG{;k zV_a4ctCY&%+Qo<{J6U*nsi`qAFf85I1TpkoM>v=a3=i+GNi0K!*3sTh7?>cCZu>rf zW03>$&{+{4=#MzE~o^Ie%am z62dxENwB)aS(SQ?z@d=)ot(L8b$8tgimd6?;~m@mF$0waI8TLG$mBG%0?FhSf|`|; zU?yzQzM#a!*Nv7){Xpj<=%1b3TuZA^DPi;7ThMMBE-ZaqRRycX)ZAQkK?D%ODq_eJ zOerMh5hAv;1n?dcg{B|;O!f3V`Yp)!{@Q)lZ_3v|yUxZReSSccP6uFoDA2E4hzYlY z7Ot>@QQXl+RjXDs@9+!J@_0>z*R$|&KZ5xZ0X-9w(+H2pBO@oVNxJN+%;q$-zcsjP zwt^a1r-b4u2ius!uOQZ!FqbVI75L*qeb1w32QR~R70=RnC?tTs2j#QP5FR4ZZwMK` zi7x~C@{&+)2?a&?*WxF&n_(E|VvTUXC$bn|?6h%1brhxh*}V-#FH0@P z(}0hJT{{A``z^EUryVo%vj}n!bJN?|_T!-06?94@5GVJyC->vNBrM1W5qZi1oeRF; zIXG)LBGBP6@s(7ehAgSVNp{C~jG7q=b+ErN}BQTJ)r`(VA^PzDcwe zhlKmf?c0J%rS+U^Z@K;P{UIRbyz`D@5tl)$3-<(o5(s&6YZkacmw~{;7L2`^zKDF2wPrfh z{V2D;qXyG3+GtP^^Vvn4Ipm3%cr5J$QHT!V&-jFElyxt8`M6lL#U*$ML`xaty@5;z zOX+^_py_tjOl>9Ol(W?&c5O6y-iXSIQTwi?}Id#$1rE}d6oh2*gr1rt`a@F^GdKzbF z+4VzDV%rwf30dQJF~iRwI9=t>#IoPx_v;txT3T9*7OijIW4uL4eD`#k`BgCxAdIya zTvXAFFBTIkT(N!5hKu;}AVQE+wR8BHg+1N9;Dv@EasU&@aQGv_!aOth(*>uKQp+WY zcdKWb*MprZ=?1329~B&>ulk~ z0UUbZs}`?eXaNT+c$6`b$s!qnEKd`;BdWzKB6~F8_O)#2<%11hhNshliNb2gG!9zF z?|m?Qo-484`GW|S{>`4<{_&$V>IZCI1z&F2{P=mcgYI)QM{56_ztP2EC1x^434r?f zWt=>CpJ*Isj_Afa zh0v-Kk)8*`KFH7cjw@j6f?eD~6D^M~svab~IpClLWnJQ^WIZ|%klc3d;5YbmaBRV5(d7%=%b`7Jx3~8^S3W4G~0nH%r60#g2MMGETqL0{$P_4^^x^b~NHggNk zXY(HZ@&#TdZIA)aGuK}p+JREL<{DH(Bc5Pekbr@=rvQRMaSQfsD+D8`QG=cdFbd0y ziHRvF(2!&RfJ}g$;xHZj{5kCS@xh@X6dv6ue4Cq^5LcR-n^Cs=0rWy8)Mi23%Qj1> zoUtqoI9wQA#BSX+>C)*=zamhnZoVeQ{ zy7X8`NC`=i@u~8@CV|*uhG-5g@nD*o(|z1;RC((R3vhCg?BO?xH|1KhjIHw<_-DY?!Xwq3HWnhm3UMZICBiKq}v%7u+4V@ z5!WTm#U&>D!eNRs0Ibi2v8?X_9znHJ=*kS&fW~&!7Z|L$r|0ub%YWLV7BG3%8 z3GGa^GdNN7-9-#9xwQEFd3bP4r?B;rwv%o4Wz^7#AjIaLfU`kHgVy2zDjR(u3kSzT zs=`qy(UAkwPvK$0GSbk1M>m{|>r2haxtBe19&MxB<3Cuid@{uwd);H}=dV&E9Y z=!UWqz}QR%`%y@c<*-{J1AG<=LxQBc=B9wWH`}T+)bK0BdFKIHJSH@LaU90+5=2uZ*B}Z+uq1OevBpQJ0Ya{n=d>HOfw_jiG)`JcK42 za+9Ih{ELx$9fYSvXub1istjloiI;G%ZY#6Mkyo4*z53D2S-LM!}djJr|Ns;a9GXHbiSxR0D(2SK8yDMB^ zap!e@9CGD9-{ds1$fnKU8aM?$9y|a99>V;@S5~}?=k#x{JKaZoU(d}aV>SXOAQ*HS!=8(gBUJZUI6qD#$=%@|EsK!c0;HY5EecjP2>y& zagyZ-x6QA7UEw}SXfpFSlV z%eD_kfW-ioOtID?EYx78HinA5oBXV3=J~d%nw0)5oB%0Y!n$D*5xJ|Phyd5LCf1%` z7S)G&dxQ|wL8YHwKDl^wujG6pfc$f^>Qwv6netco#0PLBA8_HfX1lau>fO!_N!~68 z>U>lXIcV9gA|7Z$fb@3K3x9*hk!F!@hqo6~Sy_o)g_aL|RCg#YTC^9?n_m!2M5L}juF9nfRrwRuI6W3U5O{l3d;161Q6@DJaCxJi+ zfM`bVyxgh2_5J&EadF!bYX)_&9j2htmmc4e3n1O}BnUaRCy5r6U3U?5CE=EeF^KD| z9rKUr{kuN{rJ}!K#nVRE7Rh2GPb6Rom=;5Xz60zmLMPccqhTlaD5E-|Ye5Ega-;A@ zfMQYxV~MK4)7u+@hA!AbII?ka7Qmn=x~8sf7{MEIMkwIR!|Ru1a%$N6Lkgu+g$`e2 zg@+Lv<3s7W^JbU)(T~rtir(;lLOoDYiVSY!ub?F*;>5Yf1M;0R5_C&+QxRFFz^0%^ z3r0Exl4U_oJr^Af$Ma2qy%7WUgA74ch^I0E8Vgts=lhaKg%fgpS%GI!Xf^gwQ}RT( zGzcVKD^TL0&hKBz&pVi?yWR^(I^hj~cmdTPtq_DZWKd8c-v$kK^old^ZNwFji-G66NxA}3et3a;460F?Jm|J|K`(p>i-V($4+R<#T0jb+agqa1A-sH_ zFi8g483>=xvZpBVfyV65@KZ~6{Pcpl@ev@9q^xdp^~}P=`#Fb9|7yX(7rx)yl{ z4Dc1CGm#PD*a{koUqNWRYnELK3FcV>8`a^f_%1a(`nB(dP6zX|!iq}28aabL6zh5g zklWqfvv>(?qp^HS;<7B2?$yRMp*HAAv0^p?gA}R{9)HgT4}}%wh<~m`xa1T59vFU) zKXA#q z@f&@64hK_RK9RtmesqU;qOW|3$S5%lJnYd0!MiQjZ39Nke#1q6i8}s|&E@xSlf`M! zck;2Go$qvx_c4l$;rjVeT4Gz!bYXq!YLr?Sc|pr2;>CSq`W|%VtJ)p-1vprHT}w{J zI#>l2m28Y*Ks0r8%l##M)dSP*>95uuFY4IVrvnFc>I)yT$IqU*Io(s3`MooYJyI^ghKYZ;6c-nF z=FF9S3#gD!qY#2)-ol?}_+NF?3|0C^{XiVp0_kJZa~YR{ex$D-^)G}AKRz)*u>M!s zGwshf^ErN$ZZj|Q_dob0@A;#)RjDEoL&b4u>TvAC9oHHfYGI$P(505g2pCrpp&=oI zqs`YP?_B`oVo{cDJE8}=*aocjUbX624v%=Uhpa7#8gk36Gx-*RV1Smor_DXqy7dt}<0FPKq+Ebk2h9UL7# zVxLgDr3->Tx_Mi|u+()fhQa#*K|`;M+s(gdW1Oal1i+`qkU3X-qF?JeIz;GdVVyaD zekanZW4QuNp3w(?gP3JskCK9wogD!6L-fB2jDCJo@QJs;#LLxzB_%SzpZS0Go#R&p z{?&LAU^#`818~>;u9x`jw!Sf2k;p&}6B#ONmp}5Xf4hpd3ffX7hnlYg_^B z?-~n0?oh0C!-WTP?ByD|eWihFPD(N|05goE@|v2q1QkQKg5IU`)2GNQ05@Le9A31d z@6FW28%U4HN8oQ3^cZ4nN(pr1Qu_V4o9HKkdT(KS2fz`eJ|wTA9DqXQ@`PX;6-K(L z$9v%6BCB+mrS}l^X^~-w6e6bH&xq;2k8)ALwittFiga%R$WVB~;QI!iIBp~d3yZNV zS97V7mJ4R}4;^j8{>E!)ja-UAKP70T?apLkV$yplW($D?MGd>S5PggqnsMQ)b;du% zo<1G0$;Kb-Y3a>^0zd3O?fu#iMAlVwzFk5pX1Z6xV33a9Jev)EzBK}K=SDt6L5{$s z!vMlZAs6c;*=8+CU2%*sT<6gF(StUwttRm~`oBvsl1m^99z|f#zDL$gg=EGF6a}pi z01st1Dvuh_u)LHlFba>MHB1Gtm45>f0ivwcnU)SFxnvwwNx&6HOz$zPVTXxG2IQ|S z6bjEGxHA)ACX}tHsETD@byp|Q%NpHersToEr?QAtW`$G^xlW zQonwiwHV_R#P7Clz$OF=fu5p{lT^kQ?B}>r{|hug%>C>nOj}V~;(!J}y}SFxJMj2Y z?|>g;%OK$nh2j_ILzfGs&Jb+jQFA76X0lC&tOAEYbn_~udRf_Z7%hI6uh%^D-w zet2U6!m;2U_lKLfNAfDTT7Ol0r!;<^BAqbK1`HzSs5tpR4P6u5+@?{N}sd_h-991yTOsW`l@l z*2+v!>41smRg$t)U9v1tcyg}YB4NNpsL>RR9u5uVD74hgv%`=vn>=QYYX0Z4^afTaL=p|7Vo<^-r&Vv{8I z)}5Af_3Bjzx?#Aj*94o%9g0n3``==%cBmE1`Z6&uRpGPlKtaIp^;cuct^Jim8bB9} zHyOsRjo7RdEv9KXK?L>Oo>!??EO~F+U05uUct0e7w;A>O^$>K$7Nb=NiwPkcL|cHIBGh0z6kb04 zPZl>dm5_lYsIF~7MvUs<*`v7MAOK_kX=m=eFAcurz12U(npG`n^S}lcWO!R}Ho*U3 z&%&xhrDg?B^Mxd@zeCt9E-VKb9i6LKyXniYSju^~MhZWw*8V#L(sNngz|^z?$Gybt zE#08h4Jp$ka76rqIzkCBx zPd*!V>?t^rk@xW1aQ;=5T^?H(ZrPG%8cjAZ33j$kIJMB4cJS0hAE85&MOP~~a8ipc zw3M<;mO2zi*vL2(?<4z$NADeHAv8^fq-L?fzx8AHqpLSrN$v_SEBRl38ftHP4+psK z{FlAS`?uXqGNOFG*uv(Mrpi&R!&_ccmbk3Yr<>E*7598UKpbStuuZk-UuWi{aV}6P zmoNmPwgw{#Ga;r+1Mw$1KC~xLHi6YYmHSaQ?$|M~;#9Z(&1eI)0E>X+Zpq)d-y|+B zPHr-OGe9Cr$JY}dyA~zVvh}m|556kg*Xy*Byuy`*4m6mJ#(YwZTjfezKd8Dsfb#=1 zbqQ)n@4?k?gVdq-0Ta03glY1e9Yo8DI|8#ba6XlC$5aqk{Ku=fi&m~o@M1Hjh>*d70x+M8S8%(R z7obB`6_wzI_87Dv=q7lhK^&~dH1OS_g1GyG-HWfCwoIx6O^yrd1TmKtH-jGF>m^H; z^hH6O>G$>X%*9<@T@mwp@Hc3x_esrfDK3^~F!oOV1|JN%)cmVgk!~!aX}M$xQiTkM zVRS-s)X>yq_zrW-%4U4|@OssnHOgDSlI+07Q4SP8eHtokyj)C|=;+oae;a~KkeC62 zc?aM~9kLPwK$*e9^f0m!#ncBhBy?UmN{QvG!re#sK6{5zY*W3{tru337LCD&UF68> zRdJP+03b01St017i6*xX^3wZ&0bLL^5BM1$IDikqJ`Yl68Ur=9MOnK-;GbhO7&^H;ce7g);2bk2UKUw=tI`Wty{O6(C6z)3STC| z%9Ce%OgSJJ0qf`jcSAbVQ8UI?UDBsae<8c2WVrSWSjNP5e4@0fJ9nHPk%9sP)g@-x zC(*2;#=ka^d{5L4t`5>ur%tUTX8&q43}`NfJ@t<*W5^LPe(KMsq#RGFtTbg zf13`JXb976DUhvJrp=p;JiETAzP>)-?zCgCL3#td^YZc%;y=XK*e-S+#l|4y>6fu? zu3WjIrlKNhmX0B9j6>==S}-9ugN#VN+dvvCkwykp;;u5HA#a6b`wa%F8#FF1Tx^krghGN(9M}h!Cnl;%lii0`Y3v3ue(=;_j#u4QV z(hvvuFpv=IQvELO12CRCh;T3V%-W2Ot5(~)v8I6pxj2#yLIeZbBPT<2P~3*q`W5On3|+~90cc76fe4Jx8M&rMI zB~;SDEXlIeGCTHcI%Vo22m$0R5B+#EzaBDJceToLw{G6tfHoQNdcs7^yAL3+P=QGy z#~bP|q52I84#uFLpgW(7KV30AL@dQ_-8#YOAYG&hu31B-gRGF-LO>Do zP+xaHJU{7MdW_L4VyYO@B~QDvDot@Us%HUg!n9Qb$ruKu9tU9Ccq@rLK`rNI+Z$Gr zsz@u+KF%qLw-xQRVeD-Iz`roCLOEvwE?oFXD5W}M z?|sra?#(T{?I2bOco7^ER_CcNlt3%0G0~L{3=ANUAtEwTv*pysuFdkfw$gV5emcNO zDyvhS{Rfg5%JeYCx~H!noF$eBq^Q90vuD%#*A?DjJFhhV`Aj}&#{?B=8YRZ6aNu%f zYAP!$>*_vkZvJ|0tQIFc_0#U`R-yLJs`>ICPNqCqetRyw7uM(rBzS6HVM}e@g4>W`>PJF%QtO80yxx8uiFlK2ACw>Io#W1^9HtC0MG z-!C=egGL{za@s%t=Tv8EZuJ)ija%A)I67=xg5`d?2}l06W}e93|Ms7Ia+XMft#s8- zYaxa#%zfPJZx7V&vVI_gVle#MYxhbP(K{BQgro29E#jQI<7bPm&^uNsZ5@{ZSYuYHTuny(t!-+@z>}!)9?m5?NYrjkUK-_$lLDR#%lVshIxvoMCAMLcVclH zSS$Sb<`a(JB^}Xn+lny@TIh*HMMPwq?+BbBV?N355;kAmtH(nL62u%a6vQYP#s{dQ z=ii0$0)R8LW6yhfhP&#gyY=iOYFdfiJ8_p@hqKAennq;c67?@1ayn3pK;qP)s`oIA zF@;9sK*BLN=%XwklzH2AOkny-;uZ{VT_*j3`tQ!T-IiN~`wx@Ub*E2{-0c6ZN}-ns zbZKh#hh>Xg_JW9mNc;XNG>}c<;G>gS3PoZ;+h{wl+42hYv^G z$<5X3H|DZ96cb}*XBRPRH_jM@^Bg*OaL21!dz^713XA)Ddwl?D;1eg_W!Hmgyu6_} zyVJILdCiy*AuerdS_e}nx%6Vwi97yv-vA;gR~E?&8ptXsb>Sv8oc(ld#aztD+o#8j zOXO%v%;BuJC}(@owGbcEj%+ZVIgY2gZK@x(v`mRc(-q2Q54DdED2h-xN?3urN#B=upCv~z(BC|etjlD8t_>i_*y|iKQ?@9Y(q%D z*gW)8ACc~hIdWo4&dP9#Fueg#2Qq0N-@lJshQqZQ+|VavW@gfrZN|tNm)^d8yQxWH zH!%ea0qTwbX%ZD4bRnfX)Uh~%z-M%JLMpBSzifNWyf4)cAJVUrscVqPw1ya=5_5U~ zyw9(QnucF|x|&+3a)-X_O01FgRE{ElSO=-c*pO)r+j%q6Qq@`b1|l#|yBBbrm_R7P z7BSIDoU5e0!A@?j*ERe$=1OxlKVtdem@^y-8b43pA7r)qV_akqDjc?D(9x=#!@DLX z+c#slERs&zauxHvxbaapFKx;ZzPp@{bt>IPm#Sl9*vN%PkSg0W%GjYwL_WK$- ze`stApA;N*)7HGlO#!wY0W8w5*Jmk|Z9y{~Hro~7&UoxZrx>j*@bLoi4!PcKW!mfD znQ3F+7|pKcy)VMct3A#Z^XN1dM_7yX7|sGKT}cY>ivIly<=IbGwc(5*jotI<{juQ! zobv9=Z5TI5<2;mUp_pt&e?crX>?Ot^L_Yv?FskhIsZ+(*AOT;Br3O<&vFFrG0&g)e zK#u1$V_Ga~FoQFkofs@(qXw5$y@(@q0{@MWz*&-lQ}{ZcPwnF#Ue z*0*WHCvgv8tbsGE<*64hs_AV7qeE=`MR5P4QwBj{CZ#M5Jzbqhd=g+O99Z+dbZa^Z zujGAH))iypbQbMVubri7E+(}bOP&sU?r6y$7@SiT#vHPZMC-7HuASmE&urHC5 zZ|{TS&t=shcWLP!P*h4hhwx#m+K5;3DlcLU}c?T(?qfE;QJlDS6X7b$+ z0Ip6%*jE9dvJWkF5Grm1pE`kmqFG}oIT}gX4TQ@&xl%jq=H&bOLCP`dE&ui|%!5{E zS-spp1le<1f%2GGwynQM-X^0X`m=im?B$~uawFhA5HTpjxC0n&(O%|)V(YBe4}-tPyr02b;|&r4LiHTd1xsn(P%~2SGrrmvI(6IQg;Ud z$yTikOrJIKMhaJ%@A&CVi2CTp>Y9M+GEnM|;Xl63atjM}Ev%$*rmdd1^Ex^l za8)l`whXYq_V+IqbqcNkGkKud<06OCi~UTT8#OhDyfu2O_iBCK1UE@pMFr$qLXo25 zYbq-turS}gef!d-_Z~OTymj%ySDeswF_yGs=(2Den^Wg7xNw9`pEfPlTZXa%&sjvC ztsJ9lg-cCVFKGqkmi<;LKOf)O!60!fc4{g^3p7I?_EFWk%H=5YUx1UsP;F3V3kNdV zK*uxy?F7EwHwZj_59m~A)0y+iQ-wrDXF}ADf|4&ps-5ZU^?(>~ z3xF3t$dQFRu%xqX9Xea2n(GJTx!BuF=MZyPa0c$599Af%Bri|!s;*4I4)+=Lh{l4$ zhVY+R+*DmbbhbSxTzXn>96NLfDe_A0^78Tyk6=}X)&fr@r2PRLBWuGw9#zt(h zw7i_IuC9y>X`9hC?$YNAB!lk|E^PQBHw;Yo?6wh7K6X~F0w9N=gqVO?`}$mP2*L4b zUT}DBr|rL0RaLCS=)mbyl87LTvTC&C;URh6S?{^HUh$J}YLshFnXsLRs($ZSmB=Z= z%TQaB2NWi>Bhe>p7_;6Tx1l1#vvXcGc4@{l)nef?-Q$05xzLT&0+@qP47F{e6$3;< z_&-ga`{QAqZSvh?=hQ>1jAB50Y}B~V8kioIN69H7q-48xwc8BMMaN^XKlA+g<14Xl z*$wu+fPkO&m9PLOeFbd{Ln-N#2>sD1%Oa{ z18NAM;uB57E-`7^ieKL7zPg8nE*+3KOQUzCH@AT$MP3uQ9m)@xdYew*Z-mAU0oY6x zPqnCUKFlMt5DdLr(o$O#5mN!+9#TI;Ug`V2nw4~Ge&318HhV?F&5Eau7aM$aV!wJJ z8hHn|+B>)>p&DkNU)wF|K4v_9nNwyQqyZ%h+Woq-kM$+iK7{OqX`+4ul8^9D#Hyt0^cKZRV6C;)S2pXt5>gf z<(3qh0`ERh69}0>y#O}hiQQOtl5hLwl(E{b2pd6L+u&ErTfq~=lAb|z@|s}r>cG*X zYfd8zCSdy1rt&9nn|5depZ8%r1Z!ExR9eYAL@#3ck`o%fUXLDe}+ z!Y2FNxlO0&VFd=OZS&Ed;In}{!SRSV z4zx&_;~!@Zehki4w#`PbND;O6^X9vj0gUPTWEn%c%~WfpNqPp^`ZIx;;a>5`(jT~* zm6j%BF1*GGm0n;hnP<{Gbpq6~P>I=7#f09r)}S&%`|(Id0n;w#GR}n7tJ`?r@!l(w z3c7f)2M4Hny8;jN#7T*Xl&K|4J+F`D;wkd=lmXA+!U7qE?lxX~b=U!>6AK5BXp}PT zKAqnqq=e)(fHTHk1R~<&#?U~O?nS^OaTYzp#;y)=PURXG?=!atRed$d){x_rNfD{& z|IRXY7Hbd?lGih3EA>RFI695CcUJPjMSOg$li)*MR>sOUu=hmJ!Fwpqu|@ZBd{3{= z<#7JekWVV=bLXyAe`cW}uWa?iy*@+qb?L0wT@PuEh_8f|LC&0}G}84tv1FWBD-2I% z7k_VgMFY1E(WyhQF+$-bFg@_0;%de~hcV#Lcv~i>u;VnCF}<2#@Sx)jY!?Dy zzBikUDU#$3>k*uNm$E+z_mMUK9?y-IV}giYPeF)>5vk3+u&C2>0=Ky(W!bZij=-xr zbLIemr)y$BC~xvv;H$)8DKVoReGQ~US<^jbaLf}Lp^BDsCXcJC_`=IG+5<3%n6rSt z4zAm$JK0%^c^Z0ygq}zw74#D{JVqBJB_)}4?r$76T=v#e^!E1dJ`u|ANX^tfT}CRO zK}4PJE83gk&=kioNZ0=dpk2v#@D|S!T+jj|w{zcOx~rbN))u5ktB(;o!W_(|e0j&6 zzdXukqVOQM-igdiaGHB?TXZj;0U;BU7$K^NL}c{>59+0+{GDoF)})HDE@a(7c?{+A zxDXvS&_e;Lz!Ru_)&0ywH3|8^;>C9X)tBp*Gd-iiy{63btE?zKYrhnvo^r{HaK0Q5 z8txheIXPgFgJ^7P@1u>x_=Ky-9l<=Zu7sqdDnW5=PsXG>Vo@Bl(ArY3<>iglpN-pA zR95TX*FnC9!c(<=j0-6#h-_Hd;Co%>6`?%$5}97ka4!rru*u5B&wBdh9g@>T#zoHT z2#-#do$o7JKJH^ZR3cDhzV~6&+kOt=7q^WR~OoyoYJY>peDEd3_fE{I>TZGaE-ixB9CeV#R?<+I>)wf4pIPS%9B!!(iWI|V7na?@J1Zha1gmeXH}oSPtVxfL*1GNG~quX zDja-xYuOd}5CJo8c6Ud6)Nn<=MIpiVDdoTF;{z%&u@I`GhyvVD_)>~Hr&_{{#^%Py zq-mcd8uv>PTI|T;ANazoQ#7Ellm4LCP*Jy{+Gb=B-~0=1@VyRC---yWsGdX9fL8vB zexg1k;N2Ep7DG7(E8xH@h@6s>B|GPR{oCs}PT-zEHrdXIKZ(a}2R6P5$(*XHcYO~1 zwM{^CN->nx=LT!wvU&3x1U$933yF(Ywa7pG4h8;%fCi^Z{$HWv-Me;q4Lp;I-@R-} z*V*SO0BzH;76rHvQ|GyL>#aL?>WQEGx5L(YBTM2cfeM?%#>LgaiVI5w2r-CMC70QN zEPHk1kK*5e_;UJQQq$wd@XpsXHh#k8QIU@&@C(R}HAB45v|B9FHLyPz59iZocx}n= zaP7|zn|5t|>bO6;pIk(Sd}`bf$dDW9_-<#${Df5F+p_@!Ywi2*2mSQ#-=?w}EEhX< z_&4rUS`l5U0Zqc}FRS9mZ~B$4zy|~<`gXy1(tmD*1eIEi`Clxtl0{bbKvxQt@Pa^G z!WsQr>RBw-dw!(LytjS;=z;TX)5A=n(|emRUkDMyfQ!!NB_$-xLMsoH3{IO9>pY5; zxr+Y+rinOm}$iXb2qoM+ogC%9@q@~$!CQ@ zKL6-79ZR|jnZk+2vYx}uI*pfufK5M>_YiwklRkWXNfhq+O zM_vh3a*Ys;0iy$+HWyfdxo|!S`f2q%lF}4qqWi#m8R+dTYQbX~T#m1y0#~+27gFBI z+$xrVOS)qaJzMp)#K-oYijP3kVW?Ca;(~yq7c*HXh@8IO`1E2@9^+;Bt=qS~V4LeF z%y^#$`yA0t0p#_u!DE6@NKWA}^tXa$FHvhewedD}Vt^V0lnT-7{JT&qsSaRRL!!Dp ziKncytr&xtfU7`|s-mQHSZ|kxX-G=K!GpvU1l!={9YrWokLqlz0KB}16Ylr<%NIw* zXEgCVqBnc{_ANS>oANvcQpp&ScF?tLz4DVm4z?QIIusX|ueEQ0^my5ksXv<41 z)tiv11>{Ib=soylL-Sb&BrZn>b9QE-*bCDHF!JEuJ)t9lf`X`xHRdhFe8?DSqZmoW zR38<37f-(P=HDOJDADATamAHowolTYUa2Yo6+Vq8py0bXPpf`|M&3MptYMEQvg|3dHH-mzRT znFZbf>RmL%zM`Uz!0oLv=_$-XZ%U4;DTrV+=*Aw2Xnj}S+Fim}yJk&oA_mXlaj4$~ zTN|5z1-`y;_XYShEO;dT{U{-tGAGUXr$eE1d7-R~40ElkdsA+>EhFAA zZ-P756e69>eKArFx3C?F=(SGlnZ6Da`3)e*I9IN0=vhic#H6R2=Mp})SJnuWS+^Id z*fckE1rP+IrS>hI&~)J7!Krpk)Ga88+KluRES4;}DX+T}feF6xhiu#MR54g~;lhQ} zQ_R)Ze1eZZ$T-^(#xVe?(mrxu9tMYo-UQWVgOSYV&Yfcpmheh0R#$wA(+&f4E@AZ* zx78-%Bp~MT$v+d$xD~P)g)YWrbH=)Fd3;$wwuplhLH#}MXpqK?E4}4}%0mZ?H9KtK zVs0{b3Sr7d76DIeIwj z?CF$Cm{7 z09;pW?=B#Ays_}-A26fPD~dT_$7BZ(?8Y6+sTpWj&YYj$U%o93i_2m88p?|RYy4GtzkL6~1u_;auxgEBpsEuDw534f$DcK5p$_bxRlt|Z|p0v_pp^G0An@O~M= z8q~5Am4?^czMHj-yhiDhR94 z-1zzVokEdsD>}C|`K3zRQCvH9>0?Ju?cN7MDy8wZqgUZ)Z;An}B;VSjZ((+|T|<6R zR9)S&rx$BooSnr3W*QW1T5w_PjCHZAc*^czwLHzSHvSMU<}i%+GF>h=`{YUEs1t*c z9+sn;{2!WXhcGJE1tP>};mD=k}&~3 z>z%+wm*UXGsn@n%%pUrvH{IPQmyolIl+u2M@#F# z1@bs2R>mkV|5LRy`#4E4H9C3`qACyw=;U{UGV(!;3cyf%C#b}{onSOl;B1!9@Cs&= zIxe|E_SZkz-YrboYUU3p7u9R#z_C5@lt5mh%3c~hU9MRz#(?hnU8?q@TKGFMJql8J=~8X`Ng#a<&1tw~6iv(x-9H7d^KV5l~qE?wdE`Ua>75vrg@0byAK` zpF{U#*rEVtcza()!MXz?4H1KG!_ab`{+9RP_mby+y7|C=$;e~2&XgtDre6N1th?GZ zSzMe*epOI7gVV*%);4;|T)U>Tc8))~maRLCCF+!ZDr}ZsXzAX@f?Nlh-X<969v5b4 z{-b?ZW0pI9WVe7eFCpwbvAorxm0SGE3e+S`e)Nuy8n#y(e(pPth1 z`29>ljl%bu46y_$Vd1!g2cNgKc~*^)Xh8Ki^>&n34V*bEy2DGS4`gn)>{>AQtilH^ z`K`%Kh`8MP1nZ>^TLwz?zeM?Bw(RM7)nT!5TX(0E?m5UAW0hS^I$(WOy z%u?hXrIv_O;X2)XXM{Axur}bk*1?Xk_J>Mxv{q61RSfZO2h?a0grbYe$5&Ndt@T#+ z-D8zr>_8NSIAn=HZ$P<1SD~!C(&|4+QgZ0?hfNSRuO5NX}u--y91r)rq~Hqo0Pw6U~|+TN=B4(WuJ zOC&_OF+0){9<%3)GH8txhA7jX2qnQ0vDMR)A|P;d)@BK1PecMhq*BpL2~?l{k93V= z(KaK-B4`Asbw6cb!-ziuRzgdihOi>94r59T4g(z9S)1S|BW^SgVleQ$k3hn&`+sdh z3@J)gR3e}znZ9_%*fi5cETZls)J9A=M;{{b8$-|40IrG8*`5xjcFwbxFU`!%4jnoK zH6JnKU2F)(3LKnB8M~?7-rf$PpHqa0wZSzg+L-CR zI_`*one^2@37D_hf<=frs5?cyOL*(yY+z3Ow#dSw#1%4e2r9_(o*=@|p!pp8eZ8O8 zQnYJBb=kg-LpTbgi3vOAHDH4GuI1#S_BQB5G_dW;l>_jlPSeurhe$v-^8%U$h*!f1 z2?7G_!j2r7^kwtS)~|1O63m#gvJ>5>vu>*5#13rW>SJQiauQkIA28b&PowSPM>J=N znBTn>Bpbx>2)-tyW{LW+^aFrglB`X%`&yfDBXCSzlYLaI>O{I8f~2+->*70Od=kj; ztB0VL@c-=(Y^0=YhRJLnFS~jGXkrjk~0MiN)wp^uftmu>Kn!GUxts@9I z7ZE^3Hd-)DQyzgaWNk0eHsK1YFMbwEFse&EMB`k851FAd-&+2jkhITb)m z7t&RF0fciNgJl{1a510|>=^tC`P(~7OzFjP?Yp#hl)p5^QI1*4mH;Js#D9l+4)P?C zksLfCi8)40H;1sJxUG%p!b0r=?$mR~j?G9B!wU2=$LBJCuq_DbOFlJt;EmcS>{#{1 z>1iiUkb}su@hnScvatRE%DM)8?mW|-#>7HQT_m;{m zgp36-E0R+Xu(*~GMq8lEf@mPESYB3U1FO8e{MeoWTQ|3904WMK{LJF~ayn32A+dxv3)$l3xfdDpigolQpL?5$mq{xT_G{%lCU6%@?6_m`4OYj$?% zM~y%0kdGD^#eVs{G2YG_Hk=q6S;9~ba|=6BoTZ*Rc+}x?)qw+x@=u;*FIrG1BG64F zbm!ljS~g*0WNf2Hcn58}xrK$2q9QZYQAc~t8f%pNoI{ty0pz0zHVok3B)LB#LSmM? zSb`t?z&|$bcU3j>V38x^AkWD4f#V+<6ll@nd{e`Q26`w*#($HTh@KIqYqtZ$I4jLZ zLn|QF>O+^VJvFYgr$?=M5slqALNE-8X3qhT@I(1Y0GU&;RE%e0cl@qV{I_QY&i6OS zaD=-5Mb(9G8NH$Zf_{yN0rt@T6YTuI;ac&l+n{(TKk{jX+}ycGo1Lu;!Q4Qd{p`l& zj7@7G6JG7_=0=SAKoe$TWyN^o)E2;Re&U8HPG(H%+PYPP9$6Y05m8rHS60}uM`Tgp z)_Hee>fm`dfc1??hL4`!dj009TAz8U)=pYP9d5(w@L6{1XS8Pt!DkOYVZCL_kQwf5SMO>X8iB>p~o8{if- zm>JI%@a^EYV<%;xO0z@t53ad(9eQe*eoxM&Y=aJDv%KZEo9Wb_1jr~@GE``3p2#*X zka-KbSM3zk0Z?z(Uc?QW7X9c0aS9WeJv`e}Fy{kq1zmW!I0n25hz?xQOmH*G;tZlg5tkgD6a9R;cd_CJ9BJ33(csk#(`?-~?Up(S})R^=8z}F!>&Bfw_5 z=?UiO>piqlOW3b4Chj2s%l--c3oi6m73~u}w!=nuo!W7)ZijXL{`02fp#jsRA}gTm z0xpWVQ0fB@Ie3Ahy6+5a`gQF?k&%&kkv`*pzx|Z@6UMo2-aHq+&VIJE zy{BZD!e>BWeOCn33^p_bF$dl9QS=)gZ{vnd+Gpu7Q7FTgj-3EWV~HNXg!e&Xw-;HV zEZe?qTadW=BZB}an<%_d8E8lo-vB?Ku_Ae5si6f#3-6xppAWeQI?R$%T%^XI`v9Gj>h$?E{=j}uNF zjCh=G$6)hymODnTC@qCKN9Kay=b1=1@FF#6`D@F4GA3myb`uFr(53V_6>a0Iq45WI zwqFgM5N|LeN>; zp6a|u{l$k%#^==xLc-3B!G}9uF=cUgXwKM_`qO(_k6Ha*(tOt|bT_Xq*r%}{UA!p2 zT46P*Z@03TYMQ=t>LSF+&`_&HP4pi~X#&WBqf$}q1x72cE3kXq*mxX*V^4~B$h(07 zQ?9M*=m*#Pe!-`a?9g-q0&YXE=NCl+yIX%Fw~$C zpMRu~)k>&qPSh^HODcvkpke&mcA*V79z>P4uSlGd&z5%>@-%;EyKbF75Cpxssc{&^ z6Yt7$Us*fzsT7yf{)s8VoLrcYE&wV5gP1-D_OL{D`bQ^bSj{!SlN^evO^!?S;Hv$_ zeck0lS?S2`Y@5#$I1~|8{C)ttrcTj*)?Y5XK^6KSAxDH`iu8qbiLm>sXY231gDQ5# zMwYhZ5oop91VLpDyi$83AIDwWo8}^UZG_&(Fq0`*xRdErD0Z$ z*fKyP=oO;HOXfFlAieKaM#YEu(leAjaVEQ~#U&j*dZ)?ebYvv;MO0rbceQPu$cy5Y za#acoDJ$<_n+WSZ5#vXg!~uZfphE=4&$#;qlWwvK49-N&w_cT{u%8?u_2@CmX&j2E zN@WIwl=LLy{1(sj{PfP*RdtH&JyIjD)*)rvW%o!kt^mO^jO`m*U}-thJe;yP#xK*6 zBe zRv0DF=O|J}?bU{S8Y`%pQRDUn^W^AvZ-!ham+M`7cQ>(D`pX6(mbgXtLC$aT9^CGV zv$ZAXN{hruORl!I=AQHz@I`>Iy%QMXbE1S=_=tkL3siM+H8CIFJf3(II`vKU8NpK* z?v9uq_bh%Y_lsiU@k%ZnVorT}Qz{^H`5D2xB(73%vQfs2+1_D&W?a(;tU3DW4M>k= zTuL*C7wBm(Jg#AT*yF~B${hnsRq7xsD+_7(KFfDDj47Y7v{K(sT<<4@ZWsk6Qnw&K zUG>?CCUk5Ew6O*n2q~UF(qZ6+nPMjvD?1k$PU&sU&(%XvQI%* z+VtBOtF~oe}4Q-&j25WdI z^ipo_b~KErxLGd6z6}#e+(Gl(S0v3$-QtrpQSHdu8~)8mj4kL0oVa#ip7I?1HN=Rs zs)F4gA{xi9I|DS_-v3p|a{UPqK{r~K7_P)uIC`_HUhuJsa>=EO z)^Sv;-$QDF=3Mk{eWECJ_vU@Y%12Ig)&K&p0PIk`@|jEJ03sjh)6xzO*N7k zyxn#G%ziJn`s|Wr~RaLeerU7cZhD~x@m*uV>bd%4>s4y`$ZmV&}J%!z$ z-oJ1RHihQ(e8N+wQRwYk}+BZBSBWA@< z?iO&TMvcTU(AVwl_h9EhX=O2wLU`YpqSKx<$Eb_^MWIn?J91ej<1E1(_R{k5;61?!jK6t%r4`LgsD1<8wg8_X ze$09eF$bGmLWVJfM}*s;U?=hte)qfmE8j3QH1zcB1)GH9st!;#z&`N+m*KC>|D|e< z$a5fZh<$z5;0jpjN?tB5eJirq}AM`wuxj zUKyO3rWeR|#1o8!KKT?H1^7`oL@WW0fh(!0`ai(bf3Z@6ff=DK#ws$_wGr4`_EDL-PW%rM(LZX8zjW*WwBEm)El2qe$n^1qe%J8-Beeh3Gyg;Pag$yD1%w<($~c0l zgzr+0LgM0jDNdnMf%_eJd!Y!s-e#C6YUZRq3D-x;7l_O9JHRxdIQW9{2t}rP*HmXT z8PL$yrFT{WT2@hUeuLy+2bM?AYynWzmDSbACQsdN<~-6`m$7%8v>4If{v$o2@X2Sk zQ0dC)u9ILU*WURyS&o8qU@1{i82GQF;7L`Am?vk3vQSWJo+NVrQAfhT6k%fX))+ar zV?t53E_zbNfT|u~tbhK~0R7}ANF5^e*P!C3_(3(O|fPx%*TZsRlCQcBLY3hlD${DUeFGng{eNnP@?0aL* zY*)!^jgKGa2(>MN?K4L1hg4$?@DdRC)g(~TPl+&Ay2b2oZyuZ#DVw-BTnAnbiH_iT z@GIEpYK*yEHV7qnkuWC>^|`DjP}x9|19vi|j^9y)pI&l-EaU6Bh@To;J|x6C4lf?b zyCKgDUan1My?~K>trZzOHyLQsOSrs15Ws?Av6wq4=+Xuk7iiIvos|_7c+WX*CjX{! z`G+3+F4`a{Z1;ISy<;S}3$g7gUZ66!H$;Df6qDr8P+sM6w@RMz&xQK;jq{j@pm`N^ zF&b^majnZmfW8U#CUgGA7x2J9xIqNpy4>l|y9eFKoSko@7H!9LxKq8C$!UoT7nfD@ zEp(w%b~-7PyCSzB5v0%Xq9)J!nCD})HaAV!bhFY`*5p-q1tdXtO+zNXZOk$2ut_7& z(b4&UIcUvY56|CLebK(ATV<;ypXw_N!2tG;*&1eH^*Amel>4kw#7v*u*NlnwJNpnL$KwATrEc%$ny2ygY%< z5p>Gjt=qTj1$@)13C9p|Orh&5D?)h*0u=!T7$RBjD!Qaha06Wth@od4N(4$s&msNQ zfKn&{qWrDzi`HfCA!P5xBtoVtRu)-kgTRq4K>6xAFT4TZ-mLV5J8|W>XctYWg|)Tz z9gRFX;o`*3&dx*?mpq)b(7H1ylZilcpql;n8XK<`6s*}Q)91O={+=1X65Qhec>h$g zv@Zi$1)R_i2XhkHVH;w;d?p9y6MA81fjN|$fqY`}FxU#5Qk$>cUl55lNEVx96Kj;#kY^@k2L0i5IBAl-NMBkHC{S29EXIx#_;t zNiVZ6UpD0`1}kZ;7we<_u4>)+)Z5*gy^4De3SIRm93_Q+quD)I_P|BveSERHpY2#Z z-vP^lQmQ5Sh{H>)0h|z#M*!42N8?UAbNX~dUqpdVpA7hcC+xbZ3JR0n97_9a%wL@Z z1SzFbEO{!J|0k#otbI)MmxN{Kg_E-{9vqY0r0sT#NqbstZM;>c0t6}1+EgI@x$L6( zQ?Ih1DVVe2g@ufz?DDzx`JgHTr^Y)$6LNZb6R#8&mG(%Pjzy z|1N3xu1owxNG7nwJG;A|AZ7|h)jo-t7ER&l-lJs0g?;8mcEKZ`>*z1|S-C;X+>_wx z-K~S@LmbzRJ*Y8|+mEnO6tWj5>2n>SI82hlco(D^~P%7;#KMy8I&cTnnx_ z^&r@BL37T;^mk0JO7ND+m^@PS#GaF_i&^Z z9k+HEe;K*Jp}YAZ^-bxzb6xhynI%%6_j!H@`RhG@WB2{9q;qpeRc04un-HkjgcjzNhzRhPNGPS}8Uhjj0C3$E`IF{r z9-!Dm<|s{EeA=6@NbMgXolLKaBMS+#(**fu`(+~)fy28w?^1qzWZxw*`MJ5)5*le> zC}*1PpRxx+Ot|1K>!65&OgN$$paj;6?If;gY1)T{mWC35j41%dsFwp6y$bD2@Fh@fWqC}k2dD-i zKb1=gFG(xwvpojQYzFZmybFvCtbZ_xJ{ccT z`Yz4m89${P(i{w#Te=&wAM$WmK*^@lnn0&1_|I4{tV+5Y74PrYyB54TC@ig8ZeXEMsz8-U0`oP zCK&3=Pf(8Zs@;9eu{W|wJ$9@WWxiJ$+K&FW&67fnjg7-LpuXSf<#iRxVbn@*-n^Od z5~qB}c0%0Y%EiMEx%%Fk_9CQQw$UudzdXPG#yoF64SHfi0>qc>aQkZb9)JN$27h9n zLT!+B1!5lc^8n~Fg(8EQ_I}++FZ0FC9ZORlE9-cwl0TshVTw6VPl|~&bNucdzcY43 zulKJQYUDT;T=F4=ta0!vlEIVp9auz=si0uUIS8yxk;3G+P~E2m%g&yK?#$66Ws0tM z)Gix)`*wJ_Y8B?qoASa78d+i@VhNE?hN;&^fob+Vc%mWWrS>hyQ1@{mo7jXL0zeH2 zDUePOj32?j6q9C16*JYlH|&$P#Hjem?02YddX=~V>4KyKm0~P#1U$Btsup8oqOb%K zwV`ndBxhgoI_?VSu;LM^d?$N`#zKnsT6oa}uejWisNRfzjP?Z1lLWdAgC58u&u?Ge z*!blIdYm$<1-g@yB1bV~VsDkBO5(;fYb5<7_Hf3zu!xaXnf8LemC87FRo;*E;caJI zI7Q&l_(DjO{J?&9j3Yi0Ge2<=I$10zNEC4v%NOi26N|>uKZdrVZWBvA1>5+0z#6ZN zU}RtnYV~m;3fE;Nfw*F-3zkP{XlSIYelt3b_Rh}mBqT}Fmj!o9V|?rKhhra-VmCt9 zv}>1+)`3scjdJy?lWZ9-)5Vl&n+!^^GLe-4jz4iyNH7_xY%(oa*XT~C-;m`$7o?n~ za76Qf;I>WoPe-HVc}S%?ZH=-l`NY}y^h(f-z!N8)qK}*L25zu{Z#{U;NJ6#=1%Q)f z3Y5F-gr(qb3q@r$^Ayp`mek=<^h&4mOAwXrA*3%V+vQS@aOgH|s8g^cEyUHt1^-dy)4E99Ti@f~+B}@g*sEHZiVc7?>ARWLJ?p zUL$215u0ba*xcN;`Pxix>2p4XMbC&h?$6>P#+swLh(F6_dlv3Eh$Mj-LluWC!l{{* zSbV-_#>VViz#chJ5VE{D67iR1_8W)){EE z`vD7~-H=U&F9m&8>)|;&l-T@xYTu(R^En$*sIvCjgn`RQ9x^}4^a%Rpn7Y_n9 zVA@SRkPYP~Sv`~-KBhzE80Am+JhZ3PY3zKvhIqwd&rp+dmU+uOGgJ3_Q(9W;2pF{X zCYqz1=?9pA>J#;neUM=jXdhj@|Bms8oFWV^a9lq-M7j3Bza7`8GB~A6fXe0(hg8!Y zI)vgn#o0}nG3t+S1TQ>s`ow2jM(&j1fTCeKWMFdn$Oz7;Kg3#7e)6mGy%#6az{vin-y_C@O`E0*bjF|8FR0+@}*+N{<)_xO*${W%4!zJ?_Fb1nScL3FVNTn$d1I>n{YBe^jDYLox* z7(x01B&`d=&A*G2e-iVoDMSKsL17_S!DhIFkbUrfEd{T3?SWGOP%Iu9@O`d}hk!oC zduKfSp_UF`GdVUScic~sU!|2jh<}214UrO(i;Mg>9mj_YBT?OY$MlEVIywuC==w9i zy`k~Jy5+<=ebQmF5OLrmUqo+fy{?AFRwTFh6aqf;0QJ##F?ac;3do1oj>O{p^vgzz zarXLiEdV=#GrmIe2iOBb_g-(cv}>bB#Pd06d;ZoG)W%O;4t5qRy zv5dK8%Uj$OwQv@l7JEjxbdnn&KtR~|XOyns8oS=CgV8~d*kJ~(fWyK)jEvy)>yNMGgYJrs+zJD+XXEtVR zj0;&mu_*p{LBS9>3qa9z{`gh=BfpBS_(xO%kp}`H>9Q`+Yq&VEcrj_dq`v+VDjKUR zU{A1?iSd+TM92zCLnEn^Fc~J;67?yH+CFRC0&p4ZgIae|4iFYGnwKR*Nh!jXu^1B} zl)H~22*Mixj&W`g>P%x#3J-#6Vw^1S=vKr0zuQ4Ec_(7*Q5)t%b_10PbYu2ak-B426IX2i5NucNR{(uOs@_ zm!xQwn6Gnz3YAn$f6V?_|snnoz;;Y-xNFk?m z|5^+m0%!}N4b>E32d7ZxTVmqu5t@|^6O*hT!+_9)La zoKfe>6ZTdh;2%5h^Dd@OoVc^2jISYu=|fH2qe^2EX~ckFG5KRX61vE&$6$W(h`tUD zjZ|L;Vmq1o`b8jtr1X4hp@qgly$3^fadQWnl~BuT$Q_D6pzL`#jbMXeZ3IG^dKAfD z-{PjBZ_7YI=xQ{_9_l8&C!Bh$4GnuTK7f#*Z>@2Zz*;$C`v<cTaCTLp1p+l{JI2srQ;C~E7&eW*L$Rjfx zc~Z8)3>BwaV7}$)2Emp~6@5#lAs`V|0+7gA19qdI=9MI$N8@bgj$EUo8P`ApDs7oa zW&C!b*L@RoQusrxf;Ue7$~hH6|AihPlK}S{+Iu3Vl5mXjV;FDI{rlV04QOS)H%Fof zekXPJMbH%suF~O_Z-4cQz|d?`5eb|tLVU;HT>Lszr)ZdohRh1^j3J(dT*NNotq= zwDs?aVIz(*8w$!I*g4V7-1;>9<|yBR3H61;>lfeMHN0(WO3&1;g<)Yru`6cTI`JtT zVMLZCF)G0TDjMh;)5jh(af)4`AG2q&zWyxd*cDdv*hO?R@5AO+vVn{c*Sg{TJEWX# zSKROKuU4;bZml_6+IfA?xvrM=&7Yf>tk^OBWljG4$YJmlG}}~Vb<>Wy`;A2!DZxq7 z)Cq>%V~shG5d@DDm08vE_)5*Er3D*2VuLD4&a4^2J-g%%SDGqT^V_D>{!7k9xw3oMb1sgj^(VH34e4dL94eHnIn@k37--Vhr<9 zdO@2?@YPj0IDVEsjPgH{arSVA_%p()Y%=!Fu$^_PJ`2~v`aDnRmYkic$8StsXet3u@S+gFRV2h6=*_dSUWpqVq zRIE>p>^r1bW<=W`20PCoe{90<+8)%@MhEx?*Ke|Q&$%hkz+5leMuWziNn9St_5 zNV92IBQCOxRq-1QwPJT9n1#P3kCP_t!~afdrt;q{)DK!Uzre0TY4i)CS&RTRb)8|s zKw61O!G@kSGCGools?=*Fx3uF)^Vhu3ckLJuPskP#<4?Ghl!&GpnP|mvz08v~3Kr zjC8_3cB>e><6qgb?RD`L44I-x!j^> zL%I}0%EZ2u!fkxcmF%c7TV@Z>f2*U;9Cz^?W{YnXmEZKfgT*_gO;*WDWu37VJ&}v} z)Ts5Gl-tathynB=M;8v>29!Eax6SdCr703Ywi1`-4(qX{Q&_S1AcgIiY2QT0NE;`Fee6EEP|-+!0e2Lo;vy+zE=iUe z6^u8?{q4m?n#}I+&tQS@*vF(j0m{M?e|~5q-)Y3%-9!5P%|>or4Ee>FY<+3tt-{2I zY87HRNXhdT6uu#&NUa_lSBtkVBRSl-I!vthtBGfF1U5eJzc1fO^dhNgesH*%&;k4y z`7mf$3KLIgp<##!h3VwlYd&e?DF_qkSiEf21?xVaUT)Rh_7U2TGAPPFvPJe@jvCvf-!nkG%6k$624q{t`5X_zKmlcZCA| z)M|Hi%CgPvwyV`nbgndxE;>7Nb+d{8(GTb8PVPxa)e0llbbG+?RCXATv&Z@a(xNPF z6S^3Kc*1*6biawzI4MIrQ%T}7j#06qNSEAdF_fcc7mXP?%_N;Yq=h@@FG?WuAlIKJ z)28T4jWyqY!)D2!QVd%Csh!sAkr;iNQktetg&@)%Dkr zwA6!}7xTB?wBBg_;KmPa!WN*c1vc0HcA>BUfvgKP`uls}EMH|_ttzn<7QpR>s?rR$ zj7kHS4;Qb0CPq4JKMv3swDR_gG!ggru%f-K^Yj7Z3DR2qA}}@t)VqE;0sUqQ5-9v9 zvB1XauBsNmz5G)3);K69b)cune?TPXegVi9051nj40CSlC=THzuH!kL^W@Nyd7qvY z^GXrJ759A3{gQLcDE0cc&zp9-Z3oS}5tPZ>W#e&Rf!fW>*AlUut@*U@V+)F?6Z!ow z)wi@l2@Za@0KwCQ{0ejaK)pV{@P9h{?szKr_x(DdIFeDv&X&rSkg{hHQQ3QEB_tiA zlU+99*d$71lf5}|?6N~-C1j6`?|q)<`Mh4gzkmJHANAs#_qgBpecji6UFSJtYXej` zEn)H7`Tl^6h+6-rCMa7H?E*b_fTHE*Jqp+vq*_8BM0{cWk|jDGuzd_=6br8mi@Oj0 zpRWb#cIT3uq48g1*+DIptC{h#WR4zb(;-S2WNp>m->E+~Dz)vC^&=7TJqDHBy!#)h z+d6WFZ9Ztd<8dj7b2s+h`Uahd>O0LpU_C@UlZJ@Gj2LHAfP(^}U3(?DSos2$=L>8e zcH!%N$}E+yixFV=DcxKG+ukfAo8v@;yP4 z*@%IeK+c&CxitRn;tjWjsVb?E7mL=`YVh2ED%?tc+C~#n0QB~EVO`RMER=vy&SS=@ z9M@T+2p3dg|1ty+nHC2OfKHdPh95vanV`HD4dRht6c1DbS4hV21rfKl>9}?#&;m`E z1FA=^JH$vrD;;J_u!i7Q?BBlm>)R5jmk=BulfHwg1XqpE&nRVE#$(`=gww(X@uh(% zZwWL7Jf|?Hp^IJu&k;e%8U$;2jjA@2oa`~ zcm#qcYSu^9n?+NY8yJ@I z>8*6Nk#qz6la)133v4wX%Iacs7H42URX3%#NV0qqn2(UBk5<3+gKp5?lF9LH|1R%` zQtuk``r%F#atUQ~8z~ug*;CvGH;Iw+>}Bv8gBmBCmY20UA0IjbYS43Qhlwqd!K{TB z_SD{E(o{Khg;lGD+q@JbPWKV^k|*V?!H(7Pw~;=`2Y5IOfpaoTEKAT{l}D%8SqQbcCxi`@Enqs(0vzb%7Lw~7E1u?>-O z3;2Tt!@-rG*>OzV;ob04DqolhKsi8RaPmj`Fq)Ks5J3B9oFSYAk07M?7dWiz3f(ON zD_@b;fs2CKlEf6`GYPqAo^$jQ(B6F|(cvx-S@{@PU^P}xzQc8fiim(H$2w8SIhC^F^+&k%xhN8+2f0F+lLKz)snn z3V;hD|GSBTvQEd?vsLfqi%i#sc0H8JmF_{-si)Ks1Bj>8uL})xScYuN##J9z%3IECf zqw37_ny@!<>jVeHk0REB7U9e!N^~yiP&H*}&N(p&v32#SRJnghqiGwpbC+)MRoBOrk%Bu2qo|yyP)a<=Sht#WBD!3C+o;JD>*?-n ze!m%E?eCwD>Nh2Gu31wuE-@#Jh71}#o(9|8XIBPHZ{TvCGK#z4<$aZqDBH=)Vmq=a z8LmEE4Q@1|OxGQBhpP@lyIieW7tR{!+)j4+bkXG+X(z-`Dibn-Z13G`mr5reP&2_h zsG5}|UletpDw5cmc9zPd*aCwWn-h(>Arj_EZex({$s2%TRW(K`96cL@W3n^pJL!W8 z{N|zn7Ic3=3w4?w94sxLDs*bb5s3V%6eg9kaR#|20q0Gf+`P9(Y}5|EW*|gri)8Q} zILiItcSQw-%?JRLSe}BuD5*h(C*WSKni5{Sg3j1Z?2Knu+v^Kg1I09lA;t`q+;wQ? zDLBc}L<_;@(Zt{f?Vx>}$?$$I%Ya~*kX*-CC*EHF@C3kTg6Ww9ra{ezGCu#_TM}1k z%q-tV?PB~{CwPJ+{_;JyF{bnkf9Z&Ufps_ibUSM67r)j7q+%ao@EIr;>>89ud?F@&sxP*ecqZmT^SzwyFkRd!b80?6N$z!pkLxMjO3n*<2n_-l)LW#9(Q_l&9WV%3!4xO#l z*vr~d{R|rSJ z4Mv^3+)1n?f#rWjlDGF+LQw-`6$$wn!n&+{HYgiOh%{|+spu7n0ewa?Y z-+AE2&F;v+WP5l7gN-l>N90f!s;C=EoY?yf6x0sHv*ABMRIwboZ(0xGDd!JF!MP(Y zgTL@(`HXstt8FAtUT7wjIzDhUo??Qx0IG_9c<=nK{_KqJvBPAmwjn@I*WFc;=B=nk z1r>KF0dQLoaBqqm8Qxa4QU3{TPL0n^gAsh8I~DLqz)+SO(ay9=<-;89SjNjAKt84x zLT>7w1eJ9S&>Qvt!gzk~U5B1>neccCUsA*n$xx|`>$NcA#G)1hG%tNJYT?z*TUAeH z$*8Jl!X=xeD`b=;!Bn!Jt18e!2%*kM30mD70}e4-bk5|dh3==Qku6nfEF)6W_7#}A zx1(lDS|^d5Sv6K1n^Am!m887NlE~dZ(L7s&9Iuy}-{((#q5GXTr+)mR5`Z+I)kVmo zg+6FvvRYh#^JQRhg+NFaaZ$#ZmdlV=Q`Hg+OJL`pCRPfZH^?xzJr2KTJBN zT$mu*RgsA2yY>4A-VuzW91hEyV_AvB z=_St^eAybdi0Bi%PkqXEAp2~lb&wPMKDBQ=!htuyM6+C;D46e_`Kte!dQy0RjOsZ} zA63*J(3bl&g%0;wD@Zsv#+@1kr0VwXRpL=~;S?)@(ztC(6bMU0-zW(k1X%@VdFkNI z*6YJj%C1y;<)L*+Cj73v@0sfMy%mOj>BdIU>07OI3ttbWW`<7v9%PguoU*3&@IqS) zSbIR`n}s+vHDZ%yWkOE+@`dd5%i|$dq~)2AiU{tcrZl{+x!<;~FzXIvM(hf^AFriWM4oG=u$F0N70T}Sr zfI8#!_|V`7I=F48QyI#A&_6ERW_xn#Q#ktpF_v(#CodAy5DGR@Lhj)}5M}`0nFE0L zQS6F_zCMsV)6CJ*g|x?;_>90=02`T&WwZd~gt+dsZ-Nme0O*cDnwX=DjJiWmbsMMK z4mfGI(s&y6PZ^j4HT#JuEHRMLbAfcbYXT@2*?FE9#hb9N362fn!f4o zui6HfksX307(DBBO|Kmv%ZA6O_!*y}5`p!CYX1Qd^@oywKS?4jd`H9Jp%2>g-IA*{ zN0SJ(ELj2nVEX^J&;{tD@j&S_h`SE$<&fWK4xlu%T2<5hU(FfZhB*7Fo|ea-atLDe ze~ULksP{EA0d0x$Ap=4$I0>>Tq`E@>{qyJ`-WA9U`WOaW* zocgCErlf2HO#K3n<`kq(91<`nH*%BvA)(0Dq6*fA>Ms+=hvw&kQn?l?gDC-f}Y5}V{Z1NT`iZk&2SUY3~rG}!7@$Tq`%<0 z9m@lb_i$99hsO6sF)Uxq&0u+m7j^wdFaiOYQ@RG*nh~$TV zHY|2Ze+p73P~d(Don|;)5}h%a6RCFzKYV(hMt%FP+&=&ZS1{@s#5NeINUAp^D4wT1 zpq4um<)P3$As4*Mu8V>(N8@~bQG(#N7rZ@7eQ$%RqbcQrYdA`NFY{BgyQpTRH4(KU zdVur-Q`s}VP`V2H=GK8YDB#X~{*-b=fnx=7uRc9~1JkgdwW=sd)!;}_ydnQ_`hSOmZ zb~=0+-kAH7r)b#kbubdPm1<~V0!$>R7pYYU+sNLDLn!t~tN2Mr@Ciow-#ATbs*4!r z1fVKfg~n|AULavF`los-|3e9($eddv)Upei55}wL!>*)(6$fTRrgYZ5k+?QZ4#6&g$1!H)W!A z5|WAvvp#{1c>y=)HT_=u)u*4vn!e6DMN$I#ZODUk6L6i|#Rr2ZrPSL#S&y{0)?Z>P zC(e>Q#tJpJBLMJU$j3UoUQLKNt7kevz*t*e@b*^kb_W+XoWUVxyw{jFirA2NMgp2g z7fJk_c9Q-ciVng~jX<4+)OAaYryl`j10C7bX-SSR2o6?c=nmn72J#9z697ze8PtN2 zmyLp+DUl^+t!_7bZy2D^vxIm@jziSGUJV8GA1>`;OEfTOJ?Dv!L_3It9)hZw}PoYx?A|y#Li;pbVOpj*TxX zmMiYW)qwaaW6Fh>4w$iWW;!va+{35+SrSV_&d@E4{isi&&${-*Hqq+$@a6Uh-^Kix zLq!yiLO5k3qCFzbI<2#y?nZZ37p@b%x}11Ra^S3WIS6__9WE^5oR{(@S^18}8?f!5 zp5C&=(dlHYhSD`6&|A+tD8BY)6x=;l7)^$k)>kDzATmeH(tb-GI@S z4-9?!5NyLBt^4ho50d3W=xrvK3v+?Qzy%r%C-0o=s>Z(PABcZ$Uxk_r{~h6fbQtvc zcJU+3TP5{U#>spG=iAw8sx}X|2Hp5@ffa&xI#X{cFIS?+$`5;P4dr-l3?>J*hkO6X zPd+5e`7vI~|tE)SHVeNi^^jd4x`SlGQJc9!P z>z{qf2G5o(eIYtWaVQivoMv$tE|{eJgrTao?$W>RkT9J;qiAR7{sNQDLSjBT$zjRmh9oF+_MvzwRte(D7L@F-S zx?XYj_M0n9c~kZnf%=|Uet*9YDBhg-pQnYN{n8F5Vq?XUu1_h9Bj5u#PVOYujBT1O*bJH#gsX{n0vJd8gdzaQBUlQgjuT8MxM}%__pbqxNR^ z=KpF3sTJGw+$-7tSP=f!a&tipAKn&{lbu~YJ|zHz%H%F{iKOJSQ=8+}I|&jwx(*+&Us5SB7Qi-I z$BSs%T@Zjbf?q}jy%4#hb` zheAp7VJ4Ex>KsPRVY}*oURN&o>k_eaM$2| z1XxE|N6KNPI+_hjXV@Kr_UPKpQ36_7bg$$ykJ66!L^rO*HRCOxwm)Fe3HfwAokDHT zkSv-$lw+=Q2hA;Uf2#gyiNsoV^K}TyvubZ{a{8p9nifXRxR9NO^J=tif?J22jt+}_ zGi1d|fo!zjJxtV}%jTGu%TzgEq&V6isxL}o>|g4AfaLsZ=5Xz;&!KcwB=~x0sCeGl zh!kP)oe2}8`n9*AqnTDFD2E6y61Dv!7`?2Y;(ho_r=A@%Qyn2ak=k)_GGDjo2^`Oe z5h+<~#Zu~Ob3goZe92tXnDLWd#JP*)>M8p(vHqloYY{t1IMzoQA5pkX{dc!TvvsWB zORnc~qlQ3l}SFwp>)ud@(t32>0yzTF833)=9HUD@NK?Cx|2Sr^WtK9N%JDO zy1YYfzV@7N7_smar6q&wYON^FB-V9Ujkt|P-AeHL^CidnLq{oBRR#f+EvlQIB<(Qn zN2_WABg$5wCC9QuIQa^%b$ZZEWts{Rld_+NT;=5C{0ZWeOwR*@Bxa9xe0|#+%iyVo z-lfFLA;fa4E-RTzn<-cY)1p-pB;=Rik?aV}3vPV89&MA51RrB3=81aQ!5*?^XM*3_ zjr*SP71bB7t03hRVZ_z~VGelzvz?O`TDQi;NcZ9l){`nDLtWN?Rz`|;2-zp1$t<75 zEU1XaYQ|jcsPi@f)kglYb9#E;^HLM{dGv}L$0+9R^<>EBSd`14U8Jbmc;$8Y{w(zM zV2{w7&oHs#&;IZby_3O6-!#8vbpygXgNA<>%BgyJJJQ{w*)yiC>_(s^}xMjdc&z7ow%lbVs1AjTR8e>QRVFi${q9ybz4DHbb@ffR zZwOM!d!ja69D`Q33Are{9;VBpNEsBO&gH8-lBWmEnw zu1FuO%et;Gh38w@EtdJj(D~-0ZM{`G>w`*1%r=c#$+HMr(W`p{wbXH3uMn<6#~q4dbXg30cjtga#B zB(I)Z599{lUgM4AY#6sr!{v#hx2GwXQ$HBjUXNkfstl~yd1*Brygg=pNH#vP4T8_G)DYF1t#H(2iBGw9FfRw7@(a|HBxXOgq!2 z9@d7y3W0l8#O-JdRORSfe7!p%e-8FKp+O#T&Qzpr-HuHM`L#VQ;WD6Z(*@_XV(dm8 zFrB3QoQ5B1G+gUnWZ15JDoPmh@8%*wZhEu-W;Q)dk(`;l#Gb7)zk}%7=z+{BX|+>$ zf>L<(*Y^9Pfi#9Bt2y5gsoOZvC2(h!P?DBj3>cTiK~)?dW9L?7Mktvehjjo@f6nt#uTR5-25 z#p3IgX;3lI_Cexj@MyL=i%X>pVUPnrsv9r0-fL3by{<%RAj2VUmW=*6+BqJe#01h1 z*StUjT`}%QX?t}T@x%9;o`ZRcUw_(SEq|8DJY=&pd~e3NW)1@NnCPyLT|MV%f1`?^>#SBM9f>2dNubNt7*&d<4%(*NV;Zd=6Us4Y0hpeeKJa0zahGH zZ~j*sLhs6h+%KDIG3MnBAv87&+8uZVHkFhZsXDx`zxO2jrkvRG&6clUvyG9zzb;CU zhj^(xw0!s^f2Fh`oH^~Ca8hQA73NGPc2SSwA~`+MQW@fZcMg*%r=K_n%_o7N*>vKS z5!bKyXqZ4ct8&M_HS13k(vR*O+ma{q&;_Qb_1RUkOb@;EErri#IEc7LSql*4r>fT=nV@^Jz&6ykU1;_9}p9`-Rwx0P0| zi}+p+y!d3x?=MFu)9OrnJtygcXZuCKhG(14<;wGwfA(cNtfFlzoQ#fQmr{q8rC(%-MFgOz8Akji67q$ zD|E!Pv~N}T)F{XNw!1hRl*hQ6?KsEHKcKWRmtUDFJZbF?B@9&5PyElIY`tlh+Xs4i z@$FFVD)WjPsE&5mKWVa5^Te$&nysHW!cduC$)?cRWfWT>*PApG(?Bm<9UsLw{GeL0 zp`5d()BdN7m3t_p@#S~vZ!fdsq6@;6o_T7o-j3k835m(ICef_D0lsa0sMM|ar&{q? zB$Yb%P{OfRD1^hE&E;13c9!gX`4{4puKk&b6kVjeK@|R>cQ4*t4NNk2$!0Q|7@hGH zdi>LdDQ9TpwbK$UpKUzr+KM;Fb4Zsw-o-oncX^y#EC`{Fk%Rgj&v6&sah5>b$zST+ zpA%>m-11l&OrrPN-`s0qv9K;~qX1JUyNgU?upgIG!~FBi?5rPA6nSg`Y&+sdCT32} zCN+WO|A-QQ^i?5VC!zlQ46~^?>Qw4gl*rU_{rP61p!~qRKJ!gKi+Q8(d&-WGrrcH! z&pV7ae-Dm;9uzF|6n>{o$n@%!Gm_kVcmJ$qGbrI+^+-?l97r*{XWSxsCFGplSLqs` z^{#CC%NH-_#!5ok{W*{r95K|8`2J{bWKH*LUd>>pMth7tpdkgs+{4j+D7s;;+eo#h z|9`xsxS>WCz_#F%dg&f(DO6S%=RGLfi$SCN*Ti&L`p_m|UE{{ka2N4CYWfe6yN2Gr zdH3pSWt=~956BC9K-YH(T5P9Zh8HtL;;mk-vCQf3-rfodm9C2LY;rzuD>k0g@@@I6014$T(!vFe9Q5PQV{k#k&fh I Ui : User input @@ -33,47 +34,53 @@ activate ReviewCommand ReviewCommand -> FlashcardList : getFlashCards() activate FlashcardList -FlashcardList --> ReviewCommand : fullFlashcardList : ArrayList -activate fullFlashcardList +create FlashcardQueue +FlashcardList -> FlashcardQueue : FlashcardQueue() +activate FlashcardQueue +FlashcardQueue --> FlashcardList +FlashcardList --> ReviewCommand deactivate FlashcardList -loop until fullFlashcardList has been fully iterated - ReviewCommand -> Flashcard : isDueBeforeToday() - activate Flashcard - opt ReviewCommand -> Flashcard : isDueBeforeToday() == True - Flashcard -> ReviewCommand : reviewCurrentFlashcard(display, flashcard) - loop while !isCurrentCardPassed - ReviewCommand -> Ui : printlnSeveralStrings("Question for the current flashcard is:", flashcard.getQuestion()) - Ui -> Flashcard : getQuestion - Flashcard --> Ui +alt flashcardQueue.isEmpty() + ReviewCommand -> Ui : printlnSeveralStrings("There are no cards available for review today.") + Ui -> ReviewCommand +else + ReviewCommand -> Ui : printlnSeveralStrings("There are %d cards available for review today.", flashcardQueue.size()) + Ui -> FlashcardQueue : size() + FlashcardQueue --> Ui : String + loop while (!flashcardQueue.isEmpty()) + + ReviewCommand -> FlashcardQueue : popFlashcard() + FlashcardQueue --> ReviewCommand : Flashcard + activate Flashcard + ReviewCommand -> Flashcard : getQuestion() + Flashcard --> ReviewCommand + ReviewCommand -> Ui : getUserCommand() + Ui --> ReviewCommand + ReviewCommand -> Flashcard : getAnswer() + Flashcard --> ReviewCommand + ReviewCommand -> Ui : getUserCommand() + Ui --> ReviewCommand : answerIfCorrect : String + + alt answerIfCorrect.equals("y") + ReviewCommand -> Ui :printlnSeveralStrings("Great, you got it right!") Ui --> ReviewCommand - ReviewCommand -> Ui : getUserCommand() + ReviewCommand -> Flashcard : updateDueDateAfterCorrectAnswer() + Flashcard --> ReviewCommand + else answerIfCorrect.equals("n") + ReviewCommand -> Ui : printlnSeveralStrings("No worries, we will try again later today.") Ui --> ReviewCommand - ReviewCommand -> Ui : printlnSeveralStrings(flashcard.getAnswer(), "Have you got this correct?"); - Ui -> Flashcard : getAnswer() - Flashcard --> Ui + ReviewCommand -> Flashcard : updateDueDateAfterIncorrectAnswer() + Flashcard --> ReviewCommand + ReviewCommand -> FlashcardQueue : pushFlashcard(currentFlashcard) + FlashcardQueue -> ReviewCommand + else + ReviewCommand -> Ui : printInvalidInput() Ui --> ReviewCommand - ReviewCommand -> Ui : getUserCommand() - Ui --> ReviewCommand : answerIfCorrect : String - alt answerIfCorrect.equals("yes") || answerIfCorrect.equals("y") - ReviewCommand -> Ui :printlnSeveralStrings("Great, you got it right!") - Ui --> ReviewCommand - ReviewCommand -> Flashcard : updateDueDateAfterCorrectAnswer() - Flashcard --> ReviewCommand - ReviewCommand -> ReviewCommand : isCurrentCardPassed = true - else answerIfCorrect.equals("n") - ReviewCommand -> Ui : printlnSeveralStrings("No worries, we will try it next time.") - Ui --> ReviewCommand - ReviewCommand -> Flashcard : updateDueDateAfterIncorrectAnswer() - Flashcard --> ReviewCommand - ReviewCommand -> ReviewCommand : isCurrentCardPassed = true - else - ReviewCommand -> Ui : printInvalidInput() - Ui --> ReviewCommand end - deactivate Flashcard + deactivate Flashcard end -destroy fullFlashcardList + destroy FlashcardQueue end ReviewCommand -> Ui : printlnSeveralStrings("Congrats! You have reviewed all the flashcards due today!") From 9d97a4476c85bdda426c246dfb172b7785a8e242 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Wed, 29 Mar 2023 22:54:20 +0800 Subject: [PATCH 119/174] Changed test --- text-ui-test/EXPECTED.TXT | 1 - 1 file changed, 1 deletion(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 7e5a6608e7..db8dab5b8e 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,4 +1,3 @@ -Some flashcards are formatted incorrectly, they will be deleted. Welcome to Clanki! Time to start studying! You have added the following card: Q: Q1 From c36f21f6437e7d70e24cf6c03165d32785d250f4 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Sat, 1 Apr 2023 14:55:17 +0800 Subject: [PATCH 120/174] Update user guide with more clarifications Signed-off-by: Vu Van Dung --- docs/UserGuide.md | 100 ++++++++++++++++++++++++++++------------------ 1 file changed, 61 insertions(+), 39 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 9659f00191..3553442608 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -1,29 +1,39 @@ # Clanki User Guide -Clanki is a command-line interface (CLI) application for managing -flashcards. It allows users to create, manage and study flashcards -to assist them with memorisation by using a technique called +Clanki is a command-line interface (CLI) application for managing flashcards. It +allows users to create, manage and study flashcards to assist them with +memorisation by using a technique called [spaced repetition](https://en.wikipedia.org/wiki/Spaced_repetition). ## Quick start 1. Ensure you have Java 11 or above installed. -2. Download the latest version of Clanki from [here](https://github.com/AY2223S2-CS2113-T15-4/tp/releases/tag/v1.0). + +2. Download the latest version of Clanki from + [here](https://github.com/AY2223S2-CS2113-T15-4/tp/releases). + 3. Copy the file to the folder you want to use as the home folder for Clanki. -4. Open a command terminal, `cd` into the folder you put the jar file in, and use the `java -jar clanki.jar` - command to run the application. - You should be greeted with `Welcome to Clanki! Time to start studying!` after a few seconds. -5. Type the command in the command box and press Enter to execute it. - Some example commands you can try: - - `add /q What is the worst fruit? /a Durian`: Add a flashcard with Question: What is the worst fruit? - and Answer: Durian to the list of flashcards. - - `review`: Go through the flashcards that are due today. - - `bye`: Exit the app. + +4. Open a command terminal, `cd` into the folder you put the jar file in, and + use the `java -jar clanki.jar` command to run the application. You should be + greeted with `Welcome to Clanki! Time to start studying!` after a few + seconds. + +5. Type the command in the command box and press Enter to execute it. Some + example commands you can try: + + - `add /q What is the worst fruit? /a Durian`: Add a flashcard with Question: + What is the worst fruit? and Answer: Durian to the list of flashcards. + + - `review`: Go through the flashcards that are due today. + + - `bye`: Exit the app. + 6. Refer to the Features below for details of each command. ## Features -> Square brackets indicate optional sections of the symtax. +> Square brackets indicate optional sections of the syntax. ### Adding a flashcard @@ -31,8 +41,20 @@ to assist them with memorisation by using a technique called add /q QUESTION /a ANSWER ``` -- `QUESTION` will be displayed when reviewing. For how the - reviewing process works, see "Review flashcards" section below. +- `QUESTION` will be displayed when reviewing. For how the reviewing process + works, see "Review flashcards" section below. + +- Since a slash character (`/`) can be intepreted as a command option, both + `QUESTION` and `ANSWER` must not start with `/` or includes ` /` (the slash + with a space before it). + + - Deal with it. We make the rules. + + - We might fix this in a future version. A very, very distant future version. + +- `/q QUESTION` and `/a ANSWER` can be arranged in any order. + +- If any options are duplicated, all but the last one are ignored. #### Example @@ -49,25 +71,21 @@ A: Durian review ``` -- Flashcards that are due on the day will be displayed one after - another, queued in a randomised order. - -- When the user has recalled the answer for a card, or has given - up on doing so, they can then press Enter. +- Flashcards that are due on the day will be displayed one after another, queued + in a randomised order. -- The app will then show the answer and ask the user if they got - it right. They can then type `y`/`n` to indicate that they remembered - the answer correctly, or they couldn't remember the correct answer, - respectively. +- When the user has recalled the answer for a card, or has given up on doing so, + they can then press Enter. - * If `y` is indicated, the card is then set to a new due date +- The app will then show the answer and ask the user if they got it right. They + can then type `y`/`n` to indicate that they remembered the answer correctly, + or they couldn't remember the correct answer, respectively. - in the future. + - If `y` is indicated, the card is then set to a new due date in the future. - * Otherwise, the card is pushed back to the today's - - queue for reviewing later, until the user can get it correct. When - the user has got it correct, the new date is set to tomorrow. + - Otherwise, the card is pushed back to the today's queue for reviewing later, + until the user can get it correct. When the user has got it correct, the new + date is set to tomorrow. - Then the review session continues with the next card in the queue. @@ -103,16 +121,20 @@ update /q QUERY - `QUERY` can be part of the card's question or answer. -- A list of cards that contain this query will be listed, with an - index assigned to each. +- A list of cards that contain this query will be listed, with an index assigned + to each. -- The user can then type the index of the card they wish to update - with the following syntax +- The user can then type the index of the card they wish to update with the + following syntax ``` INDEX [/q NEW_QUESTION] [/a NEW_ANSWER] [/d NEW_DUE_DATE] ``` + - Since a slash character (`/`) can be intepreted as a command option, + `QUESTION`, `ANSWER` and `NEW_DUE_DATE` must not start with `/` or includes + ` /` (the slash with a space before it). + #### Example ``` @@ -141,11 +163,11 @@ delete /q QUERY - `QUERY` can be part of the card's question or answer. -- A list of cards that contain this query will be listed, with an - index assigned to each. +- A list of cards that contain this query will be listed, with an index assigned + to each. -- The user can then type the index of the card they wish to delete. - The card with that index (on that list) is then deleted. +- The user can then type the index of the card they wish to delete. The card + with that index (on that list) is then deleted. #### Example From 105da85066807a8b57b612f86b4f772575f8390a Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Sat, 1 Apr 2023 15:06:10 +0800 Subject: [PATCH 121/174] Detect wrong y/n in review answer Signed-off-by: Vu Van Dung --- .../com/clanki/commands/ReviewCommand.java | 25 +++++++++++-------- text-ui-test/EXPECTED.TXT | 20 +++++++++------ text-ui-test/input.txt | 2 ++ 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/clanki/commands/ReviewCommand.java b/src/main/java/com/clanki/commands/ReviewCommand.java index 0dd384e9b8..93a8e60902 100644 --- a/src/main/java/com/clanki/commands/ReviewCommand.java +++ b/src/main/java/com/clanki/commands/ReviewCommand.java @@ -21,17 +21,22 @@ public void execute(FlashcardList flashcardList, Ui display) { System.out.printf("Q: %s (ENTER to view answer)", currentFlashcard.getQuestion()); display.getUserCommand(); display.printlnSeveralStrings(String.format("A: %s", currentFlashcard.getAnswer())); + String answerIfCorrect; System.out.print("Did you get it right? (y/n) "); - String answerIfCorrect = display.getUserCommand().toLowerCase(); - if (answerIfCorrect.equals("y")) { - display.printlnSeveralStrings("Great, you got it right!"); - currentFlashcard.updateDueDateAfterCorrectAnswer(); - } else if (answerIfCorrect.equals("n")) { - display.printlnSeveralStrings("No worries, we will try again later today."); - currentFlashcard.updateDueDateAfterIncorrectAnswer(); - flashcardQueue.pushFlashcard(currentFlashcard); - } else { - display.printInvalidInput(); + while (true) { + answerIfCorrect = display.getUserCommand().toLowerCase(); + if (answerIfCorrect.equals("y")) { + display.printlnSeveralStrings("Great, you got it right!"); + currentFlashcard.updateDueDateAfterCorrectAnswer(); + break; + } else if (answerIfCorrect.equals("n")) { + display.printlnSeveralStrings("No worries, we will try again later today."); + currentFlashcard.updateDueDateAfterIncorrectAnswer(); + flashcardQueue.pushFlashcard(currentFlashcard); + break; + } else { + System.out.print("Please enter 'y' or 'n': (y/n) "); + } } } display.printlnSeveralStrings("---", diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index db8dab5b8e..6ab0344cdd 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -5,29 +5,33 @@ A: A1 You have added the following card: Q: Q1 A: A1 -Found 2 cards with the query "q1": +Found 3 cards with the query "q1": [1] Q: Q1 A: A1 -D: 2023-03-29 +D: 2023-04-02 [2] Q: Q1 A: A1 -D: 2023-03-29 +D: 2023-04-01 +[3] +Q: Q1 +A: A1 +D: 2023-04-01 Which flashcard do you want to update? Understood. The card has been updated to Q: Q2 A: A1 -D: 2023-03-29 +D: 2023-04-01 There are 2 cards available for review today. --- -Q: Q1 (ENTER to view answer)A: A1 +Q: Q2 (ENTER to view answer)A: A1 Did you get it right? (y/n) Great, you got it right! --- -Q: Q2 (ENTER to view answer)A: A1 -Did you get it right? (y/n) No worries, we will try again later today. +Q: Q1 (ENTER to view answer)A: A1 +Did you get it right? (y/n) Please enter 'y' or 'n': (y/n) Please enter 'y' or 'n': (y/n) No worries, we will try again later today. --- -Q: Q2 (ENTER to view answer)A: A1 +Q: Q1 (ENTER to view answer)A: A1 Did you get it right? (y/n) Great, you got it right! --- Congrats! You have reviewed all the flashcards due today! diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index b012319c16..8d5df9f7a2 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -6,6 +6,8 @@ review y + +blah n y From fd7b5f5ec2e988fc78b06aa8cbb0bed2a5d0837f Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Sat, 1 Apr 2023 15:08:07 +0800 Subject: [PATCH 122/174] Fix wrong EXPECTED.txt Signed-off-by: Vu Van Dung --- text-ui-test/EXPECTED.TXT | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 6ab0344cdd..15d3812f11 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -5,16 +5,12 @@ A: A1 You have added the following card: Q: Q1 A: A1 -Found 3 cards with the query "q1": +Found 2 cards with the query "q1": [1] Q: Q1 A: A1 -D: 2023-04-02 -[2] -Q: Q1 -A: A1 D: 2023-04-01 -[3] +[2] Q: Q1 A: A1 D: 2023-04-01 @@ -25,13 +21,13 @@ A: A1 D: 2023-04-01 There are 2 cards available for review today. --- -Q: Q2 (ENTER to view answer)A: A1 +Q: Q1 (ENTER to view answer)A: A1 Did you get it right? (y/n) Great, you got it right! --- -Q: Q1 (ENTER to view answer)A: A1 +Q: Q2 (ENTER to view answer)A: A1 Did you get it right? (y/n) Please enter 'y' or 'n': (y/n) Please enter 'y' or 'n': (y/n) No worries, we will try again later today. --- -Q: Q1 (ENTER to view answer)A: A1 +Q: Q2 (ENTER to view answer)A: A1 Did you get it right? (y/n) Great, you got it right! --- Congrats! You have reviewed all the flashcards due today! From 356f7f19ab9e7b3e56e4dd4abd683302f714ebb2 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Mon, 3 Apr 2023 09:28:24 +0800 Subject: [PATCH 123/174] Reformatted command for "delete" function --- src/main/java/com/clanki/parser/Parser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index d0314ea469..62224b0fe9 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -49,7 +49,7 @@ public static Command parseCommandStrict(String userInput) return getReviewCommand(parsedInput); case "update": return getUpdateCommand(parsedInput); - case "del": + case "delete": return getDeleteCommand(parsedInput); case "bye": return getByeCommand(parsedInput); From 185c3da8028ed8badb9294bcdafe6552288bf99c Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Mon, 3 Apr 2023 09:59:55 +0800 Subject: [PATCH 124/174] Updated ParserTest for delete command --- src/test/java/com/clanki/parser/ParserTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index 2b6bfde435..9dabcf1772 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -80,7 +80,7 @@ public void parserUpdateCommand_updateCommand_successful() { @Test public void parserDeleteCommand_deleteCommand_successful() { - Command parsedCommand = Parser.parseCommand("del query"); + Command parsedCommand = Parser.parseCommand("delete query"); assertTrue(parsedCommand instanceof DeleteCommand); } } From dd8b8c8e0b7315b1b053f1be0d0593e2ff3697ac Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 3 Apr 2023 10:05:43 +0800 Subject: [PATCH 125/174] Remove magic strings in storage related codes --- .../com/clanki/storage/FlashcardListDecoder.java | 15 ++++++++++----- .../com/clanki/storage/FlashcardListEncoder.java | 14 ++++++++++---- src/main/java/com/clanki/storage/StorageFile.java | 3 ++- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/clanki/storage/FlashcardListDecoder.java b/src/main/java/com/clanki/storage/FlashcardListDecoder.java index 7f62207691..122ed41273 100644 --- a/src/main/java/com/clanki/storage/FlashcardListDecoder.java +++ b/src/main/java/com/clanki/storage/FlashcardListDecoder.java @@ -19,6 +19,11 @@ public class FlashcardListDecoder { Pattern.compile("q/(?[^/]+)" + " a/(?[^/]+)" + " d/(?[^/]+)" + " p/(?[^/]+)"); + public static final String ENCODED_FLASHCARD_IN_INVALID_FORMAT_UNABLE_TO_DECODE = "Encoded flashcard in invalid format. Unable to decode."; + public static final String GROUP_QUESTION = "question"; + public static final String GROUP_ANSWER = "answer"; + public static final String GROUP_DUE_DATE = "dueDate"; + public static final String GROUP_CURRENT_PERIOD = "currentPeriod"; /** @@ -32,7 +37,7 @@ public static ArrayList decodeFlashcardList(List encodedFlash try { decodedFlashcard.add(decodeFlashcardFromString(encodedFlashcard)); } catch (StorageOperationException e) { - System.out.println("Some flashcards are formatted incorrectly, they will be deleted."); + System.out.println("A flashcard is formatted incorrectly, they will be deleted."); } } return decodedFlashcard; @@ -47,12 +52,12 @@ private static Flashcard decodeFlashcardFromString(String encodedFlashcard) throws StorageOperationException { final Matcher matcher = FLASHCARD_ARGS_FORMAT.matcher(encodedFlashcard); if (!matcher.matches()) { - throw new StorageOperationException("Encoded person in invalid format. Unable to decode."); + throw new StorageOperationException(ENCODED_FLASHCARD_IN_INVALID_FORMAT_UNABLE_TO_DECODE); } - return new Flashcard(matcher.group("question"), matcher.group("answer"), - LocalDate.parse(matcher.group("dueDate")), - Integer.parseInt(matcher.group("currentPeriod")) + return new Flashcard(matcher.group(GROUP_QUESTION), matcher.group(GROUP_ANSWER), + LocalDate.parse(matcher.group(GROUP_DUE_DATE)), + Integer.parseInt(matcher.group(GROUP_CURRENT_PERIOD)) ); } diff --git a/src/main/java/com/clanki/storage/FlashcardListEncoder.java b/src/main/java/com/clanki/storage/FlashcardListEncoder.java index 02a9a7d3d0..0e42133bff 100644 --- a/src/main/java/com/clanki/storage/FlashcardListEncoder.java +++ b/src/main/java/com/clanki/storage/FlashcardListEncoder.java @@ -12,6 +12,12 @@ * https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/storage/AddressBookEncoder.java */ public class FlashcardListEncoder { + + public static final String QUESTION_APPEND = "q/"; + public static final String ANSWER_APPEND = " a/"; + public static final String DUE_DATE_APPEND = " d/"; + public static final String PERIOD_APPEND = " p/"; + /** * Encodes all the {@code Flashcards} in the {@code toSave} into a list of decodable and readable * string presentation for storage. @@ -28,12 +34,12 @@ public static List encodeAddressBook(FlashcardList toSave) { private static String encodeFlashcardToString(Flashcard flashcard) { final StringBuilder encodedFlashcardBuilder = new StringBuilder(); - encodedFlashcardBuilder.append("q/").append(flashcard.getQuestion()); - encodedFlashcardBuilder.append(" a/").append(flashcard.getAnswer()); + encodedFlashcardBuilder.append(QUESTION_APPEND).append(flashcard.getQuestion()); + encodedFlashcardBuilder.append(ANSWER_APPEND).append(flashcard.getAnswer()); - encodedFlashcardBuilder.append(" d/").append(flashcard.getDueDate().toString()); + encodedFlashcardBuilder.append(DUE_DATE_APPEND).append(flashcard.getDueDate().toString()); - encodedFlashcardBuilder.append(" p/").append(flashcard.getCurrentPeriodInDays()); + encodedFlashcardBuilder.append(PERIOD_APPEND).append(flashcard.getCurrentPeriodInDays()); return encodedFlashcardBuilder.toString(); } diff --git a/src/main/java/com/clanki/storage/StorageFile.java b/src/main/java/com/clanki/storage/StorageFile.java index 0afe084f11..dd1f4ded69 100644 --- a/src/main/java/com/clanki/storage/StorageFile.java +++ b/src/main/java/com/clanki/storage/StorageFile.java @@ -24,6 +24,7 @@ public class StorageFile { * Default file path used if the user doesn't provide the file name. */ public static final String DEFAULT_STORAGE_FILEPATH = "flashcardList.txt"; + public static final String FILE_END_STRING = ".txt"; public final Path path; @@ -50,7 +51,7 @@ public StorageFile(String filePath) throws InvalidStorageFilePathException { * The file path is considered acceptable if it ends with '.txt' */ private static boolean isValidPath(Path filePath) { - return filePath.toString().endsWith(".txt"); + return filePath.toString().endsWith(FILE_END_STRING); } /** From 5a3500d3f98558e42c1f19bcf8d91373bbcf37ab Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 3 Apr 2023 10:06:27 +0800 Subject: [PATCH 126/174] Removed logging, fix issue of error message appearing twice --- src/main/java/com/clanki/commands/AddCommand.java | 4 +--- src/main/java/com/clanki/commands/VoidCommand.java | 11 +++++++++++ src/main/java/com/clanki/parser/Parser.java | 13 +++++++------ 3 files changed, 19 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/clanki/commands/VoidCommand.java diff --git a/src/main/java/com/clanki/commands/AddCommand.java b/src/main/java/com/clanki/commands/AddCommand.java index 41bc8a9f1e..3577a6d679 100644 --- a/src/main/java/com/clanki/commands/AddCommand.java +++ b/src/main/java/com/clanki/commands/AddCommand.java @@ -11,7 +11,7 @@ * of flashcards. */ public class AddCommand extends Command { - private static Logger logger = Logger.getLogger("AddCommand"); + //private static Logger logger = Logger.getLogger("AddCommand"); String questionText; String answerText; @@ -32,9 +32,7 @@ public String toString() { @Override public void execute(FlashcardList flashcardList, Ui display) { - logger.log(Level.INFO, "Start to add new flashcard to list of flashcards."); flashcardList.addNewFlashcard(questionText, answerText); - logger.log(Level.INFO, "Start to print when flashcard successfully added."); display.printSuccessfulAddMessage(questionText, answerText); } } diff --git a/src/main/java/com/clanki/commands/VoidCommand.java b/src/main/java/com/clanki/commands/VoidCommand.java new file mode 100644 index 0000000000..b44c0595e2 --- /dev/null +++ b/src/main/java/com/clanki/commands/VoidCommand.java @@ -0,0 +1,11 @@ +package com.clanki.commands; + +import com.clanki.objects.FlashcardList; +import com.clanki.ui.Ui; + +public class VoidCommand extends Command { + @Override + public void execute(FlashcardList flashcardList, Ui display) { + + } +} diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index d0314ea469..3e2467e6e2 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -7,6 +7,7 @@ import com.clanki.commands.ReviewCommand; import com.clanki.commands.UnknownCommand; import com.clanki.commands.UpdateCommand; +import com.clanki.commands.VoidCommand; import com.clanki.exceptions.EmptyFlashcardAnswerException; import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; @@ -18,7 +19,7 @@ public class Parser { private static final String QUESTION_OPTION_IDENTIFIER = "q"; private static final String ANSWER_OPTION_IDENTIFIER = "a"; - private static Logger logger = Logger.getLogger("Parser"); + //private static Logger logger = Logger.getLogger("Parser"); public static Command parseCommand(String userInput) { try { @@ -33,7 +34,7 @@ public static Command parseCommand(String userInput) { } catch (NoQueryInInputException e) { System.out.println("Please enter a query to be searched in the list of flashcards."); } - return new UnknownCommand(); + return new VoidCommand(); } public static Command parseCommandStrict(String userInput) @@ -75,19 +76,19 @@ public static Command parseCommandStrict(String userInput) public static AddCommand getAddCommand(ParsedInput parsedInput) throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, EmptyFlashcardAnswerException { - logger.log(Level.INFO, "Start to parse input to obtain question text."); + //logger.log(Level.INFO, "Start to parse input to obtain question text."); String questionText = parsedInput.getOptionByName(QUESTION_OPTION_IDENTIFIER); - logger.log(Level.INFO, "Start to parse input to obtain answer text."); + //logger.log(Level.INFO, "Start to parse input to obtain answer text."); String answerText = parsedInput.getOptionByName(ANSWER_OPTION_IDENTIFIER); if (questionText == null || answerText == null) { throw new InvalidAddFlashcardInputException(); } if (questionText.isEmpty()) { - logger.log(Level.INFO, "No input at question text detected."); + //logger.log(Level.INFO, "No input at question text detected."); throw new EmptyFlashcardQuestionException(); } if (answerText.isEmpty()) { - logger.log(Level.INFO, "No input at answer text detected."); + //logger.log(Level.INFO, "No input at answer text detected."); throw new EmptyFlashcardAnswerException(); } return new AddCommand(questionText, answerText); From c29bff31ca190bbec4b038e5503c383414da3e76 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 3 Apr 2023 11:02:24 +0800 Subject: [PATCH 127/174] Add help command and update display to look nicer --- src/main/java/com/clanki/Clanki.java | 2 ++ .../java/com/clanki/commands/AddCommand.java | 3 -- .../java/com/clanki/commands/HelpCommand.java | 11 ++++++ src/main/java/com/clanki/parser/Parser.java | 5 +-- .../clanki/storage/FlashcardListDecoder.java | 3 +- src/main/java/com/clanki/ui/Ui.java | 35 ++++++++++++++----- text-ui-test/EXPECTED.TXT | 15 ++++++-- 7 files changed, 57 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/clanki/commands/HelpCommand.java diff --git a/src/main/java/com/clanki/Clanki.java b/src/main/java/com/clanki/Clanki.java index 658b9be9a4..904e06f8bb 100644 --- a/src/main/java/com/clanki/Clanki.java +++ b/src/main/java/com/clanki/Clanki.java @@ -20,6 +20,7 @@ public Clanki() { storageFile = new StorageFile(); this.flashcardList = new FlashcardList(storageFile.load()); ui.printWelcomeMessage(); + ui.printSeparationLine(); } catch (InvalidStorageFilePathException | StorageOperationException e) { System.out.println(e.getMessage()); } @@ -42,6 +43,7 @@ public void run() { if (command instanceof ByeCommand) { return; } + ui.printSeparationLine(); } } } diff --git a/src/main/java/com/clanki/commands/AddCommand.java b/src/main/java/com/clanki/commands/AddCommand.java index 3577a6d679..a208913116 100644 --- a/src/main/java/com/clanki/commands/AddCommand.java +++ b/src/main/java/com/clanki/commands/AddCommand.java @@ -3,9 +3,6 @@ import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; -import java.util.logging.Level; -import java.util.logging.Logger; - /** * A type of command that will instruct to add a new element into the ArrayList * of flashcards. diff --git a/src/main/java/com/clanki/commands/HelpCommand.java b/src/main/java/com/clanki/commands/HelpCommand.java new file mode 100644 index 0000000000..5e04417a0f --- /dev/null +++ b/src/main/java/com/clanki/commands/HelpCommand.java @@ -0,0 +1,11 @@ +package com.clanki.commands; + +import com.clanki.objects.FlashcardList; +import com.clanki.ui.Ui; + +public class HelpCommand extends Command { + @Override + public void execute(FlashcardList flashcardList, Ui display) { + display.printHelpMessage(); + } +} diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index 3e2467e6e2..22ae02585a 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -4,6 +4,7 @@ import com.clanki.commands.ByeCommand; import com.clanki.commands.Command; import com.clanki.commands.DeleteCommand; +import com.clanki.commands.HelpCommand; import com.clanki.commands.ReviewCommand; import com.clanki.commands.UnknownCommand; import com.clanki.commands.UpdateCommand; @@ -13,8 +14,6 @@ import com.clanki.exceptions.InvalidAddFlashcardInputException; import com.clanki.exceptions.NoQueryInInputException; -import java.util.logging.Level; -import java.util.logging.Logger; public class Parser { private static final String QUESTION_OPTION_IDENTIFIER = "q"; @@ -54,6 +53,8 @@ public static Command parseCommandStrict(String userInput) return getDeleteCommand(parsedInput); case "bye": return getByeCommand(parsedInput); + case "help": + return new HelpCommand(); default: return new UnknownCommand(); } diff --git a/src/main/java/com/clanki/storage/FlashcardListDecoder.java b/src/main/java/com/clanki/storage/FlashcardListDecoder.java index 122ed41273..1c64bd9a28 100644 --- a/src/main/java/com/clanki/storage/FlashcardListDecoder.java +++ b/src/main/java/com/clanki/storage/FlashcardListDecoder.java @@ -19,7 +19,8 @@ public class FlashcardListDecoder { Pattern.compile("q/(?[^/]+)" + " a/(?[^/]+)" + " d/(?[^/]+)" + " p/(?[^/]+)"); - public static final String ENCODED_FLASHCARD_IN_INVALID_FORMAT_UNABLE_TO_DECODE = "Encoded flashcard in invalid format. Unable to decode."; + public static final String ENCODED_FLASHCARD_IN_INVALID_FORMAT_UNABLE_TO_DECODE = + "Encoded flashcard in invalid format. Unable to decode."; public static final String GROUP_QUESTION = "question"; public static final String GROUP_ANSWER = "answer"; public static final String GROUP_DUE_DATE = "dueDate"; diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 1ca34e2f12..1bd1130f9e 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -10,6 +10,8 @@ * https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/ui/TextUi.java. */ public class Ui { + public static final String AFTER_COMMAND_SPACING = " "; + public static final String BEFORE_ELABORATION_SPACING = " "; private final Scanner in; // private final PrintStream out; @@ -22,13 +24,6 @@ public Ui(InputStream in, PrintStream out) { // this.out = out; } - /** - * Prompts for the command and reads the text entered by the user. Ignores - * empty, pure whitespace, and comment lines. Echos the command back to the - * user. - * - * @return command (full line) entered by the user - */ public String getUserCommand() { return in.nextLine(); } @@ -48,7 +43,8 @@ public void printWelcomeMessage() { } public void printInvalidInput() { - System.out.println("The input is in an incorrect format."); + System.out.println("The input is in an incorrect format.\n" + + "You can view our user guide or type help to see the correct formats for commands.\n"); } public void printSuccessfulDelete(int index) { @@ -65,4 +61,27 @@ public void printlnSeveralStrings(String... message) { System.out.println(m); } } + + public void printHelpMessage() { + System.out.println( + "The following are the commands you can use:\n" + + "add:" + AFTER_COMMAND_SPACING + "Adds a flashcard to the current list of flashcards.\n" + + BEFORE_ELABORATION_SPACING + "Parameters: add /q QUESTION /a ANSWER\n" + + BEFORE_ELABORATION_SPACING + "Example: add /q What is the worst fruit? /a Durian\n" + + "update: Changes the content of flashcard's question, answer or date.\n" + + BEFORE_ELABORATION_SPACING + "Parameters: update /q QUERY\n" + + BEFORE_ELABORATION_SPACING + "Example: update fruit \n" + + BEFORE_ELABORATION_SPACING + BEFORE_ELABORATION_SPACING + + "Which flashcard do you want to update? 1 /q What is the best fruit?\n" + + "delete: Removes a flashcard with specified string.\n" + + BEFORE_ELABORATION_SPACING + "Parameters: delete /q QUERY\n" + + BEFORE_ELABORATION_SPACING + "Example: delete fruit \n" + + "review: Go through all flashcards that are due today.\n" + + "bye: Exit the program.\n" + ); + } + + public void printSeparationLine() { + System.out.println("=========================================================="); + } } diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 15d3812f11..0a1d895f3a 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,24 +1,28 @@ Welcome to Clanki! Time to start studying! +========================================================== You have added the following card: Q: Q1 A: A1 +========================================================== You have added the following card: Q: Q1 A: A1 +========================================================== Found 2 cards with the query "q1": [1] Q: Q1 A: A1 -D: 2023-04-01 +D: 2023-04-03 [2] Q: Q1 A: A1 -D: 2023-04-01 +D: 2023-04-03 Which flashcard do you want to update? Understood. The card has been updated to Q: Q2 A: A1 -D: 2023-04-01 +D: 2023-04-03 +========================================================== There are 2 cards available for review today. --- Q: Q1 (ENTER to view answer)A: A1 @@ -31,5 +35,10 @@ Q: Q2 (ENTER to view answer)A: A1 Did you get it right? (y/n) Great, you got it right! --- Congrats! You have reviewed all the flashcards due today! +========================================================== The input is in an incorrect format. +You can view our user guide or type help to see the correct formats for commands. + +========================================================== Bye. Don't forget to come back later to study! + From 987f71bcc28a08d9fdbf61257b350a80f21a2f10 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 3 Apr 2023 11:02:51 +0800 Subject: [PATCH 128/174] Change UserGuide to fit the latest version --- docs/UserGuide.md | 39 +++++++++++++++-------- docs/userGuideImages/helpMenuDisplay.png | Bin 0 -> 114371 bytes 2 files changed, 26 insertions(+), 13 deletions(-) create mode 100644 docs/userGuideImages/helpMenuDisplay.png diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 11b051bdd0..e6387c898b 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -22,12 +22,12 @@ memorisation by using a technique called 5. Type the command in the command box and press Enter to execute it. Some example commands you can try: - - `add /q What is the worst fruit? /a Durian`: Add a flashcard with Question: - What is the worst fruit? and Answer: Durian to the list of flashcards. + - `add /q what is the worst fruit? /a durian`: Add a flashcard with Question: + What is the worst fruit? and Answer: Durian to the list of flashcards. - - `review`: Go through the flashcards that are due today. + - `review`: Go through the flashcards that are due today. - - `bye`: Exit the app. + - `bye`: Exit the app. 6. Refer to the Features below for details of each command. @@ -48,11 +48,12 @@ add /q QUESTION /a ANSWER `QUESTION` and `ANSWER` must not start with `/` or includes ` /` (the slash with a space before it). - - Deal with it. We make the rules. + - Deal with it. We make the rules. - - We might fix this in a future version. A very, very distant future version. + - We might fix this in a future version. A very, very distant future version. - `/q QUESTION` and `/a ANSWER` can be arranged in any order. +- The first letter of `QUESTION` and `ANSWER` are automatically capitalised. - If any options are duplicated, all but the last one are ignored. @@ -81,11 +82,11 @@ review can then type `y`/`n` to indicate that they remembered the answer correctly, or they couldn't remember the correct answer, respectively. - - If `y` is indicated, the card is then set to a new due date in the future. + - If `y` is indicated, the card is then set to a new due date in the future. - - Otherwise, the card is pushed back to the today's queue for reviewing later, - until the user can get it correct. When the user has got it correct, the new - date is set to tomorrow. + - Otherwise, the card is pushed back to the today's queue for reviewing later, + until the user can get it correct. When the user has got it correct, the new + date is set to tomorrow. - Then the review session continues with the next card in the queue. @@ -131,9 +132,9 @@ update /q QUERY INDEX [/q NEW_QUESTION] [/a NEW_ANSWER] [/d NEW_DUE_DATE] ``` - - Since a slash character (`/`) can be intepreted as a command option, - `QUESTION`, `ANSWER` and `NEW_DUE_DATE` must not start with `/` or includes - ` /` (the slash with a space before it). + - Since a slash character (`/`) can be intepreted as a command option, + `QUESTION`, `ANSWER` and `NEW_DUE_DATE` must not start with `/` or includes + ` /` (the slash with a space before it). #### Example @@ -182,6 +183,18 @@ Which one do you want to delete? 2 Understood. The card has been deleted. ``` +### Help menu + +``` +help +``` + +Display the list of possible commands the user can input. + +#### Example + +![helpMenuDisplay.png](userGuideImages%2FhelpMenuDisplay.png) + ### Exit program ``` diff --git a/docs/userGuideImages/helpMenuDisplay.png b/docs/userGuideImages/helpMenuDisplay.png new file mode 100644 index 0000000000000000000000000000000000000000..96cb0fdec6a2f4b873a2e37cb25749b5f3b5f625 GIT binary patch literal 114371 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 h75>HwqIO<>lqo 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 literal 0 HcmV?d00001 From ba994024ebcc23d09df4e296ea1c5414fc6bb908 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 3 Apr 2023 11:39:48 +0800 Subject: [PATCH 129/174] Update DeveloperGuide to include class diagram for AddCommand --- docs/DeveloperGuide.md | 4 ++++ docs/umlDiagrams/AddFlashcardClassDiagram.png | Bin 0 -> 33701 bytes .../umlDiagrams/AddFlashcardClassDiagram.puml | 20 ++++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 docs/umlDiagrams/AddFlashcardClassDiagram.png create mode 100644 docs/umlDiagrams/AddFlashcardClassDiagram.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 43236ba1fb..e4477d2791 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -11,6 +11,10 @@ original source as well} ### Add Flashcard Feature +The image below shows a partial class diagram involving only the relevant classes when an AddCommand is +created and executed: +![AddFlashcardClassDiagram.png](umlDiagrams%2FAddFlashcardClassDiagram.png) + #### Current implementation The current add flashcard allows the user to add a flashcard to the list of flashcards, diff --git a/docs/umlDiagrams/AddFlashcardClassDiagram.png b/docs/umlDiagrams/AddFlashcardClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..481f48bf703929ac474b4b20c0805137abaf1397 GIT binary patch literal 33701 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 Ui : calls > +AddCommand ..> FlashcardList : calls > +Parser ..> AddCommand : creates > +FlashcardList --> "*" Flashcard +@enduml \ No newline at end of file From 647ce66f19628b889b54e3cd7a558827c12ac848 Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 3 Apr 2023 13:20:45 +0800 Subject: [PATCH 130/174] Add PPP for SongZijin --- docs/team/songzijin.md | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 docs/team/songzijin.md diff --git a/docs/team/songzijin.md b/docs/team/songzijin.md new file mode 100644 index 0000000000..61e2defc60 --- /dev/null +++ b/docs/team/songzijin.md @@ -0,0 +1,50 @@ +# Song Zijin's Project Portfolio Page + +## Project: Clanki + +Clanki is a command line application one can use to store and update flashcards to help +them remember the relevant concepts. The user can interact with it by typing code into +their terminal. + +Given below are my contribution to the project. + +### Summary of Contributions + +- **New feature:** Added ability to add a new command + - What it does: allows the user to add a new flashcard with the specified question and answer text. + - Justification: This feature is one of the basic building block of the entire program, without it, no + other command on modifying the flashcards can work. + - Highlights: Since it is the initial step, building this feature included setting the groundwork in other basic + classes, such as creating the abstract Command class for other commands to use and FlashcardList class to + handle the flashcards that are created. JUnit test codes are also written for this feature. + - Credits: idea for the entire structure are reused from Song Zijin's individual project + (link [here](https://github.com/SongZijin/ip)), with many inspiration from + [addressbook-level2](https://github.com/se-edu/addressbook-level2). +- **New feature:** Added ability to save current state of all flashcards and load the state upon application start + - What it does: allows the user to store the previously recorded flashcards, + so that they can come back to review it in another day. + - Justification: This feature improves the product significantly, as the user can close the application + and come back in another day to review the flashcards they wish to learn. + - Highlights: The entire function consist of 3 parts, the encoder, decoder and a class that link the other two + together. The feature is also flexible when the stored data is corrupted, with the incorrectly formatted line + automatically deleted instead of crushing the whole program. + - Credits: the code is improved on the storage code from + [addressbook-level2](https://github.com/se-edu/addressbook-level2). +- **New feature:** Added a help menu + - What it does: provides the user some infomation about what are the commands they can use for this application. + - Justification: This feature improves the product, as the user is now able to use the product independently, + without the need to look up any user guide of the product. + +- **Code contributed:** + [RepoSense link](https://nus-cs2113-ay2223s2.github.io/tp-dashboard/?search=&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code~other&since=2023-02-17&tabOpen=true&tabType=authorship&zFR=false&tabAuthor=SongZijin&tabRepo=AY2223S2-CS2113-T15-4%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code&authorshipIsBinaryFileTypeChecked=false&authorshipIsIgnoredFilesChecked=false) + +- **Contributions to UG:** + - Added section under Quick Start. + - Provided initial draft to `add` function. + - Added documentation for `bye` and `help` functions. +- **Contributions to DG:** + - Added implementation details for the `add` function. + +- Other contributions: + - Reviewed pull requests, such as [#53](https://github.com/AY2223S2-CS2113-T15-4/tp/pull/53) + - Posted issues, such as [#61](https://github.com/AY2223S2-CS2113-T15-4/tp/issues/61) From c6d1eb0d065a9778994dedb1463fa7e25b72e34a Mon Sep 17 00:00:00 2001 From: Zijin Date: Mon, 3 Apr 2023 13:36:06 +0800 Subject: [PATCH 131/174] Update expected text for auto testing --- text-ui-test/EXPECTED.TXT | 1 - text-ui-test/runtest.sh | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 0a1d895f3a..e4a17e6e4b 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -41,4 +41,3 @@ You can view our user guide or type help to see the correct formats for commands ========================================================== Bye. Don't forget to come back later to study! - diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh index 1dcbd12021..811a375f4a 100755 --- a/text-ui-test/runtest.sh +++ b/text-ui-test/runtest.sh @@ -11,7 +11,7 @@ cd text-ui-test java -jar $(find ../build/libs/ -mindepth 1 -print -quit) < input.txt > ACTUAL.TXT cp EXPECTED.TXT EXPECTED-UNIX.TXT -dos2unix EXPECTED-UNIX.TXT ACTUAL.TXT +##dos2unix EXPECTED-UNIX.TXT ACTUAL.TXT diff EXPECTED-UNIX.TXT ACTUAL.TXT if [ $? -eq 0 ] then From 0ee4be1f9ceb74d2a2d0cf5d6a89397331eab520 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 4 Apr 2023 02:38:54 +0800 Subject: [PATCH 132/174] Changed code to solve bugs --- .../com/clanki/commands/UpdateCommand.java | 70 +++++++++++-------- .../UpdatedContentIsEmptyException.java | 4 ++ .../parser/InvalidIdentifierException.java | 4 ++ src/main/java/com/clanki/parser/Parser.java | 51 ++++++++++++++ 4 files changed, 99 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/clanki/exceptions/UpdatedContentIsEmptyException.java create mode 100644 src/main/java/com/clanki/parser/InvalidIdentifierException.java diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index c572c5aed2..9c34621cb5 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -1,10 +1,16 @@ package com.clanki.commands; import com.clanki.exceptions.InvalidInputException; +import com.clanki.exceptions.NoQueryInInputException; +import com.clanki.exceptions.UpdatedContentIsEmptyException; import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; +import com.clanki.parser.InvalidIdentifierException; +import com.clanki.parser.ParsedInput; +import com.clanki.parser.Parser; import com.clanki.ui.Ui; +import javax.swing.text.html.HTMLEditorKit; import java.time.LocalDate; import java.time.format.DateTimeParseException; import java.util.ArrayList; @@ -42,25 +48,19 @@ public void findFlashcard(ArrayList flashcards, String query) { } } - public int implementUpdate(ArrayList flashcards, String userText) throws InvalidInputException { - String[] userTexts = userText.split(" ", 3); - int indexInMatchList = Integer.parseInt(userTexts[0]) - 1; + public int implementUpdate(ArrayList flashcards, int indexInMatchList, String identifier, String updatedContent) { Flashcard flashcardToChange = matchingFlashcards.get(indexInMatchList); int index = flashcards.indexOf(flashcardToChange); - if (!userTexts[1].equals("/a") && !userTexts[1].equals("/q") && !userTexts[1].equals("/d")) { - throw new InvalidInputException(); + if (identifier.contains("q")) { + flashcards.get(index).setQuestion(updatedContent.substring(0, 1).toUpperCase() + + updatedContent.substring(1)); } - if (userTexts[1].contains("q")) { - flashcards.get(index).setQuestion(userTexts[2].substring(0, 1).toUpperCase() - + userTexts[2].substring(1)); + if (identifier.contains("a")) { + flashcards.get(index).setAnswer(updatedContent.substring(0, 1).toUpperCase() + + updatedContent.substring(1)); } - if (userTexts[1].contains("a")) { - flashcards.get(index).setAnswer(userTexts[2].substring(0, 1).toUpperCase() - + userTexts[2].substring(1)); - } - if (userTexts[1].contains("d")) { - String date = userTexts[2]; - LocalDate dateToChange = LocalDate.parse(date); + if (identifier.contains("d")) { + LocalDate dateToChange = LocalDate.parse(updatedContent); flashcards.get(index).setDueDate(dateToChange); } return index; @@ -75,21 +75,31 @@ public void execute(FlashcardList flashcardList, Ui display) { "Found " + matchingFlashcards.size() + " cards with the query \"" + query + "\":"); printFlashCards(matchingFlashcards); System.out.println("Which flashcard do you want to update?"); - String userText = display.getUserCommand(); - int index = 0; - try { - index = implementUpdate(flashcards, userText); - System.out.println("Understood. The card has been updated to"); - printFlashCard(flashcards.get(index)); - } catch (ArrayIndexOutOfBoundsException | InvalidInputException e) { - System.out.println("Please enter the input in the correct format as shown in the user guide."); - } catch (NumberFormatException e) { - System.out.println("Please enter the index of the flashcard you want to update."); - } catch (IndexOutOfBoundsException e) { - System.out.print("You have selected an index out of the list. "); - System.out.println("There are only " + matchingFlashcards.size() + " flashcards that match the query."); - } catch (DateTimeParseException e) { - System.out.println("Please enter the date in the format: yyyy-mm-dd"); + int checker = 0; + while (checker == 0) { + try { + String userText = display.getUserCommand(); + int indexInMatchList = Parser.getIndexForUpdateCommand(userText); + String identifier = Parser.getIdentifierForUpdateCommand(userText); + String updatedContent = Parser.parseInputForUpdateCommand(userText); + int index = implementUpdate(flashcards, indexInMatchList, identifier, updatedContent); + System.out.println("Understood. The card has been updated to"); + printFlashCard(flashcards.get(index)); + checker = 1; + } catch (InvalidIdentifierException e) { + System.out.println("You can only enter /q, /a or /d"); + } catch (UpdatedContentIsEmptyException e) { + System.out.println("Please enter the changes to be modified."); + } catch (ArrayIndexOutOfBoundsException e) { + System.out.println("Please enter the input in the correct format as shown in the user guide."); + } catch (NumberFormatException e) { + System.out.println("Please enter the index of the flashcard you want to update."); + } catch (IndexOutOfBoundsException e) { + System.out.print("You have selected an index out of the list. "); + System.out.println("There are only " + matchingFlashcards.size() + " flashcards that match the query."); + } catch (DateTimeParseException e) { + System.out.println("Please enter the date in the format: yyyy-mm-dd"); + } } } else { System.out.println("There are no flashcards with the query \"" + query + "\"."); diff --git a/src/main/java/com/clanki/exceptions/UpdatedContentIsEmptyException.java b/src/main/java/com/clanki/exceptions/UpdatedContentIsEmptyException.java new file mode 100644 index 0000000000..1b40a02fda --- /dev/null +++ b/src/main/java/com/clanki/exceptions/UpdatedContentIsEmptyException.java @@ -0,0 +1,4 @@ +package com.clanki.exceptions; + +public class UpdatedContentIsEmptyException extends Exception { +} diff --git a/src/main/java/com/clanki/parser/InvalidIdentifierException.java b/src/main/java/com/clanki/parser/InvalidIdentifierException.java new file mode 100644 index 0000000000..22b4f77514 --- /dev/null +++ b/src/main/java/com/clanki/parser/InvalidIdentifierException.java @@ -0,0 +1,4 @@ +package com.clanki.parser; + +public class InvalidIdentifierException extends Exception { +} diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index 22ae02585a..fe58f3d6df 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -13,6 +13,7 @@ import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; import com.clanki.exceptions.NoQueryInInputException; +import com.clanki.exceptions.UpdatedContentIsEmptyException; public class Parser { @@ -114,4 +115,54 @@ public static DeleteCommand getDeleteCommand(ParsedInput parsedInput) { public static ByeCommand getByeCommand(ParsedInput parsedInput) { return new ByeCommand(); } + + public static int getIndexForUpdateCommand(String userInput) { + ParsedInput parsedInput = new ParsedInput(userInput); + String index = parsedInput.getCommand(); + return Integer.parseInt(index) - 1; + } + + public static String getIdentifierForUpdateCommand(String userInput) throws InvalidIdentifierException { + String[] userTexts = userInput.split(" ", 3); + String identifier = null; + if (userTexts[1] == null) { + throw new ArrayIndexOutOfBoundsException(); + } + if (userTexts[1].equals("/q")) { + identifier = "q"; + } + if (userTexts[1].equals("/a")) { + identifier = "a"; + } + if (userTexts[1].equals("/d")) { + identifier = "d"; + } + return identifier; + } + + public static String parseInputForUpdateCommand(String userInput) throws InvalidIdentifierException, UpdatedContentIsEmptyException { + ParsedInput parsedInput = new ParsedInput(userInput); + String identifier = getIdentifierForUpdateCommand(userInput); + String updatedContent = null; + if (identifier == null) { + throw new InvalidIdentifierException(); + } + if (identifier.equals("q")) { + updatedContent = parsedInput.getOptionByName("q"); + } + if (identifier.equals("a")) { + updatedContent = parsedInput.getOptionByName("a"); + } + if (identifier.equals("d")) { + updatedContent = parsedInput.getOptionByName("d"); + } + if (updatedContent.isEmpty()) { + throw new UpdatedContentIsEmptyException(); + } + if (updatedContent == null) { + throw new InvalidIdentifierException(); + } + return updatedContent; + } + } From b44c50594861271dc2c91b72283b255c5abf8130 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 4 Apr 2023 02:41:25 +0800 Subject: [PATCH 133/174] Remove print date when updating flashcard --- src/main/java/com/clanki/commands/UpdateCommand.java | 8 ++------ .../java/com/clanki/exceptions/InvalidInputException.java | 4 ---- 2 files changed, 2 insertions(+), 10 deletions(-) delete mode 100644 src/main/java/com/clanki/exceptions/InvalidInputException.java diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 9c34621cb5..87c8dd84d2 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -1,16 +1,12 @@ package com.clanki.commands; -import com.clanki.exceptions.InvalidInputException; -import com.clanki.exceptions.NoQueryInInputException; import com.clanki.exceptions.UpdatedContentIsEmptyException; import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; import com.clanki.parser.InvalidIdentifierException; -import com.clanki.parser.ParsedInput; import com.clanki.parser.Parser; import com.clanki.ui.Ui; -import javax.swing.text.html.HTMLEditorKit; import java.time.LocalDate; import java.time.format.DateTimeParseException; import java.util.ArrayList; @@ -27,7 +23,7 @@ public UpdateCommand(String query) { public void printFlashCard(Flashcard flashcard) { System.out.println("Q: " + flashcard.getQuestion()); System.out.println("A: " + flashcard.getAnswer()); - System.out.println("D: " + flashcard.getDueDate()); +// System.out.println("D: " + flashcard.getDueDate()); } public void printFlashCards(ArrayList flashcards) { @@ -95,7 +91,7 @@ public void execute(FlashcardList flashcardList, Ui display) { } catch (NumberFormatException e) { System.out.println("Please enter the index of the flashcard you want to update."); } catch (IndexOutOfBoundsException e) { - System.out.print("You have selected an index out of the list. "); + System.out.print("You have selected an index out of the list."); System.out.println("There are only " + matchingFlashcards.size() + " flashcards that match the query."); } catch (DateTimeParseException e) { System.out.println("Please enter the date in the format: yyyy-mm-dd"); diff --git a/src/main/java/com/clanki/exceptions/InvalidInputException.java b/src/main/java/com/clanki/exceptions/InvalidInputException.java deleted file mode 100644 index 55ce936bee..0000000000 --- a/src/main/java/com/clanki/exceptions/InvalidInputException.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.clanki.exceptions; - -public class InvalidInputException extends Exception { -} From ef081f38078d6597f86d76df51110baffc7b1c0c Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 4 Apr 2023 02:45:14 +0800 Subject: [PATCH 134/174] Changed code to increase readibility --- src/main/java/com/clanki/commands/UpdateCommand.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 87c8dd84d2..828d8b3475 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -36,9 +36,13 @@ public void printFlashCards(ArrayList flashcards) { public void findFlashcard(ArrayList flashcards, String query) { for (int i = 0; i < flashcards.size(); i++) { Flashcard currentFlashcard = flashcards.get(i); - if (currentFlashcard.getQuestion().toLowerCase().contains(query.toLowerCase()) - || currentFlashcard.getAnswer().toLowerCase().contains(query.toLowerCase()) || - currentFlashcard.getDueDate().toString().equals(query)) { + if (currentFlashcard.getQuestion().toLowerCase().contains(query.toLowerCase())) { + matchingFlashcards.add(currentFlashcard); + } + if (currentFlashcard.getAnswer().toLowerCase().contains(query.toLowerCase())) { + matchingFlashcards.add(currentFlashcard); + } + if (currentFlashcard.getDueDate().toString().equals(query)) { matchingFlashcards.add(currentFlashcard); } } From 839f53d0b15686a4a63bef0ce24c4c2777ad5b22 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 4 Apr 2023 12:48:22 +0800 Subject: [PATCH 135/174] Changed expected file --- text-ui-test/EXPECTED.TXT | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index e4a17e6e4b..57b2ad5481 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,3 +1,4 @@ +A flashcard is formatted incorrectly, they will be deleted. Welcome to Clanki! Time to start studying! ========================================================== You have added the following card: @@ -12,16 +13,13 @@ Found 2 cards with the query "q1": [1] Q: Q1 A: A1 -D: 2023-04-03 [2] Q: Q1 A: A1 -D: 2023-04-03 Which flashcard do you want to update? Understood. The card has been updated to Q: Q2 A: A1 -D: 2023-04-03 ========================================================== There are 2 cards available for review today. --- From d55488350e8545460a0a35e27af1bf2ca0b7cad4 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 4 Apr 2023 12:52:17 +0800 Subject: [PATCH 136/174] Shortened code line --- src/main/java/com/clanki/commands/UpdateCommand.java | 7 ++++--- src/main/java/com/clanki/parser/Parser.java | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 828d8b3475..05ef3c5a7a 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -23,7 +23,6 @@ public UpdateCommand(String query) { public void printFlashCard(Flashcard flashcard) { System.out.println("Q: " + flashcard.getQuestion()); System.out.println("A: " + flashcard.getAnswer()); -// System.out.println("D: " + flashcard.getDueDate()); } public void printFlashCards(ArrayList flashcards) { @@ -48,7 +47,8 @@ public void findFlashcard(ArrayList flashcards, String query) { } } - public int implementUpdate(ArrayList flashcards, int indexInMatchList, String identifier, String updatedContent) { + public int implementUpdate(ArrayList flashcards, int indexInMatchList, String identifier, + String updatedContent) { Flashcard flashcardToChange = matchingFlashcards.get(indexInMatchList); int index = flashcards.indexOf(flashcardToChange); if (identifier.contains("q")) { @@ -96,7 +96,8 @@ public void execute(FlashcardList flashcardList, Ui display) { System.out.println("Please enter the index of the flashcard you want to update."); } catch (IndexOutOfBoundsException e) { System.out.print("You have selected an index out of the list."); - System.out.println("There are only " + matchingFlashcards.size() + " flashcards that match the query."); + System.out.println("There are only " + matchingFlashcards.size() + + " flashcards that match the query."); } catch (DateTimeParseException e) { System.out.println("Please enter the date in the format: yyyy-mm-dd"); } diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index fe58f3d6df..8a199a69f2 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -140,7 +140,8 @@ public static String getIdentifierForUpdateCommand(String userInput) throws Inva return identifier; } - public static String parseInputForUpdateCommand(String userInput) throws InvalidIdentifierException, UpdatedContentIsEmptyException { + public static String parseInputForUpdateCommand(String userInput) throws InvalidIdentifierException, + UpdatedContentIsEmptyException { ParsedInput parsedInput = new ParsedInput(userInput); String identifier = getIdentifierForUpdateCommand(userInput); String updatedContent = null; From b1c6e6be668186841893ad40d3bca359385faad2 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 4 Apr 2023 13:00:56 +0800 Subject: [PATCH 137/174] Update code --- text-ui-test/EXPECTED.TXT | 1 - text-ui-test/input.txt | 1 - 2 files changed, 2 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 57b2ad5481..502398b4aa 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,4 +1,3 @@ -A flashcard is formatted incorrectly, they will be deleted. Welcome to Clanki! Time to start studying! ========================================================== You have added the following card: diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 8d5df9f7a2..5229aa91c6 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -6,7 +6,6 @@ review y - blah n From 0f1d16e1dd5271bdb4cd1ccb5ff5d43aefbbbe21 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 4 Apr 2023 13:10:32 +0800 Subject: [PATCH 138/174] Solved error in test.sh --- text-ui-test/EXPECTED.TXT | 3 --- text-ui-test/input.txt | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 502398b4aa..c3f20d5510 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -28,9 +28,6 @@ Did you get it right? (y/n) Great, you got it right! Q: Q2 (ENTER to view answer)A: A1 Did you get it right? (y/n) Please enter 'y' or 'n': (y/n) Please enter 'y' or 'n': (y/n) No worries, we will try again later today. --- -Q: Q2 (ENTER to view answer)A: A1 -Did you get it right? (y/n) Great, you got it right! ---- Congrats! You have reviewed all the flashcards due today! ========================================================== The input is in an incorrect format. diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 5229aa91c6..8d5df9f7a2 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -6,6 +6,7 @@ review y + blah n From d6890414ebd74af358fb256a8cc9630e93c199e4 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Tue, 4 Apr 2023 13:15:17 +0800 Subject: [PATCH 139/174] Changed syntax --- text-ui-test/EXPECTED.TXT | 3 +++ 1 file changed, 3 insertions(+) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index c3f20d5510..502398b4aa 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -28,6 +28,9 @@ Did you get it right? (y/n) Great, you got it right! Q: Q2 (ENTER to view answer)A: A1 Did you get it right? (y/n) Please enter 'y' or 'n': (y/n) Please enter 'y' or 'n': (y/n) No worries, we will try again later today. --- +Q: Q2 (ENTER to view answer)A: A1 +Did you get it right? (y/n) Great, you got it right! +--- Congrats! You have reviewed all the flashcards due today! ========================================================== The input is in an incorrect format. From e42ea851eb8f2fd5add9abab1058918a60b8eed0 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Wed, 5 Apr 2023 13:34:22 +0800 Subject: [PATCH 140/174] changed to EXPECTED-UNIX.TXT under runtest.bat --- text-ui-test/{EXPECTED.TXT => EXPECTED.UNIX.TXT} | 0 text-ui-test/runtest.bat | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename text-ui-test/{EXPECTED.TXT => EXPECTED.UNIX.TXT} (100%) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.UNIX.TXT similarity index 100% rename from text-ui-test/EXPECTED.TXT rename to text-ui-test/EXPECTED.UNIX.TXT diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat index 53335711a1..ee9f37d48a 100644 --- a/text-ui-test/runtest.bat +++ b/text-ui-test/runtest.bat @@ -16,4 +16,4 @@ java -jar %jarloc% < ..\..\text-ui-test\input.txt > ..\..\text-ui-test\ACTUAL.TX cd ..\..\text-ui-test -FC ACTUAL.TXT EXPECTED.TXT >NUL && ECHO Test passed! || Echo Test failed! \ No newline at end of file +FC ACTUAL.TXT EXPECTED-UNIX.TXT >NUL && ECHO Test passed! || Echo Test failed! \ No newline at end of file From 050bda00a1864a29ef9c22fb7fe0b695259f375a Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Wed, 5 Apr 2023 16:41:41 +0800 Subject: [PATCH 141/174] undo EXPECTED-UNIX.TXT to EXPECTED.TXT --- text-ui-test/runtest.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat index ee9f37d48a..53335711a1 100644 --- a/text-ui-test/runtest.bat +++ b/text-ui-test/runtest.bat @@ -16,4 +16,4 @@ java -jar %jarloc% < ..\..\text-ui-test\input.txt > ..\..\text-ui-test\ACTUAL.TX cd ..\..\text-ui-test -FC ACTUAL.TXT EXPECTED-UNIX.TXT >NUL && ECHO Test passed! || Echo Test failed! \ No newline at end of file +FC ACTUAL.TXT EXPECTED.TXT >NUL && ECHO Test passed! || Echo Test failed! \ No newline at end of file From e7329d085376c75cb529d45f2284f85cc9b444b7 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Thu, 6 Apr 2023 09:46:32 +0800 Subject: [PATCH 142/174] Added Junit tests --- .../java/com/clanki/parser/ParserTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index 2b6bfde435..832e22d234 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -12,6 +12,7 @@ import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; +import com.clanki.exceptions.UpdatedContentIsEmptyException; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -52,6 +53,25 @@ public void parserAddCommand_partOfInputMissing_emptyInputPartException() { () -> Parser.parseCommandStrict("add /q /a Answer")); } + + @Test + public void parseInputForUpdateCommand_emptyInput_updatedContentEmptyException() { + assertThrows(UpdatedContentIsEmptyException.class, + () -> Parser.parseInputForUpdateCommand("1 /a /aa")); + assertThrows(UpdatedContentIsEmptyException.class, + () -> Parser.parseInputForUpdateCommand(("1 /a "))); + } + + @Test + public void parseInputForUpdateCommand_wrongIdentifier_invalidIdentifierException() { + assertThrows(InvalidIdentifierException.class, + () -> Parser.parseInputForUpdateCommand("1 /w question")); + assertThrows(InvalidIdentifierException.class, + () -> Parser.parseInputForUpdateCommand("1 /s ")); + assertThrows(InvalidIdentifierException.class, + () -> Parser.parseInputForUpdateCommand("1 /e ")); + } + @Test public void parserByeCommand_byeCommand_successful() { Command parsedCommand = Parser.parseCommand("bye"); From 36205e5959b55cbe6854d1a0edc3d76472c92e4f Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Thu, 6 Apr 2023 10:02:57 +0800 Subject: [PATCH 143/174] Added List command --- .../java/com/clanki/commands/ListCommand.java | 17 +++++++++++++++++ .../java/com/clanki/commands/UpdateCommand.java | 16 ++-------------- src/main/java/com/clanki/parser/Parser.java | 3 +++ src/main/java/com/clanki/ui/Ui.java | 15 +++++++++++++++ 4 files changed, 37 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/clanki/commands/ListCommand.java diff --git a/src/main/java/com/clanki/commands/ListCommand.java b/src/main/java/com/clanki/commands/ListCommand.java new file mode 100644 index 0000000000..7c1e8b2e00 --- /dev/null +++ b/src/main/java/com/clanki/commands/ListCommand.java @@ -0,0 +1,17 @@ +package com.clanki.commands; + +import com.clanki.objects.Flashcard; +import com.clanki.objects.FlashcardList; +import com.clanki.ui.Ui; + +import java.util.ArrayList; + +public class ListCommand extends Command { + + @Override + public void execute(FlashcardList flashcardList, Ui display) { + ArrayList flashcards = flashcardList.getFlashCards(); + System.out.println("Here is your list of flashcards:"); + display.printFlashCards(flashcards); + } +} diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 05ef3c5a7a..9edf0dc09d 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -20,18 +20,6 @@ public UpdateCommand(String query) { this.query = query; } - public void printFlashCard(Flashcard flashcard) { - System.out.println("Q: " + flashcard.getQuestion()); - System.out.println("A: " + flashcard.getAnswer()); - } - - public void printFlashCards(ArrayList flashcards) { - for (int i = 0; i < flashcards.size(); i++) { - System.out.println("[" + (i + 1) + "]"); - printFlashCard(flashcards.get(i)); - } - } - public void findFlashcard(ArrayList flashcards, String query) { for (int i = 0; i < flashcards.size(); i++) { Flashcard currentFlashcard = flashcards.get(i); @@ -73,7 +61,7 @@ public void execute(FlashcardList flashcardList, Ui display) { if (matchingFlashcards.size() > 0) { System.out.println( "Found " + matchingFlashcards.size() + " cards with the query \"" + query + "\":"); - printFlashCards(matchingFlashcards); + display.printFlashCards(matchingFlashcards); System.out.println("Which flashcard do you want to update?"); int checker = 0; while (checker == 0) { @@ -84,7 +72,7 @@ public void execute(FlashcardList flashcardList, Ui display) { String updatedContent = Parser.parseInputForUpdateCommand(userText); int index = implementUpdate(flashcards, indexInMatchList, identifier, updatedContent); System.out.println("Understood. The card has been updated to"); - printFlashCard(flashcards.get(index)); + display.printFlashCard(flashcards.get(index)); checker = 1; } catch (InvalidIdentifierException e) { System.out.println("You can only enter /q, /a or /d"); diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index 8a199a69f2..a60e9e9061 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -5,6 +5,7 @@ import com.clanki.commands.Command; import com.clanki.commands.DeleteCommand; import com.clanki.commands.HelpCommand; +import com.clanki.commands.ListCommand; import com.clanki.commands.ReviewCommand; import com.clanki.commands.UnknownCommand; import com.clanki.commands.UpdateCommand; @@ -56,6 +57,8 @@ public static Command parseCommandStrict(String userInput) return getByeCommand(parsedInput); case "help": return new HelpCommand(); + case "list": + return new ListCommand(); default: return new UnknownCommand(); } diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 1bd1130f9e..908f6432ab 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -1,7 +1,10 @@ package com.clanki.ui; +import com.clanki.objects.Flashcard; + import java.io.InputStream; import java.io.PrintStream; +import java.util.ArrayList; import java.util.Scanner; /** @@ -84,4 +87,16 @@ public void printHelpMessage() { public void printSeparationLine() { System.out.println("=========================================================="); } + + public void printFlashCard(Flashcard flashcard) { + System.out.println("Q: " + flashcard.getQuestion()); + System.out.println("A: " + flashcard.getAnswer()); + } + + public void printFlashCards(ArrayList flashcards) { + for (int i = 0; i < flashcards.size(); i++) { + System.out.println("[" + (i + 1) + "]"); + printFlashCard(flashcards.get(i)); + } + } } From 73c5f97a766929077042f8eece6e6c10d03ed330 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Thu, 6 Apr 2023 10:14:09 +0800 Subject: [PATCH 144/174] Updated user guide to include list --- docs/UserGuide.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index e6387c898b..8abc0bd532 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -183,6 +183,30 @@ Which one do you want to delete? 2 Understood. The card has been deleted. ``` +### List all flashcards + +``` +list +``` + +Display the list of flashcards that have been added by the user, regardless of the date. + +#### Example + +``` +> list +Here is your list of flashcards: +[1] +Q: What is the biggest animal in the world +A: Antartic blue whale +[2] +Q: What are the best food for health +A: Lemons +[3] +Q: What colour is the sun +A: Red +``` + ### Help menu ``` From 5a3808a3ceb4002565b952ab0987e973b36a3bb8 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Thu, 6 Apr 2023 10:28:42 +0800 Subject: [PATCH 145/174] Added clear command --- docs/UserGuide.md | 21 ++++++++++++++++++- .../com/clanki/commands/ClearCommand.java | 14 +++++++++++++ .../java/com/clanki/commands/ListCommand.java | 9 ++++++-- .../com/clanki/objects/FlashcardList.java | 4 ++++ src/main/java/com/clanki/parser/Parser.java | 3 +++ 5 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/clanki/commands/ClearCommand.java diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 8abc0bd532..37d55728c1 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -156,7 +156,7 @@ A: Durian D: 2023-02-29 ``` -### Delete flashcards +### Delete a flashcard ``` delete /q QUERY @@ -183,6 +183,25 @@ Which one do you want to delete? 2 Understood. The card has been deleted. ``` +### Delete all flashcards in the list + +``` +clear +``` + +Deletes all the flashcards in the list + +#### Example + +``` +> clear +All flashcards have been deleted. +Your list of flashcards is now empty. + +> list +Your list of flashcards is empty. +``` + ### List all flashcards ``` diff --git a/src/main/java/com/clanki/commands/ClearCommand.java b/src/main/java/com/clanki/commands/ClearCommand.java new file mode 100644 index 0000000000..e616cd5207 --- /dev/null +++ b/src/main/java/com/clanki/commands/ClearCommand.java @@ -0,0 +1,14 @@ +package com.clanki.commands; + +import com.clanki.objects.FlashcardList; +import com.clanki.ui.Ui; + +public class ClearCommand extends Command { + + @Override + public void execute(FlashcardList flashcardList, Ui display) { + flashcardList.deleteAllFlashcards(); + System.out.println("All flashcards have been deleted."); + System.out.println("Your list of flashcards is now empty."); + } +} diff --git a/src/main/java/com/clanki/commands/ListCommand.java b/src/main/java/com/clanki/commands/ListCommand.java index 7c1e8b2e00..ba4053100b 100644 --- a/src/main/java/com/clanki/commands/ListCommand.java +++ b/src/main/java/com/clanki/commands/ListCommand.java @@ -11,7 +11,12 @@ public class ListCommand extends Command { @Override public void execute(FlashcardList flashcardList, Ui display) { ArrayList flashcards = flashcardList.getFlashCards(); - System.out.println("Here is your list of flashcards:"); - display.printFlashCards(flashcards); + if (flashcards.size() > 0) { + System.out.println("Here is your list of flashcards:"); + display.printFlashCards(flashcards); + } + if (flashcards.size() == 0) { + System.out.println("Your list of flashcards is empty."); + } } } diff --git a/src/main/java/com/clanki/objects/FlashcardList.java b/src/main/java/com/clanki/objects/FlashcardList.java index d23ea2acf3..e3e8a3b490 100644 --- a/src/main/java/com/clanki/objects/FlashcardList.java +++ b/src/main/java/com/clanki/objects/FlashcardList.java @@ -26,4 +26,8 @@ public void deleteFlashcard(int index) { public ArrayList getFlashCards() { return flashcards; } + + public void deleteAllFlashcards() { + flashcards.clear(); + } } diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index a60e9e9061..eee4e6f763 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -2,6 +2,7 @@ import com.clanki.commands.AddCommand; import com.clanki.commands.ByeCommand; +import com.clanki.commands.ClearCommand; import com.clanki.commands.Command; import com.clanki.commands.DeleteCommand; import com.clanki.commands.HelpCommand; @@ -59,6 +60,8 @@ public static Command parseCommandStrict(String userInput) return new HelpCommand(); case "list": return new ListCommand(); + case "clear": + return new ClearCommand(); default: return new UnknownCommand(); } From 8c6d776502f2f028b32a50c3404632bd9f3ab78e Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Thu, 6 Apr 2023 11:19:00 +0800 Subject: [PATCH 146/174] Changed user guide --- docs/UserGuide.md | 16 ++++- .../com/clanki/commands/UpdateCommand.java | 64 +++++++++++-------- src/main/java/com/clanki/parser/Parser.java | 13 ++-- .../java/com/clanki/parser/ParserTest.java | 37 ++++++----- 4 files changed, 75 insertions(+), 55 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 37d55728c1..6c03766eb9 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -129,10 +129,20 @@ update /q QUERY following syntax ``` - INDEX [/q NEW_QUESTION] [/a NEW_ANSWER] [/d NEW_DUE_DATE] + INDEX /q NEW_QUESTION ``` - - - Since a slash character (`/`) can be intepreted as a command option, + + - This updates the question of the flashcard to `NEW_QUESTION` + + + - To update the answer of the flashcard, use `/a` + - To update the due date of the flashcard, use `/d` + ``` + INDEX /a NEW_ANSWER + INDEX /d NEW_DUE_DATE + ``` + - The user can only update either one of the question, answer or due date at a time + - Since a slash character (`/`) can be interpreted as a command option, `QUESTION`, `ANSWER` and `NEW_DUE_DATE` must not start with `/` or includes ` /` (the slash with a space before it). diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 9edf0dc09d..b6b635b1fa 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -14,6 +14,12 @@ public class UpdateCommand extends Command { String query; ArrayList matchingFlashcards = new ArrayList<>(); + private static final String INVALID_IDENTIFIER_ERROR = "You can only enter /q, /a or /d"; + private static final String EMPTY_CONTENT_ERROR = "Please enter the changes to be modified."; + private static final String INCORRECT_FORMAT_ERROR = "Please enter the input in the correct format as shown in the user guide."; + private static final String EMPTY_INPUT_ERROR = "Please enter the index of the flashcard you want to update."; + private static final String INDEX_OUT_OF_LIST_ERROR = "You have selected an index out of the list."; + private static final String INVALID_DATE_FORMAT_ERROR = "Please enter the date in the format: yyyy-mm-dd"; public UpdateCommand(String query) { super(); @@ -54,6 +60,36 @@ public int implementUpdate(ArrayList flashcards, int indexInMatchList return index; } + private void updateFlashcard(ArrayList flashcards, Ui display) { + int checker = 0; + while (checker == 0) { + try { + String userText = display.getUserCommand(); + int indexInMatchList = Parser.getIndexForUpdateCommand(userText); + String identifier = Parser.getIdentifierForUpdateCommand(userText); + String updatedContent = Parser.parseInputForUpdateCommand(userText); + int index = implementUpdate(flashcards, indexInMatchList, identifier, updatedContent); + System.out.println("Understood. The card has been updated to"); + display.printFlashCard(flashcards.get(index)); + checker = 1; + } catch (InvalidIdentifierException e) { + System.out.println(INVALID_IDENTIFIER_ERROR); + } catch (UpdatedContentIsEmptyException e) { + System.out.println(EMPTY_CONTENT_ERROR); + } catch (ArrayIndexOutOfBoundsException e) { + System.out.println(INCORRECT_FORMAT_ERROR); + } catch (NumberFormatException e) { + System.out.println(EMPTY_INPUT_ERROR); + } catch (IndexOutOfBoundsException e) { + System.out.print(INDEX_OUT_OF_LIST_ERROR); + System.out.println(" There are only " + matchingFlashcards.size() + + " flashcards that match the query."); + } catch (DateTimeParseException e) { + System.out.println(INVALID_DATE_FORMAT_ERROR); + } + } + } + @Override public void execute(FlashcardList flashcardList, Ui display) { ArrayList flashcards = flashcardList.getFlashCards(); @@ -63,33 +99,7 @@ public void execute(FlashcardList flashcardList, Ui display) { "Found " + matchingFlashcards.size() + " cards with the query \"" + query + "\":"); display.printFlashCards(matchingFlashcards); System.out.println("Which flashcard do you want to update?"); - int checker = 0; - while (checker == 0) { - try { - String userText = display.getUserCommand(); - int indexInMatchList = Parser.getIndexForUpdateCommand(userText); - String identifier = Parser.getIdentifierForUpdateCommand(userText); - String updatedContent = Parser.parseInputForUpdateCommand(userText); - int index = implementUpdate(flashcards, indexInMatchList, identifier, updatedContent); - System.out.println("Understood. The card has been updated to"); - display.printFlashCard(flashcards.get(index)); - checker = 1; - } catch (InvalidIdentifierException e) { - System.out.println("You can only enter /q, /a or /d"); - } catch (UpdatedContentIsEmptyException e) { - System.out.println("Please enter the changes to be modified."); - } catch (ArrayIndexOutOfBoundsException e) { - System.out.println("Please enter the input in the correct format as shown in the user guide."); - } catch (NumberFormatException e) { - System.out.println("Please enter the index of the flashcard you want to update."); - } catch (IndexOutOfBoundsException e) { - System.out.print("You have selected an index out of the list."); - System.out.println("There are only " + matchingFlashcards.size() - + " flashcards that match the query."); - } catch (DateTimeParseException e) { - System.out.println("Please enter the date in the format: yyyy-mm-dd"); - } - } + updateFlashcard(flashcards, display); } else { System.out.println("There are no flashcards with the query \"" + query + "\"."); } diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index eee4e6f763..fd407138c1 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -21,6 +21,7 @@ public class Parser { private static final String QUESTION_OPTION_IDENTIFIER = "q"; private static final String ANSWER_OPTION_IDENTIFIER = "a"; + private static final String DATE_OPTION_IDENTIFIER = "d"; //private static Logger logger = Logger.getLogger("Parser"); public static Command parseCommand(String userInput) { @@ -154,14 +155,14 @@ public static String parseInputForUpdateCommand(String userInput) throws Invalid if (identifier == null) { throw new InvalidIdentifierException(); } - if (identifier.equals("q")) { - updatedContent = parsedInput.getOptionByName("q"); + if (identifier.equals(QUESTION_OPTION_IDENTIFIER)) { + updatedContent = parsedInput.getOptionByName(QUESTION_OPTION_IDENTIFIER); } - if (identifier.equals("a")) { - updatedContent = parsedInput.getOptionByName("a"); + if (identifier.equals(ANSWER_OPTION_IDENTIFIER)) { + updatedContent = parsedInput.getOptionByName(ANSWER_OPTION_IDENTIFIER); } - if (identifier.equals("d")) { - updatedContent = parsedInput.getOptionByName("d"); + if (identifier.equals(DATE_OPTION_IDENTIFIER)) { + updatedContent = parsedInput.getOptionByName(DATE_OPTION_IDENTIFIER); } if (updatedContent.isEmpty()) { throw new UpdatedContentIsEmptyException(); diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index 832e22d234..9abd8e5ef7 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -53,25 +53,6 @@ public void parserAddCommand_partOfInputMissing_emptyInputPartException() { () -> Parser.parseCommandStrict("add /q /a Answer")); } - - @Test - public void parseInputForUpdateCommand_emptyInput_updatedContentEmptyException() { - assertThrows(UpdatedContentIsEmptyException.class, - () -> Parser.parseInputForUpdateCommand("1 /a /aa")); - assertThrows(UpdatedContentIsEmptyException.class, - () -> Parser.parseInputForUpdateCommand(("1 /a "))); - } - - @Test - public void parseInputForUpdateCommand_wrongIdentifier_invalidIdentifierException() { - assertThrows(InvalidIdentifierException.class, - () -> Parser.parseInputForUpdateCommand("1 /w question")); - assertThrows(InvalidIdentifierException.class, - () -> Parser.parseInputForUpdateCommand("1 /s ")); - assertThrows(InvalidIdentifierException.class, - () -> Parser.parseInputForUpdateCommand("1 /e ")); - } - @Test public void parserByeCommand_byeCommand_successful() { Command parsedCommand = Parser.parseCommand("bye"); @@ -98,6 +79,24 @@ public void parserUpdateCommand_updateCommand_successful() { assertTrue(parsedCommand instanceof UpdateCommand); } + @Test + public void parseInputForUpdateCommand_emptyInput_updatedContentEmptyException() { + assertThrows(UpdatedContentIsEmptyException.class, + () -> Parser.parseInputForUpdateCommand("1 /a /aa")); + assertThrows(UpdatedContentIsEmptyException.class, + () -> Parser.parseInputForUpdateCommand(("1 /a "))); + } + + @Test + public void parseInputForUpdateCommand_wrongIdentifier_invalidIdentifierException() { + assertThrows(InvalidIdentifierException.class, + () -> Parser.parseInputForUpdateCommand("1 /w question")); + assertThrows(InvalidIdentifierException.class, + () -> Parser.parseInputForUpdateCommand("1 /s ")); + assertThrows(InvalidIdentifierException.class, + () -> Parser.parseInputForUpdateCommand("1 /e ")); + } + @Test public void parserDeleteCommand_deleteCommand_successful() { Command parsedCommand = Parser.parseCommand("del query"); From efbe6c8f19700575549ca0d94464a7a6fc7ac178 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Thu, 6 Apr 2023 11:30:24 +0800 Subject: [PATCH 147/174] Reduced length of code --- src/main/java/com/clanki/commands/UpdateCommand.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index b6b635b1fa..3adef7930f 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -12,14 +12,15 @@ import java.util.ArrayList; public class UpdateCommand extends Command { - String query; - ArrayList matchingFlashcards = new ArrayList<>(); private static final String INVALID_IDENTIFIER_ERROR = "You can only enter /q, /a or /d"; private static final String EMPTY_CONTENT_ERROR = "Please enter the changes to be modified."; - private static final String INCORRECT_FORMAT_ERROR = "Please enter the input in the correct format as shown in the user guide."; + private static final String INCORRECT_FORMAT_ERROR = + "Please enter the input in the correct format as shown in the user guide."; private static final String EMPTY_INPUT_ERROR = "Please enter the index of the flashcard you want to update."; private static final String INDEX_OUT_OF_LIST_ERROR = "You have selected an index out of the list."; private static final String INVALID_DATE_FORMAT_ERROR = "Please enter the date in the format: yyyy-mm-dd"; + String query; + ArrayList matchingFlashcards = new ArrayList<>(); public UpdateCommand(String query) { super(); From 7aef4c886ac0df909a406690fea45b29dde647cc Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Thu, 6 Apr 2023 15:12:45 +0800 Subject: [PATCH 148/174] Added EXPECTED.TXT file --- text-ui-test/EXPECTED.TXT | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 text-ui-test/EXPECTED.TXT diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT new file mode 100644 index 0000000000..6d067f04ea --- /dev/null +++ b/text-ui-test/EXPECTED.TXT @@ -0,0 +1,40 @@ +Welcome to Clanki! Time to start studying! +========================================================== +You have added the following card: +Q: Q1 +A: A1 +========================================================== +You have added the following card: +Q: Q1 +A: A1 +========================================================== +Found 2 cards with the query "q1": +[1] +Q: Q1 +A: A1 +[2] +Q: Q1 +A: A1 +Which flashcard do you want to update? +Understood. The card has been updated to +Q: Q2 +A: A1 +========================================================== +There are 2 cards available for review today. +--- +Q: Q1 (ENTER to view answer)A: A1 +Did you get it right? (y/n) Great, you got it right! +--- +Q: Q2 (ENTER to view answer)A: A1 +Did you get it right? (y/n) Please enter 'y' or 'n': (y/n) Please enter 'y' or 'n': (y/n) No worries, we will try again later today. +--- +Q: Q2 (ENTER to view answer)A: A1 +Did you get it right? (y/n) Great, you got it right! +--- +Congrats! You have reviewed all the flashcards due today! +========================================================== +The input is in an incorrect format. +You can view our user guide or type help to see the correct formats for commands. + +========================================================== +Bye. Don't forget to come back later to study! \ No newline at end of file From 1c7f022332375f72a87f62bff00deac01e792da5 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Thu, 6 Apr 2023 15:23:09 +0800 Subject: [PATCH 149/174] Adjusted EXPECTED.TXT to match ACTUAL.TXT --- text-ui-test/EXPECTED.TXT | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 6d067f04ea..89705ce26e 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -12,13 +12,16 @@ Found 2 cards with the query "q1": [1] Q: Q1 A: A1 +D: 2023-04-06 [2] Q: Q1 A: A1 +D: 2023-04-06 Which flashcard do you want to update? Understood. The card has been updated to Q: Q2 A: A1 +D: 2023-04-06 ========================================================== There are 2 cards available for review today. --- @@ -37,4 +40,4 @@ The input is in an incorrect format. You can view our user guide or type help to see the correct formats for commands. ========================================================== -Bye. Don't forget to come back later to study! \ No newline at end of file +Bye. Don't forget to come back later to study! From d136604d84d1a4b8bbf7547a913b96e0e17258db Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Thu, 6 Apr 2023 15:27:32 +0800 Subject: [PATCH 150/174] Removed dos2unix (line 14) under runtest.sh --- text-ui-test/runtest.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh index 811a375f4a..b6e8516ff8 100755 --- a/text-ui-test/runtest.sh +++ b/text-ui-test/runtest.sh @@ -11,7 +11,6 @@ cd text-ui-test java -jar $(find ../build/libs/ -mindepth 1 -print -quit) < input.txt > ACTUAL.TXT cp EXPECTED.TXT EXPECTED-UNIX.TXT -##dos2unix EXPECTED-UNIX.TXT ACTUAL.TXT diff EXPECTED-UNIX.TXT ACTUAL.TXT if [ $? -eq 0 ] then From 394999f18e9d957e60c43a98e42be59cbc7ac4b3 Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Thu, 6 Apr 2023 16:57:11 +0800 Subject: [PATCH 151/174] Add table of content to DG --- docs/DeveloperGuide.md | 117 ++++++++++++++++++++++++----------------- 1 file changed, 68 insertions(+), 49 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index e4477d2791..9d896fdbad 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1,5 +1,24 @@ # Developer Guide + + +- [Developer Guide](#developer-guide) + - [Acknowledgements](#acknowledgements) + - [Design & implementation](#design--implementation) + - [Add Flashcard Feature](#add-flashcard-feature) + - [Delete Flashcard Feature](#delete-flashcard-feature) + - [Update Flashcard Feature](#update-flashcard-feature) + - [Review Flashcard Feature](#review-flashcard-feature) + - [Parser](#parser) + - [Product scope](#product-scope) + - [Target user profile](#target-user-profile) + - [Value proposition](#value-proposition) + - [User Stories](#user-stories) + - [Non-Functional Requirements](#non-functional-requirements) + - [Glossary](#glossary) + - [Instructions for manual testing](#instructions-for-manual-testing) + + ## Acknowledgements {list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the @@ -152,55 +171,6 @@ update flashcard feature alone as most of the methods and attributes are within the index of the matching flashcards. it will also be more confusing as the index of the user input is not aligned with the index of the arrayList that contains all the flashcards -### Parser - -#### Current implementation - -The parser mostly relies on the `ParsedInput` class, which can parse any user provided string input in the format of -Windows command prompt commands (`command body /opt-key opt-value`). - -##### `ParsedInput` - -Initiated with a string `input`, it splits the input to sections that are of use. From there it splits each section -further to a "title" (denoted with `=` below) and a "body" (denoted with `-` below) part. - -``` -command blah blah /opt1 hello /opt2 world blah bleh -| Part 1 | | Part 2 | | Part 3 | -|=====| |-------| |==| |---| |==| |-------------| -``` - -Then these small subparts are grouped together to a format where the command part of the command, the body part and the -options can be retrieved programmatically. - -The command and body can be read with `getCommand()` and `getBody()` respectively. `getCommand()` is guaranteed to be -non-null. - -The options can be read with `getOptionByName(optionKeyName)`. The reason we don't have specific `getDate` -or `getQuestion` command is because we don't know what the user will input and what options we will require for each -command. So depending on the command, we retrieve the option accordingly with e.g. - -```java -"command blah blah /opt1 hello /opt2 world blah bleh" - getOptionByName("opt2") // -> "world blah bleh" - getOptionByName("opt3") // -> null -``` - -##### `Parser` - -This is now just a matter of wrapping `ParsedInput` with suitable error handling and logic such that each command will -be used to initiated a corresponding command class (e.g. `AddCommand`), while errors are handled gracefully. - -#### Reason for current implementation - -We need an intuitive, safe and declarative way to parse the user input. Alternative implementations that can only parse -specific commands with specific options are more imperative, less readable, less maintainable and overall just a pain to -handle. That's why the two classes are here. - -#### Alternative implementation - -No. - ### Review Flashcard Feature #### Current implementation @@ -264,6 +234,55 @@ coupling in the program as the `ReviewCommand` will not have access to the inner - Pros: Simplifies code in `ReviewCommand` - Cons: Will have to pass around a lot of parameters and variables +### Parser + +#### Current implementation + +The parser mostly relies on the `ParsedInput` class, which can parse any user provided string input in the format of +Windows command prompt commands (`command body /opt-key opt-value`). + +##### `ParsedInput` + +Initiated with a string `input`, it splits the input to sections that are of use. From there it splits each section +further to a "title" (denoted with `=` below) and a "body" (denoted with `-` below) part. + +``` +command blah blah /opt1 hello /opt2 world blah bleh +| Part 1 | | Part 2 | | Part 3 | +|=====| |-------| |==| |---| |==| |-------------| +``` + +Then these small subparts are grouped together to a format where the command part of the command, the body part and the +options can be retrieved programmatically. + +The command and body can be read with `getCommand()` and `getBody()` respectively. `getCommand()` is guaranteed to be +non-null. + +The options can be read with `getOptionByName(optionKeyName)`. The reason we don't have specific `getDate` +or `getQuestion` command is because we don't know what the user will input and what options we will require for each +command. So depending on the command, we retrieve the option accordingly with e.g. + +```java +"command blah blah /opt1 hello /opt2 world blah bleh" + getOptionByName("opt2") // -> "world blah bleh" + getOptionByName("opt3") // -> null +``` + +##### `Parser` + +This is now just a matter of wrapping `ParsedInput` with suitable error handling and logic such that each command will +be used to initiated a corresponding command class (e.g. `AddCommand`), while errors are handled gracefully. + +#### Reason for current implementation + +We need an intuitive, safe and declarative way to parse the user input. Alternative implementations that can only parse +specific commands with specific options are more imperative, less readable, less maintainable and overall just a pain to +handle. That's why the two classes are here. + +#### Alternative implementation + +No. + ## Product scope ### Target user profile From fdf21f862a73ef6facd82b916f70e4af4d9038e3 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Thu, 6 Apr 2023 21:46:10 +0800 Subject: [PATCH 152/174] Updated list command --- docs/UserGuide.md | 76 +++++++++++++------ .../java/com/clanki/commands/ListCommand.java | 33 +++++++- .../com/clanki/commands/UpdateCommand.java | 29 ++++++- .../exceptions/InputIsEmptyException.java | 4 + src/main/java/com/clanki/parser/Parser.java | 15 +++- src/main/java/com/clanki/ui/Ui.java | 37 +++++++++ .../java/com/clanki/parser/ParserTest.java | 9 +++ 7 files changed, 171 insertions(+), 32 deletions(-) create mode 100644 src/main/java/com/clanki/exceptions/InputIsEmptyException.java diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 6c03766eb9..c22bc06cde 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -117,34 +117,38 @@ You have finished reviewing for today. Congratulations. ### Update flashcards ``` -update /q QUERY +update QUERY ``` - `QUERY` can be the card's date or be part of the card's question or answer. -- A list of cards that contain this query will be listed, with an index assigned - to each. + - A list of cards that contain this query will be listed, with an index assigned + to each. -- The user can then type the index of the card they wish to update with the - following syntax + - The user can then type the index of the card they wish to update with the + following syntax - ``` - INDEX /q NEW_QUESTION - ``` + ``` + INDEX /q NEW_QUESTION + ``` - - This updates the question of the flashcard to `NEW_QUESTION` - - - - To update the answer of the flashcard, use `/a` - - To update the due date of the flashcard, use `/d` - ``` - INDEX /a NEW_ANSWER - INDEX /d NEW_DUE_DATE - ``` - - The user can only update either one of the question, answer or due date at a time - - Since a slash character (`/`) can be interpreted as a command option, - `QUESTION`, `ANSWER` and `NEW_DUE_DATE` must not start with `/` or includes - ` /` (the slash with a space before it). + - This updates the question of the flashcard to `NEW_QUESTION` + + - To update the answer of the flashcard, use `/a` + ``` + INDEX /a NEW_ANSWER + ``` + + - To update the due date of the flashcard, use `/d` + + ``` + INDEX /d NEW_DUE_DATE + ``` + - `DUE_DATE` has to be in the format `yyyy-mm-dd` + - The user can only update either one of the question, answer or due date at a time + - Since a slash character (`/`) can be interpreted as a command option, + `QUESTION`, `ANSWER` and `NEW_DUE_DATE` must not start with `/` or includes + ` /` (the slash with a space before it). #### Example @@ -212,18 +216,19 @@ Your list of flashcards is now empty. Your list of flashcards is empty. ``` -### List all flashcards +### List flashcards ``` -list +list all ``` -Display the list of flashcards that have been added by the user, regardless of the date. +Display the questions and answers for all the flashcards in the list that have been added by the user, +regardless of the date. #### Example ``` -> list +> list all Here is your list of flashcards: [1] Q: What is the biggest animal in the world @@ -236,6 +241,27 @@ Q: What colour is the sun A: Red ``` +``` +list DUE_DATE +``` + +Display the questions and answers for all the flashcards in the list that has the due date specified by the user +- `DUE_DATE` has to be in the format `yyyy-mm-dd` + +``` +> list 2023-04-05 +Here is your list of flashcards with the specified due date: +[1] +Q: What is the biggest animal in the world +A: Antartic blue whale +[2] +Q: What are the best food for health +A: Lemons +[3] +Q: What colour is the sun +A: Red +``` + ### Help menu ``` diff --git a/src/main/java/com/clanki/commands/ListCommand.java b/src/main/java/com/clanki/commands/ListCommand.java index ba4053100b..6046459420 100644 --- a/src/main/java/com/clanki/commands/ListCommand.java +++ b/src/main/java/com/clanki/commands/ListCommand.java @@ -4,13 +4,24 @@ import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; +import java.time.LocalDate; +import java.time.format.DateTimeParseException; import java.util.ArrayList; public class ListCommand extends Command { + private static final String INVALID_DATE_FORMAT_ERROR = "Please enter the date in the format: yyyy-mm-dd"; + String input; - @Override - public void execute(FlashcardList flashcardList, Ui display) { - ArrayList flashcards = flashcardList.getFlashCards(); + public ListCommand(String input) { + super(); + this.input = input; + } + + private LocalDate convertDate(String dueDate) throws DateTimeParseException { + return LocalDate.parse(dueDate); + } + + public void printAllFlashcards(ArrayList flashcards, Ui display) { if (flashcards.size() > 0) { System.out.println("Here is your list of flashcards:"); display.printFlashCards(flashcards); @@ -19,4 +30,20 @@ public void execute(FlashcardList flashcardList, Ui display) { System.out.println("Your list of flashcards is empty."); } } + + @Override + public void execute(FlashcardList flashcardList, Ui display) { + ArrayList flashcards = flashcardList.getFlashCards(); + if (input.equals("all")) { + printAllFlashcards(flashcards, display); + } else { + LocalDate dueDate = null; + try { + dueDate = convertDate(input); + display.printFlashCardsOnDate(flashcards, dueDate); + } catch (DateTimeParseException e) { + System.out.println(INVALID_DATE_FORMAT_ERROR); + } + } + } } diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 3adef7930f..917f708110 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -11,6 +11,11 @@ import java.time.format.DateTimeParseException; import java.util.ArrayList; +/** + * The UpdateCommand class represents a command that updates an existing flashcard + * in the flashcard list. + * The command allows users to change the question, answer or date of the flashcard. + */ public class UpdateCommand extends Command { private static final String INVALID_IDENTIFIER_ERROR = "You can only enter /q, /a or /d"; private static final String EMPTY_CONTENT_ERROR = "Please enter the changes to be modified."; @@ -27,6 +32,12 @@ public UpdateCommand(String query) { this.query = query; } + /** + * Searches for flashcards that match the query and adds them to the matchingFlashcards list. + * + * @param flashcards the list of flashcards to search through + * @param query the search query for finding matching flashcards + */ public void findFlashcard(ArrayList flashcards, String query) { for (int i = 0; i < flashcards.size(); i++) { Flashcard currentFlashcard = flashcards.get(i); @@ -42,6 +53,15 @@ public void findFlashcard(ArrayList flashcards, String query) { } } + /** + * Updates the content of a flashcard based on the specified identifier and updated content. + * + * @param flashcards the list of flashcards to update + * @param indexInMatchList the index of the flashcard in the matchingFlashcards list + * @param identifier the identifier for the field to update (/q for question, /a for answer, /d for due date) + * @param updatedContent the updated content for the field + * @return the index of the updated flashcard in the flashcards list + */ public int implementUpdate(ArrayList flashcards, int indexInMatchList, String identifier, String updatedContent) { Flashcard flashcardToChange = matchingFlashcards.get(indexInMatchList); @@ -61,6 +81,12 @@ public int implementUpdate(ArrayList flashcards, int indexInMatchList return index; } + /** + * Prompts the user for input and updates the specified flashcard based on the user's input. + * + * @param flashcards the list of flashcards to update + * @param display the Ui object for displaying messages to the user + */ private void updateFlashcard(ArrayList flashcards, Ui display) { int checker = 0; while (checker == 0) { @@ -70,8 +96,7 @@ private void updateFlashcard(ArrayList flashcards, Ui display) { String identifier = Parser.getIdentifierForUpdateCommand(userText); String updatedContent = Parser.parseInputForUpdateCommand(userText); int index = implementUpdate(flashcards, indexInMatchList, identifier, updatedContent); - System.out.println("Understood. The card has been updated to"); - display.printFlashCard(flashcards.get(index)); + display.printSuccessfulUpdateMessage(flashcards.get(index)); checker = 1; } catch (InvalidIdentifierException e) { System.out.println(INVALID_IDENTIFIER_ERROR); diff --git a/src/main/java/com/clanki/exceptions/InputIsEmptyException.java b/src/main/java/com/clanki/exceptions/InputIsEmptyException.java new file mode 100644 index 0000000000..bd0ff94790 --- /dev/null +++ b/src/main/java/com/clanki/exceptions/InputIsEmptyException.java @@ -0,0 +1,4 @@ +package com.clanki.exceptions; + +public class InputIsEmptyException extends Exception { +} diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index fd407138c1..1534f9b4d1 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -13,6 +13,7 @@ import com.clanki.commands.VoidCommand; import com.clanki.exceptions.EmptyFlashcardAnswerException; import com.clanki.exceptions.EmptyFlashcardQuestionException; +import com.clanki.exceptions.InputIsEmptyException; import com.clanki.exceptions.InvalidAddFlashcardInputException; import com.clanki.exceptions.NoQueryInInputException; import com.clanki.exceptions.UpdatedContentIsEmptyException; @@ -36,13 +37,15 @@ public static Command parseCommand(String userInput) { System.out.println("The answer for this flashcard is empty, please enter one."); } catch (NoQueryInInputException e) { System.out.println("Please enter a query to be searched in the list of flashcards."); + } catch (InputIsEmptyException e) { + System.out.println("Please enter the command in the format shown in the user guide"); } return new VoidCommand(); } public static Command parseCommandStrict(String userInput) throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, - EmptyFlashcardAnswerException, NoQueryInInputException { + EmptyFlashcardAnswerException, NoQueryInInputException, InputIsEmptyException { ParsedInput parsedInput = new ParsedInput(userInput); String command = parsedInput.getCommand(); assert !command.isEmpty() : "The command string must not be empty"; @@ -60,7 +63,7 @@ public static Command parseCommandStrict(String userInput) case "help": return new HelpCommand(); case "list": - return new ListCommand(); + return getListCommand(parsedInput); case "clear": return new ClearCommand(); default: @@ -119,6 +122,14 @@ public static DeleteCommand getDeleteCommand(ParsedInput parsedInput) { return new DeleteCommand(parsedInput.getBody()); } + public static ListCommand getListCommand(ParsedInput parsedInput) throws InputIsEmptyException { + String date = parsedInput.getBody(); + if (date.isEmpty()) { + throw new InputIsEmptyException(); + } + return new ListCommand(parsedInput.getBody()); + } + public static ByeCommand getByeCommand(ParsedInput parsedInput) { return new ByeCommand(); } diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 908f6432ab..1096305cbc 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -4,6 +4,7 @@ import java.io.InputStream; import java.io.PrintStream; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Scanner; @@ -80,6 +81,12 @@ public void printHelpMessage() { + BEFORE_ELABORATION_SPACING + "Parameters: delete /q QUERY\n" + BEFORE_ELABORATION_SPACING + "Example: delete fruit \n" + "review: Go through all flashcards that are due today.\n" + + "list: lists out the questions and answers in the list of flashcards.\n" + + BEFORE_ELABORATION_SPACING + "Parameters: list all (lists all flashcards)\n" + + BEFORE_ELABORATION_SPACING + "Parameters: list DUE_DATE (list all flashcards with that " + + "specified due date)\n" + + BEFORE_ELABORATION_SPACING + "Example: list 2023-05-04\n" + + "clear: Deletes all the flashcards in the list.\n" + "bye: Exit the program.\n" ); } @@ -88,15 +95,45 @@ public void printSeparationLine() { System.out.println("=========================================================="); } + /** + * Prints the question and answer of a single flashcard to the console. + * + * @Param flashcard the flashcard to be print + */ public void printFlashCard(Flashcard flashcard) { System.out.println("Q: " + flashcard.getQuestion()); System.out.println("A: " + flashcard.getAnswer()); } + /** + * Prints the questions and answers of a list of flashcards to the console. + * + * @param flashcards the list of flashcards to be printed + */ public void printFlashCards(ArrayList flashcards) { for (int i = 0; i < flashcards.size(); i++) { System.out.println("[" + (i + 1) + "]"); printFlashCard(flashcards.get(i)); } } + + public void printSuccessfulUpdateMessage(Flashcard updatedFlashcard) { + System.out.println("Understood. The card has been updated to"); + printFlashCard(updatedFlashcard); + } + + public void printFlashCardsOnDate(ArrayList flashcards, LocalDate date) { + System.out.println("Here is your list of flashcards with the specified due date:"); + int countFlashcardsPrinted = 0; + for (int i = 0; i < flashcards.size(); i++) { + if (flashcards.get(i).getDueDate().compareTo(date) == 0) { + countFlashcardsPrinted++; + System.out.println("[" + (countFlashcardsPrinted) + "]"); + printFlashCard(flashcards.get(i)); + } + } + if (countFlashcardsPrinted == 0) { + System.out.println("Your list of flashcards with the specified due date is empty."); + } + } } diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index 9abd8e5ef7..4fe131bd79 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -5,6 +5,7 @@ import com.clanki.commands.ByeCommand; import com.clanki.commands.Command; import com.clanki.commands.DeleteCommand; +import com.clanki.commands.ListCommand; import com.clanki.commands.ReviewCommand; import com.clanki.commands.UnknownCommand; import com.clanki.commands.UpdateCommand; @@ -102,4 +103,12 @@ public void parserDeleteCommand_deleteCommand_successful() { Command parsedCommand = Parser.parseCommand("del query"); assertTrue(parsedCommand instanceof DeleteCommand); } + + @Test + public void parserListCommand_listCommand_successful() { + Command parsedCommand = Parser.parseCommand("list all"); + assertTrue(parsedCommand instanceof ListCommand); + parsedCommand = Parser.parseCommand("list 2023-04-06"); + assertTrue(parsedCommand instanceof ListCommand); + } } From d72efc936222e0a43f8ae7a02c1bde2921dada0f Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Thu, 6 Apr 2023 21:50:39 +0800 Subject: [PATCH 153/174] Update user guide --- docs/UserGuide.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index c22bc06cde..343d5f5743 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -44,7 +44,7 @@ add /q QUESTION /a ANSWER - `QUESTION` will be displayed when reviewing. For how the reviewing process works, see "Review flashcards" section below. -- Since a slash character (`/`) can be intepreted as a command option, both +- Since a slash character (`/`) can be interpreted as a command option, both `QUESTION` and `ANSWER` must not start with `/` or includes ` /` (the slash with a space before it). @@ -144,7 +144,7 @@ update QUERY ``` INDEX /d NEW_DUE_DATE ``` - - `DUE_DATE` has to be in the format `yyyy-mm-dd` + - `NEW_DUE_DATE` has to be in the format `yyyy-mm-dd` - The user can only update either one of the question, answer or due date at a time - Since a slash character (`/`) can be interpreted as a command option, `QUESTION`, `ANSWER` and `NEW_DUE_DATE` must not start with `/` or includes @@ -218,6 +218,8 @@ Your list of flashcards is empty. ### List flashcards +1. list all flashcards + ``` list all ``` @@ -241,6 +243,8 @@ Q: What colour is the sun A: Red ``` +2. List flashcards with specific due date + ``` list DUE_DATE ``` From e646366de620757a7c21346075f2447de28d9149 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Fri, 7 Apr 2023 01:31:12 +0800 Subject: [PATCH 154/174] Changed user guide --- docs/UserGuide.md | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 343d5f5743..fac470501e 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -158,16 +158,13 @@ Found 2 cards with the query "fruit": [1] Q: What is the worst fruit? A: Durian -D: 2023-02-29 [2] Q: What is the Japanese word for "fruit"? A: 果物 -D: 2023-02-29 Which flashcard do you want to update? 1 /q What is the best fruit? Understood. The card has been updated to Q: What is the best fruit? A: Durian -D: 2023-02-29 ``` ### Delete a flashcard @@ -276,8 +273,27 @@ Display the list of possible commands the user can input. #### Example -![helpMenuDisplay.png](userGuideImages%2FhelpMenuDisplay.png) - +``` +> help +The following are the commands you can use: +add: Adds a flashcard to the current list of flashcards. + Parameters: add /q QUESTION /a ANSWER + Example: add /q What is the worst fruit? /a Durian +update: Changes the content of flashcard's question, answer or date. + Parameters: update /q QUERY + Example: update fruit + Which flashcard do you want to update? 1 /q What is the best fruit? +delete: Removes a flashcard with specified string. + Parameters: delete /q QUERY + Example: delete fruit +review: Go through all flashcards that are due today. +list: lists out the questions and answers in the list of flashcards. + Parameters: list all (lists all flashcards) + Parameters: list DUE_DATE (list all flashcards with that specified due date) + Example: list 2023-05-04 +clear: Deletes all the flashcards in the list. +bye: Exit the program. +``` ### Exit program ``` From b904fbd839de15affb2fe3f417e2e9e6de7f3738 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Fri, 7 Apr 2023 01:40:20 +0800 Subject: [PATCH 155/174] Changed printing of flashcards in list --- src/main/java/com/clanki/ui/Ui.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 1096305cbc..6477e5d810 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -123,11 +123,13 @@ public void printSuccessfulUpdateMessage(Flashcard updatedFlashcard) { } public void printFlashCardsOnDate(ArrayList flashcards, LocalDate date) { - System.out.println("Here is your list of flashcards with the specified due date:"); int countFlashcardsPrinted = 0; for (int i = 0; i < flashcards.size(); i++) { if (flashcards.get(i).getDueDate().compareTo(date) == 0) { countFlashcardsPrinted++; + if (countFlashcardsPrinted == 1) { + System.out.println("Here is your list of flashcards with the specified due date:"); + } System.out.println("[" + (countFlashcardsPrinted) + "]"); printFlashCard(flashcards.get(i)); } From e4653e15c700736f0f2e25b75f2a8b1413ab1fdc Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Fri, 7 Apr 2023 12:28:17 +0800 Subject: [PATCH 156/174] Added ppp --- docs/team/javienneyeo.md | 53 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 docs/team/javienneyeo.md diff --git a/docs/team/javienneyeo.md b/docs/team/javienneyeo.md new file mode 100644 index 0000000000..0e3659975a --- /dev/null +++ b/docs/team/javienneyeo.md @@ -0,0 +1,53 @@ +# Javienne Yeo's Project Portfolio Page + +## Overview of Product +- Clanki is a study tool to help students with content heavy subjects with a lot of memorization required. It is + able to add the questions and answers into flashcards, allowing users to review them when ready. + +### Summary of Contributions +- **New feature:** Added the ability to update the question, answer or due date of a flashcard + - What it does: The feature prints out a list of flashcards that contains the query in its question, + answer or due date. The feature than allows the user to choose which flashcard to update and how they + want it to be updated. The user is able to change the question, answer or due date part of the flashcard. + - Justification: This feature is required for users to make any changes to the flashcard. Without + this feature, the user would have to delete the flashcard and add a new flashcard in the event the + user wants to change the question, answer or due date. + - Highlights: Reduces the number of flashcards the user has to look through to find the specific flashcard + he/she wants to update as the feature prints out the list of flashcards that have that matching query. + In addition, the feature searches for the query in the question, answer and due date. JUnit test codes are + also written for this feature. +- **New feature:** Added the ability to list out the flashcards the user has added + - What it does: This feature allows the user to print out all flashcards that the user currently has or + print out all the flashcards that is due on a certain date + - Justification: This allows the user to have a broad overview of all the flashcards that he/she has + added to the list. This is to allow the user to check for whether they have added duplicates into the + list or to check whether the contents of the flashcards are all correct before reviewing them. + - Highlights: The user is able to view all the flashcards that are due on a certain day by entering + this date as an input. This is to allow the user to view all the flashcards with that due date to + revise before reviewing it using the review feature. JUnit test codes are also written for this feature. +- **New feature:** Added the ability to delete all flashcards in the current list of flashcards. + - What it does: Allows the user to remove all flashcards that have been added in the list to create a new + list of flashcards + - Justification: In the event the user has many flashcards in his/her list and wants to delete all of + it to start a new list, the user is able to use this function and would not need to delete the + flashcards one-by-one. It also allows the user to start a new list of flashcard with just one command. + +- **Code contributed:** + [RepoSense link](https://nus-cs2113-ay2223s2.github.io/tp-dashboard/?search=t15&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code~other&since=2023-02-17&tabOpen=true&tabType=authorship&zFR=false&tabAuthor=javienneyeo&tabRepo=AY2223S2-CS2113-T15-4%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code&authorshipIsBinaryFileTypeChecked=false&authorshipIsIgnoredFilesChecked=false) + +- **Contributions to UG:** + - Added section under `list flashcard` function + - Added section under `clear` function + - Edited parts of the section under `Update` function + +- **Contributions to DG:** + - Added implementation details for the `update` function. + + + + + + + + + From 9e9e84e60f5c49721d7f2e1d7e49a3c285533200 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Sat, 8 Apr 2023 15:14:00 +0800 Subject: [PATCH 157/174] Updated DG and Moses' PPP --- docs/DeveloperGuide.md | 5 +++ docs/UserGuide.md | 21 +++++------ docs/team/moseslee.md | 6 ---- docs/team/moseslee9012.md | 34 ++++++++++++++++++ docs/team/songzijin.md | 2 +- .../DeleteFlashcardClassDiagram.png | Bin 0 -> 27253 bytes .../DeleteFlashcardClassDiagram.puml | 22 ++++++++++++ .../com/clanki/commands/DeleteCommand.java | 4 +++ 8 files changed, 77 insertions(+), 17 deletions(-) delete mode 100644 docs/team/moseslee.md create mode 100644 docs/team/moseslee9012.md create mode 100644 docs/umlDiagrams/DeleteFlashcardClassDiagram.png create mode 100644 docs/umlDiagrams/DeleteFlashcardClassDiagram.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 9d896fdbad..1bfebc99fd 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -84,6 +84,11 @@ coupling in the program as the `AddCommand` will not have access to the inner st ### Delete Flashcard Feature +The figure below shows a simple class diagram for the Delete +Command. + +![DeleteFlashcardClassDiagram](umlDiagrams%2FDeleteFlashcardClassDiagram.png) + #### Current implementation The current delete flashcard allows the user to remove a flashcard from the list of flashcards, diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 6c03766eb9..26765f1c4c 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -131,16 +131,16 @@ update /q QUERY ``` INDEX /q NEW_QUESTION ``` - - - This updates the question of the flashcard to `NEW_QUESTION` + - This updates the question of the flashcard to `NEW_QUESTION` - - To update the answer of the flashcard, use `/a` - - To update the due date of the flashcard, use `/d` - ``` - INDEX /a NEW_ANSWER - INDEX /d NEW_DUE_DATE - ``` + +- To update the answer of the flashcard, use `/a` +- To update the due date of the flashcard, use `/d` + ``` + INDEX /a NEW_ANSWER + INDEX /d NEW_DUE_DATE + ``` - The user can only update either one of the question, answer or due date at a time - Since a slash character (`/`) can be interpreted as a command option, `QUESTION`, `ANSWER` and `NEW_DUE_DATE` must not start with `/` or includes @@ -189,8 +189,9 @@ Found 2 cards with the query "fruit": A: Durian [2] Q: What is the Japanese word for "fruit"? A: 果物 -Which one do you want to delete? 2 -Understood. The card has been deleted. +Which one do you want to delete? +> 2 +Got it. Deleted the flashcard at index 2 ``` ### Delete all flashcards in the list diff --git a/docs/team/moseslee.md b/docs/team/moseslee.md deleted file mode 100644 index 44e7db1f2d..0000000000 --- a/docs/team/moseslee.md +++ /dev/null @@ -1,6 +0,0 @@ -# Moses Lee - Project Portfolio Page - -## Overview - - -### Summary of Contributions diff --git a/docs/team/moseslee9012.md b/docs/team/moseslee9012.md new file mode 100644 index 0000000000..3c16eea2ea --- /dev/null +++ b/docs/team/moseslee9012.md @@ -0,0 +1,34 @@ +# Lee Zhi Zhong Moses - Project Portfolio Page + +## Overview: Project Clanki + +Clanki is a command line application to store flashcards used for +memorising information and concepts. The user can interact with +the app by typing commands into their terminal. + +### Summary of Contributions + +**Added feature:** Added `delete` function to remove flashcards + +- **Description:** The `delete` allows users to remove a specified + flashcard from the existing list. Typing "delete" will show the full + list of existing flashcards, and prompts the user for the index of + the flashcard to be deleted. The user can include a query, or keyword, + to find the relevant questions and narrow down the search list. + +**Code contributed:** +[Reposense link](https://nus-cs2113-ay2223s2.github.io/tp-dashboard/?search=moseslee9012&breakdown=true&sort=groupTitle%20dsc&sortWithin=title&since=2023-02-17&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other) + +**Contributions to UG:** + +- Added section for "Delete Flashcards" + +**Contributions to DG:** + +- Added implementation details and UML diagrams for + `delete` command + +**Contributions to team-based tasks** + +- Helped refine details and correct small mistakes in the UG + and DG \ No newline at end of file diff --git a/docs/team/songzijin.md b/docs/team/songzijin.md index 61e2defc60..ec1502eb95 100644 --- a/docs/team/songzijin.md +++ b/docs/team/songzijin.md @@ -31,7 +31,7 @@ Given below are my contribution to the project. - Credits: the code is improved on the storage code from [addressbook-level2](https://github.com/se-edu/addressbook-level2). - **New feature:** Added a help menu - - What it does: provides the user some infomation about what are the commands they can use for this application. + - What it does: provides the user some information about what are the commands they can use for this application. - Justification: This feature improves the product, as the user is now able to use the product independently, without the need to look up any user guide of the product. diff --git a/docs/umlDiagrams/DeleteFlashcardClassDiagram.png b/docs/umlDiagrams/DeleteFlashcardClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..487015fd2688d2f235b1a0c9b3d8662a10c19809 GIT binary patch literal 27253 zcmb5Wby!wiw>^9#3JL;>go1!5jevo42?){+(j}eJ4N6K#3rI@~64G4)(kb1cbV=uL z-uk@H`<(Zj^Ihlj54kSb_rBMjYpprQ9Am8gR$5XR3xfy)fk0r1JQtKjATD$x5GXU3 zFTig|HNJAf4?3G?FKl!zEFDet^lcErdggjo+BSMG@8~$*F|@IF}`cnOpCl%%LN%j)v^x}*8`3EqbpdR z$iy8xJh3B4jU2`a=XZB8z;7v#7?pd+ZuE1lBQ~ZKCn!f?&PDy%UEGY|u40yr{V@z% zgxtu0t8#L&NS38p{=18epC8kZxR@*x+1`4)hGLaO9X2UbH5(@UHa(7R#j0!qr#ngh zJ@HAGcCwRNkr7_Fjrz0?omG)8&*dpk_vE_;(pO7_jFcQ`TSp`F5{Nt5>Yg;UD4?H& zvR!5`UiG&(%&`%X3bgihe^iaIW_~YDkx;9hZ#iskO1>9(*7F(16{AHU4|PE@NogzZ zoTBx7L9CzLrcx}24zsazJy>Zh&HN`OdrRiA83zlq1sY)uwLT7{4>_2r*_qF&2?BcdJ2cs#`=D*+`7OZEakAGPBKf_~|y@ zO9xzs=mJLioya+ik%;^3n3LFF0>s5-^0+y@;xm;UsaQ-4b?%>C*i;)6L579%kJj246&v3h01Q1DG=ny4Ye=l7q|7Hf<3W!kglSB-Fs z7Zk)Ukv|nk^Q-ZzE^et&_~vt8K-IYYoVt{|n%#P%gCab(<7G`Eb@0zF_MZvm)<5H{ zYahp4DRhB_f}o7qy7c=eh7l_KjPNc(uAeskQRFZ6$j#t?k1ruC@Pkje&*&a2tNr?T zd7*yi5fOr~^X&BaP(eWC{CMhIzbmel>>}bOsVMfZpWRAX^5gg4OA`P3(OGG`@*V@h zC#t5VW@>uB){^EP50BeibI{3kgh%qnlYGk=e)GFx8Cd?*CzA-oU2SdclZNELkwSxC z`&bB{pmYY-&`=gc65EgN#BQeBZG5AM2OQ6d5z>!fP<+^ZKG)mZ+s6t__A{^C7_(c{ z`Z;fEW;W5+S}x&>-PkPUcf6DlH?HP}j-Vtri}oX=@9rW=X?ER9PYjMvA^FU;V?kV7 z(%9lcbUybZZu~Y}mx?tPxj7eXHd<=2)^Gl8KFj)so0{Fhi`DPMJ4|MBS0bGcj+!Yb zHY-tR(2N@KC`_dc=f(z4C4!Ud?-7^=z9=xTJz2VV6jhS-wfeJfM(|Jt!^+`A-8{M3 z&BVC4xQ92WIVzo9%5^9yua=X2vbC~5f4N%bJTl@!h``_*rJ2&m;hJk2xZPNDv)=wC;=N>mz|=fn%&10q`{%+|=)HjMq;GpprHewKN$)o?x#c}^^JkBKR-y0-Sn z;0Y0nnK9KP(;xSD>z+D0mhPvJ9!R2yV)qG^%ja(w4V@@sm6MIOkCkF6l1f9^LQ_*I zEHpKDDSGpb9+MkHtE#BTXa5-9lh|e1>90_)B&oFf6)(zeIn5VL%56N9Yi4A$w7Od5 za%ffKJ;UyH;^2vfbs$Tl4&%f9%w;xOEF*FoqKk&8sF#xA`(v953%{`+(JFwtRm-+=?_TSzUuWBJ>1ETSvE7AVm;;Dj3=<$ zTOHY38_P&f_s4WUJN&8N`Qggg&+f#HkwWU~1BZo3B_Ax}_c1ZF5&LUn_PrmUsaM(+ z7Zs`HYt`3#qN^4g>*?v?E0MRnTvFa5EeQ*I)(rb4^MxF6yc|&oI7R_VkDe)YS)PC_54s$ zc$3n8EPP->_x8=@B`7^;Sx`T+4HqXa$_q}!nKIIzEqeOp%NN5}*Gi<~*m^&!mZD)1 z$!E!?JqsXM89G0W;xdf-`c+Wnq2YReXR*nUVy@cA_;{QKi46M+9R-EgV33lgt8GX0 z!&S^j<2BM8u;zWj3x93jV>Ns8lAe*%(k=~T z$-zA1yXj>YKmFMiZ=_ykw??#EWjgXjD2V6^w_JHj%00@r*-CkRHAQ^$^Yi27*1jC6 z3v=5G?X@S{n7cwa?#Fg6S4#rPAxe^6lJssGje34Q5*jHYgt!l5BEQC;BxeZ}zR$H& z6B`|x>`mAxdcbIwnvo&LbFCykK7MIeL`bN4ZLBmyGF~)~!^>(kO|#ZbUXtncBGof2 zjN3(QIm(62gM*5O0`wvd4r~mxLwTARN}NRur3k&Rq-uv9nd-pYug5TbtW>hN+nW%F7mA)zSw$gs1Po9u* zZ)f?n#v6F%XEb^8S$%0@QAI3Tt{61d1D_PchSQ%J4CW{|uq@z;iHWJO(YW}zTkvO# zH~HiD_w~KF5^)7GPiu3t{@fOWnvX+PpIFg=DH}mcWcGPaP2NaVv%N|*n^})w!b4rO z>h0^_&x17dmpvPkTA6gU({4`A{p8c7{tT0W z%%{Zf-n|nM5#c94T!_+KU0ofPprQYhdzLrMdK3}|V}hs;@IIdXnytp7Mu#mv-0+Nv zc=>xat6@*l&W?>@rO8lkQc_Y~9iNI&$5|_7QN1D>E-|qfB{nv8eSJMUyZgB?1MJg; zx8>#K^MBU25KKLR`LPVQnZre!^wwVrt5h>TW>I~Y(yKEFhfK{I?540u4ka4zKPy)Suq>3)KIW%IroZImWZmzR1zPT=uyXaSC>y$|<*x^2!NHj!Bzs~qh*!(NZq%20m+Kt)>WC zIWIH1^X2S38>7wbcBaAzYsj^b&Ej}mKa?!#wMA*V(ME)C&9z{XT`HzMp-*0)sC56; z$vTTmbK}pP&ZSFEKN8%KnoN6^u0Nro+tBR3U%SCdI)zJ0wlMQ^WT58OkkyM#zqj=& zHCP!l+nRYA)d7S|7-PckZuf?;Ts+?2Fi?<`l-yZPvpmJLI)3vJvXzjmtZe0;o3YW{ z25-qza)DgIgRPxi{PVr1eYxtDA6P9UNA7ZSbKko+*FxrQV{e}!Pd)9N9uJ^(88bkfdsJun9SV zOp0F36nF0MIb0@l*+i)xOjfh{(GlZzdL-jK8v4ZZ%bOw@M*JMEwX&-P>x)#a7IhV+ z`|~PJhYlv{jvez%=Ora2?e7^m&+q4kE@}b3a}yg`(DboyBz6@@Qvi0O#x%wSWga z=oR|z@$;^qI)bZtvFK7a`v#I@yd%9g(Q9~!_8;Q=kBKXDRae*U)#~KTY$rxX8yXl0 z2cSL+T3jTY+9Yf%S2x5;MvJ6Vz^#e9i}&Nlk9Q=TC3b70ii(P`rS!z!`&6PX+%da( zpVla0LDM1_p53P%UOT2Jhxi>X1|%S~-_OXV|udlpH4?t`TMw$>Kjk?0p8 zP*iMeY@5~lI!u~!QutxKD@^LH^!fJE($}W0^N9$I(zF1C+(2tioW18g-klzJScR~(71Syv*gIQreL7Xm zd+4iMxw|~+&gY)PRR_Z*`%t&T(b(T^GPD1X_&YAzaZHU>ab-rv!PrlPKR;mCGYv;B z?pozr<%bM@f@mtiXD=SCd8K*leL! zlVI(@sAFe|XKhT5!A%zj7!=1x_0kl(8u-61S$hN=Xz+ zL%fQ#ziw}DhlPdl3kaZIxBv}C&gaidnxpBsbVEn%mL6f=McQ}sxA`94F+=dRLgRpd zW%hUDfQE>;nu>)8@q~tl5*3=Cc|3Bn9JTUo69j@5vLsz+(d&iFb$&fZ(q2XN==cak zXrDOoi7Tpyw!kRDBkVPN4g!WqdI`7pxDB_WxdpesgATV6Me9RDe0%!eFN?dIise#I zf|#G)Kz`_?8b0+fEr#Xb7!A?r^Y=*pj|2YqWz7*RVd3G2ck7HoU-!!%g|H-Lj?BaqhYIS;}%H#Zj@`}VaGTH~)@zs~>o@yTW~UaqRz zU+|PpmZD-cEjh@C4$Hq(DKw(NXa-N0@FBPT&&>UF4gR?}Ax@xVb0l z>$NAV9HW>tyE-~fW_-zrm<{uFnlNhOUxzxcQ@kCLrNmp(vXL3UcHUinrn~f`GZya= zB$BNWgTx>bPQ^?*W2Fk3W-kV*M)9el>$teGP-p)Fmm?!1@_p6L`(jo)~BW{Af$ zjD~o5U6hiN(pGJxRsZtx%B~_j>_*M8Iiy)+Mee@y8H<^V;6qpt(UaNq)NyO-eXUzt zDxYMDWmJwsxs1lI5aJlMdPX_(Q{ps>3#zpfWu_QV-@E5IkxI`IZx^Yer2mY|6qkrd zrP6K<`WOJD(k>enQZHT?;5>d<-Pa7or=hXYXrc-#7{u2w7Na|ncjLzoyNyY1mG;GG z!}v&(EIPKxo#;a7G@chML~}}S$+crFaGdP)OEuAlIuMquK^v)6e}U*FK$-*&TRLt9 ze)f3I5A1kW010(XOxpLL-JF0%K;gWDK3Q%1+k#WNf3ntyK2)Y>ApG5~Y#jYdI7 zw|u%kWx)D9i>&r&CNw|)0nxA3bbT_ngPFivkB22b4BViWObv>8Y|!=L34I~r$xSxP zq#lon(DApkH~B|HT#P9auP0YKTomP*uo4T3kDq{^&fAQNiAid>$5IrEX6%O#qWxaE zJ)JvBXDd2=x;6v;RK%+Adg?1`HLg@j9F6rWk(@Wn zLuq{z1S@*_V&>^F>=gzY(|x%Bx&ms=>W;cA@gj2T_Y|Ock3h*Sh+SRg4^B+rC%TPi z$6T5kO2J6D_$X|iV}9~zPUz~GKFxil-#|V|IHSh$G@yEM=dA?>ahNb8)q2bx2Vj@% zkIZ&kv(L0+-+Y=!#nWA|68;vM`B?5=F7A_)*tc;6pZ95otX*8H@?B>dE~#L@IIImi zt0&z6Kz(|8s?08--x|dh=wz|%E4;Tcm3Qo1$o$0c`!$U_eJd!$#Ie>tyRtA8nJefn zo8@X$i!L;q_faFVvTC zI{Bd5hjuKFt()HXJZvSTt?8*kRe(dR5WaUZGz&z=Ib19(?@LH--(I}L!AVDVos8V% zzT-SyOoEZ8#(E(Ovxnhl!jh(qw18k~@s;amWAZ*eEa@&PMUyFN-8&!nhHISn&5Mn{ zmsQKl2D5TPE7;QiElxz2 z-@&UdR^`}6W%=QmvcwM?gyiM%NK{|GoKN6(2IT$KY*FVLA>q%pHE!bp8gr)gbY$}F zu)XW1^XSo|`411Daqx=}jYe-9^)8T7I!j7P5tbN9Bul<1&nMq^5D*aHJ(xxvUF^^3 zZt%wR=4UTzd#SJgCALW7r{XXH8EKFmaw{tW#xRDSq*K~Sq3G3|P;$Q0?y~7%kF0Eg z4y^TmY~=Zb>$~V5&urQmoeI` z3swVU$wDh_f%Pqo3Y)izGr$rJ0Zp*2)TGnZ)df32mvw)AqJ7c>pKKCJqjz`l5>4ea z1Hp$q78aKKgcW6FepA7EQ>VK26!st4d_q_#5{b$U1lM2tC7PF~`DpC*&Owy=#%o-i zwN+PWBgfv~$Fo>Dcwytd{uM`2yitWt?0R%kndLYGs!7jg9v*JUl%; zH#tdL-_N%*)v5sqO4GtHS*_Na(G_-dbYu=ZIXM}ACHIcgX(!XtYJtPX+WPqLXQH=R zWQSwww-VElM-_4(NN2kXdm_U$4tuR`-?(w_j5#R3ejH;7y5T_(F)QPP2O(o(>sz?S;sQ=RNl$YGv4bpC z3ZV}XI=#*1(9_;-vNhYpA6X_qwDwu0Scld2AuxFu+_N|p{U)ee2A#t0LcO9^1bO^DIphT99rXI zZ^}|Mt#!{ z3Qym={EWBn=d*u(#e|3mK}uw&=JTkO&|VH%!WDUUnIF+`^=);>vPz8u=3-?{ zTA=G^W0-BeUG9v>LgAdQ;)It+aFgAN!kNi;jdI_i6#~3SC84Ew*Iw(>n_$QOxQros zpa#tFoX7(Y7X8^ykxc!%X_`pp;qG(6WL?>QPOxIQwC_1$!h1qD7{%p3Mssn zYkfZRa`*NFEpY_5m)@%yKNl4hP2_Q1OryhkY+9t^Cj%XyEjX%%v>f=4kJ6J291{vdz1D}Od9g|FvWXG913x6Dh8nt$kMggmwza8_-ic@$o{GG1EuZ-1 zhmn!dj?+WnX!B?oiGDINGP)RzJRPMmXmeqB(nnncV6C^eS6Nv(D=Uk6f%p8xI(fW@ z%9NJg*9df@$?oo8rb{&BO&TbW&0Snv9zC04?!6IYy`_1T-WvEA@tC|cp(8KzshWw- z&d!F0kLD8<_k`cQBolm6gdC4Hv}BKDen5+Ml>l0_e{_J;pk<}KXF`tnDuacJUp*OAmmCMfBk@rxQXfe2-t$UvukvSn>Ayl7QVi|*2oJpF(#?fOmWeq z)8D*#Q**RTUxU}ywR)kowe{pva_Z^v{;w7k1lrp$&rSCymW3}k%n&#IfT}4m?47ON zpH%(wvNe)k>A)C4lY4M*01VxGrc2V$M&7Idw9ITaYO^|AKzfNvGOi2&3-8&1rv*Bq z!tvzb)$`}i$4bnAhO8Sxp@BX&uuhoF6_0>Gh*$|I7r3qSM)gpYqjl8`iu6^8J~S%C zk6wO*0UdH6n(ml+TrYFp&&|$W3B4!$q7~Lv0ek^4yt7z1h>5j{%At`FM@SVempmFm zSnAj)C@Ez=NuSTl@JwzZdOCq~28`!=u&G^hfzR0z9^*6+lag@Q7=q>?B!s4kg+QcThLN{|>PJFC0)+4Z1}&ujUz?l5 zC1%8$ph$vDf*RNXINk|3#?_I>H6Qa^g30z*N90cPeqM<7^Ti?iF+abVhS0kR7hYYs zDoPx|e&F9gB_6%G)k4PWeioO9cz^=>glfw>l9Z1h4=_9)y(vOzreMa<2~#9C9&|Tq>RS*DE(_ z#_}|4S65AIu#o6FYg1Kx= z9%j+ksG659B4_~AY3%?=UY?!~2@7jbI=Ke~xfuX(>597wTHQ^E@e*#$?STC>6hs8vnM&fIV`94Ab1Mdn z7eK~&WI3N4Yysapk}iR43bt$!dh>a;XAS2L7Z$Gcq19o=vRc^L*o+q$-OxmlUN)bs z8UZ~I8nV~0R#brcaj$gPnvJ!nxpn(?AX5wft{)=N|P^opDKh-L`xv?dNI*THb^DIzW&(*Hg z4TB#4oXuu21hy;dl#3^P%MzQz<}|F{tyXE8JfNde_4M^?esyuexX5d6VAyd?^&S)0^thGk>OS&4lf%Ahxu?mJb?5tfQEy+h&it!l%$D;_NcL96IQpA z17K1E@=$3iV4oZ4>u;xdtJk_!LsEr}1p89U3%=22`*@=^_~yfp5H#rVXIBt5d-JW~ zv~uYV&d!>E?(*n6rlzL)`o2J3aCs)u|G^ot1CJ?v5ts{mE2|@bK!+FzlFR2z-APY9 zi`;hDSXfE`4D0Lbe+Nt`E|kqa>sVfQo|>G?&%)y3a^}w2 zM~B?2Z8cbG%QO~CkI!v$Q9hK2@QM~H#q4|yqxErH8%`@52+ zqk{udV8}z2w%(Ym4h+0nBi{z?InZJa{D`a<1$Wh#$~9}QlJU4esf8`!|L$FS9XX!t zTvGs{98vljporOyn8(c0S@m95Zg`>D+1Y_qfZ`l5}t9_z84s>O;8mqy^F*Y z72oHd9vj_Def8C7$Tn_f!Bi|1LU59G{gi#C-6?lI#qfg4E*DF-t(u&U-(7o?iYiy`;4Xv$T46x zAiqzfiri=|A}=ST#L?8$tT58k^FDuw?GM|YPjlyu1z;s$+8Ppt5U-uEdzzp-$X3YS z8&tKRq@v<+J&MR<>}YNl;-2=m7HIUrBI9+t|H-AkrNyAZ>k1?yPU|0mFJbUveD;JS zBxaxmC?OURFgGt<_9yH?xr4{~L0|WEyvi{gSK#5{ zXw=ly$kUMm7Th7iM=nFMyt1-8 zj{QdMC=)t(6?}hQ|1)F}=ycBklI<+rJIPSi3WSXV3OpWINPw1vuL3&_A|e5jduKdn zDTqvv66RLwruAOF+*$0MO9|$gJ>yhF^nj@;sc3Dau%)$?7DUZF1ghP19g33D5OAxr zr(`q;Dr~soYHE5q+Qo}5M@t#C=VzRn=spIpK=Ga+DRm4)50ojs5y&aM2U~NluC7Rc zJM{WByX`XGv3olr=_Z7@tq-R1HVH|o*;um@xTx+yInY~$w49KT(4Q{hygh$K6CEMV z2=R%iuBxhnVzsyYo&NFT@H|w+12?!DZRYUT&zYGSV7`%9W+e$PEj_*F{OlN5W|vEd zMHC~{I*-*qaI7_q(&bWwKiFbi*l+P&flvETGBA7=i(-WA<+?eIqKWSB2<8u{^P9dy z2t2?!T9%}|ZnyF9=I7?Dm-;Acu<=5G5(ETdKjjKLuF{1B5pfYJ1!^%+5yHYPNTiD| z-N$o&@(V!C46h2RG_uY8I@E56ieM2Y*B10G><-rz|{|;X^=UjAzN*h z-bbl(fC;);0d5mvLBX<$3V;Y9d8k2*8dcv2QTUXRE-q|HjP|cyDHj=D*F<>)b`Kq0 z-NU{Umy;G|L>dk}t|1s4ASs;A1@qRppYv#<8>dUgJ8jR4yaL8mDqSjZePLl2bZP%~ z6h0#eLi0Qj6(9|Rs$Fe4b3qgRF7y$dv8?CN+Pn~fY6AJ0=V02is)|cS06~L={0KEP z6}`QoXAAVxWZ_g2R<^c!tdK{=SqT}{4o(iOW#|z!lyITY(#hd3xN({ZUCr%mMtb`8 z=H?#&eF)4MRZBVmB10bcRz=}k0@3Gz;{L`I8DJuHxvhm4lG4&4#l^PIpZi%_!%_eQ z?j4KZ%K~utz+6T~2Id=D1Q+kDwzf8>)7>Fjv+3^q3pc@(fk+XS@w|ZEgk94>0a8Q> zZ1xBipdEg-QYS+4rzR(#fiWFK-r&0hH>1G;YHHH$cn#`E>_L<+klI8~j9;Dx1Datm zAAd3I1~-R(>KCL4Ugy2QDJ%pYvY1Lvw-+Gy45U%Q*(Q^`>cLczaL6&f-rlgeS9?>0 zT}%)(3=o0^QQ%m8eW5g*)GI|JW`eL_oj^r(ha!!v`>F`OTk!PNAlJa>?ZNG#=~*Am zcOnGn^7VJ zy$y1s+YF)~6gnrkF{1O21yIWg`B4~9(yczU`Fmy_2_Y_5tmMVvmd^* zVoRcAlDko?==jtQc=}khoiEf9dpzYI^>Bev-RKi)t%!2982;H9ufi#%%oUI8Gmi6} zqtx!!V>fY0N$jah9;oZ zJ1g0jf&r?A6X6ND_3$|{z`P(_c*>t^V?w_Sp3J)$=Ix!WwJ)pEAy?ORKJDkkA;Azw zP-(Ao+O1o<_X}`~m>y8pOnpPyC4Q1=tWhi?Hue^if7H&czor;W_h|U3@ISr_Ol-B< z_4fu+nu)s@$|CMetGv5Rf{#no@Z0%e@)PjFQbXPoOH1dh{!tIu@SJRH9kHw%;Eali ziQzrj6ae#{V$O^D(#H=fxR`q`{XONPUcrgoZ-y^33S7N;ilV-$k$Y$*?XY;H`zpX) zZ8A-hwYBK!F$kWa;Fa1np}zF4Et0-4mYkd%SWL&=?@BF!x5DG&8Swn~Wi2-C_h|17 z`CLRtmx_7hy(@r=i_68$?Y#ySI4S9liHV6QZ%s`NEiElS`))bdjFvwG1ct;p0X?6| zU=FRDn2?Dl@F+GbgF#^uz$U2_85X#mI+f@GM-KKCI>j6sb18JLm*1{&IE?BYZZ9kw zTtxz!e@$=0WUpIOw@KO6-uzY*n|jQ*(H)|*l4m^w$;x6%oVk>1EAy*gA!PH#;rNhn z?sIW*J%0QPASXB*KCXRa>FH^P=+gx##%X+wb~{^J;F)A2@hm(2OTb#AO@}@~ zG~po)S}N8z;ZX!P*wp-nOf|+FTri`^H9qa&s&BH~4w!5E?rx|_OiT=xCW^fHoSun^ z)4|WGIpdR)HJMoQ+h+Ig-|qvn7rXD5%V{^Xk3pbWeJ$N>&=r>)1g&<@o;N1p3#6u! zDdCNQ?`39e3C*oy(`aRRxq6j@%&_G1=OL@;{!j`39k$k|r`1>$9DSE8=C1H~XM$O5 zhXd)3Yc-*!&yh*-iSa8hca$MEG}JXRa@=269}JX3dcHUbN3ZSQKl8?RX7ZXy8AN+I zl&k*q>C@M*Uqc&2utCE^swkPY2z*?_9u$zKQxBehZ`ivor(@af<|*c_cjh!tD4GkrCY(|2NzcQE1T`Dvw z`EyB8q~!=xqqCy8*(>OL-F?b}tA>(`r>(KOFw6CE?m}7C4WMGc@g-Ml=g<3v@AWje z4!u`2wVaL2lEN%*;Nb}l5x=@Z=>f0{a}3($*{Rh0ya7?P%UdNclN~C-7qiL=+}Z8W zaT%9FutNfxyoHr(*mvKW!A>V z#tezr_X!D-glEthQ3(yk9=D+QA_fR(aLU)uEF znUmJW$i~`2Vc?uvuQ8MjWQY@9TCH#Y4m*&HZz^_HKOLW=5WCZnZ%))rPixiOLkIxa z`&T`P2oLXf=Q}sAu4uVEc!u55oT7SRYK0g;GB&o| zzGY(heQ|E>%e=AOrpNkvkdLX01qTp~(60ZvDHbIdz>kiPOMjWMnztQ*AxCLLUHFRb zTFvmex%w?GhSX|J=TA)rPwHO$eRlzJ5I>-n05n5EL4lPvI5_ynN^f$ChT$>8_phRf zhA;$3^4Aw3dVn(dYoq_O)Fb#F|CNPgMqfZ-8bTmsL4AaC3&;;<v` zs)zpHfd`oJcaTvKAISfNXvqX=)d}&fEk(HiSfG8#!2%V*{5LZA|2gpg?HgZSHoC{o z9>a7Yj^Gv>0}=!OetuB5ph0gV6d9?oHGxLQd+jgFb7yBzNoPmL*G?OG@Wyyec#pfb zMq=8qGw92{P?#yy z!e3AS2sH1~=2vR!>NvOA?wHCA_`QAG+S#eFRK=O$;EezFNFnvP&4`!)F_r=mo<-hW zTJQb_+Ga)_r}ZwlYqeK1dyrjjK3*o-TWF|%58cY>9tA}zB*r{o#G@bTekm->N(K58 z;2!@Pv`pZ%q!YBov^0EZ z5LhBQg-=C>y*j5yyZq&wLXhO4k95}2xw}Gf_wGkv>Vb8``w}3{=s0i1Ek`||4S5FS zf<-ElwGeWF#cx>)05C>g7hqx2EAjG|w|onwSBhyi3QgH1{q9U)47{eM<3c3(4YA00 z;z%ErMjg#@Tg_jNzm}{R5)&hW1>_&Cz1Q*rcnYejtHZ;>h9!ht_rWPXkf+HD%4#I+ zoKn+~Fv$x|TYnG)CMKq)=2S!kUNXvxAn0m;Ei#H27SLG7k4$azg!X;1(tei!7G(_cr79}7G$;`}zULbKoKEv$QAEmk90aPo&D^%ZtNOdS^nw5ID`^P}1cTT%N1!2i8l0kJV10J3T_|B{XQSq(Jd z4DVps%4d zeNI{)U1l)40@7lRf8Q{0X5MRHMruW;X>MD17eX&%kS?S~X?(zXgZ;M)=O<9m+Q%T( z1IvJYKtFyDSoH*RK^Uk>cFpn_F85&FPT%QDf3l)@T(8p5DoGwRs z=K%ezVGnpD;KrKQ(!!jofJeY0V!qb*U5fWq(Dh4m*g&x6>E>lU&JTuQMlc&Kdh6$x zge5AYUSV?`19+x3H$suW?Hqq)T#5~}n_l75*Fgz| z8TDZp`2WdTp;7txf3sF>jF$_<=l?bf`1ts^0b5(t3xyugB8IoseFlcdj~|anjHX-D zn+D(n3vmWHf;|N&p(jRtUiz89asW@|-2h;-P+8zGOQ*^IFNe=xy;}IoQA;Z;+{w2K z9Uq>o0DYgl8*xhYELRVVZzBzzenVg8T7tziQ0F;vl=@rIY^l+j7<1x1tH$08paQf31K)fn4nttP+ z1lmSM6hMRx=O`#U>?TVs$STY2H#GK$Z*0x{MY+Q)HK^V%H0UlVD9|qNX=-|Q z5{tLDp#2|P2!tCRvr*=XiXPb~urmPNWn;L7ug%Pa%GK4^KRt-Zd?~gKq;{@yAr(En z2@qXKgF*_FXh*y!NP|M3P+r|TQf|8Y0ahdx<>jX*zq%VrK5bTXlq}i)1Xtan3@r~IK3vre9&czf|I7a|pbr+m9phbKzie{BEb}2)+C^pl+iuRIwf>L0 z;Fn2PsW|FmWIlm;A-s9>8&WsF@+6&{+py=3;$2^%vW$$Mp!a7cg68bx=*XZ^^&%73 z{&`9@%;{=6BT!G`$p&o^v^icH#D2V#Z3%4u5rL<9LCx<-RKey7v^>}o`ovfj>RGi$ z3^wNG=DaQHL`&rHt9VbkI5(gf>ZfPlTaujN#DK@-qd~=LzD*(hmCDy3cB_3F)8~8Q#XB?_3=hEcx2J)P^l5}4d3gy@@*KhS zI{8ae7n7%DfdK~E1T?WPR$GkBqqPUKn0Dd4J!{{ym6rY|>p&vAwGa)V{awe8;I{tV z?1zaH|CaD~D#DpAg|j+rYSm2EM*R+8CCw*w6ac6AuAiJ8Z(P5A-6bpZ0FLK? zzzck5hY|uQS|gG!y8*Qea@uy9&|R=9L*)UH;x}cC;De)y2jzcP*zy;a#FeA|o#4bJ*Bo#&9b}NGAKsLn| z*1o3uX(ZDn#3dkmJ#yhp4G|vR*Qg5!L!{HZVtK5T$!!;bXaa&AQNiJQv;$muYt(xt zV12vV+GfR2_;}%li1Q$j~J#)p}-DITc;q=ID8C9QzSz!hJx_F01xul znPutibnzG~@I%z#)yczkh=?k9pvsC0G<49_=xVU*c3?gbG;gegfQk(W5OZ`M&hqnY8#IApQ z+y%A)kb@tov@Sk+{20Vlq#pvI5*-sWGBySWbZP-cgCOBl^ZjY{E8-+CV84}BRKU=Y z=kn~;%v)4ftsaC2f&N`M)B;gCI+4;XGsG9!I-75W8U=>)X9jQzaujfgi*3R5zb=P^ zooG0u9i=oFYDG5t)AguQQr&<}xsd*henU7z&=9Tw=R6_tz5hn2vHA5i&jUkPYVMvs zF}JF9+(1W}y2}e1F6)B_J-{V_a|0Cn>lnfRDZ|pp*BY8lRzZK*_74^IspU+AxBaAJ z20&|I^IYNs0kQ)L6Uwb;qXW_o=%sC?^d8jMqUaDT!}?rRrs|zOkVg)eF92^oRrYEQ z*ou!SDN7ZUc%vgDO-)VQV5^5ij8OCOF}^dY*fgnBIXqOyW;Gif$WeZrd@ULzkUZ7W zF4&vE-T#)CJ~!9bzvk9^12MuP;fSzMLP*_4p29>NC>a}nI#MNE{rD^|znm@|?6>YG zTj+4&61*CsE z^E!=XMcMG!m=COpnb`_$AqNLXsgmgQfHiaOfc=RVzZipf43xlqB_75y*;?jZ4j zS*BL807=Ik933fU$u_mMeY#jHAj1d@Tqu+5FE|m2ijFN^a{21j)HlR>Ndl+y2tgc);3|9ZuL(I>1E&EP=9x8BEN!brgQ%LMr zhqo4c?^Wcpv$J183b08gs^;eF(B=)~DVR1+PV%s@?15m^kb&*ZFMWa16Qp~8vCXef zmq3K_sKp}Xie@BsF>sBP?JFw%5?jz zLktNB6n7~9xatKII0$C&VAR7|LYR{SjEU*LV!*@&28tlo$&f0;&X~u(Ocy-2VEj_C zES<0zz|R1ArXD#4LcnN4DZ)54MIJ|`@^w9_si`&~d%-c|-UZ#%-&z<#Az#}d?KWQRY!ABMvgZ8@G^)rdf=Id#>k5I8M!Mbj z*pVJ3_z>8nkbWyfQXH6>K7f}5Oa#m)YmSI#zZ0iB$XAKXMqyw-`xx`}^%ENH>kvGW5aVK{A|A#ipST|m&we?PZvQF z0zl&rpT?F!6$RzSLqxU4D^&p4bdhSdBEA3=$fMQxA}b)$NpR1+iJ7+?+b!JrTRkqnc_;Q7OS zRxtb)78byaFxlD3Ku-QT548ssB7(rPS{;4}j;~|^-)($E)9;sGRDn(($K@CXMnlGb z2k%eWtfM#qc^~wY>uIT}IjW`am@f68AfM&AxHumAJ7|T|Gcp2}QHmpO z#4yi7Fd0-c;BK9A`Gr+^3lFad{w~AqA&IPfPP@iX`9NlcToRIZ)&lOEL@vjMs5kJk z2gHLbu;Gm-s}A9$hgU2d4YJ|B#tJ?DwW*6e)1b3~y0E>oBQ7dByMh5WWNlcdF0|1P zVBm7SKobF)`9WAkwmvgc-v;Mm@rj7Qd9-IChag!UE0sF&i5Z6OX3AkM2!_6muk{HT z@FsBYeE$3yDHA}Tp?>}(RKo=i2^{3~JtsjGjf;&PgN583_2##Vi4Op+0R9yhyTT+O zkrteB{8K{6&e8AFAoW=03OKidUUNYl7lM^l2Id<`9dHl~axR?QBVsXqJ_cuEe~h6l zl2cO)A9UNpA!A6Fa)gA0k)lnk7mymD7C)#e+NZ%on(nS}wBH32aSDgS%F4^({$|jx zGk0*Q%gtK0!ee5WfUuUPttdL0bVG4tU=VM@{mc81~dnPM*Q- z7KmTJMe4TX@aB??Od06RaBzZ=%k4YD$pLh3Q08yo;sSLcqFf>pPQ_njYiF0f`I@&@ zdlnh5Zvc&HjhQVbZ%^5KhXDrJ0(SuzS+68s41>e|UVmQ)wS$P&JaD7(4S!#Mzf?R2 zOi(V+6TzVF0+^eeoMccb$}cEzgc`o}lT{pc2@T~x-neqL6)3cWyENiKi0jB(Ha}@H z^y}kGo1xWd+nc4jv5xd(2uoK`M5$2TY{E-H5oruV%jjxk^YG!m;42dzhnxqz zlouFSBL{EiICn1(+gN2EeY}4tz+fanw%2sI<{piDnAm6BKpp>Hk5p~tRBiFb1T@~M z>o;*)X`v|)edwRoqXk~3ii*n5+^MGvNe8~8oW*wU#Qf$eJ!L7%2k7cIGj3u%BMND{ z+01-kgt0mCIyB_Z_cm%`U@0P%j`O__?yU^_0?v-dCG{=G?IFmgMorXVzHCH8;C!1#kx%Ve|+h|16G?O*gJcjXYjj z1axD064X?e(3#LbV?~9rDnB>;=GP;$Y_bFLFa|^R`Lqf)Ch68l+4&su^JdTFm|o9@ zsu@RWP0IzMkz+OK;OKt1zVh74=0Wfw%B1Et9%;qdi}6{qDEp-$39FcNSJx94xRab_;f~tH*MEOaazbM? z)dhG92~jg$Hpic1nn-I)nrI{egG!F(`Mzel@}EPrU^1VWm>4k-G|c<^v}UNWu8xk^ zHq=LGoxt|kH#zAB?vM}8>5`d^U~4=)sEYQ1RRqU3kvjBmD!N#bSuxkmtKls!-e^nR zb4ip`ENTDOOx`{nts_QAVYsPOJABCS?Unx~44Z5iBHyBLWSnMu{UQl+yFS>Y74nqs z))v3<8iY_R-ADy?PEMv5`FFsq3rGVRwPFBTZA<);QNR8tW|+`9nTw6h0Zc|r=qgDz|wZ}{h2qj4rh1_ClxQ(Y9lfWEG7;no3x`Iam4 zRUSS6`6`d25C6+>A3vF;lWDA-07U@Im<@LE9JVxkc)9KcgnAdYB(zh2l>@Jd&cgCn z?tTqlY!V#>b8~Y-CJnq2$j~nm!-O+&Bil*Hm2^D*F&Lq|m;p_^J{2L%&gL5@+n@ja z=8b`&`=0~uEI$8x{W@Xmez**#2cw(Wv!9@jU4nmTXwZ&DN47LK_my~h3Rqe`IM&sX zzkAlGlT(0v0SDRb@YNU=FfhF!#>5P8-ak9LSIcTKIl$3dL^@L|fff1BRSB-Kf+bb+ ztT_u!Tj$9i00?<41Vi704Cfga;Mk?&N=YYsT!}ta;z+x6V#{rL1}99~{>+KwZ9Ct}h+9^~1UczGJ^c!JARzw%m>~Gn5va}n_$4yeUUl*B zy_1^!Vig9(xAK4`oGd%1ZE(*c){ln-NX4r{pLS*?|twqf}{+}a-ypH z|7-8cxWi45Yr0iQoLPTaTC4;eM&04Yz zBB`vC?2+|5Z#?hwz2Eb`zu)`)^ZoVxdkyz;E$4M!$9WvbZQ<9iaHA?RgRw;{TP(05 zbnZh@MArGfjL#8Amd0kzv5ho8R%x;V<^b^Pfa>1RIJEzCYt&ZU-r={GqP^-AGA!an1HWR6a z#~1V$cMCSgBac-L+X=Jnsr~com{c?EJ3Q6hH?}6#phOVOVZ^1P|IMQA%0;n-*JIzh z4l9<>?AS5Qb$Tos3Fyoa&<`?b^snzWDW)j`z*j5_fLx(Z$c1QqCYZ z_@|Vt^4Q<9wEv_jpE-BK?Ls#Xpf{u!E?e9W7~D!EiPKf|n$gH8L;9#0y^%iNe$J#B z^MBejBfZ9kdc;jul1T|9O4h!as@Fnx#zxAG!5xCg4A`E*#wNJgIhDAb8UMFUI&Q+i z`x}06iW_TSi_GbiQD%!HH+IGFDM@Vh*t7SztJcftd=$506% zC2%tj*?W$*1~~4|mB6@U0y_s;5r=g(fAF&BFu1WR1gTCa{euR;Urs;mEHZA&N-7J_ z_W*yfQ1gvk*UgCTftErem|sZ4Srra}xOxD&>cHwu2Do#6iSg2Wl0fL3Vc~btI4Zyb z<&T^I6~}i+FQQ-2^#ZTA&DK(Y`70+Ur&~|q+=o(L#*q#k|rr=D=y~$8Gw)fOOT#i}z z2_5Gb3Ed@1WdJHO@aQN8*T zs$_=^U;4X)37#~hfh|ddbZ(N#;J;)c$k8$|ISHFM5t%MJr_QV9<234qQUUkH|hStjqTgA7>6N2?ix z^bd3XR=D`$+p-QO=?OrXZ);^*xgqR0a1;PTcA=R5ZeriKFgte9H)}60@z1*_p?N}fH?q2m)hyC>sL9)1oZD> zWW1DTi2)?|EYHP)W6Xc!C_1D*2@ebh*@O*1R{->J(AB=>MS9&l`}~h9ZcZs=hMe9n z1BR4)1@^4N`C~p8d@ogA1ev8=f3*-*X9_L)ObT=9m*|O#sc;wyG`a&J#4RbP=5>o5R1R9hkMc1Oa7Jy z;`TJwEU>C%D##jv1fTXJ2vaFu5#y7$CI>1mFL*}VUM}XPog{p)dIP+5;M?GDcdJuq zQ(GW)$ujA-eyj2@Y{Qg{mX6Q=Mw&EY$ViX4vC|1QGjzvRj2f zuE~CKiFhyZ6@#6i(K|W}B=R`i-m>iJg$3{r+^gl(VEsJ<^6Mobi~v1ouFM3L9o8z! zmUo9gYo3+O^^c6)%kL~1LSywi!>)todqqT)wsWra1u>BH?isj~sASUF`mt^FMrU-? zS=FXBlsg+EKHh2K=&_{jd!~P8ug=TcKg4lDpCi(lCDnKCkgWDIw7NN8bD2wK+>E*`dzP&ODAV)gfyQl8bo9Lgh8TFRX6()@wG!m-x)M z9`A>sV>S5L=BW{+wx7BPsZ{NWi-!)D(a=5QF6FoMLEqeJNgSh`CjDYIaQ^kx#8TH2yG<;+m6a8u6SPl zkxY|{r086=BD7uQht*&JgbIqVK`tHuj`bSF(}zAO!LO94e>%`eFj)Y2Y|QEL3m0|; zJ81v~)+`cpgQA1yXf=ciwE!~~0q%*g@U-y%=z{nc@1Q6J@?Fb;Z*20%AJU$PAg^}h z20=o5{|rAwQ3eKvnKSqisB2{9PeXJS^j4*fwZppAWk65jan0EmFTiV;>nWcGrCC52UVShBPCvwTgdM;rBuN11Z=HTPY1F%$xi>j}M3 z#!ftycYeHQw1!&GmKkF(8<-hDsf=p3hgwNqaI*JI2)V_$s{cr1$vP9S!<+q-tn=^Q z0bNS22?S8E{hS{f(3|1b$sK|?u1gWQKHSVs_L6JzA|XtVPLS)ecrjC|VEM{TN_xpb zMSUf*oqj&&((=BFl+lW;`Cj%;5wjpe)^Tu0jg61TD|u^mlcT53tA*=0RgWj{e0;>L z3b4~jF-m8rfOj3>&QBrGNc;lJq0V!6N|ZA?091iRX=7!TMKEx5%w3boTcTGXDFHnL zz=n4-P$d8AXBbSqaP1D2X|@+bywfvJ_bRtj@}T!T3sEPHSj>ncJ`KZ`hKF94zbUPK zgX0F*6UZ$PB@dNCtoS~V?)JQNc{iZe_Sci>hQ7zn&I7|$%1X?n=w(rnVH~=1rAgpU z#qy7mcW)wnRDk$D4tj@LP70#GIu{v4G>b~yb*H8O6>+j{@@i^Nzr1R^0N`DIZR`RXZw*(%$ zu3zS%N}9o^@Ej(}<740$){w`kn%1|qddz#5QVkbRcVi9J@qMg+c> zg#yd*PdBQKJnF}}Jo{1~9-IStZDY%*uD0TH^>5KBerK>rzuEa&jtsr5*Ovtn09Yt0vjnhrq>!9hT3&u>m;}&^+_tLBjea|Kxpi!{rqoka zdSR=}_K~#!%qKPrs*(*Y}0W?Vs(2iTC(rl|YihbcZ0(U|{}&r2GX!?wt<8$YPm`qEy}3w@!sY+s|Ik z+#s(79@+^OP?$3Cfhv0sX&3-C7K}6}{`#>-en4APLgMm{z&GPqK(wUJ-Im@Z=_a~{ zJTPi!2^hk@-Wk9T41ucfd^0qZ?U+2$89qWm$^Yd6hi+96Mg?-&R?9#+i}$-4x&X}5 zQD*0QUxp$7eWLBI1C)YJbw|nAANc=EZ1e>i2rKbcTOCu>=lWg|++iTRL-lMBoH&-n zZL5J5kK#1}s;VvyCj~+NS7A=hgmK$lAEYmffD8rx8c5t;TLtlJxqw4Ah+_U1qoABg zCL3LrZoB)6MTrv`P1P&Sc%MwBVIrR5U>p8kXGLwET+~`G+l=V zc4b0B!k>Q;3F^H zy$ux>RA2|#4jcu_gOFVx)afDBl)lExi#*YdxY$@(TMIbS0`Pt8_<_wvQXyg+pvoTw znGfWb35k2aD+a~e0o6qJYKG(4mn%N?`GXh^g-Z1R4i4DR#yQR9-G`}Lw4IStb_zyk zHTTvbadGJfxq+~YA!bASA3XkpFoMixUwaaXBrPp1Sp%xdvABwMq&s0bLLV^vn>qBI*D@$rfxTL z4u`BUZ`?a2GwiHY#V@@c;@7mg9JxaFkV>c2MXmnaQ>YiYd=?@ucs$B1f^4- z(bQlXm@wAOk6?nfSJ;f5k=NAFNR++)Ec>aF-&)i;ZZa^Jo(}_ZfhmZ*N4D!}CjNdU(-^%x>gZ+1knrYmpL`wNUiIDhLPJWMDj<;nPhT`PMji&L^FY!% zF|=3kpmTmD*v8NaB{>ysV#X3QnSVBtnDpmPFZMGgjVdv&yc({5 z%0Nn_yD!)$Wu5-#koCEnX39WN&$?_`3RWo7T43lt%EH`X2cKX7)M8#sauPCR0ACXl z6O)Euw#97RXxazusa5>3o=Ku?*@jZ#-;!+Zdo(ydY`vVpM=uk3d{D*blSmkRt5Uk~ zHgh15BIGW}X_INBA^X`%gs}xq1KeS%NyH2BT$UmrlqA> zjOW{m$|%{?+#9c$SgUp7CJV?*$qDrQx=r-Ew5TE6K~)pAz2^P!szIBoscAppGGN~< zz-0fiKr2qeIVu`S3jLlST_+$4Uz0crd8d%j2x!th=*qmp2M7p;Cob+#AIS%Ti;WO) zMA4x}p4j?p-;Bi9bxf50xUr-cm>a-iJ<_I{JzFB`i(6^eSW>$3ygXlOX>7-z5eugI zd*J&Fe>c(#zV_vH&~&6cPItUyZJV7ovhnevrfm;&vCD#jolcNB*2x&1e56CAK%HxK z`G^;A7~uM_(!-%p1iC-$Q>mNNGXjYVE6Y3seZsUVTVb?!`6M9~3F=I!VaW440>s4pTZ?Y(4eEHEWj?v+{lPMpc-K%0y&mb-mQM?N9P>~j}s0)M)WP9L?jRh zEeAS9k)6xm6nWJvtZ)TX_gQ#bln1f^{Y}^DtNe`$tOK Ui : calls > +DeleteCommand ..> FlashcardList : calls > +Parser ..> DeleteCommand : creates > +FlashcardList --> "*" Flashcard + +@enduml \ No newline at end of file diff --git a/src/main/java/com/clanki/commands/DeleteCommand.java b/src/main/java/com/clanki/commands/DeleteCommand.java index 968af4d881..a516bb0151 100644 --- a/src/main/java/com/clanki/commands/DeleteCommand.java +++ b/src/main/java/com/clanki/commands/DeleteCommand.java @@ -6,6 +6,10 @@ import java.util.ArrayList; +/** + * A command that removes an element from the ArrayList of + * flashcards. + */ public class DeleteCommand extends Command { ArrayList matchingFlashcards = new ArrayList<>(); From e8fe942532ecf0cc60fd3c628b1199e25354bdbf Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Sat, 8 Apr 2023 15:38:27 +0800 Subject: [PATCH 158/174] Refined delete function to catch null flashcards found --- .../com/clanki/commands/DeleteCommand.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/clanki/commands/DeleteCommand.java b/src/main/java/com/clanki/commands/DeleteCommand.java index a516bb0151..a89013656a 100644 --- a/src/main/java/com/clanki/commands/DeleteCommand.java +++ b/src/main/java/com/clanki/commands/DeleteCommand.java @@ -45,13 +45,19 @@ public void printFlashCardList(ArrayList flashcards) { public void execute(FlashcardList flashcardList, Ui display) { ArrayList flashcards = flashcardList.getFlashCards(); findFlashcard(flashcards, query); - System.out.println( - "Found " + matchingFlashcards.size() + " cards with query \"" + query + "\":"); - printFlashCardList(matchingFlashcards); - System.out.println("Which one do you want to delete?"); - - int index = Integer.parseInt(display.getUserCommand()); - flashcardList.deleteFlashcard(flashcards.indexOf(matchingFlashcards.get(index - 1))); - display.printSuccessfulDelete(index); + if (matchingFlashcards.size() != 0) { + System.out.println( + "Found " + matchingFlashcards.size() + " cards with query \"" + query + "\":"); + printFlashCardList(matchingFlashcards); + System.out.println("Which one do you want to delete?"); + + int index = Integer.parseInt(display.getUserCommand()); + flashcardList.deleteFlashcard(flashcards.indexOf(matchingFlashcards.get(index - 1))); + display.printSuccessfulDelete(index); + } else { + System.out.println("Sorry! No flashcards matching " + '\"' + query + "\" was found. Please try again."); + } + + } } From 5d13cf34b96502304129e2079417aea046dc09c6 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Sat, 8 Apr 2023 16:04:39 +0800 Subject: [PATCH 159/174] Refined and reformatted PPP --- docs/team/moseslee9012.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/team/moseslee9012.md b/docs/team/moseslee9012.md index 3c16eea2ea..1508facbdd 100644 --- a/docs/team/moseslee9012.md +++ b/docs/team/moseslee9012.md @@ -8,13 +8,17 @@ the app by typing commands into their terminal. ### Summary of Contributions -**Added feature:** Added `delete` function to remove flashcards +**New feature:** Added `delete` function to remove flashcards -- **Description:** The `delete` allows users to remove a specified +- What it does: The `delete` allows users to remove a specified flashcard from the existing list. Typing "delete" will show the full list of existing flashcards, and prompts the user for the index of the flashcard to be deleted. The user can include a query, or keyword, to find the relevant questions and narrow down the search list. +- Justification: This feature greatly improves the product as users can + easily remove the unnecessary flashcards and study only what is relevant. +- Highlights: This feature helps reduce the clutter of flashcards, either + from obsolete flashcards or cards that were added erroneously. **Code contributed:** [Reposense link](https://nus-cs2113-ay2223s2.github.io/tp-dashboard/?search=moseslee9012&breakdown=true&sort=groupTitle%20dsc&sortWithin=title&since=2023-02-17&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other) From 257c1be14b22b57cd338c9b4b3c80c9aba8208e5 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Sat, 8 Apr 2023 20:27:50 +0800 Subject: [PATCH 160/174] Updated AboutUs.md for Moses' portfolio --- docs/AboutUs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index ac510b20ad..770d9f72b7 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,9 +1,9 @@ # About us | Display | Name | GitHub Profile | Portfolio | -| :------------------------------------------------------------------------------------------ | :----------- | :---------------------------------------- | :------------------------------------ | +|:--------------------------------------------------------------------------------------------|:-------------|:------------------------------------------|:--------------------------------------| | ![](https://avatars.githubusercontent.com/u/16986946?v=4&s=100) | Kong Dehao | [GitHub](https://github.com/kdh3799) | [Portfolio](docs/team/kongdehao.md) | | ![](https://avatars.githubusercontent.com/u/44609036?v=4&s=100) | Vu Van Dung | [GitHub](https://github.com/joulev) | [Portfolio](https://joulev.dev) | | ![](https://avatars.githubusercontent.com/u/88227764?v=4&s=100) | Song Zijin | [GitHub](https://github.com/SongZijin) | [Portfolio](docs/team/songzijin.md) | -| ![](https://avatars.githubusercontent.com/u/72350236?v=4&s=100) | Moses Lee | [GitHub](https://github.com/moseslee9012) | [Portfolio](docs/team/moseslee.md) | +| ![](https://avatars.githubusercontent.com/u/72350236?v=4&s=100) | Moses Lee | [GitHub](https://github.com/moseslee9012) | [Portfolio](team/moseslee9012.md) | | | Javienne Yeo | [GitHub](https://github.com/javienneyeo) | [Portfolio](docs/team/javienneyeo.md) | From 2b4c5dccb63dad06301ba7121426a37789cd8a85 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Sat, 8 Apr 2023 22:07:05 +0800 Subject: [PATCH 161/174] Added documentation to relevant methods --- .../com/clanki/commands/DeleteCommand.java | 23 +++++++++++++++---- src/main/java/com/clanki/ui/Ui.java | 5 ++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/clanki/commands/DeleteCommand.java b/src/main/java/com/clanki/commands/DeleteCommand.java index a89013656a..355f9968f0 100644 --- a/src/main/java/com/clanki/commands/DeleteCommand.java +++ b/src/main/java/com/clanki/commands/DeleteCommand.java @@ -12,6 +12,7 @@ */ public class DeleteCommand extends Command { + private static final String FLASHCARD_TO_DELETE = "Which one do you want to delete?"; ArrayList matchingFlashcards = new ArrayList<>(); String query; @@ -19,6 +20,12 @@ public DeleteCommand(String query) { this.query = query; } + /** + * Search through flashcards containing the query and adds them to the matchingFlashcards list. + * + * @param flashcards the list of flashcards to look through + * @param query the search query for finding matching flashcards + */ public void findFlashcard(ArrayList flashcards, String query) { for (int i = 0; i < flashcards.size(); i++) { Flashcard currentFlashcard = flashcards.get(i); @@ -29,11 +36,21 @@ public void findFlashcard(ArrayList flashcards, String query) { } } + /** + * Prints out the question and answer for each flashcard + * + * @param flashcard each individual flashcard in the ArrayList + */ public void printFlashCard(Flashcard flashcard) { System.out.println("Q: " + flashcard.getQuestion()); System.out.println("A: " + flashcard.getAnswer()); } + /** + * Goes through the ArrayList of flashcards and prints out each one of them + * + * @param flashcards the ArrayList of flashcards + */ public void printFlashCardList(ArrayList flashcards) { for (int i = 0; i < flashcards.size(); i++) { System.out.println("[" + (i + 1) + "]"); @@ -49,15 +66,13 @@ public void execute(FlashcardList flashcardList, Ui display) { System.out.println( "Found " + matchingFlashcards.size() + " cards with query \"" + query + "\":"); printFlashCardList(matchingFlashcards); - System.out.println("Which one do you want to delete?"); + System.out.println(FLASHCARD_TO_DELETE); int index = Integer.parseInt(display.getUserCommand()); flashcardList.deleteFlashcard(flashcards.indexOf(matchingFlashcards.get(index - 1))); display.printSuccessfulDelete(index); } else { - System.out.println("Sorry! No flashcards matching " + '\"' + query + "\" was found. Please try again."); + System.out.println("Sorry! No flashcards matching \"" + query + "\" was found. Please try again."); } - - } } diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 6477e5d810..1e16ea3e94 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -51,6 +51,11 @@ public void printInvalidInput() { "You can view our user guide or type help to see the correct formats for commands.\n"); } + /** + * Prints out a message to indicate a successful deletion of a flashcard + * + * @param index the index of the flashcard at the point of deletion + */ public void printSuccessfulDelete(int index) { System.out.println("Got it. Deleted the flashcard at index " + index); } From d52631f9acbaad219c790390e0c53266f3149cc2 Mon Sep 17 00:00:00 2001 From: Zijin Date: Sun, 9 Apr 2023 12:17:51 +0800 Subject: [PATCH 162/174] Update code to include more documentation Refactor ClearCommand to print using Ui --- docs/umlDiagrams/AddFlashcard-0.png | Bin 32121 -> 0 bytes docs/userGuideImages/helpMenuDisplay.png | Bin 114371 -> 0 bytes src/main/java/com/clanki/Clanki.java | 4 ++++ .../java/com/clanki/commands/ByeCommand.java | 3 +++ .../com/clanki/commands/ClearCommand.java | 6 ++++-- .../java/com/clanki/commands/HelpCommand.java | 3 +++ .../com/clanki/commands/UnknownCommand.java | 3 +++ .../java/com/clanki/commands/VoidCommand.java | 4 ++++ .../com/clanki/objects/FlashcardList.java | 6 ++++++ .../clanki/storage/FlashcardListEncoder.java | 2 +- .../java/com/clanki/storage/StorageFile.java | 8 ++----- src/main/java/com/clanki/ui/Ui.java | 20 ++++++++++++++++++ .../storage/FlashcardListDecoderTest.java | 4 ++-- .../storage/FlashcardListEncoderTest.java | 6 +++--- 14 files changed, 55 insertions(+), 14 deletions(-) delete mode 100644 docs/umlDiagrams/AddFlashcard-0.png delete mode 100644 docs/userGuideImages/helpMenuDisplay.png diff --git a/docs/umlDiagrams/AddFlashcard-0.png b/docs/umlDiagrams/AddFlashcard-0.png deleted file mode 100644 index 0fc0bd5647a82aa0c60d6b6b5981571ecd359ea3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32121 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 h75>HwqIO<>lqo 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 diff --git a/src/main/java/com/clanki/Clanki.java b/src/main/java/com/clanki/Clanki.java index 904e06f8bb..1385593a96 100644 --- a/src/main/java/com/clanki/Clanki.java +++ b/src/main/java/com/clanki/Clanki.java @@ -30,6 +30,10 @@ public static void main(String[] args) { new Clanki().run(); } + /** + * Function that loop the process of getting an user input, processing the + * input and execute the command, until a ByeCommand is inputted. + */ public void run() { while (true) { String inputText = ui.getUserCommand(); diff --git a/src/main/java/com/clanki/commands/ByeCommand.java b/src/main/java/com/clanki/commands/ByeCommand.java index 4c5dea1b86..cef9a57ee4 100644 --- a/src/main/java/com/clanki/commands/ByeCommand.java +++ b/src/main/java/com/clanki/commands/ByeCommand.java @@ -3,6 +3,9 @@ import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; +/** + * A type of command that will indicate that the program is ready to close. + */ public class ByeCommand extends Command { @Override public void execute(FlashcardList flashcardList, Ui display) { diff --git a/src/main/java/com/clanki/commands/ClearCommand.java b/src/main/java/com/clanki/commands/ClearCommand.java index e616cd5207..e062673aed 100644 --- a/src/main/java/com/clanki/commands/ClearCommand.java +++ b/src/main/java/com/clanki/commands/ClearCommand.java @@ -3,12 +3,14 @@ import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; +/** + * The type of command when the user wishes to clear all stored flashcards. + */ public class ClearCommand extends Command { @Override public void execute(FlashcardList flashcardList, Ui display) { flashcardList.deleteAllFlashcards(); - System.out.println("All flashcards have been deleted."); - System.out.println("Your list of flashcards is now empty."); + display.printClearMessage(); } } diff --git a/src/main/java/com/clanki/commands/HelpCommand.java b/src/main/java/com/clanki/commands/HelpCommand.java index 5e04417a0f..b4136cb91b 100644 --- a/src/main/java/com/clanki/commands/HelpCommand.java +++ b/src/main/java/com/clanki/commands/HelpCommand.java @@ -3,6 +3,9 @@ import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; +/** + * A type of command that indicate that user want to display help menu. + */ public class HelpCommand extends Command { @Override public void execute(FlashcardList flashcardList, Ui display) { diff --git a/src/main/java/com/clanki/commands/UnknownCommand.java b/src/main/java/com/clanki/commands/UnknownCommand.java index 17220c26f3..6b88caaaa8 100644 --- a/src/main/java/com/clanki/commands/UnknownCommand.java +++ b/src/main/java/com/clanki/commands/UnknownCommand.java @@ -3,6 +3,9 @@ import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; +/** + * The type of command that indicates user have keyed in an invalid input. + */ public class UnknownCommand extends Command { @Override public void execute(FlashcardList flashcardList, Ui display) { diff --git a/src/main/java/com/clanki/commands/VoidCommand.java b/src/main/java/com/clanki/commands/VoidCommand.java index b44c0595e2..44d4373edc 100644 --- a/src/main/java/com/clanki/commands/VoidCommand.java +++ b/src/main/java/com/clanki/commands/VoidCommand.java @@ -3,6 +3,10 @@ import com.clanki.objects.FlashcardList; import com.clanki.ui.Ui; +/** + * The type of command that indicate an invalid input, with the display + * of why the input is invalid already handled elsewhere. + */ public class VoidCommand extends Command { @Override public void execute(FlashcardList flashcardList, Ui display) { diff --git a/src/main/java/com/clanki/objects/FlashcardList.java b/src/main/java/com/clanki/objects/FlashcardList.java index e3e8a3b490..f88173d461 100644 --- a/src/main/java/com/clanki/objects/FlashcardList.java +++ b/src/main/java/com/clanki/objects/FlashcardList.java @@ -14,6 +14,12 @@ public FlashcardList(ArrayList flashcards) { this.flashcards = flashcards; } + /** + * Adds a new flashcard into the list. + * + * @param questionText Question text of the new flashcard. + * @param answerText Answer text of the new flashcard. + */ public void addNewFlashcard(String questionText, String answerText) { Flashcard newFlashcard = new Flashcard(questionText, answerText); flashcards.add(newFlashcard); diff --git a/src/main/java/com/clanki/storage/FlashcardListEncoder.java b/src/main/java/com/clanki/storage/FlashcardListEncoder.java index 0e42133bff..1e392a1b2e 100644 --- a/src/main/java/com/clanki/storage/FlashcardListEncoder.java +++ b/src/main/java/com/clanki/storage/FlashcardListEncoder.java @@ -22,7 +22,7 @@ public class FlashcardListEncoder { * Encodes all the {@code Flashcards} in the {@code toSave} into a list of decodable and readable * string presentation for storage. */ - public static List encodeAddressBook(FlashcardList toSave) { + public static List encodeFlashcardList(FlashcardList toSave) { final List encodedFlashcards = new ArrayList<>(); toSave.getFlashCards().forEach(flashcard -> encodedFlashcards.add(encodeFlashcardToString(flashcard))); return encodedFlashcards; diff --git a/src/main/java/com/clanki/storage/StorageFile.java b/src/main/java/com/clanki/storage/StorageFile.java index dd1f4ded69..ee57d29ec4 100644 --- a/src/main/java/com/clanki/storage/StorageFile.java +++ b/src/main/java/com/clanki/storage/StorageFile.java @@ -61,8 +61,8 @@ private static boolean isValidPath(Path filePath) { */ public void save(FlashcardList flashcardList) throws StorageOperationException { try { - List encodedAddressBook = FlashcardListEncoder.encodeAddressBook(flashcardList); - Files.write(path, encodedAddressBook); + List encodedFlashcardList = FlashcardListEncoder.encodeFlashcardList(flashcardList); + Files.write(path, encodedFlashcardList); } catch (IOException ioe) { throw new StorageOperationException("Error writing to file: " + path); } @@ -88,9 +88,5 @@ public ArrayList load() throws StorageOperationException { } } - public String getPath() { - return path.toString(); - } - } diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 1e16ea3e94..47c3d5081c 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -32,6 +32,12 @@ public String getUserCommand() { return in.nextLine(); } + /** + * Display messages to inform user that a flashcard have been successfully added. + * + * @param questionText The question of the new flashcard. + * @param answerText The answer of the new flashcard. + */ public void printSuccessfulAddMessage(String questionText, String answerText) { System.out.println("You have added the following card:"); System.out.println("Q: " + questionText); @@ -46,6 +52,9 @@ public void printWelcomeMessage() { System.out.println("Welcome to Clanki! Time to start studying!"); } + /** + * Display message to inform user that their input is of a wrong format. + */ public void printInvalidInput() { System.out.println("The input is in an incorrect format.\n" + "You can view our user guide or type help to see the correct formats for commands.\n"); @@ -71,6 +80,9 @@ public void printlnSeveralStrings(String... message) { } } + /** + * Display all the current valid commands the user can key in. + */ public void printHelpMessage() { System.out.println( "The following are the commands you can use:\n" + @@ -143,4 +155,12 @@ public void printFlashCardsOnDate(ArrayList flashcards, LocalDate dat System.out.println("Your list of flashcards with the specified due date is empty."); } } + + /** + * Display that the contents of list have been successfully cleared. + */ + public void printClearMessage() { + System.out.println("All flashcards have been deleted."); + System.out.println("Your list of flashcards is now empty."); + } } diff --git a/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java b/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java index 1beb2c9565..5f642bab4e 100644 --- a/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java +++ b/src/test/java/com/clanki/storage/FlashcardListDecoderTest.java @@ -10,7 +10,7 @@ import java.util.List; import static com.clanki.storage.FlashcardListDecoder.decodeFlashcardList; -import static com.clanki.storage.FlashcardListEncoder.encodeAddressBook; +import static com.clanki.storage.FlashcardListEncoder.encodeFlashcardList; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -39,7 +39,7 @@ void decodeAddressBook_encodeInput_decodeOutput() { FlashcardList flashcardList = new FlashcardList(); flashcardList.addNewFlashcard("q1", "a1"); flashcardList.addNewFlashcard("q2", "a2"); - List encodedResult = encodeAddressBook(flashcardList); + List encodedResult = encodeFlashcardList(flashcardList); ArrayList decodedFlashcardList = decodeFlashcardList(encodedResult); Flashcard testCard1 = decodedFlashcardList.get(0); assertEquals("q1", testCard1.getQuestion()); diff --git a/src/test/java/com/clanki/storage/FlashcardListEncoderTest.java b/src/test/java/com/clanki/storage/FlashcardListEncoderTest.java index d95545de1e..bbdd5ca138 100644 --- a/src/test/java/com/clanki/storage/FlashcardListEncoderTest.java +++ b/src/test/java/com/clanki/storage/FlashcardListEncoderTest.java @@ -7,7 +7,7 @@ import java.time.LocalDate; import java.util.List; -import static com.clanki.storage.FlashcardListEncoder.encodeAddressBook; +import static com.clanki.storage.FlashcardListEncoder.encodeFlashcardList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -18,7 +18,7 @@ void encodeAddressBook_correctInput_correctOutput() { FlashcardList flashcardList = new FlashcardList(); flashcardList.addNewFlashcard("q1", "a1"); flashcardList.addNewFlashcard("q2", "a2"); - List encodedResult = encodeAddressBook(flashcardList); + List encodedResult = encodeFlashcardList(flashcardList); String line1 = "q/q1 a/a1 d/" + LocalDate.now().toString() + " p/0"; String line2 = "q/q2 a/a2 d/" + LocalDate.now().toString() + " p/0"; assertEquals(line1, encodedResult.get(0)); @@ -28,7 +28,7 @@ void encodeAddressBook_correctInput_correctOutput() { @Test void encodeAddressBook_emptyInput() { FlashcardList flashcardList = new FlashcardList(); - List encodedResult = encodeAddressBook(flashcardList); + List encodedResult = encodeFlashcardList(flashcardList); assertTrue(encodedResult.isEmpty()); } From 3dc7c174c0296d39a8d03c1f86c32e163854a123 Mon Sep 17 00:00:00 2001 From: Zijin Date: Sun, 9 Apr 2023 12:18:31 +0800 Subject: [PATCH 163/174] Update DeveloperGuide with descriptions on storage --- docs/DeveloperGuide.md | 59 +++++++++++++--- docs/otherImages/ZijinProfile.jpg | Bin 0 -> 704324 bytes docs/umlDiagrams/AddFlashcard.puml | 11 +-- .../umlDiagrams/AddFlashcardObjectDiagram.png | Bin 0 -> 5219 bytes .../AddFlashcardObjectDiagram.puml | 9 +++ docs/umlDiagrams/AddFlashcardSequence.png | Bin 0 -> 30281 bytes docs/umlDiagrams/StorageClassDiagm.png | Bin 0 -> 38111 bytes docs/umlDiagrams/StorageClassDiagm.puml | 27 ++++++++ docs/umlDiagrams/StorageSequenceDiagram.png | Bin 0 -> 81102 bytes docs/umlDiagrams/StorageSequenceDiagram.puml | 65 ++++++++++++++++++ 10 files changed, 155 insertions(+), 16 deletions(-) create mode 100644 docs/otherImages/ZijinProfile.jpg create mode 100644 docs/umlDiagrams/AddFlashcardObjectDiagram.png create mode 100644 docs/umlDiagrams/AddFlashcardObjectDiagram.puml create mode 100644 docs/umlDiagrams/AddFlashcardSequence.png create mode 100644 docs/umlDiagrams/StorageClassDiagm.png create mode 100644 docs/umlDiagrams/StorageClassDiagm.puml create mode 100644 docs/umlDiagrams/StorageSequenceDiagram.png create mode 100644 docs/umlDiagrams/StorageSequenceDiagram.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 1bfebc99fd..33421c469b 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -21,13 +21,11 @@ ## Acknowledgements -{list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the -original source as well} +- [addressbook-level2](https://github.com/se-edu/addressbook-level2) +- [Song Zijin 's IP](https://github.com/SongZijin/ip) ## Design & implementation -{Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.} - ### Add Flashcard Feature The image below shows a partial class diagram involving only the relevant classes when an AddCommand is @@ -46,7 +44,8 @@ Step 2: The input string will be converted into a `Command` object by being passed through `parseCommand(String userInput)` inside `Parser`. -In this case, an `AddCommand` will be created and returned. +In this case, an `AddCommand` will be created and returned, as shown in the object diagram below: +![AddFlashcardObjectDiagram.png](umlDiagrams%2FAddFlashcardObjectDiagram.png) Step 3: The `execute()` function of `AddCommand` will run, calling `addNewFlashcard(questionText, answerText)` @@ -59,7 +58,7 @@ At this point, the adding process is completed and the program is ready to take command. The following sequence diagram show how the add operation works: -![AddFlashcard-0.png](umlDiagrams%2FAddFlashcard-0.png) +![AddFlashcardSequence.png](umlDiagrams%2FAddFlashcardSequence.png) #### Reason for current implementation @@ -288,6 +287,37 @@ handle. That's why the two classes are here. No. +### Storage Feature + +#### Current implementation + +The current storage feature triggers after every execution of command, updating the flashcardList.txt file +to be the came as what is stored in the `FlashcardList` object. + +The entire feature consist of 3 parts, as shown in the class diagram below: +![StorageClassDiagm.png](umlDiagrams%2FStorageClassDiagm.png) + +1. `FlashcardListEncoder`: takes the list of flashcards from `FlashcardList` and convert them to a list of strings, with + heading to indicate the start of the question, answer and deadline portion of a flashcard. +2. `FlashcardListDecoder`: takes a list of string in specific format (as defined by `FLASHCARD_ARGS_FORMAT`) and decodes + the string into an arrayList of flashcards, discarding any string of incorrect format. +3. `StorageFile`: uses the encoder or decoder to save or load the current state into or from a text file. + +The following sequence diagram show how the add operation works: +![StorageSequenceDiagram.png](umlDiagrams%2FStorageSequenceDiagram.png) + +#### Reason for current implementation + +By separating the decoder and encoder as separate classes, it allows the code for the storage system to be more readable +by others, allowing them to identify and find the chunk of code for each function more easily, and possibly reuse the +functions if they deem necessary in future versions. + +#### Alternative implementation + +- Alternative 1: Have all functions in one `Storage` class + - Pros: Exceptions can be handled in the same place + - Cons: Will cause the code be less organised and readable + ## Product scope ### Target user profile @@ -296,14 +326,21 @@ No. ### Value proposition -{Describe the value proposition: what problem does it solve?} +This application help users to better remember key points in their upcomming tests by providing them a platform to +read through and practice answering those key learning points. ## User Stories -| Version | As a ... | I want to ... | So that I can ... | -|---------|----------|---------------------------|-------------------------------------------------------------| -| v1.0 | new user | see usage instructions | refer to them when I forget how to use the application | -| v2.0 | user | find a to-do item by name | locate a to-do without having to go through the entire list | +| Version | As a ... | I want to ... | So that I can ... | +|---------|-------------------------|---------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------| +| v1.0 | user | add a card to my flashcard collection | study it later on | +| v1.0 | user | delete any of my cards | prevent getting asked to review that card later when I am confident I have truly memorised the card | +| v1.0 | user | review the cards that are due today | remember them better | +| v1.0 | user | make changes to the q/a any cards I want | keep the info there always updated with what I want myself to memorise | +| v1.0 | user seeking efficiency | review the cards at an appropriate pace that is most efficient for memorisation | not waste time reviewing when I still remember the cards well | +| v2.0 | new user | see usage instructions | refer to them when I forget how to use the application | +| v2.0 | busy user | store the cards somewhere | revisit them next time I open the app | +| v2.0 | organised user | view a list of all currently stored flashcards | know what are the things I need to remember | ## Non-Functional Requirements diff --git a/docs/otherImages/ZijinProfile.jpg b/docs/otherImages/ZijinProfile.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b866b96659b43c51c0f61f40f8d5ca2ef422d96c GIT binary patch literal 704324 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 z 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 z

xE=aLM{ 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

yU`f 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

dL*4U;{UpBWvWQ@cfTcq_(m6j0K9 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

HF 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 z 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%0AIF@9)cPQoi@v`@ME*%Rz4Sn{*EF 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 z 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

$b5$kYE81u%bKM7k2@z4zCld?SD6 zz~e{B$p>pF8u;~4@{qo=PL_%u%6 zjb22f_-cWcOAvAYwiU|$btJ@0WPv)c-=w*J8S1C+6=*;)jf*3l5Ol|6*tI&9tMl(q zrzw(_WlvIi7lPNh^Ch|FM$HlM>n%+V6^XPr24Vl}6vWMf5&*|h)3 zOlPu9OBZ7~GS6S1mM~xK&IR`ie+BUPUZD8vQf}L!IXOAZ86eaE!g~Cn34A2Q$1y%w zg#>bnVMhXx=LiC)wb>WlfBm$>EZm&K(ZK;4Wk^}TXh#RWIMl3ns|-kd1%n~6+v`hl zou~H%@Z68ju+KBpZerOS)kOGztinH~WkTy9IRRgT^L_NQ6CbZd?6xAbI6U5M{iRRQ zAgco9DkDknPAvjTIYFrI?(>&Wez$==MtpD{J)bJ zRJZ!i{IjVLTIBz1Cxm;z13jE((47IYXJxXy9ems~E2v$+c_dc)-Y5)8{L0b&x#wx+K zLf@CTVoj@~V^Mc;)hQ7n^gf%tL&V$PgW=|>nS@uuCbhM-RD|!OhcYYnhb*esHa2oV zf8gUgS=mv&(#i?Z3Up{+h1K`jKD=ht6GyV8zl{3Qc|?ymYPw|ZzSJXq0iu0xx0S6e z-JLs%tS0GZiW;LJf}rp;4vt8czP^4nh~i6?Jqmr3@&Ak{E!!U5eU@T6GN?YS)MiHZ zV1JJbip()FAo7Zdi>D)h)cWOs5uGawo_Y^5eWrCRw+qA`p`hz~^95~H%b(A|0aE|) zBp$3t0E2*Km^_UIE>L397x*sEVdW>tgTaa*9{qfN_R4)OF4aQAJo_aLMJN}%=#N&2url3eIJLnx9K{(w6tI~KLfW*zMBEE#D-nWNg`QOY-zM~<$D zUxv<0{79$$c+EpH8XqsJq_2 zzK*B@8g5K47h6@pH6zRYiK{|0f+|}k7HT!8 zcJ6L0jmC1=zArE5bP}Nv5*FrxIzxn9h zDlEOAGAmWyz!!n~P~bK;(Y+__alFv&5jV9itW#R01YvN1ZE=)GE{Ba71}%HF^~o6bNx8a6cb@!2Umsm13YMh3+`lZ@dI zi~)b>msvb|4K;K0kZ)BkL$$RpKL5awDg-?NHU`hZZUHI`fH6ySd}gp{Zb{XRZ?&fO zFxemwte@f0YrL@Gv`Nm%{wRg&S8tXol_Ypb&`+Nh5ER7y7w4r*`R1(q59fVBcf@%! zlq&JPA%wpwBj&IH-*in&i-ZMwf&>r%aF;y!&Np}lO*s8A$cu#>X2OY8%0=5yHtw`? zc81gPoxXZEAM6n@ZP)KVmHtvgag+&<21gFHZ&UCv&KFixR#M%Qr4Wn-SvkM)DxC^S zpRmP(b}bPRt)?&wm15I|h)MjkZ`@&WV9*q60zF(*QZgIPm!V;rPAyc{-y1Z6N}70I zVDHqaQ@17FCb6BmK)_6S>z0s=sL@kU1dwm@^BG}Xd*x7DyYLPL69E$^ZDD(&F!nl) z)_1JeM2A`5o#7};E{N8>SGHO>r5Af0HL|k;FZEg(LDbm{Yw^y*K%m zI;mK>$T47@rs2hl7hv^zJn9oMPIPDdHhLHFouiVE?wRdM83Z{#&uztXQQrR0P*DrY z7Xbl5BexdDPlJXlr>2@aP)3ou+zEShMAsz<7e7&>+1;o`>Fmu<51;_J`!h=lp@f=gKmL(Nhv>NMBNC6vkj&1m&of-$szkd@tKe zM|bW$@rbDZ7H^v~xNN}+t*DruA#L#D*cBp^-cR~M5ZtbqfrZ~d1cLHGqiR;rk?STG z>%)(atY;m64hiVpciVS{>J*fkD3kL>PsZMNV1zIaPLE9f$B!R_xzBC)mvCiF12k6w zYhHrl^!z;0<;$NFG(bNCue_31VPWB$H`i3&0Kr?cgj$NZNpGgi5NT0LQc~{ZDGaQ8 z92}5>!nq2?5)SP&A34T+PYvCKZMYYlmzkLf#u2cLfpbb6yv$`#?(p*%g!BWDL-?!( zBs}97a4=lEbV&wWExvC?omX052Z5tTU=6?o)R;|8x>BV!R#p> z0zD_Il;nk@I>4WC^T^|q=@}P0ee!Myv}CLa*MSQjQx6`5k^GRY?G7k+|)Tz zBLN(ND-%k257w9rT345sKR9n8%WUT;^YYplXBQrZL&iy602ALf6kh<(?QKoPrdxx} zo{XG4y$$7yI47&;|JxU#I7HebHwpM$=>U4^?s0Mgl!)Sjx;rA5xt9cA6fn}mhv#>Q zZH|2GR!~K|efzerWo8W|a;idN9#=IBgZI#*{IAf@!UD=&S#4e2E$EsEW`G6`$f$*T z;WUrlo85(JIXMS%z;zy1B4T1L^KbWx?;zZtOw%ziF@^3$tKIN$O*r?F73FS+VC*#6 zh^wE4Ss8=Mi#Mb+RzSuQyuiU5)yb6Hjgyh`N@u)juuMba45}0ag6>8gTLO5_4Uq2tw2%c}8?K1dl&)Hw3M zasz2kc^_(0m}kxy!ohNMn;Ss0GDe4<9YpWqKo0txWJmHb}$5!s3g-zit5%sluFXY*mxGu{$$q5RNKMsO4}q0E+1huWdS%<-h*9x0IH&4 z>P>Q`Mdy?5-9tk|1Eu|GnV(UIC2XI9e8nfw7u3?)s@SW-f+}JhH#;274-)?}J}jb< z1Mm`A8Z;JPm+Fmd(!sdu>VuEB_xG0EOsEO>sY@cBO<=_Tu@W{)D$M3atmeXX!6+J0 zr0NOa5)bb+6ga2}&y)VPK9b;|(wWDP!^eR(ejFrp#I&i{k|!=+y=UkNDDjcJ;+kAo~Ebb^H_@AD!i#RZ| zT^#>uIm|>t4FsY;6i<(dQejYCnL<^L|KMPWe zzmJc06CkfZU*FDa7xCAyoc_bK=wH|i`t8)&E4M(lFE;GZ0fLda-~k1bESh50fm9djJ+l+l8P%p`RN0+gVU(-x&xkHlm!_PTtJhb_ShEqRgz| z=o=h+%VNSjnAh<}`2Y%bRqKN$YlRwaduwpk;a3+hS^s=EOdcn+Ksr6_y-3>RV!5`M z`GfQ?&tuP%-~072J3f$x?I}423=?{zl%%B}bZv>#S0;6g>>CZ_Q&409Em|5X39>pR zE@-?)VD?${!;|kM2b;ne7*HQp3!r6;0ORB5xLuq1{yeapu!cZMS0*>^1qAH@qr6c* z*>-#eozp{F5T!OuM5~R%goTE+c^p^0k)y}{$#(D+3#&ANWv;mRh!^Hhxoj?L3kV2+ zX=JJ`_5j*BOb7B`DE5^r7o#~jLG9|PuP};gjCekv^13=r#XO7g>TN|u1u*OW$AEAb zr>0V6*aaNzz1~s$%UwxG$a$+f_FdRzY6_-C?ZWmlTa!V?xkRVa_qwq>7KK)^LJoc$ zmcM66U;pC{$oT%dN%9E4#cf)2?`h1QaRr8S5Yi?>vG!NsW+yW_~!^+ilACes;4k}rwQAoFeg$}G`&+Eo!XB*8m zJJ9E#E+CKr2WTFD61E?9l+cfb1qpVaA7K^PS-4O!h5Vr+DJmMD+I}Cu2gPr>D3C42 zg{rTrx)ba!f`jD2x!Y3jCRRJ3WvKlwwo;x) zkrUMLjE&42i&^T zmtd`>u_Vs!qOY&7;j?#d!Ko48-<2Yvy9V8C5u^IuTml3x<@~|Hd~dpW2?(1q!QS(D zE!G)%mMe_=W}MUM?rT;TaR@tzZ%)-J3@HohRoKj2woP=Vn$u}P`OQB*gzadYH83#1 z%mDZz@}#i5d{|=QIOtbtRoXQ#SC=7Jg2@91EeW2CKFA-KqiK8G36{M2dTy3$moMjo z%nJsl-QC@Dcy|m7-5fe3ol1PNevFMhz}{FG`pWt_$luXRT~?Nl_jv-LS<6v-qHhs% zekOmS@kj+b@zq8p$Ph!Yr@>Ea^dISMQIFe=*5+9AWIzKPb%gFn>j!T z(C+5rnORkWv2Jl0@$#N9iwENcFE8&rCzoRo0*cX}p+%@a|H~^+QZoUwSJ8NnmQdwq z=*=0QpLgC_H%qT8y8+gF_sHeZv>p|seP{`wk(l}y6&KpEWNthyFVz7iM^V`yG8w5} z@GE_Il3L6M3w_=uRZA-=DP4p1S{CqjgVkXuU;muKKCs$k0x`NwDFE}7hWVpnCh~{v zpy2El((i}HC?h~mTxfy;P`Ov$&d(~05Za;8pKXo+zp1#Caq1)-*H1D_k8xGo(@35J z#>d7Ef`~}9{V@8T%q;(oWVxuPe?UO8S$=(5hrM^V-R&cI38lSxp*Uw#oa(o%W{vA< zz*Xiw!+p7t93-==5-=#~`nW zn3&G!W^esA<$mrYY)_mv$__469NoLFCZ>f6L2dKbSCa6eZDp(;ZcCljlntKl%wK-+gbh?-Q!-TPM^i{`+mUS4Bh)Y;WF zU{M1jotv7PT38?^Ca#3;dwz2c%;UarBnBFaVIRfayXg=ZDCydA_EAzXoGX9O$_ZL!@V`Sxp_Ue@pF5Dk8#itMd@}%>?i6cv&tWaY`v?aA29!E^ z71K*gQd7AlCHC-~$vh(s%WY<^8Iy<2@<*8N1nrecK}*fu*f}lVx{HD)zJet=7&iuJno5>R6 zty{OCHOa}rAupZz?%li0%s8WtC(`V^{f}|I!yE`5AZRZxEbLXRr;y8%KPciq-18-!arxhG16TSV9OS43h(I(yKO{BovtScNARd1{WJ!k=!~ZzP?mZWe zb*V{gOr^1VU}--*2+1ZpyC^FoWN%8T>`g@WmUWEmhJDBiWtFWQj+Ggn&r!eM zec#XTd7l3sulo<(&iS6}dws9#bA3MV&-?v8;F;jr{Z~iHGkXjg7HBjY%JQy!byd~u zFa#xKr#O)OBe+C&2D=Ce2?6m-FA~mHPQD%Q068lho1KQ_->_B4v7)Dm^UVbT*!K7w zD)V>!qB|tHR7z=dk(>K8yqSn-2>@$=7qFOw%U2sDDAFLO8CZ!WQXdElJ&u1SZ3ZNd z>?N^+7XD4?t?bL&2~EEO zr_#!GpD_zyE4rNc!a~?rWku5%sH!$fKJ7vSXwMHpg3ahsel%OQ%ywb_d-5mK2 zrB0E)>Rtr`u8sBR@~VPA#qtN-d083kC*K@Y@CEv`AP6#`*DJN&B?yW+AU#F@ASWk3 zNql}`Zq99aO!P=^{GTf3d?z?^LEX8$ybK`{V7l~4%`?hMN}8d9|CDU;VkO=FhX?fZ z^c7?yxFI}V+p?O8?MR7kux_Jjt34pcBgf^8DWf-b`_n^#1}j_kpPHzutY>sOmmeW;W3YjfkZ0 zoNedD-FTRo9;Ia5R4)S=coZ}Y5V#-@%+xgi_!V$nXvNc9nANOYwQ^x*349HF=K&F4 zUtjB+MbT^8fZpcML%sn?qe9;k?39Oz2;}7C01xLGzB&o#m7zRMGw@&F5umAYH~)8Y zFin5GUxlyi6;Q_^N9zDE9g~|ScVV*x>t6`FPS~?47_`sPhnDcV49d|}V6u+3*F5F;6a&+_*6lOmt zn(VTyU5|v}{YCkg?LZ{kw+@`;)sBLu$(vdfUArMxH2idcLD3;sz^Q8^`5FTlV^7=h&wab7# z3ar8*3guEAGzP`(%!T|gf04m&XYO~rtU^MXG<1PT9^(wOpNEv7Byx<@!d-MX%5Br8hu{?-z1>h!LgXRRWu#LKp55u)h>1qg@=d7Qh^_d6)$L8z6=am zQ3S_%xyRd?tadX&QaUqZ?x`9#eH0(lynyVkIP>NC_0Y$UWlT*oGK^O>8nHeqmH#1P z*Hog#R)0$FP`;J_^oRrUg=#9c3n~9n4|H$nip#=S0=C%V>mpe!lA9TJ=C9tR#R$P5 zvgpB7^Qj?KLLHl*N$gRp(7nk`0zT!{Jv0)6wib3i;xFD-t^*StCEB~9L3U7IOb5SP z@GS*h zDcKB##=bvwXkLNN02(Hr+;klWdnduzMO8J<=EkGH4o2oEbtkOlOVA|=iQAeb9(f`d zE#gRf{m$9BxqeGMz|H$|!T`!B!!93W#XGUmyaIg{&5q^eQdQ2>T67}RvhB@3 z(M8BtMa0fv+aWxDE3zIAH4oBwe$jizCZiXJIEQEuz${DB+ z(4$YP=Unc+2-M(GqlaGHARg7kcnFpIW<605=QtD-+!MHR`fltmkk2nvrag-l$QXsdx>EWaoVDv*jm2w^Aj z@XAUg@>5*F*W;YX{c}d~d31ygP`LfYs*dwK39M?xd8E9>J&I9wz$()P4-ZGh*B7{g zE5eW`q;;cOW}-t+DP3Sn z6ZDH+9U{;yJ1QY8K$14G5?-YkfyExZWQ8~wKfi+$!I_&tBDu}T>vOO(@1oY8(~IpR zS>a8l{@Mul>GGUUQGiV~S_Pe!Vih=8?Y0-$U~?}IC_;Ct6ZvL3m1{3ze3fk{W1fvho-{ny3CV8>Z&k&^1St90e8IM9bG z8#>FdWmUZYf&yLEb>|?Xbi5o1V{Ab_OY+Wxb1NWq!uRK(p7{%_$!83HrNhMMF1=kt z{@65w9_L~!tpfs8P8DyGVy>3t`z(A(h=f8Mlv6u%FCB`q)c{|W`}HG??%<~WgZt*P z=#;o#UZCE77!x}u_h;O$DddZ%N<$ebJxC&e0ZzsuZ*E}`)bqrkv_6i~wZ5ACL^HJ0 ztZ`t6RYIbR70!QUno|CMQQ?9U?iYwzh)VAkdvKl0NPhWGgV5qZ9|-E zJ}}-#Z%v2`UgzfR$dwGMbH~#Neb9f+0>Oy`r&)XjB#h06>(U&JB z_%-{@cKUe+cuDsL@;|QcNkeekX(bxtO9evurX9%8e+Iet}0iF^_@4opng+%zm z|NA|=D+!NF@Nn`7YFgpJXJusp-4tAh+Mb0U4ea4I?(bQF&~#0+87VIij+jo@;EZa&~%_fVJV;9CiKEK zH#35uZ?&t^>Igw1=zhi=_Rh&TJK>R-KH{28R~A2(R~?&>0PW(_$j?pwhoFgrJ_Cfm zNlq4=v%lx)^vzQwIwPm9?aOYrz>|$u?P_laOZvQm0)djZ|5)YM;#M@WQ*b`XwDSR5 z;mLKTbu+osKEFTpU)S2nE8$u?k=6*((x{XaJO83>OiAOYr|0A$-HuxQ40&Zy<$b(| zmK^wz1o2s`y0><-T?cZyc?~$6@q4dL03wQ}Fx4 zQ^W1-HU)8hj?NL>tFdGcz3_OTqxukszpgd(Ba>}qQ0T|o->Bf8f4_(FJ59ocnOe_x z{{BDd2H*4HYB*S5i!XzezNiQdT)`ni(yIkv?ilBWn|40lJ&(82Lkbv9umfqHSn%-i zG5juOv~y-1veCmGIRACImJmUE!T1bL&d zFohp~c-~q10@$;19Si5nui6SpnaoIiCwM3VH@{#_jY6RyZIDSPrHD3YUT=AmsqB&0 zuZDvNbSmGW`;qA_CDg>w&F*=$edM`OR(?e<&ap{I(D{`~ru})TT$bZ^nqd*CwqHAP zk{!p7c9EfhygHHA=clhGTp*4uoM=J88vFvFn;653$39yd^>WxqlISW zJSBK($3Vq@f;d(6><4w~1YV=~goFg(OMtym)I*R^!a!f!9tW!t^0oDlL(k5I4LTc~ zYrZnvD2{}}f&#!5pz+@>2?s4jF*q^(I5mf<`&Ejm?h$|}p@Hce5Fnh9Y180{jgH10 z23Tgb0Zmoio0nu?kyH84VXhAMijx+^W<|sM6rLae6SHx*(QG;{&?kRbp`1EYntA7 z^9_wK6Bm;Sk^YIU8mw1uTC?L6yxndw%zggY_5{(fy>>m^IG#*AxgL)XvT-5Vuy=Zo z%K^{$p*p+?Q5D)QOqkx;q6HfO2j`PqUyb}-ESnmBOpjw%A^beY`NuC0x6`nMFRK?E z_o<_75!e5HQD8y*=S3HeF%t{jK+x^zqV%=beH~Zdi#iA2>*gw$2P{3Op|la4H#2IS zLqJhyFWN)1vW6-d*;{18P}wez?Lg;4%xfd>r$?JsZl-s_mfMgLy*S=O21MtC)-kzT z*ZQxdESUX2 zPA;x8cfsI{eIt0|LgvW}joLWdC%%XS1d?itkIQ6OPU2c8l$Xcd^$1e9E)|lX@H1beI4QM!m%LuZU{-~&G1Aa z)O^yTYtJ+8P*1aTYu)J033JzzW{_Z9{XI_p7|Ww^Y9e^de6kFJPmNTpE_3~DJeK`D zN8Zj8fD4JW;M`SSC|$-AGxh|>>If`=7kc{rW%*) zs4{hL>NXzsDSYjO$3}T0)$gizNJfCw=T*Dn|Ni+i+vS%tZHp62?;9jGB$u3Z>S`bi z!lYq`{OiQ~)o#qw2%<$UKXdupnpL4jRrN#2d1}Z;>=A5COzF16XEcTHysc^QKAdP& zx{tW^VN3+N;|~CtL(g7M%03s7!z&@Np6rZopj_N^U|H6c%s+A4^Qu>>xp_i zx-CduD@({#jwWjYxfM=V2P-To#<{kkvxr>H%5Olm`ZH>Wi*1YRLeAr-ZZNL;69LI| z7XUC58JpjFF18HgtBz8V=VTav;UpD5T`#~q=Ni~5wU zvgW%bA!OP0W^+kB=gVT^y`fRPki?^@$9&nV8qFb;s&=&vY|!nrb22U19xIF-6XVD- zkQ_e4_vji@MoVkq-ARUo-EDvnw{|2l!o5G#cG{Wu_aVz`jR+H!bn_})zNa3z{VCPZnHk;?L zu*1Z@(1qptb$f%w{S5KqIbUZ^>`HGo+st{F80};OND?PA+l@Daj(BBvQj=eBF-dMI zi{d{w<3(CF4~DZSvbbp|Vpotc?z_G_)N1Q>qa5Xkq{}Y1zLt&I&2Ro>3BOTIZ(uGu zhDUYFW5n8Eb1=)tpml$*DfTp`-Z>8(30#uUg{KmG7{?vKCLl}oWfhQ#Yxg&;ol+8v zM?`(LTVm_g#PauVyQ|(KY>_cr9o8Jk?OE*0q~ev$zN=>}deE<;0QM5mS5FFmNY?Lu z`PET@>GjHpEv8+Sr!Bglr{z+Psxbjew1xS{bC}|*^yBxbt%)-e(NAd!Llvofm&XFr zH4=bPH~xS+82EGamzNE>tVgTHU58a;83xN8?8)FOUVNtF8@i?M{-Qk1%Bo^@Ce=wf z!{ZI}#=DayeV6Qqm$QJfqHT5If>2Bhxi%{W{}#QN%M&L~JVjVY8Zlk!`*Pb?f33tM zCK|ZJD#hg7)bn>-ZOH^@Q`aGbd(bOxP%B*JUw-kq!9_#)&un(z@hm$Tz8>(o*U<{f zz1jGVroG!X(5@yYk5N{pzvE_~s&F;@MjL%1yMZ^-q0WvAj~I_dZlFEN4813GU#5XL zeih^IpDpt&JQhKC`rg2oFQt zx59!PtDBdzA8TQw^~za-aD3E?CCT}DJWH!6hs*>P1!HOM7%Coa?^j=HeCeqd?aakC z+sEjWF$1MUt|jqNyE49v_jVUD)uFpT)k0O>=Swf_+Yzm> z#C=+nCII?NkE=2^gAyv#gWYyk`diyAh2 zD3hVSHCl(8+Jmv2f?Y4Aw#F#e=GI=Gx37ykn%?fB&qne{t9is3JUn-o#duY{m0#-$ z`nshiE;P4=T4xA1)3=9=_Bz;tbK|nm=wy&bzWLj{X1u#WPMauV$X3T@DWLgtxsIW~ z%cX-gAt(XbaYWfy_(l13ELUr`ma0iK&}SI@$~<-^ycwb_>c0h?Zb7Ytj#>`n`1cD~ z=#iDWFtYrbFi5z_>1wFjNk1JPG;Ve>8+*D%<{K)^8jwg{W8_;W9G{8*8VY{ELt2>UGo}tW{%4B z%at>$)`hSpL)JQCFzE?FK}r=2I|t9rCL#8Nw8k678$-qG^+fHDFgy z&hE7uOOI10Xz)8an!sW9G3j{Eb0@ydw~~DNB0?m*{1z`#FRqGLcd<+;SYj08`^vsN z(r@kT9EU(z|D%8wwg9JCmPgSp#JpYsxqM$=rZ2i{E&IDfj1jIMi11okvgeR884r6p zzAFXxD~MArPwbx>mkvL-+7#=)FyXRlI!|lBqDOzC6!wnVB`US1{bj1!io`l$|jIz#`kTnKAxi~99 zW}8(Ud>DV4FQh$qfs=x{x}v|AQUV)s!R^v-(gxQ%9_84Tq5DpI8FZV4z9g?}BUZMK z?-Bl>!gz&-=fg{hOZV3UJY}Xor?cjS8aXted=QrN@z@pPf{wCq*t9%pO0DF-XXFW# zz;=OX&1^p~A@N?wf=!ST8My)$o1?>*Z`k=x1?hZh?(ffTbs)Jv+t&2NN-x1!tQIg~ z&{#*Aft|*uGt^Gf_Vx_QO6H%oF;5h-@7gDr=xSC$sI~LjwJz_jH|ynT@er~D2PNCl zD!OsCpak#Db1t`=wQU|tnAO*NQp$sF;mbjBCjPz*a)mG8jD^Lca``g? z#v!R&UsQY$Fobv}Qtv4pQRo@^wv9=ZoX_yxi|N3{jO{E} z+3B#dlCO;%LYEg^Z|h6Xo0#74GlIyK}B*s8Ci<7_JOdq6czQOJz50&EhRNpYq$y zoh~!)FbjLnAmX)L!|O6EeOhR&g{q5aGjw&ibGpx4+(15p3J&Ddn`+akQ%eAifr=U! z^@a6^X0k892F= zh@DVzIJK6{;jpK@+{h*Q^Kg5*=Q$UjaqqMZz1djwXNf;)4B7E_5BT+;p7j1E!gom~ zgomaf>sXW9QqD7aFVmg1ID7GGv_kuIJDSd~(D&yLs;mhw+orLXMo0k9mBiueK`Lid zm;Ri-QL?KJzjkl@Tm(<1ptI$w*4E#{-fQHvcXiP~ilHf2RSq`G&47cLoqey736V#h zyXU35)K4asOj-+WFEA>TneQWT?=r@w<#BPC0o+-}o%YU*Q{?t`eHnp1-*fNAyEe}@ zO^09Kn{(N*o}W5CKIc>iML?*vpb3GP>#(u7^exq?W^#3*uX+6ULf!S~Bh>FD|2rQU?)f!b@InH@qG6g0#;XsO_tQl~$MlY0BIUA>1p#YW%p zv)E)Z08J-|4R*&Lk;=UjXjMqcevzh1izyC}^tv_$)vkJEgBct4RA3~{;LvZ~hAM-+ z!g_jKr&obQ5gSuZmAiKxl?f-VBk)k?82*22%iufI_dWt|ttM^Z2eK#JCf;y!vv zNC=hw|5Y9HaMt+u(0^!Tol&qIx(fVoFI2v65-bm}bVXuI^Sw=9L&Mt7UW(+8=p`8C z(7$Wqu#Mj}aXeaP+=d#wU~2EY+h3oH8}r8az}HK1B{i9~5u-eZ9_pElOS;>aH8e@; z+^o3Mm!U=TY-pNJV<5o7?9$as6bMhzyBxh>tk61YOxAAJCVkA5Nh&tJCve Uxm=Vr!M;LCPEEG>`kjFP0!A}!9m#Ej1mN(!1J!&6Z$2!>lp^A9dl~eXP@3xp=#RDqube)Qu>V7&5p>7|_ z4DR$_?iO1`g?Rm0j56ie&hHF1*`MqV%>1AVIh{!Vy}p>w+*CC#Rk4z|`sSK?Ow@$J zt=Lrc_5?agR_>9*b+Q}JI#hG2mxV~lH?76gpB2sI$v#jcoE5}b7CBA-##H9os@w|d z^7}_;AFr(Nsfw%2e(8@^zkR!Qu^LaYWP2*{nI&uQ{#Z)ytcjTGMb9D{8|yDhUGmFR zY{j`^ZQY#K=Mnni+QxQE-95v&6L~}F^CkNgK9bsUgx#viI&rUb?8dr}J#YO$sYvDO z0j-!TToD}{Hl{e`TDUzHw+E^;aD+HjOk;l*Wm-QWnLNp=&Gb@fs;GY>xZ*!@G~8<*qGj}FFI-u;Ywm?&!C%~eS$nMP(hMLd<* zv{RBdXC_*Wv6FIT>+L<|<7Ig--`KD`DGn>oHwfFNuFoS?G1$)a{niJY2-T1K^9sq% ze@xDxk$Z{E@i8WkVob3mw_dECh;Y)~Ix9+ZZG@J|nm#rwCML#NW?h$iYGsnTj zY%n0hF^bixcgdL5yuo^kVCH1{a!pai@D!)n$o&-6qRj4r>FJ)hhjguM)<65VHrM5- zw~kXjAcP-$d^TAFra$u$m@28N%4a?HsBHZ@A9qo6L!bDemtlf$l~YaCTNX{Q_7jt3 z6?~KH95}_N=^0LwCQWr2mtg1SaE~0h``|%cO^t8=+@#uezIYg4e7mG#>^b4)!NI}N z+Ca_3HpM@4a!q}3Wo|J1esQjh-OsId@}M$!Rg3}Ew>}Y z?6TU?r}OdnuMz1~)UE3de&Txl`gLe%C=sqZ74f3pSvEGdbLT#p3|1s5W+~=A31`=t zAF3Ms_O>rgQ~1e~CmA|*It`&o7UMA`n@e4+{iUyub)GVmHx%Am0IrklPWTkrrpt6r zM;fnX23)|$#kJkSJ~RCMeY>(d^{je@poLiQjkBUmO4+p-$y;G0(f0$1C@6wLL#c_0 zX)|DdXI|a6Z{LFt*8{I=R=mHe87b<|c3-W;p{V7dloTE||M}meJLr6HTeMym?v+;4 zoNltbVEj0U8IPZJd6l|>g0!_G-y(rAOT7$7Q}|FpT>n%@2CG3&zQu$@g|)5iY*&tW z=j!TeQ@_v3@JT5T`P{5LH0B^{n*1>CMI(g9u%4y8t2ZR*KYg3W`O?IUE-*gPr{@a zX>kY#C;M^ZKsl*ei{mF|^#dpgLs)(zS=~~hyLaDAU!xHChPS@X&CbIkl`ds?z-eoA zwgG+6ii0`c>__P#h0#_yH8xA>?^3t)^z`KA-+y(=&CP91kdxy@A3Ss@%djikVzMoO zSw%{)>>by$zvt@CojZ0udG*K7IWG=w@m4rLf6X*Sv|j zsqiH?7GGq41K)b0;++@5?a3-J4}zleo$$z5AALr(dU|>;WxKk#ka3zu;;H7DMyb0W zr7$kp%${C^JzF^tA^euTWfJwD$Usd^9h$kS*;P0JRcp}fyp zZ-2Nzu-(3}FIfidrlzKua$FrU^77W}ONMUPQf9ScWo-E*``=eQi$pPqN3(0ws$GR= z`IW>Rwj|fS>8TmAw=|nsEzhi<3^Y(C5J$oOQHJyWxo$!Va~u~JH^tpnyYH!H)00Kt zRp-PokEfUU_R0I^U&-XUlKltdLx(`8tUmqk>KY+x*U$}6sW5ci~ zAA6v`sw>-&V(-4zI)8tr6bG5f-;whb{$Im7La_s;zmV|+`wle!g4grt3$(Pf7cY`0 zv`R@!zY7Wq3J9>;-m=$JGyHj)=BV)AgUaTVReXMapoqS}Y}B)*tgK8xK%n*gmzRf^ zXZuQ;GW9!B)dk9&@OcyM?ClAuc^*^#kWIF`6udX?j*~|z;J`18HgL$Qh-KG5fBrnk zqQ#70Zf?$Oq*hXsx`v=2G4Z}wON@9}aB#43@v2T+qJpp|rKF0E?WN%JyVKG!c$8vz zczCT$GC~Lf#RD}-yfVDSqG8$m`okF^=afcgdI}~Pve8zU>`9*Q&kr2t;o-?fcW6vq z=@a-txi@o^uRZ!KC$-l#DYg89g1BuK#~|vn8?>RTd}yUa?%w^myu3U&H{O|LU~Zl% z4cFv=Ea>CMGnbd9I<7G=hz9XJogbPT{6h-OB4LhOPa!g!7p;y2#f!S8Gx@I*(a_8e4`Mg%Qg;0WRaZ5DluXYIL01)*jLE`C-H$To8ikF`P5$+%Ye`0> z&ZW3}bH{6gu^tVv(pn%teL7d8{OI&~H7xhk)D)WRBfqyf1ZR;f!#+9*Wo1UCAMfA4 zudKWqn5$DqewmubTB1`#M5Hqn2cJBaY6${EWWs|W_MRlI6eOo$6Ox_z9$pqetd){7 zVQGaCYm55?DL_k0%d=-Fm*Yw~MlynCe5XA30{c{BnG*(b>L*W9(c<4cC}QZ>sIqMq z%aE=x9!PUkX)hbIWmFdc;C9?tnZr)B7C3C?m*+F6)$xfOr*xfR(5sSj(rcG_?}wU3s{LKCMxP{>EKYD*;;T&YZG>_kf30kIt&FH zYaLMvPz{?(*!^@k)2FAgRN1~3)Uu=XAqNf|km(vCe7$e)hy}mG@1hwzGkMHeLqo%I zw%7hg>1*{er!4)}d+gt()UwfmQ_q%XdTaqiINjad(XjDMP3Pkt#k&>b=Wmi`Qo`X_|n+ za#-h1btTG_2s%=o^&&DNypg&ftC8Bk($Z3y1lg*rqV<`A_yhv}Q>{1m0<5rlgzE(~ z&vLh!s;X*wpI_0GCl$B!CUBy&XU|GWr(C4Jbm`5TH$N8_7gLKJZC2-pJC6zgEnM*YaBh7?#P?#=DKg~} z2m9%~{R$m31WJxl_Q=W4&}~>+Sh#j7$G9)q-rgF*JOb)Pn#KP-W`-~xg)2G{8@3#u zXFBY<^)TM3C!dzvc>2MR*eMc{_|bhAYAa85&H8l}KFvVC$T94SX6Y@kn%!7kFil{Q z6~MN6yA@i`X&4zLPq!-GUy``-hkAS?Vpl%T$LG+UYf@EJbxpS(-S|n+nSkovy?gF2 zYr~iLPVMch1VMGp=I95Kl9Id-IlFRZA*dy*7U@%}lV>f5@11-FrlSBNE|URMB!&Gr@4oXrVxEaKwggbc>Uvtl7!aml~&ZvLlp|6?0#YwO34 zV=XU{Md&q06S0%9s8W)U$SNwvQ@D}8+8e}MYWCvIB_$e~uxHPnL0l*-DjJSNC9eX-s`^lz%(V z*;&}qGCQrTnw{yL(l~>S6LZ&iwv?0|bEKIdm z$Y#2B%??dduYPwqEiG+)d>pnAtEkj-_KRoEe1x-cO{ezsH63^Js&uDuILHAu5EjE7 z07zL_Qu543q{cs{QPS9{>&=z7FCO7&V=hLD}{3v z6rD#q(_!N@J0FiS8?8StumU3~v$9vw z7No!WQ?VbTUNki|rKVnS!T*I6$u^iHM~~`5{FrP@Vo}MDbX~hF^==LzOfdk0d|9ky z#3FIa@x7yLc8c95DTvd4dp{HUt`dF4tv2+}jfDnVTU*EN&E*O{1}5UE?!1Rmw-gmW zL=9v~5pm*aGA@-mnGcVQup4#fiUu&Zr>JqY0N$EYQ2Sqm6Ou`C5kK2Dm z*YgV-RiB5(Fb9qWP}_-fEcA7BMpD(wBB>}S3{GpB9A}R-8T)<~P86hfB&4Ji(e6~-mZ>v?sc?qQ zGuUln+yB{)l&|sK*o+rNf?CI3UNxP(q<6{ZV5t3)0wDt~wMv0y2)p5j3367gH%m({ zV`Gnv69E6c&kI-g`!UFoSHz~yEp-`piS?yxyD=v74a=$pDF2w8TnG9aTLz&WeiGRA z$^Yy`NYW-DZ3MXPWC)p}XJjn2U(YUI+m{u zuCBm#A;+8PD>0t3^?{#gB^7`m*d+0r1$~=h`2>*XEYGM69wfDa*=ufY_K-nFM1m-3 zdA#UXFiIyU@&v+jLF3U6g4$lCrU8;e#vK246N|FVyN;&tDnC=yW`eIbs0lk1r>)^>Rf`_<~{C> z=CG~E*B%D#$%hUeOq5R>a1`R-CpNPmf|LG!7!!wWp}N3!5t(I)Kty-7eAc(B)OYVr zsj2lr;%eWxS}m5p7=Pow88G^eKI4w`a*TSKJ2_iCWIq-0ehV2lW?RjO*k9cVfs~@J zz)GCr=bLy_^-e_iY&p0yiVJA1Q2tflmhGOM-8Mw=l}F@7{5!Z$CDp5p}l8{6f3oDxx0|z&ikob-e z4^xPam#YPV<46frD-fML+1lUTt*np%3uM|$E9(E)?Xi{?&{2HBJgfAQ_F`rgUoWpS zR(;>T2~+#Res?Q!iyNS_GOepG6H-+TrJU(4Qlj{nW~=5zNJD+{WCRuL8a3vvYCi@d zxgndO^x>Jx#Kc5KL-#G_?jl<`mC=XdytM5Ku$_<{Lxt=Zh{it5`+XyHDewM{#Sw*P zl~g&Y!}DQULEYQ>N9MK_0A>>`J0Wndncu`7ddWkDRTdV33%Kl1Ft5U zDo46%YDA~oiRl>De=!;yU0q#K?b27ckm3ei*J~OLb7XcA#4(`I$iwMSLdY2?W(Ahh zO(g9A{(tz2R!D%VjmY->n#KrWf!nt`vke&%v~_e8r&R6}&*u6XSW>fB*VIs4fBdn5 zki1}78-fe#);AhQY3B$b51#^^w2MapLLm7}RwgM_%|&k_5^SQH?oXI7B`O(nGv%X}< z-W=2V1JZNasK??i@BI8$S5_WVXt?Yn^14tJTNYmcM-r0J;X)hUUo8a34Q$@Wzi7ERuSWc0C3`BkWQ9*PqBRgmmRiM4j~Bzxw+PZ6&_cw zUiJ3&W`(WImfehwSCr}5hIx5uLJ6t9{JsskvY*Wy?cabuSvkVAY zEO#X)T*u7@6(BAy4y4xf6MZ0)(sw%HZ09E z4A%s#udVgwnw;n6R%&b6KJU%liYVu8%#WC(=a`v|V83~udmh1?(+eu%;`%IoG9w(z#Uhd*{4`}tAb9SL zTer6*inq6HX=rFT$q)SB?`dc-x5xJ5KCaaxp240 zcG+KBMyX&54jEat!={bl>AlzmU~Rem<4(fcPtmh#sf!p}Q-+xfhwDi#QG_U!Xghi~%66{*q$92K0Z%I3=xL5(AP(~oG_v?6;I$^NRgFRBwD|DVd zN_rFp4AQh{L>rxW7$a6!TT97~evdFb!x-*PGYSOJpOl|GBBQL}{U8HxtfwFc9nh6y z%wmWY0wkLUjD}@Z%YAZ-M6Wg8Zz>*p@^zvyLiQ~FC3`P`7A8+90^96ds}btfnAM24 z{zj#e@nQG^x>Ba7=T_@)^voYRaM1^g-98HX;&?aE}6RZ z5~nJ4xzBOCS)70Rd-zM|2VM{VZ2Svo=|-=!0+}2*v8mxj;x+?cU2fgF6;DM)HEl@S zwT9#qsYpH%J=vw-0Hp`x1OeWTo3J0_`HPg|v(wL=(D+Rlk8#_rqy_}EbI%rPra5_x zhT4h|Xd6L_4H|9Il+_>12h{3OH#EA>49`ifiBaw8D*Hp0)lCj?5 zjXS4gH!fpH%s%wRTO;bV{vQ>M_Z~)~Kz9L-!+LrUK`_{JwhRVWbf+K#+cOgxfIXSI5Clt zD{E`|G<@8U@BB_Y_(vqAhdVQ`zVe{^hihK^m23$0)m&d@uWR(FoB_w1kZwUl>aHi6AT0WDi4Gn3$lKQkEFPXV|CY!s#+0+$nXHAias7 z|0CSHvmX{hwEdHyTcrKQiiw`CmR2k??e**CpP%hpb2T&VB~`V)MGk7mG8S88GAINp z0b@eRTS$Q>TjG564M@!v$0W&?emK+UmsvMdocx=kMMw^e(SGY~E_K?;OtA8$6>!8O zLjZsC-w{x8J#M%yT@F&??D+W8)p_ka6!v;KP%u34_lq+6V{tjENW=AiMHJ)c=yq`s@13&=fvX#}hJ5!mCPw_DNJ`}cBrZO5x80Eizy!A5v75-JrDS3z) zCL^_En__q4RMd@nxm@%0rC;UXp`j&e-%-_iha z_(B<=`KCDkW+qZQD!jE(wWosxMx?5zjd<|sWsp1mJeFti?)q223cT4wFGG8P7_E|C zpi00*MKoLEWwKw&V64}tb6UfPj;g7tVclPquSsS@6puH&V!MRq=jYdKrDtQ4X}f>- z?sxh_hYp=MaRLh9Qc$o^E4IsPiz<14Uf7cd+wzb#8fqj!g!~x(-CRWM)Qu37-J=e7 zq-z6z{|^^^GXZ<04PYTFhI`7V7d`+?i=6xC${z8Ys(S4)p^&cS61hLm&%Pv$FpFky z${}{%>=D{!tk?e0>A+`Fv3cg_*S!m&L1KZr%2mWf(hq?RG$_`slLt{d){Ge|DBXYk z`jzk*-8kfC8*sR3O;2xc?)&94X}JfRpn?d6V#9-*>xY533o)c7DeVC2*#{&fX4R@~ z%?Cho&%eE~0Ev<&2YeO>`D`FW_N^g0eu!8eNHoGn-9)6nXPuF$sXy~ZLysLj>XUjl zr)i{I8ug6a4Y`(+%|4mCckc!r{pXiU`{{XA?;k?Nra`Qe;NDnmaBNe(85N^?pSGw1 z7lq12N_F}kFoTjg4CxCXL(Y;?}^@N|P%q(Qm1vQb|xZ+{#H z_a1?HeOh96KG+pdKQa&zKw^Tu-E9E@AnNEuJ_Ld9?<~5{Q3?{b^7eMQV-!u6i{$bA zo8#h8lsAS`3h0w>K0dFuja8E>1Y*UIQrJ|hKZQxlG3t?eDeOUxohg{D592R^qr_{w z1pGhu6e*+p88Zqt{R_=9k>2W%F*pDv+T7eccI+5cQZyk2Xzk?JAA7xhD-P5ic$~}$ zl!V;QR5$gW;e-4d6uN@>SjQE|?b&T09|_2P<&rmY9M^MLidP02WPv-(v?VFY%CiLP8`eXW-X+_cvu_E_xIf!bJ*}2SOU&h>k z8%y<)ijl>p-_XcN^)pCNC*2U{eF`ZUTI6cikZ`{9b~Gbrzxd!oWT%t5jPkT`+b9Q= zd6=opb~h>$`Je#>*-Yoq^j{I3;{72+K1V+I;*I&5?Tv=*jg;-R z6y4CL7a18DSy+$~49J~R0Kztdxe=*zHELVwz__7&F6X?aE~7BLy%DyZ0U?RTabpgw zBS0TgO1APp97Dw>{Jy1AxrQDHCK2rtm*K>NWV(=g6c6uRq;;8Ey`a97y^AGodQLj<>EvEX%;cvK`~NMhB}7=!HkaR~Q?6 zHwf;wJ3uFig6+fkpxuFH7Y^!R52RWGjowJ<0&IeVVcQ$Jn!>LSCtHGDU^MRtNw7tP^o>#abW>!j0S{ivS5H z`N*VzkAi|7?Uib>wy3AKU3U?E>eQ(*LijWyCrC8M&31fWhg~6VkEyJy1NpVc2wa(L zJHn(hNU}imn88>;r4Mi*B`0o$LPiz=>u&|`-AESuCSC=2waA3U+3Ld`+;=1)GO79Hy;F9 zAtM3jjq8^6lk4fr0X;0XxgfLFjh@JRKQNBsKy_keJgt<2eDn;Jwq$=wT8CBc~D z+0p<+eOcVpE7?*%U`dJ53&yztz`lE1ng4_R^fRO)&qUzS;CXqxE_kF3e#56=;~6aI zaWeM~Eih>9&6>DOfIYA2|y*v=sKcP=C08 z|GKQ?p+6V=(JiND-zt#J9O_coFZ#U`(r+7e%-!q9%2M}_YkP2-bR-qeX zwYIt*XZSM=ulx7MeXc1 zf;r7vPL~R0!5;X%+)gLIy`>?fIu-x+`201CTkiMB&u_JhDw@FD7BtLoxKFL$E&(^P zhlyke#O6varEK(7OL<1%%oA-%L23GR{1rZ)#W~&g+E*WCKfEAlKHICJmZlBIy#2Y# zUlaGWRPdNC^9SuW$A6T(kxcA_9ks zy`5dYjCM%F1x^dcr^G}Mvz5yh27epU|j-S;Mq)i&6*b$yniMJaHC z$nt<&2hv|C7=i65ATUrb&1j~ms0b;bgRX#!Yq}I1Ovxs{wDu3Dzx*)zYehwLOpLIg zVATL{cKxAOxF;cT;m~V}M6w5#i83b}nx}~IC>IPhKKrD*j9L{UF$$k^ zkp^HBxJ=A$*cn;D(^3-~oOqxBpzS`i6}%@^FLMEVj5upM*}1PNBVv;3nzci6nFDKO zL56*$X<(;jA=nhQj&%j++F=}=`0Q8s(|XT=TUL#$+D@}s$o~`My#9{RUR_d~4tuSw{`o^DJD zv~n4AZPU|aWF4SL!Gr*M#^u-}(u=oKs>%G2$au(ZmDY^qPPnZCBT>PNy-cJB@#DfnttXIPX2m?v(k@UJ_+?Q_1y1w}c2BSeUt(c_9s}{tjWokv z>xGwjb&BlGK0=SaeRQ8)8avD=VsHHO`&q&bBW|)Ma|7j2kSsW#qMY}soX}*ljS2Vc z1b1Nw10$ofxJzX^Yq{kd^p@0U!>Asp6~b0rT^NNrd!o~~EU^%vs=KGZ-X7sg>&t!E zuA=Ox0uI^18ygXeZ<~ud(Xlb3Gc!HQbgTeSO6A|ay`|t_=Hz?|o-ZcFOt3u&h={nD z99MqxX9U!j&Yu0@XOc3-ZG4~H(}8u{3!8D3rK-L+*Q)^H>ScQRc!(Kb5CMBYCxi!& z^E*}QJ?sT+N&%-Z!{Dc-jrx_R53~8fD^0!X7A9_O@uHTM`Jgn2AiGa4bG8Z&WjIhT zgY4+366^2mnz3PD@oAQ(+vS9Ou1gUA!4gReH5ev5@nJ%;;8gUFk;J6&7)#Ngm@TYl z=4Q|cQy~9X`K>0U=H8g+AE3OlyCT$}iLOF5hm=Y2y4}i8U;^1lVgo*lxGsmWll_qY z>}DJPV|Iko&-~{>_T?Vi{ff_YJ+MlCsM7-g>}5va&ieC_|4q*IKV3B*SN%M=My_6M zl(!&W4yDrBn=t*`nA1GgPr$G3(MnGN$wh!)N{TUPMUI=3Y81jZuy1q^$AeAm*VyxD z(UDP6bz%H!+;(55i)#(rlY3&q9Jl~u01j-et+lkZ$qtY6^ky7r-Ma;d>#&76{1XKQ z>|0_bK^|=;z;@XeFx;Rsd-?LEjO}o>-;Sj#5z9CJ_ZNd-A(G;HbW!8VOSPRenfSNl z4ictrn0+?X-Qjc>Sxov*-21P&$`#5lTU%RTX@y+a!_zZc8odl^ z7rlQUx;$di6gkmaP}j!1adXSynaMct7OAZ7q>HAf*e|G@ECD@H!S-!_Jmb_*c0)x_hmCp*FHa8) z3;--wfT2%FsQRJ<)ROhxr!Cc#en95|t0~wQ6=x4rb%Pwu557*&NogEbegI#Q?qU0T z1A$$E5L@fShrS=ir?NDO^uX=3rpQBC3GM*m!sbx+`dWabp0cIo$Ie~I3jh)?0i@2^ zL$%1JibRbZK`js49iP;Н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 J7dN>3zW|@0`Op9W literal 0 HcmV?d00001 diff --git a/docs/umlDiagrams/StorageClassDiagm.puml b/docs/umlDiagrams/StorageClassDiagm.puml new file mode 100644 index 0000000000..b44fb5076e --- /dev/null +++ b/docs/umlDiagrams/StorageClassDiagm.puml @@ -0,0 +1,27 @@ +@startuml +class StorageFile { + + path : Path + + StorageFile() + + save( flashcardList : FlashcardList) : void + + load() : ArrayList +} +class FlashcardEncoder { + + {static} encodeFlashcardList( toSave : FlashcardList ) : List + - {static} encodeFlashcardToString( flashcard : Flashcard) : String +} +class FlashcardDecoder { + + {static} decodeFlashcardList( encodedFlashcardList : List) : ArrayList + - {static} decodeFlashcardFromString ( encodedFlashcard : String) : Flashcard +} +class Clanki { + - storageFile : StorageFile + + Clanki() + + {static} main (args : String[]) : void + + run() : void +} + +Clanki *--> "1" StorageFile : controls > +StorageFile --> FlashcardDecoder : uses > +StorageFile --> FlashcardEncoder : uses > + +@enduml \ No newline at end of file diff --git a/docs/umlDiagrams/StorageSequenceDiagram.png b/docs/umlDiagrams/StorageSequenceDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..2c2cd27533e933b46c43fd77e419fc4a50a7de92 GIT binary patch literal 81102 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 :Clanki" as Main +participant "storageFile :StorageFile" as Storage +participant "<> :FlashcardListDecoder" as Decoder +participant "<> :FlashcardListEncoder" as Encoder + + +activate Main +create Storage +Main -> Storage : StorageFile() +activate Storage +Storage --> Main +deactivate Storage + +Main -> Storage : load() +activate Storage +Storage -> Decoder : decodeFlashcardList(Files.readAllLines(path) :List) +activate Decoder +loop for all String in List + Decoder -> Decoder : decodeFlashcardFromString(encodedFlashcard :String) + activate Decoder + opt String does not match pattern + Decoder -> Decoder : :StorageOperationException(ENCODED_FLASHCARD_IN_INVALID_FORMAT_UNABLE_TO_DECODE); + end + Decoder -> Decoder : :Flashcard + deactivate Decoder +end +Decoder -> Storage : flashcards : ArrayList +deactivate Decoder +Storage -> Main : flashcards : ArrayList +deactivate Storage + +Main -> Main : run() +activate Main +loop command instanceof ByeCommand + <- Main : getUserCommand() + -> Main : inputText :String + <- Main : parseCommand(inputText) + -> Main : command :Command + <- Main : execute() + --> Main + Main -> Storage : save() + activate Storage + Storage -> Encoder : encodeFlashcardList(flashcardList :FlashcardList) + activate Encoder + loop for all Flashcard in ArrayList from flashcardlist + Encoder -> Encoder : decodeFlashcardFromString(encodedFlashcard :String) + activate Encoder + Encoder -> Encoder : :String + deactivate Encoder + end + Encoder -> Storage : encodedFlashcardList :FlashcardList + deactivate Encoder + Storage --> Main + deactivate Storage +end +Main --> Main +deactivate Main + + + + + + +@enduml \ No newline at end of file From ad7e339512bb94506c4c266956c969416ea9a73d Mon Sep 17 00:00:00 2001 From: Zijin Date: Sun, 9 Apr 2023 12:20:12 +0800 Subject: [PATCH 164/174] Update other documents to reflect some change --- docs/AboutUs.md | 2 +- docs/UserGuide.md | 4 +--- docs/team/songzijin.md | 2 ++ 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 770d9f72b7..b524e7645c 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -4,6 +4,6 @@ |:--------------------------------------------------------------------------------------------|:-------------|:------------------------------------------|:--------------------------------------| | ![](https://avatars.githubusercontent.com/u/16986946?v=4&s=100) | Kong Dehao | [GitHub](https://github.com/kdh3799) | [Portfolio](docs/team/kongdehao.md) | | ![](https://avatars.githubusercontent.com/u/44609036?v=4&s=100) | Vu Van Dung | [GitHub](https://github.com/joulev) | [Portfolio](https://joulev.dev) | -| ![](https://avatars.githubusercontent.com/u/88227764?v=4&s=100) | Song Zijin | [GitHub](https://github.com/SongZijin) | [Portfolio](docs/team/songzijin.md) | +| ![ZijinProfile.jpg](otherImages%2FZijinProfile.jpg) | Song Zijin | [GitHub](https://github.com/SongZijin) | [Portfolio](team%2Fsongzijin.md) | | ![](https://avatars.githubusercontent.com/u/72350236?v=4&s=100) | Moses Lee | [GitHub](https://github.com/moseslee9012) | [Portfolio](team/moseslee9012.md) | | | Javienne Yeo | [GitHub](https://github.com/javienneyeo) | [Portfolio](docs/team/javienneyeo.md) | diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 00cbaca85c..c9472470ca 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -48,9 +48,7 @@ add /q QUESTION /a ANSWER `QUESTION` and `ANSWER` must not start with `/` or includes ` /` (the slash with a space before it). - - Deal with it. We make the rules. - - - We might fix this in a future version. A very, very distant future version. + - We might fix this in a future version. - `/q QUESTION` and `/a ANSWER` can be arranged in any order. - The first letter of `QUESTION` and `ANSWER` are automatically capitalised. diff --git a/docs/team/songzijin.md b/docs/team/songzijin.md index ec1502eb95..0ffeec0f01 100644 --- a/docs/team/songzijin.md +++ b/docs/team/songzijin.md @@ -44,6 +44,8 @@ Given below are my contribution to the project. - Added documentation for `bye` and `help` functions. - **Contributions to DG:** - Added implementation details for the `add` function. + - Added implementation details for storage function. + - Added user stories - Other contributions: - Reviewed pull requests, such as [#53](https://github.com/AY2223S2-CS2113-T15-4/tp/pull/53) From 932672d0a20a8361e6eedcf82ffba398694d4509 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Mon, 10 Apr 2023 02:22:18 +0800 Subject: [PATCH 165/174] Fix tons of stuff Signed-off-by: Vu Van Dung --- docs/AboutUs.md | 16 +- docs/DeveloperGuide.md | 435 ++++++++++-------- docs/README.md | 14 +- docs/UserGuide.md | 181 ++++---- docs/team/joulev.md | 1 + docs/team/kongdehao.md | 1 + src/main/java/com/clanki/Clanki.java | 10 +- .../java/com/clanki/commands/AddCommand.java | 1 - .../com/clanki/commands/DeleteCommand.java | 84 ++-- .../java/com/clanki/commands/ListCommand.java | 39 +- .../com/clanki/commands/UnknownCommand.java | 1 - .../com/clanki/commands/UpdateCommand.java | 156 +++---- .../java/com/clanki/commands/VoidCommand.java | 6 +- .../InvalidStorageFilePathException.java | 4 +- .../exceptions/StorageOperationException.java | 5 +- .../java/com/clanki/objects/Flashcard.java | 7 +- .../com/clanki/objects/FlashcardList.java | 26 +- .../parser/InvalidIdentifierException.java | 4 - src/main/java/com/clanki/parser/Parser.java | 71 +-- .../clanki/storage/FlashcardListDecoder.java | 33 +- .../clanki/storage/FlashcardListEncoder.java | 18 +- .../java/com/clanki/storage/StorageFile.java | 26 +- src/main/java/com/clanki/ui/Ui.java | 72 +-- .../java/com/clanki/parser/ParserTest.java | 19 - text-ui-test/EXPECTED.TXT | 15 +- text-ui-test/EXPECTED.UNIX.TXT | 43 -- 26 files changed, 570 insertions(+), 718 deletions(-) create mode 100644 docs/team/joulev.md create mode 100644 docs/team/kongdehao.md delete mode 100644 src/main/java/com/clanki/parser/InvalidIdentifierException.java delete mode 100644 text-ui-test/EXPECTED.UNIX.TXT diff --git a/docs/AboutUs.md b/docs/AboutUs.md index b524e7645c..488ac0adba 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,9 +1,9 @@ -# About us +# About Us -| Display | Name | GitHub Profile | Portfolio | -|:--------------------------------------------------------------------------------------------|:-------------|:------------------------------------------|:--------------------------------------| -| ![](https://avatars.githubusercontent.com/u/16986946?v=4&s=100) | Kong Dehao | [GitHub](https://github.com/kdh3799) | [Portfolio](docs/team/kongdehao.md) | -| ![](https://avatars.githubusercontent.com/u/44609036?v=4&s=100) | Vu Van Dung | [GitHub](https://github.com/joulev) | [Portfolio](https://joulev.dev) | -| ![ZijinProfile.jpg](otherImages%2FZijinProfile.jpg) | Song Zijin | [GitHub](https://github.com/SongZijin) | [Portfolio](team%2Fsongzijin.md) | -| ![](https://avatars.githubusercontent.com/u/72350236?v=4&s=100) | Moses Lee | [GitHub](https://github.com/moseslee9012) | [Portfolio](team/moseslee9012.md) | -| | Javienne Yeo | [GitHub](https://github.com/javienneyeo) | [Portfolio](docs/team/javienneyeo.md) | +| Display | Name | GitHub Profile | Portfolio | +| :------------------------------------------------------------------------------------------ | :----------- | :---------------------------------------- | :------------------------------- | +| ![](https://avatars.githubusercontent.com/u/16986946?v=4&s=100) | Kong Dehao | [GitHub](https://github.com/kdh3799) | [Portfolio](./team/kongdehao) | +| ![](https://avatars.githubusercontent.com/u/44609036?v=4&s=100) | Vu Van Dung | [GitHub](https://github.com/joulev) | [Portfolio](./team/joulev) | +| ![ZijinProfile.jpg](otherImages%2FZijinProfile.jpg) | Song Zijin | [GitHub](https://github.com/SongZijin) | [Portfolio](./team/songzijin) | +| ![](https://avatars.githubusercontent.com/u/72350236?v=4&s=100) | Moses Lee | [GitHub](https://github.com/moseslee9012) | [Portfolio](./team/moseslee9012) | +| | Javienne Yeo | [GitHub](https://github.com/javienneyeo) | [Portfolio](./team/javienneyeo) | diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 33421c469b..1a2e273b47 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -3,252 +3,281 @@ - [Developer Guide](#developer-guide) - - [Acknowledgements](#acknowledgements) - - [Design & implementation](#design--implementation) - - [Add Flashcard Feature](#add-flashcard-feature) - - [Delete Flashcard Feature](#delete-flashcard-feature) - - [Update Flashcard Feature](#update-flashcard-feature) - - [Review Flashcard Feature](#review-flashcard-feature) - - [Parser](#parser) - - [Product scope](#product-scope) - - [Target user profile](#target-user-profile) - - [Value proposition](#value-proposition) - - [User Stories](#user-stories) - - [Non-Functional Requirements](#non-functional-requirements) - - [Glossary](#glossary) - - [Instructions for manual testing](#instructions-for-manual-testing) - + - [Acknowledgements](#acknowledgements) + - [Design & implementation](#design--implementation) + - [Add Flashcard Feature](#add-flashcard-feature) + - [Delete Flashcard Feature](#delete-flashcard-feature) + - [Update Flashcard Feature](#update-flashcard-feature) + - [Review Flashcard Feature](#review-flashcard-feature) + - [Parser](#parser) + - [Product scope](#product-scope) + - [Target user profile](#target-user-profile) + - [Value proposition](#value-proposition) + - [User Stories](#user-stories) + - [Non-Functional Requirements](#non-functional-requirements) + - [Glossary](#glossary) + - [Instructions for manual testing](#instructions-for-manual-testing) + + ## Acknowledgements - [addressbook-level2](https://github.com/se-edu/addressbook-level2) -- [Song Zijin 's IP](https://github.com/SongZijin/ip) +- [Song Zijin's IP](https://github.com/SongZijin/ip) -## Design & implementation +## Design & Implementation ### Add Flashcard Feature -The image below shows a partial class diagram involving only the relevant classes when an AddCommand is -created and executed: +The image below shows a partial class diagram involving only the relevant +classes when an AddCommand is created and executed: ![AddFlashcardClassDiagram.png](umlDiagrams%2FAddFlashcardClassDiagram.png) -#### Current implementation +#### Current Implementation -The current add flashcard allows the user to add a flashcard to the list of flashcards, -it is implemented through the following steps: +The current add flashcard allows the user to add a flashcard to the list of +flashcards, it is implemented through the following steps: -Step 1: -The input of user is collected by `getUserCommand()` inside class `Ui`. +Step 1: The input of user is collected by `getUserCommand()` inside class `Ui`. -Step 2: -The input string will be converted into a `Command` object by being passed through -`parseCommand(String userInput)` inside `Parser`. +Step 2: The input string will be converted into a `Command` object by being +passed through `parseCommand(String userInput)` inside `Parser`. -In this case, an `AddCommand` will be created and returned, as shown in the object diagram below: +In this case, an `AddCommand` will be created and returned, as shown in the +object diagram below: ![AddFlashcardObjectDiagram.png](umlDiagrams%2FAddFlashcardObjectDiagram.png) -Step 3: -The `execute()` function of `AddCommand` will run, calling `addNewFlashcard(questionText, answerText)` -of class `FlashcardList` to create and add the new flashcard to the list. +Step 3: The `execute()` function of `AddCommand` will run, calling +`addNewFlashcard(questionText, answerText)` of class `FlashcardList` to create +and add the new flashcard to the list. -Then it will also call `printSuccessfulAddMessage(questionText, answerText)` of class `Ui` -to display text indicating the successful adding function to the user. +Then it will also call `printSuccessfulAddMessage(questionText, answerText)` of +class `Ui` to display text indicating the successful adding function to the +user. -At this point, the adding process is completed and the program is ready to take another -command. +At this point, the adding process is completed and the program is ready to take +another command. The following sequence diagram show how the add operation works: ![AddFlashcardSequence.png](umlDiagrams%2FAddFlashcardSequence.png) -#### Reason for current implementation +#### Reason for Current Implementation -Through using `AddCommand` class, which extends `Command` class it increases the level of -abstraction as the code can now perform the various commands on a class level. +Through using `AddCommand` class, which extends `Command` class it increases the +level of abstraction as the code can now perform the various commands on a class +level. -Moreover, since the creating of new `Flashcard` of object and adding of the newly created -flashcard are both done in the same class as where the flashcards are stored, this reduces -coupling in the program as the `AddCommand` will not have access to the inner structure of -`FlashcardList`, which stores the list of flashcards. +Moreover, since the creating of new `Flashcard` of object and adding of the +newly created flashcard are both done in the same class as where the flashcards +are stored, this reduces coupling in the program as the `AddCommand` will not +have access to the inner structure of `FlashcardList`, which stores the list of +flashcards. -#### Alternative implementation +#### Alternative Implementation - Alternative 1: Have the add command function directly in `FlashcardList` - - Pros: Easy to implement - - Cons: Will require another function in another program to differentiate it from other - commands -- Alternative 2: Have the constructor of `Flashcard` include adding the card to list of flashcards - - Pros: Simplifies code - - Cons: Will cause trouble when temporary flashcard (that need not be stored) are - created + + - Pros: Easy to implement + - Cons: Will require another function in another program to differentiate it + from other commands + +- Alternative 2: Have the constructor of `Flashcard` include adding the card to + list of flashcards + + - Pros: Simplifies code + - Cons: Will cause trouble when temporary flashcard (that need not be stored) + are created ### Delete Flashcard Feature -The figure below shows a simple class diagram for the Delete -Command. +The figure below shows a simple class diagram for the Delete Command. ![DeleteFlashcardClassDiagram](umlDiagrams%2FDeleteFlashcardClassDiagram.png) -#### Current implementation +#### Current Implementation -The current delete flashcard allows the user to remove a flashcard from the list of flashcards, -it is implemented through the following steps: +The current delete flashcard allows the user to remove a flashcard from the list +of flashcards, it is implemented through the following steps: Step 1: The input of user is collected by `getUserCommand()` inside class `Ui`. -Step 2: The input string will be converted into a `Command` object by being passed through -`parseCommand(String userInput)` inside `Parser`. +Step 2: The input string will be converted into a `Command` object by being +passed through `parseCommand(String userInput)` inside `Parser`. In this case, a `DeleteCommnad` will be created and returned. -Step 3: The `execute()` function of `DeleteCommand` will run, creating a copy of the list of flashcards. -Then `findFlashcards(flashcards, query)` is called to find the flashcards with questions matching the query, -before calling `printFlashcardList(matchingFlashcards)` to display the found flashcards. +Step 3: The `execute()` function of `DeleteCommand` will run, creating a copy of +the list of flashcards. Then `findFlashcards(flashcards, query)` is called to +find the flashcards with questions matching the query, before calling +`printFlashcardList(matchingFlashcards)` to display the found flashcards. -User input is taken to get the index of the flashcard to be removed. `deleteFlashcard` is called from -class `flashcardList` to remove the flashcard from the original list of flashcards. Finally -`printSuccessfulDelete` is called from class `Ui` to indicate a successful removal of the flashcard. +User input is taken to get the index of the flashcard to be removed. +`deleteFlashcard` is called from class `flashcardList` to remove the flashcard +from the original list of flashcards. Finally `printSuccessfulDelete` is called +from class `Ui` to indicate a successful removal of the flashcard. -The deletion process is now completed and the program will await another command. +The deletion process is now completed and the program will await another +command. -An overview of how the Delete operation works is shown with the following sequence diagram -![DeleteFlashcard.png](umlDiagrams%2FDeleteFlashcard.png) +An overview of how the Delete operation works is shown with the following +sequence diagram ![DeleteFlashcard.png](umlDiagrams%2FDeleteFlashcard.png) -#### Reason for current implementation +#### Reason for Current Implementation -Through using `DeleteCommand` class, which extends `Command` class it increases the level of -abstraction as the code can now perform the various commands on a class level. +Through using `DeleteCommand` class, which extends `Command` class it increases +the level of abstraction as the code can now perform the various commands on a +class level. -In order to minimise the time for users to search for the flashcard to delete, they are able -to first search for a sub-list of flashcards with matching questions as the query. This method -makes the deletion process simple even if the user does not remember the index of the flashcard. +In order to minimise the time for users to search for the flashcard to delete, +they are able to first search for a sub-list of flashcards with matching +questions as the query. This method makes the deletion process simple even if +the user does not remember the index of the flashcard. -#### Alternative implementation +#### Alternative Implementation - Alternative 1: Delete flashcard by index from the start - - Pros: Easy to implement and simplifies code - - Cons: Cumbersome to delete if user forgets the flashcard's index and has to search - through the whole list of flashcards. + + - Pros: Easy to implement and simplifies code + - Cons: Cumbersome to delete if user forgets the flashcard's index and has to + search through the whole list of flashcards. ### Update Flashcard Feature -#### Current implementation +#### Current Implementation -The current update flashcard feature allows users search for a specific flashcard and update the contents of this -flashcard. -It is implemented through the following steps: +The current update flashcard feature allows users search for a specific +flashcard and update the contents of this flashcard. It is implemented through +the following steps: -Step 1: -The input of user is collected by `getUserCommand()` inside class `Ui`. +Step 1: The input of user is collected by `getUserCommand()` inside class `Ui`. -Step 2: -The input string will be converted into a `Command` object by being passed through -`parseCommand(String userInput)` inside `Parser`. +Step 2: The input string will be converted into a `Command` object by being +passed through `parseCommand(String userInput)` inside `Parser`. In this case, an `UpdateCommand` will be created and returned. -Step 3: -The `execute()` function of `UpdateCommand` will run, creating an ArrayList of flashcards. Then -`findFlashcard(flashcards, query)` is called to find flashcards that contain questions or answers that match `query`, -after which it will call `printFlashCards(matchingFlashcards)` in `UpdateCommand` class to display the flashcards -found. +Step 3: The `execute()` function of `UpdateCommand` will run, creating an +ArrayList of flashcards. Then `findFlashcard(flashcards, query)` is called to +find flashcards that contain questions or answers that match `query`, after +which it will call `printFlashCards(matchingFlashcards)` in `UpdateCommand` +class to display the flashcards found. + +The index of the flashcard to be updated is taken from the user input, which is +collected by `getUserCommand()`. `implementUpdate(flashcards, userText)` is then +called to update the question or answer of the flashcard. Finally, +`printFlashCard(flashcards.get(index))` will be called which prints the +flashcard that was updated with its new content. -The index of the flashcard to be updated is taken from the user input, which is collected by `getUserCommand()`. -`implementUpdate(flashcards, userText)` is then called to update the question or answer of the flashcard. Finally, -`printFlashCard(flashcards.get(index))` will be called which prints the flashcard that was updated with its new content. +At this point, the update flashcard process is completed and the program is read +to take another command. -At this point, the update flashcard process is completed and the program is read to take another command. +An overview of how the Update command works is shown with the following sequence +diagram ![UpdateFlashcard.png](umlDiagrams%2FUpdateFlashcard.png) -An overview of how the Update command works is shown with the following sequence diagram -![UpdateFlashcard.png](umlDiagrams%2FUpdateFlashcard.png) +#### Reason for Current Implementation -#### Reason for current implementation +Implementing the update flashcard in an `UpdateCommand` class makes it easier +during the debugging process related to update flashcard feature alone as most +of the methods and attributes are within this `UpdateCommand` class. -Implementing the update flashcard in an `UpdateCommand` class makes it easier during the debugging process related to -update flashcard feature alone as most of the methods and attributes are within this `UpdateCommand` class. +#### Alternative Implementation -#### Alternative implementation +- Alternative 1: Instead of creating a new arrayList `matchingFlashcards` that + store flashcards containing the `query` and then printing the list of + flashcards, directly print the flashcards when there is a match with the query -- Alternative 1: Instead of creating a new arrayList `matchingFlashcards` that store flashcards containing the - `query` and then printing the list of flashcards, directly print the flashcards when there is a match with the query` - - Pros: Easier to implement - - Cons: Harder to track the total number of flashcards that has `query` and will need to have another way to track - the index of the matching flashcards. it will also be more confusing as the index of the user input is not - aligned with the index of the arrayList that contains all the flashcards + - Pros: Easier to implement + - Cons: Harder to track the total number of flashcards that has `query` and + will need to have another way to track the index of the matching flashcards. + it will also be more confusing as the index of the user input is not aligned + with the index of the arrayList that contains all the flashcards ### Review Flashcard Feature -#### Current implementation +#### Current Implementation -The current review flashcard allows the user to review all the flashcards that are due today or before, -it is implemented through the following steps: +The current review flashcard allows the user to review all the flashcards that +are due today or before, it is implemented through the following steps: -Step 1: -The input of user is collected by `getUserCommand()` inside class `Ui`. +Step 1: The input of user is collected by `getUserCommand()` inside class `Ui`. -Step 2: -The input string will be converted into a `Command` object by being passed through -`parseCommand(String userInput)` inside `Paser`. +Step 2: The input string will be converted into a `Command` object by being +passed through `parseCommand(String userInput)` inside `Paser`. In this case, an `ReviewCommand` will be created and returned. -Step 3: -The `execute()` function of `ReviewCommand` will run, calling `getFlashCards()` -of class `FlashcardList` to get the list of the flashcards. - -Then it will iterate through the `FlashcardList` and call the function `isDueBeforeToday()` of class `Flashcard` to -check if the flashcard is due by today. - -If the flashcard is due by today, `reviewCurrentFlashcard(Ui display, Flashcard flashcard)` of class `ReviewCommand` -will be called to review the card. - -First, the `Ui` will display the question of the current card by calling the `getQuestion()` method of -class `Flashcard`, and ask user if user is ready to view the answer. After user enters any keyboard input, the answer of -the current card will be shown by calling the `getAnswer()` method of class `Flashcard`, and `Ui` will ask the user if -he/she has got the card correct. If the user inputs "y", then the current `Flashcard` is considered to be -cleared and `updateDueDateAfterCorrectAnswer()` of `Flashcard` will be called to update its `dueDate`. Then Clanki will -let user review the next `Flashcard`. If the user inputs "n", then the card is considered to be not cleared -and `updateDueDateAfterIncorrectAnswer()` will be called to update its `dueDate`. Then Clanki will let user review the -next `Flashcard`. This process will repeat until all the `Flashcards` in the `FlashcardList` are iterated. - -After the whole `FlashcardList` has been iterated through, a message congratulating the user that he/she has completed -the reviewing task will be displayed. - -At this point, the reviewing process is completed and the program is ready to take another command. +Step 3: The `execute()` function of `ReviewCommand` will run, calling +`getFlashCards()` of class `FlashcardList` to get the list of the flashcards. + +Then it will iterate through the `FlashcardList` and call the function +`isDueBeforeToday()` of class `Flashcard` to check if the flashcard is due by +today. + +If the flashcard is due by today, +`reviewCurrentFlashcard(Ui display, Flashcard flashcard)` of class +`ReviewCommand` will be called to review the card. + +First, the `Ui` will display the question of the current card by calling the +`getQuestion()` method of class `Flashcard`, and ask user if user is ready to +view the answer. After user enters any keyboard input, the answer of the current +card will be shown by calling the `getAnswer()` method of class `Flashcard`, and +`Ui` will ask the user if he/she has got the card correct. If the user inputs +"y", then the current `Flashcard` is considered to be cleared and +`updateDueDateAfterCorrectAnswer()` of `Flashcard` will be called to update its +`dueDate`. Then Clanki will let user review the next `Flashcard`. If the user +inputs "n", then the card is considered to be not cleared and +`updateDueDateAfterIncorrectAnswer()` will be called to update its `dueDate`. +Then Clanki will let user review the next `Flashcard`. This process will repeat +until all the `Flashcards` in the `FlashcardList` are iterated. + +After the whole `FlashcardList` has been iterated through, a message +congratulating the user that he/she has completed the reviewing task will be +displayed. + +At this point, the reviewing process is completed and the program is ready to +take another command. The following sequence diagram show how the review operation work: ![ReviewFlashcard-0.png](umlDiagrams%2FReviewFlashcard-1.png) -#### Reason for current implementation +#### Reason for Current Implementation -Through using `ReivewCommand` class, which extends `Command` class it increases the level of -abstraction as the code can now perform the various commands on a class level. +Through using `ReivewCommand` class, which extends `Command` class it increases +the level of abstraction as the code can now perform the various commands on a +class level. -Moreover, `ReviewCommand` only has access to the public methods of `FlashcardList` and `Flashcard`, this reduces -coupling in the program as the `ReviewCommand` will not have access to the inner structure of -`FlashcardList` and `Flashcard`. +Moreover, `ReviewCommand` only has access to the public methods of +`FlashcardList` and `Flashcard`, this reduces coupling in the program as the +`ReviewCommand` will not have access to the inner structure of `FlashcardList` +and `Flashcard`. -#### Alternative implementation +#### Alternative Implementation - Alternative 1: Have the review command function directly in `FlashcardList` - - Pros: Easy to implement - - Cons: Will require another function in another program to differentiate it from other - commands -- Alternative 2: After entering the `ReviewCommand`, go back to `Clanki.run()` and take further commands for review - process - - Pros: Simplifies code in `ReviewCommand` - - Cons: Will have to pass around a lot of parameters and variables + + - Pros: Easy to implement + - Cons: Will require another function in another program to differentiate it + from other commands + +- Alternative 2: After entering the `ReviewCommand`, go back to `Clanki.run()` + and take further commands for review process + + - Pros: Simplifies code in `ReviewCommand` + - Cons: Will have to pass around a lot of parameters and variables ### Parser -#### Current implementation +#### Current Implementation -The parser mostly relies on the `ParsedInput` class, which can parse any user provided string input in the format of -Windows command prompt commands (`command body /opt-key opt-value`). +The parser mostly relies on the `ParsedInput` class, which can parse any user +provided string input in the format of Windows command prompt commands +(`command body /opt-key opt-value`). ##### `ParsedInput` -Initiated with a string `input`, it splits the input to sections that are of use. From there it splits each section -further to a "title" (denoted with `=` below) and a "body" (denoted with `-` below) part. +Initiated with a string `input`, it splits the input to sections that are of +use. From there it splits each section further to a "title" (denoted with `=` +below) and a "body" (denoted with `-` below) part. ``` command blah blah /opt1 hello /opt2 world blah bleh @@ -256,15 +285,17 @@ command blah blah /opt1 hello /opt2 world blah bleh |=====| |-------| |==| |---| |==| |-------------| ``` -Then these small subparts are grouped together to a format where the command part of the command, the body part and the -options can be retrieved programmatically. +Then these small subparts are grouped together to a format where the command +part of the command, the body part and the options can be retrieved +programmatically. -The command and body can be read with `getCommand()` and `getBody()` respectively. `getCommand()` is guaranteed to be -non-null. +The command and body can be read with `getCommand()` and `getBody()` +respectively. `getCommand()` is guaranteed to be non-null. -The options can be read with `getOptionByName(optionKeyName)`. The reason we don't have specific `getDate` -or `getQuestion` command is because we don't know what the user will input and what options we will require for each -command. So depending on the command, we retrieve the option accordingly with e.g. +The options can be read with `getOptionByName(optionKeyName)`. The reason we +don't have specific `getDate` or `getQuestion` command is because we don't know +what the user will input and what options we will require for each command. So +depending on the command, we retrieve the option accordingly with e.g. ```java "command blah blah /opt1 hello /opt2 world blah bleh" @@ -274,65 +305,75 @@ command. So depending on the command, we retrieve the option accordingly with e. ##### `Parser` -This is now just a matter of wrapping `ParsedInput` with suitable error handling and logic such that each command will -be used to initiated a corresponding command class (e.g. `AddCommand`), while errors are handled gracefully. +This is now just a matter of wrapping `ParsedInput` with suitable error handling +and logic such that each command will be used to initiated a corresponding +command class (e.g. `AddCommand`), while errors are handled gracefully. -#### Reason for current implementation +#### Reason for Current Implementation -We need an intuitive, safe and declarative way to parse the user input. Alternative implementations that can only parse -specific commands with specific options are more imperative, less readable, less maintainable and overall just a pain to -handle. That's why the two classes are here. +We need an intuitive, safe and declarative way to parse the user input. +Alternative implementations that can only parse specific commands with specific +options are more imperative, less readable, less maintainable and overall just a +pain to handle. That's why the two classes are here. -#### Alternative implementation +#### Alternative Implementation No. ### Storage Feature -#### Current implementation +#### Current Implementation -The current storage feature triggers after every execution of command, updating the flashcardList.txt file -to be the came as what is stored in the `FlashcardList` object. +The current storage feature triggers after every execution of command, updating +the flashcardList.txt file to be the came as what is stored in the +`FlashcardList` object. The entire feature consist of 3 parts, as shown in the class diagram below: ![StorageClassDiagm.png](umlDiagrams%2FStorageClassDiagm.png) -1. `FlashcardListEncoder`: takes the list of flashcards from `FlashcardList` and convert them to a list of strings, with - heading to indicate the start of the question, answer and deadline portion of a flashcard. -2. `FlashcardListDecoder`: takes a list of string in specific format (as defined by `FLASHCARD_ARGS_FORMAT`) and decodes - the string into an arrayList of flashcards, discarding any string of incorrect format. -3. `StorageFile`: uses the encoder or decoder to save or load the current state into or from a text file. +1. `FlashcardListEncoder`: takes the list of flashcards from `FlashcardList` and + convert them to a list of strings, with heading to indicate the start of the + question, answer and deadline portion of a flashcard. +2. `FlashcardListDecoder`: takes a list of string in specific format (as defined + by `FLASHCARD_ARGS_FORMAT`) and decodes the string into an arrayList of + flashcards, discarding any string of incorrect format. +3. `StorageFile`: uses the encoder or decoder to save or load the current state + into or from a text file. The following sequence diagram show how the add operation works: ![StorageSequenceDiagram.png](umlDiagrams%2FStorageSequenceDiagram.png) -#### Reason for current implementation +#### Reason for Current Implementation -By separating the decoder and encoder as separate classes, it allows the code for the storage system to be more readable -by others, allowing them to identify and find the chunk of code for each function more easily, and possibly reuse the +By separating the decoder and encoder as separate classes, it allows the code +for the storage system to be more readable by others, allowing them to identify +and find the chunk of code for each function more easily, and possibly reuse the functions if they deem necessary in future versions. -#### Alternative implementation +#### Alternative Implementation - Alternative 1: Have all functions in one `Storage` class - - Pros: Exceptions can be handled in the same place - - Cons: Will cause the code be less organised and readable -## Product scope + - Pros: Exceptions can be handled in the same place + - Cons: Will cause the code be less organised and readable + +## Product Scope -### Target user profile +### Target User Profile -{Describe the target user profile} +Students learning subjects that require a lot of memorisation (history, a new +language, etc.) -### Value proposition +### Value Proposition -This application help users to better remember key points in their upcomming tests by providing them a platform to -read through and practice answering those key learning points. +This application help users to better remember key points in their upcomming +tests by providing them a platform to read through and practice answering those +key learning points. ## User Stories | Version | As a ... | I want to ... | So that I can ... | -|---------|-------------------------|---------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------| +| ------- | ----------------------- | ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | | v1.0 | user | add a card to my flashcard collection | study it later on | | v1.0 | user | delete any of my cards | prevent getting asked to review that card later when I am confident I have truly memorised the card | | v1.0 | user | review the cards that are due today | remember them better | @@ -341,15 +382,3 @@ read through and practice answering those key learning points. | v2.0 | new user | see usage instructions | refer to them when I forget how to use the application | | v2.0 | busy user | store the cards somewhere | revisit them next time I open the app | | v2.0 | organised user | view a list of all currently stored flashcards | know what are the things I need to remember | - -## Non-Functional Requirements - -{Give non-functional requirements} - -## Glossary - -- _glossary item_ - Definition - -## Instructions for manual testing - -{Give instructions on how to do a manual product testing e.g., how to load sample data to be used for testing} diff --git a/docs/README.md b/docs/README.md index bbcc99c1e7..bd3448fc45 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,8 +1,10 @@ -# Duke +# Clanki -{Give product intro here} +Clanki is a command-line interface (CLI) application for managing flashcards. It +allows users to create, manage and study flashcards to assist them with +memorisation by using a technique called +[spaced repetition](https://en.wikipedia.org/wiki/Spaced_repetition). -Useful links: -* [User Guide](UserGuide.md) -* [Developer Guide](DeveloperGuide.md) -* [About Us](AboutUs.md) +- [User Guide](./UserGuide) +- [Developer Guide](./DeveloperGuide) +- [About Us](./AboutUs) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index c9472470ca..7540bd2456 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -1,4 +1,4 @@ -# Clanki User Guide +# User Guide Clanki is a command-line interface (CLI) application for managing flashcards. It allows users to create, manage and study flashcards to assist them with @@ -22,12 +22,12 @@ memorisation by using a technique called 5. Type the command in the command box and press Enter to execute it. Some example commands you can try: - - `add /q what is the worst fruit? /a durian`: Add a flashcard with Question: - What is the worst fruit? and Answer: Durian to the list of flashcards. + - `add /q what is the worst fruit? /a durian`: Add a flashcard with Question: + What is the worst fruit? and Answer: Durian to the list of flashcards. - - `review`: Go through the flashcards that are due today. + - `review`: Go through the flashcards that are due today. - - `bye`: Exit the app. + - `bye`: Exit the app. 6. Refer to the Features below for details of each command. @@ -45,25 +45,40 @@ add /q QUESTION /a ANSWER works, see "Review flashcards" section below. - Since a slash character (`/`) can be interpreted as a command option, both - `QUESTION` and `ANSWER` must not start with `/` or includes ` /` (the slash - with a space before it). + `QUESTION` and `ANSWER` must not include (`/`). (In some of the times, `/` + might still work normally, that's just you being lucky.) - - We might fix this in a future version. + - We might fix this in a future version. A far, far future version that might + never come... - `/q QUESTION` and `/a ANSWER` can be arranged in any order. + - The first letter of `QUESTION` and `ANSWER` are automatically capitalised. - If any options are duplicated, all but the last one are ignored. +- The question and answer can include non-Latin characters such as Chinese + characters. However, your terminal might have trouble displaying it. If you + need such characters, find a terminal that supports it. A relatively modern + terminal (more modern than cmd.exe) should do, or buy a Mac since the default + Mac terminal does support it. + #### Example ``` -> add /q What is the worst fruit? /a Durian +add /q What is the worst fruit? /a Durian You have added the following card: Q: What is the worst fruit? A: Durian ``` +``` +add /a 果物 /q What is the Japanese word for "fruit"? +You have added the following card: +Q: What is the Japanese word for "fruit"? +A: 果物 +``` + ### Review flashcards ``` @@ -71,7 +86,7 @@ review ``` - Flashcards that are due on the day will be displayed one after another, queued - in a randomised order. + in a secret order. - When the user has recalled the answer for a card, or has given up on doing so, they can then press Enter. @@ -80,11 +95,13 @@ review can then type `y`/`n` to indicate that they remembered the answer correctly, or they couldn't remember the correct answer, respectively. - - If `y` is indicated, the card is then set to a new due date in the future. + - If `y` is indicated, the card is then set to a new due date in the future. - - Otherwise, the card is pushed back to the today's queue for reviewing later, - until the user can get it correct. When the user has got it correct, the new - date is set to tomorrow. + - Otherwise, the card is pushed back to the today's queue for reviewing later, + until the user can get it correct. When the user has got it correct, the new + date is set to a future date according to a top-secret + [Spaced repetition](https://en.wikipedia.org/wiki/Spaced_repetition) + schedule that you can try to figure out if you want to explore mysteries. - Then the review session continues with the next card in the queue. @@ -92,24 +109,24 @@ review ``` > review -There are 10 cards available for review today. +There are 2 cards available for review today. --- -Q: What is the worst fruit? (ENTER to show answer) +Q: What is the worst fruit? (ENTER to view answer) A: Durian Did you get it right? (y/n) n -The card will be asked later today. +No worries, we will try again later today. --- -Q: What is the Japanese word for "fruit"? (ENTER to show answer) +Q: What is the Japanese word for "fruit"? (ENTER to view answer) A: 果物 Did you get it right? (y/n) y -The card will be asked on 20 February 2023 +Great, you got it right! --- -Q: What is the worst fruit? (ENTER to show answer) +Q: What is the worst fruit? (ENTER to view answer) A: Durian Did you get it right? (y/n) y -The card will be asked tomorrow. +Great, you got it right! --- -You have finished reviewing for today. Congratulations. +Congrats! You have reviewed all the flashcards due today! ``` ### Update flashcards @@ -118,48 +135,36 @@ You have finished reviewing for today. Congratulations. update QUERY ``` -- `QUERY` can be the card's date or be part of the card's question or answer. +- `QUERY` is part of the card's question or answer. It is not case sensitive. - - A list of cards that contain this query will be listed, with an index assigned - to each. +- A list of cards that contain this query will be listed, with an index assigned + to each. - - The user can then type the index of the card they wish to update with the - following syntax +- The user can then type the index of the card they wish to update with the + following syntax ``` - INDEX /q NEW_QUESTION + INDEX [/q NEW_QUESTION] [/a NEW_ANSWER] ``` +- At least one of `/q` and `/a` must be provided. -- This updates the question of the flashcard to `NEW_QUESTION` - - - To update the answer of the flashcard, use `/a` - ``` - INDEX /a NEW_ANSWER - ``` - - - To update the due date of the flashcard, use `/d` - - INDEX /d NEW_DUE_DATE - - - `NEW_DUE_DATE` has to be in the format `yyyy-mm-dd` - - The user can only update either one of the question, answer or due date at a time - - Since a slash character (`/`) can be interpreted as a command option, - `QUESTION`, `ANSWER` and `NEW_DUE_DATE` must not start with `/` or includes - ` /` (the slash with a space before it). +- Format of `NEW_QUESTION` and `NEW_ANSWER` is the same as in the `add` command + above. #### Example ``` -> update fruit -Found 2 cards with the query "fruit": +update fruit +Found 2 card(s) with query "fruit": [1] Q: What is the worst fruit? A: Durian [2] Q: What is the Japanese word for "fruit"? A: 果物 -Which flashcard do you want to update? 1 /q What is the best fruit? +Which one do you want to update? +1 /q What is the best fruit? Understood. The card has been updated to Q: What is the best fruit? A: Durian @@ -168,7 +173,7 @@ A: Durian ### Delete a flashcard ``` -delete /q QUERY +delete QUERY ``` - `QUERY` can be part of the card's question or answer. @@ -182,14 +187,16 @@ delete /q QUERY #### Example ``` -> delete fruit -Found 2 cards with the query "fruit": -[1] Q: What is the best fruit? - A: Durian -[2] Q: What is the Japanese word for "fruit"? - A: 果物 +delete fruit +Found 2 card(s) with query "fruit": +[1] +Q: What is the best fruit? +A: Durian +[2] +Q: What is the Japanese word for "fruit"? +A: 果物 Which one do you want to delete? -> 2 +2 Got it. Deleted the flashcard at index 2 ``` @@ -199,34 +206,29 @@ Got it. Deleted the flashcard at index 2 clear ``` -Deletes all the flashcards in the list +Delete all the flashcards in the list. #### Example ``` -> clear +clear All flashcards have been deleted. Your list of flashcards is now empty. - -> list -Your list of flashcards is empty. ``` -### List flashcards - -1. list all flashcards +### List all flashcards ``` list all ``` -Display the questions and answers for all the flashcards in the list that have been added by the user, -regardless of the date. +Display the questions and answers for all the flashcards in the list that have +been added by the user, regardless of the date. #### Example ``` -> list all +list all Here is your list of flashcards: [1] Q: What is the biggest animal in the world @@ -239,19 +241,20 @@ Q: What colour is the sun A: Red ``` -2. List flashcards with specific due date +### List flashcards with specific due date ``` list DUE_DATE ``` -Display the questions and answers for all the flashcards in the list that has the due date specified by the user +Display the questions and answers for all the flashcards in the list that has +the due date specified by the user - `DUE_DATE` has to be in the format `yyyy-mm-dd` ``` -> list 2023-04-05 -Here is your list of flashcards with the specified due date: +list 2023-04-15 +Here is your list of flashcards: [1] Q: What is the biggest animal in the world A: Antartic blue whale @@ -274,25 +277,25 @@ Display the list of possible commands the user can input. #### Example ``` -> help +help The following are the commands you can use: -add: Adds a flashcard to the current list of flashcards. - Parameters: add /q QUESTION /a ANSWER - Example: add /q What is the worst fruit? /a Durian -update: Changes the content of flashcard's question, answer or date. - Parameters: update /q QUERY - Example: update fruit - Which flashcard do you want to update? 1 /q What is the best fruit? -delete: Removes a flashcard with specified string. - Parameters: delete /q QUERY - Example: delete fruit -review: Go through all flashcards that are due today. -list: lists out the questions and answers in the list of flashcards. - Parameters: list all (lists all flashcards) - Parameters: list DUE_DATE (list all flashcards with that specified due date) - Example: list 2023-05-04 -clear: Deletes all the flashcards in the list. -bye: Exit the program. +add Adds a flashcard to the current list of flashcards. + Parameters: add /q QUESTION /a ANSWER + Example: add /q What is the worst fruit? /a Durian +update Changes the content of flashcard's question or answer. + Parameters: update QUERY + Example: update fruit + Which flashcard do you want to update? 1 /q What is the best fruit? +delete Removes a flashcard with specified string. + Parameters: delete QUERY + Example: delete fruit +review Go through all flashcards that are due today. +list Lists out the questions and answers in the list of flashcards. + Parameters: list all (lists all flashcards) + Parameters: list DUE_DATE (list all flashcards with that specified due date) + Example: list 2023-05-04 +clear Deletes all the flashcards in the list. +bye Exit the program. ``` ### Exit program @@ -301,4 +304,4 @@ bye: Exit the program. bye ``` -Exits the program. +Exit the program. Bye. diff --git a/docs/team/joulev.md b/docs/team/joulev.md new file mode 100644 index 0000000000..1333ed77b7 --- /dev/null +++ b/docs/team/joulev.md @@ -0,0 +1 @@ +TODO diff --git a/docs/team/kongdehao.md b/docs/team/kongdehao.md new file mode 100644 index 0000000000..1333ed77b7 --- /dev/null +++ b/docs/team/kongdehao.md @@ -0,0 +1 @@ +TODO diff --git a/src/main/java/com/clanki/Clanki.java b/src/main/java/com/clanki/Clanki.java index 1385593a96..c4c8b4462c 100644 --- a/src/main/java/com/clanki/Clanki.java +++ b/src/main/java/com/clanki/Clanki.java @@ -17,10 +17,8 @@ public class Clanki { public Clanki() { try { this.ui = new Ui(); - storageFile = new StorageFile(); + this.storageFile = new StorageFile(); this.flashcardList = new FlashcardList(storageFile.load()); - ui.printWelcomeMessage(); - ui.printSeparationLine(); } catch (InvalidStorageFilePathException | StorageOperationException e) { System.out.println(e.getMessage()); } @@ -31,10 +29,12 @@ public static void main(String[] args) { } /** - * Function that loop the process of getting an user input, processing the - * input and execute the command, until a ByeCommand is inputted. + * Function that loop the process of getting an user input, processing the input + * and execute the command, until a ByeCommand is inputted. */ public void run() { + ui.printWelcomeMessage(); + ui.printSeparationLine(); while (true) { String inputText = ui.getUserCommand(); Command command = Parser.parseCommand(inputText); diff --git a/src/main/java/com/clanki/commands/AddCommand.java b/src/main/java/com/clanki/commands/AddCommand.java index a208913116..50e6fe6dcc 100644 --- a/src/main/java/com/clanki/commands/AddCommand.java +++ b/src/main/java/com/clanki/commands/AddCommand.java @@ -8,7 +8,6 @@ * of flashcards. */ public class AddCommand extends Command { - //private static Logger logger = Logger.getLogger("AddCommand"); String questionText; String answerText; diff --git a/src/main/java/com/clanki/commands/DeleteCommand.java b/src/main/java/com/clanki/commands/DeleteCommand.java index 355f9968f0..66494652e7 100644 --- a/src/main/java/com/clanki/commands/DeleteCommand.java +++ b/src/main/java/com/clanki/commands/DeleteCommand.java @@ -7,72 +7,48 @@ import java.util.ArrayList; /** - * A command that removes an element from the ArrayList of - * flashcards. + * A command that removes an element from the ArrayList of flashcards. */ public class DeleteCommand extends Command { - - private static final String FLASHCARD_TO_DELETE = "Which one do you want to delete?"; - ArrayList matchingFlashcards = new ArrayList<>(); + ArrayList matchingFlashcards; String query; public DeleteCommand(String query) { + this.matchingFlashcards = new ArrayList<>(); this.query = query; } - /** - * Search through flashcards containing the query and adds them to the matchingFlashcards list. - * - * @param flashcards the list of flashcards to look through - * @param query the search query for finding matching flashcards - */ - public void findFlashcard(ArrayList flashcards, String query) { - for (int i = 0; i < flashcards.size(); i++) { - Flashcard currentFlashcard = flashcards.get(i); - if (currentFlashcard.getQuestion().contains(query) - || currentFlashcard.getAnswer().contains(query)) { - matchingFlashcards.add(currentFlashcard); - } - } - } + @Override + public void execute(FlashcardList flashcardList, Ui display) { + matchingFlashcards = flashcardList.queryFlashcards(query); - /** - * Prints out the question and answer for each flashcard - * - * @param flashcard each individual flashcard in the ArrayList - */ - public void printFlashCard(Flashcard flashcard) { - System.out.println("Q: " + flashcard.getQuestion()); - System.out.println("A: " + flashcard.getAnswer()); - } + if (matchingFlashcards.size() == 0) { + System.out.printf("Sorry! No flashcards matching \"%s\" was found. Please try again.\n", + query); + return; + } - /** - * Goes through the ArrayList of flashcards and prints out each one of them - * - * @param flashcards the ArrayList of flashcards - */ - public void printFlashCardList(ArrayList flashcards) { - for (int i = 0; i < flashcards.size(); i++) { - System.out.println("[" + (i + 1) + "]"); - printFlashCard(flashcards.get(i)); + System.out.printf("Found %d card(s) with query \"%s\":\n", matchingFlashcards.size(), + query); + display.printFlashCards(matchingFlashcards); + System.out.println("Which one do you want to delete?"); + + int index = -1; + while (index == -1) { + try { + index = Integer.parseInt(display.getUserCommand()); + if (index < 1 || index > matchingFlashcards.size()) { + index = -1; + throw new Exception(); + } + } catch (Exception e) { + System.out.println("Please enter a valid index value."); + } } - } - @Override - public void execute(FlashcardList flashcardList, Ui display) { ArrayList flashcards = flashcardList.getFlashCards(); - findFlashcard(flashcards, query); - if (matchingFlashcards.size() != 0) { - System.out.println( - "Found " + matchingFlashcards.size() + " cards with query \"" + query + "\":"); - printFlashCardList(matchingFlashcards); - System.out.println(FLASHCARD_TO_DELETE); - - int index = Integer.parseInt(display.getUserCommand()); - flashcardList.deleteFlashcard(flashcards.indexOf(matchingFlashcards.get(index - 1))); - display.printSuccessfulDelete(index); - } else { - System.out.println("Sorry! No flashcards matching \"" + query + "\" was found. Please try again."); - } + int actualIndex = flashcards.indexOf(matchingFlashcards.get(index - 1)); + flashcardList.deleteFlashcard(actualIndex); + display.printSuccessfulDelete(index); } } diff --git a/src/main/java/com/clanki/commands/ListCommand.java b/src/main/java/com/clanki/commands/ListCommand.java index 6046459420..f3d85399a9 100644 --- a/src/main/java/com/clanki/commands/ListCommand.java +++ b/src/main/java/com/clanki/commands/ListCommand.java @@ -9,7 +9,6 @@ import java.util.ArrayList; public class ListCommand extends Command { - private static final String INVALID_DATE_FORMAT_ERROR = "Please enter the date in the format: yyyy-mm-dd"; String input; public ListCommand(String input) { @@ -21,29 +20,39 @@ private LocalDate convertDate(String dueDate) throws DateTimeParseException { return LocalDate.parse(dueDate); } - public void printAllFlashcards(ArrayList flashcards, Ui display) { - if (flashcards.size() > 0) { - System.out.println("Here is your list of flashcards:"); - display.printFlashCards(flashcards); - } + private void printFlashcards(ArrayList flashcards, Ui display) { if (flashcards.size() == 0) { System.out.println("Your list of flashcards is empty."); + return; + } + System.out.println("Here is your list of flashcards:"); + display.printFlashCards(flashcards); + } + + public void printFlashcardsOnDate(ArrayList flashcards, LocalDate date, Ui display) { + ArrayList flashcardsOnDate = new ArrayList<>(); + for (int i = 0; i < flashcards.size(); i++) { + Flashcard currentFlashcard = flashcards.get(i); + if (currentFlashcard.getDueDate().equals(date)) { + flashcardsOnDate.add(currentFlashcard); + } } + printFlashcards(flashcardsOnDate, display); } @Override public void execute(FlashcardList flashcardList, Ui display) { ArrayList flashcards = flashcardList.getFlashCards(); if (input.equals("all")) { - printAllFlashcards(flashcards, display); - } else { - LocalDate dueDate = null; - try { - dueDate = convertDate(input); - display.printFlashCardsOnDate(flashcards, dueDate); - } catch (DateTimeParseException e) { - System.out.println(INVALID_DATE_FORMAT_ERROR); - } + printFlashcards(flashcards, display); + return; + } + + try { + LocalDate dueDate = convertDate(input); + printFlashcardsOnDate(flashcards, dueDate, display); + } catch (DateTimeParseException e) { + System.out.println("Please enter the date in the format: yyyy-mm-dd"); } } } diff --git a/src/main/java/com/clanki/commands/UnknownCommand.java b/src/main/java/com/clanki/commands/UnknownCommand.java index 6b88caaaa8..832e3e0578 100644 --- a/src/main/java/com/clanki/commands/UnknownCommand.java +++ b/src/main/java/com/clanki/commands/UnknownCommand.java @@ -12,4 +12,3 @@ public void execute(FlashcardList flashcardList, Ui display) { display.printInvalidInput(); } } - diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index 917f708110..e9f507ff86 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -3,131 +3,87 @@ import com.clanki.exceptions.UpdatedContentIsEmptyException; import com.clanki.objects.Flashcard; import com.clanki.objects.FlashcardList; -import com.clanki.parser.InvalidIdentifierException; -import com.clanki.parser.Parser; +import com.clanki.parser.ParsedInput; import com.clanki.ui.Ui; -import java.time.LocalDate; -import java.time.format.DateTimeParseException; import java.util.ArrayList; /** - * The UpdateCommand class represents a command that updates an existing flashcard - * in the flashcard list. - * The command allows users to change the question, answer or date of the flashcard. + * The UpdateCommand class represents a command that updates an existing + * flashcard in the flashcard list. The command allows users to change the + * question, answer or date of the flashcard. */ public class UpdateCommand extends Command { - private static final String INVALID_IDENTIFIER_ERROR = "You can only enter /q, /a or /d"; - private static final String EMPTY_CONTENT_ERROR = "Please enter the changes to be modified."; - private static final String INCORRECT_FORMAT_ERROR = - "Please enter the input in the correct format as shown in the user guide."; - private static final String EMPTY_INPUT_ERROR = "Please enter the index of the flashcard you want to update."; - private static final String INDEX_OUT_OF_LIST_ERROR = "You have selected an index out of the list."; - private static final String INVALID_DATE_FORMAT_ERROR = "Please enter the date in the format: yyyy-mm-dd"; + private static final String QUESTION_OPTION_IDENTIFIER = "q"; + private static final String ANSWER_OPTION_IDENTIFIER = "a"; + + ArrayList matchingFlashcards; String query; - ArrayList matchingFlashcards = new ArrayList<>(); public UpdateCommand(String query) { - super(); + this.matchingFlashcards = new ArrayList<>(); this.query = query; } /** - * Searches for flashcards that match the query and adds them to the matchingFlashcards list. - * - * @param flashcards the list of flashcards to search through - * @param query the search query for finding matching flashcards - */ - public void findFlashcard(ArrayList flashcards, String query) { - for (int i = 0; i < flashcards.size(); i++) { - Flashcard currentFlashcard = flashcards.get(i); - if (currentFlashcard.getQuestion().toLowerCase().contains(query.toLowerCase())) { - matchingFlashcards.add(currentFlashcard); - } - if (currentFlashcard.getAnswer().toLowerCase().contains(query.toLowerCase())) { - matchingFlashcards.add(currentFlashcard); - } - if (currentFlashcard.getDueDate().toString().equals(query)) { - matchingFlashcards.add(currentFlashcard); - } - } - } - - /** - * Updates the content of a flashcard based on the specified identifier and updated content. - * - * @param flashcards the list of flashcards to update - * @param indexInMatchList the index of the flashcard in the matchingFlashcards list - * @param identifier the identifier for the field to update (/q for question, /a for answer, /d for due date) - * @param updatedContent the updated content for the field - * @return the index of the updated flashcard in the flashcards list - */ - public int implementUpdate(ArrayList flashcards, int indexInMatchList, String identifier, - String updatedContent) { - Flashcard flashcardToChange = matchingFlashcards.get(indexInMatchList); - int index = flashcards.indexOf(flashcardToChange); - if (identifier.contains("q")) { - flashcards.get(index).setQuestion(updatedContent.substring(0, 1).toUpperCase() + - updatedContent.substring(1)); - } - if (identifier.contains("a")) { - flashcards.get(index).setAnswer(updatedContent.substring(0, 1).toUpperCase() + - updatedContent.substring(1)); - } - if (identifier.contains("d")) { - LocalDate dateToChange = LocalDate.parse(updatedContent); - flashcards.get(index).setDueDate(dateToChange); - } - return index; - } - - /** - * Prompts the user for input and updates the specified flashcard based on the user's input. + * Prompts the user for input and updates the specified flashcard based on the + * user's input. * * @param flashcards the list of flashcards to update - * @param display the Ui object for displaying messages to the user + * @param display the Ui object for displaying messages to the user */ - private void updateFlashcard(ArrayList flashcards, Ui display) { - int checker = 0; - while (checker == 0) { + private void runUpdateFlashcard(Ui display) { + boolean isDone = false; + while (!isDone) { try { - String userText = display.getUserCommand(); - int indexInMatchList = Parser.getIndexForUpdateCommand(userText); - String identifier = Parser.getIdentifierForUpdateCommand(userText); - String updatedContent = Parser.parseInputForUpdateCommand(userText); - int index = implementUpdate(flashcards, indexInMatchList, identifier, updatedContent); - display.printSuccessfulUpdateMessage(flashcards.get(index)); - checker = 1; - } catch (InvalidIdentifierException e) { - System.out.println(INVALID_IDENTIFIER_ERROR); + ParsedInput input = new ParsedInput(display.getUserCommand()); + int index = Integer.parseInt(input.getCommand()); + if (index < 1 || index > matchingFlashcards.size()) { + throw new Exception(); + } + + Flashcard currentFlashcard = matchingFlashcards.get(index - 1); + + String questionText = input.getOptionByName(QUESTION_OPTION_IDENTIFIER); + String answerText = input.getOptionByName(ANSWER_OPTION_IDENTIFIER); + + if (questionText == null && answerText == null) { + throw new UpdatedContentIsEmptyException(); + } + + if (questionText != null) { + currentFlashcard.setQuestion(questionText); + } + + if (answerText != null) { + currentFlashcard.setAnswer(answerText); + } + + display.printSuccessfulUpdateMessage(currentFlashcard); + isDone = true; } catch (UpdatedContentIsEmptyException e) { - System.out.println(EMPTY_CONTENT_ERROR); - } catch (ArrayIndexOutOfBoundsException e) { - System.out.println(INCORRECT_FORMAT_ERROR); - } catch (NumberFormatException e) { - System.out.println(EMPTY_INPUT_ERROR); - } catch (IndexOutOfBoundsException e) { - System.out.print(INDEX_OUT_OF_LIST_ERROR); - System.out.println(" There are only " + matchingFlashcards.size() - + " flashcards that match the query."); - } catch (DateTimeParseException e) { - System.out.println(INVALID_DATE_FORMAT_ERROR); + System.out.println("Please enter the changes to be modified."); + } catch (Exception e) { + System.out.println("Please enter a valid index value."); } } } @Override public void execute(FlashcardList flashcardList, Ui display) { - ArrayList flashcards = flashcardList.getFlashCards(); - findFlashcard(flashcards, query); - if (matchingFlashcards.size() > 0) { - System.out.println( - "Found " + matchingFlashcards.size() + " cards with the query \"" + query + "\":"); - display.printFlashCards(matchingFlashcards); - System.out.println("Which flashcard do you want to update?"); - updateFlashcard(flashcards, display); - } else { - System.out.println("There are no flashcards with the query \"" + query + "\"."); + matchingFlashcards = flashcardList.queryFlashcards(query); + + if (matchingFlashcards.size() == 0) { + System.out.printf("Sorry! No flashcards matching \"%s\" was found. Please try again.", + query); + return; } + + System.out.printf("Found %d card(s) with query \"%s\":\n", matchingFlashcards.size(), + query); + display.printFlashCards(matchingFlashcards); + System.out.println("Which one do you want to update?"); + + runUpdateFlashcard(display); } } diff --git a/src/main/java/com/clanki/commands/VoidCommand.java b/src/main/java/com/clanki/commands/VoidCommand.java index 44d4373edc..c1c5c4294a 100644 --- a/src/main/java/com/clanki/commands/VoidCommand.java +++ b/src/main/java/com/clanki/commands/VoidCommand.java @@ -4,12 +4,12 @@ import com.clanki.ui.Ui; /** - * The type of command that indicate an invalid input, with the display - * of why the input is invalid already handled elsewhere. + * The type of command that indicate an invalid input, with the display of why + * the input is invalid already handled elsewhere. */ public class VoidCommand extends Command { @Override public void execute(FlashcardList flashcardList, Ui display) { - + return; } } diff --git a/src/main/java/com/clanki/exceptions/InvalidStorageFilePathException.java b/src/main/java/com/clanki/exceptions/InvalidStorageFilePathException.java index 2bb0a26281..4cff4e37ab 100644 --- a/src/main/java/com/clanki/exceptions/InvalidStorageFilePathException.java +++ b/src/main/java/com/clanki/exceptions/InvalidStorageFilePathException.java @@ -2,8 +2,8 @@ public class InvalidStorageFilePathException extends Exception { /** - * Signals that the given file path does not fulfill the storage filepath constraints. - * Copied from: + * Signals that the given file path does not fulfill the storage filepath + * constraints. Copied from: * https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/storage/StorageFile.java */ public InvalidStorageFilePathException(String message) { diff --git a/src/main/java/com/clanki/exceptions/StorageOperationException.java b/src/main/java/com/clanki/exceptions/StorageOperationException.java index 725324dd0d..90482ea22d 100644 --- a/src/main/java/com/clanki/exceptions/StorageOperationException.java +++ b/src/main/java/com/clanki/exceptions/StorageOperationException.java @@ -2,9 +2,8 @@ package com.clanki.exceptions; /** - * Signals that some error has occured while trying to convert and read/write data between the application - * and the storage file. - * Copied from: + * Signals that some error has occured while trying to convert and read/write + * data between the application and the storage file. Copied from: * https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/storage/StorageFile.java */ public class StorageOperationException extends Exception { diff --git a/src/main/java/com/clanki/objects/Flashcard.java b/src/main/java/com/clanki/objects/Flashcard.java index ff39b26609..7c1ec4ab2f 100644 --- a/src/main/java/com/clanki/objects/Flashcard.java +++ b/src/main/java/com/clanki/objects/Flashcard.java @@ -16,7 +16,8 @@ public Flashcard(String questionText, String answerText) { this.currentPeriodInDays = 0; } - public Flashcard(String questionText, String answerText, LocalDate dueDate, int currentPeriodInDays) { + public Flashcard(String questionText, String answerText, LocalDate dueDate, + int currentPeriodInDays) { this.questionText = questionText; this.answerText = answerText; this.dueDate = dueDate; @@ -56,8 +57,8 @@ public boolean isDueToday() { } /** - * this function checks if the flashcard is due or overdue - * Sometimes the user may not clear all flashcards on time, so we may have cards overdue + * This function checks if the flashcard is due or overdue Sometimes the user + * may not clear all flashcards on time, so we may have cards overdue * * @return true if the card is due or overdue */ diff --git a/src/main/java/com/clanki/objects/FlashcardList.java b/src/main/java/com/clanki/objects/FlashcardList.java index f88173d461..4f891bc6b4 100644 --- a/src/main/java/com/clanki/objects/FlashcardList.java +++ b/src/main/java/com/clanki/objects/FlashcardList.java @@ -5,7 +5,6 @@ public class FlashcardList { private final ArrayList flashcards; - public FlashcardList() { this.flashcards = new ArrayList<>(); } @@ -25,14 +24,31 @@ public void addNewFlashcard(String questionText, String answerText) { flashcards.add(newFlashcard); } - public void deleteFlashcard(int index) { - flashcards.remove(index); - } - public ArrayList getFlashCards() { return flashcards; } + /** + * Query for flashcards in the current deck that matches the query inside + * questions and answers (case-insensitive). + */ + public ArrayList queryFlashcards(String query) { + ArrayList matchingFlashcards = new ArrayList<>(); + String queryLowerCase = query.toLowerCase(); + for (int i = 0; i < flashcards.size(); i++) { + Flashcard currentFlashcard = flashcards.get(i); + if (currentFlashcard.getQuestion().toLowerCase().contains(queryLowerCase) + || currentFlashcard.getAnswer().toLowerCase().contains(queryLowerCase)) { + matchingFlashcards.add(currentFlashcard); + } + } + return matchingFlashcards; + } + + public void deleteFlashcard(int index) { + flashcards.remove(index); + } + public void deleteAllFlashcards() { flashcards.clear(); } diff --git a/src/main/java/com/clanki/parser/InvalidIdentifierException.java b/src/main/java/com/clanki/parser/InvalidIdentifierException.java deleted file mode 100644 index 22b4f77514..0000000000 --- a/src/main/java/com/clanki/parser/InvalidIdentifierException.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.clanki.parser; - -public class InvalidIdentifierException extends Exception { -} diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index 5616f7eee9..a337bf4003 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -16,14 +16,10 @@ import com.clanki.exceptions.InputIsEmptyException; import com.clanki.exceptions.InvalidAddFlashcardInputException; import com.clanki.exceptions.NoQueryInInputException; -import com.clanki.exceptions.UpdatedContentIsEmptyException; - public class Parser { private static final String QUESTION_OPTION_IDENTIFIER = "q"; private static final String ANSWER_OPTION_IDENTIFIER = "a"; - private static final String DATE_OPTION_IDENTIFIER = "d"; - //private static Logger logger = Logger.getLogger("Parser"); public static Command parseCommand(String userInput) { try { @@ -61,13 +57,13 @@ public static Command parseCommandStrict(String userInput) case "bye": return getByeCommand(parsedInput); case "help": - return new HelpCommand(); + return getHelpCommand(parsedInput); case "list": return getListCommand(parsedInput); case "clear": - return new ClearCommand(); + return getClearCommand(parsedInput); default: - return new UnknownCommand(); + return getUnknownCommand(parsedInput); } } @@ -77,7 +73,8 @@ public static Command parseCommandStrict(String userInput) * * @param parsedInput The input collected by Ui from the user, after being * parsed with the ParsedInput class. - * @return An AddCommand with the question and answer text extracted from user input + * @return An AddCommand with the question and answer text extracted from user + * input * @throws InvalidAddFlashcardInputException If the start indicators cannot be * found. * @throws EmptyFlashcardQuestionException If the string is empty after @@ -88,19 +85,15 @@ public static Command parseCommandStrict(String userInput) public static AddCommand getAddCommand(ParsedInput parsedInput) throws InvalidAddFlashcardInputException, EmptyFlashcardQuestionException, EmptyFlashcardAnswerException { - //logger.log(Level.INFO, "Start to parse input to obtain question text."); String questionText = parsedInput.getOptionByName(QUESTION_OPTION_IDENTIFIER); - //logger.log(Level.INFO, "Start to parse input to obtain answer text."); String answerText = parsedInput.getOptionByName(ANSWER_OPTION_IDENTIFIER); if (questionText == null || answerText == null) { throw new InvalidAddFlashcardInputException(); } if (questionText.isEmpty()) { - //logger.log(Level.INFO, "No input at question text detected."); throw new EmptyFlashcardQuestionException(); } if (answerText.isEmpty()) { - //logger.log(Level.INFO, "No input at answer text detected."); throw new EmptyFlashcardAnswerException(); } return new AddCommand(questionText, answerText); @@ -110,7 +103,8 @@ public static ReviewCommand getReviewCommand(ParsedInput parsedInput) { return new ReviewCommand(); } - public static UpdateCommand getUpdateCommand(ParsedInput parsedInput) throws NoQueryInInputException { + public static UpdateCommand getUpdateCommand(ParsedInput parsedInput) + throws NoQueryInInputException { String query = parsedInput.getBody(); if (query.isEmpty()) { throw new NoQueryInInputException(); @@ -134,54 +128,15 @@ public static ByeCommand getByeCommand(ParsedInput parsedInput) { return new ByeCommand(); } - public static int getIndexForUpdateCommand(String userInput) { - ParsedInput parsedInput = new ParsedInput(userInput); - String index = parsedInput.getCommand(); - return Integer.parseInt(index) - 1; + public static HelpCommand getHelpCommand(ParsedInput parsedInput) { + return new HelpCommand(); } - public static String getIdentifierForUpdateCommand(String userInput) throws InvalidIdentifierException { - String[] userTexts = userInput.split(" ", 3); - String identifier = null; - if (userTexts[1] == null) { - throw new ArrayIndexOutOfBoundsException(); - } - if (userTexts[1].equals("/q")) { - identifier = "q"; - } - if (userTexts[1].equals("/a")) { - identifier = "a"; - } - if (userTexts[1].equals("/d")) { - identifier = "d"; - } - return identifier; + public static ClearCommand getClearCommand(ParsedInput parsedInput) { + return new ClearCommand(); } - public static String parseInputForUpdateCommand(String userInput) throws InvalidIdentifierException, - UpdatedContentIsEmptyException { - ParsedInput parsedInput = new ParsedInput(userInput); - String identifier = getIdentifierForUpdateCommand(userInput); - String updatedContent = null; - if (identifier == null) { - throw new InvalidIdentifierException(); - } - if (identifier.equals(QUESTION_OPTION_IDENTIFIER)) { - updatedContent = parsedInput.getOptionByName(QUESTION_OPTION_IDENTIFIER); - } - if (identifier.equals(ANSWER_OPTION_IDENTIFIER)) { - updatedContent = parsedInput.getOptionByName(ANSWER_OPTION_IDENTIFIER); - } - if (identifier.equals(DATE_OPTION_IDENTIFIER)) { - updatedContent = parsedInput.getOptionByName(DATE_OPTION_IDENTIFIER); - } - if (updatedContent.isEmpty()) { - throw new UpdatedContentIsEmptyException(); - } - if (updatedContent == null) { - throw new InvalidIdentifierException(); - } - return updatedContent; + public static UnknownCommand getUnknownCommand(ParsedInput parsedInput) { + return new UnknownCommand(); } - } diff --git a/src/main/java/com/clanki/storage/FlashcardListDecoder.java b/src/main/java/com/clanki/storage/FlashcardListDecoder.java index 1c64bd9a28..d155d0c88d 100644 --- a/src/main/java/com/clanki/storage/FlashcardListDecoder.java +++ b/src/main/java/com/clanki/storage/FlashcardListDecoder.java @@ -10,27 +10,26 @@ import java.util.regex.Pattern; /** - * This class modifies the list of flashcards from stored text into an ArrayList in FlashcardList. - * Many portions of the code in this class are modified from the link below: (addressbook-level2) + * This class modifies the list of flashcards from stored text into an ArrayList + * in FlashcardList. Many portions of the code in this class are modified from + * the link below: (addressbook-level2) * https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/storage/AddressBookDecoder.java */ public class FlashcardListDecoder { - public static final Pattern FLASHCARD_ARGS_FORMAT = // '/' forward slashes are reserved for delimiter prefixes - Pattern.compile("q/(?[^/]+)" + " a/(?[^/]+)" - + " d/(?[^/]+)" - + " p/(?[^/]+)"); - public static final String ENCODED_FLASHCARD_IN_INVALID_FORMAT_UNABLE_TO_DECODE = - "Encoded flashcard in invalid format. Unable to decode."; + // '/' forward slashes are reserved for delimiter prefixes + public static final Pattern FLASHCARD_ARGS_FORMAT = Pattern.compile("q/(?[^/]+)" + + " a/(?[^/]+)" + " d/(?[^/]+)" + " p/(?[^/]+)"); public static final String GROUP_QUESTION = "question"; public static final String GROUP_ANSWER = "answer"; public static final String GROUP_DUE_DATE = "dueDate"; public static final String GROUP_CURRENT_PERIOD = "currentPeriod"; - /** - * Decodes {@code encodedFlashcardList} into an {@code ArrayList} containing the decoded flashcards. + * Decodes {@code encodedFlashcardList} into an {@code ArrayList} + * containing the decoded flashcards. * - * @throws StorageOperationException if the {@code encodedFlashcardList} is in an invalid format. + * @throws StorageOperationException if the {@code encodedFlashcardList} is in + * an invalid format. */ public static ArrayList decodeFlashcardList(List encodedFlashcardList) { final ArrayList decodedFlashcard = new ArrayList<>(); @@ -47,20 +46,18 @@ public static ArrayList decodeFlashcardList(List encodedFlash /** * Decodes {@code encodedFlashcard} into a {@code Flashcard}. * - * @throws StorageOperationException if {@code encodedFlashcard} is in an invalid format. + * @throws StorageOperationException if {@code encodedFlashcard} is in an + * invalid format. */ private static Flashcard decodeFlashcardFromString(String encodedFlashcard) throws StorageOperationException { final Matcher matcher = FLASHCARD_ARGS_FORMAT.matcher(encodedFlashcard); if (!matcher.matches()) { - throw new StorageOperationException(ENCODED_FLASHCARD_IN_INVALID_FORMAT_UNABLE_TO_DECODE); + throw new StorageOperationException( + "Encoded flashcard in invalid format. Unable to decode."); } - return new Flashcard(matcher.group(GROUP_QUESTION), matcher.group(GROUP_ANSWER), LocalDate.parse(matcher.group(GROUP_DUE_DATE)), - Integer.parseInt(matcher.group(GROUP_CURRENT_PERIOD)) - ); + Integer.parseInt(matcher.group(GROUP_CURRENT_PERIOD))); } - - } diff --git a/src/main/java/com/clanki/storage/FlashcardListEncoder.java b/src/main/java/com/clanki/storage/FlashcardListEncoder.java index 1e392a1b2e..4fa28d3e2e 100644 --- a/src/main/java/com/clanki/storage/FlashcardListEncoder.java +++ b/src/main/java/com/clanki/storage/FlashcardListEncoder.java @@ -7,38 +7,38 @@ import java.util.List; /** - * This class modifies the list of flashcards from FlashcardList into a storable format. - * Many portions of the code in this class are modified from the link below: (addressbook-level2) + * This class modifies the list of flashcards from FlashcardList into a storable + * format. Many portions of the code in this class are modified from the link + * below: (addressbook-level2) * https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/storage/AddressBookEncoder.java */ public class FlashcardListEncoder { - public static final String QUESTION_APPEND = "q/"; public static final String ANSWER_APPEND = " a/"; public static final String DUE_DATE_APPEND = " d/"; public static final String PERIOD_APPEND = " p/"; /** - * Encodes all the {@code Flashcards} in the {@code toSave} into a list of decodable and readable - * string presentation for storage. + * Encodes all the {@code Flashcards} in the {@code toSave} into a list of + * decodable and readable string presentation for storage. */ public static List encodeFlashcardList(FlashcardList toSave) { final List encodedFlashcards = new ArrayList<>(); - toSave.getFlashCards().forEach(flashcard -> encodedFlashcards.add(encodeFlashcardToString(flashcard))); + toSave.getFlashCards() + .forEach(flashcard -> encodedFlashcards.add(encodeFlashcardToString(flashcard))); return encodedFlashcards; } /** - * Encodes the {@code flashcard} into a decodable and readable string representation. + * Encodes the {@code flashcard} into a decodable and readable string + * representation. */ private static String encodeFlashcardToString(Flashcard flashcard) { final StringBuilder encodedFlashcardBuilder = new StringBuilder(); encodedFlashcardBuilder.append(QUESTION_APPEND).append(flashcard.getQuestion()); encodedFlashcardBuilder.append(ANSWER_APPEND).append(flashcard.getAnswer()); - encodedFlashcardBuilder.append(DUE_DATE_APPEND).append(flashcard.getDueDate().toString()); - encodedFlashcardBuilder.append(PERIOD_APPEND).append(flashcard.getCurrentPeriodInDays()); return encodedFlashcardBuilder.toString(); diff --git a/src/main/java/com/clanki/storage/StorageFile.java b/src/main/java/com/clanki/storage/StorageFile.java index ee57d29ec4..033826c1fb 100644 --- a/src/main/java/com/clanki/storage/StorageFile.java +++ b/src/main/java/com/clanki/storage/StorageFile.java @@ -15,8 +15,8 @@ /** * This class manages the storing of FlashcardList and the recovering of stored - * data each time the application first start up. - * Many portions of the code in this class are modified from the link below: (addressbook-level2) + * data each time the application first start up. Many portions of the code in + * this class are modified from the link below: (addressbook-level2) * https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/storage/StorageFile.java */ public class StorageFile { @@ -26,7 +26,6 @@ public class StorageFile { public static final String DEFAULT_STORAGE_FILEPATH = "flashcardList.txt"; public static final String FILE_END_STRING = ".txt"; - public final Path path; /** @@ -47,8 +46,8 @@ public StorageFile(String filePath) throws InvalidStorageFilePathException { } /** - * Returns true if the given path is acceptable as a storage file. - * The file path is considered acceptable if it ends with '.txt' + * Returns true if the given path is acceptable as a storage file. The file path + * is considered acceptable if it ends with '.txt' */ private static boolean isValidPath(Path filePath) { return filePath.toString().endsWith(FILE_END_STRING); @@ -57,11 +56,13 @@ private static boolean isValidPath(Path filePath) { /** * Saves the {@code addressBook} data to the storage file. * - * @throws StorageOperationException if there were errors converting and/or storing data to file. + * @throws StorageOperationException if there were errors converting and/or + * storing data to file. */ public void save(FlashcardList flashcardList) throws StorageOperationException { try { - List encodedFlashcardList = FlashcardListEncoder.encodeFlashcardList(flashcardList); + List encodedFlashcardList = FlashcardListEncoder + .encodeFlashcardList(flashcardList); Files.write(path, encodedFlashcardList); } catch (IOException ioe) { throw new StorageOperationException("Error writing to file: " + path); @@ -69,13 +70,14 @@ public void save(FlashcardList flashcardList) throws StorageOperationException { } /** - * Loads the {@code AddressBook} data from this storage file, and then returns it. - * Returns an empty {@code AddressBook} if the file does not exist, or is not a regular file. + * Loads the {@code AddressBook} data from this storage file, and then returns + * it. Returns an empty {@code AddressBook} if the file does not exist, or is + * not a regular file. * - * @throws StorageOperationException if there were errors reading and/or converting data from file. + * @throws StorageOperationException if there were errors reading and/or + * converting data from file. */ public ArrayList load() throws StorageOperationException { - if (!Files.exists(path) || !Files.isRegularFile(path)) { return new ArrayList<>(); } @@ -87,6 +89,4 @@ public ArrayList load() throws StorageOperationException { throw new StorageOperationException("Error writing to file: " + path); } } - - } diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 47c3d5081c..21aaad7ba8 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -3,8 +3,6 @@ import com.clanki.objects.Flashcard; import java.io.InputStream; -import java.io.PrintStream; -import java.time.LocalDate; import java.util.ArrayList; import java.util.Scanner; @@ -14,18 +12,14 @@ * https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/ui/TextUi.java. */ public class Ui { - public static final String AFTER_COMMAND_SPACING = " "; - public static final String BEFORE_ELABORATION_SPACING = " "; private final Scanner in; - // private final PrintStream out; public Ui() { - this(System.in, System.out); + this(System.in); } - public Ui(InputStream in, PrintStream out) { + public Ui(InputStream in) { this.in = new Scanner(in); - // this.out = out; } public String getUserCommand() { @@ -33,7 +27,8 @@ public String getUserCommand() { } /** - * Display messages to inform user that a flashcard have been successfully added. + * Display messages to inform user that a flashcard have been successfully + * added. * * @param questionText The question of the new flashcard. * @param answerText The answer of the new flashcard. @@ -56,8 +51,8 @@ public void printWelcomeMessage() { * Display message to inform user that their input is of a wrong format. */ public void printInvalidInput() { - System.out.println("The input is in an incorrect format.\n" + - "You can view our user guide or type help to see the correct formats for commands.\n"); + System.out.println("The input is in an incorrect format.\n" + + "You can view our user guide or type help to see the correct formats for commands.\n"); } /** @@ -84,28 +79,22 @@ public void printlnSeveralStrings(String... message) { * Display all the current valid commands the user can key in. */ public void printHelpMessage() { - System.out.println( - "The following are the commands you can use:\n" + - "add:" + AFTER_COMMAND_SPACING + "Adds a flashcard to the current list of flashcards.\n" - + BEFORE_ELABORATION_SPACING + "Parameters: add /q QUESTION /a ANSWER\n" - + BEFORE_ELABORATION_SPACING + "Example: add /q What is the worst fruit? /a Durian\n" - + "update: Changes the content of flashcard's question, answer or date.\n" - + BEFORE_ELABORATION_SPACING + "Parameters: update /q QUERY\n" - + BEFORE_ELABORATION_SPACING + "Example: update fruit \n" - + BEFORE_ELABORATION_SPACING + BEFORE_ELABORATION_SPACING + - "Which flashcard do you want to update? 1 /q What is the best fruit?\n" - + "delete: Removes a flashcard with specified string.\n" - + BEFORE_ELABORATION_SPACING + "Parameters: delete /q QUERY\n" - + BEFORE_ELABORATION_SPACING + "Example: delete fruit \n" - + "review: Go through all flashcards that are due today.\n" - + "list: lists out the questions and answers in the list of flashcards.\n" - + BEFORE_ELABORATION_SPACING + "Parameters: list all (lists all flashcards)\n" - + BEFORE_ELABORATION_SPACING + "Parameters: list DUE_DATE (list all flashcards with that " + - "specified due date)\n" - + BEFORE_ELABORATION_SPACING + "Example: list 2023-05-04\n" - + "clear: Deletes all the flashcards in the list.\n" - + "bye: Exit the program.\n" - ); + System.out.println("The following are the commands you can use:\n" + + "add Adds a flashcard to the current list of flashcards.\n" + + " Parameters: add /q QUESTION /a ANSWER\n" + + " Example: add /q What is the worst fruit? /a Durian\n" + + "update Changes the content of flashcard's question or answer.\n" + + " Parameters: update QUERY\n" + " Example: update fruit\n" + + " Which flashcard do you want to update? 1 /q What is the best fruit?\n" + + "delete Removes a flashcard with specified string.\n" + + " Parameters: delete QUERY\n" + " Example: delete fruit\n" + + "review Go through all flashcards that are due today.\n" + + "list Lists out the questions and answers in the list of flashcards.\n" + + " Parameters: list all (lists all flashcards)\n" + + " Parameters: list DUE_DATE (list all flashcards with that specified due date)\n" + + " Example: list 2023-05-04\n" + + "clear Deletes all the flashcards in the list.\n" + + "bye Exit the program."); } public void printSeparationLine() { @@ -139,23 +128,6 @@ public void printSuccessfulUpdateMessage(Flashcard updatedFlashcard) { printFlashCard(updatedFlashcard); } - public void printFlashCardsOnDate(ArrayList flashcards, LocalDate date) { - int countFlashcardsPrinted = 0; - for (int i = 0; i < flashcards.size(); i++) { - if (flashcards.get(i).getDueDate().compareTo(date) == 0) { - countFlashcardsPrinted++; - if (countFlashcardsPrinted == 1) { - System.out.println("Here is your list of flashcards with the specified due date:"); - } - System.out.println("[" + (countFlashcardsPrinted) + "]"); - printFlashCard(flashcards.get(i)); - } - } - if (countFlashcardsPrinted == 0) { - System.out.println("Your list of flashcards with the specified due date is empty."); - } - } - /** * Display that the contents of list have been successfully cleared. */ diff --git a/src/test/java/com/clanki/parser/ParserTest.java b/src/test/java/com/clanki/parser/ParserTest.java index b7c6d8479d..d47c4fc9e3 100644 --- a/src/test/java/com/clanki/parser/ParserTest.java +++ b/src/test/java/com/clanki/parser/ParserTest.java @@ -13,7 +13,6 @@ import com.clanki.exceptions.EmptyFlashcardQuestionException; import com.clanki.exceptions.InvalidAddFlashcardInputException; -import com.clanki.exceptions.UpdatedContentIsEmptyException; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -80,24 +79,6 @@ public void parserUpdateCommand_updateCommand_successful() { assertTrue(parsedCommand instanceof UpdateCommand); } - @Test - public void parseInputForUpdateCommand_emptyInput_updatedContentEmptyException() { - assertThrows(UpdatedContentIsEmptyException.class, - () -> Parser.parseInputForUpdateCommand("1 /a /aa")); - assertThrows(UpdatedContentIsEmptyException.class, - () -> Parser.parseInputForUpdateCommand(("1 /a "))); - } - - @Test - public void parseInputForUpdateCommand_wrongIdentifier_invalidIdentifierException() { - assertThrows(InvalidIdentifierException.class, - () -> Parser.parseInputForUpdateCommand("1 /w question")); - assertThrows(InvalidIdentifierException.class, - () -> Parser.parseInputForUpdateCommand("1 /s ")); - assertThrows(InvalidIdentifierException.class, - () -> Parser.parseInputForUpdateCommand("1 /e ")); - } - @Test public void parserDeleteCommand_deleteCommand_successful() { Command parsedCommand = Parser.parseCommand("delete query"); diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 502398b4aa..d086a4139b 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -8,27 +8,30 @@ You have added the following card: Q: Q1 A: A1 ========================================================== -Found 2 cards with the query "q1": +Found 3 card(s) with query "q1": [1] Q: Q1 A: A1 [2] Q: Q1 A: A1 -Which flashcard do you want to update? +[3] +Q: Q1 +A: A1 +Which one do you want to update? Understood. The card has been updated to -Q: Q2 +Q: q2 A: A1 ========================================================== There are 2 cards available for review today. --- -Q: Q1 (ENTER to view answer)A: A1 +Q: q2 (ENTER to view answer)A: A1 Did you get it right? (y/n) Great, you got it right! --- -Q: Q2 (ENTER to view answer)A: A1 +Q: Q1 (ENTER to view answer)A: A1 Did you get it right? (y/n) Please enter 'y' or 'n': (y/n) Please enter 'y' or 'n': (y/n) No worries, we will try again later today. --- -Q: Q2 (ENTER to view answer)A: A1 +Q: Q1 (ENTER to view answer)A: A1 Did you get it right? (y/n) Great, you got it right! --- Congrats! You have reviewed all the flashcards due today! diff --git a/text-ui-test/EXPECTED.UNIX.TXT b/text-ui-test/EXPECTED.UNIX.TXT deleted file mode 100644 index e4a17e6e4b..0000000000 --- a/text-ui-test/EXPECTED.UNIX.TXT +++ /dev/null @@ -1,43 +0,0 @@ -Welcome to Clanki! Time to start studying! -========================================================== -You have added the following card: -Q: Q1 -A: A1 -========================================================== -You have added the following card: -Q: Q1 -A: A1 -========================================================== -Found 2 cards with the query "q1": -[1] -Q: Q1 -A: A1 -D: 2023-04-03 -[2] -Q: Q1 -A: A1 -D: 2023-04-03 -Which flashcard do you want to update? -Understood. The card has been updated to -Q: Q2 -A: A1 -D: 2023-04-03 -========================================================== -There are 2 cards available for review today. ---- -Q: Q1 (ENTER to view answer)A: A1 -Did you get it right? (y/n) Great, you got it right! ---- -Q: Q2 (ENTER to view answer)A: A1 -Did you get it right? (y/n) Please enter 'y' or 'n': (y/n) Please enter 'y' or 'n': (y/n) No worries, we will try again later today. ---- -Q: Q2 (ENTER to view answer)A: A1 -Did you get it right? (y/n) Great, you got it right! ---- -Congrats! You have reviewed all the flashcards due today! -========================================================== -The input is in an incorrect format. -You can view our user guide or type help to see the correct formats for commands. - -========================================================== -Bye. Don't forget to come back later to study! From 07def8e3f8288f347d0e3063de45a7576699cd8a Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Mon, 10 Apr 2023 02:24:19 +0800 Subject: [PATCH 166/174] Fix wrong expected.txt Signed-off-by: Vu Van Dung --- text-ui-test/EXPECTED.TXT | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index d086a4139b..58273c51e7 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -8,16 +8,13 @@ You have added the following card: Q: Q1 A: A1 ========================================================== -Found 3 card(s) with query "q1": +Found 2 card(s) with query "q1": [1] Q: Q1 A: A1 [2] Q: Q1 A: A1 -[3] -Q: Q1 -A: A1 Which one do you want to update? Understood. The card has been updated to Q: q2 @@ -25,13 +22,13 @@ A: A1 ========================================================== There are 2 cards available for review today. --- -Q: q2 (ENTER to view answer)A: A1 +Q: Q1 (ENTER to view answer)A: A1 Did you get it right? (y/n) Great, you got it right! --- -Q: Q1 (ENTER to view answer)A: A1 +Q: q2 (ENTER to view answer)A: A1 Did you get it right? (y/n) Please enter 'y' or 'n': (y/n) Please enter 'y' or 'n': (y/n) No worries, we will try again later today. --- -Q: Q1 (ENTER to view answer)A: A1 +Q: q2 (ENTER to view answer)A: A1 Did you get it right? (y/n) Great, you got it right! --- Congrats! You have reviewed all the flashcards due today! From 7f1666fcacdbb39c535d857ffdbf5bee9e6952a1 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Mon, 10 Apr 2023 02:31:21 +0800 Subject: [PATCH 167/174] Fix massive Zijin's face in About Us Signed-off-by: Vu Van Dung --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 488ac0adba..467735f136 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -4,6 +4,6 @@ | :------------------------------------------------------------------------------------------ | :----------- | :---------------------------------------- | :------------------------------- | | ![](https://avatars.githubusercontent.com/u/16986946?v=4&s=100) | Kong Dehao | [GitHub](https://github.com/kdh3799) | [Portfolio](./team/kongdehao) | | ![](https://avatars.githubusercontent.com/u/44609036?v=4&s=100) | Vu Van Dung | [GitHub](https://github.com/joulev) | [Portfolio](./team/joulev) | -| ![ZijinProfile.jpg](otherImages%2FZijinProfile.jpg) | Song Zijin | [GitHub](https://github.com/SongZijin) | [Portfolio](./team/songzijin) | +| | Song Zijin | [GitHub](https://github.com/SongZijin) | [Portfolio](./team/songzijin) | | ![](https://avatars.githubusercontent.com/u/72350236?v=4&s=100) | Moses Lee | [GitHub](https://github.com/moseslee9012) | [Portfolio](./team/moseslee9012) | | | Javienne Yeo | [GitHub](https://github.com/javienneyeo) | [Portfolio](./team/javienneyeo) | From 6ed549bf3f88c1b9b53de01fb7e941310ef70178 Mon Sep 17 00:00:00 2001 From: Vu Van Dung Date: Mon, 10 Apr 2023 02:45:46 +0800 Subject: [PATCH 168/174] Add Dung's PPP Signed-off-by: Vu Van Dung --- docs/team/joulev.md | 58 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/docs/team/joulev.md b/docs/team/joulev.md index 1333ed77b7..de67fc7ece 100644 --- a/docs/team/joulev.md +++ b/docs/team/joulev.md @@ -1 +1,57 @@ -TODO +# Vu Van Dung's Project Portfolio Page + +## Project: Clanki + +Clanki is a command line application one can use to store and update flashcards +to help them remember the relevant concepts. The user can interact with it by +typing code into their terminal. + +Given below are my contribution to the project. + +### Summary of Contributions + +- **New feature:** Parser + + - What it does: allows the app to intuitively and safely parse user input + - Justification: without it, imperative and specific implementation of the + parser for each command might be necessary, which will just be a grand + invitation for bugs + - Highlights: thanks to this feature, all places in the app where user input + is parsed can be handled declaratively. Since we take a lot of user inputs, + this is crucial for the app + +- **New feature:** Set up the ground work + + - What it does: not a user-facing feature, but this sets up Gradle, tests and + an overall file structure along with crucial classes (`Flashcard`, + `FlashcardList`, `FlashcardQueue`) that are used in all other places in the + app + - Justification: make development of the app easier + +- **Major contribution:** Improve other features by other members + + - What it does: other members' code might be inconsistent, might be + reinventing the wheels, might have hidden bugs, or overall just might be + bad; I fixed them to a level I'm at least not depressed when looking at the + code. + +- **Code contributed:** + [RepoSense link](https://nus-cs2113-ay2223s2.github.io/tp-dashboard/?search=joulev&sort=groupTitle%20dsc&sortWithin=title&since=2023-02-17&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=false&tabOpen=true&tabType=authorship&tabAuthor=joulev&tabRepo=AY2223S2-CS2113-T15-4%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code~other&authorshipIsBinaryFileTypeChecked=false&authorshipIsIgnoredFilesChecked=false) + +- **Contributions to UG:** + + - Enhanced the user guide for all sections to make them more accurate and + closer to the actual behaviour and output of the app + - Added input restrictions (if any) to the UG + +- **Contributions to DG:** + + - Added details for the parser + +- Other contributions: + + - (Forced to) lead the project. I am basically the one who decided the + timeline and did most of the admin stuff + - Triaged incoming issues, opened tickets and assigned them to relevant + personnels + - Reviewed pull requests From d12c27d373adb57886cd8e1fb19d87ee8d197b7a Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Mon, 10 Apr 2023 14:01:04 +0800 Subject: [PATCH 169/174] Updated DG and matched outputs to UG --- docs/umlDiagrams/DeleteFlashcard.puml | 6 ++++++ docs/umlDiagrams/DeleteFlashcardClassDiagram.puml | 1 + src/main/java/com/clanki/ui/Ui.java | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/umlDiagrams/DeleteFlashcard.puml b/docs/umlDiagrams/DeleteFlashcard.puml index e6716b99d2..5497354995 100644 --- a/docs/umlDiagrams/DeleteFlashcard.puml +++ b/docs/umlDiagrams/DeleteFlashcard.puml @@ -36,6 +36,12 @@ deactivate Parser Main -> DeleteCommand : execute() activate DeleteCommand +DeleteCommand -> FlashcardList : queryFlashcards(query) +activate FlashcardList + +FlashcardList -> DeleteCommand : matchingFlashcards : ArrayList +deactivate FlashcardList + DeleteCommand -> FlashcardList : getFlashcards() activate FlashcardList diff --git a/docs/umlDiagrams/DeleteFlashcardClassDiagram.puml b/docs/umlDiagrams/DeleteFlashcardClassDiagram.puml index b01cc8f4b1..95378d6ba7 100644 --- a/docs/umlDiagrams/DeleteFlashcardClassDiagram.puml +++ b/docs/umlDiagrams/DeleteFlashcardClassDiagram.puml @@ -8,6 +8,7 @@ DeleteCommand : execute(flashcardList: FlashcardList, display: Ui) : void class Ui Ui : printSuccessfulDeleteMessage() : void class FlashcardList +FlashcardList : queryFlashcards(query : String) : ArrayList FlashcardList : deleteFlashcard(index : int) : void class Flashcard class Parser diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 21aaad7ba8..8a8b954da0 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -61,7 +61,7 @@ public void printInvalidInput() { * @param index the index of the flashcard at the point of deletion */ public void printSuccessfulDelete(int index) { - System.out.println("Got it. Deleted the flashcard at index " + index); + System.out.println("Understood. The card has been deleted. " + index); } /** From d3fa058cf410e5625f976d5c20879c7d31177314 Mon Sep 17 00:00:00 2001 From: javienneyeo Date: Mon, 10 Apr 2023 15:51:37 +0800 Subject: [PATCH 170/174] Added documentation --- docs/DeveloperGuide.md | 39 +++++++++----- docs/umlDiagrams/UpdateFlashcard.png | Bin 24352 -> 42010 bytes docs/umlDiagrams/UpdateFlashcard.puml | 48 +++++++++++++----- .../java/com/clanki/commands/ListCommand.java | 1 + .../com/clanki/commands/UpdateCommand.java | 7 +-- .../com/clanki/objects/FlashcardList.java | 1 + src/main/java/com/clanki/parser/Parser.java | 2 +- src/main/java/com/clanki/ui/Ui.java | 1 + 8 files changed, 70 insertions(+), 29 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 1a2e273b47..96e5fa3956 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -156,17 +156,17 @@ passed through `parseCommand(String userInput)` inside `Parser`. In this case, an `UpdateCommand` will be created and returned. -Step 3: The `execute()` function of `UpdateCommand` will run, creating an -ArrayList of flashcards. Then `findFlashcard(flashcards, query)` is called to -find flashcards that contain questions or answers that match `query`, after -which it will call `printFlashCards(matchingFlashcards)` in `UpdateCommand` -class to display the flashcards found. - -The index of the flashcard to be updated is taken from the user input, which is -collected by `getUserCommand()`. `implementUpdate(flashcards, userText)` is then -called to update the question or answer of the flashcard. Finally, -`printFlashCard(flashcards.get(index))` will be called which prints the -flashcard that was updated with its new content. +Step 3: The `execute()` function of `UpdateCommand` will run `queryFlashcards(query)` +of `FlashcardList`, which will query for flashcards in the current deck that matches +the query inside either the question or answer and return an ArrayList of `Flashcard` +called `matchingFlashcards`. + +Step 4: Then, `printFlashCards(matchingFlashcards)` inside class `Ui` is called, which +prints all questions and answers of the list of flashcards, that matches the query, +to the console + +Step 5: Lastly, `runUpdateFlashcard(display)` is executed. This method prompts the user +for input and updates the specified flashcard based on that input. At this point, the update flashcard process is completed and the program is read to take another command. @@ -180,6 +180,11 @@ Implementing the update flashcard in an `UpdateCommand` class makes it easier during the debugging process related to update flashcard feature alone as most of the methods and attributes are within this `UpdateCommand` class. +Furthermore, the UpdateCommand has a dedicated function, runUpdateFlashcard(display), +which handles the updating of the flashcard. This helps to ensure that the code +remains organized and easy to read, with the updating process separated from other +code. + #### Alternative Implementation - Alternative 1: Instead of creating a new arrayList `matchingFlashcards` that @@ -192,6 +197,16 @@ of the methods and attributes are within this `UpdateCommand` class. it will also be more confusing as the index of the user input is not aligned with the index of the arrayList that contains all the flashcards +- Alternative 2: An alternative implementation could be to have the updating of + the flashcard handled directly in FlashcardList. + + - Pros: Simple implementation and no need for another function in another + program to differentiate it from other commands + - Cons: May lead to increased coupling in the program, as the `UpdateCommand` + will have access to the inner structure of `FlashcardList` and this may make the + code more difficult to read and debug, as the updating process will be + combined with other code + ### Review Flashcard Feature #### Current Implementation @@ -306,7 +321,7 @@ depending on the command, we retrieve the option accordingly with e.g. ##### `Parser` This is now just a matter of wrapping `ParsedInput` with suitable error handling -and logic such that each command will be used to initiated a corresponding +and logic such that each command will be used to initiate a corresponding command class (e.g. `AddCommand`), while errors are handled gracefully. #### Reason for Current Implementation diff --git a/docs/umlDiagrams/UpdateFlashcard.png b/docs/umlDiagrams/UpdateFlashcard.png index 360c177fc55827372ecf955432bc622c7a3f4379..6cf1c4214da98f8e392d18f002fdd8b1ab38385b 100644 GIT binary patch literal 42010 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 diff --git a/docs/umlDiagrams/UpdateFlashcard.puml b/docs/umlDiagrams/UpdateFlashcard.puml index 73e1d5ac19..2d5f18aa3d 100644 --- a/docs/umlDiagrams/UpdateFlashcard.puml +++ b/docs/umlDiagrams/UpdateFlashcard.puml @@ -1,24 +1,27 @@ @startuml 'https://plantuml.com/sequence-diagram +title UpdateCommand Sequence Diagram + participant "<> :Clanki" as Main +participant ":UpdateCommand" as UpdateCommand participant ":Ui" as Ui participant ":Parser" as Parser -participant ":Update Command" as UpdateCommand -participant ":FlashcardList" as FlashcardList +participant ":Flashcard" as Flashcard +participant ":Flashcard List" as FlashcardList +participant ":ParsedInput" as ParsedInput +Main -> Ui: User input activate Main -Main -> Ui : User input activate Ui -Ui -> Main : userInput : String +Ui -> Main : userInput :String deactivate Ui Main -> Parser : parseInput(userInput) activate Parser -create UpdateCommand -Parser -> UpdateCommand : UpdateCommand(query) +Parser -> UpdateCommand: UpdateCommand(query) activate UpdateCommand UpdateCommand -> Parser @@ -27,22 +30,41 @@ deactivate UpdateCommand Parser -> Main : command : UpdateCommand deactivate Parser -Main -> UpdateCommand: execute() +Main -> UpdateCommand : execute() activate UpdateCommand -UpdateCommand -> FlashcardList : getFlashcards() +UpdateCommand -> FlashcardList: queryFlashcards(query) activate FlashcardList -FlashcardList -> UpdateCommand +FlashcardList -> UpdateCommand : matchingFlashcards deactivate FlashcardList -UpdateCommand -> Ui : User input +UpdateCommand -> Ui: printFlashCards(matchingFlashcards) activate Ui -Ui -> UpdateCommand : userText : String +Ui -> UpdateCommand deactivate Ui -UpdateCommand-> Main -deactivate UpdateCommand +loop while not done + UpdateCommand -> Ui: getUserCommand() + activate Ui + + Ui -> ParsedInput: ParsedInput(display.getUserCommand()) + deactivate Ui + activate ParsedInput + + ParsedInput -> UpdateCommand + deactivate ParsedInput + + UpdateCommand -> Ui : printSuccessfulUpdateMessage(currentFlashcard) + activate Ui + + Ui -> UpdateCommand + deactivate Ui + + UpdateCommand -> Main + deactivate UpdateCommand + destroy UpdateCommand +end @enduml \ No newline at end of file diff --git a/src/main/java/com/clanki/commands/ListCommand.java b/src/main/java/com/clanki/commands/ListCommand.java index f3d85399a9..15ee74781d 100644 --- a/src/main/java/com/clanki/commands/ListCommand.java +++ b/src/main/java/com/clanki/commands/ListCommand.java @@ -8,6 +8,7 @@ import java.time.format.DateTimeParseException; import java.util.ArrayList; +//@@author javienneYeo public class ListCommand extends Command { String input; diff --git a/src/main/java/com/clanki/commands/UpdateCommand.java b/src/main/java/com/clanki/commands/UpdateCommand.java index e9f507ff86..19e2a62866 100644 --- a/src/main/java/com/clanki/commands/UpdateCommand.java +++ b/src/main/java/com/clanki/commands/UpdateCommand.java @@ -8,17 +8,19 @@ import java.util.ArrayList; +//@@author javienneyeo /** * The UpdateCommand class represents a command that updates an existing * flashcard in the flashcard list. The command allows users to change the * question, answer or date of the flashcard. + * */ public class UpdateCommand extends Command { private static final String QUESTION_OPTION_IDENTIFIER = "q"; private static final String ANSWER_OPTION_IDENTIFIER = "a"; - ArrayList matchingFlashcards; String query; + ArrayList matchingFlashcards; public UpdateCommand(String query) { this.matchingFlashcards = new ArrayList<>(); @@ -29,7 +31,6 @@ public UpdateCommand(String query) { * Prompts the user for input and updates the specified flashcard based on the * user's input. * - * @param flashcards the list of flashcards to update * @param display the Ui object for displaying messages to the user */ private void runUpdateFlashcard(Ui display) { @@ -74,7 +75,7 @@ public void execute(FlashcardList flashcardList, Ui display) { matchingFlashcards = flashcardList.queryFlashcards(query); if (matchingFlashcards.size() == 0) { - System.out.printf("Sorry! No flashcards matching \"%s\" was found. Please try again.", + System.out.printf("No flashcards matching \"%s\" was found. Please try again.", query); return; } diff --git a/src/main/java/com/clanki/objects/FlashcardList.java b/src/main/java/com/clanki/objects/FlashcardList.java index 4f891bc6b4..8c2cf28530 100644 --- a/src/main/java/com/clanki/objects/FlashcardList.java +++ b/src/main/java/com/clanki/objects/FlashcardList.java @@ -28,6 +28,7 @@ public ArrayList getFlashCards() { return flashcards; } + //@@author javienneyeo /** * Query for flashcards in the current deck that matches the query inside * questions and answers (case-insensitive). diff --git a/src/main/java/com/clanki/parser/Parser.java b/src/main/java/com/clanki/parser/Parser.java index a337bf4003..26b2198287 100644 --- a/src/main/java/com/clanki/parser/Parser.java +++ b/src/main/java/com/clanki/parser/Parser.java @@ -109,7 +109,7 @@ public static UpdateCommand getUpdateCommand(ParsedInput parsedInput) if (query.isEmpty()) { throw new NoQueryInInputException(); } - return new UpdateCommand(parsedInput.getBody()); + return new UpdateCommand(query); } public static DeleteCommand getDeleteCommand(ParsedInput parsedInput) { diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 21aaad7ba8..1f417c846f 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -128,6 +128,7 @@ public void printSuccessfulUpdateMessage(Flashcard updatedFlashcard) { printFlashCard(updatedFlashcard); } + //@@author javienneyeo /** * Display that the contents of list have been successfully cleared. */ From ca99a01821a90e175ebc0b7d8c301d36c1b2d974 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Mon, 10 Apr 2023 16:55:44 +0800 Subject: [PATCH 171/174] Reverted changes in Ui --- src/main/java/com/clanki/ui/Ui.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/clanki/ui/Ui.java b/src/main/java/com/clanki/ui/Ui.java index 8a8b954da0..21aaad7ba8 100644 --- a/src/main/java/com/clanki/ui/Ui.java +++ b/src/main/java/com/clanki/ui/Ui.java @@ -61,7 +61,7 @@ public void printInvalidInput() { * @param index the index of the flashcard at the point of deletion */ public void printSuccessfulDelete(int index) { - System.out.println("Understood. The card has been deleted. " + index); + System.out.println("Got it. Deleted the flashcard at index " + index); } /** From 0daaae74712e0e9d697595f55ba857d61caab88f Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Mon, 10 Apr 2023 17:09:45 +0800 Subject: [PATCH 172/174] Add Dehao PPP and Update toc for DG --- docs/AboutUs.md | 4 +- docs/DeveloperGuide.md | 96 ++++++++++++++++++++++++++---------------- docs/team/kdh3799.md | 31 ++++++++++++++ docs/team/kongdehao.md | 1 - 4 files changed, 92 insertions(+), 40 deletions(-) create mode 100644 docs/team/kdh3799.md delete mode 100644 docs/team/kongdehao.md diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 467735f136..a21a07b032 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,8 +1,8 @@ # About Us | Display | Name | GitHub Profile | Portfolio | -| :------------------------------------------------------------------------------------------ | :----------- | :---------------------------------------- | :------------------------------- | -| ![](https://avatars.githubusercontent.com/u/16986946?v=4&s=100) | Kong Dehao | [GitHub](https://github.com/kdh3799) | [Portfolio](./team/kongdehao) | +|:--------------------------------------------------------------------------------------------|:-------------|:------------------------------------------|:---------------------------------| +| ![](https://avatars.githubusercontent.com/u/16986946?v=4&s=100) | Kong Dehao | [GitHub](https://github.com/kdh3799) | [Portfolio](./team/kdh3799) | | ![](https://avatars.githubusercontent.com/u/44609036?v=4&s=100) | Vu Van Dung | [GitHub](https://github.com/joulev) | [Portfolio](./team/joulev) | | | Song Zijin | [GitHub](https://github.com/SongZijin) | [Portfolio](./team/songzijin) | | ![](https://avatars.githubusercontent.com/u/72350236?v=4&s=100) | Moses Lee | [GitHub](https://github.com/moseslee9012) | [Portfolio](./team/moseslee9012) | diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 1a2e273b47..e849cb21c4 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -2,21 +2,39 @@ -- [Developer Guide](#developer-guide) - - [Acknowledgements](#acknowledgements) - - [Design & implementation](#design--implementation) - - [Add Flashcard Feature](#add-flashcard-feature) - - [Delete Flashcard Feature](#delete-flashcard-feature) - - [Update Flashcard Feature](#update-flashcard-feature) - - [Review Flashcard Feature](#review-flashcard-feature) - - [Parser](#parser) - - [Product scope](#product-scope) - - [Target user profile](#target-user-profile) - - [Value proposition](#value-proposition) - - [User Stories](#user-stories) - - [Non-Functional Requirements](#non-functional-requirements) - - [Glossary](#glossary) - - [Instructions for manual testing](#instructions-for-manual-testing) +* [Developer Guide](#developer-guide) + * [Acknowledgements](#acknowledgements) + * [Design & Implementation](#design--implementation) + * [Add Flashcard Feature](#add-flashcard-feature) + * [Current Implementation](#current-implementation) + * [Reason for Current Implementation](#reason-for-current-implementation) + * [Alternative Implementation](#alternative-implementation) + * [Delete Flashcard Feature](#delete-flashcard-feature) + * [Current Implementation](#current-implementation-1) + * [Reason for Current Implementation](#reason-for-current-implementation-1) + * [Alternative Implementation](#alternative-implementation-1) + * [Update Flashcard Feature](#update-flashcard-feature) + * [Current Implementation](#current-implementation-2) + * [Reason for Current Implementation](#reason-for-current-implementation-2) + * [Alternative Implementation](#alternative-implementation-2) + * [Review Flashcard Feature](#review-flashcard-feature) + * [Current Implementation](#current-implementation-3) + * [Reason for Current Implementation](#reason-for-current-implementation-3) + * [Alternative Implementation](#alternative-implementation-3) + * [Parser](#parser) + * [Current Implementation](#current-implementation-4) + * [`ParsedInput`](#parsedinput) + * [`Parser`](#parser-1) + * [Reason for Current Implementation](#reason-for-current-implementation-4) + * [Alternative Implementation](#alternative-implementation-4) + * [Storage Feature](#storage-feature) + * [Current Implementation](#current-implementation-5) + * [Reason for Current Implementation](#reason-for-current-implementation-5) + * [Alternative Implementation](#alternative-implementation-5) + * [Product Scope](#product-scope) + * [Target User Profile](#target-user-profile) + * [Value Proposition](#value-proposition) + * [User Stories](#user-stories) @@ -77,16 +95,17 @@ flashcards. - Alternative 1: Have the add command function directly in `FlashcardList` - - Pros: Easy to implement - - Cons: Will require another function in another program to differentiate it - from other commands + - Pros: Easy to implement + - Cons: Will require another function in another program to differentiate it + from other commands - Alternative 2: Have the constructor of `Flashcard` include adding the card to list of flashcards - - Pros: Simplifies code - - Cons: Will cause trouble when temporary flashcard (that need not be stored) - are created + - Pros: Simplifies code + - Cons: Will cause trouble when temporary flashcard (that need not be + stored) + are created ### Delete Flashcard Feature @@ -137,9 +156,10 @@ the user does not remember the index of the flashcard. - Alternative 1: Delete flashcard by index from the start - - Pros: Easy to implement and simplifies code - - Cons: Cumbersome to delete if user forgets the flashcard's index and has to - search through the whole list of flashcards. + - Pros: Easy to implement and simplifies code + - Cons: Cumbersome to delete if user forgets the flashcard's index and has + to + search through the whole list of flashcards. ### Update Flashcard Feature @@ -186,11 +206,13 @@ of the methods and attributes are within this `UpdateCommand` class. store flashcards containing the `query` and then printing the list of flashcards, directly print the flashcards when there is a match with the query - - Pros: Easier to implement - - Cons: Harder to track the total number of flashcards that has `query` and - will need to have another way to track the index of the matching flashcards. - it will also be more confusing as the index of the user input is not aligned - with the index of the arrayList that contains all the flashcards + - Pros: Easier to implement + - Cons: Harder to track the total number of flashcards that has `query` and + will need to have another way to track the index of the matching + flashcards. + it will also be more confusing as the index of the user input is not + aligned + with the index of the arrayList that contains all the flashcards ### Review Flashcard Feature @@ -255,15 +277,15 @@ and `Flashcard`. - Alternative 1: Have the review command function directly in `FlashcardList` - - Pros: Easy to implement - - Cons: Will require another function in another program to differentiate it - from other commands + - Pros: Easy to implement + - Cons: Will require another function in another program to differentiate it + from other commands - Alternative 2: After entering the `ReviewCommand`, go back to `Clanki.run()` and take further commands for review process - - Pros: Simplifies code in `ReviewCommand` - - Cons: Will have to pass around a lot of parameters and variables + - Pros: Simplifies code in `ReviewCommand` + - Cons: Will have to pass around a lot of parameters and variables ### Parser @@ -354,8 +376,8 @@ functions if they deem necessary in future versions. - Alternative 1: Have all functions in one `Storage` class - - Pros: Exceptions can be handled in the same place - - Cons: Will cause the code be less organised and readable + - Pros: Exceptions can be handled in the same place + - Cons: Will cause the code be less organised and readable ## Product Scope @@ -373,7 +395,7 @@ key learning points. ## User Stories | Version | As a ... | I want to ... | So that I can ... | -| ------- | ----------------------- | ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | +|---------|-------------------------|---------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------| | v1.0 | user | add a card to my flashcard collection | study it later on | | v1.0 | user | delete any of my cards | prevent getting asked to review that card later when I am confident I have truly memorised the card | | v1.0 | user | review the cards that are due today | remember them better | diff --git a/docs/team/kdh3799.md b/docs/team/kdh3799.md new file mode 100644 index 0000000000..992066e78a --- /dev/null +++ b/docs/team/kdh3799.md @@ -0,0 +1,31 @@ +# Kong Dehao - Project Portfolio Page + +## Overview: Project Clanki + +Clanki is a command line application to store flashcards used for +memorising information and concepts. The user can interact with +the app by typing commands into their terminal. + +### Summary of Contributions + +**New feature:** Added `review` function to remove flashcards + +- What it does: The `review` function allows users to review the flashcards that + are due today, depending on whether the user gets the answer correctly, the + new due date of the flashcards will be updated accordingly. +- Justification: This feature forms the basic building block of the program to + let the user review the flashcards he/she has added. +- Highlights: This feature involved multiple rounds of user interaction and make + corresponding updates based on user response. + +**Code contributed:** +[Reposense link](https://nus-cs2113-ay2223s2.github.io/tp-dashboard/?search=kdh3799) + +**Contributions to DG:** + +- Added implementation details and UML diagrams for + `review` command + +**Contributions to team-based tasks** + +- Added table of content for DG and rearranged the order of the sections of DG \ No newline at end of file diff --git a/docs/team/kongdehao.md b/docs/team/kongdehao.md deleted file mode 100644 index 1333ed77b7..0000000000 --- a/docs/team/kongdehao.md +++ /dev/null @@ -1 +0,0 @@ -TODO From 7b3e148ba1e2f2942b7237e783d2dc534932a60e Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Mon, 10 Apr 2023 19:43:09 +0800 Subject: [PATCH 173/174] Improve review command based on TA feedback --- .../com/clanki/commands/ReviewCommand.java | 72 +++++++++++++------ 1 file changed, 49 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/clanki/commands/ReviewCommand.java b/src/main/java/com/clanki/commands/ReviewCommand.java index 93a8e60902..0646f88fa9 100644 --- a/src/main/java/com/clanki/commands/ReviewCommand.java +++ b/src/main/java/com/clanki/commands/ReviewCommand.java @@ -5,10 +5,57 @@ import com.clanki.objects.FlashcardQueue; import com.clanki.ui.Ui; +/** + * A type of command that will let user review the flashcards due today + */ public class ReviewCommand extends Command { + + public static final String CORRECT_ANSWER_STRING = "y"; + public static final String INCORRECT_ANSWER_STRING = "n"; + public static final String LINE_SEPARATOR = "---"; + + /** + * review the next flashcard in the queue, and update the due date of the flashcard accordingly + * + * @param display Ui object used for user interfacing + * @param flashcardQueue Queue object storing flashcards to be reviewed + */ + private static void reviewNextFlashcard(Ui display, FlashcardQueue flashcardQueue) { + display.printlnSeveralStrings(LINE_SEPARATOR); + Flashcard currentFlashcard = flashcardQueue.popFlashcard(); + System.out.printf("Q: %s (ENTER to view answer)", currentFlashcard.getQuestion()); + display.getUserCommand(); + display.printlnSeveralStrings(String.format("A: %s", currentFlashcard.getAnswer())); + String answerIfCorrect; + System.out.print("Did you get it right? (y/n) "); + while (true) { + answerIfCorrect = display.getUserCommand().toLowerCase(); + if (answerIfCorrect.equals(CORRECT_ANSWER_STRING)) { + display.printlnSeveralStrings("Great, you got it right!"); + currentFlashcard.updateDueDateAfterCorrectAnswer(); + break; + } else if (answerIfCorrect.equals(INCORRECT_ANSWER_STRING)) { + display.printlnSeveralStrings("No worries, we will try again later today."); + currentFlashcard.updateDueDateAfterIncorrectAnswer(); + flashcardQueue.pushFlashcard(currentFlashcard); + break; + } else { + System.out.print("Please enter 'y' or 'n': (y/n) "); + } + } + } + + /** + * Review all the flashcards that are due today, and update their due dates accordingly + * + * @param flashcardList List of all flashcards, regardless of their due dates + * @param display Ui object used for user interfacing + */ @Override public void execute(FlashcardList flashcardList, Ui display) { + // Get a queue of flashcards that are due today FlashcardQueue flashcardQueue = new FlashcardQueue(flashcardList.getFlashCards()); + if (flashcardQueue.isEmpty()) { display.printlnSeveralStrings("There are no cards available for review today."); return; @@ -16,30 +63,9 @@ public void execute(FlashcardList flashcardList, Ui display) { display.printlnSeveralStrings(String .format("There are %d cards available for review today.", flashcardQueue.size())); while (!flashcardQueue.isEmpty()) { - display.printlnSeveralStrings("---"); - Flashcard currentFlashcard = flashcardQueue.popFlashcard(); - System.out.printf("Q: %s (ENTER to view answer)", currentFlashcard.getQuestion()); - display.getUserCommand(); - display.printlnSeveralStrings(String.format("A: %s", currentFlashcard.getAnswer())); - String answerIfCorrect; - System.out.print("Did you get it right? (y/n) "); - while (true) { - answerIfCorrect = display.getUserCommand().toLowerCase(); - if (answerIfCorrect.equals("y")) { - display.printlnSeveralStrings("Great, you got it right!"); - currentFlashcard.updateDueDateAfterCorrectAnswer(); - break; - } else if (answerIfCorrect.equals("n")) { - display.printlnSeveralStrings("No worries, we will try again later today."); - currentFlashcard.updateDueDateAfterIncorrectAnswer(); - flashcardQueue.pushFlashcard(currentFlashcard); - break; - } else { - System.out.print("Please enter 'y' or 'n': (y/n) "); - } - } + reviewNextFlashcard(display, flashcardQueue); } - display.printlnSeveralStrings("---", + display.printlnSeveralStrings(LINE_SEPARATOR, "Congrats! You have reviewed all the flashcards due today!"); } } From 0592ad17f010e96bddab09c68bba3bfe12f507d9 Mon Sep 17 00:00:00 2001 From: kdh3799 Date: Mon, 10 Apr 2023 19:54:33 +0800 Subject: [PATCH 174/174] Improve UG [review command] based on issue 114 and 65 --- docs/UserGuide.md | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 7540bd2456..9144859006 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -22,12 +22,13 @@ memorisation by using a technique called 5. Type the command in the command box and press Enter to execute it. Some example commands you can try: - - `add /q what is the worst fruit? /a durian`: Add a flashcard with Question: - What is the worst fruit? and Answer: Durian to the list of flashcards. + - `add /q what is the worst fruit? /a durian`: Add a flashcard with + Question: + What is the worst fruit? and Answer: Durian to the list of flashcards. - - `review`: Go through the flashcards that are due today. + - `review`: Go through the flashcards that are due today. - - `bye`: Exit the app. + - `bye`: Exit the app. 6. Refer to the Features below for details of each command. @@ -48,8 +49,9 @@ add /q QUESTION /a ANSWER `QUESTION` and `ANSWER` must not include (`/`). (In some of the times, `/` might still work normally, that's just you being lucky.) - - We might fix this in a future version. A far, far future version that might - never come... + - We might fix this in a future version. A far, far future version that + might + never come... - `/q QUESTION` and `/a ANSWER` can be arranged in any order. @@ -95,13 +97,16 @@ review can then type `y`/`n` to indicate that they remembered the answer correctly, or they couldn't remember the correct answer, respectively. - - If `y` is indicated, the card is then set to a new due date in the future. - - - Otherwise, the card is pushed back to the today's queue for reviewing later, - until the user can get it correct. When the user has got it correct, the new - date is set to a future date according to a top-secret - [Spaced repetition](https://en.wikipedia.org/wiki/Spaced_repetition) - schedule that you can try to figure out if you want to explore mysteries. + - If `y` is indicated, the card is then set to a new due date in the + future.When the user has got it correct, the new date is set to a future + date according to a top-secret + [Spaced repetition](https://en.wikipedia.org/wiki/Spaced_repetition) + schedule that you can try to figure out if you want to explore mysteries. + - If `n` is indicated, the card is pushed back to the today's queue for + reviewing later, until the user can get it correct. + - If a command other than `y` or `n` is indicated, it will be regarded as an + invalid command, and then the user will be prompted again to enter a valid + answer. - Then the review session continues with the next card in the queue.

L}wi{*TrvX57HZ!OimEv@z?j@ZT{ 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 HIe-7z3}g4+ literal 0 HcmV?d00001 diff --git a/docs/umlDiagrams/AddFlashcard.puml b/docs/umlDiagrams/AddFlashcard.puml index ecbb5e3058..358c4ed4eb 100644 --- a/docs/umlDiagrams/AddFlashcard.puml +++ b/docs/umlDiagrams/AddFlashcard.puml @@ -21,7 +21,7 @@ create AddCommand Parser -> AddCommand : AddCommand(question, answer) activate AddCommand -AddCommand -> Parser +AddCommand --> Parser deactivate AddCommand Parser -> Main : command : AddCommand @@ -33,18 +33,19 @@ activate AddCommand AddCommand -> FlashcardList : addNewFlashcard(question, answer) activate FlashcardList -FlashcardList -> AddCommand +FlashcardList --> AddCommand deactivate FlashcardList AddCommand -> Ui : printSuccessfulAddMessage(question, answer) activate Ui -Main <- Ui : Display message -Ui -> AddCommand + +Ui --> AddCommand deactivate Ui -AddCommand -> Main +AddCommand --> Main deactivate AddCommand +destroy AddCommand diff --git a/docs/umlDiagrams/AddFlashcardObjectDiagram.png b/docs/umlDiagrams/AddFlashcardObjectDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..941cf2db293d50af817c99ea7eb3e2c7bf15a79d GIT binary patch literal 5219 zcmZvAcR1T^)W6o=wfCr1JCvg4Lygu}E2tDfjoLv)W2Z(?tyyX$YSxGrMTOdw+9TDf z8dWP)n^61r^*q1#y52wDTvx_*=X>sR-{*YJ=Zs`ab0bDNUOF-|GR8Z%_3x6AUGe~a z8`E3{KDT`)-veLLFat0Q8W0%q(8Ci(X5``T5$p={a2Ixq5cYz>0z=e6pumT&{;*KL zhw{(>zp&AdLclhB-Zo&^|E!Z;0`__I($>Pv;<6P(yXxn2g(V8=q#DUJ0UA2JxGTx@ zUxnUh*SH=N5heY97ZF%RFAIXHhLV7KeJ%5h_SLtDrLU#voO$(TMz6#+t&r9#X*tSi zKdaQuv&L}2z3eM)ILfdNq_jVIlt3Qnko@84O%K45l#V0(G z?URy`J8(RKD-OigqEyzyCQ-yUnJRCE^L}w|+-O5&L#iM`pJ7PR1QzJ?1}N0Q=Px!+?Uz<*q`^c5L7Ir}0#HW~Ji2m=ii z81(XTKg2bUt{c8&2?lYiy5IsOYq(PRun@JZqiU|?keT3cHW z4-bEi70-Fh(3*mbKLB!@uOZ6blkStR?i|@D{r>%1Q%kF-r-#I2FY0ZXo1K}-#=WV5+G2p>9L|x` z2wJ9Sgnny}KpYWU+YAN%3C7WFA)!H4Tt9yNI1)qY$Ew)ho%Co3=0I$6n7-A=JZ_`6 z>@dld|5Tuw2r(_vbSRed8&~%2O=9udTzRTDPv2a=Jw zB|lI6^XC=^2n3qiD9XusQiQUWeJH!zhvF)2iiwG#=aNs7y%TTeU|?W?f5ITB30B6G z3V!`3j?|3?Z%~#qaZctbLRI|cvxsbmj`bY+!& z=HcN$tx#52sly4F4u&zOuYLE+pGJAQa7S3!}$Z>%NwS zQ4NHwjj*JxS5m8HTtKHB9<(`K1>Aa5yG%w_R^QFkl%X&uE6b(L$jE3)N+JM6 zs6FJT`ABo*PV3LP`_X+;A7OxyULS?gQ$d3lWhS|kQq@o#?)>an?QG}$ZU(8F9`wDX zrG+~LF!n?hZM7fyj^_^#J4eI+$gZVdnIn%>;zoo4l{`qO0v+Q$h=I-upxng8{a(Y^z z8o=aq>zRt=P+UY@4U(QKMOKcqK{Y>#q6}qQXi{`ECAk5}%F|Nv92u8zGl|nb5{_@# zC@)YC-!UCf`PoqD_NaxCSGm&fOY_jsP(5xxzi`8xKJ@VSkF2tm{GHy6tG6^6GD3v` z-U!{sE4nY~>F4Ae!N~nKkQ-my_FZuqF6!l28&_#4w8rdYtsp?5Oc1_)RlP5SJ4Y^u zzi|G=fC|d*YYWRp0FIOs+~?WuKW5a^t?{)f3!Sw1>1msFfSSrZLSPF71DmpO+~p)^Rf0{1djjt641Gk>5~GoAy&=A&*YsErz}K`(tDS?+P!CM zKK~ihsjn=?1L5`TCkBXI6A(`9<6_h?;q>^R0-8VIJ6BgW)c_p`TOUX3^$9-u9&0F# zk7X9p=I?_bNVd+Q`8#9U$FhYx^G(BJW6V-OXx)3`erKxO%&g*gbtp6FrdrI^D?B_^ z!_J*iT8<@=B7n=vDvQs)K3Yi=ly0%t)z#hG+sm?L_80DgqX&kEWt5d+6Bq+q8GZoo z_1Z%pVlI*Qr}0&oG+IwEu0rVwZtCdV-^wP7Iy-y-b<4K4v7r!ku+mEUwQE|4f|ZzH z4>yM6q;)4t#88s*@}r}p@={V052jIkU=MiER_!|#n^3c?LPdqvAiO1^hS+3;&XKPsqK zn}Vj{G{ zT~?WWJp_BTfusfSkakRu+&rfk?x)t-MN!|wAX7ld?7Aq`-yi&Y+wf<9-1@S`sZi4GFNdqyR zB9pjJB*O4B))nTq(-uK)Zf^Oi0pEbcaFl0eb!xG^vhoagXJ%!IxzTaI=BsLlxIj60 zc~eNK>9x-9?H=5JINwO?;iB)w26_#T^{s$Phx9P2CO|HEQcearsfTXDPDyj3!#1EA zX+0yX>z?Jp@yCxJE3teorb1&i4j{a_eX5k5b7wyXu_Z%R}0ewEBRIY{3-$rP=RGXS7b; z;M7#+*<25^4g+ef8%b}+aeng0LUNE<=Ol1{+kx8-C~xw2Y#9Cn>s?TLdpmr8J9&XR zY$0zv%YOh}n5Pw~Lgy0Q5xAsxG@1-~@F7ktp5J0x-nk8ItGZkSY009MLn4txV<8fM zb*w&Kg6*0)yGIHNHQ~fe(ulwtJ2*IuUkq1PY4fP8;_BIZbbrzRMKa8SD9pS2@m&*v*d{jagBxi>Z*wR<5n< z(ZU6iCyCbC6vJ<%Y(~B|i+!%ACjXiadC#~PLcT_h7}MjHd7kHE{q@6W-u2Y<%^CUv zCW0fD+wiF%BOC73t5+o@WMh+nZ#U>2?C0)6;X!7XG9LgbN1inNuY~ai^4E~PEU~-% z)_Y9UwG^#kphyS@(oYtVL@GN#4WtXu6Y>D$p>HJuHIyji6%>~dgJ4v70?-MtoTa@> zX9xX=r})EmaM+v7Hbbb7Ftd`vUC}-)i9SCoN9PdK8fB^>E-6#K^k_7in4gKsUj~Sx zG93mKNPBk0b!}4VGpONecc4BPT3n0<(of{U&ddX+r{0WgJUlmDK9C`*{Tv&;bRm7} zrWI}+Z`}ImQch{}Rs7nZ155~7dg%yUlX)4jTVh{e-o(UYLqJ#H!C28JAb^X}^Swjx zAcySK(LxPs3JMA;Dm|wL)swCIPJMszfoVVNO%4^Q+js7~xbBf6(dky>@Yb`8?jcxq z;f2zJ$&J}sCz1gHy;URy)WX;5Ter8jffRC0T%0i9gnDz&u6~s?t9}E`)r9OJEx(cG zS!fIWV;}27T%Qot(kj%R&q%G(9~TE7e&1v*EiH|Yk8hGPH2uPox8_z#hr{C{-)Z-> zLCf(Qf(U^QpBZVylg74o=HFj^6OU@R8qK-o-2M5rALC)Bp=eAbX)`+~$It;xD^hI? zn9tHO1FT@D-C~&Nta*;Z;rLYjQ#bLI()K5?s`g>w`SPV&T5FsF0nc^+F$*iJh#OP) zD* zrR5OdKs7HIdV>(?(QY2zi!$wEWBO5C|=cJm5ID3hP|~`3^R8?jgUcgoC2;gF77g+HpW5h z>1XFm{0uz;*A|mW>Q37=T18`OiF(WNzA(J)h#h;a(6Me~=+Y`pDde_#d8H!YW63KV z9OA4Tw+_Uza&tjW%?wnRVQHoueU=MWStmuHWeh(u_S3Ss6$pvb{wav^vP5c|v{v&_n6`Sz@SjaTP=rsMiQ;i>JOiy=rf|kXe*=>-Rc1yyntG$(d*8WYy|;&iYX48 zypdH2S$nxfiN z;=QIOS(j>)Ib`gFSuiDL$^`B@791;|P$kt_?yuJAPz%&A&wdFLwQwp5ir#?%)EG?M z-pI>ZjEmCG%-DEyu3kti;OA)J`mgQJZ>3%XeKXJ!LgBh>((^5T{SpR|)qT^{b01x~ z2$~ zEiFqxRwfr6xVn0|DdD0u-(1hT-b4@VTvZBngsLg=r<;I5{Kkdc)=Y^ZwOtoa^yUSt zz4T=S3@E~59TCGbB|D{`i$6Ci-zi9FXAua4Fb4&z@#kKso>I&{e^ln}&IPsP=U(lu zKLq+aS~@zQUcgLUD}H=kQPHX)$-Oj>GViJ>sk@PdDbczXKZ9zc*+M38eIn}pUdgt5 z=IpOX(bsiLO+g_e*eI1dw!0Ay+>TltGbdjw@|i(};$PwF3tVsY_(FgOo0e+aZdYGsq-BF`CX|5+Kk#|uE0Cb6eV8@Osp z6$F2{XS`65)nB3pOdte(#8AxIf60bvsWXx>7!mN_=_Ik|Y5PLnikrw+EXbZE8@`JM zu#!t9x_$DmdaI%&)4nJ`GD6KN3LCC8k1Fd;x}Fzngx86rxkK;8CRl;Q(j@trD&{ZR zSVJ84a3$LiSEBD{`LegS7hroJ@v%g*y?m08Fz)p2e)MV6|B?$-d$}18wCLQV?zN}( zJ{3`|2A2Gd-_d%-ToU5qOWf6ai_ve=|GygcEkiYabJB&+QsHR)@t(1tdu}kQL=Bj( zU>o)lDyD$(Md?4r#&m_!oX;Mzza>+mNbG4f{I9)6+pG@AP}=DR-CH&k;}i8)UcO#r z)@t3e)ROSujKG@w-rJ?Xd;iUIe4hEL{09}fEy@)tz#zahD2N=uNH@HzX?1pB+DCTBz+Ash&n52v0U AddCommand : creates > +@enduml \ No newline at end of file diff --git a/docs/umlDiagrams/AddFlashcardSequence.png b/docs/umlDiagrams/AddFlashcardSequence.png new file mode 100644 index 0000000000000000000000000000000000000000..c20b3c8c66bedc6e982b9f6f67e4cf4ce8e3784f GIT binary patch literal 30281 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