Developer Guide
- Acknowledgements
- Setting up, getting started
- Design
- Implementation
- Documentation, logging, testing, configuration, dev-ops
- Appendix: Requirements
-
Appendix: Instructions for manual testing
- Launch and shutdown
- Viewing Help
- Adding a volunteer
- Viewing the list of volunteers
- Find a volunteers by his/her name or availability.
- Removing a volunteer
- Editing a volunteer’s details
- Adding availability to a volunteer
- Removing an availability from a volunteer.
- Refresh the application
- Assign a volunteer
- View list of assignments
- Remove assignments
- Clear all data
- Copy emails of the person list.
- Export data
- Saving data
- Appendix: Planned Enhancements
- Appendix: Effort
Acknowledgements
- The ListPanelView enum in our
CommandResult.java
is inspired from https://github.com/AY2324S1-CS2103T-W08-4/tp to implement switching views to assignment. Handling list panel view inMainWindow.java
is also reused with modifications from the same source.
Setting up, getting started
Refer to the guide Setting up and getting started.
Design
.puml
files used to create diagrams in this document docs/diagrams
folder. Refer to the PlantUML Tutorial at se-edu/guides to learn how to create and edit diagrams.
Architecture
The Architecture Diagram given above explains the high-level design of the App.
Given below is a quick overview of main components and how they interact with each other.
Main components of the architecture
Main
(consisting of classes Main
and MainApp
) is in charge of the app launch and shut down.
- At app launch, it initializes the other components in the correct sequence, and connects them up with each other.
- At shut down, it shuts down the other components and invokes cleanup methods where necessary.
The bulk of the app’s work is done by the following four components:
-
UI
: The UI of the App. -
Logic
: The command executor. -
Model
: Holds the data of the App in memory. -
Storage
: Reads data from, and writes data to, the hard disk.
Commons
represents a collection of classes used by multiple other components.
How the architecture components interact with each other
The Sequence Diagram below shows how the components interact with each other for the scenario where the user issues the command delete 1
.
Each of the four main components (also shown in the diagram above),
- defines its API in an
interface
with the same name as the Component. - implements its functionality using a concrete
{Component Name}Manager
class (which follows the corresponding APIinterface
mentioned in the previous point.
For example, the Logic
component defines its API in the Logic.java
interface and implements its functionality using the LogicManager.java
class which follows the Logic
interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component’s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.
The sections below give more details of each component.
UI component
The API of this component is specified in Ui.java
The UI consists of a MainWindow
that is made up of parts e.g.CommandBox
, ResultDisplay
, PersonListPanel
, StatusBarFooter
etc. All these, including the MainWindow
, inherit from the abstract UiPart
class which captures the commonalities between classes that represent parts of the visible GUI.
The UI
component uses the JavaFx UI framework. The layout of these UI parts are defined in matching .fxml
files that are in the src/main/resources/view
folder. For example, the layout of the MainWindow
is specified in MainWindow.fxml
The UI
component,
- executes user commands using the
Logic
component. - listens for changes to
Model
data so that the UI can be updated with the modified data. - keeps a reference to the
Logic
component, because theUI
relies on theLogic
to execute commands. - depends on some classes in the
Model
component, as it displaysPerson
object residing in theModel
.
Logic component
API : Logic.java
Here’s a (partial) class diagram of the Logic
component:
The sequence diagram below illustrates the interactions within the Logic
component, taking execute("delete 1")
API call as an example.
DeleteCommandParser
should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram. Also, confirmation feature is omitted from this sequence diagram for simplification.
How the Logic
component works:
- When
Logic
is called upon to execute a command, it is passed to anAddressBookParser
object which in turn creates a parser that matches the command (e.g.,DeleteCommandParser
) and uses it to parse the command. - This results in a
Command
object (more precisely, an object of one of its subclasses e.g.,DeleteCommand
) which is executed by theLogicManager
. - The command can communicate with the
Model
when it is executed (e.g. to delete a person).
Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and theModel
) to achieve. - The result of the command execution is encapsulated as a
CommandResult
object which is returned back fromLogic
.
Here are the other classes in Logic
(omitted from the class diagram above) that are used for parsing a user command:
How the parsing works:
- When called upon to parse a user command, the
AddressBookParser
class creates anXYZCommandParser
(XYZ
is a placeholder for the specific command name e.g.,AddCommandParser
) which uses the other classes shown above to parse the user command and create aXYZCommand
object (e.g.,AddCommand
) which theAddressBookParser
returns back as aCommand
object. - All
XYZCommandParser
classes (e.g.,AddCommandParser
,DeleteCommandParser
, …) inherit from theParser
interface so that they can be treated similarly where possible e.g, during testing.
Model component
API : Model.java
The Model
component,
- stores the address book data i.e., all
Person
objects (which are contained in aUniquePersonList
object). - stores the currently ‘selected’
Person
objects (e.g., results of a search query) as a separate filtered list which is exposed to outsiders as an unmodifiableObservableList<Person>
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. - stores a
UserPref
object that represents the user’s preferences. This is exposed to the outside as aReadOnlyUserPref
objects. - does not depend on any of the other three components (as the
Model
represents data entities of the domain, they should make sense on their own without depending on other components)
Person Component
API : Person.java
The Person
component stores the data of a volunteer which are:
-
Name
which is compulsory -
Phone
which is compulsory -
Email
which is compulsory -
Availability
which is optional -
Tag
which is optional
Assignment component
API : Assignment.java
The Assignment
component contains the information of the assignment:
-
Person
which refers to the person assigned and is compulsory -
Availability
which refers to the date assigned and is compulsory -
AssignmentDetails
which contains the details of the assignment and is compulsory
Storage component
API : Storage.java
The Storage
component,
- can save both address book data and user preference data in JSON format, and read them back into corresponding objects.
- inherits from both
AddressBookStorage
andUserPrefStorage
, which means it can be treated as either one (if only the functionality of only one is needed). - depends on some classes in the
Model
component (because theStorage
component’s job is to save/retrieve objects that belong to theModel
)
Common classes
Classes used by multiple components are in the seedu.address.commons
package.
Implementation
This section describes some noteworthy details on how certain features are implemented.
Add volunteer feature
This feature allows the user to add a volunteer to the database and manage them.
-
The user launches the application.
-
The user executes
add n/John Doe p/12345678 e/john@example.com
to add John Doe to Match. -
Logic Manager
will callAddressBookParser#parseCommand(input)
to extract the parameters and pass it toAddCommandParser
-
The
AddressBookParser
will callAddCommandParser#parse(arguments)
to create aAddCommand
which will be executed by theLogic Manager
. -
During the execution of
AddCommand
, a new Person is created and added to the model. -
A
CommandResult
is produced based on the status of the execution;success or not which will be returned to theLogic Manager
.
Find volunteer feature
This feature allows the user to filter through the volunteer list based on names and availabilities.
-
The user launches the application.
-
The user executes
find n/alex
to find all users with the name alex inside. -
Logic Manager
will callAddressBookParser#parseCommand(input)
to extract the parameters and pass it toFindCommandParser
-
The
AddressBookParser
will callFindCommandParser#parse(arguments)
to create aFindCommand
which will be executed by theLogic Manager
. -
During the execution of
FindCommand
, it will callModel#updateFilterPersonList(predicate)
to update the person list to only show people with the name alex in it. -
A
CommandResult
is produced based on the status of the execution;success or not which will be returned to theLogic Manager
.
Assign volunteer feature
This feature allows the user to assign a volunteer to an volunteering activity.
-
The user launches the application.
-
The user executes
assign 1 d/Willing Hearts a/01/03/2024
to assign the volunteer at index 1. -
Logic Manager
will then callAddressBookParser#parseCommand(input)
to parse the input and pass it toAddAssignmentCommandParser
. -
AddAssignmentCommandParser
will check for validAssignmentDetails
,Availability
andAssignedPerson
. -
Then, it creates a
AddAssignmentCommand
object which will be executed. -
During execution, it will check whether a volunteer is available on that day, and if he/she already has an existing assignment on that day.
-
It will then finally check for any duplicate assignments.
-
After all these checks, the
Assignment
is then created and added to the application.
Copy emails to Clipboard feature
This feature allows a user to first filter the list using the find command (eg. specific names or availabilities), before copying all the emails to the clipboard (seperated by commas), so that they can be easily contacted.
Given below is an example usage scenario and how the copy mechanism behaves at each step.
-
The user launches the application for the first time.
-
The user executes
find a/26/09/2009
command to find the people available on 26/09/2009 -
The user executes
copy
command, copying all emails into clipboard.
The following sequence diagram shows how a copy operation goes through the Logic component:
Exporting to CSV
The proposed exporting mechanism allows a user to export to a more popular and human-readable format. Comma-separated values (CSV) are widely used for data exchange and also for analytics.
Given below is an example usage scenario and how the exporting mechanism behaves at each step.
-
The user launches the application for the first time.
-
The user executes an arbitrary command to have
addressbook.json
file created. -
The user executes
export
command, exporting people intopersons.csv
and volunteering assignments intoassignments.csv
file stored in[JAR file location]/data
.
The following sequence diagram shows how an export operation goes through the Logic component:
Documentation, logging, testing, configuration, dev-ops
Appendix: Requirements
Product scope
Target User Profile:
- Bob is the coordinator of a volunteer befriending organization.
- He can type fast due to his 20 years of experience working in an office job.
- He has carpal tunnel and would appreciate tools to reduce typing.
- His day-to-day job involves matching volunteers and beneficiaries based on availability.
- He is forgetful and often forgets the assignments he has made.
- He has bad eyesight and cannot see small or low-contrast texts.
Value Proposition:
Match streamlines volunteer management, facilitating efficient scheduling and coordination of volunteers, ultimately saving time and resources for organizations focused on social impact. It helps Bob efficiently manage a diverse group of volunteers by tracking their availability.
User Stories:
Priority: High (must have) - ***
, Medium (nice to have) - **
, Low (unlikely to have) - *
Priority | As a … | I want to … | So that I can… |
---|---|---|---|
* |
new user | see usage instructions | refer to instructions when I forget how to use the App |
*** |
coordinator | add a new volunteer | keep track of all volunteers in the organization |
*** |
coordinator | view a volunteer’s details | match volunteers with beneficiaries based on their availability, skills, and interests |
*** |
coordinator | update a volunteer’s information | keep volunteer information up-to-date |
*** |
coordinator | delete a volunteer | remove volunteers who are no longer with the organization |
*** |
coordinator | find volunteers by name | quickly locate a specific volunteer’s information |
** |
coordinator | view a list of all volunteers | have an overview of all registered volunteers |
** |
coordinator | find volunteers by availability | match volunteers with beneficiaries based on their availability |
** |
coordinator | assign volunteers to a task | match volunteers |
* |
coordinator | use a GUI with large fonts and high contrast | easily view information with my bad eyesight |
* |
coordinator | use keyboard shortcuts | reduce typing due to my carpal tunnel |
Use Cases:
UC01: Add a Volunteer
Actor: Coordinator (Bob)
Precondition: User has launched the application and is on the main screen.
Main Success Scenario:
- User requests to add a new volunteer.
- User is required to enter the volunteer’s name, phone number and email.
- User enters the required information in the correct format.
- The system validates the input and displays a confirmation message: “Volunteer [volunteer_name] has been added successfully.”
Use Case ends.
Extensions:
- 3a. The User enters invalid data for any of the fields.
- 3a1. The system displays an error message indicating the nature of the error (e.g., “[Parameter] is invalid,” “[Parameter] is missing,” “[Parameter] is specified multiple times”).
- Use Case ends.
UC02: Find a Volunteer’s Information
Actor: Coordinator (Bob)
Precondition: User has launched the application and is on the main screen.
Main Success Scenario:
- User requests to find a volunteer via name or availability
- The system displays all volunteers whose names contain the entered keywords.
Use Case ends.
Extensions:
- 2a. User enters an invalid command.
- 1a1. Match shows an error message
- Use case ends.
- 2b. There are no volunteers in the address book.
- 1b1. The system displays a message: “There are no volunteers in the address book.”
- Use case ends.
UC03: View Entire List of Volunteers
Actor: Coordinator (Bob)
Precondition: User has launched the application and is on the main screen.
Main Success Scenario:
- User requests to view all volunteers
- The system displays the entire list of volunteers, along with their details, in the GUI.
Use case ends.
Extensions:
- 2a. There are no volunteers in the address book.
- 2a1. The system displays a message: “There are no volunteers in the address book.”
- Use case ends.
UC04: Remove a volunteer
Actor: Coordinator (Bob)
Precondition: Coordinator has launched the application and is on the main screen. There is also at least 1 volunteer in the app.
Main Success Scenario:
- User requests to remove a volunteer from Match
- Match asks for confirmation.
- User confirms deletion.
- The system displays a success message and removed the volunteer from the app.
Use Case ends.
Extensions:
- 3a. User cancels deletion
- 3a1. The system acknowledges the cancellation and does nothing.
- Use case ends.
- 4a. User enters an invalid volunteer.
- 4a1. Match shows an error message
- Use case ends.
UC05: Edit a volunteer’s details
Actor: Coordinator (Bob)
Precondition: Coordinator has launched the application and is on the main screen. There is also at least 1 volunteer in the app.
Main Success Scenario:
- User requests to edit a volunteer’s details.
- The system displays a success message and updates the volunteer’s details.
Use Case ends.
Extensions:
- 2a. User enters an invalid volunteer.
- 2a1. Match shows an error message.
- Use case ends.
- 2b. User enters invalid details.
- 2b1. Match shows an error message.
- Use case ends.
UC06: Add availability
Actor: Coordinator (Bob)
Precondition: User has launched the application and is on the main screen. There is also at least 1 volunteer in the app.
Main Success Scenario:
- User requests to add an availability to an existing volunteer.
- The system displays a success message and updates the volunteer’s availability.
Use Case ends.
Extensions:
- 2a. User enters an invalid volunteer.
- 2a1. Match shows an error message.
- Use case ends.
- 2b. User enters invalid availability.
- 2b1. Match shows an error message.
- Use case ends.
UC07: Remove availability
Actor: Coordinator (Bob)
Precondition: User has launched the application and is on the main screen. There is also at least 1 volunteer in the app.
Main Success Scenario:
- User requests to remove an availability from an existing volunteer.
- The system displays a success message and updates the volunteer’s availability.
Use Case ends.
Extensions:
- 2a. User enters an invalid volunteer.
- 2a1. Match shows an error message.
- Use case ends.
- 2b. User enters invalid availability.
- 2b1. Match shows an error message.
- Use case ends.
- 2c. User enters a valid availability but volunteer does not have that availability.
- 2c1. Match shows an error message.
- Use case ends.
UC08: Assign a volunteer to an activity
Actor: Coordinator (Bob)
Precondition: User has launched the application and is on the main screen. There is also at least 1 volunteer with at least 1 availability in the app.
Main Success Scenario:
- User assigns a volunteer to an activity on a date.
- User enters the details of the assignment and availability
- The system displays a success message and creates an assignment with that volunteer.
Use Case ends.
Extensions:
- 3a. User enters an invalid volunteer.
- 3a1. Match shows an error message.
- Use case ends.
- 3b. User enters invalid availability.
- 3b1. Match shows an error message.
- Use case ends.
- 3c. User enters a valid availability but volunteer is not available.
- 3c1. Match shows an error message.
- Use case ends.
- 3d. User enters invalid details
- 3d1. Match shows an error message.
- Use case ends.
UC09: View the list of assignments
Actor: Coordinator (Bob)
Precondition: User has launched the application and is on the main screen. There is also at least one assignment.
Main Success Scenario:
- User requests to view the list of assignments
- The system displays a success message and shows the list of assignments.
Use Case ends.
UC10: Delete assignments
Actor: Coordinator (Bob)
Precondition: User has launched the application and is on the main screen. There is also at least 1 volunteer in the app.
Main Success Scenario:
- User requests to delete an assignment
- The system displays a success message and updates the assignment list.
Use Case ends.
Extensions:
- 2a. User enters an invalid assignment.
- 2a1. Match shows an error message.
- Use case ends.
UC11: Reset all data
Actor: Coordinator (Bob)
Precondition: User has launched the application and is on the main screen.
Main Success Scenario:
- User requests to clear all data entry in the system
- The system displays a success message and updates the lists.
Use Case ends.
UC12: Remove all availabilities before today
Actor: Coordinator (Bob)
Precondition: User has launched the application and is on the main screen.
Main Success Scenario:
- User requests to clear all availabilities before today.
- The system displays a success message and updates all the persons and assignments accordingly.
Use Case ends.
UC13: Copy all emails of the current volunteer list
Actor: Coordinator (Bob)
Precondition: User has launched the application and is on the main screen.
Main Success Scenario:
- User requests to copy all emails.
- The system displays a success message and emails are copied to user’s clipboard.
Use Case ends.
UC14: Export data to csv file
Actor: Coordinator (Bob)
Precondition: User has launched the application and is on the main screen.
Main Success Scenario:
- User requests to export all data.
- The system displays a success message and the data is exported to a csv file.
Use Case ends.
Extensions:
- 2a. Addressbook.json file does not exist
- 2a1. Match shows an error message.
- Use case ends.
Non-Functional Requirements
- Should work on any mainstream OS as long as it has Java
11
or above installed. - Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.
- A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.
- Should be able to run the application without internet connection.
Glossary
- Mainstream OS: Windows, Linux, Unix, MacOS
- Private contact detail: A contact detail that is not meant to be shared with others
- Volunteer: An individual who offers their time and services for various activities or tasks.
- Coordinator: An employee who manages volunteers and assignments in a volunteer organisation.
- Availability: Refers to the days during which a volunteer is available to participate in activities.
- AssignmentDetails: Information related to a specific assignment, such as the task description or location.
- UI: Abbreviation for User Interface, the visual interface through which users interact with the application.
- API: Abbreviation for Application Programming Interface, which defines the interactions between different components of the application.
- CSV: Abbreviation for Comma-Separated Values, a file format used for storing tabular data.
Appendix: Instructions for manual testing
Given below are instructions to test the app manually.
Launch and shutdown
-
Initial launch
- Download the jar file and copy into an empty folder
-
Launch Match by running the jar file in your terminal. (java -jar Match.jar)
Expected: Shows the GUI with a set of sample volunteers. The window size may not be optimum.
-
Saving window preferences
-
Resize the window to an optimum size. Move the window to a different location. Close the window.
-
Re-launch the app by double-clicking the jar file.
Expected: The most recent window size and location is retained.
-
-
Exit Application
-
While in Match, type
exit
in the command box and enter.Expected: The application will now close.
-
Viewing Help
-
While in Match, click on the
Help
button and pressHelp
. Then press onCopy URL
.Expected: This will copy the link to our UserGuide to your clipboard. Simply paste the link into any browser and view our UserGuide.
Adding a volunteer
- Add a new volunteer
-
Test Case:
add n/John Doe p/12345678 e/john@example.com
Expected: Volunteer with the name “John Doe”, phone number “12345678”, email “john@example.com” is added
-
Test Case:
add n/John Doe p/12345678 e/john@example.com a/01/03/2024
Expected: Same as previous but now with an availability of 01/03/2024.
-
Test Case:
add n/John Doe p/12345678 e/john@example.com t/Teaching
Expected: Same as test case 1 but with the extra tag of “Teaching”.
-
Test Case:
add [any duplicated name, phone, email]
Expected: Error thrown, stating no duplicate names, phones, emails are allowed.
-
Viewing the list of volunteers
- List all volunteers
-
Test Case:
list
Expected: The list of all volunteers are shown
-
Test Case:
list [any extra keywords]
Expected: Same as previous testcase.
-
Find a volunteers by his/her name or availability.
- Filters through the list based on the search criteria
-
Test Case:
find n/Alex
Expected: A list of volunteers showing all volunteers with “Alex” in their names.
-
Test Case:
find a/01/03/2024
Expected: A list of volunteers showing all volunteer who are available on “01/03/2024”.
-
Test Case:
find n/Alex a/01/03/2024
Expected: A list of volunteers showing all volunteers who are available on “01/03/2024” or with “Alex” in their names.
-
Test Case:
find
Expected: Error thrown, stating that at least one search criterion must be present.
-
Removing a volunteer
- Remove a volunteer from the application based on the volunteer list
- Prerequisites: There must be at least one volunteer present in the current list.
-
Test Case:
delete 1
then entery
Expected: A prompt is given to confirm your deletion. After entering
y
, the volunteer at index1
is removed. -
Test Case:
delete 0
ordelete [negative number]
Expected: Error thrown as delete command expects a positive integer as its argument.
-
Test Case:
delete [number greater than the size of list]
Expected: A prompt is given to confirm deletion. After entering
y
, error is thrown as there is no volunteer at that index.
Editing a volunteer’s details
- Edit a volunteer
- Prerequisites: There must be at least one volunteer present in the current list.
-
Test Case:
edit 1 n/John
Expected: The volunteer’s name at index
1
is now changed to “John”. -
Test Case:
edit 1 p/12345678
Expected: The volunteer’s phone number at index
1
is now changed to “12345678”. -
Test Case:
edit 1
Expected: Error thrown, stating that at least one field must be present to edit.
-
Test Case:
edit 1 t/
Expected: Clears all tags of the volunteer.
Adding availability to a volunteer
- Add an availability to a volunteer
- Prerequisites: There must be at least one volunteer present in the current list.
-
Test Case:
addavail 1 a/01/03/2024
Expected: Availability is added to the volunteer at index
1
. -
Test Case:
addavail 1
Expected: Error thrown, stating that availability must be present.
-
Test Case:
addavail 1 [existing availability]
Expected: Error thrown, stating that the volunteer is already available.
-
Test Case:
addavail 1 [invalid date]
Expected: Error thrown, stating that availability must be a valid date.
Removing an availability from a volunteer.
- Removes an availability from a volunteer
- Prerequisites: There must be at least one volunteer present in the current list.
-
Test Case:
removeavail 1 [existing availability]
Expected: The availability is removed from the volunteer at index
1
. -
Test Case:
removeavail 1 [any availability that the volunteer does not have]
Expected: Error thrown, stating that the volunteer does not have that availability.
Refresh the application
- Removes all availabilities before today.
-
Test Case:
refresh
Expected: All availabilities before today are removed.
-
Test Case:
refresh [extra inputs]
Expected: Same as previous.
-
Assign a volunteer
- Assigns a volunteer to an assignment.
- Prerequisites: There must be at least one available volunteer present in the current list.
-
Test Case:
assign 1 d/Willing Hearts a/[Existing availability which is not assigned]
Expected: A new assignment is created with the assigned person at index 1.
-
Test Case:
assign 1 d/Willing Hearts a/[any availability that the volunteer does not have]
Expected: Error thrown, stating that the volunteer is not available on that day.
-
Test Case:
assign 1 d/Willing Hearts a/[a date where the volunteer already has an assignment]
Expected: Error thrown, stating that the volunteer is already assigned 1 task on that day.
-
Test Case:
assign [missing parameters]
Expected: Error thrown, stating invalid command format.
-
Test Case:
assign d/ a/[Existing availability]
Expected: Error thrown, stating that details cannot be empty.
View list of assignments
- Views the list of every assignment.
-
Test Case:
lista
Expected: The list of all assignments is shown on the GUI.
-
Test Case:
lista [extra inputs]
Expected: Same as previous.
-
Remove assignments
- Removes assignment based on the assignment list. (This is similar to deleting volunteers without confirmation.)
- Prerequisites: There must be at least one assignment in the assignment list.
-
Test Case:
removeassign 1
Expected: Removes the assignment at index 1 of the assignment list.
-
Test Case:
removeassign 0
orremoveassign [negative numbers]
Expected: Error thrown, stating invalid command format.
Clear all data
- Removes all data from the application
-
Test Case:
clear
Expected: Removes all entries(volunteers and assignments) in the application.
-
Test Case:
clear [extra inputs]
Expected: Same as previous.
-
Copy emails of the person list.
- Copy emails of every volunteer in the current volunteer list.
-
Test Case:
copy
Expected: All emails in the current volunteer list are copied to your clipboard.
-
Test Case:
copy [extra keywords]
Expected: Same as previous.
-
Export data
- Exports the current data in the application to a csv file.
-
Test Case:
export
when the addressbook.json file exists.Expected: All data is exported to a csv file named “assignments.csv” and “persons.csv” in the data directory.
-
Test Case:
export
when the addressbook.json file does not exist.Expected: Error thrown, stating that the json file could not be found.
-
Test Case:
export [extra inputs]
Expected: Same as the above 2, depending on whether json file exists.
Saving data
-
-
Dealing with missing/corrupted data files
-
Edit
addressbook.json
such that that stored values no longer make sense. For example: Changing a volunteer’s details while not changing the assignment details.Launch Match through the terminal by running
java -jar Match.jar
Expected: Match launches but the lists are empty.
-
Appendix: Planned Enhancements
Team size: 5-person
Given below are the planned enhancements for the application.
- Duplicate Names: The current system does not allow duplicate names. This can be a problem when two people with the same name want to register. The enhancement will allow duplicate person names as long as the phone number and email are different. This addresses the flaw of not being able to register multiple people with the same name.
- Multiple Spaces: The system currently identifies multiple spaces as separate entities. The enhancement will treat multiple consecutive spaces as a single space, improving the accuracy of name input.
- Special Characters: The system currently does not support special characters like ‘-’ and ‘/’ in names, tags and assignment details. The enhancement will add support for these characters, allowing for more diverse names, tags and detailed descriptions.
- Length Limit: The system currently does not limit the length of contact details (phone number and email). The enhancement will limit the contact details length to the maximum phone length (15 digits) and email length (local part: 64 characters, domain part: 255 characters) worldwide, preventing the input of unrealistically long contact details.
- Case Sensitivity: The system currently treats uppercase and lowercase letters as different characters in emails. The enhancement will make the email field case insensitive, preventing duplicate emails of different cases.
- Past Dates: The system currently allows the addition of past dates. The enhancement will display a warning message when adding dates that have passed, preventing the input of irrelevant dates.
- Time Support: The system currently only supports whole-day availability. The enhancement will add support for specific times, providing more accurate availability.
- Multiple Volunteers: The system currently only allows the assignment of one volunteer. The enhancement will allow assignment to multiple volunteers, improving task distribution.
- Command Restriction: The system currently allows the use of all commands in both “volunteer list view” and “assignment list view”. The enhancement will limit the use of certain commands to certain list view. For example, the ‘Copy’ command can only be used in the volunteer list view and ‘Removeassign’ can only be used in the assignment list view. This addresses the flaw of commands affecting unintended lists.
- Date Order: The system currently does not sort dates. The enhancement will display dates in sorted order, making it easier to view availability.
Appendix: Effort
Difficulty Level
Developing Match was somewhat challenging and difficult as we planned features that were not easy to implement. Not only do we have to plan the features, we had to understand the initial AB3 application and how it worked. Furthermore, most of us have not worked in a team before, hence coordinating issues and pull requests were time-consuming.
Challenges Faced
Here are some of the challenges the team faced:
- Making a new panel list showing all assignments
- We are new to Java FX and figuring out how to switch views were difficult. To build this feature, we had to make sure that our assignments feature worked first which took a long time.
- Handling dependency issues between
Assignment
andPerson
- As we created a new entity
Assignment
, we had to ensure that any edits to aPerson
will also cascade update the assignments. - For example, editing a volunteer’s details will also be reflected in the Assignment information.
- This was time consuming to fix as we have to consider all scenarios where this dependency is violated.
- As we created a new entity
- Making the autocomplete box
- Making the dropdown box is challenging as we had to utilise the javafx library and use their
ComboBox
andSelectionModel
. To integrate this, we had to read their javadocs and understand them. - In the process of implementing this, we faced many bugs such as arrow keys not working properly to navigate and dropdown box appearing at the wrong times.
- Making the dropdown box is challenging as we had to utilise the javafx library and use their
Effort Required
Although some commands implemented were similar to AB3’s command and can be reused, we implemented new features and commands to make sure that our application looks and feels different from the original AB3.
Furthermore, AB3 only deals with 1 type of entity Person
, but in our application, we implemented a new entity Assignment
to capture the assignments assigned to volunteers.
Handling dependency issue between Person
and Assignments
were also challenging and required time to test and fix.
Hence, a considerable amount of time and effort were put to develop these features and ensure proper testing.
Achievements
We built a simple application meant for volunteer coordinators to manage their volunteer roster.
- With the assignment feature, coordinators can keep track of all assignments assigned to volunteers.
- With autocomplete feature, this can significantly reduce the typing needed to maintain their database.
- With export feature, volunteer coordinators can save their files as backup or share with their colleagues.
- With copy feature, volunteer coordinators can easily send out emails to check with volunteers if they want a particular volunteering activity.