From 345d05f6ef97f13a3a0419a60117582dbb4e0506 Mon Sep 17 00:00:00 2001 From: Zhi Yuan Yong Date: Wed, 10 Jan 2018 12:03:56 +0800 Subject: [PATCH] Remove ReadOnlyPerson ReadOnlyPerson provides a read-only immutable interface for Person. Person is already immutable. This removes the need for ReadOnlyPerson. Let's replace all instances of ReadOnlyPerson with Person. Mechanical changes: 1. Delete ReadOnlyPerson. Ensure that all "import seedu.address.model.person.ReadOnlyPerson;" statements are deleted. 2. Use the replace all functionality to replace "? extends ReadOnlyPerson" with "Person" for all text files. 3. Use the replace all functionality to replace "ReadOnlyPerson" with "Person" for all text files. At this point, the code base will not compile as the "import seedu.address.model.person.Person;" statement is missing in some files. You will have to manually add this line to those files, using your IDE's tooling if applicable. On Eclipse, you can press Ctrl + Shift + O to do so. Furthermore, in AddressBook#updatePerson(Person, Person), the code will not compile because a variable is re-defined. This will also need to be manually fixed as well. Finally, rewrap some lines which have become too short as a result of the find-and-replace in steps 2 and 3. This commit was performed using IntelliJ. --- docs/DeveloperGuide.adoc | 16 +++++----- docs/diagrams/ModelComponentClassDiagram.pptx | Bin 42847 -> 42466 bytes docs/images/ModelClassDiagram.png | Bin 139977 -> 127422 bytes src/main/java/seedu/address/logic/Logic.java | 4 +-- .../seedu/address/logic/LogicManager.java | 4 +-- .../address/logic/commands/AddCommand.java | 5 ++-- .../address/logic/commands/DeleteCommand.java | 6 ++-- .../address/logic/commands/EditCommand.java | 8 ++--- .../address/logic/commands/SelectCommand.java | 4 +-- .../logic/parser/AddCommandParser.java | 3 +- .../java/seedu/address/model/AddressBook.java | 25 ++++++++-------- src/main/java/seedu/address/model/Model.java | 14 ++++----- .../seedu/address/model/ModelManager.java | 16 +++++----- .../address/model/ReadOnlyAddressBook.java | 4 +-- .../person/NameContainsKeywordsPredicate.java | 6 ++-- .../seedu/address/model/person/Person.java | 11 ++----- .../address/model/person/ReadOnlyPerson.java | 18 ----------- .../model/person/UniquePersonList.java | 16 +++++----- .../address/storage/XmlAdaptedPerson.java | 3 +- .../storage/XmlSerializableAddressBook.java | 6 ++-- .../java/seedu/address/ui/BrowserPanel.java | 4 +-- .../java/seedu/address/ui/PersonCard.java | 6 ++-- .../seedu/address/ui/PersonListPanel.java | 6 ++-- .../guihandles/PersonListPanelHandle.java | 6 ++-- .../logic/commands/AddCommandTest.java | 15 +++++----- .../logic/commands/CommandTestUtil.java | 8 ++--- .../logic/commands/DeleteCommandTest.java | 6 ++-- .../logic/commands/EditCommandTest.java | 9 +++--- .../logic/commands/FindCommandTest.java | 6 ++-- .../logic/commands/UndoableCommandTest.java | 4 +-- .../seedu/address/model/AddressBookTest.java | 7 ++--- .../address/testutil/AddressBookBuilder.java | 4 +-- .../testutil/EditPersonDescriptorBuilder.java | 4 +-- .../seedu/address/testutil/PersonBuilder.java | 3 +- .../seedu/address/testutil/PersonUtil.java | 6 ++-- .../java/seedu/address/testutil/TestUtil.java | 4 +-- .../address/testutil/TypicalPersons.java | 28 +++++++++--------- .../java/seedu/address/ui/PersonCardTest.java | 3 +- .../seedu/address/ui/PersonListPanelTest.java | 6 ++-- .../address/ui/testutil/GuiTestAssert.java | 10 +++---- .../systemtests/AddCommandSystemTest.java | 18 +++++------ .../systemtests/DeleteCommandSystemTest.java | 12 ++++---- .../systemtests/EditCommandSystemTest.java | 11 ++++--- src/test/java/systemtests/ModelHelper.java | 14 ++++----- 44 files changed, 167 insertions(+), 202 deletions(-) delete mode 100644 src/main/java/seedu/address/model/person/ReadOnlyPerson.java diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index 05891ecb25f5..9838c0708364 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -205,7 +205,7 @@ The `Model`, * stores a `UserPref` object that represents the user's preferences. * stores the Address Book data. -* exposes an unmodifiable `ObservableList` that can be 'observed' e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change. +* exposes an unmodifiable `ObservableList` that can be 'observed' e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change. * does not depend on any of the other three components. [[Design-Storage]] @@ -561,7 +561,7 @@ image::getting-started-ui-tag-after.png[width="300"] + **** * Hints -** The tag labels are created inside link:{repoURL}/src/main/java/seedu/address/ui/PersonCard.java[`PersonCard#initTags(ReadOnlyPerson)`] (`new Label(tag.tagName)`). https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Label.html[JavaFX's `Label` class] allows you to modify the style of each Label, such as changing its color. +** The tag labels are created inside link:{repoURL}/src/main/java/seedu/address/ui/PersonCard.java[`PersonCard#initTags(Person)`] (`new Label(tag.tagName)`). https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Label.html[JavaFX's `Label` class] allows you to modify the style of each Label, such as changing its color. ** Use the .css attribute `-fx-background-color` to add a color. * Solution ** See this https://github.com/se-edu/addressbook-level4/pull/592/files[PR] for the full solution. @@ -683,7 +683,7 @@ Let's add a placeholder on all our link:{repoURL}/src/main/java/seedu/address/ui . Modify link:{repoURL}/src/test/java/guitests/guihandles/PersonCardHandle.java[`PersonCardHandle`] so that future tests can read the contents of the remark label. ===== [Step 4] Model: Add `Remark` class -We have to properly encapsulate the remark in our link:{repoURL}/src/main/java/seedu/address/model/person/ReadOnlyPerson.java[`ReadOnlyPerson`] class. Instead of just using a `String`, let's follow the conventional class structure that the codebase already uses by adding a `Remark` class. +We have to properly encapsulate the remark in our link:{repoURL}/src/main/java/seedu/address/model/person/Person.java[`Person`] class. Instead of just using a `String`, let's follow the conventional class structure that the codebase already uses by adding a `Remark` class. **Main:** @@ -694,12 +694,12 @@ We have to properly encapsulate the remark in our link:{repoURL}/src/main/java/s . Add test for `Remark`, to test the `Remark#equals()` method. -===== [Step 5] Model: Modify `ReadOnlyPerson` to support a `Remark` field -Now we have the `Remark` class, we need to actually use it inside link:{repoURL}/src/main/java/seedu/address/model/person/ReadOnlyPerson.java[`ReadOnlyPerson`]. +===== [Step 5] Model: Modify `Person` to support a `Remark` field +Now we have the `Remark` class, we need to actually use it inside link:{repoURL}/src/main/java/seedu/address/model/person/Person.java[`Person`]. **Main:** -. Add three methods `setRemark(Remark)`, `getRemark()` and `remarkProperty()`. Be sure to implement these newly created methods in link:{repoURL}/src/main/java/seedu/address/model/person/ReadOnlyPerson.java[`Person`], which implements the link:{repoURL}/src/main/java/seedu/address/model/person/ReadOnlyPerson.java[`ReadOnlyPerson`] interface. +. Add three methods `setRemark(Remark)`, `getRemark()` and `remarkProperty()`. Be sure to implement these newly created methods in link:{repoURL}/src/main/java/seedu/address/model/person/Person.java[`Person`], which implements the link:{repoURL}/src/main/java/seedu/address/model/person/Person.java[`Person`] interface. . You may assume that the user will not be able to use the `add` and `edit` commands to modify the remarks field (i.e. the person will be created without a remark). . Modify link:{repoURL}/src/main/java/seedu/address/model/util/SampleDataUtil.java/[`SampleDataUtil`] to add remarks for the sample data (delete your `addressBook.xml` so that the application will load the sample data when you launch it.) @@ -709,7 +709,7 @@ We now have `Remark` s for `Person` s, but they will be gone when we exit the ap **Main:** . Add a new Xml field for `Remark`. -. Be sure to modify the logic of the constructor and `toModelType()`, which handles the conversion to/from link:{repoURL}/src/main/java/seedu/address/model/person/ReadOnlyPerson.java[`ReadOnlyPerson`]. +. Be sure to modify the logic of the constructor and `toModelType()`, which handles the conversion to/from link:{repoURL}/src/main/java/seedu/address/model/person/Person.java[`Person`]. **Tests:** @@ -725,7 +725,7 @@ Our remark label in link:{repoURL}/src/main/java/seedu/address/ui/PersonCard.jav **Tests:** . Modify link:{repoURL}/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java[`GuiTestAssert#assertCardDisplaysPerson(...)`] so that it will compare the remark label. -. In link:{repoURL}/src/test/java/seedu/address/ui/PersonCardTest.java[`PersonCardTest`], call `personWithTags.setRemark(ALICE.getRemark())` to test that changes in the link:{repoURL}/src/main/java/seedu/address/model/person/ReadOnlyPerson.java[`Person`] 's remark correctly updates the corresponding link:{repoURL}/src/main/java/seedu/address/ui/PersonCard.java[`PersonCard`]. +. In link:{repoURL}/src/test/java/seedu/address/ui/PersonCardTest.java[`PersonCardTest`], call `personWithTags.setRemark(ALICE.getRemark())` to test that changes in the link:{repoURL}/src/main/java/seedu/address/model/person/Person.java[`Person`] 's remark correctly updates the corresponding link:{repoURL}/src/main/java/seedu/address/ui/PersonCard.java[`PersonCard`]. ===== [Step 8] Logic: Implement `RemarkCommand#execute()` logic We now have everything set up... but we still can't modify the remarks. Let's finish it up by adding in actual logic for our `remark` command. diff --git a/docs/diagrams/ModelComponentClassDiagram.pptx b/docs/diagrams/ModelComponentClassDiagram.pptx index 5e7392e86ec61689cd0b64e42a9c7cce5d21f2e1..418360e10b26fec862bd0a2347af957c7242afbe 100644 GIT binary patch delta 20982 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 PFAg}D3!{oj{H5bRH=YL0 delta 21395 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
PHNm{`M(2OS}QDRx*-r|8SdiE=S| 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 diff --git a/src/main/java/seedu/address/logic/Logic.java b/src/main/java/seedu/address/logic/Logic.java index f6000c79262c..8b34b862039a 100644 --- a/src/main/java/seedu/address/logic/Logic.java +++ b/src/main/java/seedu/address/logic/Logic.java @@ -4,7 +4,7 @@ import seedu.address.logic.commands.CommandResult; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; /** * API of the Logic component @@ -20,7 +20,7 @@ public interface Logic { CommandResult execute(String commandText) throws CommandException, ParseException; /** Returns an unmodifiable view of the filtered list of persons */ - ObservableList getFilteredPersonList(); + ObservableList getFilteredPersonList(); /** Returns the list of input entered by the user, encapsulated in a {@code ListElementPointer} object */ ListElementPointer getHistorySnapshot(); diff --git a/src/main/java/seedu/address/logic/LogicManager.java b/src/main/java/seedu/address/logic/LogicManager.java index f60c7aeebda8..71211f2a3ec1 100644 --- a/src/main/java/seedu/address/logic/LogicManager.java +++ b/src/main/java/seedu/address/logic/LogicManager.java @@ -11,7 +11,7 @@ import seedu.address.logic.parser.AddressBookParser; import seedu.address.logic.parser.exceptions.ParseException; import seedu.address.model.Model; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; /** * The main LogicManager of the app. @@ -46,7 +46,7 @@ public CommandResult execute(String commandText) throws CommandException, ParseE } @Override - public ObservableList getFilteredPersonList() { + public ObservableList getFilteredPersonList() { return model.getFilteredPersonList(); } diff --git a/src/main/java/seedu/address/logic/commands/AddCommand.java b/src/main/java/seedu/address/logic/commands/AddCommand.java index 27b4f3578d78..2965e17c2b92 100644 --- a/src/main/java/seedu/address/logic/commands/AddCommand.java +++ b/src/main/java/seedu/address/logic/commands/AddCommand.java @@ -9,7 +9,6 @@ import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.model.person.Person; -import seedu.address.model.person.ReadOnlyPerson; import seedu.address.model.person.exceptions.DuplicatePersonException; /** @@ -40,9 +39,9 @@ public class AddCommand extends UndoableCommand { private final Person toAdd; /** - * Creates an AddCommand to add the specified {@code ReadOnlyPerson} + * Creates an AddCommand to add the specified {@code Person} */ - public AddCommand(ReadOnlyPerson person) { + public AddCommand(Person person) { toAdd = new Person(person); } diff --git a/src/main/java/seedu/address/logic/commands/DeleteCommand.java b/src/main/java/seedu/address/logic/commands/DeleteCommand.java index 572ad734818d..14142e012906 100644 --- a/src/main/java/seedu/address/logic/commands/DeleteCommand.java +++ b/src/main/java/seedu/address/logic/commands/DeleteCommand.java @@ -5,7 +5,7 @@ import seedu.address.commons.core.Messages; import seedu.address.commons.core.index.Index; import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; import seedu.address.model.person.exceptions.PersonNotFoundException; /** @@ -32,13 +32,13 @@ public DeleteCommand(Index targetIndex) { @Override public CommandResult executeUndoableCommand() throws CommandException { - List lastShownList = model.getFilteredPersonList(); + List lastShownList = model.getFilteredPersonList(); if (targetIndex.getZeroBased() >= lastShownList.size()) { throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); } - ReadOnlyPerson personToDelete = lastShownList.get(targetIndex.getZeroBased()); + Person personToDelete = lastShownList.get(targetIndex.getZeroBased()); try { model.deletePerson(personToDelete); diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java index 04bfb8d7283a..95c94d80e5fe 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCommand.java @@ -21,7 +21,6 @@ import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; -import seedu.address.model.person.ReadOnlyPerson; import seedu.address.model.person.exceptions.DuplicatePersonException; import seedu.address.model.person.exceptions.PersonNotFoundException; import seedu.address.model.tag.Tag; @@ -67,13 +66,13 @@ public EditCommand(Index index, EditPersonDescriptor editPersonDescriptor) { @Override public CommandResult executeUndoableCommand() throws CommandException { - List lastShownList = model.getFilteredPersonList(); + List lastShownList = model.getFilteredPersonList(); if (index.getZeroBased() >= lastShownList.size()) { throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); } - ReadOnlyPerson personToEdit = lastShownList.get(index.getZeroBased()); + Person personToEdit = lastShownList.get(index.getZeroBased()); Person editedPerson = createEditedPerson(personToEdit, editPersonDescriptor); try { @@ -91,8 +90,7 @@ public CommandResult executeUndoableCommand() throws CommandException { * Creates and returns a {@code Person} with the details of {@code personToEdit} * edited with {@code editPersonDescriptor}. */ - private static Person createEditedPerson(ReadOnlyPerson personToEdit, - EditPersonDescriptor editPersonDescriptor) { + private static Person createEditedPerson(Person personToEdit, EditPersonDescriptor editPersonDescriptor) { assert personToEdit != null; Name updatedName = editPersonDescriptor.getName().orElse(personToEdit.getName()); diff --git a/src/main/java/seedu/address/logic/commands/SelectCommand.java b/src/main/java/seedu/address/logic/commands/SelectCommand.java index 8ea9de621e16..9e3840a9dde6 100644 --- a/src/main/java/seedu/address/logic/commands/SelectCommand.java +++ b/src/main/java/seedu/address/logic/commands/SelectCommand.java @@ -7,7 +7,7 @@ import seedu.address.commons.core.index.Index; import seedu.address.commons.events.ui.JumpToListRequestEvent; import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; /** * Selects a person identified using it's last displayed index from the address book. @@ -32,7 +32,7 @@ public SelectCommand(Index targetIndex) { @Override public CommandResult execute() throws CommandException { - List lastShownList = model.getFilteredPersonList(); + List lastShownList = model.getFilteredPersonList(); if (targetIndex.getZeroBased() >= lastShownList.size()) { throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); diff --git a/src/main/java/seedu/address/logic/parser/AddCommandParser.java b/src/main/java/seedu/address/logic/parser/AddCommandParser.java index ece2bb7bbf28..3c729b388554 100644 --- a/src/main/java/seedu/address/logic/parser/AddCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/AddCommandParser.java @@ -18,7 +18,6 @@ import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; -import seedu.address.model.person.ReadOnlyPerson; import seedu.address.model.tag.Tag; /** @@ -47,7 +46,7 @@ public AddCommand parse(String args) throws ParseException { Address address = ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS)).get(); Set tagList = ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG)); - ReadOnlyPerson person = new Person(name, phone, email, address, tagList); + Person person = new Person(name, phone, email, address, tagList); return new AddCommand(person); } catch (IllegalValueException ive) { diff --git a/src/main/java/seedu/address/model/AddressBook.java b/src/main/java/seedu/address/model/AddressBook.java index 597c80179596..f8d0260de159 100644 --- a/src/main/java/seedu/address/model/AddressBook.java +++ b/src/main/java/seedu/address/model/AddressBook.java @@ -12,7 +12,6 @@ import javafx.collections.ObservableList; import seedu.address.model.person.Person; -import seedu.address.model.person.ReadOnlyPerson; import seedu.address.model.person.UniquePersonList; import seedu.address.model.person.exceptions.DuplicatePersonException; import seedu.address.model.person.exceptions.PersonNotFoundException; @@ -52,7 +51,7 @@ public AddressBook(ReadOnlyAddressBook toBeCopied) { //// list overwrite operations - public void setPersons(List persons) throws DuplicatePersonException { + public void setPersons(List persons) throws DuplicatePersonException { this.persons.setPersons(persons); } @@ -86,7 +85,7 @@ public void resetData(ReadOnlyAddressBook newData) { * * @throws DuplicatePersonException if an equivalent person already exists. */ - public void addPerson(ReadOnlyPerson p) throws DuplicatePersonException { + public void addPerson(Person p) throws DuplicatePersonException { Person person = syncWithMasterTagList(p); // TODO: the tags master list will be updated even though the below line fails. // This can cause the tags master list to have additional tags that are not tagged to any person @@ -95,24 +94,24 @@ public void addPerson(ReadOnlyPerson p) throws DuplicatePersonException { } /** - * Replaces the given person {@code target} in the list with {@code editedReadOnlyPerson}. - * {@code AddressBook}'s tag list will be updated with the tags of {@code editedReadOnlyPerson}. + * Replaces the given person {@code target} in the list with {@code editedPerson}. + * {@code AddressBook}'s tag list will be updated with the tags of {@code editedPerson}. * * @throws DuplicatePersonException if updating the person's details causes the person to be equivalent to * another existing person in the list. * @throws PersonNotFoundException if {@code target} could not be found in the list. * - * @see #syncWithMasterTagList(ReadOnlyPerson) + * @see #syncWithMasterTagList(Person) */ - public void updatePerson(ReadOnlyPerson target, ReadOnlyPerson editedReadOnlyPerson) + public void updatePerson(Person target, Person editedPerson) throws DuplicatePersonException, PersonNotFoundException { - requireNonNull(editedReadOnlyPerson); + requireNonNull(editedPerson); - Person editedPerson = syncWithMasterTagList(editedReadOnlyPerson); + Person syncedEditedPerson = syncWithMasterTagList(editedPerson); // TODO: the tags master list will be updated even though the below line fails. // This can cause the tags master list to have additional tags that are not tagged to any person // in the person list. - persons.setPerson(target, editedPerson); + persons.setPerson(target, syncedEditedPerson); } /** @@ -120,7 +119,7 @@ public void updatePerson(ReadOnlyPerson target, ReadOnlyPerson editedReadOnlyPer * @return a copy of this {@code person} such that every tag in this person points to a Tag object in the master * list. */ - private Person syncWithMasterTagList(ReadOnlyPerson person) { + private Person syncWithMasterTagList(Person person) { final UniqueTagList personTags = new UniqueTagList(person.getTags()); tags.mergeFrom(personTags); @@ -140,7 +139,7 @@ private Person syncWithMasterTagList(ReadOnlyPerson person) { * Removes {@code key} from this {@code AddressBook}. * @throws PersonNotFoundException if the {@code key} is not in this {@code AddressBook}. */ - public boolean removePerson(ReadOnlyPerson key) throws PersonNotFoundException { + public boolean removePerson(Person key) throws PersonNotFoundException { if (persons.remove(key)) { return true; } else { @@ -163,7 +162,7 @@ public String toString() { } @Override - public ObservableList getPersonList() { + public ObservableList getPersonList() { return persons.asObservableList(); } diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index 9c6aa4e766a0..4a6079ce0199 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -3,7 +3,7 @@ import java.util.function.Predicate; import javafx.collections.ObservableList; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; import seedu.address.model.person.exceptions.DuplicatePersonException; import seedu.address.model.person.exceptions.PersonNotFoundException; @@ -12,7 +12,7 @@ */ public interface Model { /** {@code Predicate} that always evaluate to true */ - Predicate PREDICATE_SHOW_ALL_PERSONS = unused -> true; + Predicate PREDICATE_SHOW_ALL_PERSONS = unused -> true; /** Clears existing backing model and replaces with the provided new data. */ void resetData(ReadOnlyAddressBook newData); @@ -21,10 +21,10 @@ public interface Model { ReadOnlyAddressBook getAddressBook(); /** Deletes the given person. */ - void deletePerson(ReadOnlyPerson target) throws PersonNotFoundException; + void deletePerson(Person target) throws PersonNotFoundException; /** Adds the given person */ - void addPerson(ReadOnlyPerson person) throws DuplicatePersonException; + void addPerson(Person person) throws DuplicatePersonException; /** * Replaces the given person {@code target} with {@code editedPerson}. @@ -33,16 +33,16 @@ public interface Model { * another existing person in the list. * @throws PersonNotFoundException if {@code target} could not be found in the list. */ - void updatePerson(ReadOnlyPerson target, ReadOnlyPerson editedPerson) + void updatePerson(Person target, Person editedPerson) throws DuplicatePersonException, PersonNotFoundException; /** Returns an unmodifiable view of the filtered person list */ - ObservableList getFilteredPersonList(); + ObservableList getFilteredPersonList(); /** * Updates the filter of the filtered person list to filter by the given {@code predicate}. * @throws NullPointerException if {@code predicate} is null. */ - void updateFilteredPersonList(Predicate predicate); + void updateFilteredPersonList(Predicate predicate); } diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index 095c831cfbf8..22a7d0eb3f4d 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -12,7 +12,7 @@ import seedu.address.commons.core.ComponentManager; import seedu.address.commons.core.LogsCenter; import seedu.address.commons.events.model.AddressBookChangedEvent; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; import seedu.address.model.person.exceptions.DuplicatePersonException; import seedu.address.model.person.exceptions.PersonNotFoundException; @@ -24,7 +24,7 @@ public class ModelManager extends ComponentManager implements Model { private static final Logger logger = LogsCenter.getLogger(ModelManager.class); private final AddressBook addressBook; - private final FilteredList filteredPersons; + private final FilteredList filteredPersons; /** * Initializes a ModelManager with the given addressBook and userPrefs. @@ -60,20 +60,20 @@ private void indicateAddressBookChanged() { } @Override - public synchronized void deletePerson(ReadOnlyPerson target) throws PersonNotFoundException { + public synchronized void deletePerson(Person target) throws PersonNotFoundException { addressBook.removePerson(target); indicateAddressBookChanged(); } @Override - public synchronized void addPerson(ReadOnlyPerson person) throws DuplicatePersonException { + public synchronized void addPerson(Person person) throws DuplicatePersonException { addressBook.addPerson(person); updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); indicateAddressBookChanged(); } @Override - public void updatePerson(ReadOnlyPerson target, ReadOnlyPerson editedPerson) + public void updatePerson(Person target, Person editedPerson) throws DuplicatePersonException, PersonNotFoundException { requireAllNonNull(target, editedPerson); @@ -84,16 +84,16 @@ public void updatePerson(ReadOnlyPerson target, ReadOnlyPerson editedPerson) //=========== Filtered Person List Accessors ============================================================= /** - * Returns an unmodifiable view of the list of {@code ReadOnlyPerson} backed by the internal list of + * Returns an unmodifiable view of the list of {@code Person} backed by the internal list of * {@code addressBook} */ @Override - public ObservableList getFilteredPersonList() { + public ObservableList getFilteredPersonList() { return FXCollections.unmodifiableObservableList(filteredPersons); } @Override - public void updateFilteredPersonList(Predicate predicate) { + public void updateFilteredPersonList(Predicate predicate) { requireNonNull(predicate); filteredPersons.setPredicate(predicate); } diff --git a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java index df24c7d9e928..1f4e49a37d67 100644 --- a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java +++ b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java @@ -1,7 +1,7 @@ package seedu.address.model; import javafx.collections.ObservableList; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; import seedu.address.model.tag.Tag; /** @@ -13,7 +13,7 @@ public interface ReadOnlyAddressBook { * Returns an unmodifiable view of the persons list. * This list will not contain any duplicate persons. */ - ObservableList getPersonList(); + ObservableList getPersonList(); /** * Returns an unmodifiable view of the tags list. diff --git a/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java b/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java index 9d73fd178b0f..827e2cc106bd 100644 --- a/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java +++ b/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java @@ -6,9 +6,9 @@ import seedu.address.commons.util.StringUtil; /** - * Tests that a {@code ReadOnlyPerson}'s {@code Name} matches any of the keywords given. + * Tests that a {@code Person}'s {@code Name} matches any of the keywords given. */ -public class NameContainsKeywordsPredicate implements Predicate { +public class NameContainsKeywordsPredicate implements Predicate { private final List keywords; public NameContainsKeywordsPredicate(List keywords) { @@ -16,7 +16,7 @@ public NameContainsKeywordsPredicate(List keywords) { } @Override - public boolean test(ReadOnlyPerson person) { + public boolean test(Person person) { return keywords.stream() .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getName().fullName, keyword)); } diff --git a/src/main/java/seedu/address/model/person/Person.java b/src/main/java/seedu/address/model/person/Person.java index 5406f6029489..284e26df2c64 100644 --- a/src/main/java/seedu/address/model/person/Person.java +++ b/src/main/java/seedu/address/model/person/Person.java @@ -13,7 +13,7 @@ * Represents a Person in the address book. * Guarantees: details are present and not null, field values are validated, immutable. */ -public class Person implements ReadOnlyPerson { +public class Person { private final Name name; private final Phone phone; @@ -36,29 +36,25 @@ public Person(Name name, Phone phone, Email email, Address address, Set tag } /** - * Creates a copy of the given ReadOnlyPerson. + * Creates a copy of the given Person. */ - public Person(ReadOnlyPerson source) { + public Person(Person source) { this(source.getName(), source.getPhone(), source.getEmail(), source.getAddress(), source.getTags()); } - @Override public Name getName() { return name; } - @Override public Phone getPhone() { return phone; } - @Override public Email getEmail() { return email; } - @Override public Address getAddress() { return address; } @@ -67,7 +63,6 @@ public Address getAddress() { * Returns an immutable tag set, which throws {@code UnsupportedOperationException} * if modification is attempted. */ - @Override public Set getTags() { return Collections.unmodifiableSet(tags.toSet()); } diff --git a/src/main/java/seedu/address/model/person/ReadOnlyPerson.java b/src/main/java/seedu/address/model/person/ReadOnlyPerson.java deleted file mode 100644 index 9067380adbea..000000000000 --- a/src/main/java/seedu/address/model/person/ReadOnlyPerson.java +++ /dev/null @@ -1,18 +0,0 @@ -package seedu.address.model.person; - -import java.util.Set; - -import seedu.address.model.tag.Tag; - -/** - * A read-only immutable interface for a Person in the addressbook. - * Implementations should guarantee: details are present and not null, field values are validated. - */ -public interface ReadOnlyPerson { - - Name getName(); - Phone getPhone(); - Email getEmail(); - Address getAddress(); - Set getTags(); -} diff --git a/src/main/java/seedu/address/model/person/UniquePersonList.java b/src/main/java/seedu/address/model/person/UniquePersonList.java index 3b293a9d2b80..8dc6b07fdaeb 100644 --- a/src/main/java/seedu/address/model/person/UniquePersonList.java +++ b/src/main/java/seedu/address/model/person/UniquePersonList.java @@ -25,12 +25,12 @@ public class UniquePersonList implements Iterable { private final ObservableList internalList = FXCollections.observableArrayList(); // used by asObservableList() - private final ObservableList mappedList = EasyBind.map(internalList, (person) -> person); + private final ObservableList mappedList = EasyBind.map(internalList, (person) -> person); /** * Returns true if the list contains an equivalent person as the given argument. */ - public boolean contains(ReadOnlyPerson toCheck) { + public boolean contains(Person toCheck) { requireNonNull(toCheck); return internalList.contains(toCheck); } @@ -40,7 +40,7 @@ public boolean contains(ReadOnlyPerson toCheck) { * * @throws DuplicatePersonException if the person to add is a duplicate of an existing person in the list. */ - public void add(ReadOnlyPerson toAdd) throws DuplicatePersonException { + public void add(Person toAdd) throws DuplicatePersonException { requireNonNull(toAdd); if (contains(toAdd)) { throw new DuplicatePersonException(); @@ -54,7 +54,7 @@ public void add(ReadOnlyPerson toAdd) throws DuplicatePersonException { * @throws DuplicatePersonException if the replacement is equivalent to another existing person in the list. * @throws PersonNotFoundException if {@code target} could not be found in the list. */ - public void setPerson(ReadOnlyPerson target, ReadOnlyPerson editedPerson) + public void setPerson(Person target, Person editedPerson) throws DuplicatePersonException, PersonNotFoundException { requireNonNull(editedPerson); @@ -75,7 +75,7 @@ public void setPerson(ReadOnlyPerson target, ReadOnlyPerson editedPerson) * * @throws PersonNotFoundException if no such person could be found in the list. */ - public boolean remove(ReadOnlyPerson toRemove) throws PersonNotFoundException { + public boolean remove(Person toRemove) throws PersonNotFoundException { requireNonNull(toRemove); final boolean personFoundAndDeleted = internalList.remove(toRemove); if (!personFoundAndDeleted) { @@ -88,9 +88,9 @@ public void setPersons(UniquePersonList replacement) { this.internalList.setAll(replacement.internalList); } - public void setPersons(List persons) throws DuplicatePersonException { + public void setPersons(List persons) throws DuplicatePersonException { final UniquePersonList replacement = new UniquePersonList(); - for (final ReadOnlyPerson person : persons) { + for (final Person person : persons) { replacement.add(new Person(person)); } setPersons(replacement); @@ -99,7 +99,7 @@ public void setPersons(List persons) throws DuplicateP /** * Returns the backing list as an unmodifiable {@code ObservableList}. */ - public ObservableList asObservableList() { + public ObservableList asObservableList() { return FXCollections.unmodifiableObservableList(mappedList); } diff --git a/src/main/java/seedu/address/storage/XmlAdaptedPerson.java b/src/main/java/seedu/address/storage/XmlAdaptedPerson.java index 5e833226e2b1..87120ddbaa5a 100644 --- a/src/main/java/seedu/address/storage/XmlAdaptedPerson.java +++ b/src/main/java/seedu/address/storage/XmlAdaptedPerson.java @@ -13,7 +13,6 @@ import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; -import seedu.address.model.person.ReadOnlyPerson; import seedu.address.model.tag.Tag; /** @@ -57,7 +56,7 @@ public XmlAdaptedPerson(String name, String phone, String email, String address, * * @param source future changes to this will not affect the created XmlAdaptedPerson */ - public XmlAdaptedPerson(ReadOnlyPerson source) { + public XmlAdaptedPerson(Person source) { name = source.getName().fullName; phone = source.getPhone().value; email = source.getEmail().value; diff --git a/src/main/java/seedu/address/storage/XmlSerializableAddressBook.java b/src/main/java/seedu/address/storage/XmlSerializableAddressBook.java index 37eaee382ce4..50f6ee4af6e5 100644 --- a/src/main/java/seedu/address/storage/XmlSerializableAddressBook.java +++ b/src/main/java/seedu/address/storage/XmlSerializableAddressBook.java @@ -11,7 +11,7 @@ import javafx.collections.ObservableList; import seedu.address.commons.exceptions.IllegalValueException; import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; import seedu.address.model.tag.Tag; /** @@ -44,8 +44,8 @@ public XmlSerializableAddressBook(ReadOnlyAddressBook src) { } @Override - public ObservableList getPersonList() { - final ObservableList persons = this.persons.stream().map(p -> { + public ObservableList getPersonList() { + final ObservableList persons = this.persons.stream().map(p -> { try { return p.toModelType(); } catch (IllegalValueException e) { diff --git a/src/main/java/seedu/address/ui/BrowserPanel.java b/src/main/java/seedu/address/ui/BrowserPanel.java index 98689931eb17..1d964dfc6d46 100644 --- a/src/main/java/seedu/address/ui/BrowserPanel.java +++ b/src/main/java/seedu/address/ui/BrowserPanel.java @@ -13,7 +13,7 @@ import seedu.address.MainApp; import seedu.address.commons.core.LogsCenter; import seedu.address.commons.events.ui.PersonPanelSelectionChangedEvent; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; /** * The Browser Panel of the App. @@ -41,7 +41,7 @@ public BrowserPanel() { registerAsAnEventHandler(this); } - private void loadPersonPage(ReadOnlyPerson person) { + private void loadPersonPage(Person person) { loadPage(GOOGLE_SEARCH_URL_PREFIX + person.getName().fullName.replaceAll(" ", "+") + GOOGLE_SEARCH_URL_SUFFIX); } diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/seedu/address/ui/PersonCard.java index f086e1ca8a2a..f6727ea83abd 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/seedu/address/ui/PersonCard.java @@ -5,7 +5,7 @@ import javafx.scene.layout.FlowPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Region; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; /** * An UI component that displays information of a {@code Person}. @@ -22,7 +22,7 @@ public class PersonCard extends UiPart { * @see The issue on AddressBook level 4 */ - public final ReadOnlyPerson person; + public final Person person; @FXML private HBox cardPane; @@ -39,7 +39,7 @@ public class PersonCard extends UiPart { @FXML private FlowPane tags; - public PersonCard(ReadOnlyPerson person, int displayedIndex) { + public PersonCard(Person person, int displayedIndex) { super(FXML); this.person = person; id.setText(displayedIndex + ". "); diff --git a/src/main/java/seedu/address/ui/PersonListPanel.java b/src/main/java/seedu/address/ui/PersonListPanel.java index d3a5fbae42bb..60a4f70f4e71 100644 --- a/src/main/java/seedu/address/ui/PersonListPanel.java +++ b/src/main/java/seedu/address/ui/PersonListPanel.java @@ -15,7 +15,7 @@ import seedu.address.commons.core.LogsCenter; import seedu.address.commons.events.ui.JumpToListRequestEvent; import seedu.address.commons.events.ui.PersonPanelSelectionChangedEvent; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; /** * Panel containing the list of persons. @@ -27,13 +27,13 @@ public class PersonListPanel extends UiPart { @FXML private ListView personListView; - public PersonListPanel(ObservableList personList) { + public PersonListPanel(ObservableList personList) { super(FXML); setConnections(personList); registerAsAnEventHandler(this); } - private void setConnections(ObservableList personList) { + private void setConnections(ObservableList personList) { ObservableList mappedList = EasyBind.map( personList, (person) -> new PersonCard(person, personList.indexOf(person) + 1)); personListView.setItems(mappedList); diff --git a/src/test/java/guitests/guihandles/PersonListPanelHandle.java b/src/test/java/guitests/guihandles/PersonListPanelHandle.java index c6a1f5dc1df9..40564bb2d960 100644 --- a/src/test/java/guitests/guihandles/PersonListPanelHandle.java +++ b/src/test/java/guitests/guihandles/PersonListPanelHandle.java @@ -4,7 +4,7 @@ import java.util.Optional; import javafx.scene.control.ListView; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; import seedu.address.ui.PersonCard; /** @@ -57,7 +57,7 @@ public boolean isAnyCardSelected() { /** * Navigates the listview to display and select the person. */ - public void navigateToCard(ReadOnlyPerson person) { + public void navigateToCard(Person person) { List cards = getRootNode().getItems(); Optional matchingCard = cards.stream().filter(card -> card.person.equals(person)).findFirst(); @@ -82,7 +82,7 @@ public PersonCardHandle getPersonCardHandle(int index) { /** * Returns the {@code PersonCardHandle} of the specified {@code person} in the list. */ - public PersonCardHandle getPersonCardHandle(ReadOnlyPerson person) { + public PersonCardHandle getPersonCardHandle(Person person) { Optional handle = getRootNode().getItems().stream() .filter(card -> card.person.equals(person)) .map(card -> new PersonCardHandle(card.getRoot())) diff --git a/src/test/java/seedu/address/logic/commands/AddCommandTest.java b/src/test/java/seedu/address/logic/commands/AddCommandTest.java index b327ef2d805b..9cd58cfdbc25 100644 --- a/src/test/java/seedu/address/logic/commands/AddCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/AddCommandTest.java @@ -21,7 +21,6 @@ import seedu.address.model.Model; import seedu.address.model.ReadOnlyAddressBook; import seedu.address.model.person.Person; -import seedu.address.model.person.ReadOnlyPerson; import seedu.address.model.person.exceptions.DuplicatePersonException; import seedu.address.model.person.exceptions.PersonNotFoundException; import seedu.address.testutil.PersonBuilder; @@ -97,7 +96,7 @@ private AddCommand getAddCommandForPerson(Person person, Model model) { */ private class ModelStub implements Model { @Override - public void addPerson(ReadOnlyPerson person) throws DuplicatePersonException { + public void addPerson(Person person) throws DuplicatePersonException { fail("This method should not be called."); } @@ -113,24 +112,24 @@ public ReadOnlyAddressBook getAddressBook() { } @Override - public void deletePerson(ReadOnlyPerson target) throws PersonNotFoundException { + public void deletePerson(Person target) throws PersonNotFoundException { fail("This method should not be called."); } @Override - public void updatePerson(ReadOnlyPerson target, ReadOnlyPerson editedPerson) + public void updatePerson(Person target, Person editedPerson) throws DuplicatePersonException { fail("This method should not be called."); } @Override - public ObservableList getFilteredPersonList() { + public ObservableList getFilteredPersonList() { fail("This method should not be called."); return null; } @Override - public void updateFilteredPersonList(Predicate predicate) { + public void updateFilteredPersonList(Predicate predicate) { fail("This method should not be called."); } } @@ -140,7 +139,7 @@ public void updateFilteredPersonList(Predicate predicate) { */ private class ModelStubThrowingDuplicatePersonException extends ModelStub { @Override - public void addPerson(ReadOnlyPerson person) throws DuplicatePersonException { + public void addPerson(Person person) throws DuplicatePersonException { throw new DuplicatePersonException(); } @@ -157,7 +156,7 @@ private class ModelStubAcceptingPersonAdded extends ModelStub { final ArrayList personsAdded = new ArrayList<>(); @Override - public void addPerson(ReadOnlyPerson person) throws DuplicatePersonException { + public void addPerson(Person person) throws DuplicatePersonException { personsAdded.add(new Person(person)); } diff --git a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java b/src/test/java/seedu/address/logic/commands/CommandTestUtil.java index f1097b06111e..b906d895edb5 100644 --- a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java +++ b/src/test/java/seedu/address/logic/commands/CommandTestUtil.java @@ -16,7 +16,7 @@ import seedu.address.model.AddressBook; import seedu.address.model.Model; import seedu.address.model.person.NameContainsKeywordsPredicate; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; import seedu.address.model.person.exceptions.PersonNotFoundException; import seedu.address.testutil.EditPersonDescriptorBuilder; @@ -94,7 +94,7 @@ public static void assertCommandFailure(Command command, Model actualModel, Stri // we are unable to defensively copy the model for comparison later, so we can // only do so by copying its components. AddressBook expectedAddressBook = new AddressBook(actualModel.getAddressBook()); - List expectedFilteredList = new ArrayList<>(actualModel.getFilteredPersonList()); + List expectedFilteredList = new ArrayList<>(actualModel.getFilteredPersonList()); try { command.execute(); @@ -110,7 +110,7 @@ public static void assertCommandFailure(Command command, Model actualModel, Stri * Updates {@code model}'s filtered list to show only the first person in the {@code model}'s address book. */ public static void showFirstPersonOnly(Model model) { - ReadOnlyPerson person = model.getAddressBook().getPersonList().get(0); + Person person = model.getAddressBook().getPersonList().get(0); final String[] splitName = person.getName().fullName.split("\\s+"); model.updateFilteredPersonList(new NameContainsKeywordsPredicate(Arrays.asList(splitName[0]))); @@ -121,7 +121,7 @@ public static void showFirstPersonOnly(Model model) { * Deletes the first person in {@code model}'s filtered list from {@code model}'s address book. */ public static void deleteFirstPerson(Model model) { - ReadOnlyPerson firstPerson = model.getFilteredPersonList().get(0); + Person firstPerson = model.getFilteredPersonList().get(0); try { model.deletePerson(firstPerson); } catch (PersonNotFoundException pnfe) { diff --git a/src/test/java/seedu/address/logic/commands/DeleteCommandTest.java b/src/test/java/seedu/address/logic/commands/DeleteCommandTest.java index 0c4f645de0b2..04114d2a67d2 100644 --- a/src/test/java/seedu/address/logic/commands/DeleteCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/DeleteCommandTest.java @@ -18,7 +18,7 @@ import seedu.address.model.Model; import seedu.address.model.ModelManager; import seedu.address.model.UserPrefs; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; /** * Contains integration tests (interaction with the Model) and unit tests for {@code DeleteCommand}. @@ -29,7 +29,7 @@ public class DeleteCommandTest { @Test public void execute_validIndexUnfilteredList_success() throws Exception { - ReadOnlyPerson personToDelete = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); + Person personToDelete = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); DeleteCommand deleteCommand = prepareCommand(INDEX_FIRST_PERSON); String expectedMessage = String.format(DeleteCommand.MESSAGE_DELETE_PERSON_SUCCESS, personToDelete); @@ -52,7 +52,7 @@ public void execute_invalidIndexUnfilteredList_throwsCommandException() throws E public void execute_validIndexFilteredList_success() throws Exception { showFirstPersonOnly(model); - ReadOnlyPerson personToDelete = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); + Person personToDelete = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); DeleteCommand deleteCommand = prepareCommand(INDEX_FIRST_PERSON); String expectedMessage = String.format(DeleteCommand.MESSAGE_DELETE_PERSON_SUCCESS, personToDelete); diff --git a/src/test/java/seedu/address/logic/commands/EditCommandTest.java b/src/test/java/seedu/address/logic/commands/EditCommandTest.java index 4b08e679f824..cd2d772e026a 100644 --- a/src/test/java/seedu/address/logic/commands/EditCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/EditCommandTest.java @@ -26,7 +26,6 @@ import seedu.address.model.ModelManager; import seedu.address.model.UserPrefs; import seedu.address.model.person.Person; -import seedu.address.model.person.ReadOnlyPerson; import seedu.address.testutil.EditPersonDescriptorBuilder; import seedu.address.testutil.PersonBuilder; @@ -54,7 +53,7 @@ public void execute_allFieldsSpecifiedUnfilteredList_success() throws Exception @Test public void execute_someFieldsSpecifiedUnfilteredList_success() throws Exception { Index indexLastPerson = Index.fromOneBased(model.getFilteredPersonList().size()); - ReadOnlyPerson lastPerson = model.getFilteredPersonList().get(indexLastPerson.getZeroBased()); + Person lastPerson = model.getFilteredPersonList().get(indexLastPerson.getZeroBased()); PersonBuilder personInList = new PersonBuilder(lastPerson); Person editedPerson = personInList.withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB) @@ -75,7 +74,7 @@ public void execute_someFieldsSpecifiedUnfilteredList_success() throws Exception @Test public void execute_noFieldSpecifiedUnfilteredList_success() { EditCommand editCommand = prepareCommand(INDEX_FIRST_PERSON, new EditPersonDescriptor()); - ReadOnlyPerson editedPerson = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); + Person editedPerson = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, editedPerson); @@ -88,7 +87,7 @@ public void execute_noFieldSpecifiedUnfilteredList_success() { public void execute_filteredList_success() throws Exception { showFirstPersonOnly(model); - ReadOnlyPerson personInFilteredList = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); + Person personInFilteredList = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); Person editedPerson = new PersonBuilder(personInFilteredList).withName(VALID_NAME_BOB).build(); EditCommand editCommand = prepareCommand(INDEX_FIRST_PERSON, new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build()); @@ -115,7 +114,7 @@ public void execute_duplicatePersonFilteredList_failure() { showFirstPersonOnly(model); // edit person in filtered list into a duplicate in address book - ReadOnlyPerson personInList = model.getAddressBook().getPersonList().get(INDEX_SECOND_PERSON.getZeroBased()); + Person personInList = model.getAddressBook().getPersonList().get(INDEX_SECOND_PERSON.getZeroBased()); EditCommand editCommand = prepareCommand(INDEX_FIRST_PERSON, new EditPersonDescriptorBuilder(personInList).build()); diff --git a/src/test/java/seedu/address/logic/commands/FindCommandTest.java b/src/test/java/seedu/address/logic/commands/FindCommandTest.java index 5386c8a3f515..dee1f007f751 100644 --- a/src/test/java/seedu/address/logic/commands/FindCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/FindCommandTest.java @@ -22,7 +22,7 @@ import seedu.address.model.ModelManager; import seedu.address.model.UserPrefs; import seedu.address.model.person.NameContainsKeywordsPredicate; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; /** * Contains integration tests (interaction with the Model) for {@code FindCommand}. @@ -84,10 +84,10 @@ private FindCommand prepareCommand(String userInput) { /** * Asserts that {@code command} is successfully executed, and
* - the command feedback is equal to {@code expectedMessage}
- * - the {@code FilteredList} is equal to {@code expectedList}
+ * - the {@code FilteredList} is equal to {@code expectedList}
* - the {@code AddressBook} in model remains the same after executing the {@code command} */ - private void assertCommandSuccess(FindCommand command, String expectedMessage, List expectedList) { + private void assertCommandSuccess(FindCommand command, String expectedMessage, List expectedList) { AddressBook expectedAddressBook = new AddressBook(model.getAddressBook()); CommandResult commandResult = command.execute(); diff --git a/src/test/java/seedu/address/logic/commands/UndoableCommandTest.java b/src/test/java/seedu/address/logic/commands/UndoableCommandTest.java index 41d97ab15c60..7014654a8450 100644 --- a/src/test/java/seedu/address/logic/commands/UndoableCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/UndoableCommandTest.java @@ -12,7 +12,7 @@ import seedu.address.model.Model; import seedu.address.model.ModelManager; import seedu.address.model.UserPrefs; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; import seedu.address.model.person.exceptions.PersonNotFoundException; public class UndoableCommandTest { @@ -55,7 +55,7 @@ class DummyCommand extends UndoableCommand { @Override public CommandResult executeUndoableCommand() throws CommandException { - ReadOnlyPerson personToDelete = model.getFilteredPersonList().get(0); + Person personToDelete = model.getFilteredPersonList().get(0); try { model.deletePerson(personToDelete); } catch (PersonNotFoundException pnfe) { diff --git a/src/test/java/seedu/address/model/AddressBookTest.java b/src/test/java/seedu/address/model/AddressBookTest.java index 49633ed9774d..dfd31c93fab3 100644 --- a/src/test/java/seedu/address/model/AddressBookTest.java +++ b/src/test/java/seedu/address/model/AddressBookTest.java @@ -17,7 +17,6 @@ import javafx.collections.FXCollections; import javafx.collections.ObservableList; import seedu.address.model.person.Person; -import seedu.address.model.person.ReadOnlyPerson; import seedu.address.model.tag.Tag; public class AddressBookTest { @@ -73,16 +72,16 @@ public void getTagList_modifyList_throwsUnsupportedOperationException() { * A stub ReadOnlyAddressBook whose persons and tags lists can violate interface constraints. */ private static class AddressBookStub implements ReadOnlyAddressBook { - private final ObservableList persons = FXCollections.observableArrayList(); + private final ObservableList persons = FXCollections.observableArrayList(); private final ObservableList tags = FXCollections.observableArrayList(); - AddressBookStub(Collection persons, Collection tags) { + AddressBookStub(Collection persons, Collection tags) { this.persons.setAll(persons); this.tags.setAll(tags); } @Override - public ObservableList getPersonList() { + public ObservableList getPersonList() { return persons; } diff --git a/src/test/java/seedu/address/testutil/AddressBookBuilder.java b/src/test/java/seedu/address/testutil/AddressBookBuilder.java index bdae2555c27d..6e73a762b0c1 100644 --- a/src/test/java/seedu/address/testutil/AddressBookBuilder.java +++ b/src/test/java/seedu/address/testutil/AddressBookBuilder.java @@ -2,7 +2,7 @@ import seedu.address.commons.exceptions.IllegalValueException; import seedu.address.model.AddressBook; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; import seedu.address.model.person.exceptions.DuplicatePersonException; import seedu.address.model.tag.Tag; @@ -26,7 +26,7 @@ public AddressBookBuilder(AddressBook addressBook) { /** * Adds a new {@code Person} to the {@code AddressBook} that we are building. */ - public AddressBookBuilder withPerson(ReadOnlyPerson person) { + public AddressBookBuilder withPerson(Person person) { try { addressBook.addPerson(person); } catch (DuplicatePersonException dpe) { diff --git a/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java b/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java index a5bbb6d91940..4584bd5044e1 100644 --- a/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java +++ b/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java @@ -8,8 +8,8 @@ import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Name; +import seedu.address.model.person.Person; import seedu.address.model.person.Phone; -import seedu.address.model.person.ReadOnlyPerson; import seedu.address.model.tag.Tag; /** @@ -30,7 +30,7 @@ public EditPersonDescriptorBuilder(EditPersonDescriptor descriptor) { /** * Returns an {@code EditPersonDescriptor} with fields containing {@code person}'s details */ - public EditPersonDescriptorBuilder(ReadOnlyPerson person) { + public EditPersonDescriptorBuilder(Person person) { descriptor = new EditPersonDescriptor(); descriptor.setName(person.getName()); descriptor.setPhone(person.getPhone()); diff --git a/src/test/java/seedu/address/testutil/PersonBuilder.java b/src/test/java/seedu/address/testutil/PersonBuilder.java index 5f76c32747a2..b124fc1d73b1 100644 --- a/src/test/java/seedu/address/testutil/PersonBuilder.java +++ b/src/test/java/seedu/address/testutil/PersonBuilder.java @@ -8,7 +8,6 @@ import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; -import seedu.address.model.person.ReadOnlyPerson; import seedu.address.model.tag.Tag; import seedu.address.model.util.SampleDataUtil; @@ -40,7 +39,7 @@ public PersonBuilder() { /** * Initializes the PersonBuilder with the data of {@code personToCopy}. */ - public PersonBuilder(ReadOnlyPerson personToCopy) { + public PersonBuilder(Person personToCopy) { name = personToCopy.getName(); phone = personToCopy.getPhone(); email = personToCopy.getEmail(); diff --git a/src/test/java/seedu/address/testutil/PersonUtil.java b/src/test/java/seedu/address/testutil/PersonUtil.java index dee6522780af..642d4f174514 100644 --- a/src/test/java/seedu/address/testutil/PersonUtil.java +++ b/src/test/java/seedu/address/testutil/PersonUtil.java @@ -7,7 +7,7 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import seedu.address.logic.commands.AddCommand; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; /** * A utility class for Person. @@ -17,14 +17,14 @@ public class PersonUtil { /** * Returns an add command string for adding the {@code person}. */ - public static String getAddCommand(ReadOnlyPerson person) { + public static String getAddCommand(Person person) { return AddCommand.COMMAND_WORD + " " + getPersonDetails(person); } /** * Returns the part of command string for the given {@code person}'s details. */ - public static String getPersonDetails(ReadOnlyPerson person) { + public static String getPersonDetails(Person person) { StringBuilder sb = new StringBuilder(); sb.append(PREFIX_NAME + person.getName().fullName + " "); sb.append(PREFIX_PHONE + person.getPhone().value + " "); diff --git a/src/test/java/seedu/address/testutil/TestUtil.java b/src/test/java/seedu/address/testutil/TestUtil.java index 29e457791c8b..c1458738c054 100644 --- a/src/test/java/seedu/address/testutil/TestUtil.java +++ b/src/test/java/seedu/address/testutil/TestUtil.java @@ -6,7 +6,7 @@ import seedu.address.commons.core.index.Index; import seedu.address.commons.util.FileUtil; import seedu.address.model.Model; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; /** * A utility class for test cases. @@ -48,7 +48,7 @@ public static Index getLastIndex(Model model) { /** * Returns the person in the {@code model}'s person list at {@code index}. */ - public static ReadOnlyPerson getPerson(Model model, Index index) { + public static Person getPerson(Model model, Index index) { return model.getAddressBook().getPersonList().get(index.getZeroBased()); } } diff --git a/src/test/java/seedu/address/testutil/TypicalPersons.java b/src/test/java/seedu/address/testutil/TypicalPersons.java index 11144bfd356c..6d7bdbfc55ed 100644 --- a/src/test/java/seedu/address/testutil/TypicalPersons.java +++ b/src/test/java/seedu/address/testutil/TypicalPersons.java @@ -16,7 +16,7 @@ import java.util.List; import seedu.address.model.AddressBook; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; import seedu.address.model.person.exceptions.DuplicatePersonException; /** @@ -24,35 +24,35 @@ */ public class TypicalPersons { - public static final ReadOnlyPerson ALICE = new PersonBuilder().withName("Alice Pauline") + public static final Person ALICE = new PersonBuilder().withName("Alice Pauline") .withAddress("123, Jurong West Ave 6, #08-111").withEmail("alice@example.com") .withPhone("85355255") .withTags("friends").build(); - public static final ReadOnlyPerson BENSON = new PersonBuilder().withName("Benson Meier") + public static final Person BENSON = new PersonBuilder().withName("Benson Meier") .withAddress("311, Clementi Ave 2, #02-25") .withEmail("johnd@example.com").withPhone("98765432") .withTags("owesMoney", "friends").build(); - public static final ReadOnlyPerson CARL = new PersonBuilder().withName("Carl Kurz").withPhone("95352563") + public static final Person CARL = new PersonBuilder().withName("Carl Kurz").withPhone("95352563") .withEmail("heinz@example.com").withAddress("wall street").build(); - public static final ReadOnlyPerson DANIEL = new PersonBuilder().withName("Daniel Meier").withPhone("87652533") + public static final Person DANIEL = new PersonBuilder().withName("Daniel Meier").withPhone("87652533") .withEmail("cornelia@example.com").withAddress("10th street").build(); - public static final ReadOnlyPerson ELLE = new PersonBuilder().withName("Elle Meyer").withPhone("9482224") + public static final Person ELLE = new PersonBuilder().withName("Elle Meyer").withPhone("9482224") .withEmail("werner@example.com").withAddress("michegan ave").build(); - public static final ReadOnlyPerson FIONA = new PersonBuilder().withName("Fiona Kunz").withPhone("9482427") + public static final Person FIONA = new PersonBuilder().withName("Fiona Kunz").withPhone("9482427") .withEmail("lydia@example.com").withAddress("little tokyo").build(); - public static final ReadOnlyPerson GEORGE = new PersonBuilder().withName("George Best").withPhone("9482442") + public static final Person GEORGE = new PersonBuilder().withName("George Best").withPhone("9482442") .withEmail("anna@example.com").withAddress("4th street").build(); // Manually added - public static final ReadOnlyPerson HOON = new PersonBuilder().withName("Hoon Meier").withPhone("8482424") + public static final Person HOON = new PersonBuilder().withName("Hoon Meier").withPhone("8482424") .withEmail("stefan@example.com").withAddress("little india").build(); - public static final ReadOnlyPerson IDA = new PersonBuilder().withName("Ida Mueller").withPhone("8482131") + public static final Person IDA = new PersonBuilder().withName("Ida Mueller").withPhone("8482131") .withEmail("hans@example.com").withAddress("chicago ave").build(); // Manually added - Person's details found in {@code CommandTestUtil} - public static final ReadOnlyPerson AMY = new PersonBuilder().withName(VALID_NAME_AMY).withPhone(VALID_PHONE_AMY) + public static final Person AMY = new PersonBuilder().withName(VALID_NAME_AMY).withPhone(VALID_PHONE_AMY) .withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY).withTags(VALID_TAG_FRIEND).build(); - public static final ReadOnlyPerson BOB = new PersonBuilder().withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB) + public static final Person BOB = new PersonBuilder().withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB) .withEmail(VALID_EMAIL_BOB).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND) .build(); @@ -65,7 +65,7 @@ private TypicalPersons() {} // prevents instantiation */ public static AddressBook getTypicalAddressBook() { AddressBook ab = new AddressBook(); - for (ReadOnlyPerson person : getTypicalPersons()) { + for (Person person : getTypicalPersons()) { try { ab.addPerson(person); } catch (DuplicatePersonException e) { @@ -75,7 +75,7 @@ public static AddressBook getTypicalAddressBook() { return ab; } - public static List getTypicalPersons() { + public static List getTypicalPersons() { return new ArrayList<>(Arrays.asList(ALICE, BENSON, CARL, DANIEL, ELLE, FIONA, GEORGE)); } } diff --git a/src/test/java/seedu/address/ui/PersonCardTest.java b/src/test/java/seedu/address/ui/PersonCardTest.java index 5e376da85202..42f840faa3b4 100644 --- a/src/test/java/seedu/address/ui/PersonCardTest.java +++ b/src/test/java/seedu/address/ui/PersonCardTest.java @@ -9,7 +9,6 @@ import guitests.guihandles.PersonCardHandle; import seedu.address.model.person.Person; -import seedu.address.model.person.ReadOnlyPerson; import seedu.address.testutil.PersonBuilder; public class PersonCardTest extends GuiUnitTest { @@ -59,7 +58,7 @@ public void equals() { * Asserts that {@code personCard} displays the details of {@code expectedPerson} correctly and matches * {@code expectedId}. */ - private void assertCardDisplay(PersonCard personCard, ReadOnlyPerson expectedPerson, int expectedId) { + private void assertCardDisplay(PersonCard personCard, Person expectedPerson, int expectedId) { guiRobot.pauseForHuman(); PersonCardHandle personCardHandle = new PersonCardHandle(personCard.getRoot()); diff --git a/src/test/java/seedu/address/ui/PersonListPanelTest.java b/src/test/java/seedu/address/ui/PersonListPanelTest.java index b774c2a3320c..906ec2bebc03 100644 --- a/src/test/java/seedu/address/ui/PersonListPanelTest.java +++ b/src/test/java/seedu/address/ui/PersonListPanelTest.java @@ -15,10 +15,10 @@ import javafx.collections.FXCollections; import javafx.collections.ObservableList; import seedu.address.commons.events.ui.JumpToListRequestEvent; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; public class PersonListPanelTest extends GuiUnitTest { - private static final ObservableList TYPICAL_PERSONS = + private static final ObservableList TYPICAL_PERSONS = FXCollections.observableList(getTypicalPersons()); private static final JumpToListRequestEvent JUMP_TO_SECOND_EVENT = new JumpToListRequestEvent(INDEX_SECOND_PERSON); @@ -38,7 +38,7 @@ public void setUp() { public void display() { for (int i = 0; i < TYPICAL_PERSONS.size(); i++) { personListPanelHandle.navigateToCard(TYPICAL_PERSONS.get(i)); - ReadOnlyPerson expectedPerson = TYPICAL_PERSONS.get(i); + Person expectedPerson = TYPICAL_PERSONS.get(i); PersonCardHandle actualCard = personListPanelHandle.getPersonCardHandle(i); assertCardDisplaysPerson(expectedPerson, actualCard); diff --git a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java index 965f200edbd3..d21cc2fb3739 100644 --- a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java +++ b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java @@ -8,7 +8,7 @@ import guitests.guihandles.PersonCardHandle; import guitests.guihandles.PersonListPanelHandle; import guitests.guihandles.ResultDisplayHandle; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; /** * A set of assertion methods useful for writing GUI tests. @@ -29,7 +29,7 @@ public static void assertCardEquals(PersonCardHandle expectedCard, PersonCardHan /** * Asserts that {@code actualCard} displays the details of {@code expectedPerson}. */ - public static void assertCardDisplaysPerson(ReadOnlyPerson expectedPerson, PersonCardHandle actualCard) { + public static void assertCardDisplaysPerson(Person expectedPerson, PersonCardHandle actualCard) { assertEquals(expectedPerson.getName().fullName, actualCard.getName()); assertEquals(expectedPerson.getPhone().value, actualCard.getPhone()); assertEquals(expectedPerson.getEmail().value, actualCard.getEmail()); @@ -42,7 +42,7 @@ public static void assertCardDisplaysPerson(ReadOnlyPerson expectedPerson, Perso * Asserts that the list in {@code personListPanelHandle} displays the details of {@code persons} correctly and * in the correct order. */ - public static void assertListMatching(PersonListPanelHandle personListPanelHandle, ReadOnlyPerson... persons) { + public static void assertListMatching(PersonListPanelHandle personListPanelHandle, Person... persons) { for (int i = 0; i < persons.length; i++) { assertCardDisplaysPerson(persons[i], personListPanelHandle.getPersonCardHandle(i)); } @@ -52,8 +52,8 @@ public static void assertListMatching(PersonListPanelHandle personListPanelHandl * Asserts that the list in {@code personListPanelHandle} displays the details of {@code persons} correctly and * in the correct order. */ - public static void assertListMatching(PersonListPanelHandle personListPanelHandle, List persons) { - assertListMatching(personListPanelHandle, persons.toArray(new ReadOnlyPerson[0])); + public static void assertListMatching(PersonListPanelHandle personListPanelHandle, List persons) { + assertListMatching(personListPanelHandle, persons.toArray(new Person[0])); } /** diff --git a/src/test/java/systemtests/AddCommandSystemTest.java b/src/test/java/systemtests/AddCommandSystemTest.java index c352a75f9d2c..3254b60154c4 100644 --- a/src/test/java/systemtests/AddCommandSystemTest.java +++ b/src/test/java/systemtests/AddCommandSystemTest.java @@ -45,8 +45,8 @@ import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Name; +import seedu.address.model.person.Person; import seedu.address.model.person.Phone; -import seedu.address.model.person.ReadOnlyPerson; import seedu.address.model.person.exceptions.DuplicatePersonException; import seedu.address.model.tag.Tag; import seedu.address.testutil.PersonBuilder; @@ -63,7 +63,7 @@ public void add() throws Exception { /* Case: add a person without tags to a non-empty address book, command with leading spaces and trailing spaces * -> added */ - ReadOnlyPerson toAdd = AMY; + Person toAdd = AMY; String command = " " + AddCommand.COMMAND_WORD + " " + NAME_DESC_AMY + " " + PHONE_DESC_AMY + " " + EMAIL_DESC_AMY + " " + ADDRESS_DESC_AMY + " " + TAG_DESC_FRIEND + " "; assertCommandSuccess(command, toAdd); @@ -141,7 +141,7 @@ public void add() throws Exception { /* Case: add a duplicate person except with different tags -> rejected */ // "friends" is an existing tag used in the default model, see TypicalPersons#ALICE // This test will fail if a new tag that is not in the model is used, see the bug documented in - // AddressBook#addPerson(ReadOnlyPerson) + // AddressBook#addPerson(Person) command = PersonUtil.getAddCommand(HOON) + " " + PREFIX_TAG.getPrefix() + "friends"; assertCommandFailure(command, AddCommand.MESSAGE_DUPLICATE_PERSON); @@ -201,16 +201,16 @@ public void add() throws Exception { * {@code AddressBookSystemTest#assertApplicationDisplaysExpected(String, String, Model)}.
* @see AddressBookSystemTest#assertApplicationDisplaysExpected(String, String, Model) */ - private void assertCommandSuccess(ReadOnlyPerson toAdd) { + private void assertCommandSuccess(Person toAdd) { assertCommandSuccess(PersonUtil.getAddCommand(toAdd), toAdd); } /** - * Performs the same verification as {@code assertCommandSuccess(ReadOnlyPerson)}. Executes {@code command} + * Performs the same verification as {@code assertCommandSuccess(Person)}. Executes {@code command} * instead. - * @see AddCommandSystemTest#assertCommandSuccess(ReadOnlyPerson) + * @see AddCommandSystemTest#assertCommandSuccess(Person) */ - private void assertCommandSuccess(String command, ReadOnlyPerson toAdd) { + private void assertCommandSuccess(String command, Person toAdd) { Model expectedModel = getModel(); try { expectedModel.addPerson(toAdd); @@ -223,12 +223,12 @@ private void assertCommandSuccess(String command, ReadOnlyPerson toAdd) { } /** - * Performs the same verification as {@code assertCommandSuccess(String, ReadOnlyPerson)} except asserts that + * Performs the same verification as {@code assertCommandSuccess(String, Person)} except asserts that * the,
* 1. Result display box displays {@code expectedResultMessage}.
* 2. {@code Model}, {@code Storage} and {@code PersonListPanel} equal to the corresponding components in * {@code expectedModel}.
- * @see AddCommandSystemTest#assertCommandSuccess(String, ReadOnlyPerson) + * @see AddCommandSystemTest#assertCommandSuccess(String, Person) */ private void assertCommandSuccess(String command, Model expectedModel, String expectedResultMessage) { executeCommand(command); diff --git a/src/test/java/systemtests/DeleteCommandSystemTest.java b/src/test/java/systemtests/DeleteCommandSystemTest.java index 4a12f622d5a3..c0de78e4aba6 100644 --- a/src/test/java/systemtests/DeleteCommandSystemTest.java +++ b/src/test/java/systemtests/DeleteCommandSystemTest.java @@ -18,7 +18,7 @@ import seedu.address.logic.commands.RedoCommand; import seedu.address.logic.commands.UndoCommand; import seedu.address.model.Model; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; import seedu.address.model.person.exceptions.PersonNotFoundException; public class DeleteCommandSystemTest extends AddressBookSystemTest { @@ -33,7 +33,7 @@ public void delete() { /* Case: delete the first person in the list, command with leading spaces and trailing spaces -> deleted */ Model expectedModel = getModel(); String command = " " + DeleteCommand.COMMAND_WORD + " " + INDEX_FIRST_PERSON.getOneBased() + " "; - ReadOnlyPerson deletedPerson = removePerson(expectedModel, INDEX_FIRST_PERSON); + Person deletedPerson = removePerson(expectedModel, INDEX_FIRST_PERSON); String expectedResultMessage = String.format(MESSAGE_DELETE_PERSON_SUCCESS, deletedPerson); assertCommandSuccess(command, expectedModel, expectedResultMessage); @@ -113,11 +113,11 @@ public void delete() { } /** - * Removes the {@code ReadOnlyPerson} at the specified {@code index} in {@code model}'s address book. + * Removes the {@code Person} at the specified {@code index} in {@code model}'s address book. * @return the removed person */ - private ReadOnlyPerson removePerson(Model model, Index index) { - ReadOnlyPerson targetPerson = getPerson(model, index); + private Person removePerson(Model model, Index index) { + Person targetPerson = getPerson(model, index); try { model.deletePerson(targetPerson); } catch (PersonNotFoundException pnfe) { @@ -133,7 +133,7 @@ private ReadOnlyPerson removePerson(Model model, Index index) { */ private void assertCommandSuccess(Index toDelete) { Model expectedModel = getModel(); - ReadOnlyPerson deletedPerson = removePerson(expectedModel, toDelete); + Person deletedPerson = removePerson(expectedModel, toDelete); String expectedResultMessage = String.format(MESSAGE_DELETE_PERSON_SUCCESS, deletedPerson); assertCommandSuccess( diff --git a/src/test/java/systemtests/EditCommandSystemTest.java b/src/test/java/systemtests/EditCommandSystemTest.java index 71796d3fa19a..820933203dd9 100644 --- a/src/test/java/systemtests/EditCommandSystemTest.java +++ b/src/test/java/systemtests/EditCommandSystemTest.java @@ -43,7 +43,6 @@ import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; -import seedu.address.model.person.ReadOnlyPerson; import seedu.address.model.person.exceptions.DuplicatePersonException; import seedu.address.model.person.exceptions.PersonNotFoundException; import seedu.address.model.tag.Tag; @@ -88,7 +87,7 @@ public void edit() throws Exception { /* Case: edit some fields -> edited */ index = INDEX_FIRST_PERSON; command = EditCommand.COMMAND_WORD + " " + index.getOneBased() + TAG_DESC_FRIEND; - ReadOnlyPerson personToEdit = getModel().getFilteredPersonList().get(index.getZeroBased()); + Person personToEdit = getModel().getFilteredPersonList().get(index.getZeroBased()); editedPerson = new PersonBuilder(personToEdit).withTags(VALID_TAG_FRIEND).build(); assertCommandSuccess(command, index, editedPerson); @@ -190,12 +189,12 @@ public void edit() throws Exception { } /** - * Performs the same verification as {@code assertCommandSuccess(String, Index, ReadOnlyPerson, Index)} except that + * Performs the same verification as {@code assertCommandSuccess(String, Index, Person, Index)} except that * the browser url and selected card remain unchanged. * @param toEdit the index of the current model's filtered list - * @see EditCommandSystemTest#assertCommandSuccess(String, Index, ReadOnlyPerson, Index) + * @see EditCommandSystemTest#assertCommandSuccess(String, Index, Person, Index) */ - private void assertCommandSuccess(String command, Index toEdit, ReadOnlyPerson editedPerson) { + private void assertCommandSuccess(String command, Index toEdit, Person editedPerson) { assertCommandSuccess(command, toEdit, editedPerson, null); } @@ -207,7 +206,7 @@ private void assertCommandSuccess(String command, Index toEdit, ReadOnlyPerson e * @param toEdit the index of the current model's filtered list. * @see EditCommandSystemTest#assertCommandSuccess(String, Model, String, Index) */ - private void assertCommandSuccess(String command, Index toEdit, ReadOnlyPerson editedPerson, + private void assertCommandSuccess(String command, Index toEdit, Person editedPerson, Index expectedSelectedCardIndex) { Model expectedModel = getModel(); try { diff --git a/src/test/java/systemtests/ModelHelper.java b/src/test/java/systemtests/ModelHelper.java index 4d82b1a33058..b7950598d36b 100644 --- a/src/test/java/systemtests/ModelHelper.java +++ b/src/test/java/systemtests/ModelHelper.java @@ -6,19 +6,19 @@ import java.util.function.Predicate; import seedu.address.model.Model; -import seedu.address.model.person.ReadOnlyPerson; +import seedu.address.model.person.Person; /** * Contains helper methods to set up {@code Model} for testing. */ public class ModelHelper { - private static final Predicate PREDICATE_MATCHING_NO_PERSONS = unused -> false; + private static final Predicate PREDICATE_MATCHING_NO_PERSONS = unused -> false; /** * Updates {@code model}'s filtered list to display only {@code toDisplay}. */ - public static void setFilteredList(Model model, List toDisplay) { - Optional> predicate = + public static void setFilteredList(Model model, List toDisplay) { + Optional> predicate = toDisplay.stream().map(ModelHelper::getPredicateMatching).reduce(Predicate::or); model.updateFilteredPersonList(predicate.orElse(PREDICATE_MATCHING_NO_PERSONS)); } @@ -26,14 +26,14 @@ public static void setFilteredList(Model model, List toDisplay) /** * @see ModelHelper#setFilteredList(Model, List) */ - public static void setFilteredList(Model model, ReadOnlyPerson... toDisplay) { + public static void setFilteredList(Model model, Person... toDisplay) { setFilteredList(model, Arrays.asList(toDisplay)); } /** - * Returns a predicate that evaluates to true if this {@code ReadOnlyPerson} equals to {@code other}. + * Returns a predicate that evaluates to true if this {@code Person} equals to {@code other}. */ - private static Predicate getPredicateMatching(ReadOnlyPerson other) { + private static Predicate getPredicateMatching(Person other) { return person -> person.equals(other); } }