PROJECT: Internship Diary
This portfolio provides an overview of my contributions to the Internship Diary project.
Overview
Internship Diary is a command line interface (CLI) and desktop-based internship tracking application.
Arguably the most important phase in the journey of a computer science undergraduate is in their internship. Internships are widely viewed as an entry point into the professional scene of computer science. Coupled with the intense competition amongst highly desired internship companies, applying for internships become a tedious and stressful process. Numerous hours would be spent planning, researching and organising internship applications.
As a group of computer science undergraduates, our team understands the anxiety and stress that internship planning can cause. Therefore, we resolved ourselves to create a software that can ease the worries of fellow computer science undergraduates when organising or tracking their internship applications.
Internship Diary is the culmination of this resolution, a simple yet elegant one-stop application for computer science undergraduates' internship organising needs.
Summary of contributions
-
Major enhancement: implemented interview classes and commands
-
What it does: This feature enables the user to add and modify interviews in an internship application, through the interview commands.
-
Justification: Interviews are important to an internship application. As interviews are almost always the next step towards a successful application, it is important for the user to be able to organise and view his interviews. Therefore, this features improves the product by allowing the user to add and modify interviews in an internship application.
-
Highlights: This enhancement requires extensive testing as it makes massive increments to the current Model and Logic packages. The implementation had to be constantly tweaked to ensure good integration with all other enhancements. Meticulousness and the ability to write good test cases was integral to implementing this enhancement.
-
-
Major enhancement: implemented display of internship application details in the Graphical User Interface (GUI)
-
What it does: This feature enables the user to display the details of a selected internship application (all the fields and list of interviews) on the right panel of the internship application.
-
Justification: This feature improves the product as it allows the users to view all the details of the internship application. This is important because the user will need to refer to the details in order to plan or organise his internships.
-
Highlights: This enhancement uses property change listeners to react to any changes by the user to the displayed filtered list on the left panel and the internship application selected. This implementation will allow for better flexibility in future modifications to internship application, while being less prone to bugs and errors. Additionally, this enhancement requires strong knowledge of javafx and the Ui structure of Internship Diary in order to produce a robust and well-integrated GUI enhancement.
-
Credits: Chan Ger Hean for improving the implementation by using java property change.
-
-
Minor enhancement: added select command to show Internship Application detail based on index.
-
Minor enhancement: added parsers for new Internship Diary fields (status, priority, role).
-
Code contributed: You can find all my code contributed here: RepoSense Report
Other contributions:
-
Project management:
-
Set up Tags on Github Issues
-
Created and managed Milestones on Github
-
Managed meeting agendas and delegation of features, and translated them into issues on Github
-
Assigned issues and PRs to relevant Milestones (from v1.1 to v2.0)
-
Assigned relevant tags to issues
-
-
Enhancement to existing features:
-
Documentation:
-
Community:
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. |
Structure of interview
-
Interview
represents an interview that you have been given by the company you are applying to. It exists within anInternshipApplication
-
Currently there are two types of
Interview
provided by the Internship Diary:-
Online Interview — No address is needed.
-
Offline Interview — Address must be provided when interview is added or modified from online to offline.
-
-
You can specify what type of interview you want to add by using the
o/IS_ONLINE
prefix. -
In order to facilitate your tracking of interviews, there are no restriction to what
InternshipApplication
you can add your interview to.
Therefore, it is possible for you to add an interview to anInternshipApplication
with any status.-
This is so that just in case you forgot to record an interview after you already got offered or rejected, you could still add it into the Internship Diary for your personal tracking.
-
In v2.0, we will create a prompt on whether you want to automatically change your
InternshipApplication
status to 'interview'.
-
Field | Prefix | Can Be Empty? | Max Number of Values | Remarks |
---|---|---|---|---|
isOnline |
o/ |
No |
1 |
Can only be |
Interview Date |
d/ |
No |
1 |
Must be a valid date of the form |
Interview Address |
a/ |
online: yes offline: no |
1 |
No restrictions on input. |
Selecting an internship application to display: select
Selects an internship application to display on the right panel of the internship diary.
Only one internship application may be selected at any point in time.
Alternatively, you may use your mouse to click on a specific internship application on the left panel of the internship diary. |
Format: select INDEX
Example(s):
-
select 1
Modifying an interview in an internship application: interview
Add, list, edit or delete interviews within an internship application
An interview must contain a date and a boolean (true or false) that represents whether an interview is conducted online or not. If the interview is not conducted online, an additional address field must be provided. See Structure of interview for more information. |
Format:
-
Overview
interview INTERNSHIP_INDEX COMMAND_WORD [INTERVIEW_INDEX] [a/ADDRESS] [d/DATE] [o/IS_ONLINE]
-
Specific format of each
COMMAND_WORD
:-
Add interview
interview INTERNSHIP_INDEX add d/DATE o/IS_ONLINE [a/ADDRESS]
-
Address field
a/ADDRESS
is listed as optional here as online interview do not require an address but offline interview does.
-
-
List interview
interview INTERNSHIP_INDEX list
-
Edit interview
interview INTERNSHIP_INDEX edit INTERVIEW_INDEX [a/ADDRESS] [d/DATE] [o/IS_ONLINE]
-
If you are editing an online interview into an offline interview, Address field
a/ADDRESS
is a requirement.
-
-
Delete interview
interview INTERNSHIP_INDEX delete INTERVIEW_INDEX
-
Examples:
-
list
interview 2 list
Lists all interviews in the 2nd internship application in the list
-
interview 2 add o/false d/05 02 2020 a/Raffles City #02-22
Adds an interview to the 2nd internship application in the list.
-
interview 2 list
interview 2 edit 1 d/05 05 2020
Edits the date of the 1st interview in the 2nd internship application in the list to05 05 2020
.
-
interview 2 list
interview 2 delete 3
Deletes the 3rd interview in the 2nd internship application in the list.
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. |
Interview and Interview Commands
Implementation
The implementation of interviews will be facilitated by two overarching components, the Model Abstract Class Interview
which is associated to an InternshipApplication
(see Model Diagram [Design-Model] ) and the Logic Classes InterviewCommandParser
and InterviewCommand
.
The Logic Classes will interact with the Interview
Classes to modify the interviews list in InternshipApplication
.
More detailed explanations will be provided in the subsequent sections.
Interview
There are two types of interviews currently available in Internship Diary:
-
Online Interview
— this type of interview will not carry an address. A placeholderAddress
"NA" will be set. -
Offline Interview
— this type of interview must have an address.
Interview
will consist of the following variables and method:
-
getIsOnline()
— abstract method that returns whether the interview is to be conducted online. -
ApplicationDate
interviewDate — indicates the date of the interview. -
Address
interviewAddress — indicates the address of the interview.
In particular, Interview
will rely on the ApplicationDate
and Address
classes in the internship package to implement
interviewDate
and interviewAddress
The class diagram below shows the classes associated to Interview
.
Interview
and its associated classesInterview Commands
Interviews can only be modified through the interview
command which relies upon InterviewCommandParser
and InterviewCommand
classes.
The interview
command will encompass four types of sub-command:
-
add
— add anInterview
to the specifiedInternshipApplication
. -
edit
— edits a specifiedInterview
that exists in the interview list in the specifiedInternshipApplication
. -
delete
— deletes a specifiedInterview
that exists in the interview list in the specifiedInternshipApplication
. -
list
— lists allInterview
in the specifiedInternshipApplication
.
Currentlylist
functions similarly toselect
, additional functions for list will be proposed in [Proposed Improvements] InterviewListCommand.
Correspondingly, the InterviewCommand
class will be made abstract with specific implementation
of each sub-command in an inheriting class, this can be seen in the diagram below.
InterviewCommand
class with its respective sub-commandsAdditionally, InterviewCommand
will implement the following static operations to facilitate sub-commands:
-
InterviewCommand#getInternshipApplication(Model, Index)
will assist all sub-commands in acquiring theInternshipApplication
to modify. -
InterviewCommand#isInterviewBeforeApplication(InternshipApplication, Interview)
will assistedit
andadd
commands in checking whether the interview occurs before the internship application.
Lastly, as the commands inherit from Command
interface, the commands will implement execute(Model)
.
All the sub-commands follow roughly the same execution sequence as seen in the diagram below.
InterviewAddCommand
The execution sequence will first modify the InternshipApplication
based on the specific sub-command.
Then followed by creating a CommandResult, and returning it.
Interview Commands Parser
InterviewCommandParser
is the entry point to all interview
sub-commands.
It will be called from `InternshipDiaryParser`which is the primary logic parser for user input.
InterviewCommandParser
will support the parsing of all four types of InterviewCommand
sub-commands.
The following activity diagram will show how InterviewCommandParser
reads and interpret user input to
return the expected sub-command.
InterviewCommandParser
when reading user inputAdditionally, InterviewCommandParser
will only be invoked within the Logic
component, with the only exception being
InterviewAddCommand.
Figure 18 will show the general invocation format within the Logic
component using InterviewDeleteCommand
as an example.
While Figure 19 will show the invocation of InterviewAddCommand
which is the only sub-command that will utilise the
Model component
.
InterviewDeleteCommand
InterviewAddCommand
[Proposed Improvements] InterviewListCommand
Currently, the InterviewListCommand
is functionally similar to SelectCommand
.
In v2.0, there will be the following improvements to the InterviewListCommand
:
-
Additional parameters to filter interviews
-
New command format will be
interview INDEX list [o/IsOnline] [a/Address] [d/Date]
. -
The command will return the list of interviews consisting of only the interviews that contain the optional fields provided in the command.
-
FilteredList
fromjavafx
will be used to implement this feature.
-
Design Considerations
Aspect: How to implement interview
-
Alternative 1 (current choice in v1.4): Use an abstract class as the primary reference to Interviews. Implement types of Interview as extending classes.
-
Pros: More scalable, able to easily add new Interview types.
Easier to debug and handle exceptions. -
Cons: More classes to create and handle.
-
-
Alternative 2 (previous choice in v1.3): Use a concrete Interview class with additional variables to differentiate Interview types.
-
Pros: Easy to implement.
-
Cons: Increasing number of variables if more interview types will be added.
-
Aspect: How to implement different Interview Commands
-
Alternative 1 (current choice): Use a standardized command with sub-command type parsed as user input.
-
Pros: More streamlined, only one command.
Able to use polymorphism to share operations between commands. -
Cons: Harder to implement and document.
-
-
Alternative 2: Use separate commands for each different method of modifying interview.
-
Pros: Easy to implement.
-
Cons: Makes the user remember more commands.
Create a lot of repetition in code.
-