Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CS2103-T17-1] TeamBuilder #78

Open
wants to merge 459 commits into
base: master
Choose a base branch
from
Open
Changes from 14 commits
Commits
Show all changes
459 commits
Select commit Hold shift + click to select a range
3ddc40b
Change checks for AddCommandParser
ChickenChiang Mar 27, 2023
0c01298
Hide Major Label in PersonCard Ui if Major is empty
ChickenChiang Mar 27, 2023
f8f2f6e
Fix AddCommandParser
ChickenChiang Mar 27, 2023
7328929
Refactor code in PersonUtil.java
ChickenChiang Mar 27, 2023
0e728d4
Merge pull request #16 from ChickenChiang/Optional-Major
ChickenChiang Mar 27, 2023
b9e8720
Fix remove command error message
swx0 Mar 27, 2023
09b42c9
Fix checkstyle
swx0 Mar 27, 2023
0548690
Create UniqueTeamList class and Team exceptions
ChickenChiang Mar 28, 2023
da782f9
Add methods for UniqueTeamList handling in TeamBuilder and ReadOnlyTe…
ChickenChiang Mar 28, 2023
be999f3
Create getTeamName getter method
ChickenChiang Mar 28, 2023
fe5dec2
Add Team methods for model classes
ChickenChiang Mar 28, 2023
1ceef24
Refactor code for Team list methods
ChickenChiang Mar 28, 2023
3ded1f6
Merge pull request #80 from swx0/teamlist
ChickenChiang Mar 28, 2023
8a6a167
Add getter methods for Team class
ChickenChiang Mar 28, 2023
e4f7500
Merge branch 'master' of https://github.com/ChickenChiang/tp
ChickenChiang Mar 28, 2023
a922d68
With prev merge
ChickenChiang Mar 28, 2023
ad1bdca
Merge branch 'Unique-Team-list'
ChickenChiang Mar 28, 2023
e55131f
Add remove command
ChickenChiang Mar 28, 2023
fd90b83
Merge branch 'master' of https://github.com/AY2223S2-CS2103T-T17-1/tp…
ChickenChiang Mar 28, 2023
bfe7e80
Merge branch 'Unique-Team-list' into Merge
ChickenChiang Mar 28, 2023
fd32626
Remove merge conflicts
ChickenChiang Mar 28, 2023
9b42465
Edit equals method for TeamName
ChickenChiang Mar 28, 2023
4aa15e5
Refactor equals method for checknig lower case in TeamName
ChickenChiang Mar 28, 2023
74f3a6f
Maske equals method ignore lowercase for both team name and person name
ChickenChiang Mar 28, 2023
653f2f7
Fix test cases for names
ChickenChiang Mar 28, 2023
3492762
Add undo functionality to CreateCommand
ChickenChiang Mar 28, 2023
5aa48c5
Add Ui for Team list
ChickenChiang Mar 28, 2023
16af77c
Edit JsonAdaptedTeam file
ChickenChiang Mar 28, 2023
6c0f5fe
modify FindCommand so that users can find major
chen-jerry-junior Mar 29, 2023
65e1ff3
Create JsonAdaptedName file
ChickenChiang Mar 29, 2023
ce18221
Create JsonAdaptedTeamFile
ChickenChiang Mar 29, 2023
6f1902d
changes to JsonSerialixableTeamBuilder class to account for teams
ChickenChiang Mar 29, 2023
ada2948
Undo Ui changes
ChickenChiang Mar 29, 2023
b16b229
Refactor JsonAdaptedTeam class
ChickenChiang Mar 29, 2023
86a4faf
Revert MainWindow.fxml changes
ChickenChiang Mar 29, 2023
ed447c1
Merge branch 'master' of https://github.com/ChickenChiang/tp into Merge
ChickenChiang Mar 29, 2023
de19666
Modify Find Command so that user can find tag
chen-jerry-junior Mar 29, 2023
fac365c
Modify the comments of find command
chen-jerry-junior Mar 29, 2023
63aa7ea
Modify the class names and variable names of FindCommand Predicate
chen-jerry-junior Mar 29, 2023
9a5c477
Modify checkstyle due to name changes
chen-jerry-junior Mar 29, 2023
a4e836b
Add line at EOF
ChickenChiang Mar 29, 2023
cdf1f20
Fix checkstyle errors
ChickenChiang Mar 29, 2023
1eb2483
Create show command
chen-jerry-junior Mar 29, 2023
74238c0
Create a predicate to help ShowCommand filter the teamlist
chen-jerry-junior Mar 29, 2023
5435dcf
Create ShowCommand parser
chen-jerry-junior Mar 29, 2023
3dfd9e8
Modify TeamBuilderParser so that show command is implemented
chen-jerry-junior Mar 29, 2023
6d1b89d
Add team to test data
ChickenChiang Mar 29, 2023
e1a337a
Merge pull request #17 from ChickenChiang/Merge
ChickenChiang Mar 29, 2023
c1f4237
Create tests for ShowCommand, its parser and its predicate
chen-jerry-junior Mar 29, 2023
729c7b7
Modify checkstyle
chen-jerry-junior Mar 29, 2023
7739495
Merge pull request #89 from chen-jerry-junior/branch-A-Find
ChickenChiang Mar 29, 2023
6c7d831
Update UserGuide based on CS2101 standard
WillCWX Mar 29, 2023
5f49036
Merge branch 'master' into update-UG
WillCWX Mar 29, 2023
c4168d7
Modify GUI to show the Team features
chen-jerry-junior Mar 29, 2023
e51f3a0
Merge pull request #93 from WillCWX/update-UG
swx0 Mar 30, 2023
4dba1ce
Merge branch 'master' into branch-A-ShowTeam
ChickenChiang Mar 30, 2023
03ae116
Fix import order
ChickenChiang Mar 30, 2023
deb21bf
Merge pull request #92 from chen-jerry-junior/branch-A-ShowTeam
ChickenChiang Mar 30, 2023
05f4e49
Merge branch 'master' into branch-E-GUI
WillCWX Mar 30, 2023
2c278c4
Merge pull request #94 from chen-jerry-junior/branch-E-GUI
chen-jerry-junior Mar 30, 2023
3b1e95b
Merge branch 'master' into master
ChickenChiang Mar 30, 2023
874d897
Refactor methods
ChickenChiang Mar 30, 2023
a080835
Fix checkstyle error of missing new line at EOF for puml files
ChickenChiang Mar 30, 2023
605d923
Remove TeamTest in tests
ChickenChiang Mar 30, 2023
d7dd12f
Merge pull request #95 from ChickenChiang/master
ChickenChiang Mar 30, 2023
e627100
Update UG from create and remove command
swx0 Mar 30, 2023
7919565
Merge pull request #96 from swx0/UGv1.3
chen-jerry-junior Mar 30, 2023
70cea57
Update RemoveCommand to remove TeamTags as well
WillCWX Mar 30, 2023
bfee0e4
Merge branch 'AY2223S2-CS2103T-T17-1:master' into master
WillCWX Mar 30, 2023
9c94add
Save members in team in Json
ChickenChiang Mar 30, 2023
8da4715
Ensure members in Team exist and TeamTags of person exist as teams
ChickenChiang Mar 30, 2023
8821ef3
Change test cases for typicalPersonsAddressBook.json
ChickenChiang Mar 30, 2023
bec85ec
Change sample data to contain team cases
ChickenChiang Mar 30, 2023
31ab13f
Merge branch 'master' of https://github.com/ChickenChiang/tp
ChickenChiang Mar 30, 2023
6e6e83a
Update UG and DG for v1.3
chen-jerry-junior Mar 30, 2023
32675c5
Merge pull request #1 from chen-jerry-junior/master
chen-jerry-junior Mar 30, 2023
6832e3f
Merge pull request #98 from chen-jerry-junior/branch-UGDG-v1.3
swx0 Mar 30, 2023
25bfe30
Merge pull request #97 from WillCWX/master
chen-jerry-junior Mar 30, 2023
e9b23c3
Change tag for person in test cases
ChickenChiang Mar 30, 2023
d46fea7
Fix Ui on TeamList Card
ChickenChiang Mar 30, 2023
ed2ca49
Save members in team in Json
ChickenChiang Mar 30, 2023
6070065
Ensure members in Team exist and TeamTags of person exist as teams
ChickenChiang Mar 30, 2023
ee429ad
Change test cases for typicalPersonsAddressBook.json
ChickenChiang Mar 30, 2023
1540d4d
Change tag for person in test cases
ChickenChiang Mar 30, 2023
f3d6be8
Fix Ui on TeamList Card
ChickenChiang Mar 30, 2023
5a91e11
Fix testing util sample data
ChickenChiang Mar 30, 2023
91a3f30
Merge branch 'master' of https://github.com/ChickenChiang/tp
ChickenChiang Mar 30, 2023
ac3d90c
Merge pull request #99 from ChickenChiang/master
ChickenChiang Mar 30, 2023
552debd
Change version in MainApp
ChickenChiang Mar 30, 2023
2de074d
Update TeamList updon executing Edit Command
ChickenChiang Mar 30, 2023
e18a494
Add test cases for remove command and fix missing extend bug and inco…
chen-jerry-junior Mar 30, 2023
d385c0a
add test cases for add and create command
chen-jerry-junior Mar 30, 2023
d8305da
Update UG with screenshots
swx0 Mar 30, 2023
69e0445
Merge pull request #100 from swx0/fix
swx0 Mar 30, 2023
4bc050c
Fix bugs when updating UniqueTeamList
WillCWX Mar 30, 2023
5a26b3b
update checkstyle and replace with the teamcard and teamlistpanel
chen-jerry-junior Mar 30, 2023
02f427e
Revert "update checkstyle and replace with the teamcard and teamlistp…
chen-jerry-junior Mar 30, 2023
036c169
update checkstyle
chen-jerry-junior Mar 30, 2023
86065d2
Merge pull request #101 from WillCWX/master
WillCWX Mar 30, 2023
3d05554
delete rej file
chen-jerry-junior Mar 30, 2023
da9ad25
Merge pull request #102 from chen-jerry-junior/branch-E-GUI
chen-jerry-junior Mar 30, 2023
2ef134a
Merge branch 'master' of https://github.com/ChickenChiang/tp
ChickenChiang Mar 30, 2023
3efa1b8
Make changes to UG
ChickenChiang Mar 30, 2023
339226e
Merge pull request #106 from ChickenChiang/master
ChickenChiang Mar 30, 2023
ec7838a
Fix test cases
WillCWX Mar 30, 2023
a9e61f7
Merge branch 'master' of https://github.com/AY2223S2-CS2103T-T17-1/tp
WillCWX Mar 30, 2023
673e845
add tests for Teamlist and related codes
chen-jerry-junior Mar 30, 2023
9742620
update checkstyle
chen-jerry-junior Mar 30, 2023
0c8be9e
Merge branch 'master' into master
chen-jerry-junior Mar 30, 2023
8a7403c
update checkstyle for TeamTest.java
chen-jerry-junior Mar 30, 2023
c791453
Merge branch 'master' of https://github.com/chen-jerry-junior/tp
chen-jerry-junior Mar 30, 2023
a4d7d0f
update codecov patch
chen-jerry-junior Mar 30, 2023
23dd487
update checkstyle
chen-jerry-junior Mar 30, 2023
f0f6d78
Merge pull request #107 from chen-jerry-junior/master
chen-jerry-junior Mar 30, 2023
a801bf4
Fix broken links in UG
WillCWX Mar 31, 2023
ecc35b8
Merge pull request #108
WillCWX Mar 31, 2023
23b7f9b
Add exception handling for sort command args
swx0 Mar 31, 2023
62eea5e
Add SortCommandParserTest
swx0 Apr 2, 2023
e18977d
Fix checkstyle
swx0 Apr 2, 2023
c29b298
Remove listing of all tags title from UG
swx0 Apr 2, 2023
4b65724
Add note for add command
swx0 Apr 2, 2023
2629ae4
Merge pull request #146 from swx0/fix-order-ug
swx0 Apr 2, 2023
2617b8f
Merge branch 'master' into fix-ug
swx0 Apr 2, 2023
db2435e
Merge pull request #145 from swx0/fix-ug
swx0 Apr 2, 2023
12ba198
Merge pull request #145 from swx0/fix-ug
swx0 Apr 2, 2023
206a18d
Merge branch 'master' of https://github.com/ChickenChiang/tp
ChickenChiang Apr 3, 2023
461e71b
Merge branch 'master' into fix-sort
swx0 Apr 3, 2023
980c40d
Merge pull request #143 from swx0/fix-sort
swx0 Apr 3, 2023
f852873
Update sort description and subheaders
swx0 Apr 4, 2023
03444a7
Fix build gradle
swx0 Apr 4, 2023
3c7f50f
Merge pull request #148 from swx0/fix-sort-ug
swx0 Apr 4, 2023
77c1bda
Add diagrams for sort command
swx0 Apr 4, 2023
aa0ab20
Merge branch 'master' of https://github.com/ChickenChiang/tp
ChickenChiang Apr 5, 2023
88f3f4c
Add future features section in UG
ChickenChiang Apr 5, 2023
3378f9e
Include support for long tags in future feature section of UG
ChickenChiang Apr 5, 2023
2b80f05
Merge pull request #18 from ChickenChiang/Issue_121_tag_wrapping
ChickenChiang Apr 5, 2023
4bfd451
Merge pull request #149 from ChickenChiang/master
ChickenChiang Apr 5, 2023
1a6f69b
Update design considerations for sort command
swx0 Apr 5, 2023
6298302
Add phone number length limit as a future feature
ChickenChiang Apr 5, 2023
1ed722b
Merge branch 'master' of https://github.com/ChickenChiang/tp
ChickenChiang Apr 5, 2023
72f4f66
Include invalid index error message in for exception thrown in EditCo…
ChickenChiang Apr 5, 2023
a17b126
Include invalid index error message for ParseException thrown by Dele…
ChickenChiang Apr 5, 2023
83ebea5
Update test cases to check agaisnt new error message
ChickenChiang Apr 5, 2023
83791d3
Merge pull request #150 from ChickenChiang/master
ChickenChiang Apr 5, 2023
7ac2245
Merge pull request #19 from ChickenChiang/issue_124_wrongIndexError
ChickenChiang Apr 5, 2023
081f483
Merge pull request #151 from ChickenChiang/master
ChickenChiang Apr 5, 2023
7b78d49
Add Team and UniqueTeamList to model
swx0 Apr 5, 2023
4625ccb
Remove data archive section
swx0 Apr 5, 2023
c994f04
Add create team feature to DG
swx0 Apr 5, 2023
e6881f0
Merge branch 'master' into update-DG
swx0 Apr 5, 2023
e52a574
Merge pull request #152 from swx0/update-DG
swx0 Apr 5, 2023
b9173f8
Fix Ui to prevent clipping of TeamList
ChickenChiang Apr 5, 2023
c60f4fe
Merge pull request #20 from ChickenChiang/issue_137_displayClipping
ChickenChiang Apr 6, 2023
c976bca
Merge pull request #154 from ChickenChiang/master
chen-jerry-junior Apr 6, 2023
008d34c
Modify add command usage message to consist with UG format
chen-jerry-junior Apr 6, 2023
f50a96f
Modify usage message of other commands
chen-jerry-junior Apr 6, 2023
1a6c295
Merge pull request #155 from chen-jerry-junior/master
chen-jerry-junior Apr 6, 2023
4e89354
Add Show Team feature to PPP
chen-jerry-junior Apr 6, 2023
ffedf94
Modify every "address book" into "TeamBuilder"
chen-jerry-junior Apr 6, 2023
0d781bc
Merge pull request #156 from chen-jerry-junior/Finalize-PPP
chen-jerry-junior Apr 6, 2023
e06447a
Merge branch 'master' into master
chen-jerry-junior Apr 6, 2023
3c09928
Merge pull request #157 from chen-jerry-junior/master
chen-jerry-junior Apr 6, 2023
8a1789a
Fix #141
WillCWX Apr 6, 2023
7867163
Fix #140
WillCWX Apr 6, 2023
64c2b7a
Fix #135
WillCWX Apr 6, 2023
79b665a
Fix #134
WillCWX Apr 6, 2023
9c6b3be
Fix #133
WillCWX Apr 6, 2023
f5ea77f
Fix #131
WillCWX Apr 6, 2023
2acf454
Fix #126
WillCWX Apr 6, 2023
0a37606
Merge pull request #158 from WillCWX/fix-pe-d
WillCWX Apr 6, 2023
5f5d917
Add note for sort command
swx0 Apr 7, 2023
a8876b5
Merge pull request #159 from swx0/sort-ug
swx0 Apr 7, 2023
687ad36
Update UG for audience awareness and clarifications
swx0 Apr 7, 2023
d985198
Update language for UG
swx0 Apr 7, 2023
d0ee89d
Update examples
swx0 Apr 7, 2023
d3785d5
Merge pull request #160 from swx0/update-ug-general
swx0 Apr 7, 2023
f1df0b9
Update desc
swx0 Apr 7, 2023
bdaced1
Merge branch 'AY2223S2-CS2103T-T17-1:master' into update-ug-general
swx0 Apr 7, 2023
562301c
Merge pull request #161 from swx0/update-ug-general
swx0 Apr 7, 2023
9d3b9b2
Update target audience
swx0 Apr 7, 2023
4529293
Merge pull request #162 from swx0/ug-audience
swx0 Apr 7, 2023
f151047
Fix activity diagram
swx0 Apr 9, 2023
9fd6986
Merge branch 'master' into fix-activity
swx0 Apr 9, 2023
b475d01
Merge pull request #164 from swx0/fix-activity
swx0 Apr 9, 2023
20e49fe
Update PPP
swx0 Apr 9, 2023
e5bae8b
Merge pull request #165 from swx0/wx-ppp
swx0 Apr 9, 2023
fb27a74
Changes to ModelClass diagram
ChickenChiang Apr 10, 2023
892b242
Edit PPP for ChickenChiang
ChickenChiang Apr 10, 2023
a57f0ce
Remove unecessary details for AddCommand Feature
ChickenChiang Apr 10, 2023
f6784a1
Add planned enhancements to DG
ChickenChiang Apr 10, 2023
5906cac
Changes to ModelClass diagram
ChickenChiang Apr 10, 2023
75a57aa
Edit PPP for ChickenChiang
ChickenChiang Apr 10, 2023
89f3bcc
Remove unecessary details for AddCommand Feature
ChickenChiang Apr 10, 2023
266af59
Add planned enhancements to DG
ChickenChiang Apr 10, 2023
0996ad6
Merge pull request #166 from ChickenChiang/master
ChickenChiang Apr 10, 2023
093aa2d
Add More planned enhancements
ChickenChiang Apr 10, 2023
0e101ef
Merge branch 'master' into DG_edits
ChickenChiang Apr 10, 2023
bddbb99
Merge pull request #22 from ChickenChiang/DG_edits
ChickenChiang Apr 10, 2023
a29f1d7
Merge pull request #167 from ChickenChiang/master
ChickenChiang Apr 10, 2023
993b80b
Update manual testing in DG
swx0 Apr 10, 2023
8b9e66c
Remove duplicate
swx0 Apr 10, 2023
a55bd36
Merge pull request #168 from swx0/update-dg-ppp
swx0 Apr 10, 2023
451f9a0
Update Ui image on README
ChickenChiang Apr 10, 2023
3d02230
Merge branch 'master' of https://github.com/ChickenChiang/tp
ChickenChiang Apr 10, 2023
40c8d96
Resize images in README and UserGuide
ChickenChiang Apr 10, 2023
5f0904a
Merge pull request #169 from ChickenChiang/master
ChickenChiang Apr 10, 2023
d7e64e7
Update Ui on README and Github pages
ChickenChiang Apr 10, 2023
90e945c
Merge branch 'master' of https://github.com/ChickenChiang/tp
ChickenChiang Apr 10, 2023
feb43a5
Merge pull request #170 from ChickenChiang/master
ChickenChiang Apr 10, 2023
aa29b03
Finalize PPP for Jiarui
chen-jerry-junior Apr 10, 2023
857369b
Merge branch 'master' into master
chen-jerry-junior Apr 10, 2023
97f5e76
Merge pull request #171 from chen-jerry-junior/master
chen-jerry-junior Apr 10, 2023
923df06
Fix links and format
WillCWX Apr 10, 2023
d519a21
Merge branch 'master' into last-UG-update
WillCWX Apr 10, 2023
6c35a68
Additional edits to ChickenChiang PPP
ChickenChiang Apr 10, 2023
eb16648
Merge pull request #173 from ChickenChiang/master
ChickenChiang Apr 10, 2023
901c9e4
Merge branch 'master' into last-UG-update
WillCWX Apr 10, 2023
55b3a4b
Fix broken links
WillCWX Apr 10, 2023
4b08bd4
Merge pull request #172
WillCWX Apr 10, 2023
a238016
Add activity diagrams for show command and show command parser
chen-jerry-junior Apr 10, 2023
eb4e209
Merge branch 'master' of https://github.com/chen-jerry-junior/tp
chen-jerry-junior Apr 10, 2023
6e5a5b8
Added Appendix: Effort for DG
ChickenChiang Apr 10, 2023
14d50cb
Fix broken links
WillCWX Apr 10, 2023
a804416
Merge pull request #174 from WillCWX/last-DG-update
ChickenChiang Apr 10, 2023
5c1a42d
Merge branch 'AY2223S2-CS2103T-T17-1:master' into master
ChickenChiang Apr 10, 2023
665d6bd
Add manual test case for show command
chen-jerry-junior Apr 10, 2023
c0bbed9
Merge branch 'master' into master
chen-jerry-junior Apr 10, 2023
edae3d4
Add empty line at EOF in puml files
chen-jerry-junior Apr 10, 2023
f23f266
Merge branch 'master' of https://github.com/chen-jerry-junior/tp
chen-jerry-junior Apr 10, 2023
951e1bb
Delete trailing white spaces for DG
chen-jerry-junior Apr 10, 2023
54dca9a
Update PPP
WillCWX Apr 10, 2023
b96b348
Delete trailing white spaces in UG
chen-jerry-junior Apr 10, 2023
389d3c2
Delete trailing white spaces in PPPs
chen-jerry-junior Apr 10, 2023
8d02aba
Merge branch 'master' into update-PPP
WillCWX Apr 10, 2023
3b71789
Merge pull request #176 from chen-jerry-junior/master
chen-jerry-junior Apr 10, 2023
a4849d9
Merge branch 'master' into update-PPP
WillCWX Apr 10, 2023
1c1364e
Merge pull request #175 from ChickenChiang/master
chen-jerry-junior Apr 10, 2023
aca90a3
Merge branch 'master' into update-PPP
WillCWX Apr 10, 2023
717079b
Merge pull request #177 from WillCWX/update-PPP
WillCWX Apr 10, 2023
f8cf4b1
Update chen-jerry-junior.md
chen-jerry-junior Apr 10, 2023
5605ab1
Chages to UG screenshots and Specification
ChickenChiang Apr 10, 2023
3b46ab6
Resize Screen shot on index.md
ChickenChiang Apr 10, 2023
a8fd5d0
Merge branch 'AY2223S2-CS2103T-T17-1:master' into master
ChickenChiang Apr 10, 2023
d0d1f47
Edit DG
ChickenChiang Apr 10, 2023
27bdf95
Merge branch 'master' of https://github.com/ChickenChiang/tp
ChickenChiang Apr 10, 2023
ff1340c
Merge pull request #178 from ChickenChiang/master
swx0 Apr 10, 2023
9437a11
Edit DG
ChickenChiang Apr 10, 2023
0569f55
Merge branch 'master' of https://github.com/ChickenChiang/tp
ChickenChiang Apr 10, 2023
4a0ef64
Merge branch 'master' into master
ChickenChiang Apr 10, 2023
069210e
Merge pull request #179 from ChickenChiang/master
ChickenChiang Apr 10, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/java/teambuilder/commons/core/Messages.java
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@ public class Messages {
public static final String MESSAGE_INVALID_PERSON_DISPLAYED_INDEX = "The person index provided is invalid";
public static final String MESSAGE_PERSONS_LISTED_OVERVIEW = "%1$d persons listed!";
public static final String MESSAGE_INVALID_SORTING_ORDER = "Invalid sorting order, input \"desc\" or \"asc\"";

public static final String MESSAGE_INVALID_TEAM = "The team name provided is invalid";
public static final String MESSAGE_INVALID_SORT_BY = "Invalid sort by";

}
23 changes: 23 additions & 0 deletions src/main/java/teambuilder/logic/commands/AddCommand.java
Original file line number Diff line number Diff line change
@@ -8,11 +8,15 @@
import static teambuilder.logic.parser.CliSyntax.PREFIX_PHONE;
import static teambuilder.logic.parser.CliSyntax.PREFIX_TAG;

