diff --git a/.gitignore b/.gitignore
index 71c9194e8bd..f85cff43711 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,9 @@ src/main/resources/docs/
/out/
/*.iml
+# Gradle run bin (on VS code)
+/bin
+
# Storage/log files
/data/
/config.json
diff --git a/README.md b/README.md
index 13f5c77403f..991c465a237 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,39 @@
-[](https://github.com/se-edu/addressbook-level3/actions)
+[](https://github.com/AY2122S2-CS2103T-W14-3/tp/actions)
+
+
+

-* This is **a sample project for Software Engineering (SE) students**.
- Example usages:
- * as a starting point of a course project (as opposed to writing everything from scratch)
- * as a case study
-* The project simulates an ongoing software project for a desktop application (called _AddressBook_) used for managing contact details.
- * It is **written in OOP fashion**. It provides a **reasonably well-written** code base **bigger** (around 6 KLoC) than what students usually write in beginner-level SE modules, without being overwhelmingly big.
- * It comes with a **reasonable level of user and developer documentation**.
-* It is named `AddressBook Level 3` (`AB3` for short) because it was initially created as a part of a series of `AddressBook` projects (`Level 1`, `Level 2`, `Level 3` ...).
-* For the detailed documentation of this project, see the **[Address Book Product Website](https://se-education.org/addressbook-level3)**.
-* This project is a **part of the se-education.org** initiative. If you would like to contribute code to this project, see [se-education.org](https://se-education.org#https://se-education.org/#contributing) for more info.
+# InternBuddy
+InternBuddy is a desktop app for managing companies for internships, optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI).
+If you can type fast, InternBuddy can get your internship management deliverables done faster than traditional GUI apps.
+
+InternBuddy provides you a way to plan and organize all your internship details on a single application, with intuitive
+UI to make your Job Seeking journey a smooth road.
+
+InternBuddy allows you to:
+* Store and manage Companies
+* Manage Contacts
+ * For example: Hiring Manager Contact Details
+* Manage Events
+ * For example: Interviews and Online Assessments
+
+For more detailed information on how to use the application, click on [User Guide](docs/UserGuide.md)
+
+---
+
+### More Information about the Project
+* InternBuddy is an **ongoing** collaborated Software Development Project maintained by
+ * Albert Sutiono
+ * Edward Alvin
+ * Muhammad Radhya
+ * Steven Gabriel Kho Chua
+* InternBuddy is a brown-field project which is forked from [Address Book 3](https://github.com/nus-cs2103-AY2122S2/tp), a software development project (around 6 KLoC) which provide a baseline for InternBuddy.
+* You can look into our [Developer Guide](docs/DeveloperGuide.md) for more details about the codebase.
+
+### Main Language and Tools used:
+
+
+
+
-
+[[github](https://github.com/albertsutz)]
+[[linkedin](https://www.linkedin.com/in/albert-sutiono/)]
+[[portfolio](./team/albertsutz.md)]
-[[homepage](http://www.comp.nus.edu.sg/~damithch)]
-[[github](https://github.com/johndoe)]
-[[portfolio](team/johndoe.md)]
+* Role: Developer
+* Responsibilities: In charge of Code Review and `find`, `edit` commands implementation, Testing
+
+
-[[github](http://github.com/johndoe)]
-[[portfolio](team/johndoe.md)]
+[[github](http://github.com/theprevailingone)] [[linkedin](https://www.linkedin.com/in/edwardalvin/)] [[portfolio](./team/theprevailingone.md)]
-* Role: Team Lead
-* Responsibilities: UI
+* Role: Developer
+* Responsibilities: UG main handler, sort command implementation along with parser, testings, and documentation
-### Johnny Doe
+Computer Science undergraduate passionate about software engineering and game development. Capable developer, having devised and developed multiple projects. Proficient in a range of modern technologies including Python, Javascript and Java. Interested in UI/UX Design and Data Science. Looking for new opportunities and challenges.
-
+### Steven Chua
-[[github](http://github.com/johndoe)] [[portfolio](team/johndoe.md)]
+
-* Role: Developer
-* Responsibilities: Data
+[[homepage](https://www.linkedin.com/in/stevengkchua)]
+[[github](http://github.com/graphcalibur)]
+[[portfolio](team/graphcalibur.md)]
-### Jean Doe
+* Role: Developer
+* Responsibilities: Repository setup, issue management, archive feature implementation, testing
-
+I'm a Year 2 Computer Science undergraduate science with a passion for technology, games, and cybersecurity.
+I'm always looking for ways to improve my skills and widen my knowledge.
-[[github](http://github.com/johndoe)]
-[[portfolio](team/johndoe.md)]
+### Muhammad Radhya Fawza
-* Role: Developer
-* Responsibilities: Dev Ops + Threading
+
-### James Doe
+[[github](https://github.com/mradhyaf)]
+[[portofolio](./team/mradhyaf.md)]
-
+* Role: Developer
+* Responsibilities: User Interface
-[[github](http://github.com/johndoe)]
-[[portfolio](team/johndoe.md)]
+I am a software engineer with a passion for free software—software that respects user's freedom. I am currently a
+second-year computer science undergraduate interested in UI/UX Design.
-* Role: Developer
-* Responsibilities: UI
diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md
index 46eae8ee565..ffb668eaa0b 100644
--- a/docs/DeveloperGuide.md
+++ b/docs/DeveloperGuide.md
@@ -9,7 +9,8 @@ title: Developer Guide
## **Acknowledgements**
-* {list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well}
+* InternBuddy is a brown-field project which is forked from [Address Book 3](https://github.com/nus-cs2103-AY2122S2/tp), a software development project (around 6 KLoC) which provide a baseline for InternBuddy.
+* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)
--------------------------------------------------------------------------------------------------------------------
@@ -23,7 +24,7 @@ Refer to the guide [_Setting up and getting started_](SettingUp.md).
@@ -69,24 +73,35 @@ The sections below give more details of each component.
### UI component
-The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)
+The **API** of this component is specified in [`Ui.java`](https://github.com/AY2122S2-CS2103T-W14-3/tp/tree/master/src/main/java/seedu/address/ui/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 consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `EntryListPanel`,
+`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`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)
+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`](https://github.com/AY2122S2-CS2103T-W14-3/tp/tree/master/src/main/java/seedu/address/ui/MainWindow.java)
+is specified in [`MainWindow.fxml`](https://github.com/AY2122S2-CS2103T-W14-3/tp/tree/master/src/main/resources/view/MainWindow.fxml)
+
+The `UI` has 3 different `ListPanel` components: `PersonList`, `CompanyList`, and `EventList`. Only one of these lists
+are shown at a time in the display.
+
+Notice as the application only shows one list at one time, `EntryListPanel` acts as a placeholder to contain
+`PersonListPanel`, `CompanyListPanel`, or `EventListPanel`.
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 the `UI` relies on the `Logic` to execute commands.
-* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.
+* depends on some classes in the `Model` component, as it displays `Person`, `Company`, and `Event` objects
+residing in the `Model`.
### Logic component
-**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)
+**API** : [`Logic.java`](https://github.com/AY2122S2-CS2103T-W14-3/tp/tree/master/src/main/java/seedu/address/logic/Logic.java)
Here's a (partial) class diagram of the `Logic` component:
@@ -102,7 +117,8 @@ The Sequence Diagram below illustrates the interactions within the `Logic` compo

-
How the parsing works:
-* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`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 a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object.
-* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.
+* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a
+placeholder for the specific command name e.g., `DeleteCommandParser`) which uses the other classes shown above to parse
+ the user command and create a `XYZCommand` object (e.g., `DeleteCommand`) which the `AddressBookParser` returns back as
+a `Command` object.
+* All `XYZCommandParser` classes (e.g., `DeleteCommandParser`, `ListPersonCommandParser`, ...) inherit from the `Parser` interface
+so that they can be treated similarly where possible e.g, during testing.
### Model component
-**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)
+**API** : [`Model.java`](https://github.com/AY2122S2-CS2103T-W14-3/tp/tree/master/src/main/java/seedu/address/model/Model.java)
The `Model` component,
-* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` 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 unmodifiable `ObservableList
-
+Furthermore, the `CompanyName`
+object must match an existing `Company` object in the `AddressBook`.
+
+
@@ -176,7 +214,7 @@ Step 2. The user executes `delete 5` command to delete the 5th person in the add

-Step 3. The user executes `add n/David …` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.
+Step 3. The user executes `addc n/David …` to add a new person. The `addc` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.

@@ -207,11 +245,11 @@ The `redo` command does the opposite — it calls `Model#redoAddressBook()`,
+
+
+For the `addXYZ` command:
+1. The user executes `addXYZ` followed by `XYZ` parameters (along with their tags). You can look at our UG to see the parameters.
+2. This command is parsed by `AddXYZCommandParser` to check if the given parameters are valid. If not, a `ParseException` is thrown.
+3. Otherwise, an `XYZ` object is created and `AddXYZCommand` object will be created accordingly.
+4. Next, `AddXYZCommand` will check whether the added `XYZ` object exists in the address book by using `Model#hasEntry()`.
+ if the added `XYZ` object is a duplicate, then `CommandException` will be thrown.
+5. Otherwise, the created `AddXYZCommand` object will call `Model#addXYZ()` to add `XYZ` object to the model.
+ 1. Next, the model will call `AddressBook#addXYZ()`
+ 2. Note that in the address book, there is a `UniqueEntryList
+
+#### Common Implementation
+Note that we are going to use XYZ as a placeholder of either Company, Event, or Person for this section.
+
+For the `findXYZ` command:
+1. The user executes `findXYZ` followed by `XYZ` parameters (along with their tags). You can look at the parameters in our UG.
+2. This command is parsed by `FindXYZCommandParser` to check if the given parameters are valid. If not, a `ParseException` is thrown.
+3. Otherwise, `XYZContainsKeywordsPredicate` object will be created. Note that `XYZContainsKeywordsPredicate` is the class responsible to test
+ whether a particular `XYZ` object fits the queried entry. With this predicate, `FindXYZCommand` object will be created.
+4. Next, `FindXYZCommand` will call `Model#showXYZList(predicate)`.
+ 1. The model will update the displayed list to be the `XYZ` list and choose only the `XYZ` objects that suits the query
+ using `XYZContainsKeywordsPredicat#test()'.
+6. The `CommandResult` of the `XYZ` command is returned.
-_{Explain here how the data archiving feature will be implemented}_
+Here is the Sequence Diagram for the implementation to understand it better.
+
+In the diagram, `FindXYZexample` is just a placeholder for user input. You can look at the UG for sample user input for different
+find commands.
+
+### Editing Feature
+
+The design and implementation of `edit` commands are similar to `find` commands and their sequence diagrams differ minimally.
+For developers, you can trace through the code similarly with the `find` commands.
+
+### List Feature
+
+#### Design
+This feature allows the user to display unarchived, archived, or all the `Entry` in the address book. It is facilitated by `ModelManager`. This acts as a way for user to display entries in the most general way (respective to the desired entry type).
+
+As entries can either be archived or unarchived, the parameter `SearchType` can be passed to the `list` command to indicate which entries to display.
+
+#### Common Implementation
+Note that we are going to use XYZ as a placeholder of either Company, Event, or Person for this section.
+
+For the `listXYZ` command:
+1. The user executes `listXYZ` followed by `SearchType` parameters.
+2. This command is parsed by `ListXYZCommandParser` to check if the given parameters are valid. If not, a `ParseException` is thrown.
+3. Otherwise, `ListXYZCommand` object will be created.
+4. Next, `ListXYZCommand` will call `Model#showXYZList(Predicate)` (`Predicate` is generated by `ListXYZCommand` through `SearchType`).
+5. The model will update the displayed list to be the `XYZ` list and choose only the `XYZ` objects that suits the search type (unarchived/ archived/ all) using `SearchType`.
+6. The `CommandResult` of the `listXYZ` command is returned.=
--------------------------------------------------------------------------------------------------------------------
@@ -257,42 +505,143 @@ _{Explain here how the data archiving feature will be implemented}_
**Target user profile**:
-* has a need to manage a significant number of contacts
-* prefer desktop apps over other types
-* can type fast
-* prefers typing to mouse interactions
-* is reasonably comfortable using CLI apps
-
-**Value proposition**: manage contacts faster than a typical mouse/GUI driven app
+* University student who is looking for internships / full time jobs
+ * Preferrably university student from School of Computing
+* Has a need to manage a significant number of companies, their events, and their contact people during job seeking
+* Prefer desktop apps over other types
+* Can type fast
+* Prefers typing to mouse interactions
+* Is reasonably comfortable using CLI apps
+**Value proposition**: manage companies, their events, and their contact people faster than a typical mouse/GUI driven app.
+Furthermore, `InternBuddy` allows users to effectively combine multiple managing application into one.
### User stories
Priorities: 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 |
-| `* * *` | user | add a new person | |
-| `* * *` | user | delete a person | remove entries that I no longer need |
-| `* * *` | user | find a person by name | locate details of persons without having to go through the entire list |
-| `* *` | user | hide private contact details | minimize chance of someone else seeing them by accident |
-| `*` | user with many persons in the address book | sort persons by name | locate a person easily |
+| 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 |
+| `* * *` | user | add companies | keep track of all of my companies |
+| `* * *` | user | add events related to a company | keep track of all of a company’s events |
+| `* * *` | user | add contact people relared to a company | easily look up their contact details |
+| `* * *` | user | delete companies | remove companies that I am no longer considering |
+| `* * *` | user | delete events | remove events that have passed or been canceled |
+| `* * *` | user | delete contact people | remove people who are no longer related to companies I'm looking at |
+| `* * *` | user | view the list of companies | |
+| `* * *` | user | view the list of events | |
+| `* * *` | user | view the list of contact people | |
+| `* * *` | user | save my list | maintain my list across different sessions |
+| `* * *` | user considering many companies | find companies by name | locate details of companies without having to go through the whole list |
+| `* * *` | user keeping track of many events | find events by name | locate details of events without having to go through the whole list |
+| `* * *` | user keeping track of many contact people | find contact people by name | locate their details without having to go through the whole list |
+| `* * *` | user keeping track of events from many different companies | find events related to a certain company | locate details of eventts from a certain company without having to go through the whole list |
+| `* * *` | user | edit the details of a company | keep the company details accurate and up to date |
+| `* * *` | user | edit the details of an event | keep the event details accurate and up to date |
+| `* * *` | user | edit the details of a contact person | keep their details accurate and up to date |
+| `* * *` | user | receive feedback on whether my command was successful or not | rectify the error in the command if any occurred |
+| `* *` | user | add tags to an entry | |
+| `* *` | user | edit tags of an entry | |
+| `* *` | user | delete tags from an entry | |
+| `* *` | user keeping track of many entries | find entries by tags | locate that entry without having to go through the whole list |
+| `* *` | user | archive companies | ignore companies I am no longer focusing on but can still view their details if necessary |
+| `* *` | user | archive events | ignore events that have passed or been canceled but can still view their details if necessary |
+| `* *` | user | archive contact people | ignore contact people no longer connected to a company I’m looking at but can still view their details if necessary |
+| `* *` | user | view all events in a certain time frame | see all the events within that time frame without going through the whole list |
+| `* *` | user | view all upcoming events within a certain time frame | see all important events that will be coming up soon |
+| `* *` | user keeping track of many events | sort events by date | locate an event easily and view their chronological order |
+| `* *` | user keeping track of many contact people | sort persons by name | locate a person easily |
+| `* *` | user considering many companies | sort companies by name | locate a company easily |
+| `* *` | new user | go through a guided tutorial of the app | quickly learn how to use the app |
+| `* *` | user | undo the previous command | undo any mistakes I make |
+| `* *` | user | redo the previously undone command | redo a command I accidentally undid |
+| `* *` | user keeping track of many events | delete all past events | avoid having to delete them one by one |
+| `* *` | user keeping track of many events | archive all past events | avoid having to archive them one by one |
+| `* *` | user | find companies by all its attributes | locate details of companies without having to go through the whole list |
+| `* *` | user | find events by all its attributes | locate details of events without having to go through the whole list |
+| `* *` | user | find people by all its attributes | locate details of people without having to go through the whole list |
+| `*` | user | choose to save or not save the changes made | avoid having changes I don't want get saved to the file |
+| `*` | forgetful user | receive reminders for events happening soon | remember them |
+| `*` | user with multiple computers | download the list of contacts | send the list to other computers |
+| `*` | user with multiple computers | import the list of contacts | maintain my list between different computers |
+| `*` | applicant | send emails directly | send applications without having to open a web browser |
+| `*` | applicant | store my resume, cover letter & academic transcript | easily retrieve them when sending an email |
+| `*` | calendar user | download my events in ics format | import them into my calendar apps |
+| `*` | LinkedIn user | add contact information from a LinkedIn url | easily add LinkedIn contact information to an entry |
+| `*` | expert user | remap the commands | use commands I am more comfortable with |
+| `*` | expert user | add key bindings/shortcuts | use shortcuts I am comfortable with for efficient usage |
+| `*` | expert user | add simple scripts | I can automate common tasks |
*{More to be added}*
### Use cases
-(For all use cases below, the **System** is the `AddressBook` and the **Actor** is the `user`, unless specified otherwise)
+(For all use cases below, the **System** is the `InternBuddy` and the **Actor** is the `user`, unless specified otherwise)
+
+**Use case: Add a new event for a company**
+
+**MSS**
+
+1. User requests to add a new event with details given
+2. InternBuddy creates and add a new event to the list of events
+3. InternBuddy shows successful feedback to the user
+4. InternBuddy displays the updated list of events with the new event
+5. User requests to add a new tag to the event with the company name as the tag
+6. InternBuddy adds the tag to the event
+7. InternBuddy shows successful feedback to the user
+
+ Use case ends.
-**Use case: Delete a person**
+**Use case: Add a new contact person details**
**MSS**
-1. User requests to list persons
-2. AddressBook shows a list of persons
-3. User requests to delete a specific person in the list
-4. AddressBook deletes the person
+1. User requests to add a new contact person with details given
+2. InternBuddy creates a new contact person
+3. InternBuddy add the new contact person to the list of contact persons
+4. InternBuddy displays the updated list of contact persons with the new contact person
+5. InternBuddy shows successful feedback to the user
+
+ Use case ends.
+
+**Extensions**
+* 5a. User wants to add a company to the contact person
+ * 5a1. User requests to add a new tag to the contact person with the company name as the tag
+ * 5a2. InternBuddy adds the tag to the contact person
+ * 5a3. InternBuddy shows successful feedback to the user
+
+ Use case ends.
+
+* 5a2. contact person not found
+
+ Use case ends.
+
+**Use case: Add a new company**
+
+**MSS**
+
+1. User requests to add a new company with details given
+2. InternBuddy creates a new company
+3. InternBuddy assign a tag to the company with the company name as the tag
+4. InternBuddy add the new company to the list of companies
+5. InternBuddy displays the updated list of companies with the new company
+6. InternBuddy shows successful feedback to the user
+
+ Use case ends.
+
+**Use case: Hide events that have passed or has been cancelled**
+
+**MSS**
+
+1. User requests to view list of events
+2. InternBuddy shows list of events
+3. User requests to archive the event
+4. InternBuddy archives and hides the event
+5. InternBuddy shows successful feedback to the user
+6. InternBuddy update list of events
+7. InternBuddy display the updated list of events
+8. Repeat steps 3-8 for all events to be hidden
Use case ends.
@@ -304,24 +653,216 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli
* 3a. The given index is invalid.
- * 3a1. AddressBook shows an error message.
+ * 3a1. InternBuddy shows an error feedback to the user
Use case resumes at step 2.
-*{More to be added}*
+**Use case: Edit an existing company**
+
+**MSS**
+
+1. User requests to view list of companies
+2. InternBuddy shows list of companies
+3. User requests to edit a selected company from the list with the given details
+4. InternBuddy updates the company's details
+5. InternBuddy shows successful feedback to the user
+
+ Use case ends.
+
+**Extensions**
+
+* 2a. The list is empty
+
+ Use case ends.
+
+* 3a. The selected company is invalid
+ * 3a1. InternBuddy shows an error feedback to the user
+
+ Use case ends.
+
+* 3b. The given details is invalid
+ * 3b1. InternBuddy shows an error feedback to the user
+
+ Use case ends.
+
+**Use case: Edit an existing person**
+
+**MSS**
+
+1. User requests to view list of persons
+2. InternBuddy shows list of persons
+3. User requests to edit a selected person from the list with the given details
+4. InternBuddy updates the person's details
+5. InternBuddy shows successful feedback to the user
+
+ Use case ends.
+
+**Extensions**
+
+* 2a. The list is empty
+
+ Use case ends.
+
+* 3a. The selected person is invalid
+ * 3a1. InternBuddy shows an error feedback to the user
+
+ Use case ends.
+
+* 3b. The given details is invalid
+ * 3b1. InternBuddy shows an error feedback to the user
+
+ Use case ends.
+
+**Use case: Edit an existing event**
+
+**MSS**
+
+1. User requests to view list of events
+2. InternBuddy shows list of events
+3. User requests to edit a selected event from the list with the given details
+4. InternBuddy updates the event details
+5. InternBuddy shows successful feedback to the user
+
+ Use case ends.
+
+**Extensions**
+
+* 2a. The list is empty
+
+ Use case ends.
+
+* 3a. The selected event is invalid
+ * 3a1. InternBuddy shows an error feedback to the user
+
+ Use case ends.
+
+* 3b. The given details is invalid
+ * 3b1. InternBuddy shows an error feedback to the user
+
+ Use case ends.
+
+**Use case: Delete an existing company**
+
+**MSS**
+
+1. User requests to view list of companies
+2. InternBuddy shows list of companies
+3. User requests to delete a selected company from the list
+4. InternBuddy deletes all persons associated with the company
+5. InternBuddy deletes the company from the list
+6. InternBuddy shows successful feedback to the user
+
+ Use case ends.
+
+**Extensions**
+
+* 2a. The list is empty
+
+ Use case ends.
+
+* 4a. The selected event is invalid
+ * 4a1. InternBuddy shows an error feedback to the user
+
+ Use case ends.
+
+**Use case: Delete an existing person**
+
+**MSS**
+
+1. User requests to view list of persons
+2. InternBuddy shows list of persons
+3. User requests to delete a selected person from the list
+4. InternBuddy deletes the person from the list
+5. InternBuddy shows successful feedback to the user
+
+ Use case ends.
+
+**Use case: Delete an existing event**
+
+**Extensions**
+
+* 2a. The list is empty
+
+ Use case ends.
+
+* 4a. The selected person is invalid
+ * 4a1. InternBuddy shows an error feedback to the user
+
+ Use case ends.
+
+**MSS**
+
+1. User requests to view list of events
+2. InternBuddy shows list of events
+3. User requests to delete a selected event from the list
+4. InternBuddy deletes the event from the list
+5. InternBuddy shows successful feedback to the user
+
+ Use case ends.
+
+**Extensions**
+
+* 2a. The list is empty
+
+ Use case ends.
+
+* 4a. The selected event is invalid
+ * 4a1. InternBuddy shows an error feedback to the user
+
+ Use case ends.
+
+**Use case: Locating companies**
+
+**MSS**
+
+1. User requests to find a company with a specified attribute
+2. InternBuddy shows all the companies that contain the specified attribute
+3. InternBuddy shows successful feedback to the user
+
+ Use case ends.
+
+**Use case: Locating persons**
+
+**MSS**
+
+1. User requests to find a person with a specified attribute
+2. InternBuddy shows all the persons that contain the specified attribute
+3. InternBuddy shows successful feedback to the user
+
+ Use case ends.
+
+**Use case: Locating companies**
+
+**MSS**
+
+1. User requests to find an event with a specified attribute
+2. InternBuddy shows all the events that contain the specified attribute
+3. InternBuddy shows successful feedback to the user
+
+ Use case ends.
-### Non-Functional Requirements
-1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.
-2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.
-3. 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.
*{More to be added}*
+### Non-Functional Requirements
+
+1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.
+2. Should be able to hold up to 1000 entries without noticeable lag in performance for typical usage.
+3. 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.
+4. Entries and their details should be displayed in an intuitive, easy-to-understand manner.
+5. The majority of the interactions the user makes with the app should be through the keyboard.
+6. Should not use more than 300 MB of RAM memory while in operation.
+7. The commands should be intuitive from its name
+
### Glossary
* **Mainstream OS**: Windows, Linux, Unix, OS-X
-* **Private contact detail**: A contact detail that is not meant to be shared with others
+* **Entry**: A single entry stored in a list of entries (Contact person/Event/Company)
+* **Person**: An entry representing a contact person that consists of a name, company name, phone number, email address,
+and a list of tags
+* **Event**: An entry representing an event that consists of a name, company name, date, time, location, and a list of tags
+* **Company**: An entry representing a company that consists of a name, phone number, email address, and a list of tags
--------------------------------------------------------------------------------------------------------------------
@@ -342,36 +883,251 @@ testers are expected to do more *exploratory* testing.
1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.
-1. Saving window preferences
+2. Saving window preferences
1. Resize the window to an optimum size. Move the window to a different location. Close the window.
- 1. Re-launch the app by double-clicking the jar file.