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 andJavaFX
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:
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
-
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 |
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.
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
find
a keyword within the files of the application. e.g.find keyword
. -
The
PdfBookParser
creates a newFindCommandParser
upon recognising that the user wishes to use thefind
feature. -
Parse method within the
FindCommandParser
would create aNameContainsKeywordPredicate
which will allow theModel
to filter its list of files to show the user the requested files. -
Finally, the
FindCommand
object is returned to theLogicManager
.
Upon receiving the FindCommand
from the PdfBookParser
the following steps are carried out.
-
The
execute
method is invoked from theLogicManager
with the parameters ofmodel
andhistory
. -
The
model
then uses theNameContainsKeywordPredicate
and runs thetest
method to check each file and verify that it fulfils the predicate. This is so that themodel
can update itself to present the list of files that the user wishes to view. -
The
test
method invokes classes from the external Apache PDFBox library, namelyPDDocument
andPDFTextStripper
to extract the contents of the existing files. -
The extracted content is then checked to verify if it contains the
keyword
input by the user. -
Further checks are also done to confirm if each file’s name contains the
keyword
as well. -
The
model
then updates itself and stores the current action in thehistory
object. -
Finally, the
FindCommand
returns aCommandResult
back to theLogicManager
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
-
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. -
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