From b28ee5a1b0059c8f5a7439e417366811f0c4f460 Mon Sep 17 00:00:00 2001 From: whelan-low Date: Wed, 20 Mar 2024 21:06:11 +0800 Subject: [PATCH 01/15] Update Model package UML diagram --- docs/diagrams/ModelClassDiagram.puml | 42 ++++++++++++++++++---------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/docs/diagrams/ModelClassDiagram.puml b/docs/diagrams/ModelClassDiagram.puml index 0de5673070d..c3fd832fdef 100644 --- a/docs/diagrams/ModelClassDiagram.puml +++ b/docs/diagrams/ModelClassDiagram.puml @@ -12,14 +12,21 @@ Class AddressBook Class ModelManager Class UserPrefs +Class ModuleCode +Class ModuleContainsKeywordPredicate +Class ModuleTutorialPair +Class TutorialClass +Class TutorialContainsKeywordPredicate +Class Tag + Class UniquePersonList Class Person -Class Address -Class Email Class Name -Class Phone -Class Tag - +Class Email +Class StudentId +Class NameContainsKeywordPredicate +Class EmailContainsKeywordPredicate +Class StudentIdContainsKeywordPredicate Class I #FFFFFF } @@ -35,20 +42,27 @@ ModelManager -left-> "1" AddressBook ModelManager -right-> "1" UserPrefs UserPrefs .up.|> ReadOnlyUserPrefs +ModelManager *-left> "~* filtered" ModuleCode +AddressBook -left> "~* all" ModuleCode +ModuleCode -up> TutorialClass +ModuleTutorialPair -> ModuleCode +ModuleTutorialPair -down> TutorialClass +ModuleContainsKeywordPredicate -..down> ModuleCode +TutorialContainsKeywordPredicate -..up> TutorialClass +TutorialClass -> Person + AddressBook *--> "1" UniquePersonList UniquePersonList --> "~* all" Person -Person *--> Name -Person *--> Phone -Person *--> Email -Person *--> Address -Person *--> "*" Tag - +Person *--> "1" Name +Person *--> "1" Email +Person *--> "1" StudentId +Person *--> Tag Person -[hidden]up--> I UniquePersonList -[hidden]right-> I -Name -[hidden]right-> Phone -Phone -[hidden]right-> Address -Address -[hidden]right-> Email +NameContainsKeywordPredicate -..> Name +StudentIdContainsKeywordPredicate -left..> StudentId +EmailContainsKeywordPredicate -right..> Email ModelManager --> "~* filtered" Person @enduml From bf0487490bd362d2495d9ecef1b74ccb605c7f50 Mon Sep 17 00:00:00 2001 From: Zack-Tay Date: Thu, 21 Mar 2024 10:29:29 +0800 Subject: [PATCH 02/15] Update naming convention for application --- build.gradle | 2 +- .../java/seedu/address/logic/commands/DeleteCommand.java | 2 +- src/main/java/seedu/address/logic/commands/EditCommand.java | 2 +- src/main/java/seedu/address/logic/commands/ExitCommand.java | 2 +- src/main/java/seedu/address/logic/commands/HelpCommand.java | 2 +- .../seedu/address/logic/commands/ListClassesCommand.java | 2 +- src/main/java/seedu/address/logic/commands/ListCommand.java | 4 ++-- .../seedu/address/logic/parser/AddClassCommandParser.java | 6 +++--- .../address/logic/parser/DeleteClassCommandParser.java | 6 +++--- .../address/logic/parser/DeleteStudentCommandParser.java | 6 +++--- src/main/java/seedu/address/logic/parser/Prefix.java | 2 +- src/main/java/seedu/address/model/person/Email.java | 2 +- src/main/java/seedu/address/model/person/Name.java | 4 ++-- src/main/java/seedu/address/model/tag/Tag.java | 2 +- 14 files changed, 22 insertions(+), 22 deletions(-) diff --git a/build.gradle b/build.gradle index 997495b6ade..ce4e7f30fb0 100644 --- a/build.gradle +++ b/build.gradle @@ -71,7 +71,7 @@ dependencies { } shadowJar { - archiveFileName = 'addressbook.jar' + archiveFileName = 'tahelper.jar' } defaultTasks 'clean', 'test' diff --git a/src/main/java/seedu/address/logic/commands/DeleteCommand.java b/src/main/java/seedu/address/logic/commands/DeleteCommand.java index 1135ac19b74..11ae43bd1c9 100644 --- a/src/main/java/seedu/address/logic/commands/DeleteCommand.java +++ b/src/main/java/seedu/address/logic/commands/DeleteCommand.java @@ -12,7 +12,7 @@ import seedu.address.model.person.Person; /** - * Deletes a person identified using it's displayed index from the address book. + * Deletes a person identified using it's displayed index from tahelper system. */ public class DeleteCommand extends Command { diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java index 73823fc61f6..90f559fb985 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCommand.java @@ -27,7 +27,7 @@ import seedu.address.model.tag.Tag; /** - * Edits the details of an existing person in the address book. + * Edits the details of an existing person in tahelper's system */ public class EditCommand extends Command { diff --git a/src/main/java/seedu/address/logic/commands/ExitCommand.java b/src/main/java/seedu/address/logic/commands/ExitCommand.java index 3dd85a8ba90..70703fd7595 100644 --- a/src/main/java/seedu/address/logic/commands/ExitCommand.java +++ b/src/main/java/seedu/address/logic/commands/ExitCommand.java @@ -7,7 +7,7 @@ */ public class ExitCommand extends Command { - public static final String COMMAND_WORD = "exit"; + public static final String COMMAND_WORD = "/exit"; public static final String MESSAGE_EXIT_ACKNOWLEDGEMENT = "Exiting Address Book as requested ..."; diff --git a/src/main/java/seedu/address/logic/commands/HelpCommand.java b/src/main/java/seedu/address/logic/commands/HelpCommand.java index bf824f91bd0..1735597b18f 100644 --- a/src/main/java/seedu/address/logic/commands/HelpCommand.java +++ b/src/main/java/seedu/address/logic/commands/HelpCommand.java @@ -7,7 +7,7 @@ */ public class HelpCommand extends Command { - public static final String COMMAND_WORD = "help"; + public static final String COMMAND_WORD = "/help"; public static final String MESSAGE_USAGE = COMMAND_WORD + ": Shows program usage instructions.\n" + "Example: " + COMMAND_WORD; diff --git a/src/main/java/seedu/address/logic/commands/ListClassesCommand.java b/src/main/java/seedu/address/logic/commands/ListClassesCommand.java index 61b83ef4ce1..dfae02b1de9 100644 --- a/src/main/java/seedu/address/logic/commands/ListClassesCommand.java +++ b/src/main/java/seedu/address/logic/commands/ListClassesCommand.java @@ -5,7 +5,7 @@ import seedu.address.model.Model; /** - * Lists all modules and their associated tutorial classes in the address book to the user. + * Lists all modules and their associated tutorial classes in TAHelper to the user. */ public class ListClassesCommand extends Command { diff --git a/src/main/java/seedu/address/logic/commands/ListCommand.java b/src/main/java/seedu/address/logic/commands/ListCommand.java index 84be6ad2596..84a7a3972b1 100644 --- a/src/main/java/seedu/address/logic/commands/ListCommand.java +++ b/src/main/java/seedu/address/logic/commands/ListCommand.java @@ -6,11 +6,11 @@ import seedu.address.model.Model; /** - * Lists all persons in the address book to the user. + * Lists all persons in TAHelper to the user. */ public class ListCommand extends Command { - public static final String COMMAND_WORD = "list"; + public static final String COMMAND_WORD = "/list"; public static final String MESSAGE_SUCCESS = "Listed all persons"; diff --git a/src/main/java/seedu/address/logic/parser/AddClassCommandParser.java b/src/main/java/seedu/address/logic/parser/AddClassCommandParser.java index 3ff3b8ca12c..d72efc8aa4a 100644 --- a/src/main/java/seedu/address/logic/parser/AddClassCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/AddClassCommandParser.java @@ -15,12 +15,12 @@ /** - * Parses input arguments and creates a new {@code RemarkCommand} object + * Parses input arguments and creates a new {@code AddClassCommandParser} object */ public class AddClassCommandParser implements Parser { /** - * Parses the given {@code String} of arguments in the context of the {@code RemarkCommand} - * and returns a {@code RemarkCommand} object for execution. + * Parses the given {@code String} of arguments in the context of the {@code AddClassCommandParser} + * and returns a {@code AddClassCommandParser} object for execution. * @throws ParseException if the user input does not conform the expected format */ public AddClassCommand parse(String args) throws ParseException { diff --git a/src/main/java/seedu/address/logic/parser/DeleteClassCommandParser.java b/src/main/java/seedu/address/logic/parser/DeleteClassCommandParser.java index fe761612a3f..b50d8e99918 100644 --- a/src/main/java/seedu/address/logic/parser/DeleteClassCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/DeleteClassCommandParser.java @@ -15,12 +15,12 @@ /** - * Parses input arguments and creates a new {@code RemarkCommand} object + * Parses input arguments and creates a new {@code DeleteClassCommandParser} object */ public class DeleteClassCommandParser implements Parser { /** - * Parses the given {@code String} of arguments in the context of the {@code RemarkCommand} - * and returns a {@code RemarkCommand} object for execution. + * Parses the given {@code String} of arguments in the context of the {@code DeleteClassCommandParser} + * and returns a {@code DeleteClassCommandParser} object for execution. * @throws ParseException if the user input does not conform the expected format */ public DeleteClassCommand parse(String args) throws ParseException { diff --git a/src/main/java/seedu/address/logic/parser/DeleteStudentCommandParser.java b/src/main/java/seedu/address/logic/parser/DeleteStudentCommandParser.java index a547a788669..e5e278ef2e1 100644 --- a/src/main/java/seedu/address/logic/parser/DeleteStudentCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/DeleteStudentCommandParser.java @@ -16,14 +16,14 @@ import seedu.address.model.person.StudentId; /** - * Parses input arguments and creates a new DeleteCommand object + * Parses input arguments and creates a new DeleteStudentCommand object */ public class DeleteStudentCommandParser implements Parser { /** * Parses the given {@code String} of arguments in the context of the - * DeleteCommand - * and returns a DeleteCommand object for execution. + * DeleteStudentCommand + * and returns a DeleteStudentCommand object for execution. * * @throws ParseException if the user input does not conform the expected format */ diff --git a/src/main/java/seedu/address/logic/parser/Prefix.java b/src/main/java/seedu/address/logic/parser/Prefix.java index 348b7686c8a..f443e9a28d2 100644 --- a/src/main/java/seedu/address/logic/parser/Prefix.java +++ b/src/main/java/seedu/address/logic/parser/Prefix.java @@ -2,7 +2,7 @@ /** * A prefix that marks the beginning of an argument in an arguments string. - * E.g. 't/' in 'add James t/ friend'. + * E.g. 'tag/' in '/add_students name/john ...... tag/ friend'. */ public class Prefix { private final String prefix; diff --git a/src/main/java/seedu/address/model/person/Email.java b/src/main/java/seedu/address/model/person/Email.java index 24b6faf4001..be632593a54 100644 --- a/src/main/java/seedu/address/model/person/Email.java +++ b/src/main/java/seedu/address/model/person/Email.java @@ -4,7 +4,7 @@ import static seedu.address.commons.util.AppUtil.checkArgument; /** - * Represents a Person's email in the address book. + * Represents a Person's email in TAHelper. * Guarantees: immutable; is valid as declared in {@link #isValidEmail(String)} */ public class Email { diff --git a/src/main/java/seedu/address/model/person/Name.java b/src/main/java/seedu/address/model/person/Name.java index 173f15b9b00..b217db4b5ff 100644 --- a/src/main/java/seedu/address/model/person/Name.java +++ b/src/main/java/seedu/address/model/person/Name.java @@ -4,7 +4,7 @@ import static seedu.address.commons.util.AppUtil.checkArgument; /** - * Represents a Person's name in the address book. + * Represents a Person's name in TAHelper. * Guarantees: immutable; is valid as declared in {@link #isValidName(String)} */ public class Name { @@ -13,7 +13,7 @@ public class Name { "Names should only contain alphanumeric characters and spaces, and it should not be blank"; /* - * The first character of the address must not be a whitespace, + * The first character of the name must not be a whitespace, * otherwise " " (a blank string) becomes a valid input. */ public static final String VALIDATION_REGEX = "[\\p{Alnum}][\\p{Alnum} ]*"; diff --git a/src/main/java/seedu/address/model/tag/Tag.java b/src/main/java/seedu/address/model/tag/Tag.java index f1a0d4e233b..18ecf218856 100644 --- a/src/main/java/seedu/address/model/tag/Tag.java +++ b/src/main/java/seedu/address/model/tag/Tag.java @@ -4,7 +4,7 @@ import static seedu.address.commons.util.AppUtil.checkArgument; /** - * Represents a Tag in the address book. + * Represents a Tag in TAHelper. * Guarantees: immutable; name is valid as declared in {@link #isValidTagName(String)} */ public class Tag { From ffa2916b2a693388b3c7c595f669fd11251f1565 Mon Sep 17 00:00:00 2001 From: Zack-Tay Date: Thu, 21 Mar 2024 10:33:33 +0800 Subject: [PATCH 03/15] Update gradle file to support javafx swing library --- build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.gradle b/build.gradle index ce4e7f30fb0..8dba104ccbd 100644 --- a/build.gradle +++ b/build.gradle @@ -57,6 +57,9 @@ dependencies { implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'win' implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'mac' implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'linux' + implementation group: 'org.openjfx', name: 'javafx-swing', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-swing', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-swing', version: javaFxVersion, classifier: 'linux' implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.7.0' implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.7.4' From e4f9e34a179cda07223876c229ed932a72ccad12 Mon Sep 17 00:00:00 2001 From: Zack-Tay Date: Thu, 21 Mar 2024 10:56:37 +0800 Subject: [PATCH 04/15] Update statusbar for application --- src/main/java/seedu/address/model/UserPrefs.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/address/model/UserPrefs.java b/src/main/java/seedu/address/model/UserPrefs.java index 6be655fb4c7..6195bf13ca5 100644 --- a/src/main/java/seedu/address/model/UserPrefs.java +++ b/src/main/java/seedu/address/model/UserPrefs.java @@ -14,7 +14,7 @@ public class UserPrefs implements ReadOnlyUserPrefs { private GuiSettings guiSettings = new GuiSettings(); - private Path addressBookFilePath = Paths.get("data" , "addressbook.json"); + private Path addressBookFilePath = Paths.get("data" , "tahelper.json"); /** * Creates a {@code UserPrefs} with default values. From 77d196c35b54592f46008e3322b1ccc99e667581 Mon Sep 17 00:00:00 2001 From: Zack-Tay Date: Wed, 27 Mar 2024 14:33:26 +0800 Subject: [PATCH 05/15] Update Allocate Student to Team command --- .../AllocateStudentToTeamCommand.java | 21 +++++++++- .../java/seedu/address/model/AddressBook.java | 42 +++++++++++++++++-- src/main/java/seedu/address/model/Model.java | 26 ++++++++++-- .../seedu/address/model/ModelManager.java | 24 +++++++++-- .../address/model/module/TutorialClass.java | 11 ++++- .../address/model/module/TutorialTeam.java | 16 ++++++- .../seedu/address/model/person/StudentId.java | 10 +++++ .../model/person/UniquePersonList.java | 12 ++++++ 8 files changed, 149 insertions(+), 13 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/AllocateStudentToTeamCommand.java b/src/main/java/seedu/address/logic/commands/AllocateStudentToTeamCommand.java index a7ae38321c3..07504be4c4a 100644 --- a/src/main/java/seedu/address/logic/commands/AllocateStudentToTeamCommand.java +++ b/src/main/java/seedu/address/logic/commands/AllocateStudentToTeamCommand.java @@ -2,7 +2,6 @@ import seedu.address.commons.util.ToStringBuilder; import seedu.address.commons.util.CollectionUtil; -import seedu.address.logic.*; import seedu.address.logic.commands.exceptions.*; import seedu.address.model.*; import seedu.address.model.module.*; @@ -34,6 +33,11 @@ public class AllocateStudentToTeamCommand extends Command { + PREFIX_TEAMNAME + "Team 1 "; public static final String MESSAGE_SUCCESS = "Allocate student to team: "; + public static final String MESSAGE_TEAM_DOES_NOT_EXIST = "Team does not exist in tutorial class"; + public static final String MESSAGE_DUPLICATE_PERSON_IN_TEAM = "This person already exists in a team" + + " in the tutorial class!"; + + public static final String MESSAGE_CLASS_DOES_NOT_EXIST = "Tutorial class does not exist in module"; private final StudentId studentId; private final ModuleCode moduleCode; @@ -55,6 +59,21 @@ public AllocateStudentToTeamCommand(StudentId studentId, ModuleCode moduleCode, @Override public CommandResult execute(Model model) throws CommandException { requireNonNull(model); + + if (model.findTutorialClassFromList(tutorialClass, moduleCode) == null) { + throw new CommandException(MESSAGE_CLASS_DOES_NOT_EXIST); + } + + if (!model.hasTeamInTutorial(tutorialClass, tutorialTeam)) { + throw new CommandException(MESSAGE_TEAM_DOES_NOT_EXIST); + } + + if (model.isStudentInAnyTeam(studentId, tutorialClass)) { + throw new CommandException(MESSAGE_DUPLICATE_PERSON_IN_TEAM); + } + + model.allocateStudentToTeam(studentId, tutorialTeam); + return new CommandResult(String.format(MESSAGE_SUCCESS)); } diff --git a/src/main/java/seedu/address/model/AddressBook.java b/src/main/java/seedu/address/model/AddressBook.java index f4cf39d4c5a..80945cc6c9b 100644 --- a/src/main/java/seedu/address/model/AddressBook.java +++ b/src/main/java/seedu/address/model/AddressBook.java @@ -1,6 +1,7 @@ package seedu.address.model; import static java.util.Objects.requireNonNull; +import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; import java.util.ArrayList; import java.util.List; @@ -10,10 +11,8 @@ import seedu.address.commons.util.ToStringBuilder; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.logic.messages.ModuleMessages; -import seedu.address.model.module.ModuleCode; -import seedu.address.model.module.TutorialClass; -import seedu.address.model.person.Person; -import seedu.address.model.person.UniquePersonList; +import seedu.address.model.module.*; +import seedu.address.model.person.*; /** * Wraps all data at the address-book level @@ -99,6 +98,41 @@ public boolean hasPerson(Person person) { return persons.contains(person); } + /** + * Returns true if a team with the same identity as {@code tutorialTeam} exists in the {@code tutorialClass} + * @param tutorialClass of the tutorialTeam. + * @param tutorialTeam to check if it exist. + */ + public boolean hasTeamInTutorial(TutorialClass tutorialClass, TutorialTeam tutorialTeam) { + requireAllNonNull(tutorialClass, tutorialTeam); + ArrayList listOfTeams = tutorialClass.getTeams(); + ObservableList teams = FXCollections.observableList(listOfTeams); + return teams.stream().anyMatch(tutorialClass::hasTeam); + } + + /** + * Returns true if the {@code studentId} is already in a team of {@code tutorialClass}. + * @param tutorialClass of the teams. + * @param studentId to search for. + */ + public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialClass) { + boolean isStudentExist = false; + for (TutorialTeam tutorialTeam : tutorialClass.getTeams()) { + isStudentExist = tutorialTeam.hasStudentVerified(studentId); + } + return isStudentExist; + }; + + /** + * Allocates the {@code studentId} to the {@code tutorialTeam} + * @param tutorialTeam to allocate the student into. + */ + public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam) { + requireAllNonNull(studentId, tutorialTeam); + Person person = persons.getPerson(studentId); + tutorialTeam.addStudent(person); + } + /** * Adds a person to the address book. * The person must not already exist in the address book. diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index fe7fcdbfbbd..6349f53ea86 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -5,9 +5,8 @@ import javafx.collections.ObservableList; import seedu.address.commons.core.GuiSettings; -import seedu.address.model.module.ModuleCode; -import seedu.address.model.module.TutorialClass; -import seedu.address.model.person.Person; +import seedu.address.model.module.*; +import seedu.address.model.person.*; /** * The API of the Model component. @@ -124,9 +123,30 @@ public interface Model { */ void updateFilteredModuleList(Predicate predicate); + /** * Search for person by a given {@code predicate}. */ Person searchPersonByPredicate(Predicate predicate); + /** + * Returns true if a team with the same identity as {@code tutorialTeam} exists in the {@code tutorialClass} + * @param tutorialClass of the tutorialTeam. + * @param tutorialTeam to check if it exist. + */ + boolean hasTeamInTutorial(TutorialClass tutorialClass, TutorialTeam tutorialTeam); + + /** + * Returns true if the {@code studentId} is already in a team of {@code tutorialClass}. + * @param tutorialClass of the teams. + * @param studentId to search for. + */ + public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialClass); + + /** + * Allocates the student to the {@code tutorialTeam} under that {@code tutorialClass} of that {@code moduleCode} + * @param studentId to find the Person to add into the team. + * @param tutorialTeam to allocate the student into. + */ + public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam); } diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index 89114f11e07..19388575c36 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -11,9 +11,8 @@ import javafx.collections.transformation.FilteredList; import seedu.address.commons.core.GuiSettings; import seedu.address.commons.core.LogsCenter; -import seedu.address.model.module.ModuleCode; -import seedu.address.model.module.TutorialClass; -import seedu.address.model.person.Person; +import seedu.address.model.module.*; +import seedu.address.model.person.*; /** @@ -98,6 +97,25 @@ public boolean hasPerson(Person person) { requireNonNull(person); return addressBook.hasPerson(person); } + + @Override + public boolean hasTeamInTutorial(TutorialClass tutorialClass, TutorialTeam tutorialTeam) { + requireAllNonNull(tutorialClass, tutorialTeam); + return addressBook.hasTeamInTutorial(tutorialClass, tutorialTeam); + } + + @Override + public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialClass) { + requireAllNonNull(studentId, tutorialClass); + return addressBook.isStudentInAnyTeam(studentId, tutorialClass); + } + + @Override + public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam) { + requireAllNonNull(studentId, tutorialTeam); + addressBook.allocateStudentToTeam(studentId, tutorialTeam); + } + @Override public ModuleCode findModuleFromList(ModuleCode module) { requireNonNull(module); diff --git a/src/main/java/seedu/address/model/module/TutorialClass.java b/src/main/java/seedu/address/model/module/TutorialClass.java index ad99f458234..589348ef8ee 100644 --- a/src/main/java/seedu/address/model/module/TutorialClass.java +++ b/src/main/java/seedu/address/model/module/TutorialClass.java @@ -157,7 +157,16 @@ public void addTeam(TutorialTeam team) { * @param team */ public boolean hasTeam(TutorialTeam team) { - return teams.contains(team); + if (teams.contains(team)) { + return true; + } + for (TutorialTeam tutorialTeam : teams) { + if (tutorialTeam.getTeamName().equals(team.getTeamName())) { + return true; + } + }; + + return false; } @Override diff --git a/src/main/java/seedu/address/model/module/TutorialTeam.java b/src/main/java/seedu/address/model/module/TutorialTeam.java index 2410237e59e..677fba8775d 100644 --- a/src/main/java/seedu/address/model/module/TutorialTeam.java +++ b/src/main/java/seedu/address/model/module/TutorialTeam.java @@ -5,7 +5,8 @@ import java.util.ArrayList; -import seedu.address.model.person.Person; +import javafx.collections.*; +import seedu.address.model.person.*; /** * Represents a Module's tutorial team. @@ -176,6 +177,19 @@ public boolean hasStudent(Person student) { return students.contains(student); } + + /** + * Checks if the student is in the tutorial team. + * @param studentId to check with. + * @return true if the student is in the tutorial class + */ + public boolean hasStudentVerified(StudentId studentId) { + ObservableList obList = FXCollections.observableList(students); + return obList.stream().anyMatch(person -> person.getStudentId().isSameStudentId(studentId)); + } + + + @Override public String toString() { return teamName; diff --git a/src/main/java/seedu/address/model/person/StudentId.java b/src/main/java/seedu/address/model/person/StudentId.java index b7a09a46b1b..3dbcb8a4b23 100644 --- a/src/main/java/seedu/address/model/person/StudentId.java +++ b/src/main/java/seedu/address/model/person/StudentId.java @@ -38,6 +38,16 @@ public static boolean isValidStudentId(String test) { return test.matches(VALIDATION_REGEX); } + /** + * Returns true if 2 student ids are identical to {@code studentId} id value. + * @param studentId + * @return boolean if they are identical. + */ + public boolean isSameStudentId(StudentId studentId) { + requireNonNull(studentId); + return this.value.equals(studentId.value); + } + @Override public String toString() { return value; diff --git a/src/main/java/seedu/address/model/person/UniquePersonList.java b/src/main/java/seedu/address/model/person/UniquePersonList.java index 1287447aeff..7cd4693d39e 100644 --- a/src/main/java/seedu/address/model/person/UniquePersonList.java +++ b/src/main/java/seedu/address/model/person/UniquePersonList.java @@ -36,6 +36,18 @@ public boolean contains(Person toCheck) { return internalList.stream().anyMatch(toCheck::isSamePerson); } + /** + * Return the Person object if the list contains the person with {@code studentId} + */ + public Person getPerson(StudentId studentId) { + requireNonNull(studentId); + Person personMatch = internalList.stream() + .filter(person -> person.getStudentId().isSameStudentId(studentId)) + .findFirst() + .orElse(null); + return personMatch; + } + /** * Adds a person to the list. * The person must not already exist in the list. From 9d3dfaa9b378612917ff675fa05ab8e5ecda6aeb Mon Sep 17 00:00:00 2001 From: Zack-Tay Date: Wed, 27 Mar 2024 16:13:00 +0800 Subject: [PATCH 06/15] Update Allocate Student Command --- docs/diagrams/ModelClassDiagram.puml | 42 +++-- .../logic/commands/DeleteClassCommand.java | 13 +- .../logic/commands/DeleteModuleCommand.java | 74 ++++++++ .../logic/commands/DeleteTeamCommand.java | 116 ++++++++++++ .../address/logic/commands/EditCommand.java | 22 ++- .../AddStudentToClassByIndexCommand.java | 2 +- .../DeleteStudentFromClassByEmailCommand.java | 80 +++++++++ .../DeleteStudentFromClassByIdCommand.java | 78 ++++++++ .../DeleteStudentFromClassByIndexCommand.java | 77 ++++++++ .../DeleteStudentFromClassCommand.java | 69 ++++++++ .../logic/messages/ModuleMessages.java | 2 + .../logic/messages/PersonMessages.java | 2 + .../logic/messages/TutorialClassMessages.java | 2 + .../logic/parser/AddTeamCommandParser.java | 22 +-- .../logic/parser/AddressBookParser.java | 12 ++ .../parser/DeleteClassCommandParser.java | 24 ++- .../parser/DeleteModuleCommandParser.java | 46 +++++ .../DeleteStudentFromClassCommandParser.java | 76 ++++++++ .../logic/parser/DeleteTeamCommandParser.java | 49 +++++ .../logic/parser/EditCommandParser.java | 13 +- .../java/seedu/address/model/AddressBook.java | 75 ++++---- src/main/java/seedu/address/model/Model.java | 26 +-- .../seedu/address/model/ModelManager.java | 24 +-- .../address/model/module/TutorialClass.java | 8 + .../address/model/module/TutorialTeam.java | 33 +--- .../logic/commands/AddStudentCommandTest.java | 22 +++ .../AddTeamCommandIntegrationTest.java | 12 +- .../commands/DeleteClassCommandTest.java | 8 +- .../commands/DeleteModuleCommandTest.java | 74 ++++++++ .../commands/DeleteStudentCommandTest.java | 2 +- ...tudentFromClassCommandIntegrationTest.java | 118 +++++++++++++ .../DeleteStudentFromClassCommandTest.java | 167 ++++++++++++++++++ .../DeleteTeamCommandIntegrationTest.java | 76 ++++++++ .../logic/commands/DeleteTeamCommandTest.java | 52 ++++++ .../logic/commands/EditCommandTest.java | 94 ++++++++++ .../logic/parser/AddressBookParserTest.java | 40 ++++- .../parser/DeleteModuleCommandParserTest.java | 46 +++++ ...leteStudentFromClassCommandParserTest.java | 50 ++++++ .../parser/DeleteTeamCommandParserTest.java | 54 ++++++ .../logic/parser/EditCommandParserTest.java | 66 +++---- .../seedu/address/model/AddressBookTest.java | 48 +++++ .../seedu/address/model/ModelManagerTest.java | 16 ++ 42 files changed, 1729 insertions(+), 203 deletions(-) create mode 100644 src/main/java/seedu/address/logic/commands/DeleteModuleCommand.java create mode 100644 src/main/java/seedu/address/logic/commands/DeleteTeamCommand.java create mode 100644 src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassByEmailCommand.java create mode 100644 src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassByIdCommand.java create mode 100644 src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassByIndexCommand.java create mode 100644 src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassCommand.java create mode 100644 src/main/java/seedu/address/logic/parser/DeleteModuleCommandParser.java create mode 100644 src/main/java/seedu/address/logic/parser/DeleteStudentFromClassCommandParser.java create mode 100644 src/main/java/seedu/address/logic/parser/DeleteTeamCommandParser.java create mode 100644 src/test/java/seedu/address/logic/commands/DeleteModuleCommandTest.java create mode 100644 src/test/java/seedu/address/logic/commands/DeleteStudentFromClassCommandIntegrationTest.java create mode 100644 src/test/java/seedu/address/logic/commands/DeleteStudentFromClassCommandTest.java create mode 100644 src/test/java/seedu/address/logic/commands/DeleteTeamCommandIntegrationTest.java create mode 100644 src/test/java/seedu/address/logic/commands/DeleteTeamCommandTest.java create mode 100644 src/test/java/seedu/address/logic/parser/DeleteModuleCommandParserTest.java create mode 100644 src/test/java/seedu/address/logic/parser/DeleteStudentFromClassCommandParserTest.java create mode 100644 src/test/java/seedu/address/logic/parser/DeleteTeamCommandParserTest.java diff --git a/docs/diagrams/ModelClassDiagram.puml b/docs/diagrams/ModelClassDiagram.puml index 0de5673070d..c3fd832fdef 100644 --- a/docs/diagrams/ModelClassDiagram.puml +++ b/docs/diagrams/ModelClassDiagram.puml @@ -12,14 +12,21 @@ Class AddressBook Class ModelManager Class UserPrefs +Class ModuleCode +Class ModuleContainsKeywordPredicate +Class ModuleTutorialPair +Class TutorialClass +Class TutorialContainsKeywordPredicate +Class Tag + Class UniquePersonList Class Person -Class Address -Class Email Class Name -Class Phone -Class Tag - +Class Email +Class StudentId +Class NameContainsKeywordPredicate +Class EmailContainsKeywordPredicate +Class StudentIdContainsKeywordPredicate Class I #FFFFFF } @@ -35,20 +42,27 @@ ModelManager -left-> "1" AddressBook ModelManager -right-> "1" UserPrefs UserPrefs .up.|> ReadOnlyUserPrefs +ModelManager *-left> "~* filtered" ModuleCode +AddressBook -left> "~* all" ModuleCode +ModuleCode -up> TutorialClass +ModuleTutorialPair -> ModuleCode +ModuleTutorialPair -down> TutorialClass +ModuleContainsKeywordPredicate -..down> ModuleCode +TutorialContainsKeywordPredicate -..up> TutorialClass +TutorialClass -> Person + AddressBook *--> "1" UniquePersonList UniquePersonList --> "~* all" Person -Person *--> Name -Person *--> Phone -Person *--> Email -Person *--> Address -Person *--> "*" Tag - +Person *--> "1" Name +Person *--> "1" Email +Person *--> "1" StudentId +Person *--> Tag Person -[hidden]up--> I UniquePersonList -[hidden]right-> I -Name -[hidden]right-> Phone -Phone -[hidden]right-> Address -Address -[hidden]right-> Email +NameContainsKeywordPredicate -..> Name +StudentIdContainsKeywordPredicate -left..> StudentId +EmailContainsKeywordPredicate -right..> Email ModelManager --> "~* filtered" Person @enduml diff --git a/src/main/java/seedu/address/logic/commands/DeleteClassCommand.java b/src/main/java/seedu/address/logic/commands/DeleteClassCommand.java index beeb506a5ae..771a3119b5a 100644 --- a/src/main/java/seedu/address/logic/commands/DeleteClassCommand.java +++ b/src/main/java/seedu/address/logic/commands/DeleteClassCommand.java @@ -6,6 +6,7 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_TUTORIALCLASS; import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.logic.messages.ModuleMessages; import seedu.address.model.Model; import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; @@ -32,7 +33,7 @@ public class DeleteClassCommand extends Command { /** * Constructs a DeleteClassCommand to delete the specified {@code TutorialClass} * from the specified {@code ModuleCode}. - * @param module The module code of the tutorial class to be deleted. + * @param module The module code of the tutorial class to be deleted. * @param tutorialClass The tutorial class to be deleted. */ public DeleteClassCommand(ModuleCode module, TutorialClass tutorialClass) { @@ -47,12 +48,13 @@ public CommandResult execute(Model model) throws CommandException { ModuleCode existingModule = model.findModuleFromList(module); if (existingModule == null) { - String moduleNotFoundMessage = String.format(MESSAGE_MODULE_NOT_FOUND, module); + String moduleNotFoundMessage = String.format(ModuleMessages.MESSAGE_MODULE_NOT_FOUND, module); throw new CommandException(moduleNotFoundMessage); } if (!(existingModule.hasTutorialClass(tutorialString))) { - String classNotFoundMessage = String.format(MESSAGE_CLASS_NOT_FOUND, module, tutorialString); + String classNotFoundMessage = String.format(ModuleMessages.MESSAGE_TUTORIAL_DOES_NOT_BELONG_TO_MODULE, + tutorialString, module); String tutorialList = existingModule.listTutorialClasses(); throw new CommandException(classNotFoundMessage + "\n" + tutorialList); } else { @@ -63,8 +65,9 @@ public CommandResult execute(Model model) throws CommandException { } /** - * Generates a command execution success message based on whether the tutorial class is successfully deleted. - * @param module The module code of the tutorial class. + * Generates a command execution success message based on whether the tutorial + * class is successfully deleted. + * @param module The module code of the tutorial class. * @param tutorialString The tutorial class. * @return The success message. */ diff --git a/src/main/java/seedu/address/logic/commands/DeleteModuleCommand.java b/src/main/java/seedu/address/logic/commands/DeleteModuleCommand.java new file mode 100644 index 00000000000..ba4725fa9a4 --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/DeleteModuleCommand.java @@ -0,0 +1,74 @@ +package seedu.address.logic.commands; + +import static java.util.Objects.requireNonNull; +import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; +import static seedu.address.logic.messages.ModuleMessages.MESSAGE_DELETE_MODULE_SUCCESS; +import static seedu.address.logic.messages.ModuleMessages.MESSAGE_MODULE_NOT_FOUND; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; + +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.model.Model; +import seedu.address.model.module.ModuleCode; + +/** + * A class used to handle the deletion of tutorial classes. + */ +public class DeleteModuleCommand extends Command { + + public static final String COMMAND_WORD = "/delete_module"; + + public static final String MESSAGE_USAGE = COMMAND_WORD + + ": Deletes a module with the module code specified\n" + + "Parameters:" + PREFIX_MODULECODE + "MODULE_CODE\n" + + "Example: " + COMMAND_WORD + " " + PREFIX_MODULECODE + " CS2103T"; + + private final ModuleCode module; + + /** + * Constructs a DeleteClassCommand to delete the specified {@code TutorialClass} + * from the specified {@code ModuleCode}. + * @param module The module code of the tutorial class to be deleted. + */ + public DeleteModuleCommand(ModuleCode module) { + requireAllNonNull(module); + this.module = module; + } + + @Override + public CommandResult execute(Model model) throws CommandException { + requireNonNull(model); + + ModuleCode existingModule = model.findModuleFromList(module); + if (existingModule == null) { + String moduleNotFoundMessage = String.format(MESSAGE_MODULE_NOT_FOUND, module); + throw new CommandException(moduleNotFoundMessage); + } else { + model.deleteModule(existingModule); + } + return new CommandResult(generateSuccessMessage(module)); + } + + /** + * Generates a command execution success message based on whether the tutorial class is successfully deleted. + * @param module The module code of the tutorial class. + * @return The success message. + */ + private String generateSuccessMessage(ModuleCode module) { + return String.format(MESSAGE_DELETE_MODULE_SUCCESS, module.toString()); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + + // instanceof handles nulls + if (!(other instanceof DeleteModuleCommand)) { + return false; + } + + DeleteModuleCommand e = (DeleteModuleCommand) other; + return module.equals(e.module); + } +} diff --git a/src/main/java/seedu/address/logic/commands/DeleteTeamCommand.java b/src/main/java/seedu/address/logic/commands/DeleteTeamCommand.java new file mode 100644 index 00000000000..763b952bcfb --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/DeleteTeamCommand.java @@ -0,0 +1,116 @@ +package seedu.address.logic.commands; + +import static java.util.Objects.requireNonNull; +import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TUTORIALCLASS; + +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.logic.messages.ModuleMessages; +import seedu.address.model.Model; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.ModuleTutorialPair; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; + +/** + * A class used to handle the deletion of tutorial team. + */ +public class DeleteTeamCommand extends Command { + public static final String MESSAGE_DELETE_TEAM_SUCCESS = "Removed %1$s from %2$s %3$s!"; + public static final String MESSAGE_TEAM_NOT_FOUND = "%1$s not in %2$s %3$s!"; + public static final String COMMAND_WORD = "/delete_team"; + + public static final String MESSAGE_USAGE = COMMAND_WORD + + ": Deletes a team from the tutorial class specified\n" + + "Parameters:" + PREFIX_MODULECODE + "MODULE_CODE " + + PREFIX_TUTORIALCLASS + "TUTORIAL_CLASS " + PREFIX_NAME + "TEAM_NAME\n" + + "Example: " + COMMAND_WORD + " " + PREFIX_MODULECODE + " CS2103T " + + PREFIX_TUTORIALCLASS + "T09 " + PREFIX_NAME + "Team 1"; + + private final ModuleCode module; + private final TutorialClass tutorialClass; + private final TutorialTeam team; + + /** + * Constructs a DeleteTeamCommand to delete the specified {@code TutorialTeam} + * from the specified {@code ModuleCode} and {@code TutorialClass}. + * @param module The module code of the tutorial class to be deleted. + * @param tutorialClass The tutorial class to be deleted. + * @param teamName The name of the team to be deleted. + */ + public DeleteTeamCommand(ModuleCode module, TutorialClass tutorialClass, String teamName) { + requireAllNonNull(module, tutorialClass, teamName); + this.module = module; + this.tutorialClass = tutorialClass; + this.team = new TutorialTeam(teamName); + } + + @Override + public CommandResult execute(Model model) throws CommandException { + requireNonNull(model); + + ModuleTutorialPair moduleAndTutorialClass = getModuleAndTutorialClass(model); + ModuleCode module = moduleAndTutorialClass.getModule(); + TutorialClass tutorialClass = moduleAndTutorialClass.getTutorialClass(); + if (tutorialClass.hasTeam(team)) { + tutorialClass.deleteTeam(team); + } else { + throw new CommandException(String.format(MESSAGE_TEAM_NOT_FOUND, team, module, tutorialClass)); + } + + return new CommandResult(generateSuccessMessage(module, tutorialClass, team)); + } + + protected ModuleTutorialPair getModuleAndTutorialClass(Model model) throws CommandException { + requireNonNull(model); + ModuleCode module = getModule(); + TutorialClass tutorialClass = getTutorialClass(); + ModuleCode existingModule = model.findModuleFromList(module); + TutorialClass existingTutorialClass = model.findTutorialClassFromList(tutorialClass, existingModule); + if (existingModule == null) { + throw new CommandException(String.format(ModuleMessages.MESSAGE_MODULE_NOT_FOUND, module)); + } + if (existingTutorialClass == null) { + throw new CommandException( + String.format(ModuleMessages.MESSAGE_TUTORIAL_DOES_NOT_BELONG_TO_MODULE, tutorialClass, module)); + } + return new ModuleTutorialPair(existingModule, existingTutorialClass); + } + + protected ModuleCode getModule() { + return module; + } + + protected TutorialClass getTutorialClass() { + return tutorialClass; + } + + /** + * Generates a command execution success message based on whether the tutorial + * team is successfully deleted. + * @param module The module code of the tutorial class. + * @param tutorialString The tutorial class. + * @param team The team to be deleted. + * @return The success message. + */ + private String generateSuccessMessage(ModuleCode module, TutorialClass tutorialString, TutorialTeam team) { + return String.format(MESSAGE_DELETE_TEAM_SUCCESS, team, module, tutorialString); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + + // instanceof handles nulls + if (!(other instanceof DeleteTeamCommand)) { + return false; + } + + DeleteTeamCommand e = (DeleteTeamCommand) other; + return module.equals(e.module) && tutorialClass.equals(e.tutorialClass) && team.equals(e.team); + } +} diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java index 90f559fb985..e2484c74cf8 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCommand.java @@ -2,6 +2,7 @@ import static java.util.Objects.requireNonNull; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; +import static seedu.address.logic.parser.CliSyntax.PREFIX_INDEX; import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; @@ -31,23 +32,26 @@ */ public class EditCommand extends Command { - public static final String COMMAND_WORD = "edit"; + public static final String COMMAND_WORD = "/edit_student"; public static final String MESSAGE_USAGE = COMMAND_WORD + ": Edits the details of the person identified " + "by the index number used in the displayed person list. " + "Existing values will be overwritten by the input values.\n" - + "Parameters: INDEX (must be a positive integer) " + + "Parameters: " + + PREFIX_INDEX + "INDEX (must be a positive integer) " + "[" + PREFIX_NAME + "NAME] " - + "[" + PREFIX_STUDENTID + "PHONE] " + + "[" + PREFIX_STUDENTID + "STUDENT ID] " + "[" + PREFIX_EMAIL + "EMAIL] " + "[" + PREFIX_TAG + "TAG]...\n" + "Example: " + COMMAND_WORD + " 1 " - + PREFIX_STUDENTID + "91234567 " + + PREFIX_STUDENTID + "A1234567Z " + PREFIX_EMAIL + "johndoe@example.com"; public static final String MESSAGE_EDIT_PERSON_SUCCESS = "Edited Person: %1$s"; public static final String MESSAGE_NOT_EDITED = "At least one field to edit must be provided."; public static final String MESSAGE_DUPLICATE_PERSON = "This person already exists in the address book."; + public static final String MESSAGE_DUPLICATE_EMAIL = "This email already exists in the address book."; + public static final String MESSAGE_DUPLICATE_STUDENTID = "This student id already exists in the address book."; private final Index index; private final EditPersonDescriptor editPersonDescriptor; @@ -80,6 +84,16 @@ public CommandResult execute(Model model) throws CommandException { throw new CommandException(MESSAGE_DUPLICATE_PERSON); } + Optional emailToBeEdited = editPersonDescriptor.getEmail(); + if (emailToBeEdited.isPresent() && model.hasPersonWithEmail(emailToBeEdited.get())) { + throw new CommandException(MESSAGE_DUPLICATE_EMAIL); + } + + Optional studentIdToBeEdited = editPersonDescriptor.getStudentId(); + if (studentIdToBeEdited.isPresent() && model.hasPersonWithStudentId(studentIdToBeEdited.get())) { + throw new CommandException(MESSAGE_DUPLICATE_STUDENTID); + } + model.setPerson(personToEdit, editedPerson); model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); return new CommandResult(String.format(MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson))); diff --git a/src/main/java/seedu/address/logic/commands/addstudenttoclasscommands/AddStudentToClassByIndexCommand.java b/src/main/java/seedu/address/logic/commands/addstudenttoclasscommands/AddStudentToClassByIndexCommand.java index 283be417bdd..3ae352cbfcb 100644 --- a/src/main/java/seedu/address/logic/commands/addstudenttoclasscommands/AddStudentToClassByIndexCommand.java +++ b/src/main/java/seedu/address/logic/commands/addstudenttoclasscommands/AddStudentToClassByIndexCommand.java @@ -65,7 +65,7 @@ public boolean equals(Object other) { return true; } - if (!(other instanceof AddStudentToClassByIdCommand)) { + if (!(other instanceof AddStudentToClassByIndexCommand)) { return false; } diff --git a/src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassByEmailCommand.java b/src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassByEmailCommand.java new file mode 100644 index 00000000000..c56a36050b2 --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassByEmailCommand.java @@ -0,0 +1,80 @@ +package seedu.address.logic.commands.deletestudentfromclasscommands; + +import static java.util.Objects.requireNonNull; + +import java.util.function.Predicate; + +import seedu.address.logic.Messages; +import seedu.address.logic.commands.CommandResult; +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.logic.messages.PersonMessages; +import seedu.address.logic.messages.TutorialClassMessages; +import seedu.address.model.Model; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.ModuleTutorialPair; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.person.Email; +import seedu.address.model.person.Person; + +/** + * Deletes a student from a specified tutorial class, by identifying + * the student via their email. + */ +public class DeleteStudentFromClassByEmailCommand extends DeleteStudentFromClassCommand { + private final Predicate predicate; + + private final Email email; + + /** + * Deletes a student from a class by email. + * @param email + * @param module + * @param tutorialClass + */ + public DeleteStudentFromClassByEmailCommand(Email email, ModuleCode module, TutorialClass tutorialClass) { + super(module, tutorialClass); + this.email = email; + this.predicate = person -> person.getEmail().equals(email); + } + + @Override + public CommandResult execute(Model model) throws CommandException { + requireNonNull(model); + ModuleTutorialPair moduleAndTutorialClass = getModuleAndTutorialClass(model); + TutorialClass tutorialClass = moduleAndTutorialClass.getTutorialClass(); + ModuleCode module = moduleAndTutorialClass.getModule(); + Person personToDelete; + + personToDelete = model.searchPersonByPredicate(predicate); + if (personToDelete == null) { + throw new CommandException(String.format(PersonMessages.MESSAGE_PERSON_EMAIL_NOT_FOUND, email)); + } + if (!(tutorialClass.hasStudent(personToDelete))) { + throw new CommandException( + String.format(TutorialClassMessages.MESSAGE_STUDENT_NOT_FOUND_IN_CLASS, + Messages.format(personToDelete), tutorialClass)); + } else { + model.deletePersonFromTutorialClass(personToDelete, module, tutorialClass); + return new CommandResult( + String.format(TutorialClassMessages.MESSAGE_DELETE_STUDENT_FROM_CLASS_SUCCESS, + Messages.format(personToDelete), module, tutorialClass)); + } + } + + /** + * Returns true if both DeleteStudentFromClassByEmailCommand have the same email. + */ + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + + if (!(other instanceof DeleteStudentFromClassByEmailCommand)) { + return false; + } + + DeleteStudentFromClassByEmailCommand otherDeleteCommand = (DeleteStudentFromClassByEmailCommand) other; + return email.equals(otherDeleteCommand.email); + } +} diff --git a/src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassByIdCommand.java b/src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassByIdCommand.java new file mode 100644 index 00000000000..cffff4e9438 --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassByIdCommand.java @@ -0,0 +1,78 @@ +package seedu.address.logic.commands.deletestudentfromclasscommands; + +import static java.util.Objects.requireNonNull; + +import java.util.function.Predicate; + +import seedu.address.logic.Messages; +import seedu.address.logic.commands.CommandResult; +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.logic.messages.PersonMessages; +import seedu.address.logic.messages.TutorialClassMessages; +import seedu.address.model.Model; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.ModuleTutorialPair; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.person.Person; +import seedu.address.model.person.StudentId; + +/** + * Deletes a student from a specified tutorial class, by identifying + * the student via their Student ID. + */ +public class DeleteStudentFromClassByIdCommand extends DeleteStudentFromClassCommand { + + private final Predicate predicate; + + private final StudentId studentId; + + /** + * Deletes a student from a class by student id. + * @param studentId + * @param module + * @param tutorialClass + */ + public DeleteStudentFromClassByIdCommand(StudentId studentId, ModuleCode module, TutorialClass tutorialClass) { + super(module, tutorialClass); + this.studentId = studentId; + this.predicate = person -> person.getStudentId().equals(studentId); + } + + @Override + public CommandResult execute(Model model) throws CommandException { + requireNonNull(model); + ModuleTutorialPair moduleAndTutorialClass = getModuleAndTutorialClass(model); + ModuleCode module = moduleAndTutorialClass.getModule(); + TutorialClass tutorialClass = moduleAndTutorialClass.getTutorialClass(); + Person personToDelete; + personToDelete = model.searchPersonByPredicate(predicate); + if (personToDelete == null) { + throw new CommandException(String.format(PersonMessages.MESSAGE_PERSON_STUDENT_ID_NOT_FOUND, studentId)); + } + if (!(tutorialClass.hasStudent(personToDelete))) { + throw new CommandException(String.format(TutorialClassMessages.MESSAGE_STUDENT_NOT_FOUND_IN_CLASS, + Messages.format(personToDelete), tutorialClass)); + } else { + model.deletePersonFromTutorialClass(personToDelete, module, tutorialClass); + return new CommandResult(String.format(PersonMessages.MESSAGE_DELETE_STUDENT_FROM_CLASS_SUCCESS, + Messages.format(personToDelete), module, tutorialClass)); + } + } + + /** + * Returns true if both DeleteStudentFromClassByIdCommand have the same studentId. + */ + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + + if (!(other instanceof DeleteStudentFromClassByIdCommand)) { + return false; + } + + DeleteStudentFromClassByIdCommand otherDeleteCommand = (DeleteStudentFromClassByIdCommand) other; + return studentId.equals(otherDeleteCommand.studentId); + } +} diff --git a/src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassByIndexCommand.java b/src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassByIndexCommand.java new file mode 100644 index 00000000000..b9a558b6b0d --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassByIndexCommand.java @@ -0,0 +1,77 @@ +package seedu.address.logic.commands.deletestudentfromclasscommands; + +import static java.util.Objects.requireNonNull; + +import seedu.address.commons.core.index.Index; +import seedu.address.logic.Messages; +import seedu.address.logic.commands.CommandResult; +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.logic.messages.PersonMessages; +import seedu.address.logic.messages.TutorialClassMessages; +import seedu.address.model.Model; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.ModuleTutorialPair; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.person.Person; + + +/** + * Deletes a student from a specified tutorial class, by identifying + * the student via their index. + */ +public class DeleteStudentFromClassByIndexCommand extends DeleteStudentFromClassCommand { + private final Index targetIndex; + + /** + * Deletes a student from a class by index. + * @param targetIndex + * @param module + * @param tutorialClass + */ + public DeleteStudentFromClassByIndexCommand(Index targetIndex, ModuleCode module, TutorialClass tutorialClass) { + super(module, tutorialClass); + this.targetIndex = targetIndex; + } + + @Override + public CommandResult execute(Model model) throws CommandException { + requireNonNull(model); + ModuleTutorialPair moduleAndTutorialClass = getModuleAndTutorialClass(model); + TutorialClass tutorialClass = moduleAndTutorialClass.getTutorialClass(); + ModuleCode module = moduleAndTutorialClass.getModule(); + Person personToDelete; + try { + personToDelete = model.getFilteredPersonList().get(targetIndex.getZeroBased()); + } catch (IndexOutOfBoundsException e) { + throw new CommandException( + String.format(PersonMessages.MESSAGE_PERSON_INDEX_NOT_FOUND, targetIndex.getOneBased())); + } + + if (!(tutorialClass.hasStudent(personToDelete))) { + throw new CommandException(String.format(TutorialClassMessages.MESSAGE_STUDENT_NOT_FOUND_IN_CLASS, + Messages.format(personToDelete), tutorialClass)); + } else { + model.deletePersonFromTutorialClass(personToDelete, module, tutorialClass); + return new CommandResult( + String.format(PersonMessages.MESSAGE_DELETE_STUDENT_FROM_CLASS_SUCCESS, + Messages.format(personToDelete), module, tutorialClass)); + } + } + + /** + * Returns true if both DeleteStudentFromClassByIndexCommand have the same index. + */ + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + + if (!(other instanceof DeleteStudentFromClassByIndexCommand)) { + return false; + } + + DeleteStudentFromClassByIndexCommand otherDeleteCommand = (DeleteStudentFromClassByIndexCommand) other; + return targetIndex.equals(otherDeleteCommand.targetIndex); + } +} diff --git a/src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassCommand.java b/src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassCommand.java new file mode 100644 index 00000000000..f8ca13b1a25 --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/deletestudentfromclasscommands/DeleteStudentFromClassCommand.java @@ -0,0 +1,69 @@ +package seedu.address.logic.commands.deletestudentfromclasscommands; + +import static java.util.Objects.requireNonNull; +import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; +import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TUTORIALCLASS; + +import seedu.address.logic.commands.Command; +import seedu.address.logic.commands.CommandResult; +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.logic.messages.ModuleMessages; +import seedu.address.model.Model; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.ModuleTutorialPair; +import seedu.address.model.module.TutorialClass; + +/** + * The abstract class that handles all delete student from tutorial class commands. + */ +public abstract class DeleteStudentFromClassCommand extends Command { + public static final String COMMAND_WORD = "/delete_student_from_class"; + + public static final String MESSAGE_USAGE = COMMAND_WORD + ": Deletes a student from an existing class\n" + + "Parameters:" + "IDENTIFIER " + PREFIX_MODULECODE + "MODULE_CODE (must be a String) " + + PREFIX_TUTORIALCLASS + "TUTORIAL_CLASS (must be a String)\n" + + "Example: " + COMMAND_WORD + " " + PREFIX_EMAIL + "test@gmail.com " + PREFIX_MODULECODE + " CS2103T " + + PREFIX_TUTORIALCLASS + "T09"; + + private final ModuleCode module; + private final TutorialClass tutorialClass; + + /** + * @param module of the tutorial class to be added + */ + public DeleteStudentFromClassCommand(ModuleCode module, TutorialClass tutorialClass) { + requireAllNonNull(module, tutorialClass); + this.module = module; + this.tutorialClass = tutorialClass; + } + + protected ModuleTutorialPair getModuleAndTutorialClass(Model model) throws CommandException { + requireNonNull(model); + ModuleCode module = getModule(); + TutorialClass tutorialClass = getTutorialClass(); + ModuleCode existingModule = model.findModuleFromList(module); + TutorialClass existingTutorialClass = model.findTutorialClassFromList(tutorialClass, existingModule); + if (existingModule == null) { + throw new CommandException(String.format(ModuleMessages.MESSAGE_MODULE_NOT_FOUND, module)); + } + if (existingTutorialClass == null) { + throw new CommandException( + String.format(ModuleMessages.MESSAGE_TUTORIAL_DOES_NOT_BELONG_TO_MODULE, tutorialClass, module)); + } + return new ModuleTutorialPair(existingModule, existingTutorialClass); + } + + protected ModuleCode getModule() { + return module; + } + + protected TutorialClass getTutorialClass() { + return tutorialClass; + } + + public abstract CommandResult execute(Model model) throws CommandException; + + public abstract boolean equals(Object other); +} diff --git a/src/main/java/seedu/address/logic/messages/ModuleMessages.java b/src/main/java/seedu/address/logic/messages/ModuleMessages.java index c73bf1ec2f1..e3824abda33 100644 --- a/src/main/java/seedu/address/logic/messages/ModuleMessages.java +++ b/src/main/java/seedu/address/logic/messages/ModuleMessages.java @@ -8,4 +8,6 @@ public class ModuleMessages { + "does not exist in the address book"; public static final String MESSAGE_TUTORIAL_DOES_NOT_BELONG_TO_MODULE = "The tutorial class with tutorial code %s " + "does not belong to the module with module code %s"; + + public static final String MESSAGE_DELETE_MODULE_SUCCESS = "Removed %1$s!"; } diff --git a/src/main/java/seedu/address/logic/messages/PersonMessages.java b/src/main/java/seedu/address/logic/messages/PersonMessages.java index f3c2061b8ea..3035ca43a05 100644 --- a/src/main/java/seedu/address/logic/messages/PersonMessages.java +++ b/src/main/java/seedu/address/logic/messages/PersonMessages.java @@ -11,5 +11,7 @@ public class PersonMessages { public static final String MESSAGE_PERSON_INDEX_NOT_FOUND = "The student at index %s " + "does not exist in the address book"; public static final String MESSAGE_ADD_STUDENT_TO_CLASS_SUCCESS = "Added student %1$s to %2$s %3$s"; + + public static final String MESSAGE_DELETE_STUDENT_FROM_CLASS_SUCCESS = "Deleted student %1$s from %2$s %3$s"; public static final String MESSAGE_DUPLICATE_STUDENT_IN_CLASS = "%1$s already added to %2$s!"; } diff --git a/src/main/java/seedu/address/logic/messages/TutorialClassMessages.java b/src/main/java/seedu/address/logic/messages/TutorialClassMessages.java index 529b9d0b15a..cfc54fdc2af 100644 --- a/src/main/java/seedu/address/logic/messages/TutorialClassMessages.java +++ b/src/main/java/seedu/address/logic/messages/TutorialClassMessages.java @@ -7,5 +7,7 @@ public class TutorialClassMessages { public static final String MESSAGE_TUTORIAL_CLASS_NOT_FOUND = "The tutorial class with tutorial class code %s " + "does not exist in the address book"; public static final String MESSAGE_DUPLICATE_STUDENT_IN_CLASS = "%1$s already added to %2$s!"; + public static final String MESSAGE_STUDENT_NOT_FOUND_IN_CLASS = "%1$s is not in %2$s!"; public static final String MESSAGE_ADD_STUDENT_TO_CLASS_SUCCESS = "Added student %1$s to %2$s %3$s"; + public static final String MESSAGE_DELETE_STUDENT_FROM_CLASS_SUCCESS = "Deleted student %1$s from %2$s %3$s"; } diff --git a/src/main/java/seedu/address/logic/parser/AddTeamCommandParser.java b/src/main/java/seedu/address/logic/parser/AddTeamCommandParser.java index 5adc660f6d6..c232d177ec0 100644 --- a/src/main/java/seedu/address/logic/parser/AddTeamCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/AddTeamCommandParser.java @@ -36,27 +36,27 @@ public AddTeamCommand parse(String args) throws ParseException { } boolean isTeamSizePresent = argMultimap.getValue(PREFIX_TEAM_SIZE).isPresent(); - String moduleCode = argMultimap.getValue(PREFIX_MODULECODE).orElse(""); - String tutorialClass = argMultimap.getValue(PREFIX_TUTORIALCLASS).orElse(""); + ModuleCode moduleCode = ParserUtil.parseModuleCode(argMultimap.getValue(PREFIX_MODULECODE).get()); + TutorialClass tutorialClass = ParserUtil.parseTutorialClass(argMultimap.getValue(PREFIX_TUTORIALCLASS).get()); String teamName = argMultimap.getValue(PREFIX_NAME).orElse(""); - if (!(ModuleCode.isValidModuleCode(moduleCode))) { - throw new ParseException(ModuleCode.MESSAGE_CONSTRAINTS); - } - if (!(TutorialClass.isValidTutorialClass(tutorialClass))) { - throw new ParseException(TutorialClass.MESSAGE_CONSTRAINTS); - } if (!TutorialTeam.isValidTeamName(teamName)) { throw new ParseException(TutorialTeam.MESSAGE_NAME_CONSTRAINTS); } + if (isTeamSizePresent) { - int teamSize = Integer.parseInt(argMultimap.getValue(PREFIX_TEAM_SIZE).get()); + int teamSize; + try { + teamSize = Integer.parseInt(argMultimap.getValue(PREFIX_TEAM_SIZE).get()); + } catch (NumberFormatException e) { + throw new ParseException(TutorialTeam.MESSAGE_SIZE_CONSTRAINTS); + } if (teamSize <= 0) { throw new ParseException(TutorialTeam.MESSAGE_SIZE_CONSTRAINTS); } - return new AddTeamCommand(new ModuleCode(moduleCode), new TutorialClass(tutorialClass), teamName, teamSize); + return new AddTeamCommand(moduleCode, tutorialClass, teamName, teamSize); } else { - return new AddTeamCommand(new ModuleCode(moduleCode), new TutorialClass(tutorialClass), teamName); + return new AddTeamCommand(moduleCode, tutorialClass, teamName); } } diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java index b644f029c2d..c931c111f50 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java @@ -15,6 +15,8 @@ import seedu.address.logic.commands.Command; import seedu.address.logic.commands.DeleteClassCommand; import seedu.address.logic.commands.DeleteCommand; +import seedu.address.logic.commands.DeleteModuleCommand; +import seedu.address.logic.commands.DeleteTeamCommand; import seedu.address.logic.commands.EditCommand; import seedu.address.logic.commands.ExitCommand; import seedu.address.logic.commands.HelpCommand; @@ -23,6 +25,7 @@ import seedu.address.logic.commands.SearchStudentCommand; import seedu.address.logic.commands.addstudenttoclasscommands.AddStudentToClassCommand; import seedu.address.logic.commands.deletestudentcommands.DeleteStudentCommand; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassCommand; import seedu.address.logic.parser.exceptions.ParseException; /** @@ -75,6 +78,9 @@ public Command parseCommand(String userInput) throws ParseException { case DeleteClassCommand.COMMAND_WORD: return new DeleteClassCommandParser().parse(arguments); + case DeleteModuleCommand.COMMAND_WORD: + return new DeleteModuleCommandParser().parse(arguments); + case DeleteStudentCommand.COMMAND_WORD: return new DeleteStudentCommandParser().parse(arguments); @@ -99,9 +105,15 @@ public Command parseCommand(String userInput) throws ParseException { case AddStudentToClassCommand.COMMAND_WORD: return new AddStudentToClassCommandParser().parse(arguments); + case DeleteStudentFromClassCommand.COMMAND_WORD: + return new DeleteStudentFromClassCommandParser().parse(arguments); + case AddTeamCommand.COMMAND_WORD: return new AddTeamCommandParser().parse(arguments); + case DeleteTeamCommand.COMMAND_WORD: + return new DeleteTeamCommandParser().parse(arguments); + default: logger.finer("This user input caused a ParseException: " + userInput); throw new ParseException(MESSAGE_UNKNOWN_COMMAND); diff --git a/src/main/java/seedu/address/logic/parser/DeleteClassCommandParser.java b/src/main/java/seedu/address/logic/parser/DeleteClassCommandParser.java index b50d8e99918..e52fb517883 100644 --- a/src/main/java/seedu/address/logic/parser/DeleteClassCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/DeleteClassCommandParser.java @@ -12,14 +12,14 @@ import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; - - /** - * Parses input arguments and creates a new {@code DeleteClassCommandParser} object + * Parses input arguments and creates a new {@code DeleteClassCommandParser} + * object */ public class DeleteClassCommandParser implements Parser { /** - * Parses the given {@code String} of arguments in the context of the {@code DeleteClassCommandParser} + * Parses the given {@code String} of arguments in the context of the + * {@code DeleteClassCommandParser} * and returns a {@code DeleteClassCommandParser} object for execution. * @throws ParseException if the user input does not conform the expected format */ @@ -32,18 +32,14 @@ public DeleteClassCommand parse(String args) throws ParseException { throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, DeleteClassCommand.MESSAGE_USAGE)); } - String moduleCode = argMultimap.getValue(PREFIX_MODULECODE).orElse(""); - String tutorialClass = argMultimap.getValue(PREFIX_TUTORIALCLASS).orElse(""); - if (!(ModuleCode.isValidModuleCode(moduleCode))) { - throw new ParseException(ModuleCode.MESSAGE_CONSTRAINTS); - } - if (!(TutorialClass.isValidTutorialClass(tutorialClass))) { - throw new ParseException(TutorialClass.MESSAGE_CONSTRAINTS); - } - return new DeleteClassCommand(new ModuleCode(moduleCode), new TutorialClass(tutorialClass)); + ModuleCode moduleCode = ParserUtil.parseModuleCode(argMultimap.getValue(PREFIX_MODULECODE).get()); + TutorialClass tutorialClass = ParserUtil.parseTutorialClass(argMultimap.getValue(PREFIX_TUTORIALCLASS).get()); + return new DeleteClassCommand(moduleCode, tutorialClass); } + /** - * Returns true if all the prefixes are present in the given {@code ArgumentMultimap}. + * Returns true if all the prefixes are present in the given + * {@code ArgumentMultimap}. */ private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) { return Stream.of(prefixes).allMatch(prefix -> argumentMultimap.getValue(prefix).isPresent()); diff --git a/src/main/java/seedu/address/logic/parser/DeleteModuleCommandParser.java b/src/main/java/seedu/address/logic/parser/DeleteModuleCommandParser.java new file mode 100644 index 00000000000..67684b5d808 --- /dev/null +++ b/src/main/java/seedu/address/logic/parser/DeleteModuleCommandParser.java @@ -0,0 +1,46 @@ +package seedu.address.logic.parser; + +import static java.util.Objects.requireNonNull; +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; + +import java.util.stream.Stream; + +import seedu.address.logic.commands.DeleteModuleCommand; +import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.model.module.ModuleCode; + + + +/** + * Parses input arguments and creates a new {@code DeleteClassCommandParser} object + */ +public class DeleteModuleCommandParser implements Parser { + /** + * Parses the given {@code String} of arguments in the context of the {@code DeleteClassCommandParser} + * and returns a {@code DeleteClassCommandParser} object for execution. + * @throws ParseException if the user input does not conform the expected format + */ + public DeleteModuleCommand parse(String args) throws ParseException { + requireNonNull(args); + ArgumentMultimap argMultimap = ArgumentTokenizer.tokenize(args, PREFIX_MODULECODE); + + if (!arePrefixesPresent(argMultimap, PREFIX_MODULECODE) + || !argMultimap.getPreamble().isEmpty()) { + throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, DeleteModuleCommand.MESSAGE_USAGE)); + } + + String moduleCode = argMultimap.getValue(PREFIX_MODULECODE).orElse(""); + if (!(ModuleCode.isValidModuleCode(moduleCode))) { + throw new ParseException(ModuleCode.MESSAGE_CONSTRAINTS); + } + return new DeleteModuleCommand(new ModuleCode(moduleCode)); + } + /** + * Returns true if all the prefixes are present in the given {@code ArgumentMultimap}. + */ + private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) { + return Stream.of(prefixes).allMatch(prefix -> argumentMultimap.getValue(prefix).isPresent()); + } +} + diff --git a/src/main/java/seedu/address/logic/parser/DeleteStudentFromClassCommandParser.java b/src/main/java/seedu/address/logic/parser/DeleteStudentFromClassCommandParser.java new file mode 100644 index 00000000000..1a7780dd258 --- /dev/null +++ b/src/main/java/seedu/address/logic/parser/DeleteStudentFromClassCommandParser.java @@ -0,0 +1,76 @@ +package seedu.address.logic.parser; + +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; +import static seedu.address.logic.parser.CliSyntax.PREFIX_INDEX; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TUTORIALCLASS; + +import java.util.stream.Stream; + +import seedu.address.commons.core.index.Index; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassByEmailCommand; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassByIdCommand; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassByIndexCommand; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassCommand; +import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.person.Email; +import seedu.address.model.person.StudentId; + +/** + * Parses input arguments and creates a new DeleteStudentFromClassCommand object + */ +public class DeleteStudentFromClassCommandParser implements Parser { + + /** + * Parses the given {@code String} of arguments in the context of the + * DeleteStudentFromClass and returns a DeleteStudentFromClassCommand object for + * execution. + * @throws ParseException if the user input does not conform the expected format + */ + public DeleteStudentFromClassCommand parse(String args) throws ParseException { + ArgumentMultimap argMultimap = ArgumentTokenizer.tokenize(args, PREFIX_INDEX, PREFIX_EMAIL, PREFIX_STUDENTID, + PREFIX_MODULECODE, PREFIX_TUTORIALCLASS); + boolean isIndexPresent = argMultimap.getValue(PREFIX_INDEX).isPresent(); + boolean isEmailPresent = argMultimap.getValue(PREFIX_EMAIL).isPresent(); + boolean isStudentIdPresent = argMultimap.getValue(PREFIX_STUDENTID).isPresent(); + if (!arePrefixesPresent(argMultimap, PREFIX_MODULECODE, PREFIX_TUTORIALCLASS) || (!isIndexPresent + && !isEmailPresent && !isStudentIdPresent) + || !argMultimap.getPreamble().isEmpty()) { + throw new ParseException( + String.format(MESSAGE_INVALID_COMMAND_FORMAT, DeleteStudentFromClassCommand.MESSAGE_USAGE)); + } + + argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_INDEX, PREFIX_STUDENTID, PREFIX_EMAIL, + PREFIX_MODULECODE, PREFIX_TUTORIALCLASS); + ModuleCode moduleCode = ParserUtil.parseModuleCode(argMultimap.getValue(PREFIX_MODULECODE).get()); + TutorialClass tutorialClass = ParserUtil.parseTutorialClass(argMultimap.getValue(PREFIX_TUTORIALCLASS).get()); + if (isIndexPresent) { + Index index = ParserUtil.parseIndex(argMultimap.getValue(PREFIX_INDEX).get()); + return new DeleteStudentFromClassByIndexCommand(index, moduleCode, tutorialClass); + } else if (isStudentIdPresent) { + StudentId studentId = ParserUtil.parseStudentId(argMultimap.getValue(PREFIX_STUDENTID).get()); + return new DeleteStudentFromClassByIdCommand(studentId, moduleCode, tutorialClass); + } else if (isEmailPresent) { + Email email = ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get()); + return new DeleteStudentFromClassByEmailCommand(email, moduleCode, tutorialClass); + } else { + throw new ParseException( + String.format(MESSAGE_INVALID_COMMAND_FORMAT, DeleteStudentFromClassCommand.MESSAGE_USAGE)); + } + + } + + /** + * Returns true if none of the prefixes contains empty {@code Optional} values + * in the given + * {@code ArgumentMultimap}. + */ + private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) { + return Stream.of(prefixes).allMatch(prefix -> argumentMultimap.getValue(prefix).isPresent()); + } + +} diff --git a/src/main/java/seedu/address/logic/parser/DeleteTeamCommandParser.java b/src/main/java/seedu/address/logic/parser/DeleteTeamCommandParser.java new file mode 100644 index 00000000000..b29b36a4ba4 --- /dev/null +++ b/src/main/java/seedu/address/logic/parser/DeleteTeamCommandParser.java @@ -0,0 +1,49 @@ +package seedu.address.logic.parser; + +import static java.util.Objects.requireNonNull; +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TUTORIALCLASS; + +import java.util.stream.Stream; + +import seedu.address.logic.commands.DeleteTeamCommand; +import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; + +/** + * Parses input arguments and creates a new {@code DeleteTeamCommandParser} + * object + */ +public class DeleteTeamCommandParser implements Parser { + /** + * Parses the given {@code String} of arguments in the context of the + * {@code DeleteTeamCommandParser} + * and returns a {@code DeleteTeamCommandParser} object for execution. + * @throws ParseException if the user input does not conform the expected format + */ + public DeleteTeamCommand parse(String args) throws ParseException { + requireNonNull(args); + ArgumentMultimap argMultimap = ArgumentTokenizer.tokenize(args, PREFIX_MODULECODE, PREFIX_TUTORIALCLASS, + PREFIX_NAME); + + if (!arePrefixesPresent(argMultimap, PREFIX_MODULECODE, PREFIX_TUTORIALCLASS, PREFIX_NAME) + || !argMultimap.getPreamble().isEmpty()) { + throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, DeleteTeamCommand.MESSAGE_USAGE)); + } + ModuleCode moduleCode = ParserUtil.parseModuleCode(argMultimap.getValue(PREFIX_MODULECODE).get()); + TutorialClass tutorialClass = ParserUtil.parseTutorialClass(argMultimap.getValue(PREFIX_TUTORIALCLASS).get()); + String teamName = argMultimap.getValue(PREFIX_NAME).get(); + return new DeleteTeamCommand(moduleCode, tutorialClass, teamName); + } + + /** + * Returns true if all the prefixes are present in the given + * {@code ArgumentMultimap}. + */ + private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) { + return Stream.of(prefixes).allMatch(prefix -> argumentMultimap.getValue(prefix).isPresent()); + } +} diff --git a/src/main/java/seedu/address/logic/parser/EditCommandParser.java b/src/main/java/seedu/address/logic/parser/EditCommandParser.java index f34cce07433..c2213f343eb 100644 --- a/src/main/java/seedu/address/logic/parser/EditCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/EditCommandParser.java @@ -3,6 +3,7 @@ import static java.util.Objects.requireNonNull; import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; +import static seedu.address.logic.parser.CliSyntax.PREFIX_INDEX; import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; @@ -31,17 +32,21 @@ public class EditCommandParser implements Parser { public EditCommand parse(String args) throws ParseException { requireNonNull(args); ArgumentMultimap argMultimap = - ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_EMAIL, PREFIX_STUDENTID, PREFIX_TAG); + ArgumentTokenizer.tokenize(args, PREFIX_INDEX, PREFIX_NAME, PREFIX_EMAIL, PREFIX_STUDENTID, PREFIX_TAG); - Index index; + boolean isIndexPresent = argMultimap.getValue(PREFIX_INDEX).isPresent(); + if (!isIndexPresent) { + throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE)); + } + Index index; try { - index = ParserUtil.parseIndex(argMultimap.getPreamble()); + index = ParserUtil.parseIndex(argMultimap.getValue(PREFIX_INDEX).get()); } catch (ParseException pe) { throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE), pe); } - argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_EMAIL, PREFIX_STUDENTID); + argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_INDEX, PREFIX_NAME, PREFIX_EMAIL, PREFIX_STUDENTID); EditPersonDescriptor editPersonDescriptor = new EditPersonDescriptor(); diff --git a/src/main/java/seedu/address/model/AddressBook.java b/src/main/java/seedu/address/model/AddressBook.java index 80945cc6c9b..113ebede187 100644 --- a/src/main/java/seedu/address/model/AddressBook.java +++ b/src/main/java/seedu/address/model/AddressBook.java @@ -1,7 +1,6 @@ package seedu.address.model; import static java.util.Objects.requireNonNull; -import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; import java.util.ArrayList; import java.util.List; @@ -11,8 +10,12 @@ import seedu.address.commons.util.ToStringBuilder; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.logic.messages.ModuleMessages; -import seedu.address.model.module.*; -import seedu.address.model.person.*; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.person.Email; +import seedu.address.model.person.Person; +import seedu.address.model.person.StudentId; +import seedu.address.model.person.UniquePersonList; /** * Wraps all data at the address-book level @@ -99,38 +102,21 @@ public boolean hasPerson(Person person) { } /** - * Returns true if a team with the same identity as {@code tutorialTeam} exists in the {@code tutorialClass} - * @param tutorialClass of the tutorialTeam. - * @param tutorialTeam to check if it exist. + * Returns true if a person with the same identity as {@code person} exists in + * the address book. */ - public boolean hasTeamInTutorial(TutorialClass tutorialClass, TutorialTeam tutorialTeam) { - requireAllNonNull(tutorialClass, tutorialTeam); - ArrayList listOfTeams = tutorialClass.getTeams(); - ObservableList teams = FXCollections.observableList(listOfTeams); - return teams.stream().anyMatch(tutorialClass::hasTeam); + public boolean hasPersonWithStudentId(StudentId id) { + requireNonNull(id); + return persons.asUnmodifiableObservableList().stream().anyMatch(s -> s.getStudentId().equals(id)); } /** - * Returns true if the {@code studentId} is already in a team of {@code tutorialClass}. - * @param tutorialClass of the teams. - * @param studentId to search for. - */ - public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialClass) { - boolean isStudentExist = false; - for (TutorialTeam tutorialTeam : tutorialClass.getTeams()) { - isStudentExist = tutorialTeam.hasStudentVerified(studentId); - } - return isStudentExist; - }; - - /** - * Allocates the {@code studentId} to the {@code tutorialTeam} - * @param tutorialTeam to allocate the student into. + * Returns true if a person with the same identity as {@code person} exists in + * the address book. */ - public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam) { - requireAllNonNull(studentId, tutorialTeam); - Person person = persons.getPerson(studentId); - tutorialTeam.addStudent(person); + public boolean hasPersonWithEmail(Email email) { + requireNonNull(email); + return persons.asUnmodifiableObservableList().stream().anyMatch(s -> s.getEmail().equals(email)); } /** @@ -219,6 +205,26 @@ public void addPersonToTutorialClass(Person person, ModuleCode module, TutorialC tutorialClassInList.addStudent(person); } + /** + * Deletes a person from the students list of a specific tutorial class within a + * module. + */ + public void deletePersonFromTutorialClass(Person person, ModuleCode module, TutorialClass tutorialClass) { + requireNonNull(person); + requireNonNull(module); + requireNonNull(tutorialClass); + + ModuleCode moduleInList = findModuleFromList(module); + if (moduleInList == null) { + throw new IllegalArgumentException("Module does not exist in the address book."); + } + TutorialClass tutorialClassInList = moduleInList.getTutorialClasses().stream() + .filter(tutorial -> tutorial.equals(tutorialClass)) + .findFirst() + .orElse(null); + tutorialClassInList.deleteStudent(person); + } + /** * Replaces the given person {@code target} in the list with * {@code editedPerson}. @@ -233,13 +239,20 @@ public void setPerson(Person target, Person editedPerson) { } /** - * Removes {@code key} from this {@code AddressBook}. + * Removes Person {@code key} from this {@code AddressBook}. * {@code key} must exist in the address book. */ public void removePerson(Person key) { persons.remove(key); } + /** + * Removes ModuleCode {@code key} from this {@code AddressBook}. + * {@code key} must exist in the address book. + */ + public void removeModule(ModuleCode key) { + modules.remove(key); + } //// util methods @Override diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index 6349f53ea86..fe7fcdbfbbd 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -5,8 +5,9 @@ import javafx.collections.ObservableList; import seedu.address.commons.core.GuiSettings; -import seedu.address.model.module.*; -import seedu.address.model.person.*; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.person.Person; /** * The API of the Model component. @@ -123,30 +124,9 @@ public interface Model { */ void updateFilteredModuleList(Predicate predicate); - /** * Search for person by a given {@code predicate}. */ Person searchPersonByPredicate(Predicate predicate); - /** - * Returns true if a team with the same identity as {@code tutorialTeam} exists in the {@code tutorialClass} - * @param tutorialClass of the tutorialTeam. - * @param tutorialTeam to check if it exist. - */ - boolean hasTeamInTutorial(TutorialClass tutorialClass, TutorialTeam tutorialTeam); - - /** - * Returns true if the {@code studentId} is already in a team of {@code tutorialClass}. - * @param tutorialClass of the teams. - * @param studentId to search for. - */ - public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialClass); - - /** - * Allocates the student to the {@code tutorialTeam} under that {@code tutorialClass} of that {@code moduleCode} - * @param studentId to find the Person to add into the team. - * @param tutorialTeam to allocate the student into. - */ - public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam); } diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index 19388575c36..89114f11e07 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -11,8 +11,9 @@ import javafx.collections.transformation.FilteredList; import seedu.address.commons.core.GuiSettings; import seedu.address.commons.core.LogsCenter; -import seedu.address.model.module.*; -import seedu.address.model.person.*; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.person.Person; /** @@ -97,25 +98,6 @@ public boolean hasPerson(Person person) { requireNonNull(person); return addressBook.hasPerson(person); } - - @Override - public boolean hasTeamInTutorial(TutorialClass tutorialClass, TutorialTeam tutorialTeam) { - requireAllNonNull(tutorialClass, tutorialTeam); - return addressBook.hasTeamInTutorial(tutorialClass, tutorialTeam); - } - - @Override - public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialClass) { - requireAllNonNull(studentId, tutorialClass); - return addressBook.isStudentInAnyTeam(studentId, tutorialClass); - } - - @Override - public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam) { - requireAllNonNull(studentId, tutorialTeam); - addressBook.allocateStudentToTeam(studentId, tutorialTeam); - } - @Override public ModuleCode findModuleFromList(ModuleCode module) { requireNonNull(module); diff --git a/src/main/java/seedu/address/model/module/TutorialClass.java b/src/main/java/seedu/address/model/module/TutorialClass.java index 589348ef8ee..4cf554b675d 100644 --- a/src/main/java/seedu/address/model/module/TutorialClass.java +++ b/src/main/java/seedu/address/model/module/TutorialClass.java @@ -169,6 +169,14 @@ public boolean hasTeam(TutorialTeam team) { return false; } + /** + * Deletes a team from the tutorial class. + * @param team + */ + public void deleteTeam(TutorialTeam team) { + teams.remove(team); + } + @Override public String toString() { return tutorialName; diff --git a/src/main/java/seedu/address/model/module/TutorialTeam.java b/src/main/java/seedu/address/model/module/TutorialTeam.java index 677fba8775d..1bee5db01c8 100644 --- a/src/main/java/seedu/address/model/module/TutorialTeam.java +++ b/src/main/java/seedu/address/model/module/TutorialTeam.java @@ -5,8 +5,7 @@ import java.util.ArrayList; -import javafx.collections.*; -import seedu.address.model.person.*; +import seedu.address.model.person.Person; /** * Represents a Module's tutorial team. @@ -38,19 +37,6 @@ public TutorialTeam() { this.teamSize = Integer.MAX_VALUE; } - /** - * Constructs a {@code TutorialTeam} with the specific teamName. - * Initializes the {@code teamName} field to the specified teamName, creates an empty - * list for {@code students} and sets the {@code teamSize} to the maximum. - */ - public TutorialTeam(String teamName) { - this.teamName = teamName; - this.students = new ArrayList<>(); - this.teamSize = Integer.MAX_VALUE; - } - - - /** * A constructor for TutorialTeam. Creates a tutorial team of a certain size * with no students. @@ -68,7 +54,7 @@ public TutorialTeam(String tutorialTeam, int teamSize) { /** * A constructor for TutorialTeam. Creates a tutorial team with students. - * @param tutorialTeam to be added + * @param tutorialClass to be added * @param students in the tutorial class */ public TutorialTeam(String tutorialTeam, ArrayList students) { @@ -82,7 +68,7 @@ public TutorialTeam(String tutorialTeam, ArrayList students) { /** * A constructor for TutorialTeam. Creates a tutorial team with students and * team size. - * @param tutorialTeam to be added + * @param tutorialClass to be added * @param students in the tutorial class * @param teamSize of the tutorial team */ @@ -177,19 +163,6 @@ public boolean hasStudent(Person student) { return students.contains(student); } - - /** - * Checks if the student is in the tutorial team. - * @param studentId to check with. - * @return true if the student is in the tutorial class - */ - public boolean hasStudentVerified(StudentId studentId) { - ObservableList obList = FXCollections.observableList(students); - return obList.stream().anyMatch(person -> person.getStudentId().isSameStudentId(studentId)); - } - - - @Override public String toString() { return teamName; diff --git a/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java b/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java index 166a3098900..be397526443 100644 --- a/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java @@ -24,7 +24,9 @@ import seedu.address.model.ReadOnlyUserPrefs; import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; +import seedu.address.model.person.Email; import seedu.address.model.person.Person; +import seedu.address.model.person.StudentId; import seedu.address.testutil.PersonBuilder; /** @@ -145,6 +147,16 @@ public boolean hasPerson(Person person) { throw new AssertionError("This method should not be called."); } + @Override + public boolean hasPersonWithEmail(Email email) { + throw new AssertionError("This method should not be called."); + } + + @Override + public boolean hasPersonWithStudentId(StudentId studentId) { + throw new AssertionError("This method should not be called."); + } + @Override public TutorialClass findTutorialClassFromList(TutorialClass tutorialClass, ModuleCode moduleCode) { throw new AssertionError("This method should not be called."); @@ -155,11 +167,21 @@ public void addPersonToTutorialClass(Person person, ModuleCode moduleCode, Tutor throw new AssertionError("This method should not be called."); } + @Override + public void deletePersonFromTutorialClass(Person person, ModuleCode moduleCode, TutorialClass tutorialClass) { + throw new AssertionError("This method should not be called."); + } + @Override public void deletePerson(Person target) { throw new AssertionError("This method should not be called."); } + @Override + public void deleteModule(ModuleCode target) { + throw new AssertionError("This method should not be called."); + } + @Override public void addModule(ModuleCode module) { throw new AssertionError("This method should not be called."); diff --git a/src/test/java/seedu/address/logic/commands/AddTeamCommandIntegrationTest.java b/src/test/java/seedu/address/logic/commands/AddTeamCommandIntegrationTest.java index 8edf10cf5b0..85c67185479 100644 --- a/src/test/java/seedu/address/logic/commands/AddTeamCommandIntegrationTest.java +++ b/src/test/java/seedu/address/logic/commands/AddTeamCommandIntegrationTest.java @@ -67,19 +67,19 @@ public void execute_addTeamWithSize_success() { public void execute_addTeamToInvalidModule_throwsCommandException() { Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); - ModuleCode invalidModule = new ModuleCode(VALID_MODULE_BOB); - assertCommandFailure(new AddTeamCommand(invalidModule, testTutorial, VALID_TEAM_NAME_AMY), + ModuleCode wrongModule = new ModuleCode(VALID_MODULE_BOB); + assertCommandFailure(new AddTeamCommand(wrongModule, testTutorial, VALID_TEAM_NAME_AMY), expectedModel, - String.format(ModuleMessages.MESSAGE_MODULE_NOT_FOUND, invalidModule)); + String.format(ModuleMessages.MESSAGE_MODULE_NOT_FOUND, wrongModule)); } @Test public void execute_addTeamToInvalidTutorial_throwsCommandException() { Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); - TutorialClass invalidTutorial = new TutorialClass(VALID_TUTORIAL_BOB); - assertCommandFailure(new AddTeamCommand(testModule, invalidTutorial, VALID_TEAM_NAME_AMY), + TutorialClass wrongTutorial = new TutorialClass(VALID_TUTORIAL_BOB); + assertCommandFailure(new AddTeamCommand(testModule, wrongTutorial, VALID_TEAM_NAME_AMY), expectedModel, - String.format(ModuleMessages.MESSAGE_TUTORIAL_DOES_NOT_BELONG_TO_MODULE, invalidTutorial, testModule)); + String.format(ModuleMessages.MESSAGE_TUTORIAL_DOES_NOT_BELONG_TO_MODULE, wrongTutorial, testModule)); } } diff --git a/src/test/java/seedu/address/logic/commands/DeleteClassCommandTest.java b/src/test/java/seedu/address/logic/commands/DeleteClassCommandTest.java index 3d8140f9a53..f57e1c75048 100644 --- a/src/test/java/seedu/address/logic/commands/DeleteClassCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/DeleteClassCommandTest.java @@ -9,13 +9,12 @@ import static seedu.address.logic.commands.CommandTestUtil.VALID_TUTORIAL_BOB; import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure; import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; -import static seedu.address.logic.commands.DeleteClassCommand.MESSAGE_CLASS_NOT_FOUND; import static seedu.address.logic.commands.DeleteClassCommand.MESSAGE_DELETE_CLASS_SUCCESS; -import static seedu.address.logic.commands.DeleteClassCommand.MESSAGE_MODULE_NOT_FOUND; import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; import org.junit.jupiter.api.Test; +import seedu.address.logic.messages.ModuleMessages; import seedu.address.model.Model; import seedu.address.model.ModelManager; import seedu.address.model.UserPrefs; @@ -52,7 +51,7 @@ public void execute_moduleNotFound_fail() { assertCommandFailure(new DeleteClassCommand(new ModuleCode(VALID_MODULE_BOB), new TutorialClass(VALID_TUTORIAL_AMY)), model, - String.format(MESSAGE_MODULE_NOT_FOUND, VALID_MODULE_BOB)); + String.format(ModuleMessages.MESSAGE_MODULE_NOT_FOUND, VALID_MODULE_BOB)); } @Test @@ -60,7 +59,8 @@ public void execute_tutorialNotFound_fail() { ModuleCode module = new ModuleCode(VALID_MODULE_AMY, VALID_TUTORIAL_AMY); model.addModule(module); - String errorMessage = String.format(MESSAGE_CLASS_NOT_FOUND, VALID_MODULE_AMY, VALID_TUTORIAL_BOB); + String errorMessage = String.format(ModuleMessages.MESSAGE_TUTORIAL_DOES_NOT_BELONG_TO_MODULE, + VALID_TUTORIAL_BOB, VALID_MODULE_AMY); String listOfTutorials = module.listTutorialClasses(); String expectedMessage = errorMessage + "\n" + listOfTutorials; assertCommandFailure(new DeleteClassCommand(new ModuleCode(VALID_MODULE_AMY), diff --git a/src/test/java/seedu/address/logic/commands/DeleteModuleCommandTest.java b/src/test/java/seedu/address/logic/commands/DeleteModuleCommandTest.java new file mode 100644 index 00000000000..afb926634f2 --- /dev/null +++ b/src/test/java/seedu/address/logic/commands/DeleteModuleCommandTest.java @@ -0,0 +1,74 @@ +package seedu.address.logic.commands; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_BOB; +import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure; +import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; +import static seedu.address.logic.messages.ModuleMessages.MESSAGE_DELETE_MODULE_SUCCESS; +import static seedu.address.logic.messages.ModuleMessages.MESSAGE_MODULE_NOT_FOUND; +import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; + +import org.junit.jupiter.api.Test; + +import seedu.address.model.Model; +import seedu.address.model.ModelManager; +import seedu.address.model.UserPrefs; +import seedu.address.model.module.ModuleCode; + +/** + * Contains integration tests (interaction with the Model) for + * {@code DeleteModuleCommand}. + */ +public class DeleteModuleCommandTest { + private final Model model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); + + @Test + public void execute_success() { + Model actualModel = new ModelManager(); + Model expectedModel = new ModelManager(); + ModuleCode module = new ModuleCode(VALID_MODULE_AMY); + actualModel.addModule(module); + + assertCommandSuccess(new DeleteModuleCommand(new ModuleCode(VALID_MODULE_AMY)), actualModel, + String.format(MESSAGE_DELETE_MODULE_SUCCESS, VALID_MODULE_AMY), expectedModel); + + assertEquals(actualModel.getFilteredModuleList().size(), 0); + } + + @Test + public void execute_moduleNotFound_fail() { + ModuleCode module = new ModuleCode(VALID_MODULE_AMY); + model.addModule(module); + + assertCommandFailure(new DeleteModuleCommand(new ModuleCode(VALID_MODULE_BOB)), model, + String.format(MESSAGE_MODULE_NOT_FOUND, VALID_MODULE_BOB)); + } + + @Test + public void equals() { + final DeleteModuleCommand standardCommand = new DeleteModuleCommand(new ModuleCode(VALID_MODULE_AMY)); + + // same values -> returns true + DeleteModuleCommand commandWithSameValues = new DeleteModuleCommand(new ModuleCode(VALID_MODULE_AMY)); + assertTrue(standardCommand.equals(commandWithSameValues)); + + // same object -> returns true + assertTrue(standardCommand.equals(standardCommand)); + + // null -> returns false + assertFalse(standardCommand.equals(null)); + + // different types -> returns false + assertFalse(standardCommand.equals(new ClearCommand())); + + // different module code -> returns false + assertFalse(standardCommand.equals(new DeleteModuleCommand(new ModuleCode(VALID_MODULE_BOB)))); + + // different tutorial class -> returns true + assertTrue(standardCommand.equals(new DeleteModuleCommand(new ModuleCode(VALID_MODULE_AMY)))); + } +} + diff --git a/src/test/java/seedu/address/logic/commands/DeleteStudentCommandTest.java b/src/test/java/seedu/address/logic/commands/DeleteStudentCommandTest.java index 324685e4dc5..c6512c05a93 100644 --- a/src/test/java/seedu/address/logic/commands/DeleteStudentCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/DeleteStudentCommandTest.java @@ -31,7 +31,7 @@ /** * Contains integration tests (interaction with the Model) and unit tests for - * {@code DeleteCommand}. + * {@code DeleteStudentCommand}. */ public class DeleteStudentCommandTest { diff --git a/src/test/java/seedu/address/logic/commands/DeleteStudentFromClassCommandIntegrationTest.java b/src/test/java/seedu/address/logic/commands/DeleteStudentFromClassCommandIntegrationTest.java new file mode 100644 index 00000000000..f7f60ea2caf --- /dev/null +++ b/src/test/java/seedu/address/logic/commands/DeleteStudentFromClassCommandIntegrationTest.java @@ -0,0 +1,118 @@ +package seedu.address.logic.commands; + +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_BOB; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TUTORIAL_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TUTORIAL_BOB; +import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure; +import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; +import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import seedu.address.logic.Messages; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassByEmailCommand; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassByIdCommand; +import seedu.address.logic.messages.ModuleMessages; +import seedu.address.logic.messages.PersonMessages; +import seedu.address.model.Model; +import seedu.address.model.ModelManager; +import seedu.address.model.UserPrefs; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.person.Person; +import seedu.address.testutil.PersonBuilder; + +/** + * Contains integration tests (interaction with the Model) for + * {@code DeleteStudentFromClassCommand}. + */ +public class DeleteStudentFromClassCommandIntegrationTest { + + private Model model; + + @BeforeEach + public void setUp() { + model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); + ModuleCode newModule = new ModuleCode(VALID_MODULE_AMY); + model.addModule(newModule); + TutorialClass newTutorialClass = new TutorialClass(VALID_TUTORIAL_AMY); + newModule.addTutorialClass(newTutorialClass); + Person validPerson = new PersonBuilder().build(); + Person validPerson2 = new PersonBuilder().withName("otherName").withEmail("other@example.com") + .withStudentId("A0000000A").build(); + model.addPerson(validPerson); + newModule.getTutorialClasses().get(0).addStudent(validPerson); + newModule.getTutorialClasses().get(0).addStudent(validPerson2); + } + + @Test + public void execute_deleteStudentFromClassById_success() { + Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); + + ModuleCode newModule = new ModuleCode(VALID_MODULE_AMY); + expectedModel.addModule(newModule); + Person validPerson2 = new PersonBuilder().withName("otherName").withEmail("other@example.com") + .withStudentId("A0000000A").build(); + TutorialClass newTutorialClass = new TutorialClass(VALID_TUTORIAL_AMY); + newModule.addTutorialClass(newTutorialClass); + newModule.getTutorialClasses().get(0).addStudent(validPerson2); + Person validPerson = new PersonBuilder().build(); + + // Attempt to delete the student + assertCommandSuccess(new DeleteStudentFromClassByIdCommand(validPerson.getStudentId(), + newModule, newTutorialClass), + model, + String.format(PersonMessages.MESSAGE_DELETE_STUDENT_FROM_CLASS_SUCCESS, Messages.format(validPerson), + newModule, newTutorialClass), + expectedModel); + } + + @Test + public void execute_deleteStudentFromClassByEmail_success() { + Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); + + ModuleCode newModule = new ModuleCode(VALID_MODULE_AMY); + expectedModel.addModule(newModule); + Person validPerson2 = new PersonBuilder().withName("otherName").withEmail("other@example.com") + .withStudentId("A0000000A").build(); + TutorialClass newTutorialClass = new TutorialClass(VALID_TUTORIAL_AMY); + newModule.addTutorialClass(newTutorialClass); + newModule.getTutorialClasses().get(0).addStudent(validPerson2); + Person validPerson = new PersonBuilder().build(); + + // Attempt to delete the student + assertCommandSuccess(new DeleteStudentFromClassByEmailCommand(validPerson.getEmail(), + newModule, newTutorialClass), + model, + String.format(PersonMessages.MESSAGE_DELETE_STUDENT_FROM_CLASS_SUCCESS, Messages.format(validPerson), + newModule, newTutorialClass), expectedModel); + } + + @Test + public void execute_deleteStudentFromInvalidClass_throwsCommandException() { + Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); + + ModuleCode newModule = new ModuleCode(VALID_MODULE_BOB); + TutorialClass newTutorial = new TutorialClass(VALID_TUTORIAL_BOB); + Person validPerson = new PersonBuilder().build(); + + assertCommandFailure(new DeleteStudentFromClassByEmailCommand(validPerson.getEmail(), newModule, newTutorial), + expectedModel, String.format(ModuleMessages.MESSAGE_MODULE_NOT_FOUND, newModule)); + } + + @Test + public void execute_deleteStudentFromValidModuleButInvalidTutorial_throwsCommandException() { + Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); + + ModuleCode newModule = new ModuleCode(VALID_MODULE_AMY); + expectedModel.addModule(newModule); + TutorialClass newTutorial = new TutorialClass(VALID_TUTORIAL_BOB); + Person validPerson = new PersonBuilder().build(); + assertCommandFailure(new DeleteStudentFromClassByEmailCommand(validPerson.getEmail(), newModule, newTutorial), + expectedModel, + String.format(ModuleMessages.MESSAGE_TUTORIAL_DOES_NOT_BELONG_TO_MODULE, newTutorial, newModule)); + } + +} diff --git a/src/test/java/seedu/address/logic/commands/DeleteStudentFromClassCommandTest.java b/src/test/java/seedu/address/logic/commands/DeleteStudentFromClassCommandTest.java new file mode 100644 index 00000000000..4cc5887dbed --- /dev/null +++ b/src/test/java/seedu/address/logic/commands/DeleteStudentFromClassCommandTest.java @@ -0,0 +1,167 @@ +package seedu.address.logic.commands; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static seedu.address.logic.commands.CommandTestUtil.INVALID_PERSON_EMAIL; +import static seedu.address.logic.commands.CommandTestUtil.INVALID_PERSON_STUDENT_ID; +import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_BOB; +import static seedu.address.logic.commands.CommandTestUtil.VALID_STUDENT_ID_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_STUDENT_ID_BOB; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TUTORIAL_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TUTORIAL_BOB; +import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure; +import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; +import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON; +import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import seedu.address.commons.core.index.Index; +import seedu.address.logic.Messages; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassByEmailCommand; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassByIdCommand; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassByIndexCommand; +import seedu.address.logic.messages.PersonMessages; +import seedu.address.logic.messages.TutorialClassMessages; +import seedu.address.model.Model; +import seedu.address.model.ModelManager; +import seedu.address.model.UserPrefs; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.person.Email; +import seedu.address.model.person.Person; +import seedu.address.model.person.StudentId; +import seedu.address.testutil.PersonBuilder; + +/** + * Contains integration tests (interaction with the Model) and unit tests for + * {@code DeleteStudentFromClassCommand}. + */ +public class DeleteStudentFromClassCommandTest { + + private Model model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); + private TutorialClass tutorialClass; + + @BeforeEach + public void setUp() { + ModuleCode newModule = new ModuleCode(VALID_MODULE_AMY); + model.addModule(newModule); + TutorialClass newTutorialClass = new TutorialClass(VALID_TUTORIAL_AMY); + newModule.addTutorialClass(newTutorialClass); + tutorialClass = newTutorialClass; + } + + @Test + public void execute_invalidStudent_fail() { + DeleteStudentFromClassByEmailCommand deleteStudentFromClassByEmailCommand = + new DeleteStudentFromClassByEmailCommand(new Email(INVALID_PERSON_EMAIL), + new ModuleCode(VALID_MODULE_AMY), new TutorialClass(VALID_TUTORIAL_AMY)); + + DeleteStudentFromClassByIdCommand deleteStudentFromClassByIdCommand = + new DeleteStudentFromClassByIdCommand(new StudentId(INVALID_PERSON_STUDENT_ID), + new ModuleCode(VALID_MODULE_AMY), new TutorialClass(VALID_TUTORIAL_AMY)); + + DeleteStudentFromClassByIndexCommand deleteStudentFromClassByIndexCommand = + new DeleteStudentFromClassByIndexCommand(Index.fromOneBased(1000), + new ModuleCode(VALID_MODULE_AMY), new TutorialClass(VALID_TUTORIAL_AMY)); + + assertCommandFailure(deleteStudentFromClassByEmailCommand, model, + String.format(PersonMessages.MESSAGE_PERSON_EMAIL_NOT_FOUND, INVALID_PERSON_EMAIL)); + + assertCommandFailure(deleteStudentFromClassByIdCommand, model, + String.format(PersonMessages.MESSAGE_PERSON_STUDENT_ID_NOT_FOUND, INVALID_PERSON_STUDENT_ID)); + + assertCommandFailure(deleteStudentFromClassByIndexCommand, model, + String.format(PersonMessages.MESSAGE_PERSON_INDEX_NOT_FOUND, 1000)); + } + + @Test + public void execute_studentDoesNotExist_fail() { + Person person = new PersonBuilder().build(); + Person otherPerson = new PersonBuilder().withName("otherPerson").build(); + model.addPerson(person); + tutorialClass.addStudent(otherPerson); + + DeleteStudentFromClassByEmailCommand addStudentToClassByEmailCommand = + new DeleteStudentFromClassByEmailCommand(person.getEmail(), + new ModuleCode(VALID_MODULE_AMY), new TutorialClass(VALID_TUTORIAL_AMY)); + + DeleteStudentFromClassByIdCommand addStudentToClassByIdCommand = + new DeleteStudentFromClassByIdCommand(person.getStudentId(), + new ModuleCode(VALID_MODULE_AMY), new TutorialClass(VALID_TUTORIAL_AMY)); + + assertCommandFailure(addStudentToClassByIdCommand, model, + String.format(TutorialClassMessages.MESSAGE_STUDENT_NOT_FOUND_IN_CLASS, Messages.format(person), + tutorialClass)); + + assertCommandFailure(addStudentToClassByEmailCommand, model, + String.format(TutorialClassMessages.MESSAGE_STUDENT_NOT_FOUND_IN_CLASS, Messages.format(person), + tutorialClass)); + } + + @Test + public void equals() { + + // Test index based delete command + DeleteStudentFromClassByIndexCommand deleteStudentFromClassByIndexFirstCommand = + new DeleteStudentFromClassByIndexCommand(INDEX_FIRST_PERSON, + new ModuleCode(VALID_MODULE_AMY), new TutorialClass(VALID_TUTORIAL_AMY)); + + DeleteStudentFromClassByIndexCommand deleteStudentFromClassByIndexSecondCommand = + new DeleteStudentFromClassByIndexCommand(INDEX_SECOND_PERSON, + new ModuleCode(VALID_MODULE_BOB), new TutorialClass(VALID_TUTORIAL_BOB)); + + // same object -> returns true + assertTrue(deleteStudentFromClassByIndexFirstCommand.equals(deleteStudentFromClassByIndexFirstCommand)); + // different types -> returns false + assertFalse(deleteStudentFromClassByIndexFirstCommand.equals(1)); + + // null -> returns false + assertFalse(deleteStudentFromClassByIndexFirstCommand.equals(null)); + + // different person -> returns false + assertFalse(deleteStudentFromClassByIndexFirstCommand.equals(deleteStudentFromClassByIndexSecondCommand)); + + // Test email based delete command + DeleteStudentFromClassByEmailCommand deleteStudentFromClassByEmailFirstCommand = + new DeleteStudentFromClassByEmailCommand(new Email(VALID_EMAIL_AMY), + new ModuleCode(VALID_MODULE_AMY), new TutorialClass(VALID_TUTORIAL_AMY)); + + DeleteStudentFromClassByEmailCommand deleteStudentFromClassByEmailSecondCommand = + new DeleteStudentFromClassByEmailCommand(new Email(VALID_EMAIL_BOB), + new ModuleCode(VALID_MODULE_BOB), new TutorialClass(VALID_TUTORIAL_BOB)); + + // same object -> returns true + assertTrue(deleteStudentFromClassByEmailFirstCommand.equals(deleteStudentFromClassByEmailFirstCommand)); + // different types -> returns false + assertFalse(deleteStudentFromClassByEmailFirstCommand.equals(1)); + + // null -> returns false + assertFalse(deleteStudentFromClassByEmailFirstCommand.equals(null)); + + // different person -> returns false + assertFalse(deleteStudentFromClassByEmailFirstCommand.equals(deleteStudentFromClassByEmailSecondCommand)); + + // Test student id based delete command + DeleteStudentFromClassByIdCommand deleteStudentFromClassByIdFirstCommand = + new DeleteStudentFromClassByIdCommand(new StudentId(VALID_STUDENT_ID_AMY), + new ModuleCode(VALID_MODULE_AMY), new TutorialClass(VALID_TUTORIAL_AMY)); + + DeleteStudentFromClassByIdCommand deleteStudentFromClassByIdSecondCommand = + new DeleteStudentFromClassByIdCommand(new StudentId(VALID_STUDENT_ID_BOB), + new ModuleCode(VALID_MODULE_BOB), new TutorialClass(VALID_TUTORIAL_BOB)); + + // same object -> returns true + assertTrue(deleteStudentFromClassByIdFirstCommand.equals(deleteStudentFromClassByIdFirstCommand)); + // different types -> returns false + assertFalse(deleteStudentFromClassByIdFirstCommand.equals(1)); + // null -> returns false + assertFalse(deleteStudentFromClassByIdFirstCommand.equals(null)); + // different person -> returns false + assertFalse(deleteStudentFromClassByIdFirstCommand.equals(deleteStudentFromClassByIdSecondCommand)); + } +} diff --git a/src/test/java/seedu/address/logic/commands/DeleteTeamCommandIntegrationTest.java b/src/test/java/seedu/address/logic/commands/DeleteTeamCommandIntegrationTest.java new file mode 100644 index 00000000000..85e6e8f37f0 --- /dev/null +++ b/src/test/java/seedu/address/logic/commands/DeleteTeamCommandIntegrationTest.java @@ -0,0 +1,76 @@ +package seedu.address.logic.commands; + +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_BOB; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TEAM_NAME_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TUTORIAL_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TUTORIAL_BOB; +import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure; +import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; +import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import seedu.address.logic.messages.ModuleMessages; +import seedu.address.model.Model; +import seedu.address.model.ModelManager; +import seedu.address.model.UserPrefs; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; + +/** + * Contains integration tests (interaction with the Model) for + * {@code DeleteTeamCommand}. + */ +public class DeleteTeamCommandIntegrationTest { + + private Model model; + private ModuleCode testModule; + private TutorialClass testTutorial; + + @BeforeEach + public void setUp() { + model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); + ModuleCode newModule = new ModuleCode(VALID_MODULE_AMY); + model.addModule(newModule); + this.testModule = newModule; + TutorialClass newTutorialClass = new TutorialClass(VALID_TUTORIAL_AMY); + newModule.addTutorialClass(newTutorialClass); + TutorialTeam newTeam = new TutorialTeam(VALID_TEAM_NAME_AMY); + newTutorialClass.addTeam(newTeam); + this.testTutorial = newTutorialClass; + } + + @Test + public void execute_deleteTeam_success() { + Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); + + assertCommandSuccess(new DeleteTeamCommand(testModule, testTutorial, VALID_TEAM_NAME_AMY), + model, + String.format(DeleteTeamCommand.MESSAGE_DELETE_TEAM_SUCCESS, VALID_TEAM_NAME_AMY, + testModule, testTutorial), + expectedModel); + } + + @Test + public void execute_deleteTeamWithInvalidModule_throwsCommandException() { + Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); + + ModuleCode wrongModule = new ModuleCode(VALID_MODULE_BOB); + assertCommandFailure(new DeleteTeamCommand(wrongModule, testTutorial, VALID_TEAM_NAME_AMY), + expectedModel, + String.format(ModuleMessages.MESSAGE_MODULE_NOT_FOUND, wrongModule)); + } + + @Test + public void execute_deleteTeamWithInvalidTutorial_throwsCommandException() { + Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); + + TutorialClass wrongTutorial = new TutorialClass(VALID_TUTORIAL_BOB); + assertCommandFailure(new DeleteTeamCommand(testModule, wrongTutorial, VALID_TEAM_NAME_AMY), + expectedModel, + String.format(ModuleMessages.MESSAGE_TUTORIAL_DOES_NOT_BELONG_TO_MODULE, wrongTutorial, testModule)); + } +} diff --git a/src/test/java/seedu/address/logic/commands/DeleteTeamCommandTest.java b/src/test/java/seedu/address/logic/commands/DeleteTeamCommandTest.java new file mode 100644 index 00000000000..9680d4dfff4 --- /dev/null +++ b/src/test/java/seedu/address/logic/commands/DeleteTeamCommandTest.java @@ -0,0 +1,52 @@ +package seedu.address.logic.commands; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TEAM_NAME_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TEAM_NAME_BOB; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TUTORIAL_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TUTORIAL_BOB; +import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; + +import org.junit.jupiter.api.Test; + +import seedu.address.model.Model; +import seedu.address.model.ModelManager; +import seedu.address.model.UserPrefs; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; + +/** + * Contains integration tests (interaction with the Model) and unit tests for + * {@code DeleteTeamCommand}. + */ +public class DeleteTeamCommandTest { + + private Model model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); + + @Test + public void equals() { + ModuleCode moduleCodeAmy = new ModuleCode(VALID_MODULE_AMY); + TutorialClass tutorialClassAmy = new TutorialClass(VALID_TUTORIAL_AMY); + ModuleCode moduleCodeBob = new ModuleCode(VALID_MODULE_AMY); + TutorialClass tutorialClassBob = new TutorialClass(VALID_TUTORIAL_BOB); + + DeleteTeamCommand deleteTeamFirstCommand = new DeleteTeamCommand(moduleCodeAmy, tutorialClassAmy, + VALID_TEAM_NAME_AMY); + + DeleteTeamCommand deleteTeamSecondCommand = new DeleteTeamCommand(moduleCodeBob, tutorialClassBob, + VALID_TEAM_NAME_BOB); + + // same object -> returns true + assertTrue(deleteTeamFirstCommand.equals(deleteTeamFirstCommand)); + // different types -> returns false + assertFalse(deleteTeamFirstCommand.equals(1)); + + // null -> returns false + assertFalse(deleteTeamFirstCommand.equals(null)); + + // different team -> returns false + assertFalse(deleteTeamFirstCommand.equals(deleteTeamSecondCommand)); + } +} diff --git a/src/test/java/seedu/address/logic/commands/EditCommandTest.java b/src/test/java/seedu/address/logic/commands/EditCommandTest.java index 32d9c395483..1b097e7c692 100644 --- a/src/test/java/seedu/address/logic/commands/EditCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/EditCommandTest.java @@ -23,7 +23,9 @@ import seedu.address.model.Model; import seedu.address.model.ModelManager; import seedu.address.model.UserPrefs; +import seedu.address.model.person.Email; import seedu.address.model.person.Person; +import seedu.address.model.person.StudentId; import seedu.address.testutil.EditPersonDescriptorBuilder; import seedu.address.testutil.PersonBuilder; @@ -104,6 +106,20 @@ public void execute_duplicatePersonUnfilteredList_failure() { EditCommand editCommand = new EditCommand(INDEX_SECOND_PERSON, descriptor); assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON); + + // duplicate email + descriptor = new EditPersonDescriptorBuilder().withName("Test").withEmail(firstPerson.getEmail().toString()) + .withStudentId("A1111111A").build(); + editCommand = new EditCommand(INDEX_SECOND_PERSON, descriptor); + + assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON); + + // duplicate student id + descriptor = new EditPersonDescriptorBuilder().withName("Test").withEmail("test@example.com") + .withStudentId(firstPerson.getStudentId().toString()).build(); + editCommand = new EditCommand(INDEX_SECOND_PERSON, descriptor); + + assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON); } @Test @@ -116,6 +132,20 @@ public void execute_duplicatePersonFilteredList_failure() { new EditPersonDescriptorBuilder(personInList).build()); assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON); + + // edit person with only duplicate email + EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withName("Test") + .withEmail(personInList.getEmail().toString()).withStudentId("A1111111A").build(); + editCommand = new EditCommand(INDEX_FIRST_PERSON, descriptor); + + assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON); + + // edit person with only duplicate id + descriptor = new EditPersonDescriptorBuilder().withName("Test").withEmail("test@example.com") + .withStudentId(personInList.getStudentId().toString()).build(); + editCommand = new EditCommand(INDEX_FIRST_PERSON, descriptor); + + assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON); } @Test @@ -127,6 +157,70 @@ public void execute_invalidPersonIndexUnfilteredList_failure() { assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); } + @Test + public void execute_duplicateEmailUnfilteredList_failure() { + // edit with duplicate email + Email secondPersonEmail = model.getFilteredPersonList().get(INDEX_SECOND_PERSON.getZeroBased()).getEmail(); + + EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder() + .withEmail(secondPersonEmail.toString()).build(); + EditCommand editCommand = new EditCommand(INDEX_FIRST_PERSON, descriptor); + + assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_EMAIL); + + // edit with own email + Email firstPersonEmail = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()).getEmail(); + descriptor = new EditPersonDescriptorBuilder().withEmail(firstPersonEmail.toString()).build(); + editCommand = new EditCommand(INDEX_FIRST_PERSON, descriptor); + + assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_EMAIL); + } + + @Test + public void execute_duplicateEmailFilteredList_failure() { + showPersonAtIndex(model, INDEX_FIRST_PERSON); + + Person personInList = model.getAddressBook().getPersonList().get(INDEX_SECOND_PERSON.getZeroBased()); + EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder() + .withEmail(personInList.getEmail().toString()).build(); + EditCommand editCommand = new EditCommand(INDEX_FIRST_PERSON, descriptor); + + assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_EMAIL); + } + + @Test + public void execute_duplicateStudentIdUnfilteredList_failure() { + // edit with duplicate student id + StudentId secondPersonStudentId = model.getFilteredPersonList() + .get(INDEX_SECOND_PERSON.getZeroBased()).getStudentId(); + + EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder() + .withStudentId(secondPersonStudentId.toString()).build(); + EditCommand editCommand = new EditCommand(INDEX_FIRST_PERSON, descriptor); + + assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_STUDENTID); + + // edit with own student id + StudentId firstPersonStudentId = model.getFilteredPersonList() + .get(INDEX_FIRST_PERSON.getZeroBased()).getStudentId(); + descriptor = new EditPersonDescriptorBuilder().withStudentId(firstPersonStudentId.toString()).build(); + editCommand = new EditCommand(INDEX_FIRST_PERSON, descriptor); + + assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_STUDENTID); + } + + @Test + public void execute_duplicateStudentIdFilteredList_failure() { + showPersonAtIndex(model, INDEX_FIRST_PERSON); + + Person personInList = model.getAddressBook().getPersonList().get(INDEX_SECOND_PERSON.getZeroBased()); + EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder() + .withStudentId(personInList.getStudentId().toString()).build(); + EditCommand editCommand = new EditCommand(INDEX_FIRST_PERSON, descriptor); + + assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_STUDENTID); + } + /** * Edit filtered list where index is larger than size of filtered list, * but smaller than size of address book diff --git a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java index 53cea1c0c0b..3bd95ef0342 100644 --- a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java @@ -4,6 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND; +import static seedu.address.logic.commands.CommandTestUtil.INDEX_ONE; import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY; import static seedu.address.logic.commands.CommandTestUtil.VALID_STUDENT_ID_AMY; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; @@ -24,6 +25,7 @@ import seedu.address.logic.commands.ClearCommand; import seedu.address.logic.commands.DeleteClassCommand; import seedu.address.logic.commands.DeleteCommand; +import seedu.address.logic.commands.DeleteModuleCommand; import seedu.address.logic.commands.EditCommand; import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; import seedu.address.logic.commands.ExitCommand; @@ -34,6 +36,9 @@ import seedu.address.logic.commands.addstudenttoclasscommands.AddStudentToClassByEmailCommand; import seedu.address.logic.commands.addstudenttoclasscommands.AddStudentToClassByIdCommand; import seedu.address.logic.commands.addstudenttoclasscommands.AddStudentToClassCommand; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassByEmailCommand; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassByIdCommand; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassCommand; import seedu.address.logic.parser.exceptions.ParseException; import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; @@ -77,7 +82,7 @@ public void parseCommand_edit() throws Exception { Person person = new PersonBuilder().build(); EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(person).build(); EditCommand command = (EditCommand) parser.parseCommand(EditCommand.COMMAND_WORD + " " - + INDEX_FIRST_PERSON.getOneBased() + " " + PersonUtil.getEditPersonDescriptorDetails(descriptor)); + + INDEX_ONE + " " + PersonUtil.getEditPersonDescriptorDetails(descriptor)); assertEquals(new EditCommand(INDEX_FIRST_PERSON, descriptor), command); } @@ -128,6 +133,16 @@ public void parseCommand_deleteClass() throws Exception { new TutorialClass(tutorialClass)), command); } + @Test + public void parseCommand_deleteModule() throws Exception { + final String moduleCode = "CS2103T"; + DeleteModuleCommand command = (DeleteModuleCommand) parser.parseCommand(DeleteModuleCommand.COMMAND_WORD + " " + + PREFIX_MODULECODE + moduleCode); + assertEquals(new DeleteModuleCommand(new ModuleCode(moduleCode)), command); + } + + + @Test public void parseCommand_listClasses() throws Exception { assertTrue(parser.parseCommand(ListClassesCommand.COMMAND_WORD) instanceof ListClassesCommand); @@ -156,6 +171,29 @@ public void parseCommand_addStudentToClass() throws Exception { } + @Test + public void parseCommand_deleteStudentFromClass() throws Exception { + final String moduleCode = "CS2103T"; + final String tutorialClass = "T09"; + final String email = VALID_EMAIL_AMY; + final String id = VALID_STUDENT_ID_AMY; + final Index index = INDEX_FIRST_PERSON; + DeleteStudentFromClassCommand deleteByEmailCommand = (DeleteStudentFromClassCommand) parser.parseCommand( + DeleteStudentFromClassCommand.COMMAND_WORD + " " + + PREFIX_EMAIL + email + " " + PREFIX_MODULECODE + + moduleCode + " " + PREFIX_TUTORIALCLASS + tutorialClass); + + DeleteStudentFromClassCommand deleteByIdCommand = (DeleteStudentFromClassCommand) parser.parseCommand( + DeleteStudentFromClassCommand.COMMAND_WORD + " " + + PREFIX_STUDENTID + id + " " + PREFIX_MODULECODE + + moduleCode + " " + PREFIX_TUTORIALCLASS + tutorialClass); + + assertEquals(new DeleteStudentFromClassByEmailCommand(new Email(VALID_EMAIL_AMY), + new ModuleCode(moduleCode), new TutorialClass(tutorialClass)), deleteByEmailCommand); + + assertEquals(new DeleteStudentFromClassByIdCommand(new StudentId(VALID_STUDENT_ID_AMY), + new ModuleCode(moduleCode), new TutorialClass(tutorialClass)), deleteByIdCommand); + } @Test public void parseCommand_unrecognisedInput_throwsParseException() { assertThrows(ParseException.class, diff --git a/src/test/java/seedu/address/logic/parser/DeleteModuleCommandParserTest.java b/src/test/java/seedu/address/logic/parser/DeleteModuleCommandParserTest.java new file mode 100644 index 00000000000..331c5d3ff83 --- /dev/null +++ b/src/test/java/seedu/address/logic/parser/DeleteModuleCommandParserTest.java @@ -0,0 +1,46 @@ +package seedu.address.logic.parser; + +import static seedu.address.logic.commands.CommandTestUtil.MODULE_DESC_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_AMY; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; +import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; +import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; + +import org.junit.jupiter.api.Test; + +import seedu.address.logic.Messages; +import seedu.address.logic.commands.DeleteModuleCommand; +import seedu.address.model.module.ModuleCode; + +/** + * As we are only doing white-box testing, our test cases do not cover path variations + * outside of the DeleteModuleCommand code. For example, inputs "1" and "1 abc" take the + * same path through the DeleteModuleCommand, and therefore we test only one of them. + * The path variation for those two cases occur inside the ParserUtil, and + * therefore should be covered by the ParserUtilTest. + */ +public class DeleteModuleCommandParserTest { + private final DeleteModuleCommandParser parser = new DeleteModuleCommandParser(); + + + @Test + public void parse_validModule_success() { + String userInput = MODULE_DESC_AMY; + DeleteModuleCommand expectedCommand = new DeleteModuleCommand(new ModuleCode(VALID_MODULE_AMY)); + assertParseSuccess(parser, userInput, expectedCommand); + } + + @Test + public void parse_missingCompulsoryField_failure() { + String expectedMessage1 = String.format(Messages.MESSAGE_INVALID_COMMAND_FORMAT, + DeleteModuleCommand.MESSAGE_USAGE); + String expectedMessage2 = ModuleCode.MESSAGE_CONSTRAINTS; + + // no parameters + assertParseFailure(parser, " ", expectedMessage1); + + // invalid module stated + assertParseFailure(parser, " " + PREFIX_MODULECODE + "INVALID", expectedMessage2); + } +} + diff --git a/src/test/java/seedu/address/logic/parser/DeleteStudentFromClassCommandParserTest.java b/src/test/java/seedu/address/logic/parser/DeleteStudentFromClassCommandParserTest.java new file mode 100644 index 00000000000..06258ac9c19 --- /dev/null +++ b/src/test/java/seedu/address/logic/parser/DeleteStudentFromClassCommandParserTest.java @@ -0,0 +1,50 @@ +package seedu.address.logic.parser; + +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_BOB; +import static seedu.address.logic.commands.CommandTestUtil.MODULE_DESC_AMY; +import static seedu.address.logic.commands.CommandTestUtil.STUDENT_ID_DESC_BOB; +import static seedu.address.logic.commands.CommandTestUtil.TUTORIAL_DESC_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TUTORIAL_AMY; +import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; +import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; +import static seedu.address.testutil.TypicalPersons.BOB; + +import org.junit.jupiter.api.Test; + +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassByEmailCommand; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassByIdCommand; +import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassCommand; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; + +public class DeleteStudentFromClassCommandParserTest { + + private DeleteStudentFromClassCommandParser parser = new DeleteStudentFromClassCommandParser(); + @Test + public void parse_validArgs_returnsDeleteStudentFromClassCommand() { + + String commandSuffix = MODULE_DESC_AMY + TUTORIAL_DESC_AMY; + + // Delete by email + DeleteStudentFromClassByEmailCommand expectedDeleteByEmailCommand = + new DeleteStudentFromClassByEmailCommand(BOB.getEmail(), + new ModuleCode(VALID_MODULE_AMY), new TutorialClass(VALID_TUTORIAL_AMY)); + assertParseSuccess(parser, EMAIL_DESC_BOB + commandSuffix, expectedDeleteByEmailCommand); + + // Delete by student Id + DeleteStudentFromClassByIdCommand expectedDeleteByIdCommand = + new DeleteStudentFromClassByIdCommand(BOB.getStudentId(), + new ModuleCode(VALID_MODULE_AMY), new TutorialClass(VALID_TUTORIAL_AMY)); + assertParseSuccess(parser, STUDENT_ID_DESC_BOB + commandSuffix, expectedDeleteByIdCommand); + + } + + @Test + public void parse_invalidArgs_throwsParseException() { + String expectedMessage = String.format(MESSAGE_INVALID_COMMAND_FORMAT, + DeleteStudentFromClassCommand.MESSAGE_USAGE); + assertParseFailure(parser, "a", expectedMessage); + } +} diff --git a/src/test/java/seedu/address/logic/parser/DeleteTeamCommandParserTest.java b/src/test/java/seedu/address/logic/parser/DeleteTeamCommandParserTest.java new file mode 100644 index 00000000000..edb3a383487 --- /dev/null +++ b/src/test/java/seedu/address/logic/parser/DeleteTeamCommandParserTest.java @@ -0,0 +1,54 @@ +package seedu.address.logic.parser; + +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.commands.CommandTestUtil.MODULE_DESC_AMY; +import static seedu.address.logic.commands.CommandTestUtil.TEAM_NAME_DESC_AMY; +import static seedu.address.logic.commands.CommandTestUtil.TUTORIAL_DESC_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TEAM_NAME_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TUTORIAL_AMY; +import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; +import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; + +import org.junit.jupiter.api.Test; + +import seedu.address.logic.commands.DeleteTeamCommand; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; + +/** + * Contains unit tests for AddTeamCommandParser. + */ +public class DeleteTeamCommandParserTest { + private final DeleteTeamCommandParser parser = new DeleteTeamCommandParser(); + + @Test + public void parse_deleteTeam_success() { + String userInput = MODULE_DESC_AMY + TUTORIAL_DESC_AMY + TEAM_NAME_DESC_AMY; + DeleteTeamCommand expectedCommand = new DeleteTeamCommand(new ModuleCode(VALID_MODULE_AMY), + new TutorialClass(VALID_TUTORIAL_AMY), VALID_TEAM_NAME_AMY); + assertParseSuccess(parser, userInput, expectedCommand); + } + + @Test + public void parse_deleteTeamWithNoName_failure() { + String expectedMessage = String.format(MESSAGE_INVALID_COMMAND_FORMAT, DeleteTeamCommand.MESSAGE_USAGE); + String userInput = MODULE_DESC_AMY + TUTORIAL_DESC_AMY; + assertParseFailure(parser, userInput, expectedMessage); + } + + @Test + public void parse_deleteTeamWithNoModule_failure() { + String expectedMessage = String.format(MESSAGE_INVALID_COMMAND_FORMAT, DeleteTeamCommand.MESSAGE_USAGE); + String userInput = TUTORIAL_DESC_AMY + TEAM_NAME_DESC_AMY; + assertParseFailure(parser, userInput, expectedMessage); + } + + @Test + public void parse_deleteTeamWithNoTutorial_failure() { + String expectedMessage = String.format(MESSAGE_INVALID_COMMAND_FORMAT, DeleteTeamCommand.MESSAGE_USAGE); + String userInput = MODULE_DESC_AMY + TEAM_NAME_DESC_AMY; + assertParseFailure(parser, userInput, expectedMessage); + } + +} diff --git a/src/test/java/seedu/address/logic/parser/EditCommandParserTest.java b/src/test/java/seedu/address/logic/parser/EditCommandParserTest.java index b047913bd69..6cc3f60984f 100644 --- a/src/test/java/seedu/address/logic/parser/EditCommandParserTest.java +++ b/src/test/java/seedu/address/logic/parser/EditCommandParserTest.java @@ -3,6 +3,8 @@ import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY; import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_BOB; +import static seedu.address.logic.commands.CommandTestUtil.INDEX_ONE; +import static seedu.address.logic.commands.CommandTestUtil.INDEX_TWO; import static seedu.address.logic.commands.CommandTestUtil.INVALID_EMAIL_DESC; import static seedu.address.logic.commands.CommandTestUtil.INVALID_NAME_DESC; import static seedu.address.logic.commands.CommandTestUtil.INVALID_STUDENT_ID_DESC; @@ -19,13 +21,13 @@ import static seedu.address.logic.commands.CommandTestUtil.VALID_STUDENT_ID_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; +import static seedu.address.logic.parser.CliSyntax.PREFIX_INDEX; import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON; -import static seedu.address.testutil.TypicalIndexes.INDEX_THIRD_PERSON; import org.junit.jupiter.api.Test; @@ -54,10 +56,10 @@ public class EditCommandParserTest { @Test public void parse_missingParts_failure() { // no index specified - assertParseFailure(parser, VALID_NAME_AMY, MESSAGE_INVALID_FORMAT); + assertParseFailure(parser, NAME_DESC_AMY, MESSAGE_INVALID_FORMAT); // no field specified - assertParseFailure(parser, "1", EditCommand.MESSAGE_NOT_EDITED); + assertParseFailure(parser, INDEX_TWO, EditCommand.MESSAGE_NOT_EDITED); // no index and no field specified assertParseFailure(parser, "", MESSAGE_INVALID_FORMAT); @@ -66,60 +68,58 @@ public void parse_missingParts_failure() { @Test public void parse_invalidPreamble_failure() { // negative index - assertParseFailure(parser, "-5" + NAME_DESC_AMY, MESSAGE_INVALID_FORMAT); + assertParseFailure(parser, " " + PREFIX_INDEX + "-5" + NAME_DESC_AMY, MESSAGE_INVALID_FORMAT); // zero index - assertParseFailure(parser, "0" + NAME_DESC_AMY, MESSAGE_INVALID_FORMAT); + assertParseFailure(parser, " " + PREFIX_INDEX + "0" + NAME_DESC_AMY, MESSAGE_INVALID_FORMAT); // invalid arguments being parsed as preamble - assertParseFailure(parser, "1 some random string", MESSAGE_INVALID_FORMAT); + assertParseFailure(parser, " " + PREFIX_INDEX + "1 some random string", MESSAGE_INVALID_FORMAT); // invalid prefix being parsed as preamble - assertParseFailure(parser, "1 i/ string", MESSAGE_INVALID_FORMAT); + assertParseFailure(parser, " " + PREFIX_INDEX + "1 i/ string", MESSAGE_INVALID_FORMAT); } @Test public void parse_invalidValue_failure() { - assertParseFailure(parser, "1" + INVALID_NAME_DESC, Name.MESSAGE_CONSTRAINTS); // invalid name - assertParseFailure(parser, "1" + INVALID_STUDENT_ID_DESC, StudentId.MESSAGE_CONSTRAINTS); // invalid studentid - assertParseFailure(parser, "1" + INVALID_EMAIL_DESC, Email.MESSAGE_CONSTRAINTS); // invalid email - assertParseFailure(parser, "1" + INVALID_TAG_DESC, Tag.MESSAGE_CONSTRAINTS); // invalid tag + assertParseFailure(parser, INDEX_ONE + INVALID_NAME_DESC, Name.MESSAGE_CONSTRAINTS); // invalid name + assertParseFailure(parser, INDEX_ONE + INVALID_STUDENT_ID_DESC, StudentId.MESSAGE_CONSTRAINTS); // invalid id + assertParseFailure(parser, INDEX_ONE + INVALID_EMAIL_DESC, Email.MESSAGE_CONSTRAINTS); // invalid email + assertParseFailure(parser, INDEX_ONE + INVALID_TAG_DESC, Tag.MESSAGE_CONSTRAINTS); // invalid tag // invalid student id followed by valid email - assertParseFailure(parser, "1" + INVALID_STUDENT_ID_DESC + EMAIL_DESC_AMY, StudentId.MESSAGE_CONSTRAINTS); + assertParseFailure(parser, INDEX_ONE + INVALID_STUDENT_ID_DESC + EMAIL_DESC_AMY, StudentId.MESSAGE_CONSTRAINTS); // while parsing {@code PREFIX_TAG} alone will reset the tags of the {@code Person} being edited, // parsing it together with a valid tag results in error - assertParseFailure(parser, "1" + TAG_DESC_FRIEND + TAG_DESC_HUSBAND + TAG_EMPTY, Tag.MESSAGE_CONSTRAINTS); - assertParseFailure(parser, "1" + TAG_DESC_FRIEND + TAG_EMPTY + TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS); - assertParseFailure(parser, "1" + TAG_EMPTY + TAG_DESC_FRIEND + TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS); + assertParseFailure(parser, INDEX_ONE + TAG_DESC_FRIEND + TAG_DESC_HUSBAND + TAG_EMPTY, Tag.MESSAGE_CONSTRAINTS); + assertParseFailure(parser, INDEX_ONE + TAG_DESC_FRIEND + TAG_EMPTY + TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS); + assertParseFailure(parser, INDEX_ONE + TAG_EMPTY + TAG_DESC_FRIEND + TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS); // multiple invalid values, but only the first invalid value is captured - assertParseFailure(parser, "1" + INVALID_NAME_DESC + INVALID_EMAIL_DESC + assertParseFailure(parser, INDEX_ONE + INVALID_NAME_DESC + INVALID_EMAIL_DESC + VALID_MODULE_AMY + VALID_STUDENT_ID_AMY, Name.MESSAGE_CONSTRAINTS); } @Test public void parse_allFieldsSpecified_success() { - Index targetIndex = INDEX_SECOND_PERSON; - String userInput = targetIndex.getOneBased() + NAME_DESC_AMY + EMAIL_DESC_AMY + String userInput = INDEX_TWO + NAME_DESC_AMY + EMAIL_DESC_AMY + STUDENT_ID_DESC_AMY + TAG_DESC_FRIEND; EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY) .withEmail(VALID_EMAIL_AMY).withStudentId(VALID_STUDENT_ID_AMY).withTags(VALID_TAG_FRIEND).build(); - EditCommand expectedCommand = new EditCommand(targetIndex, descriptor); + EditCommand expectedCommand = new EditCommand(INDEX_SECOND_PERSON, descriptor); assertParseSuccess(parser, userInput, expectedCommand); } @Test public void parse_someFieldsSpecified_success() { - Index targetIndex = INDEX_FIRST_PERSON; - String userInput = targetIndex.getOneBased() + STUDENT_ID_DESC_BOB + EMAIL_DESC_AMY; + String userInput = INDEX_ONE + STUDENT_ID_DESC_BOB + EMAIL_DESC_AMY; EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withStudentId(VALID_STUDENT_ID_BOB) .withEmail(VALID_EMAIL_AMY).build(); - EditCommand expectedCommand = new EditCommand(targetIndex, descriptor); + EditCommand expectedCommand = new EditCommand(INDEX_FIRST_PERSON, descriptor); assertParseSuccess(parser, userInput, expectedCommand); } @@ -127,26 +127,26 @@ public void parse_someFieldsSpecified_success() { @Test public void parse_oneFieldSpecified_success() { // name - Index targetIndex = INDEX_THIRD_PERSON; - String userInput = targetIndex.getOneBased() + NAME_DESC_AMY; + Index targetIndex = INDEX_SECOND_PERSON; + String userInput = INDEX_TWO + NAME_DESC_AMY; EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY).build(); EditCommand expectedCommand = new EditCommand(targetIndex, descriptor); assertParseSuccess(parser, userInput, expectedCommand); // student id - userInput = targetIndex.getOneBased() + STUDENT_ID_DESC_AMY; + userInput = INDEX_TWO + STUDENT_ID_DESC_AMY; descriptor = new EditPersonDescriptorBuilder().withStudentId(VALID_STUDENT_ID_AMY).build(); expectedCommand = new EditCommand(targetIndex, descriptor); assertParseSuccess(parser, userInput, expectedCommand); // email - userInput = targetIndex.getOneBased() + EMAIL_DESC_AMY; + userInput = INDEX_TWO + EMAIL_DESC_AMY; descriptor = new EditPersonDescriptorBuilder().withEmail(VALID_EMAIL_AMY).build(); expectedCommand = new EditCommand(targetIndex, descriptor); assertParseSuccess(parser, userInput, expectedCommand); // tags - userInput = targetIndex.getOneBased() + TAG_DESC_FRIEND; + userInput = INDEX_TWO + TAG_DESC_FRIEND; descriptor = new EditPersonDescriptorBuilder().withTags(VALID_TAG_FRIEND).build(); expectedCommand = new EditCommand(targetIndex, descriptor); assertParseSuccess(parser, userInput, expectedCommand); @@ -159,17 +159,17 @@ public void parse_multipleRepeatedFields_failure() { // valid followed by invalid Index targetIndex = INDEX_FIRST_PERSON; - String userInput = targetIndex.getOneBased() + INVALID_STUDENT_ID_DESC + STUDENT_ID_DESC_BOB; + String userInput = INDEX_ONE + INVALID_STUDENT_ID_DESC + STUDENT_ID_DESC_BOB; assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_STUDENTID)); // invalid followed by valid - userInput = targetIndex.getOneBased() + STUDENT_ID_DESC_BOB + INVALID_STUDENT_ID_DESC; + userInput = INDEX_ONE + STUDENT_ID_DESC_BOB + INVALID_STUDENT_ID_DESC; assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_STUDENTID)); // mulltiple valid fields repeated - userInput = targetIndex.getOneBased() + STUDENT_ID_DESC_AMY + EMAIL_DESC_AMY + userInput = INDEX_ONE + STUDENT_ID_DESC_AMY + EMAIL_DESC_AMY + TAG_DESC_FRIEND + STUDENT_ID_DESC_AMY + EMAIL_DESC_AMY + TAG_DESC_FRIEND + STUDENT_ID_DESC_BOB + EMAIL_DESC_BOB; @@ -177,7 +177,7 @@ public void parse_multipleRepeatedFields_failure() { Messages.getErrorMessageForDuplicatePrefixes(PREFIX_STUDENTID, PREFIX_EMAIL)); // multiple invalid values - userInput = targetIndex.getOneBased() + INVALID_STUDENT_ID_DESC + INVALID_EMAIL_DESC + userInput = INDEX_ONE + INVALID_STUDENT_ID_DESC + INVALID_EMAIL_DESC + INVALID_STUDENT_ID_DESC + INVALID_EMAIL_DESC; assertParseFailure(parser, userInput, @@ -186,8 +186,8 @@ public void parse_multipleRepeatedFields_failure() { @Test public void parse_resetTags_success() { - Index targetIndex = INDEX_THIRD_PERSON; - String userInput = targetIndex.getOneBased() + TAG_EMPTY; + Index targetIndex = INDEX_SECOND_PERSON; + String userInput = INDEX_TWO + TAG_EMPTY; EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withTags().build(); EditCommand expectedCommand = new EditCommand(targetIndex, descriptor); diff --git a/src/test/java/seedu/address/model/AddressBookTest.java b/src/test/java/seedu/address/model/AddressBookTest.java index ca7759f40aa..d472a5fe10f 100644 --- a/src/test/java/seedu/address/model/AddressBookTest.java +++ b/src/test/java/seedu/address/model/AddressBookTest.java @@ -4,9 +4,11 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_STUDENT_ID_AMY; import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; import static seedu.address.testutil.Assert.assertThrows; import static seedu.address.testutil.TypicalPersons.ALICE; +import static seedu.address.testutil.TypicalPersons.AMY; import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; import java.util.Arrays; @@ -83,6 +85,52 @@ public void hasPerson_personWithSameIdentityFieldsInAddressBook_returnsTrue() { assertTrue(addressBook.hasPerson(editedAlice)); } + @Test + public void hasPersonWithEmail_nullEmail_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> addressBook.hasPersonWithEmail(null)); + } + @Test + public void hasPersonWithEmail_personInAddressBook_returnsTrue() { + addressBook.addPerson(AMY); + assertTrue(addressBook.hasPersonWithEmail(AMY.getEmail())); + } + + @Test + public void hasPersonWithEmail_personNotInAddressBook_returnsFalse() { + assertFalse(addressBook.hasPersonWithEmail(AMY.getEmail())); + } + + @Test + public void hasPersonWithEmail_differentPersonWithSameEmail_returnsTrue() { + addressBook.addPerson(AMY); + Person alice = new PersonBuilder(ALICE).withEmail(VALID_EMAIL_AMY) + .build(); + assertTrue(addressBook.hasPersonWithEmail(alice.getEmail())); + } + + @Test + public void hasPersonWithStudentId_nullStudentId_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> addressBook.hasPersonWithStudentId(null)); + } + @Test + public void hasPersonWithStudentId_personInAddressBook_returnsTrue() { + addressBook.addPerson(AMY); + assertTrue(addressBook.hasPersonWithStudentId(AMY.getStudentId())); + } + + @Test + public void hasPersonWithStudentId_personNotInAddressBook_returnsFalse() { + assertFalse(addressBook.hasPersonWithStudentId(AMY.getStudentId())); + } + + @Test + public void hasPersonWithStudentId_differentPersonWithSameStudentId_returnsTrue() { + addressBook.addPerson(AMY); + Person alice = new PersonBuilder(ALICE).withStudentId(VALID_STUDENT_ID_AMY) + .build(); + assertTrue(addressBook.hasPersonWithStudentId(alice.getStudentId())); + } + @Test public void getPersonList_modifyList_throwsUnsupportedOperationException() { assertThrows(UnsupportedOperationException.class, () -> addressBook.getPersonList().remove(0)); diff --git a/src/test/java/seedu/address/model/ModelManagerTest.java b/src/test/java/seedu/address/model/ModelManagerTest.java index 7547d3af800..d1cbd6b3886 100644 --- a/src/test/java/seedu/address/model/ModelManagerTest.java +++ b/src/test/java/seedu/address/model/ModelManagerTest.java @@ -7,6 +7,7 @@ import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS; import static seedu.address.testutil.Assert.assertThrows; import static seedu.address.testutil.TypicalPersons.ALICE; +import static seedu.address.testutil.TypicalPersons.AMY; import static seedu.address.testutil.TypicalPersons.BENSON; import java.nio.file.Path; @@ -91,6 +92,21 @@ public void hasPerson_personInAddressBook_returnsTrue() { assertTrue(modelManager.hasPerson(ALICE)); } + @Test + public void hasPersonWithEmail_nullEmail_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> modelManager.hasPersonWithEmail(null)); + } + @Test + public void hasPersonWithEmail_personInAddressBook_returnsTrue() { + modelManager.addPerson(AMY); + assertTrue(modelManager.hasPersonWithEmail(AMY.getEmail())); + } + + @Test + public void hasPersonWithEmail_personNotInAddressBook_returnsFalse() { + assertFalse(modelManager.hasPersonWithEmail(AMY.getEmail())); + } + @Test public void getFilteredPersonList_modifyList_throwsUnsupportedOperationException() { assertThrows(UnsupportedOperationException.class, () -> modelManager.getFilteredPersonList().remove(0)); From bc0b0620427b1c612f2537f450a8aa3d46d376b3 Mon Sep 17 00:00:00 2001 From: Zack-Tay Date: Wed, 27 Mar 2024 16:13:39 +0800 Subject: [PATCH 07/15] Update UserGuide.md --- docs/UserGuide.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 1cd1b037e6f..afdf7004b9d 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -13,6 +13,14 @@ TAHelper is a **desktop app for managing contacts, optimized for use via a Line --- +## Target Audience + +TAHelper is specifically designed to assist and help Teaching Assistants (TA) of NUS Computer Science Modules, +which caters to their need to store information in a way that is easy to track and visualise, as well as keep student's +details in a centralised storage. Our target audience is specifically only TAs of NUS Computer Science Modules. + +## Purpose of User Guide + ## Quick start 1. Ensure you have Java `11` or above installed in your Computer. From 83d8320473ffd52d28a5a780bde9e50a7e9b78ea Mon Sep 17 00:00:00 2001 From: Zack-Tay Date: Thu, 28 Mar 2024 02:16:55 +0800 Subject: [PATCH 08/15] Add Allocate Student to Team Command and its Parser Add a new command that allows user to add an existing student that is in the tutorial class to an existing team in that tutorial group. Let's * Add a new AllocateStudentToTeamCommand and AllocateStudentToTeamCommandParser class to add the user into an existing team of an existing tutorial group in an existing module. * Add more functions to AddressBook class to support the command and parser above. --- .../logic/commands/AddTeamCommand.java | 2 +- .../AllocateStudentToTeamCommand.java | 35 +++++-- .../logic/parser/AddressBookParser.java | 4 + .../AllocateStudentToTeamCommandParser.java | 24 ++--- .../address/logic/parser/ParserUtil.java | 4 +- .../java/seedu/address/model/AddressBook.java | 99 ++++++++++++++++++- src/main/java/seedu/address/model/Model.java | 37 +++++++ .../seedu/address/model/ModelManager.java | 40 ++++++++ .../address/model/ReadOnlyAddressBook.java | 3 + .../address/model/module/ModuleCode.java | 6 +- .../address/model/module/TutorialClass.java | 14 +-- .../address/model/module/TutorialTeam.java | 26 ++++- .../address/storage/JsonAdaptedModule.java | 29 ++++-- .../address/storage/JsonAdaptedPerson.java | 1 - .../storage/JsonAdaptedTutorialClass.java | 49 +++++---- .../storage/JsonAdaptedTutorialTeam.java | 41 +++++--- .../storage/JsonSerializableAddressBook.java | 5 +- .../logic/commands/AddStudentCommandTest.java | 26 +++++ 18 files changed, 350 insertions(+), 95 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/AddTeamCommand.java b/src/main/java/seedu/address/logic/commands/AddTeamCommand.java index 173c347f4d4..e06c6bfe565 100644 --- a/src/main/java/seedu/address/logic/commands/AddTeamCommand.java +++ b/src/main/java/seedu/address/logic/commands/AddTeamCommand.java @@ -79,7 +79,7 @@ public CommandResult execute(Model model) throws CommandException { if (tutorialClass.hasTeam(newTeam)) { throw new CommandException(String.format(MESSAGE_DUPLICATE_TEAM, teamName, module, tutorialClass)); } else { - tutorialClass.addTeam(newTeam); + model.addTeam(tutorialClass, newTeam); } if (teamSize != Integer.MAX_VALUE) { diff --git a/src/main/java/seedu/address/logic/commands/AllocateStudentToTeamCommand.java b/src/main/java/seedu/address/logic/commands/AllocateStudentToTeamCommand.java index 07504be4c4a..9c5e1377fce 100644 --- a/src/main/java/seedu/address/logic/commands/AllocateStudentToTeamCommand.java +++ b/src/main/java/seedu/address/logic/commands/AllocateStudentToTeamCommand.java @@ -1,18 +1,20 @@ package seedu.address.logic.commands; -import seedu.address.commons.util.ToStringBuilder; -import seedu.address.commons.util.CollectionUtil; -import seedu.address.logic.commands.exceptions.*; -import seedu.address.model.*; -import seedu.address.model.module.*; -import seedu.address.model.person.*; - import static java.util.Objects.requireNonNull; import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; import static seedu.address.logic.parser.CliSyntax.PREFIX_TEAMNAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_TUTORIALCLASS; +import seedu.address.commons.util.CollectionUtil; +import seedu.address.commons.util.ToStringBuilder; +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.model.Model; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; +import seedu.address.model.person.StudentId; + /** * Allocates a student to a team in a tutorial Class in TAHelper. */ @@ -38,6 +40,7 @@ public class AllocateStudentToTeamCommand extends Command { + " in the tutorial class!"; public static final String MESSAGE_CLASS_DOES_NOT_EXIST = "Tutorial class does not exist in module"; + public static final String MESSAGE_TEAM_SIZE_EXCEEDED = "Max team size reached"; private final StudentId studentId; private final ModuleCode moduleCode; @@ -64,15 +67,27 @@ public CommandResult execute(Model model) throws CommandException { throw new CommandException(MESSAGE_CLASS_DOES_NOT_EXIST); } - if (!model.hasTeamInTutorial(tutorialClass, tutorialTeam)) { + ModuleCode module = model.findModuleFromList(moduleCode); + TutorialClass tutClass = model.findTutorialClassFromList(tutorialClass, module); + + if (!model.hasTeamInTutorial(tutClass, tutorialTeam)) { + throw new CommandException(MESSAGE_TEAM_DOES_NOT_EXIST); + } + + TutorialTeam tutTeam = model.getTutorialTeam(tutClass, tutorialTeam); + if (tutTeam == null) { throw new CommandException(MESSAGE_TEAM_DOES_NOT_EXIST); } - if (model.isStudentInAnyTeam(studentId, tutorialClass)) { + if (model.isStudentInAnyTeam(studentId, tutClass)) { throw new CommandException(MESSAGE_DUPLICATE_PERSON_IN_TEAM); } - model.allocateStudentToTeam(studentId, tutorialTeam); + if (model.hasTeamSizeExceeded(tutTeam)) { + throw new CommandException(MESSAGE_TEAM_SIZE_EXCEEDED); + } + + model.allocateStudentToTeam(studentId, tutTeam); return new CommandResult(String.format(MESSAGE_SUCCESS)); } diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java index ecef39ff8d0..d882a7b627d 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java @@ -11,6 +11,7 @@ import seedu.address.logic.commands.AddClassCommand; import seedu.address.logic.commands.AddStudentCommand; import seedu.address.logic.commands.AddTeamCommand; +import seedu.address.logic.commands.AllocateStudentToTeamCommand; import seedu.address.logic.commands.ClearCommand; import seedu.address.logic.commands.Command; import seedu.address.logic.commands.DeleteClassCommand; @@ -118,6 +119,9 @@ public Command parseCommand(String userInput) throws ParseException { case DeleteTeamCommand.COMMAND_WORD: return new DeleteTeamCommandParser().parse(arguments); + case AllocateStudentToTeamCommand.COMMAND_WORD: + return new AllocateStudentToTeamCommandParser().parse(arguments); + default: logger.finer("This user input caused a ParseException: " + userInput); throw new ParseException(MESSAGE_UNKNOWN_COMMAND); diff --git a/src/main/java/seedu/address/logic/parser/AllocateStudentToTeamCommandParser.java b/src/main/java/seedu/address/logic/parser/AllocateStudentToTeamCommandParser.java index 1a2618ea9bf..8df61286c54 100644 --- a/src/main/java/seedu/address/logic/parser/AllocateStudentToTeamCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/AllocateStudentToTeamCommandParser.java @@ -1,26 +1,20 @@ package seedu.address.logic.parser; - -import seedu.address.logic.commands.*; -import seedu.address.logic.commands.addstudenttoclasscommands.*; -import seedu.address.logic.parser.exceptions.*; -import seedu.address.model.module.*; -import seedu.address.model.person.*; -import seedu.address.model.tag.*; - -import java.util.*; -import java.util.stream.*; - import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; -import static seedu.address.logic.parser.CliSyntax.PREFIX_INDEX; import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; -import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import static seedu.address.logic.parser.CliSyntax.PREFIX_TEAMNAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_TUTORIALCLASS; +import java.util.stream.Stream; + +import seedu.address.logic.commands.AllocateStudentToTeamCommand; +import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; +import seedu.address.model.person.StudentId; + /** * Parses input arguments and creates a new AllocateStudentToTeamCommand object */ diff --git a/src/main/java/seedu/address/logic/parser/ParserUtil.java b/src/main/java/seedu/address/logic/parser/ParserUtil.java index 51a56ee29ba..5962c7c69c8 100644 --- a/src/main/java/seedu/address/logic/parser/ParserUtil.java +++ b/src/main/java/seedu/address/logic/parser/ParserUtil.java @@ -9,7 +9,9 @@ import seedu.address.commons.core.index.Index; import seedu.address.commons.util.StringUtil; import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.module.*; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; import seedu.address.model.person.Email; import seedu.address.model.person.Name; import seedu.address.model.person.StudentId; diff --git a/src/main/java/seedu/address/model/AddressBook.java b/src/main/java/seedu/address/model/AddressBook.java index 738a6aa19f3..2facec0f3a0 100644 --- a/src/main/java/seedu/address/model/AddressBook.java +++ b/src/main/java/seedu/address/model/AddressBook.java @@ -14,6 +14,7 @@ import seedu.address.logic.messages.ModuleMessages; import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; import seedu.address.model.person.Email; import seedu.address.model.person.Person; import seedu.address.model.person.StudentId; @@ -29,6 +30,8 @@ public class AddressBook implements ReadOnlyAddressBook { private ObservableList sortedPersons; private final ArrayList modules; private final ArrayList tutorialClasses; + private final ArrayList tutorialTeams; + private final UniquePersonList studentsInTeam; /* * The 'unusual' code block below is a non-static initialization block, @@ -44,6 +47,8 @@ public class AddressBook implements ReadOnlyAddressBook { persons = new UniquePersonList(); modules = new ArrayList<>(); tutorialClasses = new ArrayList<>(); + tutorialTeams = new ArrayList<>(); + studentsInTeam = new UniquePersonList(); } public AddressBook() { @@ -82,6 +87,17 @@ public void setClass(List tutorialClasses) { this.tutorialClasses.addAll(tutorialClasses); } + public void setTutorialTeams(List tutorialTeams) { + requireNonNull(tutorialTeams); + this.tutorialTeams.clear(); + this.tutorialTeams.addAll(tutorialTeams); + } + + public void setStudentsInTeam(List students) { + requireNonNull(students); + this.studentsInTeam.setPersons(students); + } + /** * Resets the existing data of this {@code AddressBook} with {@code newData}. */ @@ -90,7 +106,8 @@ public void resetData(ReadOnlyAddressBook newData) { setPersons(newData.getPersonList()); setModules(newData.getModuleList()); setClass(newData.getTutorialList()); - + setTutorialTeams(newData.getTutorialTeamList()); + setStudentsInTeam(newData.getStudentInTeamList()); } //// person-level operations @@ -228,6 +245,76 @@ public void deletePersonFromTutorialClass(Person person, ModuleCode module, Tuto tutorialClassInList.deleteStudent(person); } + /** + * Allocates the {@code studentId} to the {@code tutorialTeam} + * @param tutorialTeam to allocate the student into. + */ + public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam) { + requireNonNull(studentId); + requireNonNull(tutorialTeam); + Person student = persons.getPerson(studentId); + tutorialTeam.addStudent(student); + } + + /** + * Returns true if the {@code tutorialTeam} size has exceeded its limit. + * @param tutorialTeam size to check. + * @return a boolean that indicates whether the team size will be exceeded by adding another person. + */ + boolean hasTeamSizeExceeded(TutorialTeam tutorialTeam) { + requireNonNull(tutorialTeam); + int maxTeamSize = tutorialTeam.getTeamSize(); + int currTeamSize = tutorialTeam.getStudents().size(); + return (maxTeamSize >= currTeamSize); + }; + + /** + * Returns true if the {@code studentId} is already in a team of {@code tutorialClass}. + * @param tutorialClass of the teams. + * @param studentId to search for. + */ + public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialClass) { + boolean isStudentExist = false; + for (TutorialTeam tutorialTeam : tutorialClass.getTeams()) { + isStudentExist = tutorialTeam.hasStudentVerified(studentId, tutorialTeam); + } + return isStudentExist; + }; + + /** + * Returns true if a team with the same identity as {@code tutorialTeam} exists in the {@code tutorialClass} + * @param tutorialClass of the tutorialTeam. + * @param tutorialTeam to check if it exist. + */ + public boolean hasTeamInTutorial(TutorialClass tutorialClass, TutorialTeam tutorialTeam) { + requireNonNull(tutorialClass); + requireNonNull(tutorialTeam); + ArrayList listOfTeams = tutorialClass.getTeams(); + ObservableList teams = FXCollections.observableList(listOfTeams); + return teams.stream().anyMatch(tutorialClass::hasTeam); + } + + public TutorialTeam getTutorialTeam(TutorialClass tutorialClass, TutorialTeam tutorialTeam) { + requireNonNull(tutorialClasses); + requireNonNull(tutorialTeam); + TutorialTeam tutTeam = tutorialClass.getTeams().stream() + .filter(team -> team.getTeamName().equals(tutorialTeam.getTeamName())) + .findFirst() + .orElse(null); + return tutTeam; + } + + /** + * adds a team into the tutorial class + * @param tutorialClass to add the tutorialTeam to. + * @param tutorialTeam to be added into the tutorialClass. + */ + public void addTeam(TutorialClass tutorialClass, TutorialTeam tutorialTeam) { + requireNonNull(tutorialClass); + requireNonNull(tutorialTeam); + tutorialClass.addTeam(tutorialTeam); + } + /** * Replaces the given person {@code target} in the list with * {@code editedPerson}. @@ -270,6 +357,16 @@ public ObservableList getPersonList() { return persons.asUnmodifiableObservableList(); } + @Override + public ObservableList getTutorialTeamList() { + return FXCollections.observableList(tutorialTeams); + } + + @Override + public ObservableList getStudentInTeamList() { + return studentsInTeam.asUnmodifiableObservableList(); + } + @Override public ObservableList getModuleList() { return FXCollections.observableList(modules); diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index d35ec2f839b..836fb4ab4c0 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -8,6 +8,7 @@ import seedu.address.commons.core.GuiSettings; import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; import seedu.address.model.person.Email; import seedu.address.model.person.Person; import seedu.address.model.person.StudentId; @@ -95,12 +96,21 @@ public interface Model { */ void deletePerson(Person target); + /** + * adds a team into the tutorial class + * @param tutorialClass to add the tutorialTeam to. + * @param tutorialTeam to be added into the tutorialClass. + */ + public void addTeam(TutorialClass tutorialClass, TutorialTeam tutorialTeam); + /** * Deletes the given module. * The module must exist in the address book. */ void deleteModule(ModuleCode target); + public TutorialTeam getTutorialTeam(TutorialClass tutorialClass, TutorialTeam tutorialTeam); + /** * Adds the given person. * {@code person} must not already exist in the address book. @@ -113,6 +123,33 @@ public interface Model { */ void addModule(ModuleCode module); + /** + * Allocates the {@code studentId} to the {@code tutorialTeam} + * @param tutorialTeam to allocate the student into. + */ + public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam); + + /** + * Returns true if a team with the same identity as {@code tutorialTeam} exists in the {@code tutorialClass} + * @param tutorialClass of the tutorialTeam. + * @param tutorialTeam to check if it exist. + */ + public boolean hasTeamInTutorial(TutorialClass tutorialClass, TutorialTeam tutorialTeam); + + /** + * Returns true if the {@code studentId} is already in a team of {@code tutorialClass}. + * @param tutorialClass of the teams. + * @param studentId to search for. + */ + public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialClass); + + /** + * Returns true if the {@code tutorialTeam} size has exceeded its limit. + * @param tutorialTeam size to check. + * @return a boolean that indicates whether the team size will be exceeded by adding another person. + */ + boolean hasTeamSizeExceeded(TutorialTeam tutorialTeam); + /** * Adds the given person to the given tutorial class in the given module. */ diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index 101d78b8d9b..b3c71f10d78 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -14,6 +14,7 @@ import seedu.address.commons.core.LogsCenter; import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; import seedu.address.model.person.Email; import seedu.address.model.person.Person; import seedu.address.model.person.StudentId; @@ -145,6 +146,45 @@ public void addPerson(Person person) { updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); } + @Override + public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam) { + addressBook.allocateStudentToTeam(studentId, tutorialTeam); + } + + @Override + public boolean hasTeamInTutorial(TutorialClass tutorialClass, TutorialTeam tutorialTeam) { + requireAllNonNull(tutorialClass, tutorialTeam); + return addressBook.hasTeamInTutorial(tutorialClass, tutorialTeam); + } + + @Override + public TutorialTeam getTutorialTeam(TutorialClass tutorialClass, TutorialTeam tutorialTeam) { + requireAllNonNull(tutorialClass, tutorialTeam); + return addressBook.getTutorialTeam(tutorialClass, tutorialTeam); + } + + /** + * Add a team to the tutorial class + * @param tutorialTeam to be added to the tutorial class + */ + @Override + public void addTeam(TutorialClass tutorialClass, TutorialTeam tutorialTeam) { + requireNonNull(tutorialTeam); + addressBook.addTeam(tutorialClass, tutorialTeam); + } + + @Override + public boolean hasTeamSizeExceeded(TutorialTeam tutorialTeam) { + requireNonNull(tutorialTeam); + return addressBook.hasTeamSizeExceeded(tutorialTeam); + }; + + @Override + public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialClass) { + requireAllNonNull(studentId, tutorialClass); + return addressBook.isStudentInAnyTeam(studentId, tutorialClass); + } + @Override public void addModule(ModuleCode module) { addressBook.addModule(module, diff --git a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java index 840d98b1e28..df019f04605 100644 --- a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java +++ b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java @@ -5,6 +5,7 @@ import javafx.collections.ObservableList; import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; import seedu.address.model.person.Person; /** @@ -26,6 +27,8 @@ public interface ReadOnlyAddressBook { void setSortedPersonList(Comparator comparator); ObservableList getSortedPersonList(); + ObservableList getTutorialTeamList(); + ObservableList getStudentInTeamList(); /** * Checks if the address book contains the specified module code. diff --git a/src/main/java/seedu/address/model/module/ModuleCode.java b/src/main/java/seedu/address/model/module/ModuleCode.java index bae5af16c70..b570cf48ce0 100644 --- a/src/main/java/seedu/address/model/module/ModuleCode.java +++ b/src/main/java/seedu/address/model/module/ModuleCode.java @@ -22,7 +22,7 @@ public class ModuleCode { public static final String VALIDATION_REGEX = "^[A-Z]{2,3}\\d{4}[A-Z]?$"; public final String moduleCode; - private final ArrayList tutorialClasses; + private final List tutorialClasses; private String description; /** @@ -75,7 +75,7 @@ public ModuleCode(String moduleCode, List tutorialClass, String d * @param moduleCode of the module to be created * @param tutorialClasses of the module to be created */ - public ModuleCode(String moduleCode, ArrayList tutorialClasses) { + public ModuleCode(String moduleCode, List tutorialClasses) { requireAllNonNull(moduleCode); checkArgument(isValidModuleCode(moduleCode), MESSAGE_CONSTRAINTS); this.moduleCode = moduleCode; @@ -94,7 +94,7 @@ public static boolean isValidModuleCode(String test) { * @return the ArrayList of tutorial classes. */ public ArrayList getTutorialClasses() { - return tutorialClasses; + return (ArrayList) tutorialClasses; } /** diff --git a/src/main/java/seedu/address/model/module/TutorialClass.java b/src/main/java/seedu/address/model/module/TutorialClass.java index facb407dc34..4d696826300 100644 --- a/src/main/java/seedu/address/model/module/TutorialClass.java +++ b/src/main/java/seedu/address/model/module/TutorialClass.java @@ -157,15 +157,11 @@ public void addTeam(TutorialTeam team) { * @param team */ public boolean hasTeam(TutorialTeam team) { - if (teams.contains(team)) { - return true; - } - for (TutorialTeam tutorialTeam : teams) { + for (TutorialTeam tutorialTeam : this.teams) { if (tutorialTeam.getTeamName().equals(team.getTeamName())) { return true; } }; - return false; } @@ -177,14 +173,6 @@ public void deleteTeam(TutorialTeam team) { teams.remove(team); } - /** - * Deletes a team from the tutorial class. - * @param team - */ - public void deleteTeam(TutorialTeam team) { - teams.remove(team); - } - @Override public String toString() { return tutorialName; diff --git a/src/main/java/seedu/address/model/module/TutorialTeam.java b/src/main/java/seedu/address/model/module/TutorialTeam.java index 62ec0857cc2..8be1eb9dcfb 100644 --- a/src/main/java/seedu/address/model/module/TutorialTeam.java +++ b/src/main/java/seedu/address/model/module/TutorialTeam.java @@ -3,9 +3,13 @@ import static seedu.address.commons.util.AppUtil.checkArgument; import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; +import java.lang.reflect.*; import java.util.ArrayList; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import seedu.address.model.person.Person; +import seedu.address.model.person.StudentId; /** * Represents a Module's tutorial team. @@ -67,7 +71,7 @@ public TutorialTeam(String tutorialTeam, int teamSize) { /** * A constructor for TutorialTeam. Creates a tutorial team with students. - * @param tutorialClass to be added + * @param tutorialTeam to be added * @param students in the tutorial class */ public TutorialTeam(String tutorialTeam, ArrayList students) { @@ -81,7 +85,7 @@ public TutorialTeam(String tutorialTeam, ArrayList students) { /** * A constructor for TutorialTeam. Creates a tutorial team with students and * team size. - * @param tutorialClass to be added + * @param tutorialTeam to be added * @param students in the tutorial class * @param teamSize of the tutorial team */ @@ -176,6 +180,24 @@ public boolean hasStudent(Person student) { return students.contains(student); } + /** + * Checks if a student exist by their id + * @param studentId + * @return true if a person is in the list of students + */ + public boolean hasStudentVerified(StudentId studentId, TutorialTeam tutorialTeam) { + ArrayList teamList = tutorialTeam.getStudents(); + if (teamList.size() == 0 || teamList == null) { + return false; + } + for (Person student : teamList) { + if (student.getStudentId().value.equals(studentId.value)) { + return true; + }; + } + return false; + } + @Override public String toString() { return teamName; diff --git a/src/main/java/seedu/address/storage/JsonAdaptedModule.java b/src/main/java/seedu/address/storage/JsonAdaptedModule.java index d3206f85089..d882cbaa0e3 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedModule.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedModule.java @@ -1,6 +1,7 @@ package seedu.address.storage; import java.util.ArrayList; +import java.util.List; import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonCreator; @@ -9,6 +10,7 @@ import seedu.address.commons.exceptions.IllegalValueException; import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; +import seedu.address.model.person.StudentId; /** * Jackson-friendly version of {@link ModuleCode}. @@ -18,7 +20,7 @@ class JsonAdaptedModule { public static final String MISSING_FIELD_MESSAGE_FORMAT = "Module name is missing!"; private final String name; - private final ArrayList tutorialClasses; + private final List tutorialClasses = new ArrayList<>(); private final String description; /** @@ -26,11 +28,13 @@ class JsonAdaptedModule { */ @JsonCreator public JsonAdaptedModule(@JsonProperty("name") String name, - @JsonProperty("tutorialClasses") ArrayList tutorialClasses, + @JsonProperty("tutorialClasses") List tutorialClasses, @JsonProperty("description") String description) { this.name = name; - this.tutorialClasses = tutorialClasses; this.description = description; + if (tutorialClasses != null) { + this.tutorialClasses.addAll(tutorialClasses); + } } /** @@ -38,8 +42,8 @@ public JsonAdaptedModule(@JsonProperty("name") String name, */ public JsonAdaptedModule(ModuleCode source) { name = source.toString(); - this.tutorialClasses = source.getTutorialClasses().stream().map(JsonAdaptedTutorialClass::new) - .collect(Collectors.toCollection(ArrayList::new)); + tutorialClasses.addAll(source.getTutorialClasses().stream().map(JsonAdaptedTutorialClass::new) + .collect(Collectors.toCollection(ArrayList::new))); this.description = source.getDescription(); } @@ -53,7 +57,7 @@ public String getModuleName() { /** * Retrieves tutorial classes from the module. */ - public ArrayList getTutorialClasses() { + public List getTutorialClasses() { return tutorialClasses; } @@ -66,16 +70,21 @@ public ModuleCode toModelType() throws IllegalValueException { if (!ModuleCode.isValidModuleCode(name)) { throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, name)); } - ArrayList tutorialClasses = new ArrayList<>(); + final List listOfClass = new ArrayList<>(); for (JsonAdaptedTutorialClass tutorialClass : this.tutorialClasses) { - tutorialClasses.add(tutorialClass.toModelType()); + listOfClass.add(tutorialClass.toModelType()); } + ModuleCode moduleCode; + if (!ModuleCode.isValidModuleCode(name)) { + throw new IllegalValueException(StudentId.MESSAGE_CONSTRAINTS); + } + if (description != null && !description.isEmpty()) { - moduleCode = new ModuleCode(name, tutorialClasses, + moduleCode = new ModuleCode(name, listOfClass, description); } else { - moduleCode = new ModuleCode(name, tutorialClasses); + moduleCode = new ModuleCode(name, listOfClass); } return moduleCode; diff --git a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java index 06f62b98cb5..f979448b1c6 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java @@ -95,5 +95,4 @@ public Person toModelType() throws IllegalValueException { final Set modelTags = new HashSet<>(personTags); return new Person(modelName, modelEmail, modelStudentId, modelTags); } - } diff --git a/src/main/java/seedu/address/storage/JsonAdaptedTutorialClass.java b/src/main/java/seedu/address/storage/JsonAdaptedTutorialClass.java index adaf8763c6e..cce9a538175 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedTutorialClass.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedTutorialClass.java @@ -10,16 +10,19 @@ import seedu.address.commons.exceptions.IllegalValueException; import seedu.address.model.module.TutorialClass; import seedu.address.model.module.TutorialTeam; -import seedu.address.model.person.Person; +import seedu.address.model.person.*; + +import static seedu.address.storage.JsonAdaptedModule.MISSING_FIELD_MESSAGE_FORMAT; /** * Jackson-friendly version of {@link TutorialClass}. */ public class JsonAdaptedTutorialClass { + public static final String MISSING_FIELD_MESSAGE_FORMAT = "tutorial name is missing!"; private final String tutorialName; - private final List students; - private final List teams; + private final List students = new ArrayList<>(); + private final List teams = new ArrayList<>(); /** * Constructs a {@code JsonAdaptedTutorialClass} with the given @@ -30,17 +33,21 @@ public JsonAdaptedTutorialClass(@JsonProperty("tutorialName") String tutorialNam @JsonProperty("teams") List teams, @JsonProperty("students") List students) { this.tutorialName = tutorialName; - this.teams = teams != null ? new ArrayList<>(teams) : new ArrayList<>(); - this.students = students != null ? new ArrayList<>(students) : new ArrayList<>(); + if (teams != null) { + this.teams.addAll(teams); + } + if (students != null) { + this.students.addAll(students); + } } /** * Converts a given {@code TutorialClass} into this class for Jackson use. */ public JsonAdaptedTutorialClass(TutorialClass source) { - this.tutorialName = source.tutorialName; - this.teams = source.getTeams().stream().map(JsonAdaptedTutorialTeam::new).collect(Collectors.toList()); - this.students = source.getStudents().stream().map(JsonAdaptedPerson::new).collect(Collectors.toList()); + this.tutorialName = source.getTutorialClass().tutorialName; + teams.addAll(source.getTeams().stream().map(JsonAdaptedTutorialTeam::new).collect(Collectors.toList())); + students.addAll(source.getStudents().stream().map(JsonAdaptedPerson::new).collect(Collectors.toList())); } public String getTutorialName() { @@ -63,19 +70,23 @@ public List getStudents() { * the adapted tutorial class. */ public TutorialClass toModelType() throws IllegalValueException { - try { - ArrayList students = new ArrayList<>(); - for (JsonAdaptedPerson student : this.students) { - students.add(student.toModelType()); - } - ArrayList teams = new ArrayList<>(); - for (JsonAdaptedTutorialTeam team : this.teams) { - teams.add(team.toModelType()); - } - return new TutorialClass(tutorialName, students, teams); - } catch (IllegalValueException e) { + ArrayList listOfStudents = new ArrayList<>(); + ArrayList listOfTeams = new ArrayList<>(); + + for (JsonAdaptedPerson student : students) { + listOfStudents.add(student.toModelType()); + } + for (JsonAdaptedTutorialTeam team : teams) { + listOfTeams.add(team.toModelType()); + } + + if (tutorialName == null) { + throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, tutorialName)); + } + if (!TutorialClass.isValidTutorialClass(tutorialName)) { throw new IllegalValueException(TutorialClass.MESSAGE_CONSTRAINTS); } + return new TutorialClass(tutorialName, listOfStudents, listOfTeams); } @Override diff --git a/src/main/java/seedu/address/storage/JsonAdaptedTutorialTeam.java b/src/main/java/seedu/address/storage/JsonAdaptedTutorialTeam.java index 8e132df59c3..3fe120a0cfd 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedTutorialTeam.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedTutorialTeam.java @@ -8,17 +8,18 @@ import com.fasterxml.jackson.annotation.JsonProperty; import seedu.address.commons.exceptions.IllegalValueException; -import seedu.address.model.module.TutorialTeam; -import seedu.address.model.person.Person; +import seedu.address.model.module.*; +import seedu.address.model.person.*; /** * Jackson-friendly version of {@link TutorialTeam}. */ public class JsonAdaptedTutorialTeam { + public static final String MISSING_FIELD_MESSAGE_FORMAT = "team name is missing!"; private final String teamName; private final int teamSize; - private final List students; + private final List students = new ArrayList<>(); /** * Constructs a {@code JsonAdaptedTutorialTeam} with the given @@ -29,7 +30,9 @@ public JsonAdaptedTutorialTeam(@JsonProperty("teamName") String teamName, @JsonProperty("teamSize") int teamSize, @JsonProperty("students") List students) { this.teamName = teamName; - this.students = students != null ? new ArrayList<>(students) : new ArrayList<>(); + if (students != null) { + this.students.addAll(students); + } this.teamSize = teamSize; } @@ -37,9 +40,9 @@ public JsonAdaptedTutorialTeam(@JsonProperty("teamName") String teamName, * Converts a given {@code TutorialTeam} into this class for Jackson use. */ public JsonAdaptedTutorialTeam(TutorialTeam source) { - this.teamName = source.teamName; - this.teamSize = source.teamSize; - this.students = source.getStudents().stream().map(JsonAdaptedPerson::new).collect(Collectors.toList()); + this.teamName = source.getTeamName(); + this.teamSize = source.getTeamSize(); + students.addAll(source.getStudents().stream().map(JsonAdaptedPerson::new).collect(Collectors.toList())); } public String getTeamName() { @@ -51,7 +54,7 @@ public int getTeamSize() { } public List getStudents() { - return new ArrayList<>(students); + return this.students; } /** @@ -62,15 +65,21 @@ public List getStudents() { * the adapted tutorial team. */ public TutorialTeam toModelType() throws IllegalValueException { - try { - ArrayList students = new ArrayList<>(); - for (JsonAdaptedPerson student : this.students) { - students.add(student.toModelType()); - } - return new TutorialTeam(teamName, students, teamSize); - } catch (IllegalValueException e) { - throw new IllegalValueException(TutorialTeam.MESSAGE_CONSTRAINTS); + final ArrayList listOfStudents = new ArrayList<>(); + if (teamName == null) { + throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, teamName)); + } + if (!TutorialTeam.isValidTeamName(teamName)) { + throw new IllegalValueException(Name.MESSAGE_CONSTRAINTS); + } + + if (!TutorialTeam.isValidSize(teamSize)) { + throw new IllegalValueException(Name.MESSAGE_CONSTRAINTS); + } + for (JsonAdaptedPerson student : students) { + listOfStudents.add(student.toModelType()); } + return new TutorialTeam(teamName, listOfStudents, teamSize); } @Override diff --git a/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java b/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java index e67b72b8113..2f6b729990e 100644 --- a/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java +++ b/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java @@ -33,7 +33,7 @@ class JsonSerializableAddressBook { */ @JsonCreator public JsonSerializableAddressBook(@JsonProperty("persons") List persons, - @JsonProperty("modules") List modules) { + @JsonProperty("modules") List modules) { if (persons != null) { this.persons.addAll(persons); } @@ -72,7 +72,7 @@ public AddressBook toModelType() throws IllegalValueException { throw new IllegalValueException(MESSAGE_DUPLICATE_MODULE); } addressBook.addModule(module, - module.getDescription()); + module.getDescription()); } return addressBook; } @@ -111,5 +111,4 @@ public void addPersonToTutorialClass(String moduleName, String tutorialName, Per throw new IllegalValueException("Module containing tutorial class '" + tutorialName + "' not found."); } } - } diff --git a/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java b/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java index e448a9e9e1e..3d99f6e794c 100644 --- a/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java @@ -25,6 +25,7 @@ import seedu.address.model.ReadOnlyUserPrefs; import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; import seedu.address.model.person.Email; import seedu.address.model.person.Person; import seedu.address.model.person.StudentId; @@ -138,6 +139,26 @@ public void setAddressBook(ReadOnlyAddressBook newData) { throw new AssertionError("This method should not be called."); } + @Override + public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam) { + throw new AssertionError("This method should not be called."); + }; + + @Override + public boolean hasTeamInTutorial(TutorialClass tutorialClass, TutorialTeam tutorialTeam) { + throw new AssertionError("This method should not be called."); + }; + + @Override + public TutorialTeam getTutorialTeam(TutorialClass tutorialClass, TutorialTeam tutorialTeam) { + throw new AssertionError("This method should not be called."); + } + + @Override + public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialClass) { + throw new AssertionError("This method should not be called."); + }; + @Override public ReadOnlyAddressBook getAddressBook() { throw new AssertionError("This method should not be called."); @@ -168,6 +189,11 @@ public void addPersonToTutorialClass(Person person, ModuleCode moduleCode, Tutor throw new AssertionError("This method should not be called."); } + @Override + public void addTeam(TutorialClass tutorialClass, TutorialTeam tutorialTeam) { + throw new AssertionError("This method should not be called."); + }; + @Override public void deletePersonFromTutorialClass(Person person, ModuleCode moduleCode, TutorialClass tutorialClass) { throw new AssertionError("This method should not be called."); From 8dad9dbe9430aabe3533b324ad6c695d2bb60945 Mon Sep 17 00:00:00 2001 From: Zack-Tay Date: Thu, 28 Mar 2024 03:05:16 +0800 Subject: [PATCH 09/15] Update checkstyle and testcases --- .../java/seedu/address/model/AddressBook.java | 2 +- .../address/model/module/TutorialTeam.java | 4 +--- .../storage/JsonAdaptedTutorialClass.java | 18 ++++++++---------- .../storage/JsonAdaptedTutorialTeam.java | 8 ++++---- .../logic/commands/AddStudentCommandTest.java | 5 +++++ .../seedu/address/model/AddressBookTest.java | 11 +++++++++++ .../storage/JsonAdaptedTutorialClassTest.java | 3 ++- .../storage/JsonAdaptedTutorialTeamTest.java | 5 +++-- 8 files changed, 35 insertions(+), 21 deletions(-) diff --git a/src/main/java/seedu/address/model/AddressBook.java b/src/main/java/seedu/address/model/AddressBook.java index 2facec0f3a0..0981dfadd0e 100644 --- a/src/main/java/seedu/address/model/AddressBook.java +++ b/src/main/java/seedu/address/model/AddressBook.java @@ -261,7 +261,7 @@ public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam * @param tutorialTeam size to check. * @return a boolean that indicates whether the team size will be exceeded by adding another person. */ - boolean hasTeamSizeExceeded(TutorialTeam tutorialTeam) { + public boolean hasTeamSizeExceeded(TutorialTeam tutorialTeam) { requireNonNull(tutorialTeam); int maxTeamSize = tutorialTeam.getTeamSize(); int currTeamSize = tutorialTeam.getStudents().size(); diff --git a/src/main/java/seedu/address/model/module/TutorialTeam.java b/src/main/java/seedu/address/model/module/TutorialTeam.java index 8be1eb9dcfb..b10b5ea5a74 100644 --- a/src/main/java/seedu/address/model/module/TutorialTeam.java +++ b/src/main/java/seedu/address/model/module/TutorialTeam.java @@ -3,11 +3,8 @@ import static seedu.address.commons.util.AppUtil.checkArgument; import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; -import java.lang.reflect.*; import java.util.ArrayList; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; import seedu.address.model.person.Person; import seedu.address.model.person.StudentId; @@ -196,6 +193,7 @@ public boolean hasStudentVerified(StudentId studentId, TutorialTeam tutorialTeam }; } return false; + } @Override diff --git a/src/main/java/seedu/address/storage/JsonAdaptedTutorialClass.java b/src/main/java/seedu/address/storage/JsonAdaptedTutorialClass.java index cce9a538175..8c4f40e0238 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedTutorialClass.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedTutorialClass.java @@ -10,9 +10,7 @@ import seedu.address.commons.exceptions.IllegalValueException; import seedu.address.model.module.TutorialClass; import seedu.address.model.module.TutorialTeam; -import seedu.address.model.person.*; - -import static seedu.address.storage.JsonAdaptedModule.MISSING_FIELD_MESSAGE_FORMAT; +import seedu.address.model.person.Person; /** * Jackson-friendly version of {@link TutorialClass}. @@ -73,19 +71,19 @@ public TutorialClass toModelType() throws IllegalValueException { ArrayList listOfStudents = new ArrayList<>(); ArrayList listOfTeams = new ArrayList<>(); - for (JsonAdaptedPerson student : students) { - listOfStudents.add(student.toModelType()); - } - for (JsonAdaptedTutorialTeam team : teams) { - listOfTeams.add(team.toModelType()); - } - if (tutorialName == null) { throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, tutorialName)); } if (!TutorialClass.isValidTutorialClass(tutorialName)) { throw new IllegalValueException(TutorialClass.MESSAGE_CONSTRAINTS); } + + for (JsonAdaptedPerson student : students) { + listOfStudents.add(student.toModelType()); + } + for (JsonAdaptedTutorialTeam team : teams) { + listOfTeams.add(team.toModelType()); + } return new TutorialClass(tutorialName, listOfStudents, listOfTeams); } diff --git a/src/main/java/seedu/address/storage/JsonAdaptedTutorialTeam.java b/src/main/java/seedu/address/storage/JsonAdaptedTutorialTeam.java index 3fe120a0cfd..30b7460e232 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedTutorialTeam.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedTutorialTeam.java @@ -8,8 +8,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import seedu.address.commons.exceptions.IllegalValueException; -import seedu.address.model.module.*; -import seedu.address.model.person.*; +import seedu.address.model.module.TutorialTeam; +import seedu.address.model.person.Person; /** * Jackson-friendly version of {@link TutorialTeam}. @@ -70,11 +70,11 @@ public TutorialTeam toModelType() throws IllegalValueException { throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, teamName)); } if (!TutorialTeam.isValidTeamName(teamName)) { - throw new IllegalValueException(Name.MESSAGE_CONSTRAINTS); + throw new IllegalValueException(TutorialTeam.MESSAGE_NAME_CONSTRAINTS); } if (!TutorialTeam.isValidSize(teamSize)) { - throw new IllegalValueException(Name.MESSAGE_CONSTRAINTS); + throw new IllegalValueException(TutorialTeam.MESSAGE_SIZE_CONSTRAINTS); } for (JsonAdaptedPerson student : students) { listOfStudents.add(student.toModelType()); diff --git a/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java b/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java index 3d99f6e794c..bb6c921cfcb 100644 --- a/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java @@ -159,6 +159,11 @@ public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialCla throw new AssertionError("This method should not be called."); }; + @Override + public boolean hasTeamSizeExceeded(TutorialTeam tutorialTeam) { + throw new AssertionError("This method should not be called."); + } + @Override public ReadOnlyAddressBook getAddressBook() { throw new AssertionError("This method should not be called."); diff --git a/src/test/java/seedu/address/model/AddressBookTest.java b/src/test/java/seedu/address/model/AddressBookTest.java index 119269f2c0a..b09a50d894b 100644 --- a/src/test/java/seedu/address/model/AddressBookTest.java +++ b/src/test/java/seedu/address/model/AddressBookTest.java @@ -23,6 +23,7 @@ import javafx.collections.ObservableList; import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; import seedu.address.model.person.Person; import seedu.address.model.person.exceptions.DuplicatePersonException; import seedu.address.testutil.PersonBuilder; @@ -169,6 +170,11 @@ public ObservableList getModuleList() { return null; } + @Override + public ObservableList getStudentInTeamList() { + return null; + } + @Override public void setSortedPersonList(Comparator comparator) { sortedPersons = FXCollections.observableArrayList(); @@ -192,5 +198,10 @@ public void addModule(ModuleCode moduleCode, String description) { public ObservableList getTutorialList() { return null; } + + @Override + public ObservableList getTutorialTeamList() { + return null; + } } } diff --git a/src/test/java/seedu/address/storage/JsonAdaptedTutorialClassTest.java b/src/test/java/seedu/address/storage/JsonAdaptedTutorialClassTest.java index 9f5680e1ad6..0385f2456ab 100644 --- a/src/test/java/seedu/address/storage/JsonAdaptedTutorialClassTest.java +++ b/src/test/java/seedu/address/storage/JsonAdaptedTutorialClassTest.java @@ -10,6 +10,7 @@ import org.junit.jupiter.api.Test; +import seedu.address.commons.exceptions.IllegalValueException; import seedu.address.model.module.TutorialClass; import seedu.address.testutil.PersonBuilder; @@ -36,7 +37,7 @@ void toModelType_invalidTutorialName_throwsIllegalValueException() { JsonAdaptedTutorialClass jsonTutorialClass = new JsonAdaptedTutorialClass(INVALID_TUTORIAL_NAME, VALID_TEAMS_LIST, VALID_STUDENTS_LIST); String expectedMessage = TutorialClass.MESSAGE_CONSTRAINTS; - assertThrows(IllegalArgumentException.class, expectedMessage, jsonTutorialClass::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, jsonTutorialClass::toModelType); } } diff --git a/src/test/java/seedu/address/storage/JsonAdaptedTutorialTeamTest.java b/src/test/java/seedu/address/storage/JsonAdaptedTutorialTeamTest.java index c5a642c91e9..3c0fc3d30d9 100644 --- a/src/test/java/seedu/address/storage/JsonAdaptedTutorialTeamTest.java +++ b/src/test/java/seedu/address/storage/JsonAdaptedTutorialTeamTest.java @@ -10,6 +10,7 @@ import org.junit.jupiter.api.Test; +import seedu.address.commons.exceptions.IllegalValueException; import seedu.address.model.module.TutorialTeam; import seedu.address.testutil.PersonBuilder; @@ -36,7 +37,7 @@ void toModelType_invalidTeamName_throwsIllegalValueException() { JsonAdaptedTutorialTeam jsonTutorialTeam = new JsonAdaptedTutorialTeam(INVALID_TEAM_NAME, VALID_TEAM_SIZE, VALID_STUDENTS_LIST); String expectedMessage = TutorialTeam.MESSAGE_NAME_CONSTRAINTS; - assertThrows(IllegalArgumentException.class, expectedMessage, jsonTutorialTeam::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, jsonTutorialTeam::toModelType); } @Test @@ -44,7 +45,7 @@ void toModelType_invalidTeamSize_throwsIllegalValueException() { JsonAdaptedTutorialTeam jsonTutorialTeam = new JsonAdaptedTutorialTeam(VALID_TEAM_NAME, INVALID_TEAM_SIZE, VALID_STUDENTS_LIST); String expectedMessage = TutorialTeam.MESSAGE_SIZE_CONSTRAINTS; - assertThrows(IllegalArgumentException.class, expectedMessage, jsonTutorialTeam::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, jsonTutorialTeam::toModelType); } } From 29e7690e0c090f2f4aee65f67805154a1a726dd8 Mon Sep 17 00:00:00 2001 From: Zack-Tay Date: Thu, 28 Mar 2024 15:58:41 +0800 Subject: [PATCH 10/15] Enhance Allocate command to include add by email or index --- build.gradle | 4 + .../AllocateStudentToTeamByEmailCommand.java | 110 ++++++++++++++++ .../AllocateStudentToTeamByIndexCommand.java | 117 ++++++++++++++++++ .../AllocateStudentToTeamByStuIdCommand.java} | 41 +++--- .../AllocateStudentToTeamCommand.java | 85 +++++++++++++ .../logic/parser/AddressBookParser.java | 2 +- .../AllocateStudentToTeamCommandParser.java | 36 ++++-- .../java/seedu/address/model/AddressBook.java | 40 ++++-- src/main/java/seedu/address/model/Model.java | 23 +++- .../seedu/address/model/ModelManager.java | 34 ++++- .../address/model/ReadOnlyAddressBook.java | 5 +- .../address/model/module/TutorialTeam.java | 12 +- .../seedu/address/model/person/Email.java | 10 ++ .../model/person/UniquePersonList.java | 12 ++ .../logic/commands/AddStudentCommandTest.java | 20 ++- .../seedu/address/model/AddressBookTest.java | 16 ++- 16 files changed, 497 insertions(+), 70 deletions(-) create mode 100644 src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByEmailCommand.java create mode 100644 src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByIndexCommand.java rename src/main/java/seedu/address/logic/commands/{AllocateStudentToTeamCommand.java => allocatestudenttoteamcommands/AllocateStudentToTeamByStuIdCommand.java} (71%) create mode 100644 src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamCommand.java diff --git a/build.gradle b/build.gradle index 8dba104ccbd..05ad2306835 100644 --- a/build.gradle +++ b/build.gradle @@ -20,6 +20,10 @@ checkstyle { toolVersion = '10.2' } +run { + enableAssertions = true +} + test { useJUnitPlatform() finalizedBy jacocoTestReport diff --git a/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByEmailCommand.java b/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByEmailCommand.java new file mode 100644 index 00000000000..5a4e998b063 --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByEmailCommand.java @@ -0,0 +1,110 @@ +package seedu.address.logic.commands.allocatestudenttoteamcommands; + +import static java.util.Objects.requireNonNull; +import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TEAMNAME; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TUTORIALCLASS; + +import seedu.address.commons.util.ToStringBuilder; +import seedu.address.logic.commands.CommandResult; +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.model.Model; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; +import seedu.address.model.person.Email; +import seedu.address.model.person.Person; + +/** + * Allocates a student to a team in a tutorial Class in TAHelper. + */ +public class AllocateStudentToTeamByEmailCommand extends AllocateStudentToTeamCommand { + + public static final String COMMAND_WORD = "/allocate_team"; + + public static final String MESSAGE_USAGE = COMMAND_WORD + ": Allocates a student a team in the tutorial class.\n" + + "Parameters: " + + PREFIX_EMAIL + "EMAIL " + + PREFIX_MODULECODE + "MODULE CODE " + + PREFIX_TUTORIALCLASS + "TUTORIAL CLASS " + + PREFIX_TEAMNAME + "TEAM NAME" + + "Example: " + COMMAND_WORD + " " + + PREFIX_EMAIL + "zack@bmail.com " + + PREFIX_MODULECODE + "CS2101 " + + PREFIX_TUTORIALCLASS + "T01 " + + PREFIX_TEAMNAME + "Team 1 "; + + private final Email email; + private final ModuleCode moduleCode; + private final TutorialClass tutorialClass; + private final TutorialTeam tutorialTeam; + + /** + * Creates an AllocateStudentToTeam object. + */ + public AllocateStudentToTeamByEmailCommand(Email email, ModuleCode moduleCode, + TutorialClass tutorialClass, TutorialTeam tutorialTeam) { + this.email = email; + this.moduleCode = moduleCode; + this.tutorialClass = tutorialClass; + this.tutorialTeam = tutorialTeam; + } + + @Override + public CommandResult execute(Model model) throws CommandException { + requireNonNull(model); + + if (model.findTutorialClassFromList(tutorialClass, moduleCode) == null) { + throw new CommandException(String.format(MESSAGE_CLASS_DOES_NOT_EXIST, tutorialClass, moduleCode)); + } + + ModuleCode module = model.findModuleFromList(moduleCode); + TutorialClass tutClass = model.findTutorialClassFromList(tutorialClass, module); + + Person student = model.getUniquePersonList().getPersonByEmail(email); + TutorialTeam tutTeam = model.getTutorialTeam(tutClass, tutorialTeam); + + if (student == null) { + throw new CommandException(MESSAGE_STUDENT_DOES_NOT_EXIST); + } + + if (tutTeam == null) { + throw new CommandException(String.format(MESSAGE_TEAM_DOES_NOT_EXIST, tutorialTeam, tutClass)); + } + + // throws commandException if any condition fails + checkAllocateCondition(model, student, tutClass, tutTeam); + model.allocateStudentToTeam(student, tutTeam); + + return new CommandResult(String.format(MESSAGE_SUCCESS, tutTeam)); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + + // instanceof handles nulls + if (!(other instanceof AllocateStudentToTeamCommand)) { + return false; + } + + AllocateStudentToTeamByEmailCommand otherAllocateCommand = (AllocateStudentToTeamByEmailCommand) other; + return this.email.equals(otherAllocateCommand.email) + && this.moduleCode.equals(otherAllocateCommand.moduleCode) + && this.tutorialClass.equals(otherAllocateCommand.tutorialClass) + && this.tutorialTeam.equals(otherAllocateCommand.tutorialTeam); + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .add("email", email) + .add("moduleCode", moduleCode) + .add("tutorialClass", tutorialClass) + .add("tutorialTeam", tutorialTeam) + .toString(); + } +} diff --git a/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByIndexCommand.java b/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByIndexCommand.java new file mode 100644 index 00000000000..a652f7353cf --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByIndexCommand.java @@ -0,0 +1,117 @@ +package seedu.address.logic.commands.allocatestudenttoteamcommands; + +import static java.util.Objects.requireNonNull; +import static seedu.address.logic.parser.CliSyntax.PREFIX_INDEX; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TEAMNAME; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TUTORIALCLASS; + +import seedu.address.commons.core.index.Index; +import seedu.address.commons.util.CollectionUtil; +import seedu.address.commons.util.ToStringBuilder; +import seedu.address.logic.commands.CommandResult; +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.model.Model; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; +import seedu.address.model.person.Person; + +/** + * Allocates a student to a team in a tutorial Class in TAHelper. + */ +public class AllocateStudentToTeamByIndexCommand extends AllocateStudentToTeamCommand { + + public static final String COMMAND_WORD = "/allocate_team"; + + public static final String MESSAGE_USAGE = COMMAND_WORD + ": Allocates a student a team in the tutorial class.\n" + + "Parameters: " + + PREFIX_INDEX + "INDEX " + + PREFIX_MODULECODE + "MODULE CODE " + + PREFIX_TUTORIALCLASS + "TUTORIAL CLASS " + + PREFIX_TEAMNAME + "TEAM NAME" + + "Example: " + COMMAND_WORD + " " + + PREFIX_INDEX + "1 " + + PREFIX_MODULECODE + "CS2101 " + + PREFIX_TUTORIALCLASS + "T01 " + + PREFIX_TEAMNAME + "Team 1 "; + + public static final String MESSAGE_PERSON_INDEX_NOT_FOUND = + "Student at index %s not found inside tutorial class %s"; + private final Index index; + private final ModuleCode moduleCode; + private final TutorialClass tutorialClass; + private final TutorialTeam tutorialTeam; + + /** + * Creates an AllocateStudentToTeam object. + */ + public AllocateStudentToTeamByIndexCommand(Index index, ModuleCode moduleCode, + TutorialClass tutorialClass, TutorialTeam tutorialTeam) { + CollectionUtil.requireAllNonNull(index, moduleCode, tutorialClass, tutorialTeam); + this.index = index; + this.moduleCode = moduleCode; + this.tutorialClass = tutorialClass; + this.tutorialTeam = tutorialTeam; + } + + @Override + public CommandResult execute(Model model) throws CommandException { + requireNonNull(model); + + if (model.findTutorialClassFromList(tutorialClass, moduleCode) == null) { + throw new CommandException(String.format(MESSAGE_CLASS_DOES_NOT_EXIST, tutorialClass, moduleCode)); + } + + ModuleCode module = model.findModuleFromList(moduleCode); + TutorialClass tutClass = model.findTutorialClassFromList(tutorialClass, module); + + Person studentToAllocate; + try { + studentToAllocate = model.getStudentsInTeamList().get(index.getZeroBased()); + } catch (IndexOutOfBoundsException err) { + throw new CommandException( + String.format(MESSAGE_PERSON_INDEX_NOT_FOUND, index.getOneBased(), tutClass)); + } + + TutorialTeam tutTeam = model.getTutorialTeam(tutClass, tutorialTeam); + + if (tutTeam == null) { + throw new CommandException(MESSAGE_STUDENT_DOES_NOT_EXIST); + } + + // throws commandException if any condition fails + checkAllocateCondition(model, studentToAllocate, tutClass, tutTeam); + model.allocateStudentToTeam(studentToAllocate, tutTeam); + + return new CommandResult(String.format(MESSAGE_SUCCESS, tutTeam)); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + + // instanceof handles nulls + if (!(other instanceof AllocateStudentToTeamCommand)) { + return false; + } + + AllocateStudentToTeamByIndexCommand otherAllocateCommand = (AllocateStudentToTeamByIndexCommand) other; + return this.index.equals(otherAllocateCommand.index) + && this.moduleCode.equals(otherAllocateCommand.moduleCode) + && this.tutorialClass.equals(otherAllocateCommand.tutorialClass) + && this.tutorialTeam.equals(otherAllocateCommand.tutorialTeam); + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .add("index", index) + .add("moduleCode", moduleCode) + .add("tutorialClass", tutorialClass) + .add("tutorialTeam", tutorialTeam) + .toString(); + } +} diff --git a/src/main/java/seedu/address/logic/commands/AllocateStudentToTeamCommand.java b/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByStuIdCommand.java similarity index 71% rename from src/main/java/seedu/address/logic/commands/AllocateStudentToTeamCommand.java rename to src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByStuIdCommand.java index 9c5e1377fce..0492ca2bc3b 100644 --- a/src/main/java/seedu/address/logic/commands/AllocateStudentToTeamCommand.java +++ b/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByStuIdCommand.java @@ -1,4 +1,4 @@ -package seedu.address.logic.commands; +package seedu.address.logic.commands.allocatestudenttoteamcommands; import static java.util.Objects.requireNonNull; import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; @@ -8,17 +8,19 @@ import seedu.address.commons.util.CollectionUtil; import seedu.address.commons.util.ToStringBuilder; +import seedu.address.logic.commands.CommandResult; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.model.Model; import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; import seedu.address.model.module.TutorialTeam; +import seedu.address.model.person.Person; import seedu.address.model.person.StudentId; /** * Allocates a student to a team in a tutorial Class in TAHelper. */ -public class AllocateStudentToTeamCommand extends Command { +public class AllocateStudentToTeamByStuIdCommand extends AllocateStudentToTeamCommand { public static final String COMMAND_WORD = "/allocate_team"; @@ -33,14 +35,7 @@ public class AllocateStudentToTeamCommand extends Command { + PREFIX_MODULECODE + "CS2101 " + PREFIX_TUTORIALCLASS + "T01 " + PREFIX_TEAMNAME + "Team 1 "; - - public static final String MESSAGE_SUCCESS = "Allocate student to team: "; - public static final String MESSAGE_TEAM_DOES_NOT_EXIST = "Team does not exist in tutorial class"; - public static final String MESSAGE_DUPLICATE_PERSON_IN_TEAM = "This person already exists in a team" - + " in the tutorial class!"; - - public static final String MESSAGE_CLASS_DOES_NOT_EXIST = "Tutorial class does not exist in module"; - public static final String MESSAGE_TEAM_SIZE_EXCEEDED = "Max team size reached"; + public static final String MESSAGE_STUDENT_DOES_NOT_EXIST = "Student does not exist in tutorial class"; private final StudentId studentId; private final ModuleCode moduleCode; @@ -50,7 +45,7 @@ public class AllocateStudentToTeamCommand extends Command { /** * Creates an AllocateStudentToTeam object. */ - public AllocateStudentToTeamCommand(StudentId studentId, ModuleCode moduleCode, + public AllocateStudentToTeamByStuIdCommand(StudentId studentId, ModuleCode moduleCode, TutorialClass tutorialClass, TutorialTeam tutorialTeam) { CollectionUtil.requireAllNonNull(studentId, moduleCode, tutorialClass, tutorialTeam); this.studentId = studentId; @@ -70,26 +65,22 @@ public CommandResult execute(Model model) throws CommandException { ModuleCode module = model.findModuleFromList(moduleCode); TutorialClass tutClass = model.findTutorialClassFromList(tutorialClass, module); - if (!model.hasTeamInTutorial(tutClass, tutorialTeam)) { - throw new CommandException(MESSAGE_TEAM_DOES_NOT_EXIST); - } - + Person student = model.getUniquePersonList().getPerson(studentId); TutorialTeam tutTeam = model.getTutorialTeam(tutClass, tutorialTeam); - if (tutTeam == null) { - throw new CommandException(MESSAGE_TEAM_DOES_NOT_EXIST); - } - if (model.isStudentInAnyTeam(studentId, tutClass)) { - throw new CommandException(MESSAGE_DUPLICATE_PERSON_IN_TEAM); + if (student == null) { + throw new CommandException(MESSAGE_STUDENT_DOES_NOT_EXIST); } - if (model.hasTeamSizeExceeded(tutTeam)) { - throw new CommandException(MESSAGE_TEAM_SIZE_EXCEEDED); + if (tutTeam == null) { + throw new CommandException(String.format(MESSAGE_TEAM_DOES_NOT_EXIST, tutorialTeam, tutClass)); } - model.allocateStudentToTeam(studentId, tutTeam); + // throws commandException if any condition fails + checkAllocateCondition(model, student, tutClass, tutTeam); + model.allocateStudentToTeam(student, tutTeam); - return new CommandResult(String.format(MESSAGE_SUCCESS)); + return new CommandResult(String.format(MESSAGE_SUCCESS, tutTeam)); } @Override @@ -103,7 +94,7 @@ public boolean equals(Object other) { return false; } - AllocateStudentToTeamCommand otherAllocateCommand = (AllocateStudentToTeamCommand) other; + AllocateStudentToTeamByStuIdCommand otherAllocateCommand = (AllocateStudentToTeamByStuIdCommand) other; return this.studentId.equals(otherAllocateCommand.studentId) && this.moduleCode.equals(otherAllocateCommand.moduleCode) && this.tutorialClass.equals(otherAllocateCommand.tutorialClass) diff --git a/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamCommand.java b/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamCommand.java new file mode 100644 index 00000000000..8a92630a68d --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamCommand.java @@ -0,0 +1,85 @@ +package seedu.address.logic.commands.allocatestudenttoteamcommands; + +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TEAMNAME; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TUTORIALCLASS; + +import seedu.address.commons.util.ToStringBuilder; +import seedu.address.logic.commands.Command; +import seedu.address.logic.commands.CommandResult; +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.model.Model; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; +import seedu.address.model.person.Person; + +/** + * Allocates a student to a team in a tutorial Class in TAHelper. + */ +public abstract class AllocateStudentToTeamCommand extends Command { + + public static final String COMMAND_WORD = "/allocate_team"; + + public static final String MESSAGE_USAGE = COMMAND_WORD + ": Allocates a student a team in the tutorial class.\n" + + "Parameters: " + + PREFIX_STUDENTID + "STUDENT ID " + + PREFIX_MODULECODE + "MODULE CODE " + + PREFIX_TUTORIALCLASS + "TUTORIAL CLASS " + + PREFIX_TEAMNAME + "TEAM NAME" + + "Example: " + COMMAND_WORD + " " + + PREFIX_STUDENTID + "A1234567L " + + PREFIX_MODULECODE + "CS2101 " + + PREFIX_TUTORIALCLASS + "T01 " + + PREFIX_TEAMNAME + "Team 1 "; + + public static final String MESSAGE_SUCCESS = "Allocate student to team: %s"; + public static final String MESSAGE_STUDENT_NOT_IN_TUTORIAL = "Student needs to be in that tutorial group first."; + public static final String MESSAGE_STUDENT_DOES_NOT_EXIST = "Student does not exist in system"; + public static final String MESSAGE_TEAM_DOES_NOT_EXIST = "Team %s does not exist in tutorial class %s"; + public static final String MESSAGE_CLASS_DOES_NOT_EXIST = "Tutorial class %s does not exist in module %s"; + + public static final String MESSAGE_DUPLICATE_PERSON_IN_TEAM = "This person already exists in a team" + + " in the tutorial class %s!"; + public static final String MESSAGE_TEAM_SIZE_EXCEEDED = "Max team size of %d reached"; + + public AllocateStudentToTeamCommand() {} + + @Override + public abstract CommandResult execute(Model model) throws CommandException; + @Override + public abstract boolean equals(Object other); + + /** + * Check the condition needed to allocate the student to a tutorial team. + * @param model + * @param student + * @param tutClass + * @param tutorialTeam + * @throws CommandException + */ + public void checkAllocateCondition(Model model, Person student, TutorialClass tutClass, TutorialTeam tutorialTeam) + throws CommandException { + if (!model.isStudentInTutorialClass(student, tutClass)) { + throw new CommandException(MESSAGE_STUDENT_NOT_IN_TUTORIAL); + } + + if (!model.hasTeamInTutorial(tutClass, tutorialTeam)) { + throw new CommandException(String.format(MESSAGE_TEAM_DOES_NOT_EXIST, tutorialTeam, tutClass)); + } + + if (model.isStudentInAnyTeam(student, tutClass)) { + throw new CommandException(String.format(MESSAGE_DUPLICATE_PERSON_IN_TEAM, tutClass)); + } + + if (model.hasTeamSizeExceeded(tutorialTeam)) { + throw new CommandException(String.format(MESSAGE_TEAM_SIZE_EXCEEDED, tutorialTeam.getTeamSize())); + } + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .toString(); + } +} diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java index d882a7b627d..e5ef85920ae 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java @@ -11,7 +11,6 @@ import seedu.address.logic.commands.AddClassCommand; import seedu.address.logic.commands.AddStudentCommand; import seedu.address.logic.commands.AddTeamCommand; -import seedu.address.logic.commands.AllocateStudentToTeamCommand; import seedu.address.logic.commands.ClearCommand; import seedu.address.logic.commands.Command; import seedu.address.logic.commands.DeleteClassCommand; @@ -26,6 +25,7 @@ import seedu.address.logic.commands.SearchStudentCommand; import seedu.address.logic.commands.SortStudentCommand; import seedu.address.logic.commands.addstudenttoclasscommands.AddStudentToClassCommand; +import seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamCommand; import seedu.address.logic.commands.deletestudentcommands.DeleteStudentCommand; import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassCommand; import seedu.address.logic.parser.exceptions.ParseException; diff --git a/src/main/java/seedu/address/logic/parser/AllocateStudentToTeamCommandParser.java b/src/main/java/seedu/address/logic/parser/AllocateStudentToTeamCommandParser.java index 8df61286c54..014ad99b96d 100644 --- a/src/main/java/seedu/address/logic/parser/AllocateStudentToTeamCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/AllocateStudentToTeamCommandParser.java @@ -1,6 +1,8 @@ package seedu.address.logic.parser; import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; +import static seedu.address.logic.parser.CliSyntax.PREFIX_INDEX; import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; import static seedu.address.logic.parser.CliSyntax.PREFIX_TEAMNAME; @@ -8,11 +10,16 @@ import java.util.stream.Stream; -import seedu.address.logic.commands.AllocateStudentToTeamCommand; +import seedu.address.commons.core.index.Index; +import seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamByEmailCommand; +import seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamByIndexCommand; +import seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamByStuIdCommand; +import seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamCommand; import seedu.address.logic.parser.exceptions.ParseException; import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; import seedu.address.model.module.TutorialTeam; +import seedu.address.model.person.Email; import seedu.address.model.person.StudentId; /** @@ -27,25 +34,38 @@ public class AllocateStudentToTeamCommandParser implements Parser students = tutorialClass.getStudents(); + return students.stream().anyMatch(student::isSamePerson); + } + /** * Allocates the {@code studentId} to the {@code tutorialTeam} * @param tutorialTeam to allocate the student into. */ - public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam) { - requireNonNull(studentId); + public void allocateStudentToTeam(Person student, TutorialTeam tutorialTeam) { + requireNonNull(student); requireNonNull(tutorialTeam); - Person student = persons.getPerson(studentId); tutorialTeam.addStudent(student); } @@ -265,18 +275,23 @@ public boolean hasTeamSizeExceeded(TutorialTeam tutorialTeam) { requireNonNull(tutorialTeam); int maxTeamSize = tutorialTeam.getTeamSize(); int currTeamSize = tutorialTeam.getStudents().size(); - return (maxTeamSize >= currTeamSize); + System.out.println(currTeamSize); + System.out.println(maxTeamSize); + return (maxTeamSize <= currTeamSize); }; /** - * Returns true if the {@code studentId} is already in a team of {@code tutorialClass}. + * Returns true if the {@code student} is already in a team of {@code tutorialClass}. * @param tutorialClass of the teams. - * @param studentId to search for. + * @param student to search for. */ - public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialClass) { + public boolean isStudentInAnyTeam(Person student, TutorialClass tutorialClass) { boolean isStudentExist = false; for (TutorialTeam tutorialTeam : tutorialClass.getTeams()) { - isStudentExist = tutorialTeam.hasStudentVerified(studentId, tutorialTeam); + isStudentExist = tutorialTeam.hasStudentVerified(student, tutorialTeam); + if (isStudentExist) { + break; + } } return isStudentExist; }; @@ -352,6 +367,11 @@ public String toString() { .toString(); } + @Override + public UniquePersonList getUniquePersonList() { + return this.persons; + } + @Override public ObservableList getPersonList() { return persons.asUnmodifiableObservableList(); @@ -363,7 +383,7 @@ public ObservableList getTutorialTeamList() { } @Override - public ObservableList getStudentInTeamList() { + public ObservableList getStudentsInTeamList() { return studentsInTeam.asUnmodifiableObservableList(); } diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index 836fb4ab4c0..c779816a16e 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -12,6 +12,7 @@ import seedu.address.model.person.Email; import seedu.address.model.person.Person; import seedu.address.model.person.StudentId; +import seedu.address.model.person.UniquePersonList; /** * The API of the Model component. @@ -124,24 +125,24 @@ public interface Model { void addModule(ModuleCode module); /** - * Allocates the {@code studentId} to the {@code tutorialTeam} + * Allocates the {@code student} to the {@code tutorialTeam} * @param tutorialTeam to allocate the student into. */ - public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam); + void allocateStudentToTeam(Person student, TutorialTeam tutorialTeam); /** * Returns true if a team with the same identity as {@code tutorialTeam} exists in the {@code tutorialClass} * @param tutorialClass of the tutorialTeam. * @param tutorialTeam to check if it exist. */ - public boolean hasTeamInTutorial(TutorialClass tutorialClass, TutorialTeam tutorialTeam); + boolean hasTeamInTutorial(TutorialClass tutorialClass, TutorialTeam tutorialTeam); /** - * Returns true if the {@code studentId} is already in a team of {@code tutorialClass}. + * Returns true if the {@code student} is already in a team of {@code tutorialClass}. * @param tutorialClass of the teams. - * @param studentId to search for. + * @param student to search for. */ - public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialClass); + public boolean isStudentInAnyTeam(Person student, TutorialClass tutorialClass); /** * Returns true if the {@code tutorialTeam} size has exceeded its limit. @@ -150,6 +151,14 @@ public interface Model { */ boolean hasTeamSizeExceeded(TutorialTeam tutorialTeam); + /** + * Checks if a student is in the {@code tutorialClass} of that {@code moduleCode} + * @param student to check if student exist in tutorialClass. + * @param tutorialClass to check if the student is in + * @return a boolean indicating if the student is in that {@code tutorialClass} + */ + boolean isStudentInTutorialClass(Person student, TutorialClass tutorialClass); + /** * Adds the given person to the given tutorial class in the given module. */ @@ -164,8 +173,10 @@ public interface Model { /** Returns an unmodifiable view of the filtered person list */ ObservableList getFilteredPersonList(); + UniquePersonList getUniquePersonList(); ObservableList getFilteredModuleList(); ObservableList getSortedPersonList(Comparator comparator); + ObservableList getStudentsInTeamList(); /** * Updates the filter of the filtered person list to filter by the given {@code predicate}. diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index b3c71f10d78..19e0852599b 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -18,6 +18,7 @@ import seedu.address.model.person.Email; import seedu.address.model.person.Person; import seedu.address.model.person.StudentId; +import seedu.address.model.person.UniquePersonList; /** @@ -147,8 +148,9 @@ public void addPerson(Person person) { } @Override - public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam) { - addressBook.allocateStudentToTeam(studentId, tutorialTeam); + public void allocateStudentToTeam(Person student, TutorialTeam tutorialTeam) { + requireAllNonNull(student, tutorialTeam); + addressBook.allocateStudentToTeam(student, tutorialTeam); } @Override @@ -180,9 +182,15 @@ public boolean hasTeamSizeExceeded(TutorialTeam tutorialTeam) { }; @Override - public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialClass) { - requireAllNonNull(studentId, tutorialClass); - return addressBook.isStudentInAnyTeam(studentId, tutorialClass); + public boolean isStudentInAnyTeam(Person student, TutorialClass tutorialClass) { + requireAllNonNull(student, tutorialClass); + return addressBook.isStudentInAnyTeam(student, tutorialClass); + } + + @Override + public boolean isStudentInTutorialClass(Person student, TutorialClass tutorialClass) { + requireAllNonNull(student, tutorialClass); + return addressBook.isStudentInTutorialClass(student, tutorialClass); } @Override @@ -218,6 +226,17 @@ public void setPerson(Person target, Person editedPerson) { public ObservableList getFilteredPersonList() { return filteredPersons; } + + /** + * Returns an unmodifiable view of the list of {@code Person} backed by the internal list of + * {@code versionedAddressBook} + * @Return UniquePersonList. + */ + @Override + public UniquePersonList getUniquePersonList() { + return addressBook.getUniquePersonList(); + } + /** * Returns an unmodifiable view of the list of {@code Module} backed by the internal list of * {@code versionedAddressBook} @@ -233,6 +252,11 @@ public ObservableList getSortedPersonList(Comparator comparator) return addressBook.getSortedPersonList(); } + @Override + public ObservableList getStudentsInTeamList() { + return addressBook.getStudentsInTeamList(); + } + @Override public void updateFilteredPersonList(Predicate predicate) { requireNonNull(predicate); diff --git a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java index df019f04605..9af19877712 100644 --- a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java +++ b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java @@ -7,6 +7,7 @@ import seedu.address.model.module.TutorialClass; import seedu.address.model.module.TutorialTeam; import seedu.address.model.person.Person; +import seedu.address.model.person.UniquePersonList; /** * Unmodifiable view of an address book @@ -19,6 +20,8 @@ public interface ReadOnlyAddressBook { */ ObservableList getPersonList(); + UniquePersonList getUniquePersonList(); + /** * Returns an unmodifiable view of the modules list. * This list will not contain any duplicate modules. @@ -28,7 +31,7 @@ public interface ReadOnlyAddressBook { void setSortedPersonList(Comparator comparator); ObservableList getSortedPersonList(); ObservableList getTutorialTeamList(); - ObservableList getStudentInTeamList(); + ObservableList getStudentsInTeamList(); /** * Checks if the address book contains the specified module code. diff --git a/src/main/java/seedu/address/model/module/TutorialTeam.java b/src/main/java/seedu/address/model/module/TutorialTeam.java index b10b5ea5a74..ed15bb1dfaa 100644 --- a/src/main/java/seedu/address/model/module/TutorialTeam.java +++ b/src/main/java/seedu/address/model/module/TutorialTeam.java @@ -6,7 +6,6 @@ import java.util.ArrayList; import seedu.address.model.person.Person; -import seedu.address.model.person.StudentId; /** * Represents a Module's tutorial team. @@ -178,19 +177,18 @@ public boolean hasStudent(Person student) { } /** - * Checks if a student exist by their id - * @param studentId + * Checks if a student exist, check by their studentId. * @return true if a person is in the list of students */ - public boolean hasStudentVerified(StudentId studentId, TutorialTeam tutorialTeam) { + public boolean hasStudentVerified(Person student, TutorialTeam tutorialTeam) { ArrayList teamList = tutorialTeam.getStudents(); if (teamList.size() == 0 || teamList == null) { return false; } - for (Person student : teamList) { - if (student.getStudentId().value.equals(studentId.value)) { + for (Person eachStudent : teamList) { + if (eachStudent.getStudentId().value.equals(student.getStudentId().value)) { return true; - }; + } } return false; diff --git a/src/main/java/seedu/address/model/person/Email.java b/src/main/java/seedu/address/model/person/Email.java index be632593a54..8db1c6147c1 100644 --- a/src/main/java/seedu/address/model/person/Email.java +++ b/src/main/java/seedu/address/model/person/Email.java @@ -44,6 +44,16 @@ public Email(String email) { value = email; } + /** + * Returns true if 2 student emails are identical to {@code email} id value. + * @param email + * @return boolean if they are identical. + */ + public boolean isSameEmail(Email email) { + requireNonNull(email); + return this.value.equals(email.value); + } + /** * Returns if a given string is a valid email. */ diff --git a/src/main/java/seedu/address/model/person/UniquePersonList.java b/src/main/java/seedu/address/model/person/UniquePersonList.java index 7cd4693d39e..8c474901587 100644 --- a/src/main/java/seedu/address/model/person/UniquePersonList.java +++ b/src/main/java/seedu/address/model/person/UniquePersonList.java @@ -48,6 +48,18 @@ public Person getPerson(StudentId studentId) { return personMatch; } + /** + * Return the Person object if the list contains the person with {@code email} + */ + public Person getPersonByEmail(Email email) { + requireNonNull(email); + Person personMatch = internalList.stream() + .filter(person -> person.getEmail().isSameEmail(email)) + .findFirst() + .orElse(null); + return personMatch; + } + /** * Adds a person to the list. * The person must not already exist in the list. diff --git a/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java b/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java index bb6c921cfcb..ddf9ca005f8 100644 --- a/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java @@ -29,6 +29,7 @@ import seedu.address.model.person.Email; import seedu.address.model.person.Person; import seedu.address.model.person.StudentId; +import seedu.address.model.person.UniquePersonList; import seedu.address.testutil.PersonBuilder; /** @@ -140,7 +141,7 @@ public void setAddressBook(ReadOnlyAddressBook newData) { } @Override - public void allocateStudentToTeam(StudentId studentId, TutorialTeam tutorialTeam) { + public void allocateStudentToTeam(Person student, TutorialTeam tutorialTeam) { throw new AssertionError("This method should not be called."); }; @@ -155,7 +156,12 @@ public TutorialTeam getTutorialTeam(TutorialClass tutorialClass, TutorialTeam tu } @Override - public boolean isStudentInAnyTeam(StudentId studentId, TutorialClass tutorialClass) { + public boolean isStudentInAnyTeam(Person student, TutorialClass tutorialClass) { + throw new AssertionError("This method should not be called."); + }; + + @Override + public boolean isStudentInTutorialClass(Person student, TutorialClass tutorialClass) { throw new AssertionError("This method should not be called."); }; @@ -243,6 +249,16 @@ public ObservableList getSortedPersonList(Comparator comparator) throw new AssertionError("This method should not be called."); } + @Override + public UniquePersonList getUniquePersonList() { + throw new AssertionError("This method should not be called."); + } + + @Override + public ObservableList getStudentsInTeamList() { + throw new AssertionError("This method should not be called."); + } + @Override public void updateFilteredPersonList(Predicate predicate) { throw new AssertionError("This method should not be called."); diff --git a/src/test/java/seedu/address/model/AddressBookTest.java b/src/test/java/seedu/address/model/AddressBookTest.java index b09a50d894b..9246a24400c 100644 --- a/src/test/java/seedu/address/model/AddressBookTest.java +++ b/src/test/java/seedu/address/model/AddressBookTest.java @@ -25,6 +25,7 @@ import seedu.address.model.module.TutorialClass; import seedu.address.model.module.TutorialTeam; import seedu.address.model.person.Person; +import seedu.address.model.person.UniquePersonList; import seedu.address.model.person.exceptions.DuplicatePersonException; import seedu.address.testutil.PersonBuilder; @@ -170,11 +171,6 @@ public ObservableList getModuleList() { return null; } - @Override - public ObservableList getStudentInTeamList() { - return null; - } - @Override public void setSortedPersonList(Comparator comparator) { sortedPersons = FXCollections.observableArrayList(); @@ -199,6 +195,16 @@ public ObservableList getTutorialList() { return null; } + @Override + public ObservableList getStudentsInTeamList() { + return null; + } + + @Override + public UniquePersonList getUniquePersonList() { + return null; + } + @Override public ObservableList getTutorialTeamList() { return null; From a76ec8f23de2d10bad38f4b2833564004a98210e Mon Sep 17 00:00:00 2001 From: Zack-Tay Date: Fri, 29 Mar 2024 00:33:22 +0800 Subject: [PATCH 11/15] Update Testcases to improve codeCoverage * Create Test cases for the Allocate Student to Team command --- .../AllocateStudentToTeamByIndexCommand.java | 4 +- .../AllocateStudentToTeamByStuIdCommand.java | 1 - .../java/seedu/address/model/AddressBook.java | 7 +- src/main/java/seedu/address/model/Model.java | 1 + .../seedu/address/model/ModelManager.java | 5 + .../address/model/ReadOnlyAddressBook.java | 1 + .../logic/commands/AddStudentCommandTest.java | 5 + .../AllocateStudentToTeamCommandTest.java | 152 ++++++++++++++++++ .../logic/commands/CommandTestUtil.java | 3 + .../seedu/address/model/AddressBookTest.java | 111 +++++++++++++ 10 files changed, 285 insertions(+), 5 deletions(-) create mode 100644 src/test/java/seedu/address/logic/commands/AllocateStudentToTeamCommandTest.java diff --git a/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByIndexCommand.java b/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByIndexCommand.java index a652f7353cf..e55a0db0aaf 100644 --- a/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByIndexCommand.java +++ b/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByIndexCommand.java @@ -37,7 +37,7 @@ public class AllocateStudentToTeamByIndexCommand extends AllocateStudentToTeamCo + PREFIX_TEAMNAME + "Team 1 "; public static final String MESSAGE_PERSON_INDEX_NOT_FOUND = - "Student at index %s not found inside tutorial class %s"; + "Student at index %d not found inside tutorial class %s"; private final Index index; private final ModuleCode moduleCode; private final TutorialClass tutorialClass; @@ -68,7 +68,7 @@ public CommandResult execute(Model model) throws CommandException { Person studentToAllocate; try { - studentToAllocate = model.getStudentsInTeamList().get(index.getZeroBased()); + studentToAllocate = model.getStudentsInTutorialClass(tutClass).get(index.getZeroBased()); } catch (IndexOutOfBoundsException err) { throw new CommandException( String.format(MESSAGE_PERSON_INDEX_NOT_FOUND, index.getOneBased(), tutClass)); diff --git a/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByStuIdCommand.java b/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByStuIdCommand.java index 0492ca2bc3b..c7c8feb83d2 100644 --- a/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByStuIdCommand.java +++ b/src/main/java/seedu/address/logic/commands/allocatestudenttoteamcommands/AllocateStudentToTeamByStuIdCommand.java @@ -35,7 +35,6 @@ public class AllocateStudentToTeamByStuIdCommand extends AllocateStudentToTeamCo + PREFIX_MODULECODE + "CS2101 " + PREFIX_TUTORIALCLASS + "T01 " + PREFIX_TEAMNAME + "Team 1 "; - public static final String MESSAGE_STUDENT_DOES_NOT_EXIST = "Student does not exist in tutorial class"; private final StudentId studentId; private final ModuleCode moduleCode; diff --git a/src/main/java/seedu/address/model/AddressBook.java b/src/main/java/seedu/address/model/AddressBook.java index 185df9fe816..dd3e48afbd4 100644 --- a/src/main/java/seedu/address/model/AddressBook.java +++ b/src/main/java/seedu/address/model/AddressBook.java @@ -275,8 +275,6 @@ public boolean hasTeamSizeExceeded(TutorialTeam tutorialTeam) { requireNonNull(tutorialTeam); int maxTeamSize = tutorialTeam.getTeamSize(); int currTeamSize = tutorialTeam.getStudents().size(); - System.out.println(currTeamSize); - System.out.println(maxTeamSize); return (maxTeamSize <= currTeamSize); }; @@ -387,6 +385,11 @@ public ObservableList getStudentsInTeamList() { return studentsInTeam.asUnmodifiableObservableList(); } + @Override + public ObservableList getStudentsInTutorialClass(TutorialClass tutorialClass) { + return FXCollections.observableList(tutorialClass.getStudents()); + } + @Override public ObservableList getModuleList() { return FXCollections.observableList(modules); diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index c779816a16e..8317e8889eb 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -177,6 +177,7 @@ public interface Model { ObservableList getFilteredModuleList(); ObservableList getSortedPersonList(Comparator comparator); ObservableList getStudentsInTeamList(); + ObservableList getStudentsInTutorialClass(TutorialClass tutorialClass); /** * Updates the filter of the filtered person list to filter by the given {@code predicate}. diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index 19e0852599b..91a17bb3c1f 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -257,6 +257,11 @@ public ObservableList getStudentsInTeamList() { return addressBook.getStudentsInTeamList(); } + @Override + public ObservableList getStudentsInTutorialClass(TutorialClass tutorialClass) { + return addressBook.getStudentsInTutorialClass(tutorialClass); + } + @Override public void updateFilteredPersonList(Predicate predicate) { requireNonNull(predicate); diff --git a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java index 9af19877712..3c20a25b3e0 100644 --- a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java +++ b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java @@ -43,4 +43,5 @@ public interface ReadOnlyAddressBook { void addModule(ModuleCode moduleCode, String description); ObservableList getTutorialList(); + ObservableList getStudentsInTutorialClass(TutorialClass tutorialClass); } diff --git a/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java b/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java index ddf9ca005f8..4593f89e914 100644 --- a/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/AddStudentCommandTest.java @@ -259,6 +259,11 @@ public ObservableList getStudentsInTeamList() { throw new AssertionError("This method should not be called."); } + @Override + public ObservableList getStudentsInTutorialClass(TutorialClass tutorialClass) { + throw new AssertionError("This method should not be called."); + } + @Override public void updateFilteredPersonList(Predicate predicate) { throw new AssertionError("This method should not be called."); diff --git a/src/test/java/seedu/address/logic/commands/AllocateStudentToTeamCommandTest.java b/src/test/java/seedu/address/logic/commands/AllocateStudentToTeamCommandTest.java new file mode 100644 index 00000000000..8c89a7e6e04 --- /dev/null +++ b/src/test/java/seedu/address/logic/commands/AllocateStudentToTeamCommandTest.java @@ -0,0 +1,152 @@ +package seedu.address.logic.commands; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_STUDENT_ID_BOB; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TEAM_NAME; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TUTORIAL_AMY; +import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure; +import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; +import static seedu.address.testutil.TypicalPersons.ALICE; +import static seedu.address.testutil.TypicalPersons.AMY; +import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import seedu.address.commons.core.index.Index; +import seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamByEmailCommand; +import seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamByIndexCommand; +import seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamByStuIdCommand; +import seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamCommand; +import seedu.address.model.Model; +import seedu.address.model.ModelManager; +import seedu.address.model.UserPrefs; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; +import seedu.address.model.person.Person; +import seedu.address.testutil.PersonBuilder; + + +public class AllocateStudentToTeamCommandTest { + private Model model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); + private TutorialClass tutorialClass; + private Person validPerson; + private Person validOtherPerson; + private ModuleCode newModule; + private TutorialTeam newTeam; + + @BeforeEach + public void setUp() { + validPerson = new PersonBuilder(AMY).build(); + validOtherPerson = new PersonBuilder(ALICE) + .withStudentId(VALID_STUDENT_ID_BOB).withEmail(VALID_EMAIL_BOB).build(); + newModule = new ModuleCode(VALID_MODULE_AMY); + model.addModule(newModule); + model.addPerson(validPerson); + model.addPerson(validOtherPerson); + TutorialClass newTutorialClass = new TutorialClass(VALID_TUTORIAL_AMY); + newModule.addTutorialClass(newTutorialClass); + tutorialClass = newTutorialClass; + newTeam = new TutorialTeam(VALID_TEAM_NAME, 1); + tutorialClass.addTeam(newTeam); + } + + @Test + public void invalidAllocationToTeam_indexNotInSystem_failure() { + Index index = Index.fromOneBased(1000); + AllocateStudentToTeamByIndexCommand allocateStudentToTeamByIndexCommand = new + AllocateStudentToTeamByIndexCommand(index, + newModule, tutorialClass, newTeam); + assertCommandFailure(allocateStudentToTeamByIndexCommand, model, + String.format(AllocateStudentToTeamByIndexCommand.MESSAGE_PERSON_INDEX_NOT_FOUND, + index.getOneBased(), tutorialClass)); + } + + @Test + public void invalidAllocationToTeam_teamSizeExceeded_failure() { + tutorialClass.addStudent(validPerson); + newTeam.addStudent(validPerson); + tutorialClass.addStudent(validOtherPerson); + AllocateStudentToTeamByStuIdCommand allocateStudentToTeamByStuIdCommand = new + AllocateStudentToTeamByStuIdCommand(validOtherPerson.getStudentId(), newModule, tutorialClass, newTeam); + AllocateStudentToTeamByEmailCommand allocateStudentToTeamByEmailCommand = new + AllocateStudentToTeamByEmailCommand(validOtherPerson.getEmail(), newModule, tutorialClass, newTeam); + assertCommandFailure(allocateStudentToTeamByStuIdCommand, model, + String.format(AllocateStudentToTeamCommand.MESSAGE_TEAM_SIZE_EXCEEDED, newTeam.getTeamSize())); + assertCommandFailure(allocateStudentToTeamByEmailCommand, model, + String.format(AllocateStudentToTeamCommand.MESSAGE_TEAM_SIZE_EXCEEDED, newTeam.getTeamSize())); + } + + @Test + public void validAllocationToTeam_indexInSystem_success() { + tutorialClass.addStudent(validPerson); + tutorialClass.addStudent(validOtherPerson); + Index index = Index.fromZeroBased(1); + AllocateStudentToTeamByIndexCommand allocateStudentToTeamByIndexCommand = new + AllocateStudentToTeamByIndexCommand(index, + newModule, tutorialClass, newTeam); + assertCommandSuccess(allocateStudentToTeamByIndexCommand, model, + String.format(AllocateStudentToTeamByIndexCommand.MESSAGE_SUCCESS, newTeam), model); + } + + + @Test + public void invalidAllocationToTeam_studentNotInTutorialClass_failure() { + AllocateStudentToTeamByStuIdCommand allocateStudentToTeamByStuIdCommand = new + AllocateStudentToTeamByStuIdCommand(validPerson.getStudentId(), newModule, tutorialClass, newTeam); + AllocateStudentToTeamByEmailCommand allocateStudentToTeamByEmailCommand = new + AllocateStudentToTeamByEmailCommand(validPerson.getEmail(), newModule, tutorialClass, newTeam); + assertCommandFailure(allocateStudentToTeamByStuIdCommand, model, + String.format(AllocateStudentToTeamCommand.MESSAGE_STUDENT_NOT_IN_TUTORIAL)); + assertCommandFailure(allocateStudentToTeamByEmailCommand, model, + String.format(AllocateStudentToTeamCommand.MESSAGE_STUDENT_NOT_IN_TUTORIAL)); + } + + @Test + public void equals() { + // creation of 2 allocation command based on 2 different student ID adding to the same team under + // the same module and tutorial class. + AllocateStudentToTeamByStuIdCommand allocateStudentToTeamByStuIdCommand = + new AllocateStudentToTeamByStuIdCommand(validPerson.getStudentId(), newModule, tutorialClass, newTeam); + AllocateStudentToTeamByStuIdCommand allocateOtherStudentToTeamByStuIdCommand = + new AllocateStudentToTeamByStuIdCommand(validOtherPerson.getStudentId(), + newModule, tutorialClass, newTeam); + + // same object --> returns true + assertTrue(allocateStudentToTeamByStuIdCommand.equals(allocateStudentToTeamByStuIdCommand)); + + // different type --> returns false + assertFalse(allocateStudentToTeamByStuIdCommand.equals("hello world")); + + // null --> returns false + assertFalse(allocateStudentToTeamByStuIdCommand.equals(null)); + + // allocation of a different person --> returns false + assertFalse(allocateStudentToTeamByStuIdCommand.equals(allocateOtherStudentToTeamByStuIdCommand)); + + // creation of 2 allocation command based on 2 different student emails adding to the same team under + // the same module and tutorial class. + AllocateStudentToTeamByEmailCommand allocateStudentToTeamByEmailCommand = + new AllocateStudentToTeamByEmailCommand(validPerson.getEmail(), newModule, tutorialClass, newTeam); + AllocateStudentToTeamByEmailCommand allocateOtherStudentToTeamByEmailCommand = + new AllocateStudentToTeamByEmailCommand(validOtherPerson.getEmail(), + newModule, tutorialClass, newTeam); + + // same object --> returns true + assertTrue(allocateStudentToTeamByEmailCommand.equals(allocateStudentToTeamByEmailCommand)); + + // different type --> returns false + assertFalse(allocateStudentToTeamByEmailCommand.equals("hello world")); + + // null --> returns false + assertFalse(allocateStudentToTeamByEmailCommand.equals(null)); + + // allocation of a different person --> returns false + assertFalse(allocateStudentToTeamByEmailCommand.equals(allocateOtherStudentToTeamByEmailCommand)); + } + +} diff --git a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java b/src/test/java/seedu/address/logic/commands/CommandTestUtil.java index 5599bf61c76..3fbb88f8c72 100644 --- a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java +++ b/src/test/java/seedu/address/logic/commands/CommandTestUtil.java @@ -41,6 +41,7 @@ public class CommandTestUtil { public static final String VALID_MODULE_BOB = "CS1231S"; public static final String VALID_TUTORIAL_AMY = "T01"; public static final String VALID_TUTORIAL_BOB = "T02"; + public static final String VALID_TEAM_NAME = "Team 1"; public static final String VALID_TAG_HUSBAND = "husband"; public static final String VALID_TAG_FRIEND = "friend"; @@ -61,6 +62,8 @@ public class CommandTestUtil { public static final String INVALID_PERSON_EMAIL = "test@example.com"; public static final String INVALID_PERSON_STUDENT_ID = "A2222222A"; + public static final String INVALID_MODULECODE = "22JK"; + public static final String INVALID_TUTORIAL = "HHHH@"; // Team related constants public static final String VALID_TEAM_NAME_AMY = "Team 1"; diff --git a/src/test/java/seedu/address/model/AddressBookTest.java b/src/test/java/seedu/address/model/AddressBookTest.java index 9246a24400c..8f0dd24f525 100644 --- a/src/test/java/seedu/address/model/AddressBookTest.java +++ b/src/test/java/seedu/address/model/AddressBookTest.java @@ -6,6 +6,10 @@ import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY; import static seedu.address.logic.commands.CommandTestUtil.VALID_STUDENT_ID_AMY; import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TEAM_NAME; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TEAM_NAME_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TEAM_NAME_BOB; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TUTORIAL_AMY; import static seedu.address.testutil.Assert.assertThrows; import static seedu.address.testutil.TypicalPersons.ALICE; import static seedu.address.testutil.TypicalPersons.AMY; @@ -103,6 +107,108 @@ public void hasPersonWithEmail_personNotInAddressBook_returnsFalse() { assertFalse(addressBook.hasPersonWithEmail(AMY.getEmail())); } + @Test + public void isStudentInTutorialClass_personNotInClass_failure() { + Person person = new PersonBuilder(ALICE).build(); + TutorialClass tutorialClass = new TutorialClass(VALID_TUTORIAL_AMY); + assertFalse(addressBook.isStudentInTutorialClass(person, tutorialClass)); + } + + @Test + public void isStudentInTutorialClass_classIsNull_failure() { + Person person = new PersonBuilder(ALICE).build(); + assertThrows(NullPointerException.class, () -> addressBook.isStudentInTutorialClass(person, null)); + } + + @Test + public void isStudentInTutorialClass_personIsNull_failure() { + TutorialClass tutorialClass = new TutorialClass(VALID_TUTORIAL_AMY); + assertThrows(NullPointerException.class, () -> addressBook.isStudentInTutorialClass(null, tutorialClass)); + } + + @Test + public void allocateStudentToTeam_personIsNull_failure() { + TutorialTeam tutorialTeam = new TutorialTeam(VALID_TEAM_NAME); + assertThrows(NullPointerException.class, () -> addressBook.allocateStudentToTeam(null, tutorialTeam)); + } + + @Test + public void allocateStudentToTeam_tutorialTeamIsNull_failure() { + Person person = new PersonBuilder(ALICE).build(); + assertThrows(NullPointerException.class, () -> addressBook.allocateStudentToTeam(person, null)); + } + + @Test + public void hasTeamSizeExceeded_teamSizeNotExceeded_failure() { + TutorialTeam tutorialTeam = new TutorialTeam(VALID_TEAM_NAME, 3); + assertFalse(addressBook.hasTeamSizeExceeded(tutorialTeam)); + } + + @Test + public void hasTeamSizeExceeded_teamSizeExceeded_success() { + TutorialTeam tutorialTeam = new TutorialTeam(VALID_TEAM_NAME, 1); + Person student = new PersonBuilder(ALICE).build(); + tutorialTeam.addStudent(student); + assertTrue(addressBook.hasTeamSizeExceeded(tutorialTeam)); + } + + @Test + public void isStudentInAnyTeam_studentNotInAny_failure() { + TutorialClass tutorialClass = new TutorialClass(); + TutorialTeam firstTutorialTeam = new TutorialTeam(VALID_TEAM_NAME, 1); + TutorialTeam secondtutorialTeam = new TutorialTeam(VALID_TEAM_NAME_BOB, 2); + tutorialClass.addTeam(firstTutorialTeam); + tutorialClass.addTeam(secondtutorialTeam); + Person person = new PersonBuilder(ALICE).build(); + assertFalse(addressBook.isStudentInAnyTeam(person, tutorialClass)); + } + + @Test + public void isStudentInAnyTeam_studentIsNull_failure() { + TutorialClass tutorialClass = new TutorialClass(VALID_TUTORIAL_AMY); + TutorialTeam firstTutorialTeam = new TutorialTeam(VALID_TEAM_NAME_AMY, 1); + TutorialTeam secondtutorialTeam = new TutorialTeam(VALID_TEAM_NAME_BOB, 2); + tutorialClass.addTeam(firstTutorialTeam); + tutorialClass.addTeam(secondtutorialTeam); + assertFalse(addressBook.isStudentInAnyTeam(null, tutorialClass)); + } + + @Test + public void hasTeamInTutorial_success() { + TutorialClass tutorialClass = new TutorialClass(VALID_TUTORIAL_AMY); + TutorialTeam firstTutorialTeam = new TutorialTeam(VALID_TEAM_NAME, 1); + TutorialTeam secondtutorialTeam = new TutorialTeam(VALID_TEAM_NAME_BOB, 2); + tutorialClass.addTeam(firstTutorialTeam); + tutorialClass.addTeam(secondtutorialTeam); + assertTrue(addressBook.hasTeamInTutorial(tutorialClass, firstTutorialTeam)); + } + + @Test + public void hasTeamInTutorial_tutorialTeamIsNull_failure() { + TutorialClass tutorialClass = new TutorialClass(VALID_TUTORIAL_AMY); + TutorialTeam firstTutorialTeam = new TutorialTeam(VALID_TEAM_NAME, 1); + TutorialTeam secondtutorialTeam = new TutorialTeam(VALID_TEAM_NAME_BOB, 2); + tutorialClass.addTeam(firstTutorialTeam); + tutorialClass.addTeam(secondtutorialTeam); + assertThrows(NullPointerException.class, () -> addressBook.hasTeamInTutorial(tutorialClass, null)); + } + + @Test + public void getTutorialTeam_tutorialTeamIsNull_failure() { + TutorialClass tutorialClass = new TutorialClass(VALID_TUTORIAL_AMY); + assertThrows(NullPointerException.class, () -> addressBook.getTutorialTeam(tutorialClass, null)); + } + + @Test + public void getTutorialTeam_tutorialTeamMatch_success() { + TutorialClass tutorialClass = new TutorialClass(VALID_TUTORIAL_AMY); + TutorialTeam firstTutorialTeam = new TutorialTeam(VALID_TEAM_NAME, 1); + TutorialTeam secondtutorialTeam = new TutorialTeam(VALID_TEAM_NAME_BOB, 2); + tutorialClass.addTeam(firstTutorialTeam); + tutorialClass.addTeam(secondtutorialTeam); + assertEquals(addressBook.getTutorialTeam(tutorialClass, firstTutorialTeam), firstTutorialTeam); + } + @Test public void hasPersonWithEmail_differentPersonWithSameEmail_returnsTrue() { addressBook.addPerson(AMY); @@ -200,6 +306,11 @@ public ObservableList getStudentsInTeamList() { return null; } + @Override + public ObservableList getStudentsInTutorialClass(TutorialClass tutorialClass) { + return null; + } + @Override public UniquePersonList getUniquePersonList() { return null; From 37bd6ad0a733e9fec97e48dfbe96a2d021ea65ff Mon Sep 17 00:00:00 2001 From: Jajared Date: Fri, 29 Mar 2024 01:46:02 +0800 Subject: [PATCH 12/15] Add dg section for add students to class --- docs/DeveloperGuide.md | 156 ++++++++++++------- docs/diagrams/AddStudentToClassSequence.puml | 77 +++++++++ 2 files changed, 179 insertions(+), 54 deletions(-) create mode 100644 docs/diagrams/AddStudentToClassSequence.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 0b2cfe48812..c6d6b304af5 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -241,15 +241,14 @@ The following activity diagram summarizes what happens when a user executes a ne **Aspect: How undo & redo executes:** +- **Alternative 1 (current choice):** Saves the entire address book. + - Pros: Easy to implement. + - Cons: May have performance issues in terms of memory usage. -* **Alternative 1 (current choice):** Saves the entire address book. - * Pros: Easy to implement. - * Cons: May have performance issues in terms of memory usage. - -- **Alternative 2:** Individual command knows how to undo/redo by +* **Alternative 2:** Individual command knows how to undo/redo by itself. - * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted). - * Cons: We must ensure that the implementation of each individual command are correct. + - Pros: Will use less memory (e.g. for `delete`, just save the person being deleted). + - Cons: We must ensure that the implementation of each individual command are correct. _{more aspects and alternatives to be added}_ @@ -257,6 +256,55 @@ _{more aspects and alternatives to be added}_ _{Explain here how the data archiving feature will be implemented}_ +### \[Implemented\] Add student to tutorial class + +The implemented search mechanism is facilitated by the abstract `AddStudentToClassCommand` along with its specific commands `AddStudentToClassByEmailCommand`, `AddStudentToClassByIdCommand` and `AddStudentToClassByIndexCommand`, as well as the parser `AddStudentToClassCommandParser`. + +`AddStudentToClassCommandParser` implements the `Parser` interface and its operations. + +`AddStudentToClassCommand` extends the `Command` class and contains auxillary operations that supports the mechanism, such as retrieving the target tutorial class. Each of the following commands further extends `AddStudentToClassCommand` based on its specific functionality: + +- `AddStudentToClassByEmailCommand` — Add student based on specified email to a tutorial class. +- `AddStudentToClassByIdCommand` — Add student based on specified student id to a tutorial class. +- `AddStudentToClassByIndexCommand` — Add student based on specified index (viewable from the UI) to a tutorial class + +Given below is an example usage scenario and how the add mechanism behaves at each step. + +Example: `/add_student_to_class id/A01234567X module/CS2103T tutorial/T09` + + + +Step 1. The user executes `/add_student_to_class id/A01234567X module/CS2103T tutorial/T09` command to add the particular student with id `A01234567X` to the module `CS2103T` and tutorial class `T09`. +The `execute` command calls `AddressBookParser#parseCommand()`, which extracts the command word of the command and the arguments of the command. + +Step 2. The `AddressBookParser` then creates a new `AddStudentToClassCommandParser` and calls `AddStudentToClassCommandParser#parse()`, with `id/A01234567X`, `module/CS2103T` and `tutorial/T09` as the arguments. + +Step 3. The `AddStudentToClassCommandParser` parses the arguments to determine what parameter is used to specify the target student (email, index or id). Additionally, the `ModuleCode` and `TutorialClass` is determined. + + + +**Important Note:** The tutorial class and module code must be specified. To determine the target student, only one prefix should used per command. If there are multiple prefixes, the target priority is as follows: By Index -> By Student ID -> By Email + + + +Step 4. Based on the prefix used, `AddStudentToClassCommandParser` creates the specific `AddStudentToClassCommand` accordingly. Each command contains a specific predicate to find the student. + +Step 5. `LogicManager` calls `AddStudentToClassCommand#execute()`, passing `Model` as an argument. This method retrieves the target module and tutorial class. Then, the method retrieves the student to add using the defined predicate. Throughout the process, error handling (e.g checking for invalid student/module/tutorial) is utilised to mitigate potential discrepancies and ensure valid execution. + +Step 6. Finally, a `CommandResult` is created and the student is added to the tutorial class. + +#### Design considerations: + +**Aspect: Modularity and extensibility:** + +- **Alternative 1 (current choice):** Seperate each specific command into a different class, while overlapping code is abstracted to an abstract class. + - Pros: Specific commands are instantiated and thus can be easily traced and is more readable. Any reusable code is defined in the abstract class which can then be reused by the subclasses. + - Cons: May have duplicate code to a certain extent. + +* **Alternative 2:** Lump into one generic command that handles each parameter accordingly. + - Pros: Reduces duplicate code and much cleaner (i.e only 1 command class is executed). + - Cons: The logic handling may be slightly more complex and messy within the class as all parameters have to be dealt with seperately (potentially using different logic). + ### \[Implemented\] Searching for students The implemented search mechanism is facilitated by `SearchStudentCommand` and `SearchStudentCommandParser`. @@ -278,7 +326,7 @@ Step 1. The user executes `/search_student name/Bob` command to find students wi The `execute` command calls `AddressBookParser#parseCommand()`, which extracts the command word of the command and the arguments of the command. -Step 2. The `AddressBookParser` then creates a new `SearchStudentCommandParser` and calling +Step 2. The `AddressBookParser` then creates a new `SearchStudentCommandParser` and calling `SearchStudentCommandParser#parse()`, with `name/Bob` as the argument. Step 3. The `SearchStudentCommandParser` parses the arguments to determine which prefix the user is searching in. @@ -301,13 +349,12 @@ Step 6. Finally, a `CommandResult` is created and the new filtered is displayed ### Design considerations: - **Alternative 1 (current choice):** Only one prefix allowed per command. - - Pros: Easy to implement. + - Pros: Easy to implement. - Cons: Does not allow users to fine tune searches based on multiple fields. - - **Alternative 2:** Allow for multiple prefixes. - Pros: Users can filter searches to a higher degree - Cons: Handling combinations of different fields could be complex - + --- ## **Documentation, logging, testing, configuration, dev-ops** @@ -338,15 +385,15 @@ Step 6. Finally, a `CommandResult` is created and the new filtered is displayed Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*` -| Priority | As a …​ | I want to …​ | So that I can…​ | -|----------|---------|-------------------------------------------------------------------------------|------------------------------------------------------------------------| -| `* * *` | TA | add new students to a class | maintain an up-to-date list of enrolled students. | -| `* * *` | TA | add partial info of students | still add students even if I don’t have all their information. | -| `* * *` | TA | delete a student from my class if they drop the module/class | keep my class list accurate and up-to-date. | +| Priority | As a …​ | I want to …​ | So that I can…​ | +| -------- | ------- | ------------------------------------------------------------------------------ | ----------------------------------------------------------------------- | +| `* * *` | TA | add new students to a class | maintain an up-to-date list of enrolled students. | +| `* * *` | TA | add partial info of students | still add students even if I don’t have all their information. | +| `* * *` | TA | delete a student from my class if they drop the module/class | keep my class list accurate and up-to-date. | | `* * ` | TA | search for my students based on their NUS ID, emails, names or tutorial groups | locate details of students without having to go through the entire list | -| `* * *` | TA | view all students and their particulars | have a comprehensive overview of the enrolled students in my class. | -| `* *` | TA | add/remove different modules I am teaching | manage my teaching assignments efficiently. | -| `* * *` | TA | view all the tutorial classes and their information | visibility into the schedule and details of all tutorial classes. | +| `* * *` | TA | view all students and their particulars | have a comprehensive overview of the enrolled students in my class. | +| `* *` | TA | add/remove different modules I am teaching | manage my teaching assignments efficiently. | +| `* * *` | TA | view all the tutorial classes and their information | visibility into the schedule and details of all tutorial classes. | _{More to be added}_ @@ -361,7 +408,7 @@ _{More to be added}_ 1. User specifies the student to be added. 2. System adds the student to the list of students. 3. System indicates successful addition of new student. -Use case ends. + Use case ends. **Extensions:** @@ -387,7 +434,7 @@ Use case ends. 1. User specifies the student to be deleted. 2. System deletes the student from the list of students and tutorial group (if any). -Use case ends. + Use case ends. **Extensions:** @@ -401,7 +448,7 @@ Use case ends. - Use case ends. - 1c. Invalid input command. - 1c1: Returns an error indicating command not recognised and provides the correct command format. -
+
#### Use case 3: Search for students @@ -409,7 +456,7 @@ Use case ends. 1. User specifies the student to be searched for. 2. System generates a list of matching entries according to specified parameters. -Use case ends. + Use case ends. **Extensions:** @@ -421,7 +468,7 @@ Use case ends. - Use case ends. - 2a. Partial match for specified parameter. - 2a1. System will display all matching results for the specified value. -
+
#### Use case 4: View all students @@ -429,7 +476,7 @@ Use case ends. 1. User wants to view all students' information. 2. System displays all students information (name, email, student id and tutorial class). -Use case ends. + Use case ends. **Extensions:** @@ -440,7 +487,7 @@ Use case ends. - 1b1. System will ignore those arguments and execute the command as usual. - 2a. No existing students in the list. - 2a1. System will return a message indicating that there are no students in the list. -
+
#### Use case 5: Add new tutorial class @@ -448,7 +495,7 @@ Use case ends. 1. User specifies the class to be added. 2. System adds the tutorial class. -Use case ends. + Use case ends. **Extensions:** @@ -461,7 +508,7 @@ Use case ends. - 1c. The specified tutorial class already exists. - 1c1: Returns an error indicating that the tutorial class already exists - Use case ends. -
+
#### Use case 6: Delete tutorial class @@ -469,25 +516,28 @@ Use case ends. 1. User specifies the class to be deleted. 2. System deletes the tutorial class. -Use case ends. + Use case ends. **Extensions:** + - 1a. Invalid input command. - 1a1. Return an error indicating command not recognised and provides the correct command format. - Use case ends. - 1b. The tutorial class specified does not exist. - 1b1. Returns an error indicating invalid tutorial class and shows the list of tutorial classes available. - Use case ends. -
+
#### Use case 7: View all classes **MSS** + 1. User wants to view all classes. 2. System shows a list of all available classes. -Use case ends. + Use case ends. **Extensions** + - 1a. Invalid input command. - 1a1. Return an error indicating command not recognised and provides the correct command format. - Use case ends. @@ -495,8 +545,7 @@ Use case ends. - 1b1. System will ignore those arguments and execute the comamnd as usual. - 2a. There are no existing classes. - 2a1. System will return a message indicating that there are no existing classes in the list. -
- +
### Non-Functional Requirements @@ -509,17 +558,16 @@ Use case ends. 7. Should be usable by a person who is TA-ing for the first time. 8. Should provide comprehensive error messages and guidelines to recover from errors due to user input. 9. Should provide a comprehensive and well-designed user documentation to guide users on how to use TAHelper. -10. Should provide a comprehensive and well-designed developer documentation to guide developer on how to improve and develop TAHelper further. - +10. Should provide a comprehensive and well-designed developer documentation to guide developer on how to improve and develop TAHelper further. ### Glossary -* **Mainstream OS**: Windows, Linux, Unix, MacOS -* **Private contact detail**: A contact detail that is not meant to be shared with others -* **TA (Teaching Assistant)**: An individual who is responsible for teaching a tutorial class of University students. -* **TAHelper**: A contact management application to help TAs keep track of students in classes they teach -* **GUI**: Graphical User Interface -* **MSS**: Main Success Scenario +- **Mainstream OS**: Windows, Linux, Unix, MacOS +- **Private contact detail**: A contact detail that is not meant to be shared with others +- **TA (Teaching Assistant)**: An individual who is responsible for teaching a tutorial class of University students. +- **TAHelper**: A contact management application to help TAs keep track of students in classes they teach +- **GUI**: Graphical User Interface +- **MSS**: Main Success Scenario --- @@ -538,16 +586,16 @@ testers are expected to do more _exploratory_ testing. 1. Initial launch - 1. Download the jar file and copy into an empty folder + 1. Download the jar file and copy into an empty folder - 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum. + 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum. 1. Saving window preferences - 1. Resize the window to an optimum size. Move the window to a different location. Close the window. + 1. Resize the window to an optimum size. Move the window to a different location. Close the window. - 1. Re-launch the app by double-clicking the jar file.
- Expected: The most recent window size and location is retained. + 1. Re-launch the app by double-clicking the jar file.
+ Expected: The most recent window size and location is retained. 1. _{ more test cases …​ }_ @@ -555,16 +603,16 @@ testers are expected to do more _exploratory_ testing. 1. Deleting a person while all persons are being shown - 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list. + 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list. - 1. Test case: `delete 1`
- Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated. + 1. Test case: `delete 1`
+ Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated. - 1. Test case: `delete 0`
- Expected: No person is deleted. Error details shown in the status message. Status bar remains the same. + 1. Test case: `delete 0`
+ Expected: No person is deleted. Error details shown in the status message. Status bar remains the same. - 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)
- Expected: Similar to previous. + 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)
+ Expected: Similar to previous. 1. _{ more test cases …​ }_ @@ -572,6 +620,6 @@ testers are expected to do more _exploratory_ testing. 1. Dealing with missing/corrupted data files - 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_ + 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_ 1. _{ more test cases …​ }_ diff --git a/docs/diagrams/AddStudentToClassSequence.puml b/docs/diagrams/AddStudentToClassSequence.puml new file mode 100644 index 00000000000..7f072607c9e --- /dev/null +++ b/docs/diagrams/AddStudentToClassSequence.puml @@ -0,0 +1,77 @@ +@startuml +!include style.puml +skinparam ArrowFontStyle plain + +box Logic LOGIC_COLOR_T1 +participant ":LogicManager" as LogicManager LOGIC_COLOR +participant ":AddressBookParser" as AddressBookParser LOGIC_COLOR +participant ":AddStudentToClassCommandParser" as AddStudentToClassCommandParser LOGIC_COLOR +participant "s:AddStudentToClassByIdCommand" as AddStudentToClassByIdCommand LOGIC_COLOR +participant "r:CommandResult" as CommandResult LOGIC_COLOR +end box + +box Model MODEL_COLOR_T1 +participant "m:Model" as Model MODEL_COLOR +end box + +[-> LogicManager : execute(addStudent) +activate LogicManager + +LogicManager -> AddressBookParser : parseCommand(addStudent) +activate AddressBookParser + +create AddStudentToClassCommandParser +AddressBookParser -> AddStudentToClassCommandParser +activate AddStudentToClassCommandParser + +AddStudentToClassCommandParser --> AddressBookParser +deactivate AddStudentToClassCommandParser + +AddressBookParser -> AddStudentToClassCommandParser : parse(studentId, module, tutorial) +activate AddStudentToClassCommandParser + +create AddStudentToClassByIdCommand +AddStudentToClassCommandParser -> AddStudentToClassByIdCommand +activate AddStudentToClassByIdCommand + +AddStudentToClassByIdCommand --> AddStudentToClassCommandParser : +deactivate AddStudentToClassByIdCommand + +AddStudentToClassCommandParser --> AddressBookParser : s +deactivate AddStudentToClassCommandParser +'Hidden arrow to position the destroy marker below the end of the activation bar. +AddStudentToClassCommandParser -[hidden]-> AddressBookParser +destroy AddStudentToClassCommandParser + +AddressBookParser --> LogicManager : s +deactivate AddressBookParser + +LogicManager -> AddStudentToClassByIdCommand : execute(m) +activate AddStudentToClassByIdCommand + +AddStudentToClassByIdCommand -> Model : searchPersonByPredicate() +activate Model + +Model --> AddStudentToClassByIdCommand : p +deactivate Model + +AddStudentToClassByIdCommand -> Model : addPersonToTutorialClass(p) +activate Model + +Model --> AddStudentToClassByIdCommand +deactivate Model + +create CommandResult +AddStudentToClassByIdCommand -> CommandResult +activate CommandResult + +CommandResult --> AddStudentToClassByIdCommand +deactivate CommandResult + +AddStudentToClassByIdCommand --> LogicManager : r +deactivate AddStudentToClassByIdCommand + +[<--LogicManager +deactivate LogicManager + +@enduml From 39cc6ec113899b3b4fab808eb6cf3dbb80811ef9 Mon Sep 17 00:00:00 2001 From: Zack-Tay Date: Fri, 29 Mar 2024 02:28:10 +0800 Subject: [PATCH 13/15] Update Testcase for Allocate Student Parser and Json Adapted files * Create new Test Cases for AllocateStudentToTeamCommandParser and add more test cases to JsonAdapted files. --- .../AllocateStudentToTeamCommandTest.java | 112 ++++++++++++++++++ .../logic/commands/CommandTestUtil.java | 3 + ...llocateStudentToTeamCommandParserTest.java | 58 +++++++++ .../storage/JsonAdaptedTutorialClassTest.java | 7 ++ .../storage/JsonAdaptedTutorialTeamTest.java | 7 ++ 5 files changed, 187 insertions(+) create mode 100644 src/test/java/seedu/address/logic/parser/AllocateStudentToTeamCommandParserTest.java diff --git a/src/test/java/seedu/address/logic/commands/AllocateStudentToTeamCommandTest.java b/src/test/java/seedu/address/logic/commands/AllocateStudentToTeamCommandTest.java index 8c89a7e6e04..4cc46ada069 100644 --- a/src/test/java/seedu/address/logic/commands/AllocateStudentToTeamCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/AllocateStudentToTeamCommandTest.java @@ -1,14 +1,22 @@ package seedu.address.logic.commands; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; +import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL; import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_STUDENT_ID; import static seedu.address.logic.commands.CommandTestUtil.VALID_STUDENT_ID_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_TEAM_NAME; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TEAM_NAME_BOB; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TEAM_NAME_NEW; import static seedu.address.logic.commands.CommandTestUtil.VALID_TUTORIAL_AMY; import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure; import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; +import static seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamCommand.MESSAGE_DUPLICATE_PERSON_IN_TEAM; +import static seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamCommand.MESSAGE_STUDENT_DOES_NOT_EXIST; +import static seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamCommand.MESSAGE_TEAM_DOES_NOT_EXIST; import static seedu.address.testutil.TypicalPersons.ALICE; import static seedu.address.testutil.TypicalPersons.AMY; import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; @@ -27,7 +35,9 @@ import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; import seedu.address.model.module.TutorialTeam; +import seedu.address.model.person.Email; import seedu.address.model.person.Person; +import seedu.address.model.person.StudentId; import seedu.address.testutil.PersonBuilder; @@ -38,6 +48,7 @@ public class AllocateStudentToTeamCommandTest { private Person validOtherPerson; private ModuleCode newModule; private TutorialTeam newTeam; + private TutorialTeam tutTeam; @BeforeEach public void setUp() { @@ -52,6 +63,8 @@ public void setUp() { newModule.addTutorialClass(newTutorialClass); tutorialClass = newTutorialClass; newTeam = new TutorialTeam(VALID_TEAM_NAME, 1); + tutTeam = new TutorialTeam(VALID_TEAM_NAME_BOB, 3); + tutorialClass.addTeam(tutTeam); tutorialClass.addTeam(newTeam); } @@ -81,6 +94,69 @@ public void invalidAllocationToTeam_teamSizeExceeded_failure() { String.format(AllocateStudentToTeamCommand.MESSAGE_TEAM_SIZE_EXCEEDED, newTeam.getTeamSize())); } + @Test + public void invalidAllocationToTeam_studentNull_failure() { + AllocateStudentToTeamByStuIdCommand allocateStudentToTeamByStuIdCommand = new + AllocateStudentToTeamByStuIdCommand(new StudentId(VALID_STUDENT_ID), newModule, tutorialClass, newTeam); + AllocateStudentToTeamByEmailCommand allocateStudentToTeamByEmailCommand = new + AllocateStudentToTeamByEmailCommand(new Email(VALID_EMAIL), newModule, tutorialClass, newTeam); + assertCommandFailure(allocateStudentToTeamByStuIdCommand, model, + String.format(MESSAGE_STUDENT_DOES_NOT_EXIST)); + assertCommandFailure(allocateStudentToTeamByEmailCommand, model, + String.format(MESSAGE_STUDENT_DOES_NOT_EXIST)); + } + + @Test + public void invalidAllocationToTeam_tutorialTeamNotExist_failure() { + TutorialTeam team = new TutorialTeam(VALID_TEAM_NAME_NEW); + + AllocateStudentToTeamByStuIdCommand allocateStudentToTeamByStuIdCommand = new + AllocateStudentToTeamByStuIdCommand(validPerson.getStudentId(), newModule, tutorialClass, + team); + AllocateStudentToTeamByEmailCommand allocateStudentToTeamByEmailCommand = new + AllocateStudentToTeamByEmailCommand(validPerson.getEmail(), newModule, tutorialClass, + team); + assertCommandFailure(allocateStudentToTeamByStuIdCommand, model, + String.format(MESSAGE_TEAM_DOES_NOT_EXIST, team, tutorialClass)); + assertCommandFailure(allocateStudentToTeamByEmailCommand, model, + String.format(MESSAGE_TEAM_DOES_NOT_EXIST, team, tutorialClass)); + } + + @Test + public void invalidAllocationToTeam_studentAlreadyInTeam_failure() { + tutorialClass.addStudent(validPerson); + newTeam.addStudent(validPerson); + AllocateStudentToTeamByStuIdCommand allocateStudentToTeamByStuIdCommand = new + AllocateStudentToTeamByStuIdCommand(validPerson.getStudentId(), newModule, tutorialClass, + tutTeam); + AllocateStudentToTeamByEmailCommand allocateStudentToTeamByEmailCommand = new + AllocateStudentToTeamByEmailCommand(validPerson.getEmail(), newModule, tutorialClass, + tutTeam); + assertCommandFailure(allocateStudentToTeamByStuIdCommand, model, + String.format(MESSAGE_DUPLICATE_PERSON_IN_TEAM, tutorialClass)); + assertCommandFailure(allocateStudentToTeamByEmailCommand, model, + String.format(MESSAGE_DUPLICATE_PERSON_IN_TEAM, tutorialClass)); + } + + + + @Test + public void validAllocationToTeam_byEmailOrStudentId_success() { + tutorialClass.addStudent(validPerson); + tutorialClass.addStudent(validOtherPerson); + AllocateStudentToTeamByStuIdCommand allocateStudentToTeamByStuIdCommand = new + AllocateStudentToTeamByStuIdCommand(validPerson.getStudentId(), + newModule, tutorialClass, tutTeam); + AllocateStudentToTeamByEmailCommand allocateStudentToTeamByEmailCommand = new + AllocateStudentToTeamByEmailCommand(validOtherPerson.getEmail(), + newModule, tutorialClass, tutTeam); + assertCommandSuccess(allocateStudentToTeamByStuIdCommand, model, + String.format(AllocateStudentToTeamByIndexCommand.MESSAGE_SUCCESS, tutTeam), model); + assertCommandSuccess(allocateStudentToTeamByEmailCommand, model, + String.format(AllocateStudentToTeamByEmailCommand.MESSAGE_SUCCESS, tutTeam), model); + } + + @Test public void validAllocationToTeam_indexInSystem_success() { tutorialClass.addStudent(validPerson); @@ -106,8 +182,30 @@ public void invalidAllocationToTeam_studentNotInTutorialClass_failure() { String.format(AllocateStudentToTeamCommand.MESSAGE_STUDENT_NOT_IN_TUTORIAL)); } + @Test + public void toString_test() { + tutorialClass.addStudent(validPerson); + AllocateStudentToTeamByStuIdCommand allocateStudentToTeamByStuIdCommand = + new AllocateStudentToTeamByStuIdCommand(validPerson.getStudentId(), newModule, tutorialClass, newTeam); + AllocateStudentToTeamByEmailCommand allocateOtherStudentToTeamByEmailCommand = + new AllocateStudentToTeamByEmailCommand(validOtherPerson.getEmail(), + newModule, tutorialClass, newTeam); + AllocateStudentToTeamByIndexCommand allocateStudentToTeamByIndexCommand = + new AllocateStudentToTeamByIndexCommand(Index.fromZeroBased(0), + newModule, tutorialClass, newTeam); + assertEquals(allocateOtherStudentToTeamByEmailCommand.toString(), + allocateOtherStudentToTeamByEmailCommand.toString()); + assertEquals(allocateStudentToTeamByStuIdCommand.toString(), + allocateStudentToTeamByStuIdCommand.toString()); + assertEquals(allocateStudentToTeamByIndexCommand.toString(), + allocateStudentToTeamByIndexCommand.toString()); + + } + @Test public void equals() { + tutorialClass.addStudent(validPerson); + tutorialClass.addStudent(validOtherPerson); // creation of 2 allocation command based on 2 different student ID adding to the same team under // the same module and tutorial class. AllocateStudentToTeamByStuIdCommand allocateStudentToTeamByStuIdCommand = @@ -147,6 +245,20 @@ public void equals() { // allocation of a different person --> returns false assertFalse(allocateStudentToTeamByEmailCommand.equals(allocateOtherStudentToTeamByEmailCommand)); + + + AllocateStudentToTeamByIndexCommand allocateOtherStudentToTeamByIndexCommand = + new AllocateStudentToTeamByIndexCommand(Index.fromZeroBased(1), + newModule, tutorialClass, newTeam); + + // same object + assertTrue(allocateOtherStudentToTeamByIndexCommand.equals(allocateOtherStudentToTeamByIndexCommand)); + + // different type --> returns false + assertFalse(allocateOtherStudentToTeamByIndexCommand.equals("hello world")); + + // null --> returns false + assertFalse(allocateOtherStudentToTeamByIndexCommand.equals(null)); } } diff --git a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java b/src/test/java/seedu/address/logic/commands/CommandTestUtil.java index 3fbb88f8c72..d801560be1a 100644 --- a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java +++ b/src/test/java/seedu/address/logic/commands/CommandTestUtil.java @@ -34,9 +34,11 @@ public class CommandTestUtil { public static final String VALID_NAME_BOB = "Bob Choo"; public static final String VALID_EMAIL_AMY = "amy@example.com"; public static final String VALID_EMAIL_BOB = "bob@example.com"; + public static final String VALID_EMAIL = "c@example.com"; public static final String VALID_STUDENT_ID_AMY = "A1111111Z"; public static final String VALID_STUDENT_ID_BOB = "A2222222Z"; + public static final String VALID_STUDENT_ID = "A3333333Z"; public static final String VALID_MODULE_AMY = "CS1101S"; public static final String VALID_MODULE_BOB = "CS1231S"; public static final String VALID_TUTORIAL_AMY = "T01"; @@ -68,6 +70,7 @@ public class CommandTestUtil { // Team related constants public static final String VALID_TEAM_NAME_AMY = "Team 1"; public static final String VALID_TEAM_NAME_BOB = "Team 2"; + public static final String VALID_TEAM_NAME_NEW = "Team 3"; public static final int VALID_TEAM_SIZE = 5; public static final String TEAM_NAME_DESC_AMY = " " + PREFIX_NAME + VALID_TEAM_NAME_AMY; public static final String TEAM_SIZE_DESC = " " + PREFIX_TEAM_SIZE + VALID_TEAM_SIZE; diff --git a/src/test/java/seedu/address/logic/parser/AllocateStudentToTeamCommandParserTest.java b/src/test/java/seedu/address/logic/parser/AllocateStudentToTeamCommandParserTest.java new file mode 100644 index 00000000000..e660d6c6a74 --- /dev/null +++ b/src/test/java/seedu/address/logic/parser/AllocateStudentToTeamCommandParserTest.java @@ -0,0 +1,58 @@ +package seedu.address.logic.parser; + +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.commands.CommandTestUtil.VALID_TEAM_NAME; +import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TEAMNAME; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TUTORIALCLASS; +import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; +import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; +import static seedu.address.model.module.ModuleCodeTest.VALID_MODULE_CODE; +import static seedu.address.model.module.ModuleCodeTest.VALID_TUTORIAL_1; +import static seedu.address.testutil.TypicalPersons.AMY; + +import org.junit.jupiter.api.Test; + +import seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamByEmailCommand; +import seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamByStuIdCommand; +import seedu.address.logic.commands.allocatestudenttoteamcommands.AllocateStudentToTeamCommand; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.module.TutorialTeam; +import seedu.address.model.person.Person; +import seedu.address.testutil.PersonBuilder; + +public class AllocateStudentToTeamCommandParserTest { + private AllocateStudentToTeamCommandParser parser = new AllocateStudentToTeamCommandParser(); + + @Test + public void parse_validArgs_returnsAllocateStudentToTeamCommand() { + Person person = new PersonBuilder(AMY).build(); + ModuleCode moduleCode = new ModuleCode(VALID_MODULE_CODE); + TutorialClass tutorialClass = new TutorialClass(VALID_TUTORIAL_1); + TutorialTeam tutorialTeam = new TutorialTeam(VALID_TEAM_NAME); + moduleCode.addTutorialClass(tutorialClass); + tutorialClass.addTeam(tutorialTeam); + AllocateStudentToTeamByStuIdCommand allocateStudentToTeamByStuIdCommand = + new AllocateStudentToTeamByStuIdCommand(person.getStudentId(), moduleCode, tutorialClass, tutorialTeam); + AllocateStudentToTeamByEmailCommand allocateStudentToTeamByEmailCommand = + new AllocateStudentToTeamByEmailCommand(person.getEmail(), moduleCode, tutorialClass, tutorialTeam); + String userInput = " " + PREFIX_MODULECODE + moduleCode.moduleCode + + " " + PREFIX_TUTORIALCLASS + tutorialClass.tutorialName + + " " + PREFIX_TEAMNAME + tutorialTeam.getTeamName(); + assertParseSuccess(parser, " " + PREFIX_STUDENTID + person.getStudentId().value + userInput, + allocateStudentToTeamByStuIdCommand); + assertParseSuccess(parser, " " + PREFIX_EMAIL + person.getEmail().value + userInput, + allocateStudentToTeamByEmailCommand); + } + + @Test + public void parse_invalidArgs_throwsParseException() { + String expectedMessage = String.format(MESSAGE_INVALID_COMMAND_FORMAT, + AllocateStudentToTeamCommand.MESSAGE_USAGE); + assertParseFailure(parser, "a", expectedMessage); + } + +} diff --git a/src/test/java/seedu/address/storage/JsonAdaptedTutorialClassTest.java b/src/test/java/seedu/address/storage/JsonAdaptedTutorialClassTest.java index 0385f2456ab..80eb9ca88f3 100644 --- a/src/test/java/seedu/address/storage/JsonAdaptedTutorialClassTest.java +++ b/src/test/java/seedu/address/storage/JsonAdaptedTutorialClassTest.java @@ -32,6 +32,13 @@ void toModelType_success() throws Exception { assertEquals(tutorialClass, jsonTutorialClass.toModelType()); } + @Test + void toModelType_test_success() throws Exception { + TutorialClass tutorialClass = new TutorialClass(VALID_TUTORIAL_NAME); + JsonAdaptedTutorialClass jsonTutorialClass = new JsonAdaptedTutorialClass(tutorialClass); + assertEquals(tutorialClass, jsonTutorialClass.toModelType()); + } + @Test void toModelType_invalidTutorialName_throwsIllegalValueException() { JsonAdaptedTutorialClass jsonTutorialClass = new JsonAdaptedTutorialClass(INVALID_TUTORIAL_NAME, diff --git a/src/test/java/seedu/address/storage/JsonAdaptedTutorialTeamTest.java b/src/test/java/seedu/address/storage/JsonAdaptedTutorialTeamTest.java index 3c0fc3d30d9..1fb1ec567f6 100644 --- a/src/test/java/seedu/address/storage/JsonAdaptedTutorialTeamTest.java +++ b/src/test/java/seedu/address/storage/JsonAdaptedTutorialTeamTest.java @@ -32,6 +32,13 @@ void toModelType_success() throws Exception { assertEquals(tutorialTeam, jsonTutorialTeam.toModelType()); } + @Test + void toModelType_test_success() throws Exception { + TutorialTeam tutorialTeam = new TutorialTeam(VALID_TEAM_NAME, VALID_TEAM_SIZE); + JsonAdaptedTutorialTeam jsonTutorialTeam = new JsonAdaptedTutorialTeam(tutorialTeam); + assertEquals(tutorialTeam, jsonTutorialTeam.toModelType()); + } + @Test void toModelType_invalidTeamName_throwsIllegalValueException() { JsonAdaptedTutorialTeam jsonTutorialTeam = new JsonAdaptedTutorialTeam(INVALID_TEAM_NAME, VALID_TEAM_SIZE, From 0f86f96657ba53ad68ca040a04d4192f3dd7bdee Mon Sep 17 00:00:00 2001 From: Zack-Tay Date: Fri, 29 Mar 2024 13:14:49 +0800 Subject: [PATCH 14/15] Update checkstyle --- docs/diagrams/AddStudentSequence.puml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/diagrams/AddStudentSequence.puml b/docs/diagrams/AddStudentSequence.puml index 97a395e5bfc..b687e40ebb2 100644 --- a/docs/diagrams/AddStudentSequence.puml +++ b/docs/diagrams/AddStudentSequence.puml @@ -67,4 +67,4 @@ deactivate AddStudentCommand [<--LogicManager deactivate LogicManager -@enduml \ No newline at end of file +@enduml From 16b38f4878005ab5173ef0a56c8aa0e7f8ea685e Mon Sep 17 00:00:00 2001 From: qinxutan <122926007+qinxutan@users.noreply.github.com> Date: Fri, 29 Mar 2024 15:25:14 +0800 Subject: [PATCH 15/15] List students of class command (#122) * UI Changes * Resolve checkstyle * Update UI * Checkstyle * Update UI * Update UI * UI Update * Update UI * Checkstyle * Add List Student Command * Update list students of class command * Checkstyle * Add test cases * More test cases * UI Updates * Checkstyle * Change name of string --------- Co-authored-by: Zack-Tay <101039486+Zack-Tay@users.noreply.github.com> --- .../commands/ListStudentsOfClassCommand.java | 72 ++++++++ .../logic/parser/AddressBookParser.java | 7 + .../ListStudentsOfClassCommandParser.java | 53 ++++++ src/main/java/seedu/address/model/Model.java | 3 +- .../java/seedu/address/ui/ModuleCard.java | 2 +- .../java/seedu/address/ui/PersonCard.java | 2 +- .../seedu/address/ui/TutorialClassCard.java | 2 +- src/main/resources/images/damith1.png | Bin 0 -> 84244 bytes src/main/resources/images/damith2.png | Bin 0 -> 599118 bytes src/main/resources/images/damith3.png | Bin 0 -> 110943 bytes src/main/resources/images/damith4.png | Bin 0 -> 59774 bytes src/main/resources/view/MainWindow.fxml | 108 ++++++----- .../ListStudentsOfClassCommandTest.java | 171 ++++++++++++++++++ .../AddStudentToClassCommandParserTest.java | 4 +- .../logic/parser/AddressBookParserTest.java | 50 +++++ .../ListStudentsOfClassCommandParserTest.java | 39 ++++ 16 files changed, 465 insertions(+), 48 deletions(-) create mode 100644 src/main/java/seedu/address/logic/commands/ListStudentsOfClassCommand.java create mode 100644 src/main/java/seedu/address/logic/parser/ListStudentsOfClassCommandParser.java create mode 100644 src/main/resources/images/damith1.png create mode 100644 src/main/resources/images/damith2.png create mode 100644 src/main/resources/images/damith3.png create mode 100644 src/main/resources/images/damith4.png create mode 100644 src/test/java/seedu/address/logic/commands/ListStudentsOfClassCommandTest.java create mode 100644 src/test/java/seedu/address/logic/parser/ListStudentsOfClassCommandParserTest.java diff --git a/src/main/java/seedu/address/logic/commands/ListStudentsOfClassCommand.java b/src/main/java/seedu/address/logic/commands/ListStudentsOfClassCommand.java new file mode 100644 index 00000000000..a9d91c80656 --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/ListStudentsOfClassCommand.java @@ -0,0 +1,72 @@ +package seedu.address.logic.commands; + +import static java.util.Objects.requireNonNull; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TUTORIALCLASS; + +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.model.Model; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; + +/** + * A command to list all students of a particular tutorial class. + */ +public class ListStudentsOfClassCommand extends Command { + + public static final String COMMAND_WORD = "/class_list_students"; + public static final String MESSAGE_STUDENT_LIST_EMPTY = "No students found in the specified tutorial class"; + public static final String MESSAGE_USAGE = COMMAND_WORD + ": List students of the tutorial class. \n" + + "Parameters: " + + PREFIX_MODULECODE + "MODULE CODE " + + PREFIX_TUTORIALCLASS + "TUTORIAL CLASS " + + "Example: " + COMMAND_WORD + " " + + PREFIX_MODULECODE + "CS2103T " + + PREFIX_TUTORIALCLASS + "T09 "; + + private final ModuleCode module; + private final TutorialClass tutorialClass; + + /** + * Creates a ListStudentsCommand to list students of the specified tutorial class. + * + * @param module The module code. + * @param tutorialClass The tutorial class. + */ + public ListStudentsOfClassCommand(ModuleCode module, TutorialClass tutorialClass) { + requireNonNull(module); + this.module = module; + this.tutorialClass = tutorialClass; + } + @Override + public CommandResult execute(Model model) throws CommandException { + requireNonNull(model); + ModuleCode existingModule = model.findModuleFromList(module); + if (existingModule == null || !existingModule.hasTutorialClass(tutorialClass)) { + return new CommandResult(String.format("Module %s or tutorial class %s not found", + module, tutorialClass, MESSAGE_STUDENT_LIST_EMPTY)); + } + TutorialClass existingTutorialClass = model.findTutorialClassFromList(tutorialClass, module); + if (existingTutorialClass.getStudents().isEmpty()) { + return new CommandResult(MESSAGE_STUDENT_LIST_EMPTY); + } + + StringBuilder result = new StringBuilder(); + result.append("Module: ").append(module).append(", Tutorial Class: ") + .append(tutorialClass).append("\nStudents: "); + existingTutorialClass.getStudents().forEach(student -> result.append(student.getName()).append(", ")); + return new CommandResult(result.toString().trim()); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if (!(other instanceof ListStudentsOfClassCommand)) { + return false; + } + ListStudentsOfClassCommand command = (ListStudentsOfClassCommand) other; + return module.equals(command.module) && tutorialClass.equals(command.tutorialClass); + } +} diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java index e5ef85920ae..7797569570a 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java @@ -22,6 +22,7 @@ import seedu.address.logic.commands.HelpCommand; import seedu.address.logic.commands.ListClassesCommand; import seedu.address.logic.commands.ListStudentsCommand; +import seedu.address.logic.commands.ListStudentsOfClassCommand; import seedu.address.logic.commands.SearchStudentCommand; import seedu.address.logic.commands.SortStudentCommand; import seedu.address.logic.commands.addstudenttoclasscommands.AddStudentToClassCommand; @@ -113,12 +114,18 @@ public Command parseCommand(String userInput) throws ParseException { case AddTeamCommand.COMMAND_WORD: return new AddTeamCommandParser().parse(arguments); + + case ListStudentsOfClassCommand.COMMAND_WORD: + return new ListStudentsOfClassCommandParser().parse(arguments); + case SortStudentCommand.COMMAND_WORD: return new SortStudentCommandParser().parse(arguments); + case DeleteTeamCommand.COMMAND_WORD: return new DeleteTeamCommandParser().parse(arguments); + case AllocateStudentToTeamCommand.COMMAND_WORD: return new AllocateStudentToTeamCommandParser().parse(arguments); diff --git a/src/main/java/seedu/address/logic/parser/ListStudentsOfClassCommandParser.java b/src/main/java/seedu/address/logic/parser/ListStudentsOfClassCommandParser.java new file mode 100644 index 00000000000..65adfa8f1b8 --- /dev/null +++ b/src/main/java/seedu/address/logic/parser/ListStudentsOfClassCommandParser.java @@ -0,0 +1,53 @@ +package seedu.address.logic.parser; + + +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TUTORIALCLASS; + +import java.util.stream.Stream; + +import seedu.address.logic.commands.ListStudentsOfClassCommand; +import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; + + +/** + * Parses input arguments and creates a new ListStudentsCommand object. + */ +public class ListStudentsOfClassCommandParser implements Parser { + + /** + * Parses the given {@code String} of arguments in the context of the ListStudentsCommand + * and returns a ListStudentsCommand object for execution. + * + * @param args String containing the arguments. + * @return ListStudentsCommand object representing the command. + * @throws ParseException if the user input does not conform to the expected format. + */ + public ListStudentsOfClassCommand parse(String args) throws ParseException { + ArgumentMultimap argMultimap = + ArgumentTokenizer.tokenize(args, PREFIX_MODULECODE, PREFIX_TUTORIALCLASS); + + if (!arePrefixesPresent(argMultimap, PREFIX_MODULECODE, PREFIX_TUTORIALCLASS) + || !argMultimap.getPreamble().isEmpty()) { + throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, + ListStudentsOfClassCommand.MESSAGE_USAGE)); + } + + argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_MODULECODE, PREFIX_TUTORIALCLASS); + ModuleCode module = ParserUtil.parseModuleCode(argMultimap.getValue(PREFIX_MODULECODE).get()); + TutorialClass tutorialClass = ParserUtil.parseTutorialClass(argMultimap.getValue(PREFIX_TUTORIALCLASS).get()); + + return new ListStudentsOfClassCommand(module, tutorialClass); + } + + /** + * Returns true if all the prefixes contain non-empty values in the given {@code ArgumentMultimap}. + */ + private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) { + return Stream.of(prefixes).allMatch(prefix -> argumentMultimap.getValue(prefix).isPresent()); + } +} + diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index 8317e8889eb..e3b65402f51 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -6,6 +6,7 @@ import javafx.collections.ObservableList; import seedu.address.commons.core.GuiSettings; +import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.model.module.ModuleCode; import seedu.address.model.module.TutorialClass; import seedu.address.model.module.TutorialTeam; @@ -89,7 +90,7 @@ public interface Model { * @param tutorialClass to be searched * @param moduleCode to be searched */ - TutorialClass findTutorialClassFromList(TutorialClass tutorialClass, ModuleCode moduleCode); + TutorialClass findTutorialClassFromList(TutorialClass tutorialClass, ModuleCode moduleCode) throws CommandException; /** * Deletes the given person. diff --git a/src/main/java/seedu/address/ui/ModuleCard.java b/src/main/java/seedu/address/ui/ModuleCard.java index 8de5e65c77f..5a8091da4aa 100644 --- a/src/main/java/seedu/address/ui/ModuleCard.java +++ b/src/main/java/seedu/address/ui/ModuleCard.java @@ -48,7 +48,7 @@ public ModuleCard(ModuleCode moduleCode) { * to enhance visual appearance. */ public void updateImage() { - Image moduleImage = new Image("images/group4.png"); + Image moduleImage = new Image("images/damith3.png"); circle.setStroke(Color.ROSYBROWN); circle.setFill(new ImagePattern(moduleImage)); circle.setEffect(new DropShadow(+10d, 0d, +2d, Color.ROSYBROWN)); diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/seedu/address/ui/PersonCard.java index 635a4170125..ad7eb6ebdbc 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/seedu/address/ui/PersonCard.java @@ -85,7 +85,7 @@ public void updateImage() { String path = "images/" + person.getName().toString() + ".png"; File file = new File(path); if (!file.exists()) { - Image defaultImage = new Image("images/student.png"); + Image defaultImage = new Image("images/damith1.png"); circle.setStroke(Color.ROSYBROWN); circle.setFill(new ImagePattern(defaultImage)); circle.setEffect(new DropShadow(+10d, 0d, +2d, Color.ROSYBROWN)); diff --git a/src/main/java/seedu/address/ui/TutorialClassCard.java b/src/main/java/seedu/address/ui/TutorialClassCard.java index 1e106c80415..e98830542d5 100644 --- a/src/main/java/seedu/address/ui/TutorialClassCard.java +++ b/src/main/java/seedu/address/ui/TutorialClassCard.java @@ -43,7 +43,7 @@ public TutorialClassCard(TutorialClass tutorialClass) { * to the circle for enhanced visual appearance. */ public void updateImage() { - Image moduleImage = new Image("images/class.png"); + Image moduleImage = new Image("images/damith2.png"); circle.setStroke(Color.ROSYBROWN); circle.setFill(new ImagePattern(moduleImage)); circle.setEffect(new DropShadow(+10d, 0d, +2d, Color.ROSYBROWN)); diff --git a/src/main/resources/images/damith1.png b/src/main/resources/images/damith1.png new file mode 100644 index 0000000000000000000000000000000000000000..a11d24c1d154d16e53910ecb1cbbe920654f491a GIT binary patch literal 84244 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 X`9A)MbNwf~nE%A<|0l2UXYzjmU!raI literal 0 HcmV?d00001 diff --git a/src/main/resources/images/damith2.png b/src/main/resources/images/damith2.png new file mode 100644 index 0000000000000000000000000000000000000000..7860d408cd9172e76e169a6b707384e3dd30d7ce GIT binary patch literal 599118 zcmeFZcUV)++AhB6RS=~~ivo%eiZtm&q)8VMA~hnt_udqcCW3%~f`EX4)JX3jT|uN5 z=|xIFAXEbcILr6_zP-P5ox{1#b$-8pzP&TLlF8h&X3adgpJ&a=J;T}f**w8VMQ
&KcD}4zi(saX6ot=2;CAAk-Q}= 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
9gbdwbt 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 @@ -37,46 +42,65 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - + + + + + + + + + + + + + +
+ + + + + + + + + - + + + + + + + + + + + + + + + +
+ + + + + + + + + + + diff --git a/src/test/java/seedu/address/logic/commands/ListStudentsOfClassCommandTest.java b/src/test/java/seedu/address/logic/commands/ListStudentsOfClassCommandTest.java new file mode 100644 index 00000000000..a0c6e14d37c --- /dev/null +++ b/src/test/java/seedu/address/logic/commands/ListStudentsOfClassCommandTest.java @@ -0,0 +1,171 @@ +package seedu.address.logic.commands; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.HashSet; +import java.util.Set; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.model.AddressBook; +import seedu.address.model.Model; +import seedu.address.model.ModelManager; +import seedu.address.model.UserPrefs; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; +import seedu.address.model.person.Email; +import seedu.address.model.person.Name; +import seedu.address.model.person.Person; +import seedu.address.model.person.StudentId; +import seedu.address.model.tag.Tag; + +/** + * Contains integration tests (interaction with the Model) and unit tests for ListStudentsOfClassCommand. + */ +public class ListStudentsOfClassCommandTest { + private Model model; + private TutorialClass tutorialClass; + + @BeforeEach + public void setUp() { + model = new ModelManager(new AddressBook(), new UserPrefs()); + ModuleCode newModule = new ModuleCode("CS2103T"); + model.addModule(newModule); + TutorialClass newTutorialClass = new TutorialClass("T09"); + newModule.addTutorialClass(newTutorialClass); + tutorialClass = newTutorialClass; + } + + @Test + public void execute_listStudentsOfClass_success() throws CommandException { + ListStudentsOfClassCommand listStudentsOfClassCommand = new ListStudentsOfClassCommand( + new ModuleCode("CS2103T"), new TutorialClass("T09")); + CommandResult commandResult = listStudentsOfClassCommand.execute(model); + + // Update the expected result to match the actual result + String expectedFeedback = "No students found in the specified tutorial class"; + + assertEquals(expectedFeedback, commandResult.getFeedbackToUser()); + } + + @Test + public void execute_listStudentsOfClassNoSuchModule_fail() throws CommandException { + ListStudentsOfClassCommand listStudentsOfClassCommand = new ListStudentsOfClassCommand( + new ModuleCode("CS1111"), new TutorialClass("T09")); + + // Execute the command and capture the CommandResult + CommandResult commandResult = listStudentsOfClassCommand.execute(model); + + // Assert that the CommandResult contains the expected message + assertEquals("Module CS1111 or tutorial class T09 not found", commandResult.getFeedbackToUser()); + } + + @Test + public void execute_listStudentsOfClassNoSuchClass_fail() throws CommandException { + ListStudentsOfClassCommand listStudentsOfClassCommand = new ListStudentsOfClassCommand( + new ModuleCode("CS2103T"), new TutorialClass("T99")); + + CommandResult commandResult = listStudentsOfClassCommand.execute(model); + + assertEquals(String.format("Module %s or tutorial class %s not found", "CS2103T", "T99"), + commandResult.getFeedbackToUser()); + } + + @Test + public void equals() { + ListStudentsOfClassCommand listStudentsOfClassFirstCommand = new ListStudentsOfClassCommand( + new ModuleCode("CS2103T"), new TutorialClass("T09")); + ListStudentsOfClassCommand listStudentsOfClassSecondCommand = new ListStudentsOfClassCommand( + new ModuleCode("CS2103T"), new TutorialClass("T09")); + ListStudentsOfClassCommand listStudentsOfClassDifferentModule = new ListStudentsOfClassCommand( + new ModuleCode("CS2101"), new TutorialClass("T09")); + ListStudentsOfClassCommand listStudentsOfClassDifferentClass = new ListStudentsOfClassCommand( + new ModuleCode("CS2103T"), new TutorialClass("T10")); + + // same object -> returns true + assertTrue(listStudentsOfClassFirstCommand.equals(listStudentsOfClassFirstCommand)); + + // same values -> returns true + assertTrue(listStudentsOfClassFirstCommand.equals(listStudentsOfClassSecondCommand)); + + // different types -> returns false + assertFalse(listStudentsOfClassFirstCommand.equals(1)); + + // null -> returns false + assertFalse(listStudentsOfClassFirstCommand.equals(null)); + + // different module -> returns false + assertFalse(listStudentsOfClassFirstCommand.equals(listStudentsOfClassDifferentModule)); + + // different class -> returns false + assertFalse(listStudentsOfClassFirstCommand.equals(listStudentsOfClassDifferentClass)); + } + @Test + public void execute_listActualStudentsOfClass_success() throws CommandException { + Set tags = new HashSet<>(); + tags.add(new Tag("tag1")); + tags.add(new Tag("tag2")); + + Person alice = new Person(new Name("Alice"), new Email("alice@example.com"), + new StudentId("A1234561Z"), tags); + Person bob = new Person(new Name("Bob"), new Email("bob@example.com"), + new StudentId("A1234562Z"), tags); + + TutorialClass tutorialClass = new TutorialClass("T01"); + tutorialClass.addStudent(alice); + tutorialClass.addStudent(bob); + + ModuleCode moduleCode = new ModuleCode("CS2101"); + + // Set up the model to return the desired TutorialClass when findTutorialClassFromList is called + model.addModule(moduleCode); + moduleCode.addTutorialClass(tutorialClass); + + ListStudentsOfClassCommand listCommand = new ListStudentsOfClassCommand(moduleCode, tutorialClass); + CommandResult commandResult = listCommand.execute(model); + + StringBuilder expectedResult = new StringBuilder(); + expectedResult.append("Module: CS2101, Tutorial Class: T01\nStudents: Alice, Bob,"); + + assertEquals(expectedResult.toString(), commandResult.getFeedbackToUser()); + } + + @Test + public void execute_listStudentsOfClassEmptyClass_success() throws CommandException { + TutorialClass tutorialClass = new TutorialClass("T05"); + ModuleCode moduleCode = new ModuleCode("CS2105"); + model.addModule(moduleCode); + moduleCode.addTutorialClass(tutorialClass); + + ListStudentsOfClassCommand listCommand = new ListStudentsOfClassCommand(moduleCode, tutorialClass); + CommandResult commandResult = listCommand.execute(model); + + assertEquals("No students found in the specified tutorial class", commandResult.getFeedbackToUser()); + } + + @Test + public void execute_listStudentsOfClassNoSuchModule2_fail() throws CommandException { + ModuleCode moduleCode = new ModuleCode("CS1111"); + TutorialClass tutorialClass = new TutorialClass("T09"); + + ListStudentsOfClassCommand listCommand = new ListStudentsOfClassCommand(moduleCode, tutorialClass); + CommandResult commandResult = listCommand.execute(model); + + assertEquals("Module CS1111 or tutorial class T09 not found", commandResult.getFeedbackToUser()); + } + + @Test + public void execute_listStudentsOfClassNoSuchClass2_fail() throws CommandException { + ModuleCode moduleCode = new ModuleCode("CS2103T"); + TutorialClass tutorialClass = new TutorialClass("T99"); + + ListStudentsOfClassCommand listCommand = new ListStudentsOfClassCommand(moduleCode, tutorialClass); + CommandResult commandResult = listCommand.execute(model); + + assertEquals("Module CS2103T or tutorial class T99 not found", commandResult.getFeedbackToUser()); + } +} diff --git a/src/test/java/seedu/address/logic/parser/AddStudentToClassCommandParserTest.java b/src/test/java/seedu/address/logic/parser/AddStudentToClassCommandParserTest.java index efb517b4f55..73ea218353a 100644 --- a/src/test/java/seedu/address/logic/parser/AddStudentToClassCommandParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddStudentToClassCommandParserTest.java @@ -39,12 +39,12 @@ public void parse_validArgs_returnsAddStudentToClassCommand() { // Add by email AddStudentToClassByEmailCommand expectedAddByEmailCommand = new AddStudentToClassByEmailCommand(BOB.getEmail(), - new ModuleCode(VALID_MODULE_AMY), new TutorialClass(VALID_TUTORIAL_AMY)); + new ModuleCode(VALID_MODULE_AMY), new TutorialClass(VALID_TUTORIAL_AMY)); assertParseSuccess(parser, EMAIL_DESC_BOB + commandSuffix, expectedAddByEmailCommand); // Add by student Id AddStudentToClassByIdCommand expectedAddByIdCommand = new AddStudentToClassByIdCommand(BOB.getStudentId(), - new ModuleCode(VALID_MODULE_AMY), new TutorialClass(VALID_TUTORIAL_AMY)); + new ModuleCode(VALID_MODULE_AMY), new TutorialClass(VALID_TUTORIAL_AMY)); assertParseSuccess(parser, STUDENT_ID_DESC_BOB + commandSuffix, expectedAddByIdCommand); } diff --git a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java index 3bd95ef0342..d9e78c2f834 100644 --- a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java @@ -22,20 +22,25 @@ import seedu.address.commons.core.index.Index; import seedu.address.logic.commands.AddClassCommand; import seedu.address.logic.commands.AddStudentCommand; +import seedu.address.logic.commands.AddTeamCommand; import seedu.address.logic.commands.ClearCommand; import seedu.address.logic.commands.DeleteClassCommand; import seedu.address.logic.commands.DeleteCommand; import seedu.address.logic.commands.DeleteModuleCommand; +import seedu.address.logic.commands.DeleteTeamCommand; import seedu.address.logic.commands.EditCommand; import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; import seedu.address.logic.commands.ExitCommand; import seedu.address.logic.commands.HelpCommand; import seedu.address.logic.commands.ListClassesCommand; import seedu.address.logic.commands.ListStudentsCommand; +import seedu.address.logic.commands.ListStudentsOfClassCommand; import seedu.address.logic.commands.SearchStudentCommand; import seedu.address.logic.commands.addstudenttoclasscommands.AddStudentToClassByEmailCommand; import seedu.address.logic.commands.addstudenttoclasscommands.AddStudentToClassByIdCommand; import seedu.address.logic.commands.addstudenttoclasscommands.AddStudentToClassCommand; +import seedu.address.logic.commands.deletestudentcommands.DeleteStudentByIdCommand; +import seedu.address.logic.commands.deletestudentcommands.DeleteStudentCommand; import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassByEmailCommand; import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassByIdCommand; import seedu.address.logic.commands.deletestudentfromclasscommands.DeleteStudentFromClassCommand; @@ -205,4 +210,49 @@ public void parseCommand_unrecognisedInput_throwsParseException() { public void parseCommand_unknownCommand_throwsParseException() { assertThrows(ParseException.class, MESSAGE_UNKNOWN_COMMAND, () -> parser.parseCommand("unknownCommand")); } + @Test + public void parseCommand_addTeam() throws Exception { + final String teamName = "Team 1"; + final String moduleCode = "CS2103T"; + final String tutorialClass = "T09"; + AddTeamCommand command = (AddTeamCommand) parser.parseCommand(AddTeamCommand.COMMAND_WORD + " " + + PREFIX_MODULECODE + moduleCode + " " + + PREFIX_TUTORIALCLASS + tutorialClass + " " + + PREFIX_NAME + teamName); + assertEquals(new AddTeamCommand(new ModuleCode(moduleCode), + new TutorialClass(tutorialClass), teamName), command); + } + + + @Test + public void parseCommand_listStudentsOfClass() throws Exception { + final String moduleCode = "CS2103T"; + final String tutorialClass = "T09"; + ListStudentsOfClassCommand command = (ListStudentsOfClassCommand) parser.parseCommand( + ListStudentsOfClassCommand.COMMAND_WORD + " " + + PREFIX_MODULECODE + moduleCode + " " + PREFIX_TUTORIALCLASS + tutorialClass); + assertEquals(new ListStudentsOfClassCommand(new ModuleCode(moduleCode), + new TutorialClass(tutorialClass)), command); + } + + @Test + public void parseCommand_deleteTeam() throws Exception { + final String teamName = "Team 1"; + final String moduleCode = "CS2103T"; + final String tutorialClass = "T09"; + DeleteTeamCommand command = (DeleteTeamCommand) parser.parseCommand(DeleteTeamCommand.COMMAND_WORD + " " + + PREFIX_MODULECODE + moduleCode + " " + + PREFIX_TUTORIALCLASS + tutorialClass + " " + + PREFIX_NAME + teamName); + assertEquals(new DeleteTeamCommand(new ModuleCode(moduleCode), + new TutorialClass(tutorialClass), teamName), command); + } + @Test + public void parseCommand_deleteStudent() throws Exception { + final String studentId = "A1234561Z"; + DeleteStudentCommand + command = (DeleteStudentCommand) parser.parseCommand(DeleteStudentCommand.COMMAND_WORD + " " + + PREFIX_STUDENTID + studentId); + assertEquals(new DeleteStudentByIdCommand(new StudentId(studentId)), command); + } } diff --git a/src/test/java/seedu/address/logic/parser/ListStudentsOfClassCommandParserTest.java b/src/test/java/seedu/address/logic/parser/ListStudentsOfClassCommandParserTest.java new file mode 100644 index 00000000000..06c05c388cb --- /dev/null +++ b/src/test/java/seedu/address/logic/parser/ListStudentsOfClassCommandParserTest.java @@ -0,0 +1,39 @@ +package seedu.address.logic.parser; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULECODE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TUTORIALCLASS; + +import org.junit.jupiter.api.Test; + +import seedu.address.logic.commands.ListStudentsOfClassCommand; +import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.model.module.ModuleCode; +import seedu.address.model.module.TutorialClass; + +public class ListStudentsOfClassCommandParserTest { + + private final ListStudentsOfClassCommandParser parser = new ListStudentsOfClassCommandParser(); + + @Test + public void parse_validArgs_returnsListStudentsOfClassCommand() throws ParseException { + // Example valid input + String validArgs = " " + PREFIX_MODULECODE + "CS2103T" + " " + PREFIX_TUTORIALCLASS + "T01"; + ListStudentsOfClassCommand expectedCommand = new ListStudentsOfClassCommand( + new ModuleCode("CS2103T"), new TutorialClass("T01")); + assertEquals(expectedCommand, parser.parse(validArgs)); + } + + @Test + public void parse_invalidArgs_throwsParseException() { + // No module code provided + assertThrows(ParseException.class, () -> parser.parse(PREFIX_TUTORIALCLASS + "T01")); + + // No tutorial class provided + assertThrows(ParseException.class, () -> parser.parse(PREFIX_MODULECODE + "CS2103T")); + + // Invalid prefix provided + assertThrows(ParseException.class, () -> parser.parse(" " + PREFIX_MODULECODE + "CS2103T" + " T01")); + } +}

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 tMS)mk{CE>>MHOr$2xkH)i5FRqLH?TWlPR{jo^ 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®j=kk zY!v~QM+XMNJ=H&OOYqpcZifATj(aLt`qjt~`y%GI#x3g$TFXAhNeDeURAH!8mpkC9 z(S$1Zjgr5PG-%LKCgb^ReTu~}Y8gah7?y;HBqu5&(qOfQIQwE7yA31xJPZ(l6h_jG zGG>~=^x|JX4Yw|(?Vk*HN}aAl*879lnmln0 ziR0Vq)D1|MrGU&)SZJfjVmZ@R;?J>0iL8kT{K<~T%}0eup<`Vi{0|<#SXehAo@d`! zG~G7?Vo~Tn)*n)!zH@!sjya0(ox6flS%ATt7bOp(>P0HvR*+jS6J{kk>Ya~yXa z<~kbJAx=FR?Nf2x_igf5$hIw+q|z%gy)`oY8%)cpk*=fqwai;SD7Ihag#UOo8Xm_U zZJyn#yCjMrk@3bp#7{5xdOTtpb6F;Fb#h#iws|3yqa?(-2pJb0Yxms){AH~faFp@P z671ZJp6!W>GR#R`5du&H+9oHn4<>>%RfrtDpLaH~8USu~*knO-W=6|_?{jXx{5_h1 zRKs4&_K_F$koAH9)^@Z{R8*Mrg|QExIy<|VX?yZL3v`M9f;;8qnU}{ec$fixXM3w;vrw-q}Duh#B zP^}5rMCNJw+aE3s<6V*`-rR?b;~oIHF|da8W&p(Fv!WZ>HhIYWFkRZix?CV-C8NGJ z?_;8Kg&w^Nt~@TiyT2E6!rtxF>vJyA6maaihBfhzQaPMUN?Rjn8u{$e$*ysne$Ui$ zl2X!=>%%9f)%mPGwIyu30g%XEq4*=|*eB^5H@+y1jYvI&c$Hh+KGlViH5ka1J^qO= z&Fx1ia=3D`-^qJx!`?*npinj9W|QGga=#^e=7DLvGk(w6;0j4%=IgmXkwos}832Y} zp@o^huMmxv#j!{3KKLoZy=W?T*Zs@Fs_Dkl4+TkjFAXL}qX(a@*{PQWG9@BI7vv4vF9E6=$+{kWZUmaKdpl$ zjN)0U<2hPs){b8#j^j>_0&;%B)HX8}D9*3|B-Z7~;~OV6ys z6^GWqB|jQ}M8XtG?1W&gpe^<&z(`;;Z2ltWJ#DSJg@f5Q1UvX;CNUrKhJ|mQM7EMj>+SPgV*D}c|{mcC<&cW=kVXT6pBjAPKium z`xsq`dRcT~yjFQ3{o~myeUcNCA|=hPhUdn=)i7{=@$UQ8di}hqKO!~Ru5lNs49jeh zi{x`W9}cCR-n%b^S0XKl?b6#|gj|Q|hJAz;T=rjPMyY6X=n+jvAcV!7lx}BnvxDb!hgBHu~)ht{VfGD(z~c?HOXJrcjNE%M77~pH;;ffn!FDr zvl03;37cF>Bb~fMiI@shIIw6i9&fl^;?#L@ZD#-Usy6}%=}RWb68Epuf9!*&|FP(F!1C86x7Azr^X48G zkVfS1PlPl#S&-xYK&ak8U+vJ_-@2U=(QxBHVsqq!0)%quXH7uk+}1OBsNd;zj(p-t@U$93khvrgV(co z{R1%9(yt)7D2YX6Zay3T1)ICVFXwL{P(K}Kk&i;EUTLz~`8#wsbck2$2i-hX9q)6z zrL+HGfL1KCZ@|mnq_DIvsN^5Z4f=GP%Tm)1yW+izjdcxms(7&8cs!tkSuuVf^ysW! zB3odZ$qao!dDq_j7%`CJd9)6{+2{rBFJ%z98s#AKvCzo)2R1cd{uI5zO4196FuGoy zZZ%{tBa9BO!FzJP0b1fvn(Eg-_+KE*qn8 zNHuC)udOt5gzls{c-xwlt&@z=dSdy~?Qw#Urz5%)p|c=doteg#{umSF3j@SDZa`c$ z1TS#RM?wVAe9SK-hn(b0cOIfC9aVltfk#N1yg@~EJc~S@Zy;}}@?kJX`6vMa+sjnG zwr+O#Q~g|)Q7y!$++)BFSnhACLx*E9XXNp7yT=cD%;PK_b?4^%>8P-3q0gcBwIb*6XR$r*Ri#6N&7BG z$i%8aK<2gAcRyGfTY+;tBae}s<#fOnwFd|>)gtUL;so$znF2b&BtfE^l7D}o`wQ?? zN8&fMt9)q7!O5DbtNXx9K=*eHo?n&MmPCqft&Yu0PridEuK@ciRCLwi5L)i;J;8+= zQktFhZ@t}S^Ya(*@H(Keb&0tppXV)NnxMOycfT4nUr;+R&%derru%c^V}0$LJc)I6 zr>tbI-!l1j3?MB2|N438v0_x*sK>&*gC>xET}*vYJL%_OPZNIwCnv3Wl30U?Nj25% z&ap>3KrI~Q1Fl2Ls1VTQz_XJ-;Q*T2Oj0i$W_K13xV)$Cyy^7T9stjxb>asn3(h7@ z{GFDZ5~=ci_JnQXbMjJ^kYD5hoa%OVbZ1tfP0&R=;ImVDYW21m&qOX{xa|&Qv?s6* z-O*@^7T#Sq)hy@r*tKvza21d(x~1C6V|t+njtNZG?afs<%Bnki*MxG#$Q3?}l0VAY z)jy3RSv65O>&F2~An_C@0b!5RjOc|%^gch zO^u~pjO~Q~vHG4u^EjtE*?B7h4@Eq926`C&JKR_Ct(-3zyQd1Y+&*F}!onZ8G{D>oqr~I;bS&O_C zgLu9J$hK0I7|)a3+e5CME8VnJA{m{Hcss;PkrkwO73|K{8=_;g#J;~kh$cC2bS=Jb z@h}T$#zr@bS^S#P<@70Kb@PnHbSV869+=iZV20Ejqx-z%NhLS7vJT~-9GGh*jGtm8 zDY#HjJA=O#T}kZq0&C_MjD`sAm^NncG_ z&&xTH8iD4eN;1o~0iTB-Ts%zM@qZX>g*cP6Y_oTz2mYao@{N|n!9Y?sBR4=5*ypnE z38EZ_T0jgLzeJxppQLcd@|}=$7!i?a*YCIg7R8@X_yqhuzY|Co^nwZ8i0^nXUj7ND zKHMf!6dUH1PX~W<2n9SU#knV6B+l-qT>llYf(QnZuBF2@%%6$%rOhf+)a`IdjvLao zZqb%!1My)@RsX}T6fDj6cZBY3OI$y$kgl@gkof7HXI5S)puU-X_vt8f(P1~3j0QWY z>tsmuD9AU0_Hksah~|24V}=*$f~wL!9)tRUlFwE2`23*F=QDRSxXyg3u~0<+I)4*( zOf_%ia`^BoqYNFCK{{O`zK6trxlEe=i;A)?U3gfVy7zqj3lwlRJb@Be{l@}Adbkx^ z>5T8Eyt%*rg;vSkV=GJ*?3F*Kjrq|(F#rka1Vo#=0NM3K`%%b6N?)P4BGs*mm+?6t z534|Pdg4HK-ghLHz-~?#yDQYYunRBcYyOjFBh_!4&0;dBA3#@aAujRi4L({_B z;$I$$<*ol`rwEVgLR|#T3f7$|`w{mMY1JdazzOce{84_J6LqLtzl@%2Q90RV->L>; zyg~|5V6iyIyx8<5^K`$gr})x-pzmgjYvrCPCtObILPRJFzlxXaSNet5Fs({;n0;t& z#`W%4lc!FvyLXoH7DcAsu76BVM}6FcrBCU#`wsuw`cm^qkX6*fdOJhaf_&q``I3IB zd%O4tp&4SLI(+yb4M^AYI8!-8t9TM*mBswsL2lGM_L=)vi^p!I@~>TJ9;=S5dI8u1 zX8<$I-Ov#+N6Rv;VT2;IkVsz#z*-HrHwqq$m+4|a4o)6npi8D%aLXeynZC^=pSYI(6=$SMjS z|Dr3zdZ{_@tW$yh#KroUS0G)`cumAxfY>@=%Qa9CKD06sTFrdv>F11#0+CPW{x6jpNd2y+dn4QrN7LU?T+YIz58mW++{2E!T-{KQ%gz z(?u#3NM#h`Jb(!nR$gXD4?XJ`6kUKnTD$_n6%9YzNkqqk#&Ntj%ZBWoq#Dx2&7 zp|5T$zQI4H)hU0sP3Y~ALVtg#?&9*g8dcha-bZzw=x*_Ju*6vCVKuE|nX_m@^g?xi zCMA_{loaoK%U$myz3q{!5 z`=t$$c?~-f0p;t>fz|f8 z+FXq_Jk3A+JlTjW1Uj(Z`-t*sys-STYyR^Z2MhnOeFR44%cuC}47vC+47>j+P=NU{ zRA`>a$#?+5?-@^RPl zaa_M)*(}*y%wM8cm|_h`CKB47*#j111}00|2IYOI8;oH3W|{wlS^8kN!I(P)zi3-} zXu@!5X=`%hHq4MMEN5{c%d`8VHZ58X?-AY_pw;MUcn-k=gS^QOPWm$qgZs_BIKl$^ zK*?~eO(g}`_Vk?sFSmy~SL45#{5f#z$ULsiOCW>Bo{OJFODzS2|216CTa`cl3MwMs zbERn&?E7X#uSZiR|JFopq9$ZOccpHnUPRwcX)yLZvAIv@{wRN3ZfM#r`^~y&3J}8g zhvC>So{{pZKuKoyZn(S7n`%cefaH#`Fk&iUhs~3yG zvTF{1mvGE27GWE4<0AJ6%LQt`iD6kuOq;d-n0VRuch+#jm+&yF28LEF10$rO;ukCu z8t!WK;dQ^3Pd|jP8E^HpW;(_=K2Ps({>1jHsK5L0A(+?>7@#vdURkl7<|KjC2c;9@ zi<{k%@vjm>3|)`KCL|ghz|8x$%ML_I3i-+sHftNk`afcVa12Bi{zs*#4?70GlPQY z?e_jn=ij200N|JQkZKK_cduoZqz`OOqA!Dvbcq`(xk(q9CUjhS&>5dPXz^FB2@@HK z-0lnxbkJa~R;(*(hr10G zSC%+~DPJ?0acwxhMwn)plQ z{tWAi<<$Iz@y!=o>x*Y}pK7B5P%{hlhN+b7+v(H#*(2?#i{>_b+gu8eLD;h-exxZq zMzZ4y^}cT;^7_dW@H|oYjYW0mXLI)6G&V6CWZkp|DZlYiiC`1|@``QL)kH@~&O#j6 zA*%A{$8$Jls0(8bMyOX$SwM{mCV$RO`Vfygi5q9fKalL;Z;$1&=qA`7O(2$mP8gfi zQ8rW>seSZWn9~6II@CJHou@H>2OCG4UrnP7m>P_-N0Y(y7>YV>|V25Aa0H+MgjUMyId*Oa?8pCUw9ClEQwd zG+@gdfYtdn7_VJZxa9^^qO0uQhiZ%~?fZ-4ZvR*|#{pr$Q=`Kx4ACaAax!q?2788V znLk?R+Mv{C-)9$kAv)v5-dZj7;9`qDXUKX(3HOgwa;B}T12_U*;#Y+F3pT@e_g37IMAuwnfvo{qD+r4AXi`>{wz?}B`1?Tl zCsLBa)^JAnxdeD;7?72p#f38DUBoZeMBLwb1S<+WM_4sp4Hzd6ZjIyjDgF-3Q%ckf zlVt5*IbUuuH#*uW+zgQ)B%!xrc2cHzi$1iw!k@rlwxr1%5smgTQ9tr9YB9O(oCCGz84hv%2g(8BzI}_*N)Yu04YQTj@75uE?B(tVR^jf7tM7y zX$XWQ>NsoS>wPDBxXe2cDrDGImeU|~S`Ouv2hwU(;;Zf^-{>Jlr@KLd+43joU@;_O3aZF$qj&8-Q7xJ%5fKLx{tk_kYRt`V{Oo5TWHA<^ zU!BW;VipS1BWeu&>^GD3gZbhJIe@whw<1&r}180S`qvAIIf#shz$YpvXI>J7hBnk{sc#vuKtCc zHMjmRZGqDVaCYR%on!!5QI`_%D1o#vtR)@RFDN(2QTbf@V0sthL_O^C^fv_atg3jP zTD%Pqm4adqHEN?vzT58a8@}%JRWKKh)l?tt3Vg_NHf*cUvMH%&_L5-p%tvl#M(EKe zU=oz)aYBXUrmTWHvmTuifw}_bR1pYa9H9ox%P&aj-{);YXvOdKv9%-{EFWT872%wlTT30zV zM4C1Qocpz&8h<5qWd?rZ6Y|Va5%h`;Ta$I?Y5YhVTAkj85Hm}EH#)wRcWUQoCd<vsjur*nEdE$c0ajmpI&qQQ9FLCh9-95fqWGsrvPa9YfUewd z6c1Hieb6*x0|w}K71ja^Rnq+~xOXditU#6h7rs~TL4gw|-_K^bg7?QutPdxDMUBGy+J<&#LULoenSjJq;zqh9To+0F{$hkP6w0O?uVbk69z zoO!;}UBXPG?)Adxk}5qP0uYBv%5PNxU5ws*x^fGX@7s16WnRF_@CqZJ4hQb8lAb{< zk!YC8f8an zi#1gKHR?4`%m5+SaY{cFBN35=k+?w-3lp`SqpN8FvJ#iCw{22B$i*N%V( zgHRm$oOJwAdE&GUkue^tML0#^$9i47sd5YQy-!!Y2Gzk1 z`dABTYDnzId6@}QSi2}3KSKIo5DgC;W&ZdsepjVKGa=BXjPsX<)%z9eU(jx}*veSa zZfFgLo`$)5e_I=wv-f)BdtQIJkb_5?> zC|G#wUb>#HRxt05f;{ZmL)GsCt$Q{_dNn|CKDp@@B~kz|=v;~K;7fqaTzr!IZYZ7!p78CXb5E3Hk@*HBVG zu&3o4lf=4rrgwvQp~`8Xd-f&e20(%jD1cPPTU(W1eJM0x?aJHt>+cUAwaJtT{~GKE)ADI`@L4GU;U-xFN?C)iFnK+A|6~< zT(@^H+r{(ctD>b1mZ8mW83= zG<4ypjR|qVfji`f=LP*z&c7g3y8NaC2D1yq=-3`J-I*qK4Idh|3M$A@OB|G6e`3(K z^1MrO%NZO8uqizFR=!enw?jH-fiIDOIPNWnk+5jHtb=j+0nWGEb{3w$`)bARlFcO z6J1Pj*xhmax^T8rO`WvzK#vHYk&DNzKAsm(8~<6Nt%mLL?zmX~-cGX}?oF>vP@U$< zo}|@h+AWAwO=`>|D3e$5B_KY*U$Ofm0ZEaMt_toe)Qfu6P*?PM`S8wF_Ky@}r%aOM zuYf8=(Clv@DOBm0^_y3fHpJe{-lAF`AuR~IsAnV~4Zu-#IW@J!P$ua2 zvSr$d!%Z$am@n@oKgGf~sQLicJ1XEGNv%L$Pf+;B@|;vfq9*lja*ohGyqqnhMr<8n;KD*@CI1V4ykjrM zThv_>aGOXX4i8NBly0Z#TGC_KL+ci=MNC?YN5vjdjBw8<_i8nAPJC5N4zU$GRAvsLPob0@*?SugT%YQ( zhD_lgsO$9QUfg-4hg9ROTR$OUnO_wOr#A!{d>K}uh!bKLc$V(P!ek#9_uIq#>tNPj z7%|Zw|z#L8m3>w+wXg?c*gcV#hiZT zd^3}NbZFvl_wycAt#+bdru9v~YNbPGUafR5OvtIg;@h*dch^vlT;^e}kP98Md>F_v^ zdvQTA4S|jS!2`a&9y6)L%XEn~#WM$&fH4cGECq&biEdfiuV?iUtPLhwb_n+M5R(`F zvG5?|b5la0mnaJiQ4lrH2qIqO{`-uV^*&KzXKNI2w{c|KpfYrq6a#btW2AyU^(*4UFf+MsouC#52JiyB&w6ON0A>ZEENP z@4-`Dqj~V6?o_R?M_PfuC)D7vvek{lctBg2Nzw0<6)~F3cb#rBMFpz`zho3ZrRI*=gw5$8%8r1~xPbO|g_eHb=+Po=$zLi~iEhet|1c zx(NLtqbn{(Lx?phcbfnxDBIrUWZubIN4tuUPIsU99jM$m;0&q zm&HY?HlULXJ6Fef#Csuwv#DeQ(hz1+-PEuz`IzBC7jEDx5>8Of`^%-3{j6*(Hh#By za5eZoCY0R(*X!QX$H_(BvoUk@%G5_ERK?SV zouQNK#KJmF=j)4py7G{SY^8(%xulC%tt;8zLj?9V?dyYlZff2i^J{fbX}sPL=nzZB z5*K97SAOTtY=^vSml(mmjGvvEPm^Rysecm&hhI~r7_B%UO{BOw2iUOoe=!5@JL1*79adWtl zT?ctt1Q(`!b`QSuSq;U}H4PN2<{^pi^5j1r!TQ@dkh(F6F?lj^6bI?De=Lz5WO6nx ztb#wU8EgpQ@Ca*(k-WrAqy4q+U2h6GcqB)}-#LKW_+xnNmm$GmuV&b5Euu7CsSKY1 z$?Gl|pkUy}TNeQ`LV<&O`|Xn1!QrDtaGG;dWqXo3cC6=G`Z$yo5s|foBAYD}bt((R zFhBw;(dX~gHd*G~ET6+0U&sEdRjp-xbzuzs$0s3Vhb}itEnI?)d(mtIdfwTOy5abh zy*_xC#%Tx`OqTi~4X%&El7nmE1Pld=42EM{Ml zeLD{THQ;PgzQ4!mtr<<@B^vWwjFD0Wd&IiwCii%&L3K!u`Qudf#n0034RUw6P7b|V zvC6tG@y)gK#5EX4+D`OwWIM!cWXmoaJgneyh2#vyU`10;w$DuHX0EC~*ID7|*V!yW zB`{7Lh4YacBRYN&Cr`SyN4gM<&RK*-ebrR_ugW!m&E}&(^l>ph8}!cW;EyVX9lM)E zwMCI$CX|{NK&~YL{Q0b6Wln0Qf$0QH)#QbcL@q@O)Wzuv4K>VzQiQ@i?ccd!piB}@)Dg;8 zodpnBGoM*xs7cD}F}-nw`~`|BMC{Vnmw+Jn{=ry|3FTJAiaA|;NlZ4ZVykBO5gJ5gR+Ny@@tr4&Yy%&g@nx;#z`L;X(_u`MDMnF-3=E zZ2DUthx7Vu6{%Q!1C)beFkj>;HIm#gANCd!1~M^J7azG<;4|94K$ihD1X2SGh>PmL z2{*76qv$BFO>R$+-Ll1~?U(1ObJBl~ttLRerIn+Wki>&m?Q~Ua2}+ReaVT;(l2@@4 znsy{lfSqo6pJw~%8`GRR5o@o{^=I6n?9wSao)Wxs?(Oi?GWzbz6}o$)i->uiqhFu? zFW%lWsHw2=7X%S0B1j2MAPPto5s_YEqYFrl(n1mGAfVKch|&xt0wRhCA|RcBG(mbV zB2~IT5_(N2A&?OFym#*2-JPA?y}R?D{g6P&gq%#ydCIRM*^BB`l==HuWsIJL=5b!` zTQ`%w@wpRP0#_uYZqB6KlonINn7kLj$>=JG=Iij=o#-v5ztYJ(LwnxVlOJJN8G6Nz z{ZBmhRN{i}Hex^*#^ZT(rWWb#_8+2Fv$`K9 zhIltNQfSl`Y&~3*t3_YC1KBkR)nfb9R2p)zK-6%IV8Sax4pDbW~WU>;_u^C~1J(>5eKZ}svJn#NW)CItSS%^Wd zGHLeHv}*FDw#ousrSr~^^sH*e9>ce9S%eFPWwGT*3)MR|f9c*bDRGQ`Yc1?u&A)Gz zuo0-Q1CqQqc$vX3|Atc@E0XmmyK;iJ{;C+L>8poncu+;*hV0Gu-?jshzPYc$CPzfr z358YDnkB=*prxm(Q)7wAYl}Bba_h&*rtLu_vyvNat=kSwj@mC0L(WwAq&v=#jfp-2N-l6c=pfz@X2{eYLA3<*P*vt zqa|DMpi@C$SP`O0=>!6A*{&#FKNS@%S)jTOYasi7D9m1!AH5{D)TJhNa$9Y$S6Ifr zBr)x*P?2 z!Kyxs_^NPsrtuRlwj09?R~`fWB#rt}o(2O_YqH0f)5ey?Qo$wbbZs!%&fx*I*|WqE zA){b}uadGz%3Hj-{wGN9@VpBSbAcRJ)AYGtL;lhorUQ%wk#7r2z;|YenR0FLat^3h z_)H1wVPQi6>A<-_dPy!L`q|ev5Tk#gDc$_Rklx8dKA!L#OWzQXs^M^_MN^{eXciZ| z=wpL&qHE5STy%ny*h4z2Ek>_sVY;Fqtirkh*ydo|yIQkOP0c=8G^!xe4VCVG%iBiY z|E3U~YJpRw`L@Wr>I~stASL!ofxr2PPFY39mGi%)@#P9#+9+pz6S{Apv#uWG{G#Q1 zvLney`b7k3kN(rMU*G|5|FR64uJG9ei!Qi&oI zmyq_RROcWbZWQS-ld;d2Q$6tx^F<*Ta+MxSYb*JTL2&m zu`>yz3~#T13I!qdFA=hb35DnCF%@BmeOGAC!Ar+nac~itD!UyU(T0)i zN<)B9*=PPEkDs^P$`$7IRv@r)8mPNN0Qv`xE5oJodDy!z=`|U9%0la?e70COs#rGf zPR$SOjL2gS28M)5djNd#A>yxp&G0VQRb@~*zV4$ETfB&#x> zI$?E{^GeZ?nk>NE0QD1ci)4$ZpSbyt*R!&tBjj_a%;XneLuN}F5Q~c54=hC zL$*^X)eR5#f-eVaXief@T9cb2>|Vl87qZv>Jv>K`{0z8ld3o%hq#!ZuVlF>*^RR84 zA4MvayVnsWQOK)xcS7xs(6R@oRuJTqDG1qS2uPOiZVG-&4~XOt-v$M?w-9WM!abrf zC})L>w+AXPf6+p;Uoa+3S8q~XgItB1P~Ce)SO$c@W$|qbOQS>8!dl7FgAN(cZJxkB z+53Zc4mCIcj+9`9iJVurtZ8VjO&k(xM!v!JSMpWCYi zYM7N+Qo(6#V>m@6-TL+D` zNCj|m(jSWQoebUT2t2vq%@5ylCQfmZ`h|Je1w&Sal~;G{E~*wrMNptW0hDA(P0TCR zm*J)AH||tD0bEM9Q5yf%O3`iE>J#Yd>h@6%(i?uIDgII=nEzyQ?M(6lKn87Jz=DVX zXh(7US*JG!T7LR)HD5fOs`AFtzrwGc>JFDor6}U=Ph8le9mdkMy$+!!5fg=q+3%ps z*@*{U*|9L8>psh{YXWapBNJCz^fk|y0G{lT{@7=aoSkej{Jaf5KIV$|$QrX2 zqjvtW6@&a;nVWNg4vmMwkk6@HsHgwv3$Mvgb2U+}`%qom8;0Hwob9!Jt#l#Vq#sVA;;6FKz`5|D!Wib(4?bX4FkM z_^usE7REDEjdK}27?ha|k0>8TSF|cg-8u*>#K8QmM#9e5Yc&#Ap0v^tVMW%HEuM8o zADXRzwa!|0q+M{#P{4u{sPwre)ki8E5$1Ofk4_Q+(FPl7^OeTmb*J&@WtcN!u=$pc z%Wc%CUt`H@2Nh!e!w|${aRxd|@b~EPJw=(+I!H9~VuXyU!+R!`OhSKO_Ajsj+xsZO zNN3mM?604c6aIWiequKfz$Zh$9%=LJtr&i^B{gL!dJ)Oi8yWk4N?5A5>uy;+DJ#up zFQn{kbpdOxQof$RW7ZoJT}x>$8)24#4&BV>Vb|aWUTS5XW6Z#pI)UXiR86_bCZ^GS9ne@`rsxvdG^1GBlBcR4R2tFy$2uGb3WK6^It#-_nVYXyfoZ4(_h z_x#|{wQKApf|3=0wsN1)(@o}PuAa?{;i%Ji~pXfD`;1f{Lmw~4*QY@peP-jLmBPt^aoq-}G|hn@dg~tfSPdI4GWefy-mR4&QqDL#yPMg8YWNEiWsjq0l#K5%&Vcn;pa)4Bh+=;T@Z>1vAh4yzM6vGyp|nZ8JKG@`g&@A zH}dEooiow3HJOB_HAPJO<9yC}iMeUDpXr#S$`T<)L}>gfQLB}(C%hHmKi_l-O4#j@ zEfFggPeA2DkfSZ{_DzJl@SA_SuZgXsBjGQr^gjp!w*fr6L-5a?DWhtZ&1Vt z3#8GC7-6`NH}_?lbITI|g?M{pE+4h@Cg~Ya1(?H1H9oDZ38|6i3uT@~^)i8XSxl&hYgK7L}jHQKUdt{BvXsI*SF zjvjb&ycD|~dhQNY`UZm|${lij#KaC`@woeZ#r$jjEmenid&v#NnJj%~U72(7%q)1N zyeGABMaD+DY?a$nYFb4pwyjeOe78Qj$6bc1;2@y2d7~Bie26e|`O7BkM>?2Y6GGU> z9!#j;I&(8Qvb6`mn-3DL^^rc8wC0`yY8OvAIL$Sd#0wc>IK8a1NZnC0KDk~5bMk0JgBC^%>v-ihW$l&aCn4~8Vb&bZd!0Sg>xC$z~{bAWpMR?38 ztUcRQ#e0H0RFkHj=_QM76J&eU?y9b;IV26Cu@2#-27XcR9@P&b?yoe# z^iIDW-rmSS-D z!_T@a*DSZD9=UP{?G4S`6EapQhCCU7TMhVg)~FXAq;+tkmgSxQ(doAqZc`uU+tpJv zUuTE?{_%%%nO>hN^IkA7Snu!h^a}5HV}qN{3SD%#FO(XIh6^~zLM^tId)r>hj6JzPCt=yVJ1RqCPJF* zsHiW5(g|R@(z=wc!bIC9P!;pC&aE|({>jw(pO0N~`jya5Z_Pokv%0nf3 z-!7ayauY6ID%ai^m!jXCNll8e$h|~~4j%~A6n`D*;CrN=9;2jxXv;U#8=wGqlc27@ zLO^{R4Ua#Yf)>(ocEac(st%Uf@|u-((rI4J#lc-!^fODDSe2m5n{EFUV|9@+v-fd!2y9KK&>+ zS4U)V;ipWkv?OTxk$@fOa)}3^Ao4MMa`pu~vb~Xm#sxt^_zq!}a|@<{t8bO7QW#$t z7Tg>^elz?G>e;g?znuu|RcwhWowFYgVCM!U-*$ep1mf%VO|e7m@+e3(GGQc2(M}-K zEr9^Ub|Dc15P}g}5NK=;tn+9Z0_RyAWuX1Vs&9g#)L z{HYbAkAY%1$P|>u@(H^eW6j%qm1tjFGeuv~H-s@fZ5=*{w`c8=yC%k2O!tL8f!;co zw|3d3hF*-peM?r}j%b4Za%bi5gO~JwUkW{}R!US({y}q0^;gA%a9}=~64?T)61zO1 zG!S*WFzl^5v=>>OP34it_OxqBxOXl2sLQkFi6B{NkC0yA*;Sn6wg6_}OGsF#_4J#E zV%Jo)r^H!8B4rj-l?ovU1>TO+*c_kL);ovm4w+1b3SW zT=n_B+`4@TA_7`{4C%szrVr*09(L*eEd9bq4H`dYBlgax4hUPLa>lvz?^jqE+o?ZF z#Rmxo$7u6UR-;t;g42|#vz+A%{Vie;Khv3*+17c6#@bhl*OC%cwbODb7Kmw}M#d*^ zu4U$3KT6-eqYNnvsm|Wk!vTbzSl7)*oxd-0MC(X0)tRJS__Vk8Qv`wpob7xFscVDH z7PnfHs83tUIi^0fnv?ag`Nj6q<|C&XP#luVy-B(|-gu|<4z7i()mk-fMj&kRU=n-E zXG$nfX8-J~{PnWKln_)|bnvlA^JAWZAkPi1du|M-SB@%<_>6hiM?P;mYrsWjM(qfioG_k4~W4W8i+|*sFg#s*8ulPkfcumX6^> zi^Qwky|~hOenXS8-#v@y7~jKFxEJ(xv%X6gB7UY*Zc+cD50FtVNrqxCA=%fNm9eDA z(I#{l5`@e}fSzH-_tt7_Aiu$!>8l+H7-v%Y;9gc`D712b~O5 zXPDmG?@lRr;<0WMI==eoA~#^&+Q)LdavFYq*qHY05gRmyDnekZOFti|>Ef9@4xQuW zRk*`kE5s;74=a4;Ymy`HeyA6V!np6Hk6cVh8g~gc8UGbI`c7MW7j%*W-P6=#;d0X) zV*v*NPyQ_^EU~VMz4U@d+QQt@t4HEKwLLvh$TQcLiu?JmVx?RWKLA<@W99U-UrMsY8VDGmMA*ensuRJeATD4Xm8(Pqzv{g-E%Vd zKJ%Xd15BIz>?cxmdS}KO!68!N$|tAUu}t&&jn?)h+_;hq(eP%@3aG%k{rMtk$0aW!k|@x5R+jnw&; z&k*tz@D?~^h^dQ%vlH{Sla~#WfB>C-o}Sh5@O(c)2RcW00zHn6OnYGE;o`L`M&VW} zV&%zwl}qUSuI>*M+wFi=|6glu{?Elr|685M|HO01ePnfH!O~BU5~=dolsYROW{+972K3^gZygjslSKv4agKmL#bf!u9?=gub8VLRn&T# zu(3oU@!S-o-~0~H2`_M(ewb4XzgZD6-A)fUR8cfds@}Ig><}t&Hv8S|Py)j06pCoi zn3|yR&)(-pY#|Ntgh}qcxaUJ&osAG}VN2~ph%8EPChxlR&+!algAP{O>x6OyJzow; zj>n4kx-rm(17wX5J_>wc?$rp8ZpEZ$yu(_6>=o)fzObuw&$N5kJV@c~8GwB{p?#T& zDc|oKPKDXR1BfiI#%J2~G!bdU@Rg?n=6cxzge*rWQvyCef|dUaC=5!-3YXj-BEi~2?zmbm#b9o_)R;cR zn3-p#;mU@_MSG_*M=$h5>eEZ)QF6}|e(2sZL;tj~L1Z4KB)(QHCQSs+{dknFw3Wq1 z*t;A2TMeUeDgNP`ZP)4W%+bm+ECod`0ly_0nUjYQ1NbwbOn-9A5dhiecgJAS1b!%HHwYW7G9 zSFAB3rU`<~^~}`g4^g|yx5`#k ztgsX_J=yg=gaPjwy%tgYG(PEd86vs$$1+PE5_~GE8u2@|G?^AH$eRnIeMt9@m=pkE zUR_dJ%&y8#xJ*p%(1Muhu{khmH+e1GM|F7ci?$RI4nc;1%TLpd(Ig;V2t_~dc^W-5 zeSO0H_YLbRv~l%d%XKE3Ki$J>oekSsy4|&fA!7M%2cHtL)A$Yae>{u}DlGHe-lM z?bE1EuV2)A#1&!XZd;6^Ctf_;^Z2*dN0A5m3w9*Tko?R7KG)qkn-E2IY8;?o((Y28 zJ<|!D`nYgE7+W-J9gtl;xov<4&s@UMk?$;WUaQzSFV=li+wUFfH1aea`SgO=;_B-% zza1>J=_7q| zvV>LIc|YR03mUDfIu%Y0FomEbjWDQ)Q%qpNpjZiGBC2G-)P;%0+=OkNoU}Euot;@)GcK>Np)DX`L9y0@PVAQjq`@hI5_+S4{ukgS*ch~aW=$FGU%w*G_gPPab z-KR7x*68xo7*IA+^k0aB7HLR-akqSjLOX_u|1@@ZA=_G8E*N)bE4K(n3@KHi%MhB# zHYvE}t)Vvx>y!!=5uhLQ9kBdwY!--F#R?xz%-=T&p?V$b04GA=29rK{Jh`&l)d}#M zK=E)ZqtmaeJ3?1%$bpnf!d8rrjC5b`lXG>dTC(xv2*`}4oR6ekVfh$8XwhL*yW!Q5 zFEEKpHyHv7lmDKpFZDluvL(WxRU_MpgZN_6gv<=0?9hw_HYoeK&-Ftov-DF8ttLzl z-KYrE0+_s!c+a2n?6&LyrUNnqA+eLIkP+HtSmC?)tlMmKfYXxhG;0KKv2(=Cl%gs; zgO)fqX=j@FOo*{DFVed5$Mv*&jzLrh@+x+BJC=~KV&F5gqK|_tXfX{#nR1bBfIiE8 zA$n4D=rK29_w|n!vU#N(crI$`TEERAkkh^y^QuPaVb0V^{p$%yY|)6>Qw1pUt< z2c{)tt{dpSOZ1Tb7Vbt5LM$ojH2uYXuoEc`_mUVH*;DI9sU>80LKw-LrnaAzani}H z_{)G{c27PLT*cIZiC4F*J*usww(ebgfuAoO?b&}r5d$2Xhue(Xni}}ygz%u8n-?KP zn3)BT5dleRBD-F$c|VT}6_tFQbvK*jMc5<()Z;5huX*OCdZJ1s_OxHY@uFiwI4j`t z=Gb;38j*a6FGpTb^n)xEV;0)7pP=@&Z{3kYEVk zYe!xLbcmO)oX1>tY4&<|nynekNQ)PaLhsWtDN$YnUpoVtE&C!|z#r*#abNWAG{ZTLAG!iV{lip%p zoV>C)7Y=FHIY4?vV*&h8-B*-m0KO9x+M(ITI;iMWYo~2BolG2{(T#~p`yz|M+ z%7sx}3s$2Q*V8Xkfh+Ac=$3t7*H9koT#hq1mp8?H0rfoj;#>l~F&Fa8L`B}J&Mm$z z9e>J)#*TFu9b&9m{tUyDvPlNeQSci->z)Upu6PtRbbET-+Og-M<^5VOH=EfbW>>BUuhvd)r4+m@S8qY@pStn_eH{9>Ag88T3r6ox%s{Fz-~VIQv*8P3%pSl@phTH6((LOWci zOpCFCD|PplO;Iq$9XKDG%})Gz4%ror5Fp0Uh-^d*>!v&qd|G!ouBS)yIcC_DCq%<& zvifLj_4d8%>d@9^jng!xt1VvW3;H8Fs|<9|8L|ovLnI`61~U5MMR>o`okd0^GCA# zQYE)(&X>_|v}=Y!YChlkXrrBj%zvJY8O(?wb!$vrX#C5X0nlP2!aT)Nmga8Dq)6-l zSdeO?EF!8J{|t*3_Bu#eC0UbQ3)fi~-^m21qsTvTke4q^*+cSyqN1rjseTjHMd(-y zON)o_)oZB_h}_3~tX~5E(M@8O(YyiPqx@*E7~fvN14E0=5+nSUl*)e(jf%)GE7}Kl zEldqO9@$=LB1A~=-__Pp=@diK!F zukxU$%Wp=dqc-cjqDLx&SkFuP9qX3M-c&xKB;GFp{ICwnnZ5`FtDLY<9wEB3u8<`o z+y$2g{V0v)cldj^WY-`sm9@_i>Y}zW0xoY*dqMb&-w$cM@g!M`iD*wDD-Ks%tlmKL z+0)p=&kp0r_It{7!putRN3e?P38X0TDMwXI%X19KJtIM5%a=3#vWwU;RL8%>qjp#b zz+&biVONsynj?dO%IGg0WVH@e!!YwVWFMj=kVn$e@y!Q%=Z8;n!qK+P0-d(P#;O&t zaBzDZSbw82`yPstOF{uNiaqz;bmL%y%pwQ1?QK{F@~oz05jnL7jWc6;^tfs);T)hk zp~Vn>YW6s%L`R_abJugRyKIg(92VHV7Keh%YR%*0ovumlmBa=LWj-&BkfC?;eVf#A zuI`n5`cI`(rZ->K9|1*e8@8YBa51{}lZuxu74nmoll8l-xNf0Q>t#E6)2!EOhF7&@`w^lc)(|fDz4fTQMf7MzVDzK#f}&K*0=E0Y z#^^pIh{F9`1LG+1`I{-- z1JsK`E@@v|tJRSA`4G+DC(#l?m_&typT9Hq%dr_xc}*YRhL;+PIp^U~*+L9lWXy_3 z`e`c0+@9_o%189jet|2|ZD?NV`Secp(=CX*euLsg#5xeiK>ka$1FC}tLqZT&9fKX6 z8lE;U5@_{+@jr{fM|5Jx@+IbWrz3q*d$UozYB2X_oIM<+T)=%qyVQlfId`)l{yoM8 zU=!O#cnR`d8iR@*Bc+vMi=d@v^SC0aJGmtMtNXVelUm44JRSY)x`P)XzO!mRq#H@r zUtV|?Iv^4@IhT>$fn*OswfSCmgw91BoNLLa-o$SF`4PVH{BOZHbs%Bi%JhcSGT{KC zjC`8N`NCBAbI?D!r66x?a}5Rht%GY?G9|DJVZNa*L)9X`VGFy{u88SZ6^{iF2yLU!(x#HQ`j`O1rhe<3(+mE?Dybo z+hu&M`s5)5YkX#`BSR?6wU9YkieAqUPz0=$Y(GJ7mn-~|c6|1H@0W6)_;aJgk0NOT zo42*lh995{O`f@XEXHHL_cc)#7HQ0Rkb7ew`WL-CmY+#7N?P9v?{z*|&Y#YJAlL?D_&`Ec_}>C?r;@F6(;|sIFj)|@6xCCW_qq_-`RjXm$7l^ zAefK}cRwv}bobecs+{U49~*Q-(l=p%!s>hWmKqil+u*If^OHGcjV@rbPb(bS7ZKKc z-MTh*{b0{d!dNe>wn`IBdU*OqzI^8^(XUfzKo<7^GTPz>SHcP_wv+s)9_ezPiQG#{ z!?=E%o|@6~agGGt?q)KqukSg#3OWdZ=T6tif7M5)gg&=NrVjdqhaA&&^Y zhK4|KHf_M-68g2EX7)iVbmVnD;A^;Iyh7y|`9%A`dXm!AD0Vudoy$$t1(xj3Km12n z|NrI2gCWw+c+3mzP3P;D#@Qsy)zh5roWWmT;T**zdG=N{c_Y^M2@ z4W>QJWLm#LZRLQI@d#Ax)@S|kAWeKHkj5vCQ{H=FD=rfeO9o(c9;6dTl!%J8tc#F$ zM>!K2I-kz=n}U=nfUux8vmP5punUHkg{%i2uabddJo{!?enOA1n4lm@$8f5O83dyi z2uAX8S=`p2OzJ#<>-+^rKGJn?XujObdibEsT1{!8*YG}iAxvXWcWrzr( z70E(11P@f}*Rd;q`A^Qp5Ki^FJXUYYbzXd;fU4p`?x-R5ygBHh{A$jG8n_a}?UKw^ zwF$B(YUEVl;J*?EXQ~@+CQtG|l*O6~1H6tj)yHv2BCgajY!N!>Lgs?>Bhbkqn~5DY zlodqiBe?4v-!>Cy%431QRNSBY#<^;^Erkj0MA+J<#dJZ3v$E4dz;W7)a09|to~euI z_U>yMXfLGv4BCa1kh-ps5RH+|Hn)N6jk?(hFs<4?3mGtcoA@1_52p_=2r1Ebtm+Y^ zoy)Bwo@;VVoOfH&fuH)G^Kv=7hFQ0qt+7Op^27C9r08vxLSKaIw$91!e_z0vRGmfT zWodbZjo~JW(XYb7ClhU7dzPU`0~Yex&lvvU7-npa3yFC$?L< z>%@))`9d@|ZCkEo1Qv?#F5e zIqpCk!-PL)YBNz7{#R4~rE_Bd7^QBRckZprri}~k918j-cHJ(uzeG+@>qHazerT}} zZNASvk&v^}_!}bZ!KSdvFS9)V(?ouv@F{ z)86XX2f1omeJfmfh?E)Hu+k82*+iUK=!8X%^+vuc3lJ=bO*u9YEkm|jeRDhY9L?rl zcZ-yn)M2%9JkXPnR2tZn^OSEA5hxFN8m@9JzRUl6o2Y*Rbi^hmKiA<3G&vN6pE-G? zYjp22ehhRNBDn842+nfjU=nsxI?7F^!)HYOWUzetXFK^yJ3ie%qu zns1s7jMKKKU)k#>zAKmiT!WKI=`C#|Wt?Wx*VEIF*XF?$!d`V`e_-uEwwf9Bd_R2L zu9&f}27kcZ+U0ET_4YTLBmB>%Q@(ZqJ`;xOEzqG{0uSr8qRFzZEw8qnD;i__tmuTc zg`hJtZdBgatu$MK*;Lx-B$2k07dV=`a0_`8?0N8c3#n$kZ0`HM=WqZA^aH8HAUZ9K z{4&FC92{VNwV)vc>y|i&>o=#}tMqfo{9=)4PpV1qi_7U$M%`HdYk8?q{+p5x)>;d; z#8tHRt&kk;KblpIoosI7xE2qH(=J(ZusKIuM3y+B^M){mH0^I;q;lfoG3PwjOJ;P9 za?biEr5(+G0``IezC4c<{=4P#!m;b9-+7V|EFBX&Lz@8$IKFn+D{XFL@Pi+( zxasI#-da`oN;OaC{KC=h(@H$%Y{BnjoEn=cWbbvK?n z)%3tg+ggkV_j8EXDV=9gEL*v?7#7=wNy<_JA{U_)@82%Tzj?wBFrxs0NfHrJuCD_k zAzB}OzqGOoOU$s&J2_XJu6RX*{TZ+hk!?j19&+%7h}}m&7=6_##=!5)v213+V)0d$ zS=+&_monbqR=T^oSWK*7Ej4|1KPTQ$*Y+MFM@1 zFm8ijjVjw6O*T9zmQd9#2#t}4Z;oG%oNsO=q;Fx|P62|4o4#i51->j~vXf&PZ99^- zRFTk){`-zIsm7KIJQ-Xn>Zh zI&B1avON!Bu@3y%_KjAvX@dyW5Evf)6w6m7Zdn#(CEv=ph~85W@!_L zVc>_>xsSz#sn?a!KcW^7sYR{yR(0&(Q<}$DoX>pd_Ow^+SAOu(?4vYYAWAn=_Y4OP zzy9Dcen?)3Qy~h)4`9&9ZYG@N>%`roqBx zz&^ntLV4nu>sy~=(;9?6qG#b8+=yaH8x9JBxTNezU$qXpoSe7;DGO*3(Y~??yF?Qg zW-<=?p!xF*2GWHB@&Xs*vI(a4D%jYlFMz*JLqT}F*pM&IO~9h93;C}3CUM(W?65)I=Cz(4|>dEolBD3&qa6Rlhr1dk$Vr+XEq@&@*_q&_?eXJ;wvm6#-zf`agFs|Np!}{*C_E5`D5O$eE#zj?V0}HG@hq!83+H z`XD{#o9qxm%A>=Qpqt~Gup1q_{%A50>tcAbIu+7aLaG`ujY4`{2-csixEIvVWby$s zk0wi)z5#IGNXC!eZy!OIRj44BHZHOTsgiiU(e`Y*ujRp(1{BDeCKy3@B7L8e5GGsB z%_^_FWJ2r2Ab0RG4r9_5db_#0bUiitA$DO_&y(ZW{;FG+wa&uEst>$r9$xp8g?Y@Z zZ~O=7E=t`Qqw8%2UFPTiauIa)MX}0WkJr=v=a;RRxQp7p?0yahoH>(ox z1-SX7>v+w_E5GkfCLd^8|D%iBaagrTxr>aOIH%AhRmP!wM~BCX>wm}E-a2c+p)7%( zX%PeZhhQA07qE@9$;q(t>_E9q7!U2wJUeZSfOqKrc$xc{mF&lPgT0)csJHNpU1JKL z>#|pZO*~4KO2~YUDf*)Ej&n^Gx6Qt`uDSR}^@o|~??EqyIjRV)nch$iQ zyt(@7aeqlv;-xL$1Mx7+k|U4)lI4RT6)^f?B2Yi0} zR_%vdZ$+;wW}JRxPvk$u0J0Jq%T>y4<3(g#GFkh?Jh|~DeI`2{W~)HA32io((-`%- z2~>3mI(6v?+4Z<1j(lh5^q#_I`NeZseOOmD&tl&(2vbs&XZmi*?!5$eA5XmKv-YNv z4j3=yzzg>M*Bm{HKoamC%Ph^7&o>nle65vjOD-vb$?EZZuyBAzlsGI@h6>@n8xrVl zEq;-2(hsQ6*1g+eVb+_n)vJlQWA4K-!0~fV3mBGU{t$ooJuY>S&;44AG_ z1(X%*!Db=)(q0efNAWbw_mcH?k{Rxh9H=K8ZM^_?EK`Kwj`NQ+b@1X8->-{`J8DaN zVJj{6&m*|?hvm3>4DLr?bd;h)%It%=;KrlXA=FRGtFsBvZ1)8&OwC^>(b%0LVU5YU z*!D4#QB5{oQ44$YHzkcow}PQ(A!ih+iAeqh0<;Ask6TE1pT%1HY;g`W!!cQdbZFs$ z-@OHi4bI5?#goStO0s~pp?k79=cusL2ItyDD%qu3cu(!Db2IYIrjmQ>5!r>g-tOaR z2(nE9F4`nOvyTGGam~55*DAr1pIfh<1I^qc{cL(dy z&B7Vf17e`^X?YZC3YVuP!=-RgWV?`<#E}f_|5;Ah@@3{ z*j!L_HvdnPQ<6z`n(B*N69V}4+u%qr!Pfq&Jc0?TAi=O1*9X<(=N7 zgaV|`K<9V(`SG-dP!9A&OI-F8_AIj6^gR=`@giimfm(nXB^7LD3Pb*a|Ejcyo+qo1 z0ntMJP2$f%D@c|Qg6jvd&##Z6-|#}vKFc~K^oSH3;4ZDbuK@$^Wmc(tR#U^XS9x57 z%x<@%q`tQDSfKy%%mmTrYP5FgU2P0FQw~ZWJ5%b5_w$T*mUVTn5aNi_77UT?jLiAt zjgRO!y9J~cMK{YM+f=mK;P>|>yg*znbP4i%pc9jkYaJK5v}}(M7D;^hmn*5cv|$KA z=hVC#XRp`#9iSp-RJgZCTdrt})A|>xIoi&5hq(N(N*wxC-0Dw8{iC}(nKZL`q@phl zyXOGGV*>e5I(vD^xRvpX|6u0wzT0E_AC6 zSgeN;(i0e))9@eR1>R>K6{8JzfapuIxZX>ug^za0;vW`;KIS+&>gF+tybYY*r{p#Q z%=-PlNsN_#TN}{ie&>E#^37B|(kJW!3VdE$X>HTb^@X3m5PoL|$POi1&{%<~>g>#D z&FRg}?)kG(p~dI7(HM-QEFpLCAKmtA;t&Zj!8N~QKrLkEch&<@4k=2=HnT=i#ZFA<`jI-t!@%z$2UCPK$1RL#EwDs?$D~ z2|uaj3S*Z&@)hh<(@`XQb$VBt{aSuvV@0=UuFb?#`J~)f>_u0^xqXOY(?&AaQo?hP zqKnXIVfzm03;OT%unBV9x6%eaHP5esB9bFMnmYM|c@BE@!pxd%&MoOMvQ+jKx-bOV zIjMbSI|miIDAX=7xu7>t)G-I~m_%z)EoIGo|YT(|@eBk)1?eUOV-#(aS+9B}AV3yaUX%&aP%`QF~_#}E1#8t%mwzT~KIfH_b8 zNJJYD1|#)X?57S%q*71ZA8=sKhU??2aC;rYDBtNc;sEYRn0CClMysl78)k?jwwZUl zS(3b?7WC0setp*xZi_cY;?mu)t;AVn}UvAobGbF_-c;vp*m}ki@zU_^u^g| z&==qB<$rXK7J>L(Q#K*@a@`t8e4zIvXME|#M6g^(mG7upaoxqchsHHVw!!TUc*3`V zvh^v-280u;+Pxv`GMFe`@I0QdUb}VkhD`t0+lYs%2jvK1q-g^Dx9W+-r%v^7wl|jH z{!r`rG2>VnkjUEKeFmYR{MK?OB?_bJJ|8;Y4#v5j`)c4A)$l#B`YP6KYL<@uT~9|=Q2m+XR#STCwR`07WfnT4)kW89ZhVnRO-=f9%tEy7 zR*#LR-adhK6vBR8_@f^FOm+h^^BQ+H;T+mkg7<&n?LDKKio$JC5T%Jy1nERYMU0Aw z^b#9gKtKpRDj>ZHC^exsDKwbJA@9>LPvTC0@4#o2&DM7XN+_2yXVh4Nz_6C|lVB3bN-zwKUp58TiJJSdm zL41D~GU0j4alol2`@*VTIIH{j{ zHP%EXj)Te9DUZrPTxR=*X9YBV$Ge}`0o-}){dUsw9X@LE>x5Z{rcT8YeDcSQ%|#HA z^>D6I5v|ZU8iFQD>RGOB4YZ%08CtN~+0fWDHxugw`heAYJ|tXu!xJg?^2D3x0LU=* zUYd=Jzw+nxLiYG!X($nqpeJ%M)}s5{w$LYKCnAv5=6N>dnURP41gISWG?-Ur@)aFE zJ@dFV;5J#oXR+%fWPvoZly2u?rT)ih7s3!AH%j5ji@I(2L2?)hb;@^`ER?*mym1pl zq{bRJ-)V$rp?z9yOrApUJjFmg=zzQ9kvYEBqtn~cXHB2nY~TKK1)JLDf_Q4PG6m8% z9VI0{janYGQttAb*d%L%odZt0SNfT3QmST+E<$b(fj_C-A01vEf(<+iaLEczx&A;U zt4iOXR?>;V{8)Eb*Q4q=$c9VA-3hZsdcX8X@8qEMFP(DH#ZAEKb_;{?$`--Zt>{0S zOc~J@@9f8hDl-`lSDA;4BTm&HooaC-VU~ctSO*opOx#&7;~C!>WtGI?4Nw((@G$b; z_E~ldXmG$QK;M-C>yR=n-fSvp{D{}%n}>zGRC4QC z8U0fBW+dYa>78(F7g?<(d01ayMp$=@Ic9h-qyuC*x(<^dTjZlQ~Kjn^Tof{Q$*<3k$QgcYm%3o1XV5lP8SPY{lTAJ7RK5cJOtU&7ZC?V>Uh-HLP*$$Rymu^EjISnsaUc1f!~V0S-oRU^ z(DDBBV7z3^+vjwSEZ5_hz77VdB#zHFFW+(XHO(^FF}Oa^iqyhVtd|GRw#_)tw4fB8 z`SmSnxap(YngTBmq%Ni z?qQbM-+nw{V#VKfwqA7{QCXsvp|RPjHpuqO)5!s`S^??%BtV@F+#J(n9C}-I8M2Mx zyM?y3!wfL}&&{p0PzqLP4L^v`L^HRr`9PO4qlM!?pAtRI zaOqWxCrjc4%5df>d0KN&iVK;J8yp(3i1q|#iPmt2Gq*V z(5rvT&RQ15=k|rKeTI2Iijy0A76aiJ-1n;kT&^@PIlmSt?r^226trRRvCnk{U7e~Y z6XmaB6yjKJPp=_)h5|15F;VtWzu$F^GDDpDujoW z{B|N^rZfbcr)f(xBN}26Z$Sn=v`Wah^>_3!=_MYN8dn9^`8-E}gs&n0S_f0+RN(^!q z+VB*$z)t7hcewhRis}?oOYY@gP)+x5-JT}p-Gx1Fr@oI`YOEz#e`vxZBi({|jq?G} z$_5ecvlc_64^SYm@}Zoq+YXFCz0l!WA8ay2jsE=>-FjB|`w; z)ZW;y7bgX$S{w*S3Ku|14(@}t!Z<}{MIlrX@frgvqXSC4<0BZb>$0Le7-i6Oik2K>ouI1Ce>=}CM=btntri>2xO9M$ zvA7+9usN_Ng!}nf(4Kgse<|Wx(gpjgJ>$PVrd?_JY(V|ea@#>(>X+6d;x8w%IIVZI zG?{BQo5u6r7puo&@!Qg2vnE6`1-=GYHWkd276d!SP)$B?A!9$vK_adTArG;buFC86# z4!l6bxod~mG>9Zha2E!q+(+E#_bAElkKkcxnf%=Jl{knnNR6aic)w(b+TmsZ2G~QI zI{OZoO+)zmqdQSpzteoBj_JI2dJpVL1x9ZA$iXm$g(^UkdmCbA?Sr(KuacrwQw0Wr zzv##RU`{|$J$ZgwA=>U9M0l>S|9n78#L#{W27Vq+h)EP!AtvlXkQkCy(}U36YRLd2 z)Mr{5t(rUwp>UlHwyeUxa+BRi*A7Eo)ImPv2k;ueY@E7cMn;Sfz9gXq@KlHAWvU~K zbcW+@NGHvkN?%L4a6#iV7n-!~{7*tB)g;9~E2Cc1WbL&yqjg zNzwR3cBZ{rE}PgNa3eA3B6Y`yn38(-Q5&v$Br(AF^R~7c{R_z2S5z_uLB8T6*1@Z8 za}zq{3U+X}e3EdlHfk(0eSpGj$zhblRsOyPu7;!%|7{j_Eer^`uZ2{8%?H-#JMc28AMh@jYGEs zkwF2{j_x&44}ga4nyld}C&Zyl@7L1404bjOu4o{+x8f-!yqx-_$<%|xSAEUwF1&Z) zTBc6q%3&A0`6_4DwysLzEsrxVRJ|WZzVHF)ZX(*8g<~BA@%dng#>3uFhpOMt=dGS1%U{f|-p@XT*3|sjEthK;uV}1y^@o=} zjX51g}KAKyKV1{H5D6A}lWDj;R(nKyN-@ zzH(0iE=^?tCN;XiuGnYTWW%F4-_*x7J%-j6;6lC;aFKABeZ4trwil+fHRwya1Ikdv z=mHIcoSphv)C~K%zjR^_+b!38wA_=y9t`5Ub?3n&6fv?M#TftobalgvqF=ucPzM5} zDPTUBkr)VE3l3gs_S;uQgFXV8C|&4y7~bu5Guyr%ws)Y_CZ7B40qQM}XMjkRV>7!# zaYZqd@ZuxM8Yqfrtk-bOH<#3E2CyDuJVaP10-K%5Gx1u(Tj=}Fn==91gd!S?AYplF zWh|=d=T%mJcD-+?Fp4=D9AJrmT$P;aJmRtosA5^kvG05CT94jW^JEY*DLv z?dV!`=WXF6#jOT*W9dUNz$Z3`Md+rq-e-|jv|DdWV*NEAlzlxk<+#)qYpfDBqqVl< zSDUVeV<{4pxhw3n&)x>BT??tsC?C8Rw`g|aq)Pn}z)*DS6?pvTAMl}bLRWDlzlfhv z@&epHh2))TP++I?>jd(wDW>~kV=^n9vJ>GkagX{vw=Mdu_-&N0rvjZ-%nNrlemfJr*|H%2AR#28r7eli@c|>Yt3O^}jeAki+swAnl zUWgEzeU%7A;)+o?kBH*Hb+$*opIo>#>0(-J{p#Jl0JJEo8IjG@0Xyx`LXXeLi@aag z>CqbeKtF~8&>10?@NP56)-2vlFUemz=0xL2a;CnYEi(l*sXvNNc%#Hr5t?3Wx6Qwx zIHUJT@t;S)ksjNBEr|aA`1$YH|1kFlG6$%*pWj@=HK^cMMRPZNOasd`zh_g{(O5L- z{4yThb9|VngSJn7JT}H~0_{iQwE;I}iAl3DPIKf9aU61Sr`|Zc!c;4B1{? zUWbK%@Opr+dubd&g-@N|7DPIPdjwO5Ts#lvw2AfV;#7aLFG=H{W86Dr0>fYZxgZ#K zhd(s%5W`dP{0I2tM~1Gwng-1#Lq#iI6ga1IK>*)Jzwrx~J{W&SRh3SYA1tPlhy(Fe zd*rR7_~h8Yv$AK5t$zW5N+QzNlIGM(W=}@t9g)}OG;9;+j;x;?1_Gd>jX`Z<57j!f4MJ3aT*@@@}W*n))Vx}5{8 zC6_J%`3IP&bX6e{&NgJ8k9oV%KHCsS$S`TjGn#|zM9^Q+X1MP5Q(JMWV5_LF+vF zFj@PT?m756hN|jh4lsc{E0e$Wb6jQ+rJ!&Z^F!(P4zxNrPqo|lRGQR4p_A#h%h2OAi0JF3+WMmF_|yLT@7ei(ub&A#nG1q+0OxnX48AD1LEo2<;d< zVLuNV@V>O0B@8glPURwl(SYiz@VAZDEeEDTVhKwNza9asRyTS@@o5xvtXiLTO*aLV z)xz!Apz@&$l`aMuO*GU0;%kyW^el0NbQ^~xU7hOmfnOa&{kgXtgALLUn?$Q3>|mtp zJ&_baB{M)`o3?FOz{J)SygX8L$hC=c4R$(D65>#p`b5fGzM#=!m3}Hd1#q0TeW*oL zE_glWUcR2C$4pTk86A5XA@}3~9S8leKNQn)i;bNB>(2WqwC5se;Y;xCks`9@Sw2(if+DDVy&WG}nb{s~RV%@Fi*W0ZH@3`~Es|AAlC{B0= zVhHI%e%0-BgSE+Xrz8{F>+dS*NB^KM7hUN1_4LuvEkr?W5W+qoq6Jc;d61#T%XaUZ z!c>LX#)tXz&c~=%=MYKBZU3Ph+CGC<*|_RY4*7t6k?sLQLn@9aLZ?J)YeoZn#Rl6y zVE{ihlRLNa?tj6&AMlaMg)BKD>@Sa)+j$zezHCJeum=Ik$lYKh@2#v)%4*Cj&M)EF zo3Jb(@SdWG^S5al*)e|dvYUCAG&TBi|CX}OtC790vDeJpk~|cuUzndWb}XzAp)Wcc z>tR`<5-D01R;I+taQ@&V_WSj)6K3}py5bWYkIrd7KlQ?3l=EYk^kci!#5+MMF*geT zQ)T$Szkj|`)bA-I#->VVn)OW+=gPqPJM4UF&Gh-v6LNTQ$Y%Y)L#Z5LN(JB&w8Zj_?= za4p9AN5$}9?k|sGZsf{Mhi!2iU`L;GaDR`&8W>>5^y^GnCSxo>T6Y7*P2N7zSLMT% zp1XXm!%j3;X(^$N#BPAZXoYkKB#TH$@JU$>7V%)S8g22q2wo8AQY+5 zA-k4n585wO3Q&%?g+REKoWMVq-XE7(|1qLlJ3#dzffluL*=^Z-z0TF(yrBnVbia%C z3-}Ub+Xx>oGdGiNfvADBXD1MgN%~S@I$G@HZKq>>0%|Lg46`pDB+Q|TT zaP7A5Qpmfst}e|xZy_~QMPe|?H-CAnAr_>wX<36@1~4DXn#1PU-yZv{G!|=89*{mG zT{AcMR+8jJ>~b-OFQBVX5zJ)E!=DVX7vhoOtS)C~Knq)Dlb?O}u662`%wDNO@&U-8 zTfDPP<;1piqNU$93_wKW;2=bsrOHi`cQ$R>_o~qj0GOT>?ZW5~Z7#*`A2)jo&(mLv zlYj0k@$2Lru@JcLj7W;z3SK9X;aH6vTe06%1?YY#p@Rq^HIr4GxGWrg-c%Lj;%9h^ z+VEdWpzx?;7vuC@cJ5^9{KBRZVSG-IO7ynicjc0P^S;qjjPCyQsT!HD6PCfc)S>`4 zx21I@UR;WR(b-Bi^fF9{RP_A4(PZZ8u(iJ(Bl;c0)r}-}ie%-4%GVr_8W8H~oIng())D$>wX7hMvHfukjqJaVH*z?Ar-mfsZURZ}ssD`+d8J$9( z24ET$!QtCgd~1Sdzra?(M?1nFu6GGRw<&@YFsNfe{MCk1pU$V?_?rT7oCf!3jsThY zQO_#(_tNY#jZGcrHSU$AHx6OHSIcwZuf8SUB^}v`R-a;C9a@gai3O6OG=i-!OIMq{ z`!!TGXY1JwzY!n?XgcFWEWxHVru>l>?0D4LGO-dEp2LE}5mezQ821al7lt`NtrtsN z#g(HD8qXO>TtDU+kM)E>5`G$Ad$Sc-s@cus-q&wUdOA@B1CS6VR9sE&>0Hs>>ISIy z5^CntPRGTQBy4~10cukax3(3DpTb=$&e|E0xc2}NffiJe2X57CcdpfaeumF6f4Ih+ z%|rOQRmuNY%O3<~YmD5_kd)N_NGJug1@==MMRT%lj=4p&u@m0UU-{OA=}|1C6f!f# z1~0u?d~u(z8xa|N0{sNI>>|6Bt@N(lTEXZw0De7*skloefNLv=?u~gtdrf4%Pb2Y1 zlD(PWmFe}EWA#orWU|Rn-l;&4Deo$DNBRbG{?cMiBzi$s# z#i%5%J&%BJ67|O9oWkqu#3p4{RSZe8I5ZQ<(Y9&gIX^FI3FfvABnK~qf15okthn+_ z4oG6^R|n3k2I(ZQ#r-1_ISUX213xSJ#H_cbsxwgAEJ;ciA?&+1kb>P5!4I#i16yv^ z_8#{g5s#ZLaI%Q<#CekaH*#LxTTF7=o`sP_b%quf`T*F(!zrr*IFR&}#C;0_t(Rw` z_N&oRs)|ZN#GEkCFl8P|+$CH_e15AEQJ_hF<5Pn9nHd-dFE>N9i5%GD#nxza;C#SP zDdaK9)Yn!BQLeW^A`71lu2TTnf?^G6vsU*%;v3PspH1zE!=xbd6(}VRz6KO&ZC9JP zo2~i((zzQSK=7Jq`a-sLLUL=w9nI9UC5o4U&4O?&@f?&VE*jeVU>J$F;@tB1N_wdqC?r&yNAxH$tSt6>3=7(6k zo(gf+i+YmiPU<<*K|BT~+Ua7FO*yt3coM#;1O)ma&nR+;6j41g@LVd~B8Z?2UMLOE7h&2B7*9O}vS59@C1Jr!pzaa%EJ(KAIfwl|) zf2sTy5YOtuJv}nd-Z7efVgM4GFk1)e3Mdl&e&~E^1;UMjV85X`a%*g!eBhEh_Jj6j zDgeSAH;^O5aiaE%5;hbzCI=kUFhJ>rOgmBsNp;Nqha-N)pYFJ;7WyZosRFAbB5`16Ze)N};t zYF>zu=SnGJj>i;&{iFiG97*M3kS*h{sB^~RGfsx@MG0f)l2AmyR1ii25L`KccztG# z$S$i#&-^%?>W9&ei#&f6-k6(-mJT!CbvjB16fOZwynQ3z|I!5+C+1PO-YwDGN5nu| zh{K|pK9V|bkVTc3`dWZT*EBoFb7Fl=BZLV=93X|ph9i0>d=btG(dWkAjX9te*MX}E zVt?YpDMlqgT@ctWi|4Pj`P=vY$D#gM>3lV#^sFI&&G97`jHvIABb+eN_u{_W{H1Hr zfg)z|Z~@bMNfw9(rxUd@;Pk;LVzoVKww%DQfJXG9Jis$5#DO9l#ZF4@0FqS&w66m* zMpB!h{qF4fgcYLRj3Ms#(4(Biqo4Wa%e&qFxqBnm{~a1(WQ@S;>V*(E8}%Y-q|%5f z8p|eLmji->F{+apC=UIiJqStoSQs#Q?)K6&&2e@;$`8?RD_;P#jHAzQ6150*R)V@W z0qiqr?GVNiW{&j_zY!JSx-p0iD%|fGor8zRBKPCSa(3KD*sO)TwwVbal7xwprr$5Y zw$Gqmep*;Y60I7FK+_V$AOhofV{P3{#Iz%AsA@5Ik^L4Qv-2xHV(G^0(r(!8XSa+! z2!EQOPki*!a4FiILOdYs(g?-g=N*k@f)H|Ilw>08xdDnf+GPjw(Up9Qdh?!H$a>*^> zsPGGpIeFZHtlaIuoV(s{&Rhq$qj^w@<|oF5i>0<7Kh6GaJ9~iA%2d|{vFz8y-xw$i z@T?y+A!$DzD<=y2ET3FS_zixyMKjypQWjrk^&Eejcl<+_`&HxR^E#Z%db~2!y}LQA zA2Nbm_;VoQ1){GkJS>GqwYFB$96YZ|@_c>mdPBsVl7UXV=fL-~2G~$_|E1$-QpU#J zaoW~;{v`UH5W!HtJv}fdGt%YOZL_53x+tT`+xOqUO*)*g)*qi*L2pCJK0ew@nHeg` zA9G+`M#f3TmiyF7G&YBr^g(Y4$!G!J-=V|-0;6O4C5cl3I@G+T*LUv3Rut9sePBOL z1!MP1uO_N*0o@Hs!mVGHd0?O{1#}dMuLVpS%e?ENs4At&mQWky4nBNOlmI5KR~r8% zf?n*UIg^Ovsjx5dpfA)EoTi5j|8oc4Hch9f9U)a zQI|e?UREdx;p#F@M^+UdU9xQToXq+8OZ@BAu(xf!hNH0 z=#@Aa;vSLhGARa6Nh$^smsCW6BZ zWTy0=llW5@l@E-SoACcb{fD{6tDlI$+ddtmD`~Na^~gh1P0sG4_BuSM#5XJa5x4xwv-~Y`P>7O;yfA@=ih?LUQEV9&NKYI*4{sRoa-J4yJ zn9Qp1{v*(G`5pRRcb*X-0LR1t>hLWLZ)P40*?!RL+l4uh-cz!q+(5o;2Oq^!LxGEA zateN--7lbkQgj&qa33%yc?KNrmYNE;Ds2PM{=NM0vbFH%e17Nh(9~{9ng^|+aPY`+ zqUU6zNOm6Ojvp}fpY&KayLVK)JQ^gqMn3%PG2&!~K%2@6U#xmmj&z5-BN<plXs1IjuuN#95*^bD{l;)@9P!TaqfGd)yp^MDDUz;@@}~{=(JO%H4A}ZWe1>3rBwII|z#b1+UrU$~i|C2bSYa-=j-OJ+$|X^co?OKj zxvVl=;uFT|H`?ngSWQk?-_m18g5JfZ8qYyKpUVWWp6KYj8r6O$9H--=Uo8WN>VZB=sa|Tcy4map>qMNFd0$x9 zHf!Z%rEFrdu8Y$j%jM(i&8iR%LGqp6f0~zPc8ftqwA=a!6^;hBgJ-loU(A%$^{at* z^2hj5vZT*Ty@vp)G3eNzUgG}RM9<-D<#?Y5Yoa!Y2|j@2{!ul4J~)8v?h)GKN0kik z%#zQRe6AK%2nNk`4p(mwILIRk{do{_OKS`<(dnXn(He zVB)#|_imq@T#BS7%q06_l?p$`8~_LnCaM&Cz3TK;c|N8;3c`A*ib`O%A3pgg!k0<{ z6Khit<(!Zio}=XXxS#_R1~jv==@MqYxB%*Fvbuz*E8hWl0>TLSGJqlw#X($#ZhH41 zE3kQ0^vU$qeImmb7_Z3V4kj1P4H=Q%#7|A01Plh$6gI zL8C1rR_Ez(IjzFr%pd2|Yt>b6Jzc_A;u8S-L(U6WiCAOJTeq9C)cIPs*JCJ+q%L5f zJEpoeb@-ysf205l2p;N(7ls0N=R^`$pi2YykJM3-xLZ2P7a&9GxE=~eD6s5Ch$S8< ziYlD{3M}-1SDzAaFWSLJ7Z?(|RwHG`F_-+{(zL=O0hP2jtQc0Az#>f3L%j7;PxSB) zRId48X8i*|M(&fznR~6D$;OWamns28gMJ620xps&vGvmu2jr+IV%LiqQUVSXd3E13 zFZS~C+buTe$qyeC;6qE6BNf+=D=EI#MvUf)E zlT`9D;%E6+Y1*JvDT-^U2ys#Dc;3XP5~top{;DJ;6sPi+F4=xFICv8_Elc6drm+Ou zEeWfP;h^!i(7s2>1FFg`i3gE@tnhMPkct51u^yKrr*9IWlE*lntNG!di|Fs{XGl`2 zc$w&n;aQJ9bg%}Ux}o1AT!fbB_mC>smULZXbV^^Mrbb+pQP5FnpVg^|?;bg&&M`yB zw+<~}(iL~wFeoRq{Wr{;{x_@wXkY&6U;YQa82*m`&yoq^aq$Ny4nohE_5cEg=^W)= zpyv|UCq!=VMU3%~auKPFn&RE@jbdE=;%$OFG+sd(kp+auB3hC7FSG%Lfp+Cpu%<_k zE|{{U#3}j*!oAGpv0}APlH@t=e%qWRb5DIehXu) zfXW655XsH2l(*7m)Am^UGOLNTrwz}_-@YHsu&~=9u0T~ zVwfVIzQDTBs*jiO>uOVZKM=MYt$1-o~NDc2Vor*xaR`7Tj?Fuom~@h1JP2*g&*8ZleZ*{F~_O|&mL@|YFuh@kApUgsE zu?O_mF95yJHv_=Cf3|{u>GDf}CV)px4YML%agBP19r%(W_>XcI$P{~fP02~>{%hYv z9k4#R!s)GYMJGKrJ~8?=xZHt_x3kT%3W=d}Ii zsq|BMN(au3=u)g%XWGg3zpQ4I5J;P4nIlJ7F+JPB= zeHk%xs`;n`hBtvlH+beZr>ggm5lfcZ@3HRvA+Hh6>+f8|*@S%#q&>-xU!Q)%Nt)Ud zTv{aEj&EeVNV+SsYt@_!lyNRw#Mj&HWVg~j3nR5DJ02^}5@9Y#LGSKwpT4F#*wYE# zhFU9zRdh-|u+yob35ljKQ4cL>B|s@rHEN_$^}&w1@hAD>%bB^=1lFmRo&&N>?n|!E z;6hw|oO(|tXynzsIg3t4#Se0*-$gw@oeASv>^9VV-IEUo*1W%lhQeB_cZXw&{_6v=* z>v}JK3y@Ac;O~~bYM+PvhTfN%h(2yoi;Ke$U%a3_PXXc8S zd{5s3a&5FU*9Y??Avrs;Th_A&?U+Ei1P!8?@(dN=$w#+C!zBR!SIQE61OTWo01U!( zsEK@9nPh(%Gbm6m1UuX|;TZ0Qf)mFt};tc19tZS_dEkJ@%)YK)1g+pRSjt(cT*Uum)qehp~W za3WmL)owm(81m>BR)gK~FWntj6tW_(2Nu+j*6ZSWTPeh&TfzTTvmsWG!fj3rr6Lb+ zY?r#(?OBV8z6EdI+qwJc=(VqDB-6{)di>U3IzvJKKc&{}r-LgoJnuY|!6ZEO69n5l zBa`*PK}5NJ2Fm)b7kt7`x=el-aGBI*ec{hcx?&C;ei~KTVRvwoBGzerPvD@+o;>Sm zIR1IEK2EAr0G{VuX*S0~PZ!H+c~uOYzS5-1)nxenW> z&!3GUC7VxPpKybZNO(RFnOK6wzQgN^Hoh`$KGG&-XIYd^1;`3_1u$KoD~x%gcdZe3 zz3m(OXpx(seKOzKOO!5P-{88Q(AQgcGPOEU(_Co&qUSONYzz@{`t$ZUE{2YJ4#Bam zkHTC@=q^JA*nT(fG#MP5^M|%giAYS@2|kGhr;keyYW!-{ks6(xWg#ON^&1rvQij=BJAD7G74N{&u5dGEnjRffe@?8k!Hc*lAjfyA!K1*m z;#?`Xt-x?Wed?ymm0o_VVTb@qsJv`0?)Z6#x)Q?)Yf_)r&x&5jF4bg}FE5Zy?H?op z+dtIPxg88D`PMDR#9{=_n;2J{H<7iHEeqn} zd!1WpvXnD4+!*njH8Guj2;Ae^a;4{UEl=<}!WGvTCvhW%mqE@)71;d#^Wtgb9kb)M zmdh~NIi=@fJtqkdeia#UBBlpUpaWs}-xr?R-&*0j5sBy7H={g4>m?33jzhRgWnG4D z5To?yPDK9DKqIa>oy0QPdR3r2U-Om-S7Dflkhni<3_AP?X|LmJx$@y5+zF1sNhi~l zN@+`#Mb4XOYGdM^^EPP1I)KciRaEb~n3`-Dcjy zpu0Sy4@-Yp1oUl8Xlb;Y7$>Zeads3=NZU+R=>or^)UcHG0nhO~;T?_nCqb+|ZDquK z!02>bu@1tf1mP&!&9wGRn=#`}V{WX7a$&5600aZ;LYLQWv*35s_FPJn``2!W)LDw* zl7Ux}{`h(>s98hyhJPlk!Ty-z*uyi~2)5;+`jzU&d@E{ToF3rxqk{=qP_FuNCxf+* z+WKuU`#6Z?0Xzq#2mu!%__zRF)yDAdcCAw$hthj`+v3GOqTNSgT~-2}y1!)@nP4wr zC5Y+-3YQkSonsEj)_CvpG^4Qj4Ez*DhZKlIMmFT6-f3>R7Z;b~XQ*b7>ur57Mq|k) zKeQxScTdtp8ooyT%Gy>2oU{l_=gfpXpM+3^BA+>t1gObws9P=9*FQP5CQ04Eq3aWZ z^xnyKSSn~I9A;{9fe&|By5N6k>ICGia3QUHfA^nCC*!}Cd3cQr^iH84d1`Diz|4ytz4-|d?uYpFM=CZ3Rq64Qr(a1}AfA$!8#&M0Yw(H5tZv_1uJBc%tkVZyjphfSa6Z^W16QW}ynxJ!qFl~~PaAi682EDf zh@f1#{LQC;KsBK3LA|Po361mEK*%n}@<&kpy7rtuQ(eS}fv;ElT@UR<7ELdaT#rFf zYm!4BV|$N^UzjHcf|W|Ch@^9OcXHX|tF+MCXJC#Kxa+N<@i!iP!!tT`esXvC zs_Z1<8~DZI>WbiV>sdFChX$?wh8}feG;E%L%uz`}dbaIO><#tnseranCp{*T4_B*o z&x+72kZk*t$trHCT2mQF>nZ>`VYa&xgezWX^D6ckgf#++$?c;PMM z8Tz^|aidddmC84FnKvS`pSri5jJ+j~zKH*VmXS0lm&kuJ`|^+6Gc!+^CB8+jQp?=>w>m1@#7 zSqsp{87JI6oF9ifJL-;hl%ZBdi7miF9_CYv%PjEt?qdbzki7BM#;$CA9d?i6M$M&N zrVYcdC5=v+vMO@$XsS#QnYNsOqUs0;t`pW;gb`dCdzfG79tzRqP#8jeMu0WZs|EsJ z8WL)=8K+goE|%}RZB3J}QdCLDxUb&Aj`C)V9{a-cKu5VQd=OM27TR*o{w{bXTd(TP zb0I(h{T{p63gpG!99}9P{ibSrb_h^^|8d}wwqc27cRaC(j7Vf(cn&xVx~de!<}XE# zUcEcp<;D@g8Kxf`lYUo>J12PZ8>%GC;1{J-X>9UwU-)sk_Uc_eZlsjg4{S_<%)$K- zJ=}Rc?!>#Z+xoz~98@joU7MV|s{5r2e59kSU>G7{HUs0jKuVAzrD4KL1C<(R5V(|F z0s3>PHNwHp<@c|8Fc%y~=M9KFAE-=>Z+h&F3mUP!e~E8<)$O$|Nru7^)Vph>I>m@vTG zKt0`NX}1sf1)mMmI|laT0wmfUnt)1w7$OP-7z|&VFYLl+F@oj+@U5Ui=J*W!C7{X| zwIOM`>Ky^F`9suLA{mff+(TloyRX5zZCSdnbs4AaOr-dF8vP(w?>>U6N4)A^s7%lr z`45@N18dCD=Jn;QNr0GzSGX$Nwh#L5K||q-rFYGfK^wsO*I{+=?L}V&b)&r*U`)Yp zVa+DcMR>E2GN9;}qW1MFNjvM&O3SB`R?CVY@Q%D}sU7^)`7Q8%E%DDd?I+gP1W;NJ zp&#$iEe^tMf&cG;1}t(+12T=0RXK8)7l~IJFWLhDaivGzAjS&b`F#jTi^^@F$-fJP zGvalHVVKd}s)IWSGpesMI0&p%m?wRI&@(2W+6GK_{>(LTdHEcafAZtC*>RxTvdz`u z_6Gp^eDa?l$%uhfwWWelwBLl+`op>t;Nozk-&J>tM2s2V`xfjT*}D9 z^edeX(JA;bMr^%Iq>y zqX433%)t75g*z{?ei2fQMe7qAnNY z5w@>o>l;E1RHh!ySc{LDc+5D~X*F}PDx})wo9Ue!W_Ji)u z@kFh)cCP`RT9HJbsaF?N#Q~-PRjBgf-+rtkCU5`SPrbn^&@h}nS; z%ubG1e2^EZ-Umf04Kl%8R1Bamcek8KW1Z7Vs+v##(mjADcqcJ&GGkr`s(nqcH**iZE;lMpu?e=pm^Gf|RXl@G(cJ3;Xg}>6&*QWlmHGE0<0*W)>lW%^)#ODs z$Fq&Gep8DVML23EN?7Oacy7aPP)ta+-q{w?^Iz=j*Meh?Dk!UoMu(1R$S@D|DcqaF z#hG8yZjU!Gk(pAFR^i+YySV0>S$Pa2`c@OeawC#${)}_1Un-Ru&l~H~^w_aP2q|fm zxHqTsK`V4EWSDx?4&%;W^|4jw*uL*qEV_1?RHFDYbl;07?ewe1`yz>XjH@nr6atLJ zz|0g`_2`{h>Ra_2I!>*OBc?J=dqRH3xpkKxpkyl4xp9M}^29+`^W`B5_ze9u5A(O! zXb9`RopmVJ;^SBSQHTp>Z#%cTY|Rk)Vhc65Ju0vK13aAz7L1=x11pFHV!p)xb+^;K zU!j*FTay`en-=HneW$~Dd9!6*Oi#-nmFR!Udr4RF((DTvg4z5RLyzh5XQ%sPV99@~ zWdWSP6jTtEUod8t$>^5S9xf~X$ApwkK&s(|Lwzd}?y^lSFZS%t$Q<>&V|Q~^>lEWz zgYc`|ce0Y3yykZQ*yiKZL1_okk@^{a4L(e}5vn~>Y?~y{cWUX4*h?E}#Tu<4K zU4SQKye+>A**y&YIwOlp7^=Zl6>4zd*noPjY5}%TE@VIWi`{v9aR9lbLUml<) z#a|vS~~6 z*slfT()^u4Zu2KG-#mbn_NvjoTgOq^E^qy%mL-Ku4QQK?PiOT=vb7IiHau?Ku19p2 zB#>lL9ayeBc>oJ{m!j;HsW(+hcpKzIJBx##v)39gW4DaP;(*pw1hna>!`YBG3XA@|NN`M$_A>|JT`pZby%6AtKv-CCw}aOjQsh`jJcpLa(QAtPLZ=Jq03zRnCx}r$}6>sXaU8E{tX! zEbV$6b5nas{TNVK(^wu7j?C*i)<(l>405aJ7X0iJnRr&3#-yc58}X+8!*F z+`3D;64|~RDRDk``9}h0(4v(1`XOMD{AjxxGYujdjd9Ni-X*Z@uMkh5dz*w>+F4sd zBQ7{u2XBUPz1o*=%oHEeqA;w)OSXkiDh!F7owojfe{dC^ZuBN=Ma$coe2g4HZv!Jf z(}_n$gq=tPJ-DVe!Q6yc&K^bc0UL*f#cJp_Z&7t}Xwr&-XV_k65Im%1ikbxAgI0G4 zSBIS-JPdazl3YFUO;ZOtWEG&mRACO_uMAUt$u@Q+mZNzi;N#kOQA9_80M95_yy^ifOi!swXd@pL28;_?B)U!yU5AlPa zrvKFZWE_d-hUyEQx-V#9w{FSV@oP^~NmU_c`~V^sAPQW_en7WZqiH=hVJbNUl=!S< z#a0+|lO%p)aqHytOCB|*Q_V)fu0L|Pt`I7(*F48?wWzo)+pq?Is@yrqfEXBuY{>n7 zB+qunVJV{)lnAdr{pm?8H(P?$gu%*8x1_`7h2Q_$NXsJud!v||dmV-A?rtBfFJC|} z!GdAcND4^j>MfBHt+j%67xGl zrKccxz-joM`f(}+@CFI7rFf9U3;I=%4tL|&&oGD}cL*>=A9i90^&7%2?#0cy`S#1M zv9MT?3@558(1x$Qbkr&M*t%qW{gSJS?IEf=VJ3~nT!cs9a-h5|yfqP%uYWGRd4pi} zvNaHB`*kt^xoA*CZXiIo0e!a{=?*fQBI9z9AfP+M9S-<1sQf_xaGP$Vu_oi)aEEct zO{rlXLmP6}ps6%Th~q9vG_u<*w4wMUA>v@V^tQDayMPcqEG5ZGjI@hqvbgyPV^72k z<9&#|D1-#g@yp_^lv2@a9j}&s>=7lrkxGGp9|z}j$wG#=P+QO?Q3gs;S??gjp2O&t0ED+$iG$M?5(WDCt<7q#qKA~=;#=6 zLBAj;1wWl|&M0R#W|-R4FY*QJFH*e*=OBGtg7E+P@%@`c@gFQ_Ek)Au_nYj4&HszJ z_l#<)`@2O^M3gE>=nxg9MY>24h>CO(sZm-~K)O^BAtWMFr6ZzLrB_3hPUrytoR@mz$j~AM` zjt9+KW?32jPG9<#c!Q&;w#_Ox5FM|Z!=r3(_S~?^Gf)oY>h_lH(Jt%#qfwZjJ6Ai_ z5p&=7Wy$-?EXIjx4K8PzhZbfsbWBIHXqfb7rw8KFEmX+_txr2=BAdyl8`GGM;+xTD z=$~m10A?Vp^tT0Af&b5G!~F`Zjn(Ix4&J2t5HJ=HmBX-{c<9^lncMTd{!PnNYxE4j z-nOrIC1}V$jo?WPNV26+2}^N*bgs|>T7$mFje|GgrFk43XWUwrdMMsLk57CAJj4gz zn_qQtH>C463ie1B2@cSiDGtE0Ax3;wEAe`7<2GH<7xHKKG;$mXB8i^y+D(Z#0RX1y zXkg0J!rlgopm)s9sO)S-ib2*z%;NrG0yDTBwqLICln9P!hCc0hp|(QP7k{x4mc&h( zIxlc)mOi?f$H)J;W6|pQ@mh;BC7G&w5<;1$gaH@5Ly27pG(1pHA``Um9jg>?;FuGU zQEH7aUbG3>ecbmF_pu6;)Kc=cd%|%GTIffTG*kFgitBB@IS+&z9M%Fn-di#V-?dLHpz0y6k6RaJlC>-5p>&VLXWxI5t?)@N261vm?-Z)zC>6b! zMuRRecWN!XyOL?S0ntU`X0SyPr}g4H-uj95y8glJms`0s$JYenlcqN1tGq1__oT%S zIst5l4{>E>fHr)4PZ~?@#$@NkE)i|uJio(tXi$z<;wLzi;%IbA1obHbMv1uicE_Ul z?_rp9(Xck3*$tk&+h-WfF7$FFe<8yX-WwXWT18hOzoEP+%i9l~LG2bX(rJzxjTj-s zO$7C6&SYz1-bl+h9+%X?caf*W-idbb=yr+@=dwfez^I8bFFmpX-Upv(J{m8MZi(f=C zbzqsWz? zmPTu-aT?|sb+^*=_$+?uUGa`)4v$k)BW7E=eZIw>&U;o!pUeG4TwIbz#paVM`d3qI z^VSs(J=kO(AcxPho;tQXD^zT5)OWHlt;sTi+t{apPrd4`2Q}%Zw#*BvRiFjgP2+wc za1EKgi~bk=-MffNck?qYaosV(%w@H%4PTG*kns{NweWXm;j?tt{$|U)uyYHN>DmCg zk7(r?Fk}nwQ%bt_?*6YC=?DJV&o}QWMD!W#=snq#?7rWDPs=oxt}r+BkYUgCMQ}XH zN;A@Z?Np5q(6r?f2aKPRl&@Qg1shY#=$u3nx@%e(#V?TP`*W<3Qm6}vW)3AFplf7(wpUtzFz*xb1(OYS!l;V71?mN)tewtt zJ`|RUxWcULOW*8*Y=*Pt$UWA6a_)C{wDfM~f zqs@nr5oy1Yd**eI4&$2gzv>hn)$`tgv5JPtRJ6uf4jV?q9g1RH z*3u-4Z}1gjE1cpidO+X?zVGzR_8ze^tl-Hcln2w1jN|qT(UN$J^+XS)v0T>0{LHon zi44ndO57{TQ=db#eKetw95?SnHJ_{A4a6J^qPJmKS$I!f8DkSo7$Rpk?x8$9Z_V$R z{KND)jv{{DrVffAdQz&u8(`p`e9s!DXYD%y8e=Hg30}}})BqgpStt9BLARnA-#zz} z1JOPwXn-mD2bA#bA9|n}zsUb$R){DpY2GJtR|ya(!vRQ4mEi+)30l9@8K*id^ld(8 zs4|i;=bDH`yL4X^{WNA6%V0~8LCy0X7|`e_UAS0Z9)~%(O-y9Mb^iwNA!ozo7~FF# ze=7ckkvDeVgZ4O)FaG`J9z%#B1Ard+8i3jX{RvxcL-nr>_x@t3(@FxFp*70N5-+B*uZf zn&g-lJpG4UL1Ml+S^%9>a~C|+LcVVM9syztoUV8MoVTJ;f!y9b`NtJ zjNZ{D_L#O&Z+M)G=Lq}#8}Lz??nGX3F_mX1e1iUh)xk6iWc>SbulZ-zyhznfQ&;zk zvn_HjzZE7J`jnR&y&cas^=sP#&1|VYkUcj$Y0E)$|XY?=7Y;$GHdc5c~VFLim zfLGjSOga6Uji<3FF@&fR{qq?O@+RCV@C!Fq_?qov(q)c@b`ZlI1QiBpmI z1fP|~dLE% z7zU{2g$fj<_;S`)pz0j;JjUCLr|*m2;HxI7Hvy8Y27cB{?~^$=ET+f6*Zxl)>;D)1 z$p2TzQU6T+@5iJ&NpelCKfZVm47klFbz_Dt8SL)F-(~%B|XsXq!@Aw%{<%C-w>UOpMy7BZik^*CmN8tzo3*W;5dBTO1+TX z$A?VdTkuh}N7~SCOgfk%X%G*;OKJ3Ul6Wj^K0O0FF!EH(dzR{|!Nf>EHi#A+@luW@ zE?!#EP*S@JJkinPW+S)bq(8Ap_%a0*o^5dqWqTJkBCFheMH$M(b~de6=QjP5dAuK? z`1g^_yMp9~{b{Tia>=gYF@h=bFU{uQ7vDzl^?p;kJFMWW4T2Xt=ocaRlIv_&B8d z`0nStncP2Np(LU$t23c^BWN_E)&KJDbNZMs${A| zjQ)joi>xiW`E3dDh`YPPDUO8fIrS^)%ZfetYhUTdyjs+2Y@*A=fz0_AnX{s<<#Ci~ zax~E!`%33>b2^*+a)7xkVfnhTzGKx#fwkWB%6c&`K6FWZe+(k^!y=!yR zo}3rTn(S<$7^Y-14I9tD?WhM%K(O4s(O!vcx4iy&h$MlIGHLz*O?}EY|~O>*w)cIoo+!DcQJ5VbTJLEYaFeA z=u^~r=Bx%D!wd9J=EYCzK&I?W8`2Jq4KD~&|B_265ddc)b0y#C^$e4%nCBjM*P_T| zha_c7xW~M4s$Ako0n4T8K{4hy&LYdwQxN7h!$@M$+TaBd|loM}b9@*G=UnzXXx{WR2gjVhW zG$U>+Gf9__^|jLVyLRM_VCF}nmS0PMyBGNlY+6(rX!%r+^}$Yl5YcA6b_~Q~dsKQ= zst9>$lw7>`Is*sc@7*$X0GKKoM2cVTj_etEQ>9rRT%%RGL7UckKq6AjH? zLphccO^v%Du>zy0n6g%FgZS?IHYS#ob|P+jn)-ES%QIO0iTF_2@yhQ=)t#nEkH>iV%<&$Jph4PmJu>V5ipzA)yXCp{{+j3DZLa$$k{W~Eni$b@ zad}KiWdO5ay7aB%`UGaV2FlC0_%jO}-C{rXe#LGenfum&UO7MI!D`+eimCO zJ`{P5T&9Tvqy;NYx*^7WE>Oqok^jx#P&T)bLf^oQ7Nj*o5gl4Guu3v(ymLp8i3t+yjNBCP8EcHw zx@+?!H(Ad_5ApJuzk%-3e#H&{4?cVDcFuxWsdn}J>cxhFf|{!xWp}dBiUo3I0sA9>RzYfn5tFbAuN*J_EfBErw^QmL-RcBd ztbt|d!NQ9kTlu;tQ<;&aAMIYV#iL|tL-Zod@<-HZr0QnlnJFHFfD0=%jFYL|!vIOQ zqr50pOrINITt_*hDOWN5;0V~%F+A>Rs-5A0&Cl=m01R+aU^@etb7>SKQV_eRx5v?w z^y(%pE@TtBi+gUGapnac!_wYgv>c-~&~LamF}<=IhdhgTPR}{$PgVaTm&s3vn4eeO ze$tppBgb@9I#iH5uk5Ygm;^aA3yTK?jh_NiY3?`ur##IfNqG z>?UBC6)ug_bYEO8{a}AS@dSD!U|EXBAKe2z|0u$2>dPAyMWMx>@iENJZ%vu13<X1jK$Uw#kSWTO3=^qY`%b~M&ocCw4fg}lv@T_U{HDB^vOJUf6GLZ zU91{^C%V$w-RPmps_UDIv!Mgzod7(!tn_vD^-<5E2JpGxwrNQ^x(`MSGuX${7Bh?A zmm(Gf_rCuu8`hPCu9iTJ)6l20TGWeX-dasxU$fP{!^EbWZee!IOs4IRW%#D`pJzKe z_@Iy7Uv9*G98tU;DP#5o*;RIyO%Yp!03MX&9Eu+i&o4Z=Zw$+RhP}0~dUQY%V6Zh3 z$8UekA1i@vUvENdz8scrHT+%jegf*MMd4SGQ0(&;zf4++)`C1aY^mIci_oeD(S8R< z0O#QsY*xp66iqIX*{uFy(xgn2cP|=TyY=E_e=L-S|Opre@R*fg6N+GwNcgr z3X65eoTO}tv5$aArbKEg2F)FvkCYCem`kR|T+(5PtGZJ^~(=)IBqF-x*S?k1DM?=En z`L9Z^G+~p!UTSTG?m;<80?@?k_U~Fi&$f5u3DQ3!wj4F^xbQ^|lJnh+uVuKf3I=G$ z<9b@0?Xj1maQbt134-F$hy+J!G46X_47~bjY}szpXcRz6cF2&DwqXQQw%dXGHw+$m z9-ozcLnEl3BHN^Kyu6U~37w7geJ-AlhJK4d3&?ok!=9?!~IdzrO zY)2V}lFfqqKwKSN!NZY>*k7}^G%rJA@l(rVVu;!QS#U0Z8Xr}foz#h5T3x(mWN?W6 zyY5ZOAUI|*zU*!K{aISEg%W?D#H^gCw|A4sSv1HYyE*;64%orv{U`?=l9@)nMU==c zYC*3$x;Qdr=>CjO2)3@Fp#4YyQSp3kW%tWJOuNOv1F0_q59`-9Vlxd5(hY5-!2VoA z)k?j}f8@wQhZK(k9;T@1`;QkF9)zG$tWCltTZAS_`J4~IxXSlX-h&cOi2dLJK=Yn= z;7=l&;H6?_SOMQ708g<-=>|cWbVO#2s1>Sa-&%)nbczd%@v)mc$JWN}yAw@xP#}VE zDELhW4?T|NU2X_8bgcSV!XMEz=;7Oeo9_=F3Srep^pKx*OXfP2PM%2e$Tqkjqz&0r zX7KflPZ?6$rhD7GUEJ#WX;MVXt`5O^{!v@(cuNwoYJT@kF53js^R0B&^eWoKA}D+; zp6ys5eT5)$86gG;O$01p?{FtE^cFdA{gQEx;I?_T6`U=+yDhfji8uW;Phs2R1gP}C{vR1Q4cblgOn}6tgaVDC z*HdfmCk^=j+FLida{mx#2=sb|iI*$`>CEiG-@0nNJ|6Sf&(LES3U^Dk?++zrKgE=w zm=RL#Q(t&JV|2`(gUEo|U2r4Qv?(ss8AmOkK}IUN-#HE(ND#!;Jo9@06akxoVB#z; z-Jk9FG~=y(A%+X7`7lY=rDcB|0G!Ul7xdA@p{~s8OMBmxwS$s~Uu4(G&nTwPW1o5D z>%2l8R}55jDf!$9JI#uXn;;BbMx7UiZtsv9`_0dXUy)|GZ%0^U5i zbFd`PZ7tw_)X_i}*;ryhif&x7GpW9n_<;$~A?;H|Ae@>?pvqeYqui^G9n29<>^Hz_ zz2ZvvicPU3b-?$uN0$=tsjtv&;QW*DS4^U?ic3I||7Amy&7SS?<5AfB;|=}Hdb8e| znOVHY-+`pu19dIJSb;UUNXiWxBBp&;cI%Vk2@g$Wx2lij|MpJ)C&2Ch=%4&={yky2 z=G~xnPbT4_Sqh61MF^UHM{G9!(V9kLs3ptYc&*y*CNwB`-jJA>Az4(06Ta*u<=1!h zo@9<{*<@saW|~!5K~V>$t~z`*^JaNPu3sPW8DkRl^$-}>8);QJW2&7NOcrO+i6}2% zo6JaCDScKCW&L^fau+-$8btdOOu#a3P*(BpUrMH0LP+2vRbulluRi;%#c$+~E{330 z#x6X)PK^HvSk(Xjw(B)G!SN>sw>84mk*8l~@6H~SW*$%_< zkiH6B?V-b1n(?SQ@V4JFkh>monPaLZE1R=7d~+Y&yyLZ8+qk!U!r+mnRoS&?*VE?; zw9Ayv967CF?iait>zPjh4>u=z$M#J;tCP|vcv_yB?e>?6h$@Q~Wo!8mJxW|R9iKes zeJQ)j?D0=4hw@E>tN<6C=cVr~a_iG;{)O>Q8)C*@pPoC9Ub)8*w#w*mnt0m)4!AH@ zisKu{*_NY(iW)Q&gud)@eP;!Hfxz&FcTeZZg|+I0|A{6udbA#8?F(6>nmmt~=+!%g zZ^@r)q!>tnf0%SZL{aZrs4vkUj&VKg0e0H$?~JHw8hh6GvNET%2k7_k3sf-)lDYqS3rCCMgKXL#vO z0Dv>6!g)rtE&?R1Jz$M9>Pee{E*Jem^|<_g@DEcSU}}MQ0m3{7yLT=1y6%4jKKeEw z;bik4O*&cy@1aL;ciue#^dRFXQulo*mi(@ak0roGP>C)=`voV6*k3PSu9Iesk&@+g zVRH@t)5F4Z!<_J;_FvnIdY9dY*dnI?2O8uK>Orf*VkKl3<1iX@+vKycPwPV{))shD zR8&5vPCj_kEFZsIb%ReHcGw2%27hgQ^9P|zocqJ>%s~x>EgTwi;5bh|~#_wBu{hqo+dmvyAcSyqFU52j7smJfn z*rSZ;>!gxxIU=D?c;2J-_9u+(K8_hV2nADzPk5a>%Isd42OezUmwX0%o+FrmVq-_#598{(g_>+0;9HMG}- z+C}~pee~;T2QOubs*Xi5|IWOMf?g&Tcp~JzB+acjWE(5ZGT}fja$%0@zVR)Osp^ zhO5HB(ZCf-A_YMQqS|0`a9tn%X|7Bnum&yY1OtQPUryuyH$VSO|L;e?A7fQ%z~;28 z56+%HsUwQT`)9>p_`CV4fo|&*55ud`_~%!aXp-PMt}Cf(U*k&v=B%#|M}Yh)UsG9@rVX1Yn9kl%)IMTjF-2gDK(X$0t;{_%Ps zKZmuMDBy)RI@E*$*%(_*CSijQdl4m^##SEJXmN01+S!5)m4=br!MrDsPJ{+Q+v#T0 zaKYn%zX3)Sl%!s9sl2u1;nq)}SqgMnp%*7|FWD{Ay7wF9=(V$JNdt2Dz01&V#z;pc z;}o7t_7}FzhWTggqAlY`NKt!6D!2Al-h_@8<@NK0^U2!Eo;$mdOGG2HIW_#rg1*9$ z7|LoslmHJ5R%4t2kNYPuQtzP0lytB{u z=_(*QJa6LafIxiMFmiDLm|5*hJS<=LWgl>Tn*?~cM9lJ=Jn{NKpY1Hzb7qQ@s$lN< z9xIzw$O(d@EN^Q$VsIHZ2fy8#;FN2B9w3SW@JUgs11GV{5eJ~7za%pN%%~wvbsiy`V-tVw2OPm>^N5D%+1G#ZOML*Bal91P zrXrCG&=?NE^EPRC*4{fNYCqG48mBAR7{IVzj)B*SMTawlZ{a;lZ>AbXaH;%+?Q^rQ zzU7WgQ2R`S;!)=%1{)8FW91|3&~kCTAAUR&RfPj*AANYeDdivC_HNX(7^cP zmnRoaYM>iEluL%rAC+6KmClK(DdKZy&6AAvq`>kl8s;^Fl}@ImvnkSBL3)@8i)b9* zwo}|)Hn-x@W{D!cX2E`$xE}Ru4$=9S{8j3TUZQ%Tu}A?*SiVW+)}aiqz9uj0$(B4} z&x(~{E^n*&BhOLTUli5oH>Uo@jsszk#L!Rf8)z(!75NR?5WQ1|53dZ)`65x5Q}=pZ@c10$_!j*G zaDP%dxQL|@y{L0e0vUx-X)kxDKci>4PtZh&s8{=wwZw(O`{nT`L7_;{n=-YUU0tOF z&ZJJvtP|r*8h|)=``K=ZtGqE&JGFarLFXfSektnT5UlQ{s43t14O?dkH)@v>T+g;g z)GsC_D1E=;vB6DVf7qVzZ6!PjYq1PpAG$XE zjyuKRQp~QWIK1~(&94iGB}bvh2Yj!b)}EC#Jn|Hm9z#H%9?rE5a(L4JXxdELnva$i zFUhLqT3PojBh%Ly%9NsI9E+{Uu>Y|-|JAg=LFhr$ycvTHL#$iAm*?kR;&E=+Kkla0 zb1C(GAVPx-NIYKG)0`+fRrc)4YH=>H=%StId{(@4pDGsP1%A~$V?&|K9_wC$k>)j}J zlxN;tmIEx?LCaFS@T&#@@=kB#wgFn@lpF~hb2-|E5@+wzbz!CMn2k}z03ipVXFJYs zR?lx}2HGWaoO=s6vo#c_yEHr zclk%@YJp?JvFZvulEF@lEbl6u(GxTef5j4F$i_9MX~mV51?dFU6$uus%Mx6ysoy1{ z)SZr)*y%sUN@Do!jZdN*V7wQ%<|^zxrjo^`xjr-Pj=j~N6V)nfmAJWM9us0wzsGeN zDoaA~19`Zv%ao4?+7@TNa^3QvWZ?AUB*JZIj55Bv0DC<=L93t)uiojf-z^U!l>F=S;4;C8#ZLfQwf=L%Fe zWk@lL1Xq@5gr$uo-g>wXtu2|X1h}L3Wk+#EYH`<09#e-tM1aY!(0CPwIAE-IpRxys zbRWx+Tsv7GNsQN^0b4dKH$~d4FCoGGap*}5Q=1g{7-W$bXjN+f+67NjgO?0m-g)}_ z+(I=$b*#^i{O)1?W?}>F0Kr3%pt}7&9xg5+u#crcPMW6x7K)2`(Z~8_1;PGH_okM@ zzDW;pKWp&IMmxV0jN>EZtErlCZybN;WckUi`1tQLQCKJ7&m%xPk6T{q4^wv1$>Fmc zxW4LS3D3V9fi`x?Ew0az#>BF7#+8|@Kx5$Z5XKpJ#inUMCGC1_k@@@nlgnW&C@B0K z)HNv)Q+F66Xy4_>oops8(nvdvnJh5>;e{r+T~4^H&vfo4I*y@<>_)M6sJJ)sx4h30 z#$D*&Dc7X4_^YbYw7JW=ND?N8t(Z)Dy>BPl#o`QW6!J-u>D*#h1vFY6yBH2eXAlb&)7dZtHgu}XNCnGzW`S>zU^ zDc3UppuC*x72D=eF!H%%x%CWfDHd_F$VgM&`mdI2SKf&>p_Q5U>fVzJH$~A!fph3? z1@_++tJ?334H|)N<@Wnbnj98iU?pHjHZ7TwP9i=1 zgm`zWw%W~cuZ!%SXP5%NyipR98M+`AeXZb42`jbUA2wVA0%b|u20c*T(V3W>6{a=F zEaj9chedkM2BXX|OxW{C>&c*(w4t)NS3ARUFL;6ldgVVDiZIVr7%k@@MKi)NvPKU? ze_*|@`pO7?VAxMh_D7cAnmP@RbRF^{(h&2{}ZEXqDRIGu79rCNANl$G6;R7z)9 zb>Y-Y>swRjB)W;p?!Q16q^`9F%;g$&yHbaj!O(IJ-|&{2&Q`qH9sYO9vu%%PLtBElWnA=&C(tjs!Aq~FtKgUv{bEKBWw z*tv(*N#DIIcQpw4H<$q%$snF zV2R~6oA0$t2D@-w_gwz*YrSVZ$`!RCK7(w*giV-mkcJ2T*P*n#uue`OE2(!EDYnQt!#7DzU(jrAike**RFn}m~b z(#0nLc=x~cW701pb5ja17&6*4iuW_S9}wrqG+|t5^Cloj0`T5&C@!Q9HH2EGJfJm$ zbpBy_V*g?0?KxkSxbnMpvqkD`G77s+1I4HUrGO&aWs$Y1-L)oWB&bm77jmV9dga=HBqWjA?OE zVtUtJtn&>cQLY>a9z3T)?j)i69sJF`Zya5T=^OwT`9hhYu3#~mJ4wsjc7E`(|5uYo zxeZ5OoU(_`%NrZ)=W+O+7Lof@qdt|U4(6f+V3&ln?pMZ9Gq7&Ssf~oLxjHy^f~QLn%NB66wZHj-RTJC*Qga(Uh1-;$(1fE zRuK=|V9U5_^#lp5p|)wyFZa!KeGSjFw)Z_P)4VPbr|cQ*E}|^;qPoaHQ!u!lEDv^}1l^OY~&&qxnsI0-a`-#wYjJ>cG6x^p{d!Um){o_=$+3{=yn zt??|x+!XRx(7NpMzQGMV3wPnSXlgMg4LT3KYY1p{+O^{jn#|}Nu!E|yUbF{;0HU=b z=aJ&c$R90Ug{Yx!)W(wziMORP-Rs*7-Y43*vRLvUupt_XF#yotrvIS7O6VWQG&1mb z@UaccAp8AzN1`VE_S~0jzsuGjotF>5zj59FCY>h#S5X(Bz>19)=fX%Zg8zg60-9zP z(SQJ|$8V)Zvj(SqRmQue^Jm~JzrhFHX8%f!RTyl-Yi9Ei7R(GJP!hkzZ`vy9jK2wd z_mQrF>e7C)*TFGc3Ve1WTE(uykv9d_1FZ)CVQ@ZlrN+`K{uDBQU;EmLJ@j);&-Q#+ zCvSF8LM;CqHdm)UuOnND32L9I!`|)xkNZS{Ldb}=OguJkcghs2SLM#2JO2!{{c++p zfev4J;JMf+51nLyqS`lacBQ*eCnLiSxBi#^L@VF3XrYJip01cWqq%Lz>EFHq+okk? z7tyj;b_1?&+69LUw)DuaZP~skJnFQuo;J2xy87~Aq#<=$=9K!80UskTIKZ5{+05}> zk;Rs>S&&x9@fQUauUF4&-1j^X=@WoI9V?QeHXPj`ecOCi(DHc0 zb6~icp7SS!A~a}ym)1wmZrBV|NGucgYe67=;FH`@u2lWEBJ05EM?A#SpXoWIsp}(9 zBy?YvQQINt!Cp#H{$@_^$|R~k#k60>72@L+JUBUAd4^#~DGp?CJH!-eD&9kb(gL(6NE6v+G=k31wwv{Hp$r!QH?wwxrRG5|v+| zQ-e6;d+~bO6TM-IhQ-s#3x!^-fVN%N1(+VUgHEuYUUA=8yV%e&?#pVdWDGfq{Mr)% z8USVa70oT6u)jQpZ26kCWnEe1gsj%3e}DYtc!6?j#UU_t>NiFYyyB=*&KMHr{CobS z(`GpQ@mS!deY$cvFRW%0tBz(V&=H6r8;oh~=G0JNEy3VrpJ;?cETZ9CZmV8s5p?&l zDWCs0^I5JAPYr`b#Rh5AsKW*5rNo~w!r=~+&Nzu*I=25IYhwug&E!vACmHB^9LSTp$Ky!lIZhiZdYEah$$t=-egad_3%ABF;;7}s z>s3Bf)y*Tp(>i%E=$Xf39n&(=a%T!wRpPQ|VwK$T8U5dnfI{%- z`JOJGU;-IAU5|CZZl@9wb#}rk9ATs^L!i6xdHLp^{GIn>3Si^4zMjl1gL_DNFWjeSAAnOJr+CG5!w@PP~ETTfU6=gbMFvS%4WfpLc@F|DXoGy z4|9>7VU%IP(b|-V8FzTxQ>8w>@oL_h0oJ)@9Iq2q+flV~!8x!1GRC__9d&Mrke z={s7`+0&AastOo9^eiI1-kFvJq~P}7s+mt$(WG*e?^+PzZVqjkq$J9EPjr>3IZOKK zUE@9dAaK9*a(hFpnqe1fyX#dw{`MWt)!XLt79-LN)lb`Sy>PxZrIi_BldN}_LwMlw z!9(Q6v8xfcO0GZfRZ21@`60|-cl$tc$*}I3pVrNfKa**5RXKUX*Iu32@ADO2>Qmr! zH{6vQODIqu03GS#cjuD&g@09XWwos*^0!5n0D)&hL(psxqu@A>_79T~-evrO8~j&T zzevxJY3K{5{lose23TbMyoTJT6i3r`&%Gret%3)-B0<8C+c6Tp7ubMym{~%9W>Kr7 z2N17Bdx#c`=o&7j%*jcv=VhOS3e(2l*4@3Ql8)0o&=LBk_~9BotC`M)>_iD1aPv@} zadNp;SC^M+=m0EJX{7@wYp#Qn9 zn!f2TG+h%BPbn{pg8>w#(bnPj>8sJA%-q7HyKeb=kOZf#O8DM% z4}he8{n{d(Na|mPyeCa#rP77jPvaiPk)SLzO;Tf`{8UfR)ZSg(tLrj=q8v`W0fbrT zTthsVSV`UMw~C!lB~=U3`jG76f(5ddc zCB>cCXcmXh8#6jea8_8%vwcqlDX5*&G2gMPaEH=s8z0;<57t^9ZG6 za5y>Ju!^<9cClT+?n-L=h*)8gI5mFf>wCSf#UINg%JdR(-gds9AH>G`NXg<)f~Bk` z>`7;zNjAkkC^V*`YDA(3!`&ve61i6&YWUf_|D4nQmwxq&tgG;hO`9Hlrz6cVy{0>z z0lAa4@n(|N9wraZDZ8FxOAHM)O7j|QsT8uj;Ww--WDitXwD0s!(B&k+Q48>GHeAcNH~zUUy_x<~mzgAqd8)J~Hq`Zb;r5RD z@SWzVn0@J|>1EVLXsp>BlyT;K<>piOHa4_0L!6I$48w<1L3OF>+@MKjTDOk71e)Cp z1)zb_Yg6P5xLh~HbsDthc%5>EINv||;dzy&&_fFJ5-QROCg0eG^JMP>Z45eWpwhf_ z&XX`bRlXhqWM0TkYLqqR&GatoHqcn+%dw; zv$StbUG(K!yQ_NpI%Z<2u>4(b?$P`HDn`u)r<)hRy~jG3ry0Vg-Rh6HPYG{4G+@?H zH8#i^@)ias8}NN*7S|j%R^~|6Ne7RF>{q=E6fg@csMx%oS=IV*=~M7P*C|mL_%lKq zaGLmIx*oml6q&WFObpxV5D{3+W(vrCUHHP?O+OjY9OEpUBQe{<@id-;Nm^T@(75&I z{m*8DeHXp+Gixt+ceLF%%utdt?~~qrY5-}^?S}j!O?_B-wS?tsyCtNY3r$DdqS_#* zk!R?62=L2N4>iBoln3R1mun+;AW-Ld)yyz{1!PIF95OzJe5+iDsC@)B{5Be8!QJC|l%S6*~3oa9vNo^!rr zI4YC&bi5N?EcfKxC-qM4Xycl?p@CBXGEjPw%Qp;Cd(A>e{<*8=!+H7*H6 z0Q5oQ%RVP(w8;&~ls7^*Vs!cowTwKo!|Em_iSnQL0R=#Kq)@}GRgmTP6T*+stw^3b>8Ego}C_8PO$yT+_L!TzIgWT#Su1@_3?2K1xx%3nEK?S+}a&g{5U6Gqwum+AiDApOtu1M zE?;nxjb|uMT+-(5`RpX*egS{jrLITS|1j}y&|ZT#G3aFV+bUlo2=ko zFWZ@Nn?{{00P@7JE3obPQ9>_?Q&8U4jUnH03P2Q@+q}QDm=W}XQ>sIl;pin+)N%xH zixG0yV42--Q$JkRauN+wf{%U=y8a%^|0AC;$~GGNRbC{i$ll#9pc9>I6Y7T0Aa0S_ z=($=ad_=D=iq|V&==1^5N;LdlFlq%Afw;EpM)vKjnAL|G?_1p!O_f=6G!Ts|;(K`z zz*f7EO#kR~@v)%!Sn+(_szln|s{<3OkgMSzCM6>OKI=i-ns1KYcho8LJ189<&g4+S z;+3qW{0l7TEc3#Hdx`F-kOE{^#82z9sv=jsyY-kC3m7xwmydW|a1(5A^M5{+JE#{h zSN7(0eO(D5fRms#QeAlo$9KQBkUugtrTewtSHewoOvdym_TCeu3a4J%%Ni2JmzD0# z3Xk;}XB|GIJz@Zy*saa|)#fQ3v0nI%57Kuzz(pu6FdxbVoS0Yl9u1MJA3btjMvFn& z01ap8j?T!znU(~5CsyBKggXgGR;1{X>WnkTVdH7TE>Ok$nhekzDRr9E_#;YWtNvH) z(Hcz@7!vUaPl~E5J>|vKsz}J+nti6A9Y-+qYX+j%>Ieqgrlip2+#0p{?JG*%3qhjDhS55YAE^%91qB>p)*+!e zuG@d9N@@uQf(M~TY8C!QSYvt)#haMcjbs_eH&#cQl!BF*02KuX<2>>QLy`gyY6&|A zSzYjkB(fmOXwviwnhbu17xGc7?97HQWM2o|_qaIy5Gq6h%VI|qX1#xfHU8>;nGv}y z3stf;Emth~T&WG|wRNmxN}aRzi%;}?>5@?08UouC40-qSB@gAU+qYDY+6g~F^+M>2 zlSv1)C%{Z0<6{yM+tF(~cdEBnO|_%S8<}8wg~67VllEab>@e?TbhL0(yJl>1B%7H-&V?Df58&TK*cSp#jgnCNzCaT1N)Qz2D)n&H{gW5>{*B`$YAmOZ|_5(+F# ztc}NyZO5^@Qie^DiB{ow=jE5S++t%lO)dABNAUg%OmyHw81Kyn3`Q&P*wR2u`q!NR zmB=7TEkpH9gG=%tTb-w^^t}31XaIKQfie;| z%DfkN44c{yH6KXOsl_EZ)AIxe&F>Gf4gZMlDi(!xRF7*LlZ@{tj#y?E1 zTPOllVXUJ{)K|J7g>_1356{45+5l~=ekj*=k*D17Pw1i=lkpt7#>2#;s`V&yV2;uRcfDEIEwiEW6!oMtx1x z_=(BfS#;aWt?2~J+wfbCwzOk|y1HN=zharq9EdN7k6sv5X2-nN$%j+?AI!aZIMngq z?>|z>UY6{p?2I*JH%f>?*0E1f*+VGnOvpBtNkR#evL=SIW*IxF$k;+zM%FAd)?t>; zr|*5P`+U!R?sI|*_`F!5*&-?j$J|EAF>w#I{24r5xuK%Y6MoG=W zHi6zVj^b)~XYPxYWp5a<3o4MA_-^BsE1oJs*$(+)<`)(4X zg2ee0W~Dkv3|HBZ=7tMX_iP%1mmE-R8C33SBHA+~@c_HDwLb*hUny%5UwirzTfj>F zldhltfX1=X`UD>bFDL1lz=o5sFSp-(z8#IF+yPcaV>L^r$)8^O{7syyvTmGY*iIx# zoPbV8XoMxdm@$o-nDb2c6&x`m4fSksizBud7o(78e#4t^H4mxW`CF28Brs}&_=YJ9 zm`QwT`;hcy`SUk=OmX68awJD?gBH*xTMTTdR1∋yJc1OyK<7FBCl&cNaVPcPe$V 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/images/damith3.png b/src/main/resources/images/damith3.png new file mode 100644 index 0000000000000000000000000000000000000000..8705648bdb11723ed4ca6b46846f69c888687b85 GIT binary patch literal 110943 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/images/damith4.png b/src/main/resources/images/damith4.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8991ff40a55ae726214002f87b02118b29e2c8 GIT binary patch literal 59774 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 z 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml index c5eedf5ca42..6e364b1aea7 100644 --- a/src/main/resources/view/MainWindow.fxml +++ b/src/main/resources/view/MainWindow.fxml @@ -14,6 +14,8 @@ + + @@ -25,11 +27,14 @@ - - - + + + +