JavaFX Real-World Apps: Monastery Disentis

[fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][fusion_text]

Finally the first “JavaFX Real World Apps” post that actually covers an “app” and not an “application”, meaning the first JavaFX application in this series that was designed for mobile devices and not the desktop. The application is simply called “Monastery Disentis”. It was developed by cnlab in Switzerland. It can be used by visitors of the monastery as a guide. Below you can see a couple of screenshots that were taken on an Android device.

Video: a screencast of the application.[/fusion_text][fusion_text]What is cool about this application is that everybody can try it out be following the links to the app stores, either the Apple App Store for iPhone users or Google Play for Android.

As usual I asked the development team a couple of questions and Daniel Zimmermann was nice enough to answer them below:

General Questions

What is the name of your product / project?

Monastery Disentis

Who are your users / customers?

Monastery of Disentis, Mustér, Switzerland.

What is the purpose of your software? What are its benefits?

Mobile app to guide the user through the monastery church.

Is the application operational? If yes, since when. If not when do you plan to go live?

Yes. It can be installed via the iTunes app store or Google play.

iTunes: https://itunes.apple.com/ch/app/hora-benedicti/id930800749?l=en&mt=8

Google Play: https://play.google.com/store/apps/details?id=ch.cnlab.horabenedicti

Development

How did you get the necessary JavaFX Know-How into your team? (Consultants, Internal / External training courses)?

Internal training.

With which version of JavaFX did you start? 1, 2, 8?

We started with version 8.

When did you start developing the application and how long did it take?

September, 2016, 6 Month with some pauses in between.

How many developers worked on it? In total and on the UI.

2 Developers in total. 1 exclusively on the UI.

How big is the application? Lines of code, Number of classes.

Lines of Code: 11000, No. of Classes: 113.

How big is the JavaFX client? Lines of code, Number of classes.

Lines of Code: 7500, No. of Classes: 51

Why did you choose JavaFX as frontend technology? And very importantly: why did you not choose HTML / Web?

The developer already knew Cordova, but wanted something else. The app‘s scope
seemed small enough to be used for it.

Was it difficult to convince decision makers to agree on JavaFX?

No. Since so we did not need to create two native apps with two developers.

What were the biggest challenges / problems / issues / bugs you faced in the JavaFX part and how did you solve them?

Rendering performance of Text nodes – heavily relied on asynchronous content loading and
lazy content display (in other words: lazily put it onto the Scene Graph).

Which 3rd-party products / frameworks / tools (open source and commercial) did you use and why did you choose them?

JavaFXPorts, Gluon Charm Down, ControlsFX, FontawesomeFX, jackson, commons-codec, Afterburner.fx, ScenicView.

Did you mix JavaFX and Swing code?

No.

Outlook

Would you use JavaFX again for your next project? Please elaborate why or why not.

Yes, but I will think twice for mobile, because the performance is not yet where it needs to
be on all platforms / phone variants.

Which recommendations do you have related to JavaFX for other companies / projects?

Not much, except for: Just give it a try. If you need platform independent Desktop
applications and/or don‘t want to rely on long-term browser support, this is a good and
good-looking alternative.

Which features would you like to see being added to JavaFX?

CSS closer to Web, faster CSS, improved layouting/API, faster text rendering performance.

