Project: NeoXPro Manager

NeoXPro 4 is a desktop address book application extends from an existing stock application which was used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

Code contributed: [Functional code] [Test code]

Locating persons by tags: findTag (since v1.1)

Finds persons whose tags include all of the given keywords.
Format: findTag KEYWORD [MORE_KEYWORDS]

  • The search is case sensitive. e.g cs2103t will not match CS2103T

  • The order of the keywords does not matter.

  • Only the tag is searched.

  • Only full words will be matched e.g. cs210 will not match cs2101

  • Only persons matching at all keywords will be returned (i.e. AND search). e.g. e.g. friend cs2103t will match all contacts that have both friend and cs2103t tags

Examples:

  • findTag friend
    Returns any person with a friend tag

  • findTag CS2103T friend
    Returns all persons with both friend and CS2103T tag.

End of Extract


Justification

The address book had tags for each contact, however there was no way to search for contact with certain tags.

Implementation


Start of Extract [from: Developer Guide]

FindTag Command

The findTag command utilize the same implementation as the Find command for name. Instead of logic execute search via Name attribute of Person, the command search in the TagList attribute.

Tag component in model already had API methods for searching, which is similar to Name which allows extracting value of the object. The search algorithm utilize a class TagContainsKeywordsPredicate implements Predicate<ReadOnlyPerson> which allows the algorithm to use Java Predicate class method.

End of Extract


Enhancement Added: Locate a person

External behavior


Start of Extract [from: User Guide]

Locating a person’s address : locate (since v1.3)

Locate the person’s address identified by the index number used in the last person listing.
Format: locate INDEX

  • Loads the Google map page of the person’s address at the specified INDEX.

  • The index refers to the index number shown in the most recent listing.

  • The index must be a positive integer 1, 2, 3, …​

Examples:

  • list
    locate 2
    Locates the 2nd person’s address in the address book.

  • find Betsy
    locate 1
    Locates the 1st person in the results of the find command.

End of Extract


Justification

May help the user finding the contact address quickly and perhaps direction if the user want to go there.

Implementation

Similar to select command but load a google map page instead.

Enhancement Added: Event functionality

External behavior


Start of Extract [from: User Guide]

Adding an event: addEvent (since v1.2)

Adds a person to the address book
Format: addEvent n/EVENT_NAME d/DD-MM-YY de/[EXTRA]

The event extra description is optional, can use as a to-do list.
The event date is yyyy-mm-dd format.

Examples:

  • addEvent n/Return John 5 bucks d/2017-12-17 de/lunch money
    Add a new event with description.

  • addEvent n/Project Meeting d/2017-11-25 de/
    Add a new event with empty description.

Deleting an event : deleteEvent (since v1.4)

Deletes the specified event from the address book.
Format: deleteEvent INDEX

  • Deletes the event at the specified INDEX.

  • The index refers to the index number shown in the most recent listing.

  • The index must be a positive integer 1, 2, 3, …​

Examples:

  • deleteEvent 2
    Deletes the 2nd listed event in the address book.

Auto-reminder (since v1.5)

NeoXPro Manager will remind the user events occur on the day when when starting the application.

End of Extract


Justification

The application is also meant to be a task manager. Thus there is a need to implement task/event functionality.

Implementation


Start of Extract [from: Developer Guide]

(Task) event management

The model for task event is implemented similar to person class.

EventModelClassDiagram

The EventList is then linked up to the AddressBook which is monitored by ModelManager to reflect any change to the Addressbook model. The Ui components EventCard and EventListPanel are also hooked up to the model and reflect any changes made to filterEvents.

Event auto-reminder

When the UiManager component got initialized at the start of the application, a new ShowReminderRequestEvent gets posted. This is then handle by the MainWindow which initialized one or more ReminderWindow from the upcomingEvents in the model.

End of Extract


Enhancement Added: Change application css theme

Justification

Original DarkTheme color looked dull and uninspired for a user end product.

Other contributions

  • Modified add command to accept partial string.

  • Updated the GUI part to display events.

  • Managed the team repository and progress as team lead.

  • Checked pull requests code quality. Resolved conflict and fix bugs from pull requests of other members.

  • Fixed all checkstyle errors of every team member.

  • Add tests to increase coverage by 5% (Pull requests #81, #82, #84, #85, #92)