We wanted to develop this app to automate releasing print jobs to Purdue printers. The idea was to make an app that can print any type of document and release it to the right printing email. Ideally, the app can expand to have even more functionality and integration points to make it more useful.
What it does
Essentially, the application sends an email on behalf of a user. The user logs in and then chooses some documents to print. Once he or she clicks submit, the documents are attached to an email and then sent to the appropriate printing destination.
How I built it
The UI was all written in JavaFX. We used Scene Builder (a WYSIWYG editor) to design the layout of the applications. We then connected the layouts to controllers to handle frontend logic. All of the frontend logics is provided by a few services that are provided via Google Guice dependency injection. The backend consists of an Authentication service that leverages Microsoft Authentication Library (msal4j) to direct the user to a browser to acquire an OAuth2.0 access token. That token is then used in our Email service, which reads in files and formats email messages that are then sent to the Microsoft Graph API via okhttp. Our application is registered in Azure Active directory and allows purdue.edu users only. We used git and github for vcs and repository management respectively. We used maven to automate builds.
Challenges I ran into
Our main challenge was working with JavaFX. The toolkit isn't super intuitive and had a bit of a learning curve. In addition, we had some project structure issues. Mainly, our Java14 module configuration broke things, and we had circular maven dependencies that were confusing to resolve. In addition, integrating authentication was also difficult.
Accomplishments that I'm proud of
I am proud that we got as far as we did. At around 6pm, it seemed that we were desperately behind. However, after grinding for a few more hours, we got close to having a working application. It was exciting to get that much done in a day.
What I learned
I learned about some technologies that I haven't used before. I learned how to use Google Guice and JavaFX. Aside from technology, I learned that projects that really come together if people work hard enough. Although it may seem that you are hopelessly behind, all it takes is a few breakthroughs and then you're back on track.
What's next for EZPrint
We hope to integrate a feature that converts word documents or other text documents to PDF so that they can be printed as well. We also have a number of cosmetic changes and small bug fixes to take care of. In the future, we think it would be interesting to integrate into Google Drive and One Drive to be able to print documents that are not stored locally.