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

Adds a panel for displaying notes #121

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions src/main/java/seedu/address/logic/Logic.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import seedu.address.logic.commands.exceptions.CommandException;
import seedu.address.logic.parser.exceptions.ParseException;
import seedu.address.model.ReadOnlyAddressBook;
import seedu.address.model.person.Note;
import seedu.address.model.person.Person;

/**
Expand All @@ -33,6 +34,8 @@ public interface Logic {
/** Returns an unmodifiable view of the filtered list of persons */
ObservableList<Person> getFilteredPersonList();

Note getDisplayedNote();

/**
* Returns the user prefs' address book file path.
*/
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/seedu/address/logic/LogicManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import seedu.address.logic.parser.exceptions.ParseException;
import seedu.address.model.Model;
import seedu.address.model.ReadOnlyAddressBook;
import seedu.address.model.person.Note;
import seedu.address.model.person.Person;
import seedu.address.storage.Storage;

Expand Down Expand Up @@ -71,6 +72,11 @@
return model.getFilteredPersonList();
}

@Override
public Note getDisplayedNote() {
return model.getDisplayNote();

Check warning on line 77 in src/main/java/seedu/address/logic/LogicManager.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/seedu/address/logic/LogicManager.java#L77

Added line #L77 was not covered by tests
}

