1. Introduction

This document provides a detailed description of my contributions to the several projects that I have been a part of over the years.
My contributions will be substantiated with relevant technical application and sources, if possible.

2. Project: PDF++

PDF++ is an application built on Java that acts as a document management system that provides some advanced features that improve the quality of life of its users.
The application has a working Graphical User Interface (GUI), built upon the JavaFX framework, that is supplemented with a Command Line Interface (CLI) to accept more specific requests by the User.
 
Although not built to its final form, it boasts a large feature set such as:

  • Adding, Moving and Deleting Documents.

  • Assigning Custom Tags to Documents.

  • Filtering Documents by Custom Tags.

  • Assigning Deadlines to Documents that provide a Visual Response to the User.

  • Permanent Encryption and Decryption of Documents such that they require set passwords to open even if accessed outside the application.

  • Merging multiple documents into a single document.

2.1. Summary of Major Contributions

My Enhancements to the Project Consists of:

  • User Interface (UI) Transformations

    • What: The UI is the main layer of PDF++ that interacts with the End-User of our platform.

    • Justification: The initial UI was insufficient in realising my vision for our application. Hence through the use of the FXML Scripting Language and JavaFX Library, I had reinvented the UI such that it would more accurately support the application and all the additional features we had planned to add to it.

    • Highlights: The UI is fully compatible with the additional features of PDF++ and would require minimal to no overhauls should any new aspects of the application require upgrading.

  • Formulation and Introduction of Find Feature

    • What: The Enhanced Find feature is one of the core features that we had planned to introduce in our application. It is a means for the target audience to search for documents not just by their file name but also by the content within them.

    • Justification: Although the application was working well as a Document Management System, analysis of the needs and wants of our target audience was necessary. Following several informal discussions, a key feature that many felt was lacking was the ability to easily find files that many, more powerful, file managers were lacking.

    • Highlights The find feature required drastic changes to the existing model components as a menial version of it was already partially implemented. As such there was key attention paid to the enhancement of the feature so as to ensure that no other features would break because of it.

2.1.1. User Guide Contributions

User Interface

The UI had to include labels that displayed the Deadlines keyed in by the User which had to reflect the duration to the due date by changing colours. The UI also needed to have a default Welcome Screen that served as a central dashboard to the User.
Furthermore, the dashboard had to be replaced with a details screen when the User interacted with one of the Files in our application.
These requirements meant that the UI had to heavily communicate with the logic and model systems in the backend to produce the required behaviours.
The relevant pull requests pertaining to this feature can be referenced in the following Github issue #152.
 
The scripted UI is attached below:

Ui
Figure 1. User Interface

To illustrate to a new User, the UI also had to be broken down into digestible chunks that could be easily comprehended by the user. As such the following diagrams were also added to the Introductory paragraphs of the User Guide.

UGAppOverview
Figure 2. User Interface Breakdown
UGPdfCard
Figure 3. Individual File Breakdown

The information was further colour coded to ensure the simplicity of the diagrammatical explanations.

Find Feature

As for the Find Feature, the main challenge was to simplify the actions carried out internally by feature. As well as explaining the enhancements done to the original find feature and what the current feature is capable of doing.
The final input to the user-guide contains detailed images that allow the user easily follow through the usage of the feature as well as understanding its capabilities. Listed below is a summarised excerpt from the User Guide.
The one of the relevant pull requests pertaining to this feature is referenced in the following Github issue #161.


Excerpt from UserGuide: Finding Content: find

The find command allows you to find for files that contain a keyword or phrase OR find files which contain the entered keyword or phrase inside it.

Format: find KEYWORD

  • KEYWORD refers to the word that you wish to search for within the files of the application.

Examples:

  • find Introduction

  • find Author: George RR Martin

Step-By-Step Guide

If, for example, you wish to locate the files that contain the word Introduction in its name or files that contain the word Introduction in its internal content. You may carry out the following steps in-order to get your desired list of files.

Step 1: Launch the application by double clicking the pdfplusplus.jar. To view the following screen.

Files you observe may be different and depends on the actions you have previously carried out on our application
UGFindFeatureImage1
Figure 4. Find Command Step 1 & Step 2

Step 2:

  • As shown by the image, your application should contain an existing list of files.

  • You are to key in the find command followed by the keyword as illustrated by the command format.

Step 3:

  • Finally, press Enter on the keyboard and give the application a short time to sieve through all the files it manages and locate the relevant ones for you.

  • Once the application is done with the task, the following screen should be visible to you.

