Friday, October 27, 2006

Changing to the eclipse.platform newsgroup

We're changing the official JFace Data Binding newsgroup from eclipse.platform.rcp (http://, news://) to eclipse.platform (http://, news://). The reason is that we feel like it's a little more intuitive as the plug-in isn't part of RCP and is a platform project. We'll still monitor the RCP newsgroup but in the future please post your questions to eclipse.platform. Also please remember to prefix the summary with "[DataBinding]" to make posts easier to find. For more information see bug 161885.

Tuesday, October 24, 2006

JFace Data Binding Google Search

I started a Custom Google Search for JFace Data Binding.

JFace Data Binding Google Search

I've done some tweaking and added the following refinements:


Searches bugzilla for the entered text and adds "[DataBinding]" to the search as all Data Binding bugs contain this in the title.


Search CVS and CVS commit messages.


Searches and the platform-ui-dev mailing list adding 'databinding OR "data binding"' to narrow the search.

When using any refinement it limits the searches to the sites I have listed for the refinement rather than just favoring the listed sites.

The main search searches the following sites:

This works nicely when combined with Firefox's keyword search or SafariStand's quick search.

Monday, October 23, 2006

Pardon our Progress: BindSpec and provisional APIs

A couple of people have run into issues lately attempting to use the provisional APIs in the latest version of Data Binding. They receive an exception along the lines of...

Exception in thread "main" org.eclipse.jface.internal.databinding.provisional.BindingException: No binding found for target: org.eclipse.jface.internal.databinding.internal.swt.TextObservableValue, model: org.eclipse.jface.databinding.observable.value.WritableValue

at org.eclipse.jface.internal.databinding.provisional.DataBindingContext.bind(

at org.eclipse.jface.internal.databinding.provisional.DataBindingContext.bind(

The issue is that the incorrect BindSpec has been passed to DataBindingContext.bind(...). But how can that be? Shouldn't the API enforce the correct type? Yes, well most of the time is should...

The signature for bind(...) is as follows...

public Binding bind(Object targetDescription,Object modelDescription, org.eclipse.jface.databinding.BindSpec bindSpec)

The method expects an instance of org.eclipse.jface.databinding.BindSpec. This is the 1.0 BindSpec. The problem is that internally if bind(...) doesn't receive an instance of org.eclipse.jface.internal.databinding.provisional.BindSpec, the provisional BindSpec, it won't create the Binding. The reason for this confusion is that we're trying to keep the provisional APIs working while refactoring to the 1.0 APIs. So even though the signature of the bind(...) method accepts org.eclipse.jface.databinding.BindSpec don't pass this type, pass org.eclipse.jface.internal.databinding.provisional.BindSpec instead.

So let's recap, when using the provisional DataBindingContext...

org.eclipse.jface.databinding.BindSpec == bad

org.eclipse.jface.internal.databinding.provisional.BindSpec == good

For more information see bug 161498.

Tuesday, October 17, 2006

Uber Factories and Project Refactoring

It would be difficult to try to sum up what has happened in Data Binding up until this point. So I thought I'd highlight a few changes/discussions that have occurred recently. In case you don't know we're on the road to the 1.0 release. One area that we're focusing on is API. I'll do my best to point out changes in the API.

bug 147563 - [DataBinding] Need a standard factory for data binding contexts

API Changes

"Those who already smoked the weed of the Überfactory and can't give up are advised to roll their own factories, or move to stronger stuff like e.g. AOP.""
- comment 75

If you are familiar with the Eclipse 3.2 version of Data Binding you might be familiar with the "Uber factories" that were used to create IObservables and Bindings. The factories, IBindingFactory and IObservableFactory, have been deprecated as we decided to keep the API simple and expressive in order to allow for transparency, simpler debugging, and better documentation. Currently there is SWT support using the new approach but we haven't moved the JFace support to the new API yet. For examples of the approach see SWTObservables and BeansObservables. Also, before the 1.0 release the static factory methods on SWTObservables will be changed from having a "get" prefix to an "observe" prefix.

bug 153630 - [DataBinding] Extract SWT specific code from JFace databinding into its own bundle

As of 20061004 what was org.eclipse.jface.databinding has been broken out into 3 separate plug-ins. The core framework no longer has SWT dependencies. The projects and their dependencies are as follows:

org.eclipse.jface.databinding "core data binding framework"
class library: J2ME Foundation 1.0

org.eclipse.jface.databinding.ui "binding to SWT and JFace"
class library: J2ME Foundation 1.0

org.eclipse.jface.databinding.beans "binding to Java beans"
class library: J2SE 1.4

Spreadsheet Example

Boris has been working on a Spreadsheet implemented using Data Binding. It's an interesting example that uses ComputedValue in case you'd like to see it in action.

bug 116920 - [DataBinding] need to handle model change events which don't happen in the UI thread

It looks like progress is being made on the concurrency front. If you have any input/concerns on concurrency in the framework please add them to the bug. The issue is that the framework is not thread safe and if possible we'd like it to be for the 1.0 release.

We have a FAQ

A FAQ has been started on Eclipsepedia.

The goal of fireChangeEvent()

This blog is for those interested in recent activity in the Eclipse JFace Data Binding project. The posts will be comprised of recent CVS commits, bug changes/resolutions, and any activity that might be of interest to those tracking the project. The goal is to cut down on the amount of work you have to do to know what's going on so that you can spend more time on using the toolkit and preparing yourself for what's coming. I'll try to keep things short and sweet. In that spirit, on to the first post.