• No results found

Facility Management. by Michael Beno

N/A
N/A
Protected

Academic year: 2021

Share "Facility Management. by Michael Beno"

Copied!
73
0
0

Loading.... (view fulltext now)

Full text

(1)

Facility Management

by

Michael Beno

This thesis has been submitted in partial fulfillment for the degree of Bachelor of Science in Software Development

in the

Faculty of Engineering and Science Department of Computer Science

(2)

Declaration of Authorship

I, Michael Beno, declare that this thesis titled, ‘Facility Management’ and the work presented in it are my own. I confirm that:

 This work was done wholly or mainly while in candidature for an undergraduate

degree at Cork Institute of Technology.

 Where any part of this thesis has previously been submitted for a degree or any

other qualification at Cork Institute of Technology or any other institution, this has been clearly stated.

 Where I have consulted the published work of others, this is always clearly

at-tributed.

 Where I have quoted from the work of others, the source is always given. With

the exception of such quotations, this project report is entirely my own work.

 I have acknowledged all main sources of help.

 Where the thesis is based on work done by myself jointly with others, I have made

clear exactly what was done by others and what I have contributed myself.

Signed:

Date:

(3)

CORK INSTITUTE OF TECHNOLOGY

Abstract

Faculty of Engineering and Science Department of Computer Science

Bachelor of Science

by Michael Beno

This facility management has been developed to satisfy the requirement of the Commu-nity Centre for use by the facility administrator.

It features a highly usable interface with which allows adding, removing or updating plugins during the runtime.

Each plugin featuring own features that work independently on each other. Plugins together use a single database that they access with tools from the main application and resources provided by the main application, such as a calendar and notifications. This standalone application will greatly improve administrators performance and saving the time, allows set long term reminders in the todo list and easily finding them in the Calendar, tracking down possible hazards with solution advice.

An administrator can easily create an inventory list and track all items, setting the maintenance schedule for each item with tracking in maintenance history.

(4)

Acknowledgements

I would like to thank my supervisor Oonagh O’Brien. Special thanks to Tracton Arts Community Centre (TACC) administrator Lynda O’Flaherty, my family and friends for their support in difficult times throughout the year.

(5)

Contents

Declaration of Authorship i

Abstract ii

Acknowledgements iii

List of Figures vii

List of Tables x

Abbreviations xi

1 Introduction 1

1.1 Motivation . . . 1

1.2 Contribution . . . 2

1.3 Structure of This Document . . . 3

2 Background 4 2.1 Similar products on the market . . . 4

2.1.1 Most usable . . . 4

2.1.2 Most customizable . . . 5

2.1.3 Free version . . . 6

3 Facility Management 8 3.1 Definition . . . 8

3.1.1 Health and Safety advice . . . 8

3.1.2 Tracking Hazards and Calendar . . . 8

3.1.3 Being updated . . . 9 3.1.4 Denial Of Service . . . 9 3.2 Objectives . . . 9 3.2.1 Module Manager . . . 9 3.2.2 Client application . . . 10 3.2.3 Hazard Application . . . 12 3.2.4 Calendar Application . . . 13 3.2.5 Inventory Application . . . 14 iv

(6)

Contents v 3.2.6 Notifications . . . 14 3.2.7 Control Panel . . . 15 3.2.8 Embedded SQL database . . . 15 3.3 Functional Requirements . . . 15 3.4 Non-Functional Requirements . . . 16 4 Implementation Approach 18 4.1 Architecture . . . 18

4.2 Methodology and Implementation Plan Schedule . . . 19

4.3 Prototype . . . 22

5 Implementation 25 5.1 Difficulties Encountered . . . 25

5.1.1 Project setup (hard) . . . 25

5.1.2 Combining Spring with JavaFX (hard) . . . 26

5.1.3 Java Persistence (easy) . . . 26

5.1.4 System Tray (medium) . . . 27

5.1.5 Threads (easy) . . . 28

5.1.6 JavaFX View (medium) . . . 28

5.1.6.1 Illness (hard) . . . 28

5.1.7 Breakdown (medium) . . . 28

5.2 Actual Solution Approach . . . 29

5.2.1 Project Setup . . . 29

5.2.2 Data collection . . . 30

5.2.3 Database - Dataset plugin . . . 31

5.2.4 View For Each Plugin - Skeleton . . . 31

5.2.5 Main - Base application . . . 31

5.2.6 Hazard Application . . . 31 5.2.6.1 Previous Design . . . 32 5.2.6.2 Actual Design . . . 35 5.2.7 Hazard Settings . . . 37 5.2.8 Module Manager . . . 40 5.2.9 To Do Now . . . 42 5.2.10 Calendar . . . 43 5.2.11 System Tray . . . 45 5.2.12 Threads . . . 46

6 Testing and Evaluation 47 6.1 System Testing . . . 47

6.1.1 Responsive Layout . . . 47

6.1.2 Equal frame size and position . . . 47

6.1.3 All plugins starting and exiting . . . 47

6.2 JUnit Testing . . . 48

6.3 Debug . . . 50

6.3.1 TO-DO Panel Is Not Responsive . . . 50

6.3.2 Horizontal Scrollbar . . . 51

(7)

Contents vi

6.3.4 Frames Not Consistent . . . 52

7 Discussion and Conclusions 53 7.1 Solution Review . . . 53 7.2 Project Review . . . 54 7.3 Conclusion . . . 54 7.4 Future Work . . . 54 Bibliography 55 A Code Snippets 56 B Wireframe Models 57 C Class Diagram 58 D JavaDoc 59 E Line Count 60

(8)

List of Figures

1.1 Graphic pattern . . . 2

2.1 AnyTime Organizer Deluxe 15 . . . 5

2.2 Notes Browser . . . 6

2.3 AllMyNotes Organizer . . . 7

3.1 Module Manager layout . . . 10

3.2 Client Application layout . . . 11

3.3 Module Manager layout . . . 11

3.4 List of Hazards . . . 12

3.5 Hazard Application Layout . . . 13

3.6 Calendar Application Layout . . . 13

3.7 Notifications . . . 15

4.1 phpMyAdmin on server . . . 18

4.2 Web server . . . 19

4.3 Entities . . . 19

4.4 Opening application from application code . . . 20

4.5 Download from GitHub code . . . 21

4.6 Unzip code . . . 21

4.7 Main Application . . . 22 vii

(9)

List of Figures viii

4.8 Another App opened from Main App . . . 22

4.9 Main Application - full screen . . . 23

4.10 Module Manager . . . 23

4.11 Hazard Application . . . 24

4.12 Inventory Application . . . 24

5.1 No System Tray support . . . 27

5.2 Terminating Spring . . . 27

5.3 Packages . . . 30

5.4 Base Application . . . 31

5.5 Hazard - previous design . . . 32

5.6 Applicable Category with not checked Hazard . . . 33

5.7 Not Applicable Category with not checked disabled Hazard . . . 33

5.8 Custom Category . . . 34

5.9 Hazard app without events . . . 35

5.10 Hazard app event setting . . . 36

5.11 Hazard app with events . . . 37

