JFace Data Binding/DOM

From Eclipsepedia

Jump to: navigation, search
JFace Data Binding
Home
How to Contribute
FAQ
Snippets
Concepts
Binding
Converter
Observable
Realm

Target

Work is underway to support binding to w3c DOM node. See (for the moment) TK-UI SVN - you can find two plug-in project that provides DOM-based observables :

DOM binding sample

The TestHTMLInputText DOM binding sample explains how bind this XHTML content :

<html>
  <title>DOM Bindings - HTML Input Text Sample.</title>
  <label>This sample bind :
* CharacterData of DOM Element title with Text property of SWT Shell. 
* CharacterData of DOM Element label with Text property of SWT Label. 
* Attribute value of DOM Element input with Text property of SWT Text. 
* DOM Document content with Text property of SWT Text (Area).</label>
  <input type="text" value="bla bla bla" />	
</html>

with several SWT UI widgets :

TestHTMLInputText.JPG

This screen show the result of binding between the XHTMl DOM Document and SWT UI widgets.

This sample is DOM IObservableValue implementation. It bind:

  • CharacterData of DOM Element title with Text property of SWT Shell.
  • CharacterData of DOM Element label with Text property of SWT Label.
  • Attribute value of DOM Element input with Text property of SWT Text.
  • DOM Document content with Text property of SWT Text (Area).

DOMObservables is used to create IObservableValue or IObservableList DOM Node implementation to manage DOM binding.

Here the code used to bind attribute value of DOM Element input with Text property of SWT Text :

// Get input element
Element textElement = (Element) documentElement.getElementsByTagName("input").item(0);

// HTML : <input value="bla bla bla"... >
// Bind Attribute value of DOM Element input with Text property of
// SWT Text.
Text text = new Text(composite, SWT.BORDER);
context.bindValue(SWTObservables.observeText(text, SWT.Modify),
	DOMObservables.observeAttrValue(realm, textElement, "value"),null, null);

You can see that in this sample the observed Node is retrieved with getElementsByTagName methods. You can use XPath to retrieve Node to observe. To do that you must use DOMXPathObservables DOM observables factory.

Text text = new Text(composite, SWT.BORDER);
context.bindValue(SWTObservables.observeText(text, SWT.Modify),
     		  DOMXPathObservables.observeAttrValue(realm, document,
		  "value", "//input", null), null, null);