import java.util.List;

import teambuilder.commons.core.Memento;
import teambuilder.commons.util.HistoryUtil;
import teambuilder.logic.commands.exceptions.CommandException;
import teambuilder.model.Model;
import teambuilder.model.person.Person;
import teambuilder.model.tag.Tag;
import teambuilder.model.team.Team;

/**
* Adds a person to the address book.
@@ -41,6 +45,7 @@ public class AddCommand extends Command {

public static final String MESSAGE_SUCCESS = "New person added: %1$s";
public static final String MESSAGE_DUPLICATE_PERSON = "This person already exists in the address book";
public static final String MESSAGE_TEAM_NOT_FOUND = "The team does not exist in the address book";

private final Person toAdd;

@@ -60,10 +65,28 @@ public CommandResult execute(Model model) throws CommandException {
throw new CommandException(MESSAGE_DUPLICATE_PERSON);
}

// throw exception if team tags not from existing teams
List<Team> teamList = model.getTeamList();
Object[] teamTags = toAdd.getTeams().toArray();
for (Object tag : teamTags) {
Tag castedTag = (Tag) tag;
boolean isPresent = false;
for (Team team : teamList) {
if (castedTag.getName().equals(team.toString())) {
isPresent = true;
break;
}
}
if (!isPresent) {
throw new CommandException(MESSAGE_TEAM_NOT_FOUND);
}
}

Memento old = model.save();
HistoryUtil.getInstance().storePast(old, COMMAND_WORD + " " + toAdd);

model.addPerson(toAdd);
model.updatePersonInTeams(toAdd);
return new CommandResult(String.format(MESSAGE_SUCCESS, toAdd));
}

10 changes: 5 additions & 5 deletions src/main/java/teambuilder/logic/commands/CreateCommand.java
Original file line number Diff line number Diff line change
@@ -46,11 +46,11 @@ public CreateCommand(Team team) {
public CommandResult execute(Model model) throws CommandException {
requireNonNull(model);

// if (model.hasTeam(toCreate)) {
// throw new CommandException(MESSAGE_DUPLICATE_TEAM);
// }
//
// model.addTeam(toCreate);
if (model.hasTeam(toCreate)) {
throw new CommandException(MESSAGE_DUPLICATE_TEAM);
}

model.addTeam(toCreate);

return new CommandResult(String.format(MESSAGE_SUCCESS, toCreate));
}
Original file line number Diff line number Diff line change
@@ -45,6 +45,7 @@ public CommandResult execute(Model model) throws CommandException {
Memento old = model.save();
HistoryUtil.getInstance().storePast(old, COMMAND_WORD + " " + personToDelete);

model.removeFromAllTeams(personToDelete);
model.deletePerson(personToDelete);
return new CommandResult(String.format(MESSAGE_DELETE_PERSON_SUCCESS, personToDelete));
}
20 changes: 20 additions & 0 deletions src/main/java/teambuilder/logic/commands/EditCommand.java
Original file line number Diff line number Diff line change
@@ -30,6 +30,7 @@
import teambuilder.model.person.Person;
import teambuilder.model.person.Phone;
import teambuilder.model.tag.Tag;
import teambuilder.model.team.Team;

/**
* Edits the details of an existing person in the address book.
@@ -58,6 +59,7 @@ public class EditCommand extends Command {
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_TEAM_NOT_FOUND = "The team does not exist in the address book";

private final Index index;
private final EditPersonDescriptor editPersonDescriptor;
@@ -90,10 +92,28 @@ public CommandResult execute(Model model) throws CommandException {
throw new CommandException(MESSAGE_DUPLICATE_PERSON);
}

// throw exception if team tags not from existing teams
List<Team> teamList = model.getTeamList();
Object[] teamTags = editedPerson.getTeams().toArray();
for (Object tag : teamTags) {
Tag castedTag = (Tag) tag;
boolean isPresent = false;
for (Team team : teamList) {
if (castedTag.getName().equals(team.toString())) {
isPresent = true;
break;
}
}
if (!isPresent) {
throw new CommandException(MESSAGE_TEAM_NOT_FOUND);
}
}

Memento old = model.save();
HistoryUtil.getInstance().storePast(old, COMMAND_WORD + " " + editedPerson);

model.setPerson(personToEdit, editedPerson);
model.updatePersonInTeams(editedPerson);
model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);
return new CommandResult(String.format(MESSAGE_EDIT_PERSON_SUCCESS, editedPerson));
}
63 changes: 63 additions & 0 deletions src/main/java/teambuilder/logic/commands/RemoveCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package teambuilder.logic.commands;

import static java.util.Objects.requireNonNull;

import java.util.List;

import teambuilder.commons.core.Memento;
import teambuilder.commons.core.Messages;
import teambuilder.commons.util.HistoryUtil;
import teambuilder.logic.commands.exceptions.CommandException;
import teambuilder.model.Model;
import teambuilder.model.team.Team;
import teambuilder.model.team.TeamName;

/**
* Removes a team identified using its name from the address book.
*/
public class RemoveCommand extends Command {
public static final String COMMAND_WORD = "remove";

public static final String MESSAGE_USAGE = COMMAND_WORD
+ ": Removes the team identified by its name.\n"
+ "Parameters: TEAMNAME \n" + "Example: " + COMMAND_WORD + " Team A";

public static final String MESSAGE_DELETE_TEAM_SUCCESS = "Removed Team: %1$s";

private final TeamName targetName;

public RemoveCommand(TeamName targetName) {
this.targetName = targetName;
}

@Override
public CommandResult execute(Model model) throws CommandException {
requireNonNull(model);
List<Team> lastShownList = model.getTeamList();
Team teamToDelete = null;

for (Team team : lastShownList) {
if (team.getName().equals(targetName)) {
teamToDelete = team;
break;
}
}

if (teamToDelete == null) {
throw new CommandException(Messages.MESSAGE_INVALID_TEAM);
}

Memento old = model.save();
HistoryUtil.getInstance().storePast(old, COMMAND_WORD + " " + teamToDelete);

model.deleteTeam(teamToDelete);
return new CommandResult(String.format(MESSAGE_DELETE_TEAM_SUCCESS, teamToDelete));
}

@Override
public boolean equals(Object other) {
return other == this // short circuit if same object
|| (other instanceof RemoveCommand // instanceof handles nulls
&& targetName.equals(((RemoveCommand) other).targetName)); // state check
}
}
28 changes: 28 additions & 0 deletions src/main/java/teambuilder/logic/parser/RemoveCommandParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package teambuilder.logic.parser;

