Overview
CapTracker is a desktop application. 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.
Summary of contributions
-
Major enhancement: Transcript file storage feature.
-
What it does: Automatically saves and updates all of user’s transcript data into a file, and loads this file.
-
Justification: Users should be able to access previously created modules when opening the app again, otherwise they would have to re-enter all their modules again. They can also load their data in another computer or share it with other users if desired, simply by sharing the file itself.
-
Highlights:
-
By using the
Jackson
library to store the Transcript data as a JSON file instead of an XML file, we avoid having to writeXMLSerializableTranscript
andXMLAdaptedModule
classes.
-
-
-
Minor enhancement: Display and updating of current CAP and CAP Goal.
-
What it does: Displays current CAP, immediately updates whenever completed modules are edited. Displays CAP Goal if set, else displays NIL; immediately updates whenever incomplete modules are changed or adjusted.
-
Justification: Users should be able to view their current CAP and CAP Goal as they are updated, without having to request for them through a command.
-
-
Code contributed: https://nus-cs2103-ay1819s1.github.io/cs2103-dashboard/#=undefined&search=jeremyyew
-
Other contributions:
-
Project management:
-
Guided planning of early project timeline and milestone setting.
-
Managed release
v1.1
(1 release) on GitHub.
-
-
Enhancements to existing features:
-
Enabled app to load initial sample module data (See PR #27).
-
Set up initial GUI layout (See PR #52).
-
-
Documentation:
-
Updated existing content of the Storage Section of Developer Guide.
-
Added feature overview and updated "Saving your module data" section of User Guide.
-
-
Community:
-
PRs reviewed (with non-trivial review comments): #23, #37, #121
-
-
Contributions to the User Guide
Note: Since my main feature is non-interactive, there are less things I could write for the user guide.
Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users. |
Feature overview
In the CAPTracker app, you can add modules that you’ve completed and it will display your current CAP. A module consists of a code, year, semester, number of credits, and an associated grade.
You may also add incomplete modules (i.e. modules that you are currently enrolled in, or plan to enroll in eventually, but you have not received your grade yet) simply by adding that module and omitting the grade.+
You may also set a CAP goal, and the app will automatically generate the target grades necessary for your incomplete modules so that you can achieve your goal. The app will also let you know if your goal is too high based on the number of incomplete credits you have and your current CAP.
Lastly, you can also adjust the target grade of a particular incomplete module (for example, a module you know you can get an A in) and the app will automatically recalculate the required grades for the rest of the modules (so you can afford to score lower on those modules).
Happy tracking!
Saving your module data
Your module information and CAP goal are automatically saved on the hard disk as a JSON file (by default data/transcript.json
) whenever there are changes to the modules or CAP goal. The data is automatically loaded into the app again upon startup.+
You may manually change the location to store your data by changing the value of transcriptFilePath
in the file data/preferences.json
(found in the same directory as the CapTracker jar file).
You may load your module data in the CAPTracker app on another computer or share it with other users if desired, simply by sharing the module data file generated by your instance of the app. The value of transcriptFilePath
in the preferences file will have to be changed to the location of your own data file.
Note: Do not modify the JSON module data file manually, or you may lose your data.
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. |
Transcript Storage: Reading and Writing
Whenever the in-memory Transcript
object is changed, the transcript data file is updated. When the app initializes, it will look for an existing data file from which to load the transcript.+
If the file is not found, the app will initialize with an empty Transcript.+
If the file is found but the data is an incorrect format or there is some problem reading from the file, the app will initialize with an empty Transcript as well.+
When the app initializes, it looks for the file name provided by data/preferences.json
under the transcriptFilePath
key - by default this is data/transcript_demo.json
. This file stores all transcript data including modules data and cap Goal information, such as its value, whether it is set, and whether it is impossible. The transcriptFilePath
may be changed manually by the user.+
By using the Jackson
library to store the Transcript data as a JSON file instead of an XML file, we avoid having to write XMLSerializableTranscript
and XMLAdaptedModule
classes. Instead, we simply register a custom JSONTranscriptDeserializer
on the ReadOnlyTranscript
class so that when we read from the JSON file, Jackson’s ObjectMapper
is able to use the values to reconstruct the saved object.
Storage component
API : Storage.java
The Storage
interface defines a component which
-
can save
UserPref
objects in JSON format and read it back. -
can save Transcript data in JSON format and read it back.
The StorageManager
implements the Storage
interface, and updates the transcript JSON file when the TranscriptChangedEvent
is fired (see Figure 4). It also logs the reading and saving of transcript data.
Launch and Shutdown
-
Initial launch
-
Download the jar file and copy into an empty folder
-
Double-click the jar file
Expected: Shows the GUI with a set of sample contacts. 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.
-
-
Saving transcript data
-
Add some modules, set a CAP goal, and close the app.
-
Re-launch the app by double-clicking the jar file.
Expected: The added modules and CAP goal are retained.
-
-
Changing the transcript data file path
-
Add some modules, set a CAP goal, and close the app.
-
Change the value of
transcriptFilePath
in the filedata/preferences.json
(found in the same directory as the jar file) to some non-existent file such asdata/transcript_test.json
. -
Re-launch the app by double-clicking the jar file.+ Expected: The app will initialize with an empty transcript (no modules or CAP goal). On further change, the app will save the transcript data to the new file
data/transcript_test..json
.
-
-
Importing transcript data
-
Add some modules, set a CAP goal, and close the app.
-
Save another copy of the jar file in another directory and open and close this second app.
-
Replace the
data/transcript.json
of the second app with thedata/transcript.json
from the first app. -
Relaunch the new app.
Expected: The app will initialize with the added modules and CAP goal from the first app.+
-