@Override
public Path getAddressBookFilePath() {
return model.getAddressBookFilePath();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public FindCommand(IdentityCardNumberMatchesPredicate predicate) {
public CommandResult execute(Model model) {
requireNonNull(model);
model.updateFilteredPersonList(predicate);
model.setDisplayNoteAsFirstFilteredPerson();
return new CommandResult(
String.format(Messages.MESSAGE_PERSONS_LISTED_OVERVIEW, model.getFilteredPersonList().size()));
}
Expand Down
27 changes: 27 additions & 0 deletions src/main/java/seedu/address/model/AddressBook.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
import static java.util.Objects.requireNonNull;

import java.util.List;
import java.util.Optional;

import javafx.collections.ObservableList;
import seedu.address.commons.util.ToStringBuilder;
import seedu.address.model.person.Note;
import seedu.address.model.person.Person;
import seedu.address.model.person.UniquePersonList;

Expand All @@ -28,6 +30,8 @@ public class AddressBook implements ReadOnlyAddressBook {
persons = new UniquePersonList();
}

private Optional<Note> displayNote = Optional.empty();

public AddressBook() {}

/**
Expand Down Expand Up @@ -94,6 +98,29 @@ public void removePerson(Person key) {
persons.remove(key);
}

/**
* Get the display note.
*/
public Note getDisplayNote() {
return displayNote.orElse(Note.DEFAULT);
}

/**
* Sets the display note to the given note.
* @param note The note to be displayed.
*/
public void setDisplayNote(Note note) {
this.displayNote = Optional.of(note);
}

/**
* Clears the display note.
*/
public void clearDisplayNote() {
this.displayNote = Optional.empty();
}


//// util methods

@Override
Expand Down
21 changes: 21 additions & 0 deletions src/main/java/seedu/address/model/Model.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import javafx.collections.ObservableList;
import seedu.address.commons.core.GuiSettings;
import seedu.address.model.person.Note;
import seedu.address.model.person.Person;

/**
Expand Down Expand Up @@ -84,4 +85,24 @@ public interface Model {
* @throws NullPointerException if {@code predicate} is null.
*/
void updateFilteredPersonList(Predicate<Person> predicate);

Note getDisplayNote();

void setDisplayNote(Person person);

/**
* Replaces the note that is displayed in the note panel.
*/
void setDisplayNote(Note note);

/**
* Sets the display note to the first filtered person.
* If there is no filtered person, displayed note is unchanged.
*/
void setDisplayNoteAsFirstFilteredPerson();

/**
* Clears the note panel display.
*/
void clearDisplayNote();
}
43 changes: 43 additions & 0 deletions src/main/java/seedu/address/model/ModelManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import javafx.collections.transformation.FilteredList;
import seedu.address.commons.core.GuiSettings;
import seedu.address.commons.core.LogsCenter;
import seedu.address.model.person.Note;
import seedu.address.model.person.Person;

/**
Expand Down Expand Up @@ -128,6 +129,48 @@
filteredPersons.setPredicate(predicate);
}

//=========== Note Panel ================================================================================

@Override
public Note getDisplayNote() {
return addressBook.getDisplayNote();
}

@Override
public void setDisplayNote(Note note) {
requireNonNull(note);
addressBook.setDisplayNote(note);
}

@Override
public void setDisplayNote(Person person) {
requireNonNull(person);
Note displayNote = person.getNote();
setDisplayNote(displayNote);
}

/**
* Sets the display note to the first filtered person.
* If there is no filtered person, displayed note is unchanged.
*/
@Override
public void setDisplayNoteAsFirstFilteredPerson() {
if (filteredPersons.isEmpty()) {
logger.warning("No person to display note for.");
return;

Check warning on line 160 in src/main/java/seedu/address/model/ModelManager.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/seedu/address/model/ModelManager.java#L159-L160

Added lines #L159 - L160 were not covered by tests
}
Person person = filteredPersons.get(0);
setDisplayNote(person);
}

/**
* Clears the note panel display.
*/
@Override
public void clearDisplayNote() {
addressBook.clearDisplayNote();
}

@Override
public boolean equals(Object other) {
if (other == this) {
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/seedu/address/ui/MainWindow.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
// Independent Ui parts residing in this Ui container
private PersonListPanel personListPanel;
private ResultDisplay resultDisplay;
private NoteDisplay noteDisplay;
private HelpWindow helpWindow;

@FXML
Expand All @@ -50,6 +51,9 @@
@FXML
private StackPane statusbarPlaceholder;

@FXML
private StackPane patientDetailsPlaceholder;

/**
* Creates a {@code MainWindow} with the given {@code Stage} and {@code Logic}.
*/
Expand Down Expand Up @@ -116,6 +120,10 @@
resultDisplay = new ResultDisplay();
resultDisplayPlaceholder.getChildren().add(resultDisplay.getRoot());

noteDisplay = new NoteDisplay();
patientDetailsPlaceholder.getChildren().add(noteDisplay.getRoot());
noteDisplay.setNoteToUser(logic.getDisplayedNote().value);

Check warning on line 125 in src/main/java/seedu/address/ui/MainWindow.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/seedu/address/ui/MainWindow.java#L123-L125

Added lines #L123 - L125 were not covered by tests

StatusBarFooter statusBarFooter = new StatusBarFooter(logic.getAddressBookFilePath());
statusbarPlaceholder.getChildren().add(statusBarFooter.getRoot());

Expand Down Expand Up @@ -177,6 +185,7 @@
CommandResult commandResult = logic.execute(commandText);
logger.info("Result: " + commandResult.getFeedbackToUser());
resultDisplay.setFeedbackToUser(commandResult.getFeedbackToUser());
noteDisplay.setNoteToUser(logic.getDisplayedNote().value);

Check warning on line 188 in src/main/java/seedu/address/ui/MainWindow.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/seedu/address/ui/MainWindow.java#L188

Added line #L188 was not covered by tests

if (commandResult.isShowHelp()) {
handleHelp();
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/seedu/address/ui/NoteDisplay.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package seedu.address.ui;

import javafx.fxml.FXML;
import javafx.scene.control.TextArea;
import javafx.scene.layout.Region;


/**
* A ui for the patient note that is displayed.
*/
public class NoteDisplay extends UiPart<Region> {

private static final String FXML = "NoteDisplay.fxml";

@FXML
private TextArea noteDisplay;

public NoteDisplay() {
super(FXML);
}

Check warning on line 20 in src/main/java/seedu/address/ui/NoteDisplay.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/seedu/address/ui/NoteDisplay.java#L19-L20

Added lines #L19 - L20 were not covered by tests

public void setNoteToUser(String noteToUser) {
noteDisplay.setText(noteToUser);
}

Check warning on line 24 in src/main/java/seedu/address/ui/NoteDisplay.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/seedu/address/ui/NoteDisplay.java#L23-L24

Added lines #L23 - L24 were not covered by tests
}
5 changes: 3 additions & 2 deletions src/main/resources/view/MainWindow.fxml
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,9 @@
</VBox>

<StackPane fx:id="patientDetails" styleClass="pane-with-border" VBox.vgrow="ALWAYS">
<VBox alignment="CENTER">
</VBox>
<!-- <VBox alignment="CENTER">-->
<!-- </VBox>-->
<StackPane fx:id="patientDetailsPlaceholder" VBox.vgrow="ALWAYS"/>
</StackPane>
</SplitPane>

Expand Down
9 changes: 9 additions & 0 deletions src/main/resources/view/NoteDisplay.fxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.StackPane?>

<StackPane fx:id="placeHolder" styleClass="pane-with-border" xmlns="http://javafx.com/javafx/17"
xmlns:fx="http://javafx.com/fxml/1">
<TextArea fx:id="noteDisplay" editable="false"/>
</StackPane>
26 changes: 26 additions & 0 deletions src/test/java/seedu/address/logic/commands/AddCommandTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import seedu.address.model.Model;
import seedu.address.model.ReadOnlyAddressBook;
import seedu.address.model.ReadOnlyUserPrefs;
import seedu.address.model.person.Note;
import seedu.address.model.person.Person;
import seedu.address.testutil.PersonBuilder;

Expand Down Expand Up @@ -165,6 +166,31 @@ public ObservableList<Person> getFilteredPersonList() {
public void updateFilteredPersonList(Predicate<Person> predicate) {
throw new AssertionError("This method should not be called.");
}

@Override
public Note getDisplayNote() {
throw new AssertionError("This method should not be called.");
}

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

@Override
public void setDisplayNote(Note note) {
throw new AssertionError("This method should not be called.");
}

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

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

/**
Expand Down
35 changes: 35 additions & 0 deletions src/test/java/seedu/address/model/ModelManagerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import seedu.address.commons.core.GuiSettings;
import seedu.address.model.person.NameContainsKeywordsPredicate;
import seedu.address.model.person.Note;
import seedu.address.testutil.AddressBookBuilder;

public class ModelManagerTest {
Expand Down Expand Up @@ -88,6 +89,40 @@ public void hasPerson_personInAddressBook_returnsTrue() {
assertTrue(modelManager.hasPerson(ALICE));
}

@Test
public void setDisplayedNote_validPerson_setsDisplayedNote() {
modelManager.setDisplayNote(ALICE);
assertEquals(ALICE.getNote(), modelManager.getDisplayNote());
}

@Test
public void setDisplayedNote_firstPerson_setsDisplayedNote() {
modelManager.addPerson(ALICE);
modelManager.addPerson(BENSON);
modelManager.setDisplayNoteAsFirstFilteredPerson();
assertEquals(ALICE.getNote(), modelManager.getDisplayNote());
}

@Test
public void setDisplayedNote_validNote_setsDisplayedNote() {
Note note = Note.DEFAULT;
modelManager.setDisplayNote(note);
assertEquals(note, modelManager.getDisplayNote());
}

@Test
public void setDisplayedNote_nullNote_throwsNullPointerException() {
Note note = null;
assertThrows(NullPointerException.class, () -> modelManager.setDisplayNote(note));
}

@Test
public void clearDisplayedNote_validNote_clearsDisplayedNote() {
modelManager.setDisplayNote(ALICE);
modelManager.clearDisplayNote();
assertEquals(Note.DEFAULT, modelManager.getDisplayNote());
}

@Test
public void getFilteredPersonList_modifyList_throwsUnsupportedOperationException() {
assertThrows(UnsupportedOperationException.class, () -> modelManager.getFilteredPersonList().remove(0));
Expand Down
Loading