import static teambuilder.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT;

import teambuilder.logic.commands.RemoveCommand;
import teambuilder.logic.parser.exceptions.ParseException;
import teambuilder.model.team.TeamName;

/**
* Parses input arguments and creates a new RemoveCommand object
*/
public class RemoveCommandParser {
/**
* Parses the given {@code String} of arguments in the context of the RemoveCommand
* and returns a RemoveCommand object for execution.
* @throws ParseException if the user input does not conform the expected format
*/
public RemoveCommand parse(String args) throws ParseException {
try {
TeamName name = ParserUtil.parseTeamName(args);
return new RemoveCommand(name);
} catch (ParseException pe) {
throw new ParseException(
String.format(MESSAGE_INVALID_COMMAND_FORMAT, RemoveCommand.MESSAGE_USAGE), pe);
}
}

}
4 changes: 4 additions & 0 deletions src/main/java/teambuilder/logic/parser/TeamBuilderParser.java
Original file line number Diff line number Diff line change
@@ -17,6 +17,7 @@
import teambuilder.logic.commands.HelpCommand;
import teambuilder.logic.commands.ListCommand;
import teambuilder.logic.commands.RedoCommand;
import teambuilder.logic.commands.RemoveCommand;
import teambuilder.logic.commands.SortCommand;
import teambuilder.logic.commands.UndoCommand;
import teambuilder.logic.parser.exceptions.ParseException;
@@ -83,6 +84,9 @@ public Command parseCommand(String userInput) throws ParseException {
case CreateCommand.COMMAND_WORD:
return new CreateCommandParser().parse(arguments);

case RemoveCommand.COMMAND_WORD:
return new RemoveCommandParser().parse(arguments);

default:
throw new ParseException(MESSAGE_UNKNOWN_COMMAND);
}
31 changes: 31 additions & 0 deletions src/main/java/teambuilder/model/Model.java
Original file line number Diff line number Diff line change
@@ -8,6 +8,7 @@
import teambuilder.commons.core.GuiSettings;
import teambuilder.commons.core.Originator;
import teambuilder.model.person.Person;
import teambuilder.model.team.Team;