5.12 Adding Custom Category Wireframe . . . 38

5.13 Hazard Settings - evaluation . . . 40

5.14 Module Manager . . . 41

5.15 Loading Dataset . . . 41

5.16 Module Manager Plugins Installed . . . 42

5.17 Hazard Settings - evaluation . . . 43

5.18 Hazard Settings - evaluation . . . 44

5.19 System Tray . . . 45

(10)

List of Tables ix

6.1 Threads - Testing . . . 48

6.2 Clean Exit . . . 48

6.3 JUnit Test . . . 49

6.4 TO-DO Panel Is Not Responsive . . . 50

6.5 Hazard Settings - evaluation . . . 51

6.6 Passing current size to the new Scene . . . 52

B.1 Calendar Wireframe . . . 57

B.2 Notification Prototype . . . 57

B.3 System Tray Prototype . . . 57

C.1 Class Diagram . . . 58

D.1 JavaDoc . . . 59

E.1 Lines of Java code count, without blank lines, excluding XML and con-figuration . . . 60 E.2 Lines of Java code count, with blank lines, excluding XML and configuration 60

(11)

List of Tables

(12)

Abbreviations

API Application Programming Interface CSS Cascading Style Sheets

DAO Data Access Oobject

FXML [EFF]-[ECTS] Markup Language GBP Great British Pound sterling GUI List Abbreviations Here HCI Human Computer Interaction HSA Health and Safety Authority IP Internet Protocol

JDBC Java Database Connectivity

NASCAR National Association for Stock Car Auto Racing NBA National Basketball Assosiation

NHL National Hockey League MS Microsoft

OS Operating System

PHP (recursive acronym) Hypertext Preprocessor REST Representational State Transfer

SSL Secure Sockets Layer STS Spring Tools Suite USD United States Dollars

XML Extensible Markup Language

(13)

For/Dedicated to/To my. . .

(14)

Chapter 1

Introduction

For my final year project, I have been asked by my former employer from Community Centre whom I worked in 2015, to develop a Facility Management application, which will join multiple reminding applications; with basic features from multiple providers currently being used, the pen and paper with a ”sticky notes” into the single one.

1.1

Motivation

As an assistant administrator in 2015, I was found that Tracton Arts Community Centre with Inkwell Theatre is a very busy place located in the village I am currently living since 2013 which providing activities, makes events and festivals for surrounding towns and villages. The administrator is being overwhelmed with running the facility, dealing with businesses and managing events. On top of that must keep this place safe for staff and visitors. By Health Service Authority every public facility has to beware of certain health hazards. The Community Centre belongs up to 70 different risks and each has about 20 recommendations to keep the facility a safe environment. The administrator using many applications and old fashion way of taking reminders or to-dos by pen and paper, on the sticky notes and keeping records in multiple places. When plans are made then each application has to be opened and check if there aren’t any clashes.

Also, there wasn’t found any suitable free application, easy to use and usable with absent of internet as Administrator need access to the data off-line. The problem is: If the application is free, it has limited features and paid application are too bulky and difficult to use. Finance applications dealing with finance are suitable for an accountant, they are complex, not free, and usually not featuring with a reminder. Web apps need internet to operate. ”It would be great to have everything in one place”, said facility

(15)

Introduction 2 administrator one day, ”it would be a big improvement”. It is very difficult to run the business in one person and keeping all health and safety standards. One mistake may lead to close down this facility. My mission now is to create an application, which will be free with no additional cost for hosting, easy to use and tailored to Administrators needs. An application which can be easily extended with more features in the future, with an intuitive user interface, easy to use and tailored to the user.

I hope that my application will have a hugely positive impact on users performance and will improve health and safety in the community centre.

1.2

Contribution

Shell the Facility Manager is a component application which can add or remove micro apps (components/modules/plugins). All modules with features can be easily removed, installed and updated when needed. It will overall make application simple, easy to use and tailored to the user.

This project has the main focus on usability matching the highest standards. The HCI (Human-Computer Interface) skills are contributed here. The GUI (Graphical User Interface) is contributing graphical design commonly used in many applications e.g. in Microsoft Windows Settings, Google Gmail or Play... to increase usability. Design is written in Swing and FXML with CSS, contributing following developing tools like NetBeans, Eclipse and Scenebuilder.

Figure 1.1: Graphic pattern

Model and Controller are developed in Java Object Oriented programming language and modular programming is applied. It means that application is split into many independent programs which can be added, removed or updated during the runtime. The Introduction core Application is deployed and runnable under the MS Windows

(16)

Introduction 3 contributing Treads in Thread-safe environment. Each module contributing from the local Sqlite (SQL) database using JDBC. This database is the key to the project thus is well made and normalized. Because modular programming is used, the SQL is also modular and queries are injected from and to other plugins. For that reason, extra care has to be made to sanitize inputs and outputs. Also, each module will be encrypted for security reasons to assure the integrity of each file.

Java IO and Sockets will be used for backup up and restored to the external device, for downloading plugins, unzipping and implementing in runtime from network storage. Java Mail will be used for registration and forgot password request. As a central DB storage will be used MySQL Database installed on a server and synchronized with lo-cal (operational) Sqlite database, provide and accepting data to external equipments aka mobile QR or Barcode scanner, internet communication (from an email can user reached the web service which contributing PHP to make changes in MySQL DB thus PHPMyAdmin will be installed on the server too). This central (server) DB will be communicated with external and local sources via web services written in PHP and will be the main backup storage. The barcode Scanner plugin is made in Android Studio in Java with XML, Java Socket for direct communication with the computer and RESTful API written in PHP to connect with a remote database.

1.3

Structure of This Document

Chapter 2 contains research, comparing products on the market and the reason why they are unsuitable.

Chapter 3 explaining how the final product should look like graphically with wireframes and its functionality.

(17)

Chapter 2

Background

2.1

Similar products on the market

From available products, I am trying to find the one which has all features which user may need and learn from concurrence.

2.1.1 Most usable

According to IndividualSoftware.com the AnyTime Organizer Deluxe 15[1] windows ap-plication the best Organizer and right choice for any busy business and the best Overall application.

AnyTime Organizer has every tool you need to organize your personal and professional life. Your calendar, to-do list, address book, and notebook are combined into a simple and familiar interface! Access expense reports, password organizer, world clocks and timers, and the ability to synchronize with your mobile device. Colour code different areas of your life work, personal, other then view your appointments, contacts, to-dos, and more for those areas separately or at the same time. Let AnyTime Organizer help you manage your life at work and home!

(18)

Background 5

Figure 2.1: AnyTime Organizer Deluxe 15[1]

This application is very powerful with almost all the features that Administrator may need and many of them may never have been used. e.g. Driving direction, having a downloadable calendar of NBA, NHL, NASCAR season schedule, 3000 layouts for printing designs or capturing billable time.

This would be the right candidate of its usability if there would be a way to manage Hazards and application contains inventory management instead of unwanted features. Also, there is the fact that the application is 34.72 GBP.

2.1.2 Most customizable

Next similar application would be Notes Browser[2], which is is a customizable appli-cation where can be stored up to 60 Categories, which would be perfect for scheduling hazards with reminders and suit Administrators needs.

