2. Overview
This document is to summarize and elaborate all my contributions to the project. Our project, SaveIt, is a issue tracker application which is morphed from AddressBook4.
SaveIt dedicates to providing a platform for storing, managing and viewing their programming related issues during daily practice for the programmers. Its main features include adding new issue and solution, managing existing issues as well as finding existing issues. It is especially designed for the user who prefers command line interface (CLI) as all the commands require command line input. It also preserves the benefits of a Graphical User Interface (GUI) at the same time. If you can type fast, SaveIt can help you search the same issue that save previously faster than traditional GUI apps.
The project is implemented for applying and showing the learning outcomes of CS2103T, and it is done by a group of five CS2103T students including myself.
3. Summary of contributions
This section is to summarize and explain my contributions towards this project.
-
Major enhancement: add the solution filed to model structure along with enable adding solution or issue
-
What it does: It constitutes the basic model structure by adding new issue and new solution into SaveIt. This allows all the following features to be carried out in SaveIt.
-
Justification: This feature improves the product significantly as a user can now add more issues and solutions to the application. This is the most important and fundamental function our application aims to achieve.
-
Highlights: This enhancement involves not only model component but also GUI, storage components in the application and it requires a lot of effort to build it properly. The add command on the other hand needs to handle different requests in different directories.
-
-
Minor enhancement:
-
Code contributed: [Functional code]
-
Other contributions:
-
Project management:
-
Manage milestones and check issue status on GitHub
-
-
Improve JUnit tests:
-
Enhancements to existing features:
-
Documentation:
-
Modify the undo/redo implementation diagrams to fit current edition of Developer Guide: (Pull requests #243)
-
-
Community:
-
4. Contributions to the User Guide
Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users. |
4.1. Adding: (a)add
Adds an issue to the SaveIt App.
Format: add i/ISSUE_STATEMENT d/DESCRIPTION [t/TAG]…
Adds a solution to an existing issue in SaveIt App.
Format: add s/SOLUTION_LINK r/REMARK
|
Examples:
|
4.2. Retrieving a solution link: (rv)retrieve
Retrieves the solution link so that the link is copied to the system clipboard
Format: retrieve INDEX
|
Examples:
|
4.3. Autosuggesting existing issue in find command
To prevent the issue list is so large such that user can hardly remember all the issues, whenever user types in any keyword in find command, SaveIt will auto suggest any related issue name according to the keyword entered.
Example:
5. Contributions to the Developer Guide
Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project. |
5.1. Add feature
The add command can add both issue and solution to SaveIt. It includes two levels:
-
Root level
-
Issue statement
-
Issue description
-
Issue tags
-
-
Issue level
-
Solution link
-
Solution remark
-
5.1.1. Add issue
Adding a new issue can only happen at the root level
Current implementation
The SaveItParser
is used to call AddCommandParser
so as to pass the entered issue. In order to build a new Issue
object, a dummy solution link and dummy solution remark will be used. After that, AddCommand
is invoked which will ask model to add the issue to the Model
component.
In order to store the new issue inside the SaveIt, VersionedSaveIt
will be invoked and it will add issue to the UniqueIssueList
.
The following sequence diagram illustrates how the add new issue feature functions:
This diagram gives a clear procedure that how the user input is passed step by step by calling different methods and objects in different sequences.
5.1.2. Add solution to existing issue
Adding a new solution can only happen at the issue level
Current implementation
The SaveItParser
is used to call AddCommandParser
just like how adding issue feature functions as above mentioned. However, this time, the new solution link and solution remark is provided to AddCommand
instead. In order to build a new Issue
object, dummy issue statement and dummy issue description will be used. During execution, addSolution
method, which was newly added, in Model component will be invoked to add the solution. The detailed implementation of addSolution
in model component is quite simple. Since the list stored in application is immutable, each time, a new issue will be created with original statement and description, then the new solution will be added to that particular issue. Finally, updateIssue
method will be called to replace the issue in versionedSaveIt
.
The following sequence diagram illustrates how the add solution feature functions
This diagram shows the sequence that how add solution command is executed. It could be also noticed that it is basically similar to that of add new issue feature besides it invokes updateIssue method in Model component rather than addIssue method.
5.1.3. Design Considerations
Aspect: How add solutions executes
-
Alternative 1 (current choice): Combine AddIssue and AddSolution together and distinguish them at the stage of
AddCommandParser
-
Pros: Consistent syntax between the two features, so the command is more user-friendly.
-
Cons: Need to put more effort on distinguishing the difference between these two requests,
AddCommandParser
is relatively complex compared to the other parser component.
-
-
Alternative 2: Build a new command especially for adding solution
-
Pros: Easy to implement.
-
Cons: The command set becomes too complex for the user.
-
Aspect: How add command distinguishes between adding solution and adding issue
-
Alternative 1 (current choice): Pass a newly created issue with dummy issue statement or dummy solution link
-
Pros: Consistent coding style and less change on logic structure
-
Cons: Quite complex implementation compared to other command
-
-
Alternative 2: Overload Issue constructor so that different issues will be passed to
AddCommand
accordingly.-
Pros: Relatively easier to implement
-
Cons: Lots of changes on structure.
-
5.2. Retrieve Feature
The retrieve feature allows user to choose a solution link and copy it to the system clipboard.
5.2.1. Current Implementation
The retrieve feature basically takes the user entered index and call getFilteredAndSortedList
method in Model
to get the selected solution. Then Java Toolkit
package is used to copy the url link of solution to the system clipboard.
5.3. Suggestion Feature
The suggestion feature allows user to quickly complete commands by showing a drop-down window of suggested values when the user input matches a specific keyword or identifier.
5.3.1. Current Implementation
The figure below shows a basic relationship between each class.
The SuggestionLogicManager
implements SuggestionLogic
interface and overrides the evaluate
method. Similarly, IssueNameSuggestion
, TagNameSuggestion
and CopyExistingSuggestion
implement Suggestion
interface and override evaluate
method.