/**
* The API of the Model component.
@@ -78,9 +79,39 @@ public interface Model extends Originator {
*/
void setPerson(Person target, Person editedPerson);

/**
* Returns true if a team with the same identity as {@code team} exists in the address book.
*/
boolean hasTeam(Team team);

/**
* Deletes the given team.
* The team must exist in the address book.
*/
void deleteTeam(Team target);

/**
* Adds the given team.
* {@code team} must not already exist in the address book.
*/
void addTeam(Team team);

/**
* Adds person to the team, based on its team tags.
*/
void updatePersonInTeams(Person person);

/**
* Removes person from all teams
*/
void removeFromAllTeams(Person person);

/** Returns an unmodifiable view of the filtered person list */
ObservableList<Person> getSortedPersonList();

/** Returns an unmodifiable view of the team list */
ObservableList<Team> getTeamList();

/**
* Updates the filter of the filtered person list to filter by the given {@code predicate}.
* @throws NullPointerException if {@code predicate} is null.
41 changes: 41 additions & 0 deletions src/main/java/teambuilder/model/ModelManager.java
Original file line number Diff line number Diff line change
@@ -15,6 +15,7 @@
import teambuilder.commons.core.LogsCenter;
import teambuilder.commons.core.Memento;
import teambuilder.model.person.Person;
import teambuilder.model.team.Team;

/**
* Represents the in-memory model of the address book data.
@@ -26,6 +27,7 @@ public class ModelManager implements Model {
private final UserPrefs userPrefs;
private final FilteredList<Person> filteredPersons;
private final SortedList<Person> sortedPersons;
private final FilteredList<Team> filteredTeams;

/**
* Initializes a ModelManager with the given addressBook and userPrefs.
@@ -39,6 +41,7 @@ public ModelManager(ReadOnlyTeamBuilder addressBook, ReadOnlyUserPrefs userPrefs
this.userPrefs = new UserPrefs(userPrefs);
filteredPersons = new FilteredList<>(this.addressBook.getPersonList());
sortedPersons = new SortedList<>(filteredPersons);
filteredTeams = new FilteredList<>(this.addressBook.getTeamList());
}

public ModelManager() {
@@ -121,6 +124,44 @@ public void setPerson(Person target, Person editedPerson) {
addressBook.setPerson(target, editedPerson);
}

@Override
public boolean hasTeam(Team team) {
requireNonNull(team);
return addressBook.hasTeam(team);
}

@Override
public void addTeam(Team team) {
addressBook.addTeam(team);
//updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);
}

@Override
public void deleteTeam(Team target) {
addressBook.removeTeam(target);
}

@Override
public void updatePersonInTeams(Person person) {
addressBook.updatePersonInTeams(person);
}

@Override
public void removeFromAllTeams(Person person) {
addressBook.removeFromAllTeams(person);
}

//=========== Filtered Team List Accessors ===============================================================

/**
* Returns an unmodifiable view of the list of {@code Team} backed by the internal list of
* {@code versionedAddressBook}
*/
@Override
public ObservableList<Team> getTeamList() {
return filteredTeams;
}