(19)

Background 6

Figure 2.2: Notes Browser[2]

However, setting up the application is very complicated, confused and difficult to use. The Administrator currently dealing with 70 different categories of hazards, thus 60 wouldn’t be enough. Also, this application can deal with the finance part and managing the inventory. This application can be bought with 59 USD.

2.1.3 Free version

All My Notes Organizer[3] claims the most secure application because your data are stored on your machine. The interface is customizable thus background and text colours (UK spelling) with a variety of fonts can be set up. The todo list can be customized and images can be placed. The finance and Hazards could be set up too as to-do lists. But free version can do only basic note-taking, not contain finance and deluxe features like Trip information, Organizing Wikipedia and not providing Gift ideas, Bible quotes or Tv programs which can be found in deluxe edition for 34 USD. The Administrator would then getting many unwanted features and not having the Inventory list. Having bloaty software which will take some time to get used to it.

(20)

Background 7

Figure 2.3: AllMyNotes Organizer[3]

From the above research was found that free applications can be upgraded by deleting existing application and version with more features replacing the existing one. There can be limited space for reminders and when users exceed these numbers, the application will ask for a paid upgrade. Some application coming as freemium, where features are in present but locked. The user can pay the feature if need e.g. colour coded tags.

(21)

Chapter 3

Facility Management

The application will replace paperwork and turn it into the digital form. Saving the time with tracking previous work with advice to the next step.

3.1

Definition

The Community Centre Administrator need to know what type of hazards currently occurs, thus need advice from HSA, visit beSmart.ie, identify the hazard and take the notes. For each note then need to be found a solution, set maintenance, when it was done, by who, when it due next. The Facility Management Application will do it easily and fast.

3.1.1 Health and Safety advice

The information with advice is taken from beSmart.ie webpages. The user will just install a plugin with valid data for the Community Centre.

This will appear in Hazard application, where check-up and maintenance can be set for each hazard when service was done, how much it was, by who and when it due next.

3.1.2 Tracking Hazards and Calendar

For each service, maintenance or check-up can be set a reminder and history is kept. This can found in the Calendar application. There also can be set miscellaneous reminders e.g. get paper for the printer.

(22)

Problem Statement 9

3.1.3 Being updated

Assuming that regulations may be changing and future requirements for application the user can download and update in Module Manager Application. It could either new Hazard Advice, plugin, update for an existing application or another application. There is also no need for reinstalling the whole application in each update because the main application will download and replace just application or data its concern from the internet.

3.1.4 Denial Of Service

The user can reach data anytime and anywhere in or outside buildings without worrying about Denial Of Service e.g. committees cancelled the web-server hosting, terms and condition changed or other reason.

3.2

Objectives

3.2.1 Module Manager

The reason for modular application is to achieve scalability. The stakeholder is look-ing for a very complex application wherein every meetlook-ing is found a new functionality or features which would be handy to have. Completing this application is not achiev-able in that short amount of time. Also, the application will be developed ”on the go” and many updates will be done, thus modularity will bring scalability without unin-stalling/installing the whole application. Each module is independent so in case of a bug, the error could be found in the latest update.

(23)

Problem Statement 10

Figure 3.1: Module Manager layout

In this section, the user may add remove or update micro-applications and check for availability. Each micro-application can be installed itself from the repository and fully integrate into the system.

3.2.2 Client application

To meet stakeholder criteria where client application must run under the Operation System, so it is a downloadable application for MS Windows OS which acts as an ”envelope” for the downloadable micro applications. It displays only reminders in very intuitive GUI in case there is no content downloaded yet.

(24)

Problem Statement 11

Figure 3.2: Module Manager layout

Each downloaded module extends the main application of its features and view, which is consistent with each other micro applications. On the dashboard are placed icons which brings the user into the micro-applications.

(25)

Problem Statement 12 In the top bar are placed buttons. (From right to left) The user User Name Will display the name of the current user. When button clicked it will bring the user to Control Panel if this feature is installed.

To Do Now displays actual events need to be handled now. By clicking it opens the sidebar with a list of all task to be done. Each event brings the user to the micro-application which dealing with this task and this action will be solved there. The sidebar is opened at all time even another application is opened. e.g. Calendar and can be closed by clicking To Do Now button again.

The top-left button opens the Calendar application. The location is there for quick access. When the button is clicked again it will close the calendar.

3.2.3 Hazard Application

It is very difficult to run the business in one person and keeping all health and safety standards. One mistake may lead to close down this facility. Thus this micro-application is most important The Hazard App should prevent those mistakes and make managing easier. All hazards with advice are taken from BeSmart.ie.

(26)

Problem Statement 13 This Micro app managing all hazards. The user can add, remove each hazard, set a reminder for maintenance or checkup. Also, it can be tracked down when maintenance was done, by who; the name, contact number, email, what authority and its address and cost of maintenance. The Calendar acting as a filter and for easier scheduling.

Figure 3.5: Hazard Application Layout

3.2.4 Calendar Application

Displays all task in monthly view.

(27)

Problem Statement 14

3.2.5 Inventory Application

This application will have the same graphic pattern as another application. A user can set inventory number,

serial number if an item has it, item description,

location - where this item can be found, condition - excellent/good/fair,

vendor - origin where the item was bought from, date of acquisition,

item value, quantity,

expiry date - to find if the item is in warranty, discarded date,

is in warranty - this information is calculated and reminder can be set e.g. extinguisher expiry date due next week,

age - is calculated from the current and date of acquisition, total value - is calculated from the quantity and item value.

If the Hazard Application is installed and the item needs maintenance, the user can set a reminder.

3.2.6 Notifications

Because the System Tray application running in the background and is launched in Windows startup, it can deliver pop up notification as a reminder. It should deal with all scheduling tasks, like saving the log, doing the backup, syncing data... Also, the System Tray Application cannot be turned off and only one instance will be running at all times.

(28)

Problem Statement 15

Figure 3.7: Notifications

3.2.7 Control Panel

Is another application which will be dealing with main application related settings, like changing password, backing up database.

3.2.8 Embedded SQL database

To meet stakeholders criteria that data must be accessible at anytime the SQLite database will be used.

3.3

Functional Requirements

User can install an app - going to web page

- download app from web page - execute a downloaded installer

User can install, update, remove a module - user enters to the module centre

- select available micro application

User can use the Hazard Micro app (epic) - user can view all hazards

- user can view related content to hazard of other micro apps (e.g. items from inventory) - user can set a reminder for maintenance

- user can see advice for each hazard

User can use the Inventory Micro App (epic) - user can add an item to the inventory

- user can label an item to the relevant micro app e.g. as hazard - user can display items in inventory

(29)

Problem Statement 16 User can use the Calendar App

- user can see monthly tasks

- user can set task at the selected day - user can receive reminders from Calendar

- user can view tasks from other applications e.g. Hazard, Inventory - user can create a miscellaneous task

User can view a list of tasks User can receive notifications

User can store data in SQLite database

3.4

Non-Functional Requirements

AVAILABILITY

