DBAppBuilder - utilities and classes to facilitate JDBC-based application development.
DBAppBuilder is a collection of Java Beans and utilities to assist
in the construction of JDBC-based applications. IT IS A WORK IN PROGRESS!
At present, the database-enabled widgets provide an excellent
starting point for building Java database applications.
DBAppBuilder was originally a subproject of Tomato (tomatoide.sourceforge.net), a
visual programming language for Java. It
has no functional connection to Tomato, other than Tomato development
began as a result of needing a tool to quickly test DBAppBuilder classes, and
DBAppBuilder served as a good basis for testing Tomato.
Eventually, Tomato will be provided with custom Visualisers to facilitate
development of JDBC-based applications using DBAppBuilder components.
Changes
Version 0.0.0
Version 0.0.1
- FIXED: Joins should apply to individual 'from' items,
not the 'from' clause as a whole. Re-work how the
getBaseTable() and 'from' mechanisms operate so that
this will work properly. Each 'from' item can
have multiple joins, _not_ each Select can have multiple
joins.
- FIXED: Null column values do not correctly initialize
DBComboBox and DBList. These should appear as non-selected
with null values. Instead, they show previous selections.
- ADDED: Provide pop-up menu to select form and table submodes via
a right click on the Table/Form button.
- ADDED: Provide query-to-query link mechanisms for implementing
master-detail, master-master, and cascading combobox/listbox relationships.
- CHANGED: DBColumnValue::getComponentValue() should return
null for zero length strings, especially as some databases (PostgreSQL
for example) cough on these. Change code appropriately wherever
getComponentValue() is used.
- CHANGED: DBColumnValue::getValueForDatabase() should return string containing
"null" or "'string_data'" or "numeric_data" as appropriate,
thus obviating need for handling these within queries, etc. Change
code appropriately wherever getValueForDatabase() is used.
- ADDED: Implement Locked and ReadOnly properties in DBForm, and add
support for these in the various form control widgets.
- ADDED: Provide refinements to query-to-query link mechanisms to
lock out a child form while the parent is in Insert mode.
- CHANGED: Move DBAccess to Query subpackage, and rename to Access.
- ADDED: For every Query type, be able to override auto-generated SQL
with user-specified SQL.
- FIXED: In DBForm, when Insert fails it should remain in Insert mode.
When update fails, it should preserve all changed values.
- ADDED: Provide mechanisms in Access to automatically insert a link's
foreign key values when Insert is invoked.
- ADDED: Be sure query changes propagate to widgets & forms, etc. I.e.,
incorporate query change listeners into DBRow, DBTable, DBForm, etc.
- ADDED: DBForm allows multiple parent forms. Insert
mode handling will require that the subform be unlocked only when
no parent is in Insert mode.
- ADDED: Display status messages from database backend in DBForm.
- CHANGED: Renamed a number of classes to more intuitive names.
DBRow -> Row, DBColumnValue -> Column, DBColumnValues -> Columns, etc.
- ADDED: Provide mechanism to specify a custom set of Columns
to be displayed in a DBTable, or a DBForm's form view. This
will normally default to the Columns found in the Row.
[NOTE: improve caching as described in Column.java]
- VERIFIED: Make sure custom display columns work in DBComboBox
and DBList, via DBListModel
- ADDED: Implement connection pooling, to prevent bogging database back end with
multiple connections.
- ADDED: Implement facility to load default DatabaseConnection settings
from an XML file.
- ADDED: Implement RowPager to subselect queries based on LIMIT and OFFSET.
- ADDED: Build Table class and associated mechanisms.
- ADDED: Property editors. These are a work in progress.
- ADDED: Various events should be inherited from java.util.Event, so that
introspection will correctly recognize listener methods.
- FIXED: BUG: Setting Enum values in PropertyTable sets property
value to null.
- ADDED: Add support for java.util.Collection implementors in
PropertyList. The collected items should appear along
with any static properties. (This is of questionable value,
as there is no Collection equivalent to an Array class's
getClass().getComponentType(), and so new items will be
of Object type by default.)
- ADDED: PropertySheet should make use of
PropertyEditorManager and PropertyEditor.
Version 0.0.2
To Do
- Provide database personalities, by generalizing
ca.mb.armchair.DBAppBuilder.Beans.Query, and creating
delegate classes that handle mechanisms specific to
each type of back end. J2EE should be one of the
available back end types.
- All editing
mechanisms should be consolidated into PropertyItem, thus
leaving PropertySheet to manage the properties, and PropertyItem
to present them.
- Make 'Select' more intelligent. If base table, key and/or
'from' aren't specified, they can usually be guessed from
the specified Fields via the specified ColumnS.
- Provide mechanism in Row to translate database backend
error messages into human-readable messages. These may
be displayed in DBForm, etc. Optionally specify Column or
Columns -- with accompanying visual alterations on error --
with a message to hilight user entry requirements.
- Make sure correct columns are referenced in DBTable after
changing column order.
- Continue refinement of DBForm.
- Add record selectors to DBTable rows.
- Fix RowSelector.
- Fix RowLocator.
- Generalise RowLocator.
- Implement RowFinder to build 'where' portion of queries.
- Create DBPickForeignKey widget to return
a key selection. Works like a DBComboBox, but more sophisticated, with
refresh, optional pagination, and table-oriented display. Be able to use any
DBForm as a DBPickForeignKey (Use an interface?) Be sure a DBForm can easily
return its key contents. Are find() and getKey() sufficient?
- Build data model editor.
- Build Form & Report designers and associated Beans.
- Build data model update deployment Beans.
Copyright © 2002, 2003
Armchair Airlines Computer Services Inc.
All Rights Reserved.
END