//=========== Filtered Person List Accessors =============================================================

/**
7 changes: 7 additions & 0 deletions src/main/java/teambuilder/model/ReadOnlyTeamBuilder.java
Original file line number Diff line number Diff line change
@@ -2,6 +2,7 @@

import javafx.collections.ObservableList;
import teambuilder.model.person.Person;
import teambuilder.model.team.Team;

/**
* Unmodifiable view of an address book
@@ -14,4 +15,10 @@ public interface ReadOnlyTeamBuilder {
*/
ObservableList<Person> getPersonList();

/**
* Returns an unmodifiable view of the teams list.
* This list will not contain any duplicate teams.
*/
ObservableList<Team> getTeamList();

}
54 changes: 54 additions & 0 deletions src/main/java/teambuilder/model/TeamBuilder.java
Original file line number Diff line number Diff line change
@@ -7,6 +7,8 @@
import javafx.collections.ObservableList;
import teambuilder.model.person.Person;
import teambuilder.model.person.UniquePersonList;
import teambuilder.model.team.Team;
import teambuilder.model.team.UniqueTeamList;

/**
* Wraps all data at the address-book level
@@ -27,6 +29,19 @@ public class TeamBuilder implements ReadOnlyTeamBuilder {
persons = new UniquePersonList();
}

private final UniqueTeamList teams;

/*
* The 'unusual' code block below is a non-static initialization block, sometimes used to avoid duplication
* between constructors. See https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
*
* Note that non-static init blocks are not recommended to use. There are other ways to avoid duplication
* among constructors.
*/
{
teams = new UniqueTeamList();
}