Because of the embedded database, the data will be available at all time. SAFETY

The database is stored on the local machine, thus mitigating exploitability. USABILITY

The GUI design is commonly used in most of today applications, thus the user doesn’t have to learn too many new things to interact with the application.

SURVIVABILITY

The application is made from independent parts, thus system continues to function and recovers in the presence of a system failure. Also, if a bug is discovered, the user will receive an update.

FLEXIBILITY

Ease with which the software can be modified to adapt to different environments, con-figurations, and user expectations

MAINTAINABILITY

If a bug is found, it can be easily tracked down which what part causing it and fixed. MODIFIABILITY

Each module can be developed and deployed separately, which is efficient and cost-effective.

(30)

Problem Statement 17 SCALABILITY

The Application is able to expand its processing capabilities upward and outward with business growth, adapt to the business regulation without offensive changes with keeping usability.

INSTALLABILITY

The application can be easily installed, uninstalled, or reinstalled into a target environ-ment.

PORTABILITY

It can be also easily transferred from its current hardware or software environment to another.

(31)

Chapter 4

Implementation Approach

4.1

Architecture

Because stakeholder looking for an application for Windows Operation System, the Java Object Oriented language would be the best solution for its cross-platform compatibility. As Integrated Development Environment was chosen NetBeans for its compatibility with SceneBuilder which will be used for Graphical User Interface. The JDBC connector will be used to connect with the SQL database.

The stakeholder doesn’t have any server or provider where a remote database with web service will be running and any decisions is dependant on the Community Council, which takes a time. For that reason, they looking for a database running only on a workstation.

Figure 4.1: phpMyAdmin on server

However, for developing and testing purposes was PHPMyAdmin installed on QNAP Network Attached Storage running Linux Operation System. The QNAP is already dealing with Dynamic Domain address forwarding, where the IP address was set up to be tested every 5 minutes and when changed is detected, the Domain Name is reassigned to this address. To achieve Secure Socket Layer (SSL) and avoid notification saying: the

(32)

Implementation Approach 19 server is not secured, the server was signed with Let’s Encrypt certificate. On the QNAP server then can be placed a downloadable content.

Figure 4.2: Web server

The reason for PHPMyAdmin is that almost every web hosting providers offering this service, thus when stakeholder changes their mind in the future the data can be easily transferred to another server.

4.2

Methodology and Implementation Plan Schedule

• Firstly, the database for Hazard Application will be created and tables Hazard Category with Hazard will be populated from the beSmart webpage. Tables Main-tainer, Maintenance, Company and Reminder table will be created and populated with testing data. Then queries for this application will be created and tested in the console.

Figure 4.3: Entities

• Next step will be a GUI for Hazard Application. This application is the most important thus should be done first as an independent runnable application. The application will be tested for its functionality.

(33)

Implementation Approach 20 • When Application will be working, the Notifications will be developed. It is mean, that task will be checking for tasks from Reminder Table and display it in the Notification List in the Main Application.

• Calendar Application will be developed after, where accepting a longer time will take to create GUI to display a calendar and task for each day.

• Inventory Application is another independent application which will be developed as a separate runnable application. The table Inventory will be created. Graphical design will be the same as Hazard App, thus there shouldn’t be any problems to develop this App.

• The Task Application which will be running on the background will be contribut-ing Threads, there my a problem to achieve functionality in JavaFX Threat Safe Environment.

• During development, all steps need to be tracked down and to be done program-matically. e.g. Hazard data will be created as a plugin. When the user installs this plugin, the tables will be created and altered and data will be populated during the runtime. It will be same for each application. The user will see an installation, but the database will be altered on the background.

• The last thing is putting everything together in the Main Application, where each app will have a launcher. This code will be used to achieve that.

Figure 4.4: Opening application from application code

(34)

Implementation Approach 21

Figure 4.5: Download from GitHub code

• File from GitHub was successfully downloaded as a zip file and extracted using JavaZIP.

Figure 4.6: Unzip code

• Project managing approach will be Scrum. The weekly meetings will be arranged with stakeholder. In case of emergency, we will be communicating by email or phone.

(35)

Implementation Approach 22

4.3

Prototype

Figure 4.7: Main Application

(36)

Implementation Approach 23

Figure 4.9: Main Application - full screen

(37)

Implementation Approach 24

Figure 4.11: Hazard Application

(38)

Chapter 5

Implementation

In this project were almost all goals reached as planned in the research phase, because proof of concept was done before implementation. However, one feature which would be a big advantage and great improvement in future work weren’t implemented yet, for a big problem at the beginning of implementation, thus a different approach was used for project setup. However, the stakeholder was looking for an application for MS Windows which deals with Hazards and this was achieved.

5.1

Difficulties Encountered

5.1.1 Project setup (hard)

In my proof of concept, I created the main application in JavaFX which was acting as a launcher for other applications/plugins. This solution was working perfectly, but later on, when JavaFX was combined with Spring there were found 3 problems. - When the button was clicked to open another plugin, then for some reason the new instance of Spring was waiting until the previous instance was terminated.

- The startup of Spring takes about 10 seconds where a user isn’t notified, thus extra solution e.g. adding Threads would be used to notify the user, which would bring an extra difficulty to implement.

- The testing and debugging would be very difficult because each plugging is a separate project and for each has to be separate tests written.

It was too risky looking for a different approach to achieve those goals while it consumed a lot of time already. The solution would be closing one instance and opening another

(39)

Project Implementation 26 one with a 10 seconds gap between each action. Where one window is closed and in 10second another window is opened, but it isn’t aesthetically good.

For those reasons I created a single project and developing each plugin in a separate package to possibly return to the original approach if a solution were found. The project is running a single instance of Spring so the user must wait for a ten-second just once. By changing approach this way it brings easier testing, debugging and absence switching between projects. Just one JUnit test was created to test all plugins at once.

5.1.2 Combining Spring with JavaFX (hard)

At the beginning were two projects created. The Spring with JPA and Hibernate con-nection to the SQLite database initiated in the Spring Tools Suite and JavaFX views with controllers started in NetBeans because we cant create JavaFX projects in STS and vice versa. Each concept was tested and working, however, I was dealing with big difficulty to put them together.

I did try every combination of all methods, and it was just one working. Firstly, a new Spring project with JPA Hibernate and SQLite was created in the STS. Then this project was imported to the NetBeans where were added new controllers FXML views and initialization in the main method. Finally, the Spring must be executed before JavaFX, otherwise, the application wont start.

After those trials and errors, the goal was achieved without workarounds but took five times more time than accepted.

5.1.3 Java Persistence (easy)

Doing Java Persistence was new to me. There are not many tutorials on the internet, thus it took a while to learn it. One problem which needs attention is an automatic dropping all tables on application startup. It was an advantage at the beginning as Spring was dropping tables for me which saves my time during the testing. However, a user needs to store data permanently. It took some research to find that it must be set in the configuration file. [5]

When the configuration file was set correctly the data were saved in the database per-manently.

(40)

Project Implementation 27

5.1.4 System Tray (medium)

