segunda-feira, 30 de janeiro de 2012

A JavaFX App For The GateIn Navigation REST API

GateIn is a JBoss project that consists in a portal that goes beyond a simple portlet container. GateIn is the union of JBoss Portal and eXo Platform, so with GateIn you will have more than a JSR 168/286 implementation. Recently in the new GateIn 3.2, efforts for a public API has been done. The navigation REST API, for example, is complete in "read-only" part which means you can access all your page nodes and iterate through them. For more information about the GateIn REST API you can look at this article. To consume this API I decided to create a JavaFX application that would allow me to explore some of the new JavaFX features, like the cool embedded Browser and the TreeView control. In this post I want to show you this application, and try to share some of my experiences during the coding.

Consuming the GateIn Management API

To consume the Management API, specifically the navigation part, I created a separated Eclipse project, and was used the RESTEasy client API. To make the model part, I borrowed some classes from the project code. These classes are good, but I would like to have classes specifically to the navigation part, not the Management. So I used these classes to fill my NavigationNode class and have a higher abstraction level for the navigation.

The JavaFX app

The goal of the JavaFX app is to show the navigation tree and allows you to perform some actions for each node. The first action is log in the application, for this I created a class called "LoginPane". This class will take care the login part of the application and invoke the methods of the a LoginAction interface implementation. LoginAction is simple: contains two methods to be called by the LoginPane class. Below is the login pane in action.
The main part of the application consists of a TreeView and its context menu. An application menu was created just to perform simple actions like logout and refresh the tree.
Two more classes are used in this application : a simple modal dialog to show messages and a the SimpleWebView, which is used to open WEB pages.
I used a mix type of coding style with Builders and verbose Java. The Builders API from JavaFX is awesome, you can ease create classes using one line of code. A boring thing I faced during this application creation was the thread issues. It was used some asyncronous tasks (functional programming from JavaFX Script, I miss you =/ ) and then we got some "Not a JavaFX Thread" errors. I solved by using Platform.runLater. The bind was used one time, in the previous JavaFX Script I was addicted in binding, but now the form as bind is done, I'm not encouraged to use it, because now bind applies to *Property, which makes it more intrusive. You can see I'm not using the caspian default JavaFX style, I borrowed the CSS style from this post about JavaFX's CSS.


It's always great to explore a new REST API. RESTEasy went very well in giving a simple way more JAX-RS aware to access the API. JavaFX 2.0, as you know, is much better than the previous versions: faster and with a richer API and you can use Eclipse or your other favorite IDE to create JavaFX apps. This is not the end, I'll continue updating this application according the GateIn REST API evolution. You can check the JavaFX app or the client code in this repository on GitHub.

Nenhum comentário:

Postar um comentário