public TeamBuilder() {}

/**
@@ -93,6 +108,40 @@ public void removePerson(Person key) {
persons.remove(key);
}

//// team-level operations

/**
* Returns true if a team with the same identity as {@code team} exists in the address book.
*/
public boolean hasTeam(Team team) {
requireNonNull(team);
return teams.contains(team);
}

/**
* Adds a team to the address book.
* The person must not already exist in the address book.
*/
public void addTeam(Team team) {
teams.add(team);
}

/**
* Removes {@code key} from this {@code AddressBook}.
* {@code key} must exist in the address book.
*/
public void removeTeam(Team key) {
teams.remove(key);
}

public void updatePersonInTeams(Person person) {
teams.updatePersonInTeams(person);
}

public void removeFromAllTeams(Person person) {
teams.removeFromAllTeams(person);
}

//// util methods

@Override
@@ -106,6 +155,11 @@ public ObservableList<Person> getPersonList() {
return persons.asUnmodifiableObservableList();
}

@Override
public ObservableList<Team> getTeamList() {
return teams.asUnmodifiableObservableList();
}

@Override
public boolean equals(Object other) {
return other == this // short circuit if same object
2 changes: 1 addition & 1 deletion src/main/java/teambuilder/model/person/Person.java
Original file line number Diff line number Diff line change
@@ -149,7 +149,7 @@ public String toString() {
Set<Tag> teams = getTeams();
if (!teams.isEmpty()) {
builder.append("; Teams: ");
tags.forEach(builder::append);
teams.forEach(builder::append);
}
return builder.toString();
}
4 changes: 4 additions & 0 deletions src/main/java/teambuilder/model/tag/Tag.java
Original file line number Diff line number Diff line change
@@ -33,6 +33,10 @@ public static boolean isValidTagName(String test) {
return test.matches(VALIDATION_REGEX);
}

public String getName() {
return tagName;
}

@Override
public boolean equals(Object other) {
return other == this // short circuit if same object
31 changes: 30 additions & 1 deletion src/main/java/teambuilder/model/team/Team.java
Original file line number Diff line number Diff line change
@@ -5,6 +5,7 @@
import java.util.HashSet;
import java.util.Set;

import teambuilder.model.person.Name;
import teambuilder.model.tag.Tag;

/**
@@ -20,7 +21,7 @@ public class Team {
private final TeamName teamName;
private final Desc teamDesc;
private final Set<Tag> skillTags = new HashSet<>();
private final Set<String> members = new HashSet<>();
private final Set<Name> members = new HashSet<>();


/**
@@ -37,6 +38,34 @@ public Team(TeamName teamName, Desc teamDesc, Set<Tag> skillTags) {
this.skillTags.addAll(skillTags);
}

public TeamName getName() {
return this.teamName;
}

/**
* Returns true if both teams have the same name.
* This defines a weaker notion of equality between two teams.
*/
public boolean isSameTeam(Team otherTeam) {
if (otherTeam == this) {
return true;
}

return otherTeam != null
&& otherTeam.getName().equals(getName());
}

public void addPerson(Name name) {
members.add(name);
}

public void removePerson(Name name) {
members.remove(name);
}

public Set<Name> getMembers() {
return members;
}

@Override
public int hashCode() {
115 changes: 115 additions & 0 deletions src/main/java/teambuilder/model/team/UniqueTeamList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package teambuilder.model.team;

import static java.util.Objects.requireNonNull;

import java.util.Iterator;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import teambuilder.model.person.Person;
import teambuilder.model.tag.Tag;
import teambuilder.model.team.exceptions.DuplicateTeamException;
import teambuilder.model.team.exceptions.TeamNotFoundException;

/**
* A list of teams that enforces uniqueness between its elements and does not allow nulls.
*/
public class UniqueTeamList implements Iterable<Team> {

private final ObservableList<Team> internalList = FXCollections.observableArrayList();
private final ObservableList<Team> internalUnmodifiableList =
FXCollections.unmodifiableObservableList(internalList);

/**
* Returns true if the list contains an equivalent team as the given argument.
*/
public boolean contains(Team toCheck) {
requireNonNull(toCheck);
return internalList.stream().anyMatch(toCheck::isSameTeam);
}

/**
* Adds a team to the list.
* The team must not already exist in the list.
*/
public void add(Team toAdd) {
requireNonNull(toAdd);
if (contains(toAdd)) {
throw new DuplicateTeamException();
}
internalList.add(toAdd);
}

/**
* Removes the equivalent team from the list.
* The team must exist in the list.
*/
public void remove(Team toRemove) {
requireNonNull(toRemove);
if (!internalList.remove(toRemove)) {
throw new TeamNotFoundException();
}
}

/**
* Add or delete person from TeamList depending on presence or absence of team tag respectively.
*/
public void updatePersonInTeams(Person person) {
requireNonNull(person);
Object[] allTeamTags = person.getTeams().toArray();

for (Team team: internalList) {
boolean isPresent = false;
for (Object tag : allTeamTags) {
Tag castedTag = (Tag) tag;
if (castedTag.getName().equals(team.toString())) {
team.addPerson(person.getName());
isPresent = true;
break;
}
}
if (!isPresent) {
team.removePerson(person.getName());
}
}


}

/**
* delete person from all teams in TeamList.
*/
public void removeFromAllTeams(Person person) {
requireNonNull(person);

for (Team team: internalList) {
team.removePerson(person.getName());
}

}


/**
* Returns the backing list as an unmodifiable {@code ObservableList}.
*/
public ObservableList<Team> asUnmodifiableObservableList() {
return internalUnmodifiableList;
}

@Override
public Iterator<Team> iterator() {
return internalList.iterator();
}

@Override
public boolean equals(Object other) {
return other == this // short circuit if same object
|| (other instanceof UniqueTeamList // instanceof handles nulls
&& internalList.equals(((UniqueTeamList) other).internalList));
}

@Override
public int hashCode() {
return internalList.hashCode();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package teambuilder.model.team.exceptions;

/**
* Signals that the operation will result in duplicate Teams (Teams are considered duplicates if they have the same
* name).
*/
public class DuplicateTeamException extends RuntimeException {
public DuplicateTeamException() {
super("Operation would result in duplicate teams");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package teambuilder.model.team.exceptions;

/**
* Signals that the operation is unable to find the specified team.
*/
public class TeamNotFoundException extends RuntimeException {}
13 changes: 7 additions & 6 deletions src/main/java/teambuilder/model/util/SampleDataUtil.java
Original file line number Diff line number Diff line change
@@ -22,22 +22,23 @@ public static Person[] getSamplePersons() {
return new Person[] {
new Person(new Name("Alex Yeoh"), Phone.of("87438807"), Email.of("alexyeoh@example.com"),
Address.of("Blk 30 Geylang Street 29, #06-40"), Major.of("Computer Science"),
getTagSet("friends"), getTagSet("Team A")),
getTagSet("friends"), getTagSet()),
new Person(new Name("Bernice Yu"), Phone.of("99272758"), Email.of("berniceyu@example.com"),
Address.of("Blk 30 Lorong 3 Serangoon Gardens, #07-18"), Major.of("Computer Science"),
getTagSet("colleagues", "friends"), getTagSet("Team A", "CS2103T G17")),
getTagSet("colleagues", "friends"), getTagSet()),
new Person(new Name("Charlotte Oliveiro"), Phone.of("93210283"), Email.of("charlotte@example.com"),
Address.of("Blk 11 Ang Mo Kio Street 74, #11-04"), Major.of("Computer Science"),
getTagSet("neighbours"), getTagSet("Rh Rockers")),
getTagSet("neighbours"), getTagSet()),
new Person(new Name("David Li"), Phone.of("91031282"), Email.of("lidavid@example.com"),
Address.of("Blk 436 Serangoon Gardens Street 26, #16-43"), Major.of("Computer Science"),
getTagSet("family"), getTagSet("Club penguin")),
getTagSet("family"), getTagSet()),
new Person(new Name("Irfan Ibrahim"), Phone.of("92492021"), Email.of("irfan@example.com"),
Address.of("Blk 47 Tampines Street 20, #17-35"), Major.of("Computer Science"),
getTagSet("classmates"), getTagSet("RuneScapers")),
getTagSet("classmates"), getTagSet()),
new Person(new Name("Roy Balakrishnan"), Phone.of("92624417"), Email.of("royb@example.com"),
Address.of("Blk 45 Aljunied Street 85, #11-31"), Major.of("Computer Science"),
getTagSet("colleagues"), getTagSet("Coding is fun club"))
getTagSet("colleagues"), getTagSet())

};
}

32 changes: 32 additions & 0 deletions src/test/java/teambuilder/logic/commands/AddCommandTest.java
Original file line number Diff line number Diff line change
@@ -14,7 +14,9 @@

import org.junit.jupiter.api.Test;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import teambuilder.commons.core.GuiSettings;
import teambuilder.commons.core.Memento;
import teambuilder.logic.commands.exceptions.CommandException;
@@ -23,6 +25,7 @@
import teambuilder.model.ReadOnlyUserPrefs;
import teambuilder.model.TeamBuilder;
import teambuilder.model.person.Person;
import teambuilder.model.team.Team;
import teambuilder.testutil.PersonBuilder;

public class AddCommandTest {
@@ -155,11 +158,40 @@ public void setPerson(Person target, Person editedPerson) {
throw new AssertionError("This method should not be called.");
}

@Override
public boolean hasTeam(Team team) {
throw new AssertionError("This method should not be called.");
}

@Override
public void deleteTeam(Team target) {
throw new AssertionError("This method should not be called.");
}

@Override
public void addTeam(Team team) {
throw new AssertionError("This method should not be called.");
}

@Override
public void updatePersonInTeams(Person person) {
return;
}

@Override
public void removeFromAllTeams(Person person) {
throw new AssertionError("This method should not be called.");
}

@Override
public ObservableList<Person> getSortedPersonList() {
throw new AssertionError("This method should not be called.");
}

@Override
public ObservableList<Team> getTeamList() {
return new FilteredList<>(FXCollections.unmodifiableObservableList(FXCollections.observableArrayList()));
}
@Override
public void updateFilteredPersonList(Predicate<Person> predicate) {
throw new AssertionError("This method should not be called.");
Original file line number Diff line number Diff line change
@@ -19,6 +19,7 @@
import teambuilder.model.ReadOnlyTeamBuilder;
import teambuilder.model.ReadOnlyUserPrefs;
import teambuilder.model.person.Person;
import teambuilder.model.team.Team;

public class RedoCommandIntegrationTest {
@Test
@@ -164,6 +165,31 @@ public void setPerson(Person target, Person editedPerson) {
throw new UnsupportedOperationException("Unimplemented method 'setPerson'");
}

@Override
public boolean hasTeam(Team team) {
throw new UnsupportedOperationException("Unimplemented method 'hasTeam'");
}

@Override
public void deleteTeam(Team target) {
throw new UnsupportedOperationException("Unimplemented method 'deleteTeam'");
}

@Override
public void addTeam(Team team) {
throw new UnsupportedOperationException("Unimplemented method 'addTeam'");
}

@Override
public void updatePersonInTeams(Person person) {
throw new UnsupportedOperationException("Unimplemented method 'updatePersonInTeams'");
}

@Override
public void removeFromAllTeams(Person person) {
throw new UnsupportedOperationException("Unimplemented method 'removeFromAllTeams'");
}

@Override
public ObservableList<Person> getSortedPersonList() {

@@ -181,6 +207,11 @@ public void updateSort(Comparator<Person> comparator) {
throw new UnsupportedOperationException("Unimplemented method 'updateSort'");
}

@Override
public ObservableList<Team> getTeamList() {
throw new AssertionError("This method should not be called.");
}

}

private class EmptyMomentoStub implements Memento {
32 changes: 31 additions & 1 deletion src/test/java/teambuilder/logic/commands/UndoCommandTest.java
Original file line number Diff line number Diff line change
@@ -19,6 +19,7 @@
import teambuilder.model.ReadOnlyTeamBuilder;
import teambuilder.model.ReadOnlyUserPrefs;
import teambuilder.model.person.Person;
import teambuilder.model.team.Team;

public class UndoCommandTest {
@Test
@@ -172,6 +173,31 @@ public void setPerson(Person target, Person editedPerson) {
throw new UnsupportedOperationException("Unimplemented method 'setPerson'");
}

@Override
public boolean hasTeam(Team team) {
throw new AssertionError("Unimplemented method 'hasTeam'");
}

@Override
public void deleteTeam(Team target) {
throw new AssertionError("Unimplemented method 'deleteTeam'");
}

@Override
public void addTeam(Team team) {
throw new AssertionError("Unimplemented method 'addTeam'");
}

@Override
public void updatePersonInTeams(Person person) {
throw new AssertionError("Unimplemented method 'updatePersonInTeams'");
}

@Override
public void removeFromAllTeams(Person person) {
throw new AssertionError("Unimplemented method 'removeFromAllTeams'");
}

@Override
public ObservableList<Person> getSortedPersonList() {

@@ -180,7 +206,6 @@ public ObservableList<Person> getSortedPersonList() {

@Override
public void updateFilteredPersonList(Predicate<Person> predicate) {

throw new UnsupportedOperationException("Unimplemented method 'updateFilteredPersonList'");
}

@@ -189,6 +214,11 @@ public void updateSort(Comparator<Person> comparator) {
throw new UnsupportedOperationException("Unimplemented method 'updateSort'");
}

@Override
public ObservableList<Team> getTeamList() {
throw new AssertionError("Unimplemented method 'getTeamList'");
}

}

private class EmptyMomentoStub implements Memento {
6 changes: 6 additions & 0 deletions src/test/java/teambuilder/model/TeamBuilderTest.java
Original file line number Diff line number Diff line change
@@ -20,6 +20,7 @@
import javafx.collections.ObservableList;
import teambuilder.model.person.Person;
import teambuilder.model.person.exceptions.DuplicatePersonException;
import teambuilder.model.team.Team;
import teambuilder.testutil.PersonBuilder;

public class TeamBuilderTest {
@@ -97,6 +98,11 @@ private static class AddressBookStub implements ReadOnlyTeamBuilder {
public ObservableList<Person> getPersonList() {
return persons;
}

@Override
public ObservableList<Team> getTeamList() {
throw new AssertionError("This method should not be called.");
}
}

}
45 changes: 45 additions & 0 deletions src/test/java/teambuilder/model/person/UniqueTeamListTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package teambuilder.model.person;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static teambuilder.testutil.Assert.assertThrows;
import static teambuilder.testutil.TypicalTeams.TEAM_A;

import org.junit.jupiter.api.Test;

import teambuilder.model.team.UniqueTeamList;
import teambuilder.model.team.exceptions.DuplicateTeamException;

public class UniqueTeamListTest {

private final UniqueTeamList uniqueTeamList = new UniqueTeamList();

@Test
public void contains_nullTeam_throwsNullPointerException() {
assertThrows(NullPointerException.class, () -> uniqueTeamList.contains(null));
}

@Test
public void contains_personNotInList_returnsFalse() {
assertFalse(uniqueTeamList.contains(TEAM_A));
}

@Test
public void contains_personInList_returnsTrue() {
uniqueTeamList.add(TEAM_A);
assertTrue(uniqueTeamList.contains(TEAM_A));
}

@Test
public void add_nullPerson_throwsNullPointerException() {
assertThrows(NullPointerException.class, () -> uniqueTeamList.add(null));
}

@Test
public void add_duplicatePerson_throwsDuplicatePersonException() {
uniqueTeamList.add(TEAM_A);
assertThrows(DuplicateTeamException.class, () -> uniqueTeamList.add(TEAM_A));
}


}
17 changes: 17 additions & 0 deletions src/test/java/teambuilder/testutil/TypicalTeams.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package teambuilder.testutil;

import java.util.Arrays;
import java.util.HashSet;

import teambuilder.model.tag.Tag;
import teambuilder.model.team.Desc;
import teambuilder.model.team.Team;
import teambuilder.model.team.TeamName;

/**
* Sample teams for testing
*/
public class TypicalTeams {
public static final Team TEAM_A = new Team(new TeamName("Team A"), new Desc("This is Team A"),
new HashSet<Tag>(Arrays.asList(new Tag("Python"), new Tag("ReactNative"))));
}