The System Tray is developed in JavaAWT contributing Swing Thread for Pop-up mes-sages. It was tested with JavaFX and working without issues, but the problem was found when Spring with JavaFX was added together. The exception was thrown that Tray is not supported even if it previously works.

Figure 5.1: No System Tray support

The JavaFX, AWT and Spring must start in that order, otherwise, the exception is thrown. But the application wont start if the Spring is not running. From previous experience when I was adding JavaFX into the Spring project to solve this issue it took just a little while to make it work. Finally, the problem was solved when the Spring was placed into the thread.

Figure 5.2: Terminating Spring

When each platform is executed in the right order it also solves the problem with the 10-second problem. Because JavaFX doesn’t have to wait for Spring to boot up, the view is presented to the user nearly immediately and allows it to implement an indicator that the application is loading. I also have to make sure that a user will not crush the application by making a request or exit an app before Spring isn’t fully up and running. After all, the result is even better than accepted.

(41)

Project Implementation 28

5.1.5 Threads (easy)

From previous experience with threads in JavaFX, it was found that there is a problem with concurrency so Schedule or Task must be used, thus I was accepting some issues during implementation.[6]

The project is using one Thread for JavaFX, different for starting Spring, another for running Spring, then AWT Tray and each plugin use extra thread for checking and updating To-Do list.

Managing all those threads is difficult to make sure that same thread is not starting multiple times and most important is terminating all on exit.

5.1.6 JavaFX View (medium)

Most of the applications running under the Windows OS have a fixed size of frames or not using full width when maximized. From the first time, I was trying to create a responsive application. This technology was new to me, thus I was learning all the way. The application is now responsive and works as planned.

5.1.6.1 Illness (hard)

The most difficult thing for a developer is being ill. I was dealing with that problem for about 10 days, where I was unable to focus on the project and college work. Fortunately, all major difficulties with development were solved earlier thus there were no roadblocks or risks ahead. For that reason, I didn’t complete two sprints where a lot of work wasn’t done. Also in the meantime, the other work, assignments, were piling up. It was extremely hard to distribute effort to all renounces and get back into the track.

However, the stakeholder is happy with the progress, willing to wait for the first release and looking forward to future cooperation.

5.1.7 Breakdown (medium)

The project is developed to be independent on the internet for insufficient internet service and mobile service quality. On 24th April my internet service was interrupted when the computer was making the backup of the project. The sync with the cloud failed thus progress I made past 12 hours disappeared and I couldn’t be recovered. My progress from that day was gone. Also, there was no way to contact ISP technical

(42)

Project Implementation 29 support until Monday morning and servicemen werent available until 1st of May. On top of that, all my documentations were paradoxically stored in the cloud and I couldnt reach it with other services like Canvas or Gmail. To keep me going I set my old mobile phone as an Access Point with a mobile phone placed outside the window to have better reception and repeated Wi-Fi into the laptop. The internet connection was very limited and dropping quite often because mobile reception in this area is very poor. However, it let me make some progress. The problem with an internet connection was diagnosed and fixed remotely with a technician on Monday morning, but I loose another 3 days for this issue.

5.2

Actual Solution Approach

5.2.1 Project Setup

The project was initiated as a two separate project. First one was created in the Net-Beans for JavaFX with Scenebuilder support and second project in the Spring Tools Suite for its database with JPA and Hibernate support.

I was focusing on controllers and views to give them the right functionality. The Base Netbeans project was duplicated where I created another project named Hazard. I started developing the Base and Hazard application separately where each project was created to have its own JAR file. This was working great whereby clicking on the Hazard button the Base app executed the JAR file.

Then into the each Netbeans project was integrated a Spring layer. This brought a lot of problems. At first, it took more time then I accept to marge Spring project into NetBeans.

After many trials and errors, I did open the project in Netbeans previously created in STS and copypasted controllers with views.

The problem was solved, but now it took about 10 seconds to boot up a JAR file. Thus, when I start and app, click on the Hazard button, returned to the Base app, then there was a 10-second gap between a click and opening frame. Also, the second JAR file couldnt be executed if the previous instance of Spring is running. This was patched by closing the instance before the new one was called, but it looks even worse in the user perspective. So now, when I clicked on the button the frame disappeared, then for the ten seconds nothing happens and another frame jumped up on the screen.

This arose questions: if I will do some modification in a project A to test it with project B then both must be compiled, how I will debug them? How I will observe behaviour in the console?

(43)

Project Implementation 30 To Do Now, Calendar and Systray would be created as a project; developed, tested, debugged and executed separately. Plus there still will be an aesthetic delay when switching between each module.

For those reasons, there were created 2 scenes with 2 controllers where only one instance of Sping is running and Spring Application Context is passed into the controllers. Each plugin is now placed into the separate package for easier implementation debug and testing and each module was turned into the Scene instead of a project. User doesnt have to wait when switching between the modules.

Figure 5.3: Packages

5.2.2 Data collection

One of the desired criteria was having a dataset of all possible hazards for the Community Centre. I was planning to leave it on the very end of the project and use dummy data for testing and user will receive an application where can be added hazards manually. During the meetings, the administrator prioritized this dataset, thus I decided to do it as a next step. Firstly a row text was copypasted from the BeSmart.ie into the text file. The extracted data contained unwanted text, lines, spaces and characters. For that reason an extra project was set, which cleans the text file. To the dataset was added some more categories of Bingo, Catering, Theatre and Pest control hazards which took

(44)

Project Implementation 31 extra time to make the customer happy. By this decision, I put the project at risk, but on another hand, this dataset was handy for testing in the later stage.

5.2.3 Database - Dataset plugin

A testing Spring project with JUnit test was created for this purpose, which was able to create a database and tables from collected data. It includes an SQLite, JPA and Hibernate. I was able to test and debug the database layer before implementation. Later on, it was used as a feature for the Module Manager plugin.

5.2.4 View For Each Plugin - Skeleton

For each module (Base, Module Manager, Hazard, Hazard Settings, Calendar) was de-signed separate scene in the SceneBuilder and controller was generated in the Netbeans. I made the Hazard scene first, made that responsive and test it. A copy was made and other scenes were modified from this copy. Modules are executed from the Base application and (closed) return to the Base when the back button is clicked. All scenes were placed into the project and tested if they can be entered and exited.

5.2.5 Main - Base application

Thinking of the future work I was trying to create a scalable application thus the Base acts as an envelope (a launcher) for installed plugins. When a new feature will be installed in the Module Manager a new button appears in the Base to enter the plugin.

Figure 5.4: Base Application

5.2.6 Hazard Application

This application was developed to allow a user evaluating hazards and setting a reminder for each Hazard. In the first version, the Hazard evaluation with setting reminders was

(45)

Project Implementation 32 in the same place which was difficult to use and hard to navigate for a user. Also from the developer perspective, there was the same problem. It was difficult to crating multiple expanding, shrinking ListViews and adding, removing from them. Thus after the meeting with the user where usability was discussed, we found that there can be another section providing evaluation (setting hazards) and the current section will be used for setting reminder only. In different words: in one part the user can view Hazards and Events, in the second part, a user can do an evaluation to set which Hazards are Applicable / Not Applicable at the moment.

