cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Adrian Wiesmann <>
Subject Re: Introducing Gozer - Extending DataViews
Date Sat, 08 Sep 2007 12:45:52 GMT
Hello Ari

> Interesting idea, but I'm not clear about exactly what problem it is  
> solving. Is it:
> * increase development speed of creating forms
> * allow end user (with XML knowledge) to define their own form layout
> * as a type of DirectToSwing (WebObjects style concept) quick way to  
> mock up applications

All of them, although the first and second are main goals, the third is
something like a side effect :)

I want to be able to make new forms without the need to compile anything
and existing forms should be changeable. Since forms can be rendered into
PDF/Text format, users would be able to create/personalise reports on
their own.

> The main issue I foresee is having the flexibility to lay out edit  
> forms exactly as required. Taken to the extreme, you could end up  
> creating something like Matisse where the entire form design is  
> stored in XML (although you go further with the data binding of  
> course). Your example has a very simple box layout style design - do  
> you intend to take that much further?

Well, that is a point which we discussed quite much: UI flexibility. At
the moment I plan to have just one pre-defined layout which resembles some
simple HTML-alike table layout. You can put boxes into other boxes and at
the end you have some kind of table structure (we therefore make use of
TableLayout). That should suffice, at least for the project for which we
will need Gozer. 

But then you could subclass the standard Swing renderer and have something
like CSS, or elements with an absolute position. You could also go on and
create your forms with your own method and just use the DataBinding from

For the DataBinding to work we also introduce 3 new classes: DataRow,
DataTable and DataContainer.
- DataRow is the base class for what Cayenne knows as DataObject.
- DataTable is the representation of the table and knows all about the
business/domain logic of its table (fillbykey, fillbyquery, persist, etc).
- DataContainer keeps all DataTables together.
A frame does then typically work on one DataContainer.

So for the demo on the wiki I created DataTables for both tables and call
the FillByQuery method on them (loading DataObjects via ObjectContext).
Since the DataTables are linked with a DataContainer, I then hand the
DataContainer to the renderer. The renderer does then analyse the binding
information and binds the Swing element with a DataObject via a DataTable.
The idea behind this is that the developer will code some business logic
which loads the required data via DataTables. The binding does then
operate on the loaded data (everything in the DataContainer) only.

Hmm I should probably do some illustration or two :)


View raw message