Back to OrgaNice!’s main page

Terry Tay - Project Portfolio Page

Project: OrgaNice!

Overview

OrgaNice! is a command line based application that can help academics with scheduling their tasks and keeping track of them. It also has additional features such as note taking and finding study areas within NUS, to help academics.

Summary of Contributions

Code Contributed

Link : RepoSense Dashboard

Enhancements implemented:

Contributions to the Developer’s Guide (Extracts):

The below extractions showcase my capabilities as a software engineer and team player.

Extract 1 (Object Diagram)

2.4. Notes Component

Notes Component

Figure 4. Object diagram for Notes Component


The Notes component is self-contained apart from calling UI class for Strings output.
Inside Notes component, there exists these classes:

  1. NotesInvoker : Class to start the Notes

  2. Notes : Class to support operations for the modules in the Notes, acts as interface.

  3. Modulelist: Class to implement actual modules operations and store modules list.

  4. Command : Package containing Command interface, Add command, Command Stack classes.

  5. Parser : Class to parse commands for command-based operations.

Extract 2 (Technical explanation of Implementation)

3.3. Operation of Notes

3.3.1 Implementation

The NotesInvoker class will create a Notes object. Notes acts as an Interface for the ModulesList class. Each module is mapped to an ArrayList of notes. This map is stored in the ModuleList class. The ModuleList class contains operations to add, remove, enter and list modules.

A ModuleManager class is used to hold operations for a module. These operations are achieved by working together with the Parser class and Command class. Operations supported are add, list, undo, redo.

Add operations are fairly simple, primarily using the add method of hashmap library. The implementation of undo and redo is stated here below.

Each time an AddCommand object is called, CommandStack will determine if operation is add, undo or redo.

If operation is to add notes, the notes will be added to the value in the module key. At the same time, this note that is added is also added to a CommandStack list in the CommandStack class. The redoStack list in the CommandStack class is then cleared.

If operation is to undo added notes, the CommandStack will remove the last added note from the CommandStack and pass it to the Command class to execute the undo action by removing it from the module contained in the hashmap. Also, this note will be added to the redoStack list.

If operation is to redo removed notes, the CommandStack will remove the last added note in redoStack list and pass it to the Command class to execute the redo action by adding this note into the module contained in the hashmap.

The reason why we chose two linked lists to support these operations is because it reduces the SLOC needed to write the logic. An alternative is to actually remember the state of the hashmap before an operation and save it to another hashmap. However, this approach will take up more memory and reduces the performance of the application.