5.2.6.1 Previous Design

Figure 5.5: Hazard - previous design

User can filter Categories (moved to Hazard Settings) User can filter categories by clicking on the left buttons:

- Applicable Categories: when this button is clicked the filtered content to Categories which are applicable for the facility is displayed e.g. there is a solid fuel pizza oven on the premise thus oven hazard is selected as applicable.

- Not Applicable Category: when this button is clicked a filtered Categories are displayed e.g. in the list is Microwave Oven Category, which is not in present on the facility at the moment but maybe bought in the near future. For that reason, the checkbox is not selected thus this category is marked as Not Applicable.

- Not Checked Categories: when dataset of Hazards is populated, then all Categories are set to Not Checked. User can decide if this category applies or not at the moment. - All Categories: provides unfiltered content of all categories.

Setting applicable / not applicable (moved to Hazard Settings)

- User can a Category as Applicable: user can expand a Category by clicking on the category and click on the checkbox to mark Category as applicable

(46)

Project Implementation 33 - User can set Hazard applicable /not applicable: by clicking on the checkbox. Each click change applicable to not applicable and vice versa. (Category must be set as applicable)

Figure 5.6: Above: Category marked as Applicable Below: not checked Hazard

- User can set Category Not Applicable: user can expand and set Category Not Applicable. Following Hazards become disable.

Setting applicable Hazard of Not applicable Category or Not checked Category cannot be done to not allow the user to make an error e.g. user can not set a reminder to buy a bin for broken glass where Broken Glass / Crockery Category is not selected.

Figure 5.7: Above: Category marked as Not Applicable Below: not checked disabled Hazard

When any checkbox is clicked the save button appears in the header. (In new version the save is done automatically when checkbox is clicked.)

(47)

Project Implementation 34 User can Add New Category (moved to Hazard Settings)

- Click on Add new category. The form 5.12 appears and the button Add new category is set disable.

- User can fill the form. When have all TextBoxes filled the button save appears on the top. When save button s clicked the new category is saved. Category created by users contains the Edit button.

Figure 5.8: Custom Category Can Be Edited

User can Edit custom Hazard (moved to Hazard Settings) - user can select a Category

- scroll to the bottom of a category to the desired Hazard - click on button edit. The delete button appears

- edit the info - edit comment

- click on the save button on the top

User can Add/Edit comment (moved to Hazard Settings) - user can select a Category

- scroll to the bottom of a category to the desired Hazard

- click on button edit. The delete button appears (only for Hazard created by user) - edit Info (editable only for Hazard created by the user)

- edit comment

- click the save button on the top

User can delete a custom comment (moved to Hazard Settings) - user can select a Category

- scroll to the bottom of a category to the desired Hazard - click on button edit. The delete button appears

- click on the delete button. The Hazard block become disabled and delete button turns to undo button

(48)

Project Implementation 35 5.2.6.2 Actual Design

The actual design seems to be much better, because a user may do an evaluation of Haz-ard just once at beginning or time to time thus this options were moved to the HazHaz-ard Settings. Now the design is more lightweight were users can see only applicable Hazards selected during evaluation. This decision was very welcome by Administrator however took a lot of working time with sleepless nights to redesign half of the project, but the application will be used the most and from now is more user friendly.

User can see all applicable hazards

Figure 5.9: Hazard app without events

This part was implemented at last. For illness, I was ten days behind in implementation phase thus this part is just minimalistic to show a demo. The FIGURE 5.9 displays all hazards at the moment, but more filters will be implemented soon like:

(49)

Project Implementation 36 - user can display Hazards with Active Reminder - it shows to the user only Hazards which aren’t done

- user can display Hazards with History - it displays any hazard which has the Tasks done

There will be also two date pickers in the left bottom corner to display Hazard with Events in range.

User can set Reminder for Hazard - User can reminder - by click on a hazard

- Set date of even - when the event appears into To Do Now - Set a short message - which appears in To Do Now

- Set a description - a long text where users can be as descriptive as they can or they can leave it blank

- Cancel or Save

Figure 5.10: Hazard app event setting

User can view Tasks - user can see both completed and not completed Reminders User can complete Tasks - beside completing Active Events from To Do list a user can click on the checkbox to complete any Task. Even those which didnt appears in To Do Now.

User can edit Task - by clicking at not completed Task the form 5.10 appears. User can modify any field e.g. change date and save.

(50)

Project Implementation 37

Figure 5.11: Hazard app with events

5.2.7 Hazard Settings

User can reach the settings by clicking at the Settings button. This section is for evaluating Hazards. User can select from the downloaded dataset which Hazards are Applicable or Not Applicable for current business.

Two panels are used here. Left one displays Categories and corresponding Hazards on the left.

User can filter Categories Applicable/Not Applicable/Not checked It can be done by clicking on the buttons it the left panel.

User can set Category and Hazard applicable / not applicable

When a user clicks on the category in the middle panel then a list of hazards of this category is listed on the right. User can click on the checkboxes and select which hazards are applicable for its business. e.g. there is no Cellar Hatch in the premises, thus will

(51)

Project Implementation 38 click on the checkbox twice to make it unselected. The whole Cellar Hatch category and Hazards belongs to this category will be no longer visible in any other applications. User will be unable to set reminders or tasks for those Hazards.

User can Add New Category

- Click on Add New Category. The form appears and the button ”Add New Category” will be sat disable

- User can fill the form. When all textboxes have filled the button save appears on the top. (placing the save and cancel button on the bottom of the form would be more consistent, thus there is difference between old and new version)

When save button is clicked the new category is saved. Category created by a user is displayed with the Edit button.

Figure 5.12: Adding Custom Category Wireframe

Edit custom category

- User can click on the edit button of custom category. The text will become editable and button delete appears instead of edit button

- when user modify any text than the button save and cancel button appears on the bottom of the form - user can save or cancel the changes

(52)

Project Implementation 39 Delete custom category

- User can click on the edit button of custom category. The text will become editable and button delete appears instead of edit button

- user can click on the delete button - the whole category will become disable including hazards (in the right panel) and on the bottom of the form appears

[cancel] and [delete]

When delete is clicked, the category with all its Hazards will be deleted. Cancel will return the user to the form (edit mode).

Add new custom Hazard

- user can scroll in the middle panel and click on the category where wants to add a new hazard e.g. Broken Glass / Crockery

- click add Broken Glass / Crockery Hazard button

- when button in category Add ¡category name¿ hazard is clicked

- it will prompt the user to fill Hazard Info and comment. The checkbox is in default mode [-] Not checked

The user can cancel or save new Hazard

Edit custom Hazard

- User click on a category to displays its Hazards

- User can click on the edit button of Hazard - The text will become editable and button delete appears instead of edit button

- when user modify any text than the button save and cancel button appears on the bottom of the form - user can save or cancel the changes

Delete custom category

- User can click on the edit button of Hazard - The text will become editable and button delete appears instead of edit button

- user can click on the delete button

- the Hazard Form appeared and two [cancel] [delete] buttons will be disabled

- When delete is clicked, the Hazard will be deleted. Cancel will return the user to the form (edit mode)

