Release notes for Beans Binding (http://beansbinding.dev.java.net)


1.2.1 Release (2007/11/02)
--------------------------
This is a bug fix release, solving the following issues:

Issue 16: JTable/JListAdapterProvider: don't re-wire listening to selectionModel on change
Issue 19: clear() on an empty ObservableList bound to JList/JTable causes exception
Issue 20: AbstractButtonAdapterProvider.Adapter.cachedSelected


1.2 Release (2007/10/29)
--------------------------
This release contains some minor API changes and bug fixes.

API changes:

- The hasEditedSource and hasEditedTarget properties have been removed from
  Binding and AutoBinding, as have the hasEditedTargetBindings property and
  getEditedTargetBindings() method from BindingGroup. These properties and
  methods, which existed to assist in tracking which Bindings require saving,
  are to be replaced with a more robust system of notifications and methods.

- The semantics of Binding's sourceUnreadableValue property has changed such
  that it is only used if explicity set by the developer. A new SyncFailure
  type, SOURCE_UNREADABLE, has been added to indicate an attempt to refresh
  with an unreadable source and no sourceUnreadableValue set.

- BindingListener's sourceEdited and targetEdited methods have been deprecated
  and replaced with sourceChanged and targetChanged methods that provide the
  originating PropertyStateEvent.

- BindingListener's syncFailed method has been changed to take a single
  SyncFailure rather than a varargs. The original signature was designed to
  support AutoBinding's current update strategies, which have been deemed
  too complex and will be simplified in a future update.

Issues Resolved:

Issue 15: MissingResourceException on wrong ELProperty
Issue 4: targetEdited not fired when changing a JTable cell


1.1.1 Release (2007/10/18)
--------------------------
This release contains one bug fix, for the following issue:

Issue 12: sourceUnreadableValue/sourceNullValue ignored for
          JTableBinding.ColumnBinding and JListBinding.DetailBinding


1.1 Release (2007/10/17)
--------------------------
This release provides a major performance improvement over version 1.0,
a small set of bug fixes, and the addition of support for binding to JSpinner's
value property.

An extreme difference in performance can be seen with BeanProperty and
ELProperty in this version. As these classes are central to binding, the result
is that most things now perform MUCH faster. Consider the following simple
testcase:

    Person person = new Person(10, "John", "Smith", true, 30);
    Property p = BeanProperty.create("firstName");
    p.addPropertyStateListener(person, new PSL());
    long start = System.currentTimeMillis();
    for (int i = 0; i < 100000; i++) {
        p.getValue(person);
    }
    System.out.println(System.currentTimeMillis() - start);

In 1.0, this test takes approximately 13,100 milliseconds on my fast machine.
On the contrary, this test takes approximately 8 milliseconds in 1.1!

In addition to the performance improvements, the following were fixed or enhanced:

- Added support for binding to a JSpinner's value property
- JSlider's "value_IGNORE_ADJUSTING" property, which was broken in 1.0, has been fixed
- Fixed Issue 8: Typo in removeTableModelListener
- Fixed Issue 10: Binding does not work after updating a target value with JList/JTable/JComboBox
- Fixed Issue 11: Setting convertor on ColumnBinding dosn't work
- Other small tweaks and fixes


1.0 Release (2007/09/05)
--------------------------
This release represents a major re-architecture of the Beans Binding API, based
on feedback from members of the expert group and the community (Thank You!).
While the work on this project continues through the JCP process,
with feature additions and possible API changes to come, the current
state represents the core API that is expected, for the most part, to
persist. As such, we're calling it 1.0 and releasing!

Some of the major points of interest in this release:

  1) The concept of a property has been factored out into an abstract Property class,
     with two concrete implementations of interest: BeanProperty and ELProperty.

  2) Binding is now an abstract class representing a binding between two Property
     instances (typically associated with two objects).

  3) Binding with automatic syncing is implemented by a new concrete AutoBinding subclass.

  4) Bindings to complex Swing components (such as JTable, JList and JComboBox) are
     now handled by custom Binding subclasses.

  5) For those synthetic Swing properties that we expose via adapters, those with
     multiple possible behaviors are exposed as multiple synthetic properties.
     For example: "text", "text_ON_FOCUS_LOST" and "text_ON_ACTION_OR_FOCUS_LOST"
     for JTextField; "selectedElement" and "selectedElement_IGNORE_ADJUSTING" for
     JList and JTable.

  6) Everything has been repackaged into org.jdesktop packages.

Please note that the process of updating the project's unit test suite for the
re-architecture has not yet been completed. As such, the majority of unit tests
are not compileable or runnable.


0.6.1 Release (2007/06/22)
--------------------------
The purpose of this release is a set of name changes that make things
more intuitive and easier to use.

