Bharath's Project Portfolio Page
Project: DonnaFin.io
DonnaFin.io is a desktop address book application used by financial advisors to keep track of their client information and related tasks. This is a Java program with about 10 kloc with a JavaFX GUI. The ‘.io’ in our name is a reflection of our belief that you deserve a faster workflow for input and output. If you can type fast, you can use our CLI-like commands to manage and view your notes, upcoming meetings and todo lists much faster than your typical customer relationship manager apps.
Given below are my contributions to the project.
- New Feature:
- What it does:
- Justification:
- Highlights:
- Credits: {mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}
- Support passing instructions to
UifromCommands- Uses functional programming to hand a callback from the result of command execution (
CommandResult.uiAction : Consumer<Ui>) that can perform the necessary side effect inUi - Our application’s front end is getting steadily more complex and our commands need to be able to execute actual functions on
Ui. However, other solutions would require global variables or drilling down a reference toUiintoCommand. A simpler and cleaner workaround was to use functions as a first class object to instructUion the appropriate actions (show help / exit / show client view, etc) - Created when it was necessary to implement the
ClientViewmode in UI (Showing a single client’s information in a dedicated view for the user to edit and interact with). #67
- Uses functional programming to hand a callback from the result of command execution (
- Allow user to edit information directly in the Client View
- The user must be able to cycle through the different attributes (presented in a row format), and edit as necessary.
- As this is a critical part of our functionality, we need this to be intuitive and easy to use.
- Using
EventHandlers to great effect within text fields to support highlighting outer parent elements.
- Add
SwitchTabCommandthat allows for CLI navigation through the different tabs. #148- User must easily be able to cycle through contact information, policy table, asset table etc
- Needs to be a simple and easy to use command in the command bar.
- Create a generic class to create tables for Client View tabs on Polices, Assets, Liabilities to support future extension. #125, #154, #156
- Create a JavaFX component that can create a fully functional and rich table for any data class.
- Made the entire front end for the yet-to-be-completed
Policy,AssetandLiabilityclasses as they all share a similar format of being represented in a table. - Makes good use of software engineering principles:
- Open-Closed Principle: Open for configuring and extension but closed to modification. All instances of
AttributeTableis configured byTableConfigandColumnConfigandAggregatorto accept any manner of data classes. - Encapsulate and support creation of configuration data class in a manner similar to many open source modules (e.g. JavaScript modules like axios);
- Open-Closed Principle: Open for configuring and extension but closed to modification. All instances of
- Re-organise application architecture by separating
StorageandLogic#18, #17- Improves overall architecture by decoupling
StorageandLogicensuring allStoragecalls go throughModellayer to follow the layered architecture style1 - The layered architecture design pattern was chosen over the current Model-View-Controller architecture in a previous team meeting to reduce complexity, simplify working on components and improve testability.
- Improves overall architecture by decoupling
- Add automated GUI tests for DonnaFin
- Automated checks can be run on Gradle builds Github CI/CD to confirm validity of
.fxmlfiles and GUI logic. - Prevents unusable GUI changes from being added to the codebase.
- Required spending a significant amount of time learning and understanding Java GUI testing with TestFx, adapting boilerplate and common functions from SE-EDU AB4. At all steps, this needed to support the new file structure and dependencies. #132 #134
- Adapted from the SE-EDU: Address Book 4 codebase
- Automated checks can be run on Gradle builds Github CI/CD to confirm validity of
-
Code contributed: RepoSense link
- Project management:
- Manage CI / CD to consistently check and ensure repo code quality and automated testing success
- Provided constructive feedback to PRs
-
Enhancements to existing features:
- Improve UI for user.
- Enable responsive resizing of
AttributePanelwhen window size changes inClientView#99 - Show the user a focus indicator when the tabs are being selected in
ClientView#101 - Have the ‘button-like’ tab buttons trigger the ‘switch tab’ command (e.g. clicking ‘Policies’ tab should be same as typing
tab p) #148 - Fix weird and obscure JavaFX lab with use of asynchronous programming #166
- Enable responsive resizing of
- Add additional tests
- Create additional tools that help developers
- Improve UI for user.
- Documentation:
- Community:
- Explaining why I think Java’s Stream implementation makes using multiple Scanners very bug-prone (#78)
- Clarifying the difference between
Platform.exit()andSystem.exitin JavaFX (#174) - Optimising CI tasks to run only on Linux where helpful (#200)
- Reminding people of checkstyle gaps (#169)
- Offering a tip for people who like to make many commits (#139)
- Tools:
- Used Figma to wireframe the user pathway to ‘single client view’.
- Automatically trim trailing spaces with a Github action #111