(53)

Project Implementation 40

Figure 5.13: Actual Hazard Settings design - Evaluating Hazards

5.2.8 Module Manager

The idea of plugins/add-ons/datasets is: When the user receives an application would like to have a way to populate data. Also, the dataset is extracted from BeSmart.ie web pages and it is a combination of 3 different businesses. e.g. Community Centre, Cinema, Theater and Pest Control. This is the dataset which Administrator looking for and saves a lot of time to the user. There is also a possibility that this app will be used by different non-profiting business like GAA pitch where a different dataset is needed.

(54)

Project Implementation 41

Figure 5.14: Module Manager - all modules available

User can install a Module - by clicking on the button, this turns to yellow and a progress bar is shown. After install is done the button becomes disable and text with the colour changed.

Figure 5.15: Loading Dataset

When a dataset is installed it will reflect in To Do Now. The Task is set into the To-Do List and on the To Do Now button appears number.

This Task will be completed automatically when all Hazards and Categories are set either Applicable or Not Applicable in the Hazard Settings.

(55)

Project Implementation 42

Figure 5.16: Installed Plugins In Module Manager

5.2.9 To Do Now

Each Scene contains the To Do Now button which opens the right panel with a list of buttons. When a user clicks on the button from the list, the program will redirect to the right Scene. If the dataset is installed and the button is clicked, the application will close an actual Scene and opens Hazard Setting were the not checked hazards will be filtered and shown. This task can be resolved by setting them all Applicable or Not Applicable.

If the task was set by Hazard, and button form To Do List is clicked the application will open the Hazards and filter to just single Hazard. The task can be viewed and completed.

User can display To Do List - by clicking on To Do Now button

User can be redirected to another app - by clicking the button in To Do List User can solve To Do - When a user completes a task in To Do List e.g. all Hazards are set Applicable or Not Applicable, The task will be removed from the list and the number on the button will be updated.

(56)

Project Implementation 43

Figure 5.17: Hazard Settings - evaluation

5.2.10 Calendar

Users can navigate through year and month. Each day is displayed a number of To-Dos. When the button is clicked the list is open on the right. The current day is highlighted. In the left panel are check-boxes where users can filter categories which should be displayed e.g. User like to see just Hazard, complete Task. Those will be visible only.

At first look, the user can see a difference between Saturday, Sunday and the working days. The narrow strip on the left displays the week of the year.

It was tested: on click, the Year or Month can be changed. The button TODAY returns to the current month and today’s day is highlighted.

(57)

Project Implementation 44

Figure 5.18: Hazard Settings - evaluation

User can view actual month - When the user reaches the Calendar, then can see the full actual month where Sundays, Saturdays, Working days, weeks, headers and fields with or without date have a different colour to make it more pleasant to use.

User can see the actual day - The current day is highlighted and the list for today is displayed on the right when the field is clicked

User can see a number of events in the calendar - If calendars contain tasks, then below the date is number how many Task due at this date.

User can navigate between Years, Months and return back to current month - User can click << or >> buttons beside Year to view next or previous year

- User can click << or >> buttons beside Month name to view next or previous month - User can return to the current day by clicking on button TODAY

(58)

Project Implementation 45

5.2.11 System Tray

The System Tray is independent as well, thus running on the background, displays notifications when the application is closed and the Icon can be used as a launcher. Implementation of System Try took longer then I expect because a Hello World appli-cation wasn’t working together with Spring until was placed into the separate Threads. Implementing Threads did require another time for testing.

A running separate thread brought the benefit of the faster application start. Without thread, the application didn’t show the View before the Spring was fully booted up. During that time, the user didn’t know if application starting or not and may tempt to user clicking multiple time on the icon. The Thread implementation fixed all those problems.

However, the view starts before Spring which arises a different problem. If a user tries to exit the application while an application isn’t fully loaded it leads to crushing. This issue was fixed by disabling the exit button and providing the progress bar to inform the user that the application is starting.

Finally, I found that it was worthy to spend extra time to implement all this because the final result exceeded our expectation. It looks much better.

System Tray is running on the background - to provide notification. Can find if an update is available while the application is closed.

User can launch the application from System Tray - by double-click on Tray Icon or long-click and selecting Facility Management

User can exit the application from System Tray - by long click on Tray Icon and click on exit.

(59)

Project Implementation 46 A user receives notifications when the application is closed - and is integrated into the Operating System plus corresponding with To Do Now. Plays sound when a notification arrives. The Windows OS displays Notifications in history.

5.2.12 Threads

Implementing threads weren’t planned but they were necessary to fix a problem with the System Tray and improve user experience.

The JavaFX with AWT System Tray runs own Thread. The Spring was placed to an extra thread while the application is loading. Another thread is used when datasets are loading.

There is an extra long-running Thread for notification which reads from the database every minute to find Events and display them.

Each module contributing own Thread for updating To Do Now button and the To-Do List. When one Scene is entered the Thread is started. I had to make sure that thread is stopped on Scene exit and new Thread is started for a current scene and a new Thread is not starting before the Spring isn’t up and running.

I already knew that JavaFX supports only Safe Threads, thus implementation wasn’t too difficult, however, it took an extra two days for testing and observing if the Threads not causing any errors.

Figure 5.20: Threads - application start up, loading dataset

User can see activity when application starting - a spinning wheel User can see activity when a dataset is loading - a spinning wheel

User can see a number increase on the To Do Now button - when the application is open and Notification arrives

User can see appending tasks in the To-Do List - when the application is open with opened To-Do List if a Notification arrives

(60)

Chapter 6

Testing and Evaluation

6.1

System Testing

6.1.1 Responsive Layout

One of the requirements was a responsive application. This was tested visually for: views which suppose to be on the right side must stay in place while the window is being resized, maximized. When To Do Now is open and close, the text fields and buttons remain its equal sizes e.g. one button cant have a half size than others.

6.1.2 Equal frame size and position

The application starts in default size 1024x768 pixels. Because every scene is made separate the test was made for: when a user starts an application and resize or move the frame on the screen or enter to another scene, it must not move into the centre with default size but must stay in the same position and size left by a user.

6.1.3 All plugins starting and exiting

Another test was made to find if each button for plugins working and corresponding with the right button. e.g. if a user clicks the Module Manager button on the main screen, the application must open it and if there is entered to the Calendar, the user must return (back) to the Module Manager and exit to the main.

(61)

Project Testing 48

Figure 6.1: Threads - Testing

An extra care was made to threads because each module using its own. In this test, I was checking every second if a thread is running, A new thread is created when a user enters the module, And if Thread is closed when a user exits a module. Only a single instance per module can run on the background, and all threads are closed including Systray, AWT, Spring when the application is exited.

Figure 6.2: Clean Exit

6.2

JUnit Testing

If a new function in the DAO layer was implemented then a new test was created in the Testing 1.java file. For every entity was created a test where: create, read, update and delete was tested. The Testing 1.java was used for creating a single test e.g. all categories with their hazards were populated into the database, then a count was compared. A new Hazard was stored, the count was checked and then this new one was removed. When this single test was successfully completed, the method was appended to all pre-vious tests into the Testing.java file. Thus I didn’t have to run a full test every time,

