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 one.

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

Reply via email to