API changes:

  1) UpdateStrategy.READ_FROM_SOURCE has been renamed to the shorter
     UpdateStrategy.READ

  2) TextChangeStategy is now a top-level enum. In addition, the values
     CHANGE_ON_TYPE, CHANGE_ON_ACTION_OR_FOCUS_LOST and CHANGE_ON_FOCUS_LOST
     have been shortened to ON_TYPE, ON_ACTION_OR_FOCUS_LOST, ON_FOCUS_LOST.

  3) Binding.Parameter has been renamed to Binding.ParameterKey and
     Binding.setValue/getValue have been given the more appropriate names
     Binding.putParameter/getParameter.

  4) All Swing ParameterKeys are now in a top-level ParameterKeys class.
     They've been renamed as appropriate to reflect the fact that
     they are constants. A few have also been shortened.

  5) SwingBindingSupport has been removed. Documentation for Swing binding
     is now in the package-level documentation.

To see how some of these changes affect you, let's look at two examples:

Before:

Binding b = new Binding(list, null, table, "elements");
b.addChildBinding("${firstName}, null)
    .setValue(SwingBindingSupport.TableColumnParameter, 0)
    .setValue(SwingBindingSupport.TableColumnClassParameter, String.class);

After:

Binding b = new Binding(list, null, table, "elements");
b.addChildBinding("${firstName}, null)
    .putParameter(ParameterKeys.COLUMN, 0)
    .putParameter(ParameterKeys.COLUMN_CLASS, String.class);

Likewise, before:

Binding b = new Binding(object, "${property}", textField, "text");
b.setValue(SwingBindingSupport.TextChangeStrategyParameter,
           SwingBindingSupport.TextChangeStrategy.CHANGE_ON_TYPE);

After:

Binding b = new Binding(object, "${property}", textField, "text");
binding.putParameter(ParameterKeys.TEXT_CHANGE_STRATEGY,
                     TextChangeStrategy.ON_TYPE);


0.6 Release (2007/06/20)
--------------------------
Notes on this release are broken into the following sections:
  API Changes/Additions, Issues Resolved, Other

*** API Changes/Additions ***

  1) Binding.addBinding/removeBinding/getBindings have been renamed to the more
     descriptive Binding.addChildBinding/removeChildBinding/getChildBindings

  2) Binding.setSourcePath/getSourcePath have been renamed to the more
     appropriate Binding.setSourceExpression/getSourceExpression

  3) To enforce compile-time type safety, the Object varargs parameter has been
     removed from all constructors and methods in Binding and BindingContext.
     You must now call setValue directly. To allow for method chaining, setValue
     now returns the Binding. As an example, replace this Binding:

     Binding b = new Binding(source, "${property}", target, "property",
                             Parameter1, param1Value, Parameter2, param2Value);

     with this:

     Binding b = new Binding(source, "${property}", target, "property");
     b.setValue(Parameter1, param1Value).setValue(Parameter2, param2Value);

  4) Some Binding and BindingContext methods were updated to throw the more
     appropriate IllegalArgumentException (rather than IllegalStateException)
     for certain conditions.

  5) Binding now has a name property. The ability to name a binding assists in
     debugging. Its main goal, however, is to make it possible to fetch
     bindings by name. This will show its full utility with future changes
     making it easier to validate and then commit or revert bindings as a group.

     To support naming a Binding, the following API additions have been
     made to Binding:
       - Constructors that take a String name parameter
       - void setName(String name)
       - String getName()
       - addChildBinding methods that take a String name parameter
       - Binding getChildBinding(String name)
     In addition, the following additions have been made to BindingContext:
       - addBinding methods that take a String name parameter
       - Binding getBinding(String name)

  6) Added a Parameter to control the editability of a JTable when it is the
     target of a binding. A new EditableParameter has been added to
     SwingBindingSupport to control this. It can be used on a top-level
     binding to control the editability of the entire JTable, and/or on the
     binding's individual child bindings to control editability of individual
     columns. For example, to make all columns non-editable, except for
     the first:

     Binding b = new Binding(list, null, table, "elements");
     // whole table is non-editable
     b.setValue(SwingBindingSupport.EditableParameter, false);
     b.addChildBinding("${firstName}, null)
         .setValue(SwingBindingSupport.TableColumnParameter, 0)
         // this column IS editable
         .setValue(SwingBindingSupport.EditableParameter, true);
     b.addChildBinding("${lastName}, null)
         .setValue(SwingBindingSupport.TableColumnParameter, 1);

*** Issues Resolved ***

  2: Need converters between various types and String
  5: JTable binding support doesn't support sorting and filtering

*** Other ***

  The JavaDoc in Binding and SwingBindingSupport has been updated to reflect the
  change to use EL for the source "property".


0.5 Release (2007/04/02)
--------------------------
Initial public release.
