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
FXMLScripting Language andJavaFXLibrary, 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
modelcomponents 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:
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.
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
-
KEYWORDrefers 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 |
Step 2:
-
As shown by the image, your application should contain an existing list of files.
-
You are to key in the
findcommand followed by the keyword as illustrated by the command format.
Step 3:
-
Finally, press
Enteron 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.
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
The following image briefly summarises the interactions of the find command with
some of its immediate components.
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.
-
The user inputs a request to
finda keyword within the files of the application. e.g.find keyword. -
The
PdfBookParsercreates a newFindCommandParserupon recognising that the user wishes to use thefindfeature. -
Parse method within the
FindCommandParserwould create aNameContainsKeywordPredicatewhich will allow theModelto filter its list of files to show the user the requested files. -
Finally, the
FindCommandobject is returned to theLogicManager.
Upon receiving the FindCommand from the PdfBookParser the following steps are carried out.
-
The
executemethod is invoked from theLogicManagerwith the parameters ofmodelandhistory. -
The
modelthen uses theNameContainsKeywordPredicateand runs thetestmethod to check each file and verify that it fulfils the predicate. This is so that themodelcan update itself to present the list of files that the user wishes to view. -
The
testmethod invokes classes from the external Apache PDFBox library, namelyPDDocumentandPDFTextStripperto extract the contents of the existing files. -
The extracted content is then checked to verify if it contains the
keywordinput by the user. -
Further checks are also done to confirm if each file’s name contains the
keywordas well. -
The
modelthen updates itself and stores the current action in thehistoryobject. -
Finally, the
FindCommandreturns aCommandResultback to theLogicManagerfor 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
-
The main issue with the current implementation of the
FindCommandis 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. -
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
JSONfile storage format for the revamped project. -
Implemented the
AddCommand 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