[/fusion_text][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

JavaFX Real-World Apps: SkedPal

skedpal logo v152

A new entry in the “Real World Applications” series. This time it is SkedPal, an application for managing a busy person’s life intelligently. I have been consulting the SkedPal team in matters related to JavaFX and also when they made the decision to start using the CalendarFX framework for their calendar requirements. Below you can see a couple of screenshots of this attractive application. If you want to try it out yourself then you can simply register on the SkedPal website and download the desktop client (they also have mobile clients).

Screen Shot 2016-04-01 at 10.17.33

Screen Shot 2016-04-01 at 11.24.25

Screen Shot 2016-04-01 at 11.24.10

I have asked Saied ArBabian, the found of SkedPal to answer a couple of questions related to their product, their development, and (of course) their use of and thoughts about JavaFX.

General Questions

What is the name of your product / project?

SkedPal

Who are your users / customers?

SkedPal is a publicly downloadable application made for busy professionals who need to schedule their work in order to better manage their time.

What is the purpose of your software? What are its benefits?

SkedPal’s key objective is to assist busy professionals to deliver their projects on time by scheduling all their work intelligently. It’s a SOA cloud-based application that includes a Narrow Artificial Intelligence scheduling engine in the cloud with a JavaFX client for the desktop and an iOS companion app.

Is the application operational? If yes, since when. If not when do you plan to go live?

We’re in public Beta since 2014. We’re into our 3rd pivot and getting closer to the sweet spot for our users.

Development

How did you get the necessary JavaFX Know-How into your team? (Consultants, Internal / External training courses)?

The team was familiar with Swing and it didn’t take too long to get on board with JavaFX in order to deliver the first version. The training process was internal.

With which version of JavaFX did you start? 1, 2, 8?

Started with version 2.

When did you start developing the application and how long did it take?

We have released two versions so far, and we’re in the middle of our third version. We started in late 2013, and had our first version released in Oct 2014. The second version was released in Jun 2015.

How many developers worked on it? In total and on the UI.

5 Developers in total. 2 exclusively on the UI.

How big is the application? Lines of code, Number of classes.

Lines of Code: 132,000, No. of Classes: 860

How big is the JavaFX client? Lines of code, Number of classes.

Lines of Code: 76,000, No. of Classes: 548

Why did you choose JavaFX as frontend technology? And very importantly: why did you not choose HTML / Web?

Our team’s experience was primarily in Java so in order to immediately get started to deliver a front-end application, it was a natural decision to go for JavaFX. In hindsight, a stronger developer community as it exists for HTML/Web could have been a huge help.

Was it difficult to convince decision makers to agree on JavaFX?

No, decisions in startups are made faster and easier than in enterprise environments.

What were the biggest challenges / problems / issues / bugs you faced in the JavaFX part and how did you solve them?

The high memory consumption of JavaFX was particularly a trouble area for us. The only way to resolve it was to consider the performance constraints in our next iteration design and limit our design to what works.

Which 3rd-party products / frameworks / tools (open source and commercial) did you use and why did you choose them?

Initially we used the MiG Java Calendar which was based on Swing code, and then we switched to CalendarFX for its better UI design and use of JavaFX instead of Swing. We developed our own MVVM framework to support our Service Oriented Architecture. It turned out to be a huge project of its own, and we might open source it at some point to contribute to the JavaFX developer community.

Did you mix JavaFX and Swing code?

Initially yes when we used MiG Java Calendar.

Outlook

Would you use JavaFX again for your next project? Please elaborate why or why not.
Which recommendations do you have related to JavaFX for other companies / projects?

We have made a significant investment in JavaFX technology both in terms of team’s experience over the years, as well as development of a complex MVVM framework. This is a strong reason to stay with JavaFX. On the other hand, we really envy the strong developer community that exists for the web apps and we can see how fast development can become once you have access to such communities with large portfolio of open source codes.

In addition, we’re facing severe issues when our users do not opt to update their client to the latest version. Distribution of JavaFX applications for Internet users is a lot more challenging than web based applications.

Which features would you like to see being added to JavaFX?

We’d like to see better performance (speed and memory.)

Do you plan to provide a mobile version of your application or a mobile addition?

We already have a native (Objective C) iOS app integrated into our SOA architecture. The mobile app and the JavaFX desktop apps work in tandem very well in our MVVM framework.

Never too old to learn!

Yesterday (March 16th) I celebrated my 47th birthday. I am now packing a solid 20 years of work experience and a masters degree in computer science. Still I managed to screw up bad.

A potential customer of mine, who is currently evaluating FlexGanttFX for their application, contacted me and argued that the initial model creation takes too long. 22 seconds to be precise. I asked them to send me a standalone demo and when I ran it I could confirm that it takes a long time to create the model. After further investigation I realized that they were creating over 5 million objects (activities that will be placed on the timeline). All of these objects are then inserted into a balanced binary interval tree. When I saw that I basically told them to stop evaluating FlexGanttFX because it will not be able to handle these many objects and that object creation and the tree modifications do take their time. So the basic message I sent was “Go somewhere else. Fu.. off!”.

However, they also included a snapshot of the profiler they used and I could see that most of the time was spent inside the constructor of the base model class “ActivityBase” and not inside the tree modifications (which I found surprising). After some more research I realized that it was primarily the creation of the activity ID, which is of type String and uses UUID.randomUUID(). So I replaced this logic with a simple counter of type Long. After this change the total time went from 22 seconds to 8. Nice! But it got even better.

To be on the safe side I made sure that the start and end times of my activities are initialized with Instant.now(). However, there was no need for that as those times are usually passed to the activity in the constructor or after creation by calling setStart/EndTime(). After this change the total loading time went down to 7 seconds.

Since the problem at hand was to create a lot of objects very fast I decided to change the initial heap size allocated to the program to 2 Gigabytes. This brought down the loading time to 2 seconds.

From 22 seconds to 2 after 10 minutes of work, not bad! However, quite embarrassing considering the initial “Fu.. off!” 🙂

 

FlexGanttFX 1.4.0 Released!

I am very happy to announce that I have released version 1.4.0 of FlexGanttFX for JavaFX. This release contains bug fixes and small improvements. I am glad to say that FlexGanttFX has proven itself in the field and is operational in various large enterprise applications. Some of its more prominent users are:

  • Emirates Airlines
  • European Broadcasting Union
  • Airbus
  • PSI Poland

The following are a couple of screenshots from these applications.

ScreenShot005

PSI Poland

Bildschirmfoto 2015-12-19 um 12.28.15

European Broadcasting Union

Gantt-Split-4up

Emirates Airlines

mintpage

MINT Software Systems

 

JavaFX Real-World Apps: PSI Advanced Scheduling and Monitoring

I am happy to announce that there is a new entry for the “Real-World Apps” list. The company PSI has developed an application for “advanced scheduling and monitoring”.

csm_psi-logo_10dd240e3c

The software will be used by the manufacturing industry. The screenshots look quite polished and attractive. PSI is one of the earliest adopters of FlexGanttFX, my JavaFX framework for visualizing schedules of any kind.

PSIasm_01

PSI – Operation Gantt

PSIasm_02

PSI – Operation Detail

PSIasm_03

PSI – Production Order

PSIasm_04

PSI – Report

PSIasm_05

PSI – Structural Gantt

As usual I have done an interview with the developers. Michal Bocian (Development Manager) and Dobieslaw Chabrzyk (MES Product Manager) of PSI were kind enough to provide the answers.

General Questions

What is the name of your product / project?

PSI Advanced Scheduling and Monitoring

Who are your users / customers?

Customers: manufacturing industry in following areas:

  • Serial production
  • Metal re-working
  • Made-to-order constructions

Users:

  • Production schedulers
  • Shop floor stuff
  • Production managers

What is the purpose of your software? What are its benefits?

Purpose:

  • Scheduling and execution monitoring of production process

Benefits:

  • Reduce manufacturing costs
  • Reduce work in process
  • Improve customer service
  • Lower implementation and maintenance costs compared to existing IT solutions

Is the application operational? If yes, since when. If not when do you plan to go live?

Official go to market is planned for April 2016.

How big is the budget for your project?

A few hundred thousand euros.

Development

How did you get the necessary JavaFX Know-How into your team? (Consultants, Internal / External training courses)?

Mostly from the Internet (StackOverflow, Official APIs etc).

With which version of JavaFX did you start? 1, 2, 8?

JavaFX 8.

When did you start developing the application and how long did it take?

We started the development around April 2014. The development lasts till now.

How many developers worked on it? In total and on the UI.

We have 5 developers working on both server and client side.
We have 1 developer who is adjusting our CSS.

How big is the application? Lines of code, Number of classes.

230,000 Lines of Code, 2000 Classes.

How big is the JavaFX client? Lines of code, Number of classes.

190,000 Lines of Code, 1600 Classes.

Why did you choose JavaFX as frontend technology? And very importantly: why did you not choose HTML / Web?

PSI is specialized in creating applications based on the Java platform. JavaFX is the natural successor of Swing. We were considering HTML / Web for the frontend – but because of limited performance we had to give up for now. Our application needs to hold about 500,000 complex domain objects in memory to perform extraordinary parallel calculations on them.

Was it difficult to convince decision makers to agree on JavaFX?

No, it was easy. Our company is specialized in Java technology – especially in Swing. JavaFX is the choice for company like ours.

What were the biggest challenges / problems / issues / bugs you faced in the JavaFX part and how did you solve them?

We’ve found some bugs in JavaFX but none of them were critical nor major. We reported them on JavaFX’s bugtracker, and we are waiting for the fixes. Meanwhile we did some temporary workarounds.

Which 3rd-party products / frameworks / tools (open source and commercial) did you use and why did you choose them?

  • FlexGanttFX – because of modularity, quality and performance.
  • Eclipse E4 – because of window manager and dependency injection.

Did you mix JavaFX and Swing code?

We’ve tried it once, but we had to give up. It is stable when used in static layouts, but when the user tries to perform complex interactions with the UI, many unusual bugs take place.

Outlook

Would you use JavaFX again for your next project? Please elaborate why or why not.

In our case JavaFX was the only choice we had. Our application needs a lot of memory and it has to be multithreaded. If you combine these two requirements with the server written in JavaEE – JavaFX is the only choice. If our application had different non-functional requirements we would probably create our application in HTML/Web.

Which recommendations do you have related to JavaFX for other companies / projects?

If you consider JavaFX as your potential platform, check if all the special and non-standard UI requirements are meet.

Which features would you like to see being added to JavaFX?

At the moment we are suffering from a lack of good date and time picker.

Do you plan to provide a mobile version of your application or a mobile addition?

Yes, but since our product needs a lot of resources, we plan to deliver simplified application (e.g. without interactive Gantt chart).

JavaFX Real-World Playlist

I finally found some time to create a YouTube playlist with all the “Real-World” JavaFX applications that Alexander Casall and I presented at JavaOne 2015. Maybe you can find some inspiration.

The videos show the following applications:

  • EIZO – Curator Caliop
  • Emirates Airlines – Network Capacity Optimization
  • AISO – HRC-Matic Business Registry
  • European Broadcasting Union – NEOS
  • MINT Software Systems – Training and Resource Management (TRMS)

Enjoy!

JavaFX Real-World Apps: Emirates Airlines Network Capacity Optimization

Emirate Airlines’ “Network Capacity Optimization” (NCO) is the subject of this fourth installment of the “Real World Apps” series. For reference here are the first three:

2000px-Emirates_logo.svg

NCO was developed to allow the dispatchers at Emirates Airlines to optimize the usage of their plane fleet. In this application the user creates requests for new flights, cancelled flights, delayed flights, upgraded flights, etc…. NCO can then be used to create different scenarios to fulfill the requests. Each scenario is evaluated and associated with its impact on costs.

I had only a small role in this project. I consulted the development team on the integration of FlexGanttFX into NCO. Topics we had to cover were things like lazy loading strategy or editing behaviour.

The following screenshots show the application in action.

HomePage

Home Screen

Gantt-Split-4up

Gantt Chart (4-Split)

AdminPage

Admin Page

Here are the interview questions and answers for this project:

General Questions

What is the name of your product / project?

Network Capacity Optimization

How did you get the necessary JavaFX Know-How into your team? (Consultants, Internal / External training courses)?

Initially we started a proof of concept in JavaFX for two weeks and then initiated our development a month later. We got an external trainer with whom we have clarified all the issues we had encountered until then.

With which version of JavaFX did you start? 1, 2, 8?

Java 8.

When did you start developing the application and how long did it take?

We started in August 2014 and it took 9 months.

How many developers worked on it? In total and on the UI.

In total we had 20 developers. Eight of them worked on the UI.

How big is the application? Lines of code, Number of classes.

50,000 classes.

Why did you choose JavaFX as frontend technology? And very importantly: why did you not choose HTML / Web?

We had the requirement to load the data for an entire year. We evaluated several Gantt charts, some using web and some using thick client technology. FlexGanttFX was chosen because it met all our business requirements and also because our company recognised JavaFX as an emerging technology.

Was it difficult to convince decision makers to agree on JavaFX?

Yes, because the initial version of JavaFX was not very mature when we started the work and we didn’t have experts in our organization.

What were the biggest challenges / problems / issues / bugs you faced in the JavaFX part and how did you solve them?

We have faced many problems initially with JavaFX. Listing down a few

  • Action listeners on menu bar. Listeners are given at sub menu levels.

  • Complexity of tree table cell factories so that one column interacts with another.

  • Styling rich CSS for tree tables.

  • We would like to see tables in which we can freeze the columns. This was one requirement we had. Our solution (work-around) was to have two tables side by side. We then attached an external scrollbar to scroll them in synch.

  • When we applied styles on a tree table or table, using a row factory, we had issues in a cell factory that we used for implementing a col span.

Which 3rd-party products / frameworks / tools (open source and commercial) did you use and why did you choose them?

Only FlexGanttFX.

Outlook

Would you use JavaFX again for your next project? Please elaborate why or why not.

The Gantt chart is the core element inside our application. Normally we go with web technology (HTML) but if we should come across requirements like this again then we would definitely also use JavaFX again. The business users are using 27-inch monitors to see the schedule for seven days at a stretch.

Which recommendations do you have related to JavaFX for other companies / projects?

Do not have too many change listeners. We observed that it reduces the performance. CSS issues may even lead to an application crash.

JavaFX Real-World Apps: MINT TRMS

The second real-world JavaFX application that I was involved with was developed by MINT Software Systems, a company located in Kiel, Germany.

Unknown

The focus of their application is on training and resource management for companies in the aviation industry (airlines).

Screen Shot 2015-09-16 at 11.31.18

MINT is actually the reason why I got involved in JavaFX development. In early 2013 they asked me to create a version of FlexGantt for JavaFX. Until then only a Swing version existed. When they first approached me I was somewhat resistant to sign up with them because of what I had heard about JavaFX until then. But once I got into it I quickly became a JavaFX enthusiast. Why? Because I had the luxury of working with version 8 from the very beginning. I can not blame anybody who didn’t like versions 1 and 2, but 8 is a completely different story.

MINT TRMS

Especially interesting from a JavaFX point of view is the fact that this application is very big and also that it is a successful migration from Swing. The following images show the JavaFX version of the application in action:

mintpage

MINT WebAssistant

formbuilder-design

MINT Form Builder – for creating web / HTML forms

reportbuilder-design

MINT Report Builder – for creating printable reports

reportbuilder-result

MINT Report Builder – Result

The following are the answers MINT sent me for the questionnaire I sent them recently. I hope that their answers will be helpful for others when they need to make a decision on whether to go with JavaFX or not.

General Questions

What is the name of your product / project?

MINT Training and Resource Management System (MINT TRMS)

Who are your users / customers?

Training departments of airlines, technical facilities and production companies in the aviation and other training intensive industries.

What is the purpose of your software? What are its benefits?

The MINT training solution provides powerful tools for records and skill management, training planning and scheduling, electronic online and offline grading and e-learning.

Is the application operational? If yes, since when. If not when do you plan to go live?

Yes, JavaFX first appeared in the application in 2013 but earlier versions of the software are available since 1998.

Development

How did you get the necessary JavaFX Know-How into your team? (Consultants, Internal / External training courses)?

Initially we did a pilot project to migrate selected Swing UI to JavaFX. Later on there was some internal training to spread the knowledge. See also Oracle Case Study about this.

With which version of JavaFX did you start? 1, 2, 8?

JavaFX 2.0.

When did you start developing the application and how long did it take?

The migration from Swing to JavaFX started in 2012. It is an ongoing process. A turning point was in 2014 when the main window finally could be moved to JavaFX.

How many developers worked on it? In total and on the UI.

Work is done by 8-10 developers working on the UI and backend.

How big is the application? Lines of code, Number of classes.

1.8 million lines of code, 6300 classes.

How big is the JavaFX client? Lines of code, Number of classes.

1.1 million lines of code. 4800 classes. This includes remaining Swing parts.

Why did you choose JavaFX as frontend technology? And very importantly: why did you not choose HTML / Web?

Coming from a Swing rich client it was a natural move to switch to the JavaFX successor. With FX the UI got a modern look and feel, smooth animations, and hardware acceleration. Regarding technical aspects, with observable properties and bindings the JavaFX API is easier to use with less code. And with FXML and CSS we can keep the UI building out of our code and focus on the business.

Moving all of this to the Web would be a huge effort. At the same time we keep supporting Web and mobile users with a responsive web application, providing access to most commonly used features.

Was it difficult to convince decision makers to agree on JavaFX?

No. Ultimately it was a management decision in the first place.

What were the biggest challenges / problems / issues / bugs you faced in the JavaFX part and how did you solve them?

Operating on the cutting-edge of JavaFX development can be difficult. Especially when we started with JavaFX 2 we faced several bugs, some of them specific to a platform or to WebStart. They were reported to Oracle but we still needed to find workarounds because an official fix could take 6 months or longer. It also was a challenge to get JavaFX 2 working on all platforms via WebStart because it required a separate installation.

Today with JavaFX 8 things got easier. Swing integration is still a problem. And we have to pay a lot of attention to Java 8 update releases. Frequently we cannot support the latest update when it gets available, and once we support it we may not be compatible to the previous versions anymore.

Which 3rd-party products / frameworks / tools (open source and commercial) did you use and why did you choose them?

In terms of JavaFX related 3rd party products, we use ControlsFX because of high quality controls with good documentation and a close connection to the Oracle JavaFX team. And we use FlexGanttFX which was developed as a joint-venture with Dirk. The Swing-based predecessor FlexGantt was a core component in our product and we needed the same level of quality and flexibility in JavaFX.

Did you mix JavaFX and Swing code?

Yes. This is an ongoing source of issues, e.g. when it comes to drag/drop support, layouting, threading, and window ownership. In particular communication between Swing’s EDT and JavaFX’s application thread is challenging. Both UI toolkits are single-threaded but when they are mixed you have to deal with two mutually exclusive threads.

With a Swing-based product of this size there is no other choice but to migrate it piece by piece which of course mixes JavaFX and Swing.

Outlook

Would you use JavaFX again for your next project? Please elaborate why or why not. Which recommendations do you have related to JavaFX for other companies / projects?

When a decision is made for a Java desktop or embedded application, my first look would be at JavaFX. It generally is a pleasure to work with and the results are convincing. For specific technical requirements a closer look would be recommended, e.g. compatibility to existing frameworks and controls, low-level access to hardware, 3D capabilities, etc. Also, JavaFX developers may be more difficult to come by but the transition from Swing is not too hard.

Which features would you like to see being added to JavaFX?

  • More standard controls, e.g. check combobox and check list view, a tableview with column filters.
  • An action framework with standard actions on each control.
  • Embedded, custom-control aware and two-way integration of SceneBuilder with Eclipse.
  • CSS debugging features.
  • Better integration into platforms, e.g. appstores, taskbar / system notifications, OSX menubar.

Do you plan to provide a mobile version of your application or a mobile addition?

No mobile support intended at this time. Our web-application is built with responsive design and works on cell phones and tablets as well. It is certainly an option once the tool chain incl. app store integration is complete and reliable results can be achieved on common devices.

JavaFX Real-World Apps: European Broadcasting Union

I have the privilege to present several JavaFX Real-World Apps at JavaOne this year together with Alexander Casall, who works for Saxonia Systems in Dresden. In preparation of this talk we sent out a questionnaire to our customers and partners and asked them a few questions related to their project, their application, and their use of JavaFX.

I thought it would be a good idea to publish their answers ahead of JavaOne to give attendees a chance to prepare themselves for the talk and also to maybe get some more feedback related to JavaFX projects out there, their size, and the politics surrounding their decision making process.

The first questionnaire was returned by Stephane Metairie from the European Broadcasting Union (EBU).

Logo_blue

“Members of the EBU are radio and television companies, most of which are government-owned public service broadcasters or privately owned stations with public service missions. Active Members come from as far north as Iceland and as far south as Egypt, from Ireland in the west and Azerbaijan in the east, and almost every nation from geographical Europe in between.” – Wikipedia

EBU is also known for organizing a yearly song contest for its member countries. This year it took place in Vienna.

Bildschirmfoto 2015-09-10 um 10.12.24

The application is being developed by a combined team with developers from EBU and AISO. AISO is a software development company located in Geneva. They have a very strong focus on business software development with JavaFX. Disclaimer: I am under contract with AISO.

Screen Shot 2015-09-11 at 16.51.03

The application they are developing is used for planning / scheduling broadcasting streams (TV, Radio). Resources scheduled are satellites, satellite dishes, fiber optics, etc… The application will be used by 150 concurrent users.

Below you can see a screenshot of the application. The fact that there is a timeline control shown inside of it basically gives away how I got involved into this project as an external consultant / freelancer (see FlexGanttFX).

NEOS

Here the interview questions and answers:

General Questions

What is the name of your product / project?

NEOS.

Who are your users / customers?

Internal application. Users that are in charge of planning. They “build” dynamic networks for broadcasting streams.

What is the purpose of your software? What are its benefits?

Transmission management. Build dynamic networks based on existing resources or resources rented for the case. Allow resource booking and planning.

Is the application operational? If yes, since when? If not, when do you plan to go live?

Not yet, the plan is to go live in January 2016.

How big is the budget for your project?

3 Million Dollar.

Development

How did you get the necessary JavaFX Know-How into your team? (Consultants, Internal / External training courses)?

We involved some consultant expert in JavaFX and we trained the whole team with … Internet and Oracle resources.

With which version of JavaFX did you start? 1, 2, 8?

Javafx 2.

When did you start developing the application and how long did it take?

Starting end of 2014. Took one year so far.

How many developers worked on it? In total and on the UI.

Around 15 people now. All developers work on server and client side.

How big is the application? Lines of code, Number of classes.

2000 classes.

How big is the JavaFX client? Lines of code, Number of classes.

1000 classes.

Why did you choose JavaFX as frontend technology? And very importantly: why did you not choose HTML / Web?

It’s Java ! Better ability to use desktop resources than web/html. Java applications are more stable over time than javascript (huge number of JS frameworks rise and die all the time).

Was it difficult to convince decision makers to agree on JavaFX?

Yes, I was very challenged, by managers and by developers !!! (I’m still being challenged).

What were the biggest challenges / problems / issues / bugs you faced in the JavaFX part and how did you solve them?

No worthy datatable component. Weak or incomplete component libraries. Not much JavaFx developers on the market. Bindings / Observability sometimes is tricky. Articles on the web are growing but not sufficient in some cases. No clear MVC or sort of MVC. For well industrialized projects there is no clear MVC, or this kind of pattern.

Which 3rd-party products / frameworks / tools (open source and commercial) did you use and why did you choose them?

IntelliJ.

Did you mix JavaFX and Swing code?

No.

Outlook

Would you use JavaFX again for your next project? Please elaborate why or why not. Which recommendations do you have related to JavaFX for other companies / projects?

Maybe. But It misses a sort of framework that could manage applications at a higher level (with templating, tree page, rights, css …) I think about a CMS-like framework.

Which features would you like to see being added to JavaFX?

Datatable.

Do you plan to provide a mobile version of your application or a mobile addition?

Yes.

JavaFX Tip 10: Custom Composite Controls

Writing custom controls in JavaFX is a simple and straight forward process. A control class is needed for controlling the state of the control (hence the name). A skin class is needed for the apperance of the control. And more often than not a CSS file for customizing the apperance.

A common approach for controls is to hide the nodes they are using inside their skin class. The TextField control for example uses two instances of javafx.scene.text.Text. One for the regular text, one for the prompt text. These nodes are not accessible via the TextField API. If you want to get a reference to them you would need to call the lookup(String) method on Node. So far so good. It is actually hard to think of use cases where you would actually need access to the Text nodes.

But…

It becomes a whole different story if you develop complex custom controls. The FlexGanttFX Gantt charting framework is one example. The GanttChart control consists of many other complex controls and following the “separation of concerns” principle these controls carry all those methods and properties that are relevant for them to work properly. If these controls were hidden inside the skin of the Gantt chart then there would be no way to access them and the Gantt chart control would need to implement a whole buch of delegation methods. This would completely clutter the Gantt chart API. For this reason the GanttChart class does provide accessor methods to its child controls and even factory methods for creating the child nodes.

Example

The following screenshot shows a new control I am currently working on for the ControlsFX project. I am calling it ListSelectionView and it features two ListView instances. The user can move items from one list to another by either double clicking on them or by using the buttons in the middle. 

ListSelectionView 

List views are complex controls. They have their own data and selection models, their own cell factories, they fire events, and so on and so on. All of these things we might want to either customize or listen to. Something hard to do if the views are hidden in the skin class. The solution is to create the list views inside the control class via protected factory methods and to provide accessor methods.

The following code fragment shows the pattern that can be used:

public class ListSelectionView<T> extends Control {

    private ListView<T> sourceListView;
    private ListView<T> targetListView;

    public ListSelectionView() {
        sourceListView = createSourceListView();
        targetListView = createTargetListView();
    }

    protected ListView<T> createSourceListView() {
        return new ListView<>();
    }

    protected ListView<T> createTargetListView() {
        return new ListView<>();
    }

    public final ListView<T> getSourceListView() {
        return sourceListView;
    }

    public final ListView<T> getTargetListView() {
        return targetListView;
    }
}

The factory methods can be used to create standard ListView instances and configure them right there or to return already existing ListView specializations. A company called ACME might already provide a standard set of controls (that implement the company’s marketing concept). Then the factory methods might return a control called ACMEListView.