UGFindFeatureImage2
Figure 5. Find Command Step 3

As seen in the image, the files that are relevant to your search will be displayed on the top left. These files are those that contain the keyword Introduction in its name, and files which contain the keyword within its content.

The application also shows you other useful information such as, the number of files that match the criteria you entered into the application as shown in the image above.

And with that, you have successfully utilized the find feature.

When there are many files tracked by the application or if the files tracked by the application contain many pages, the find command might take a little longer to operate. Hence if your operating system warns you that the application is not responding, please give the application some time to finish its operation.
As part of a security measure, all files that are encrypted will not be subject to the find command. This will prevent any information about your secure files from being leaked to malicious users.

2.1.2. Developer Guide Contributions

Find feature

In the developer guide, I had tried to make the explanations of the internal workings of the feature as detailed as possible with references to the connections to the various components of the application. These connections were illustrated, with attention to detail, through the use of a sequence and activity diagram.
Attached below is an excerpt containing the summarised entry of the find feature in the Developer Guide.


Current Implementation

The find feature is facilitated by FindCommand and FindCommandParser. This feature lists a subset of all the files in the application based on the keyword(s) provided. Using the keyword(s), the application will check the names of all files, as well as the content of the text within the files prior to revealing the results.

The find feature has the following syntax:

Format: find <KEYWORD> …​

  • <KEYWORD> refers to the word that the application will use as a reference to find files. There must be at least one provided.

Example: * find Resume * find Introduction

Feature Breakdown
FindCommandActivityDiagram
Figure 6. Find Command Activity Diagram

The following image briefly summarises the interactions of the find command with some of its immediate components.

FindCommandSequenceDiagram
Figure 7. General Internal Illustration of Find Command.

When the user enters the CLI Input for the find command, the command is first passed from the LogicManager to the PdfBookParser will carry out the following steps.

  1. The user inputs a request to find a keyword within the files of the application. e.g. find keyword.

  2. The PdfBookParser creates a new FindCommandParser upon recognising that the user wishes to use the find feature.

  3. Parse method within the FindCommandParser would create a NameContainsKeywordPredicate which will allow the Model to filter its list of files to show the user the requested files.

  4. Finally, the FindCommand object is returned to the LogicManager.

Upon receiving the FindCommand from the PdfBookParser the following steps are carried out.

  1. The execute method is invoked from the LogicManager with the parameters of model and history.

  2. The model then uses the NameContainsKeywordPredicate and runs the test method to check each file and verify that it fulfils the predicate. This is so that the model can update itself to present the list of files that the user wishes to view.

  3. The test method invokes classes from the external Apache PDFBox library, namely PDDocument and PDFTextStripper to extract the contents of the existing files.

  4. The extracted content is then checked to verify if it contains the keyword input by the user.

  5. Further checks are also done to confirm if each file’s name contains the keyword as well.

  6. The model then updates itself and stores the current action in the history object.

  7. Finally, the FindCommand returns a CommandResult back to the LogicManager for follow up action.

This is a brief explanation of the inner workings of the FindCommmand and its execution method.

Considerations

Our application also implements several security features such as the ability of users to Encrypt and Decrypt their files. Hence, a major security concern was to prevent the FindCommand from searching through the contents of files that are previously encrypted. This is crucial to prevent the leakage of data as malicious users might simply utilize the FindCommand to extract information from the tracked files.

Future Implementation
  1. The main issue with the current implementation of the FindCommand is its slow speeds with respect to large files or files that contain a large string of text files. Hence, a possible consideration you might wish to improve upon is to "upgrade" this feature by improving its speed of this feature.

  2. Yet another enhancement to this feature you might wish to implement is the use of Optical Image Recognition, otherwise known as OCR. This will allow the application to translate images within the file to words which would further improve the ability of the application to look through content even if they are images.


2.2. Summary of Minor Contributions

Apart from the main contributions to the project, there were several smaller contributions that were critical in ensuring that the product works as advertised. Some of which are listed below.

  • Setup JSON file storage format for the revamped project.

  • Implemented the Add Command for both GUI and CLI mode. #141

  • Implemented the GUI Mode for the Move Command. #144

  • Implementation of a majority of the TestCases as well as revamping old TestCases from the previous project to suite new project direction. #218

  • Proof-Reading and Enhancement of the Entire User-Guide Document. #313

  • Several Developer Guide Entries #316