ace-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marcel Offermans <>
Subject Re: Vaadin update...
Date Wed, 08 Dec 2010 23:26:36 GMT
On 18 Nov 2010, at 1:00 , Marcel Offermans wrote:

> After Angelo committed some code earlier today, enabling the discovery of gateways again,
I decided to add the "import from OBR" feature again for artifacts. That's working now, you
can even multi select artifact, which makes importing existing apps a lot less painful).
> As far as I'm concerned, we're still learning Vaadin and the current code is experimental
at best. Selections and associations are still a bit buggy, and I seem to have partially broken
keyboard multiselect again.
> If anybody else wants to jump in, feel free. We're taking this one step at a time!

A couple of weeks later, it's time for another update, since especially today I feel I've
made worthwhile progress.

I've mostly reworked the way the 4 main tables track changes. Instead of the brute force method
used before (basically repopulate all tables on every change) the tables now actually listen
for (event admin) events that notify the UI model of changes in the underlying repository.
That, plus a dozen of other fixes, now means that selections work well again (including keyboard
control and multi select). Drag and drop is also greatly improved, but there are some corner
cases that still need work and in some scenario's highlights are not recalculated correctly
yet but that's only a visual issue.

All in all we're now probably at the same level the original GWT UI was, but for now that's
still available for comparison.

Next up I added a way to extend the user interface whiteboard style. The key interface here
is UIExtensionFactory which can create UI components to be used at specific locations. The
idea is that this interface will be registered as a service with properties that indicate
where it wants to extend the UI. The UI components then track those specific extensions with
filter conditions and will invoke the factory's create() method to actually instantiate UI
components. The create() method takes a Map<String, Object> that is used by every specific
extension point to pass context information.

As an example I included one extension that hooks up to the only extension point in the UI
right now: the target table. It adds an "info" button that, when pressed, shows the target
ID and currently installed version. It should demonstrate the mechanism.

I'm actually curious what you think of this system. Of course we'd need to add lots of extension
points and document them well, including the service properties and the context Map for each

Also, feel free to give the whole UI a try. The code is still very much experimental, so expect
lots of console printing and still a few missing features, but I feel we're moving in the
right direction quickly now.

Greetings, Marcel

View raw message