(62)

Project Testing 49 but just once at the end of testing. These testing were found very useful because there was no need to run all project or implementing testing functionality in the project.

(63)

Project Testing 50

6.3

Debug

6.3.1 TO-DO Panel Is Not Responsive

When the height of the frame is changed then the inner panel is not expanding.

Figure 6.4: TO-DO Panel Is Not Responsive

Solution:

Setting the listener which will measure height and setting the right size. Fixed:

The listener for the panel was implemented which measures the frame height and setting this height to the pane.

(64)

Project Testing 51

6.3.2 Horizontal Scrollbar

Hazard setting app doesn’t set a correct width in centre panes when the frame is resized. The horizontal Scrollbar appears. It looks like two panes overlapping.

Figure 6.5: Horizontal Scrollbar, layout to small

solution:

Debugging to find what parameters are setting while the frame is resized and setting the right values.

Fixed:

(65)

Project Testing 52

6.3.3 Layout Too Small

Application was originally made in 800x600 size. On the figure 6.5 can be found that it is too small.

Solution: By setting initial size to 1024x768 will make the application look more pretty. It is also the minimum recommended size by MS Windows 10.

Fixed: Initial size was set to 1024x768.

6.3.4 Frames Not Consistent

Size of frame changes back to default when switching between apps. e.g. User maximises the Hazard App then opens the Calendar which makes the frame to shrink back to the default size.

Solution:

Obtaining the size of the current application. Setting this value to the application being opened.

Fixed:

A width and height is obtained and passed to the new scene.

(66)

Chapter 7

Discussion and Conclusions

7.1

Solution Review

In the research phase, I had very few indices what the project should do with so many options on how to achieve it. Because the user requires just an application running under the Windows OS I had 4 options; developing in C], but I have to learn this technology from scratch, which would be a high rick to complete the project and in the future, it would be difficult to run this project on different platforms.

Thus I was deciding between; Java Swing, JavaFX and Java with Spring, thinking if a user will migrate to e.g. MacOS or Linux then can still use this application.

The JavaFX was the right choice because the final product will have look and feel of Windows OS and thinking of future the JavaFX has the support of web applications and mobile devices comparing to Swing.

A better option would be a Spring for its latest developing tools with latest technologies like; JPA, Hibernate, JPQL. But a Spring application should run in the web browser and the customer was looking for a Windows application and not a WEB one. This would be a problem for the developer to explain to the user what is the difference between those technologies and I didnt want to workaround to force a user to be using a web browser. The problem was solved by choosing the best of both worlds: The latest technology from Spring and Windows Look And Feel from JavaFX.

Another big decision was with storing data locally between serialization and some type of database. This would not make any difference for a user, but think of future work, if SQLite is used, it will be easier to migrate to web. The Data Object Access the same as to MySQL, thus my project is designed to achieve it. This technology was used on purpose because the majority of web service providers commonly offering a MySQL database as a standard.

(67)

Discussion and Conclusions 54

7.2

Project Review

The project was originally made as To-Do List which allows the user just to create, store and set a reminder for a Hazard on the local machine, which was successfully achieved. The project went a bit beyond that requirements thus on top of that, the user can download a dataset of Hazards just by one click. This recommended dataset with all possible hazards can be assessed without searching Hazards through the Health And Safety Authority web-pages and reassessing them without starting over.

More datasets can be downloaded if the user expands their business, and more plu-gins such a Meetings, Bills and Contracts, Expenses will make the Facility Manager Application must-have for any business.

7.3

Conclusion

A minimum working system was implemented in this project. The main criteria were a Windows application with the ability to evaluate Hazards, store Hazards in the local database, and allow the user to set a reminder for each Hazard was met.

This application was found very useful with a big potential because nothing similar wasn’t developed yet. After all, Hazards can be assessed online at BeSmart.ie and many application can be found which dealing with To-Dos. However, nothing combines Hazard assessment with To-Do together. Also, more plugins are planned to be developed in the future.

7.4

Future Work

The application as is at the moment need more long time testing to find if Threads not causing any problems. If I have no delay caused by illness, the application would have search and filtering features. I would do more testing and deliver the project to the customer for beta testing.

In the future, I am planning to design and implement more features for Calendar where users can set a custom reminder. e.g. buy pencils.

More plugins are planned soon like: Meetings - where user can track and plan meetings, Bills and Contracts - where user can set a reminder when a contract, warranty, insurance is finishing, Expenses - a handy plugin which will be tracking and providing statistic about outcomes.

(68)

Bibliography

[1] I. Software. Anytime organizer deluxe 15. [Online]. Available: http://www. individualsoftware.com/?product=anytime-organizer-deluxe-15

[2] NotesBrowser. Notesbrowser editor. [Online]. Available: https://www.notesbrowser. com/en/notesbrowser professional english.html

[3] V. Software. Allmynotes organizer. [Online]. Available: https://www.vladonai.com/ [4] Health and S. Authority. Business electronic safety management and risk assessment

tool. [Online]. Available: https://www.besmart.ie

[5] Kenny65. Embedded database - prevent automatic dropping of tables. [Online]. Available: https://github.com/spring-projects/spring-boot/issues/1374

[6] I. Fedortsova. Concurrency in javafx. [Online]. Available: https://docs.oracle.com/ javafx/2/threads/jfxpub-threads.htm

(69)

Appendix A

Code Snippets

(70)

Appendix B

Wireframe Models

Figure B.1: Calendar Wireframe

Figure B.2: Notification Prototype

Figure B.3: System Tray Prototype

(71)

Appendix C

Class Diagram

Figure C.1: Class Diagram

(72)

Appendix D

JavaDoc

Figure D.1: JavaDoc

(73)

Appendix E

Line Count

Figure E.1: Lines of Java code count, without blank lines, excluding XML and con-figuration

Figure E.2: Lines of Java code count, with blank lines, excluding XML and configu-ration

References

Related documents

An analysis of the economic contribution of the software industry examined the effect of software activity on the Lebanese economy by measuring it in terms of output and value

In this work, we report some case studies inspired by the activities carried out by the Slow Food Association in Africa and demonstrate the importance of agroecological models

Conversely, 43.7% of all respondents who misused prescription drugs met criteria for alcohol dependence, problem gambling, and (or) had used illicit drugs in the past year..

How Many Breeding Females are Needed to Produce 40 Male Homozygotes per Week Using a Heterozygous Female x Heterozygous Male Breeding Scheme With 15% Non-Productive Breeders.

(2010) Effect of Fly Ash Content on Friction and Dry Sliding Wear Behaviour of Glass Fibre Reinforced Polymer Composites - A Taguchi Approach. P HKTRSR and

This suggest that developed countries, such as the UK and US, have superior payment systems which facilitate greater digital finance usage through electronic payments compared to

This modifier has been on the OIG’s list for focused audits since 2004 • Medicare does not subject claims with modifier –25 to prepayment review unless it is for critical care

The federal grant of authority to State and local governments to franchise cable systems does not include cable systems that serve subscribers without “using” any public