Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Eclipse Platform » [DataBinding] DOM and Rhino JFace Databinding implementation.
[DataBinding] DOM and Rhino JFace Databinding implementation. [message #330467] Tue, 29 July 2008 16:20 Go to next message
Angelo ZERR is currently offline Angelo ZERRFriend
Messages: 122
Registered: July 2009
Senior Member
Hi,

I'm TK-UI developer. TK-UI is Toolkit to describe your UI with any XML
markup (XUL, XHTML...)
and render it with Swing or SWT. I'm using JFace databinding to bind DOM
Document (Element, Attr, Text...)
with UI widget. So when you update UI it update DOM, whoen you update DOM,
the UI is updated.

For instance you can write this XHTML content :

<html xmlns="http://www.w3.org/1999/xhtml">
<input type="text" value="bla bla bla" />
</html>

And TK-UI load DOM Document and display SWT Text with "bla bla bla".
When you type some data into input (SWT Text), it update attribute value
of the DOM.
So DOM Document are totally bounded with UI.

To manage DOM binding I have created DOMObservables (like BeansObservales,
PojoObservables...)
and you use this factory like another JFace databinding implementation.
This project is stored into
UFace project.

But I would like know if JFace team is interested with my DOM JFace
Databinding implementation?
Indead I would like to improve this project to manage a lot of thing like
masterdetail.

Here simple sample with masterdetail which manage three SWT List which
display countries, cities and streets.
Each SWT List are bounded with this DOM Document :

<countries>
<country name="Country 1" >
<cities>
<city name="City 1.1" >
<street name="Street 1.1.1" />
</city>
<city name="City 1.2" >
<street name="Street 1.2.1" />
<street name="Street 1.2.2" />
<street name="Street 1.2.3" />
</city>
<city name="City 1.3" >
<street name="Street 1.3.1" />
<street name="Street 1.3.2" />
</city>
</cities>
</country>
<country name="Country 2" >
<cities>
<city name="City 2.1" >
<street name="Street 2.1.1" />
<street name="Street 2.1.2" />
</city>
<city name="City 2.2" >
<street name="Street 2.2.1" />
<street name="Street 2.2.2" />
<street name="Street 2.2.3" />
</city>
</cities>
</country>
</countries>

The first SWT list display countries (Country 1 and Country 2 ).
When you select a country the second SWT List display cities (ex : you
select
Country 1, SWT List cities display City 1.1, City 1.2, City 1.3).

Here the Java code for this sample :

Display display = new Display();
Shell shell = new Shell(display, SWT.SHELL_TRIM);
FillLayout layout = new FillLayout();
shell.setLayout(layout);

Composite composite = new Composite(shell, SWT.NONE);
composite.setLayout(new FillLayout());

DocumentBuilderFactory factory = new
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl();
DocumentBuilder builder = factory.newDocumentBuilder();
Document countriesDOM = builder.parse(DOMComboViewerMasterDetail.class
.getResourceAsStream("countries.xml"));

final Realm realm = SWTObservables.getRealm(display);

// Country
org.eclipse.swt.widgets.List countryList = new
org.eclipse.swt.widgets.List(
composite, SWT.BORDER | SWT.V_SCROLL);
ListViewer countryViewer = new ListViewer(countryList);
ObservableListContentProvider countryViewerContent = new
ObservableListContentProvider();
countryViewer.setContentProvider(countryViewerContent);

countryViewer.setLabelProvider(new LabelProvider() {
public String getText(Object element) {
Element elt = (Element) element;
return elt.getAttribute("name");
}
});

IObservableList countries = DOMObservables.observeElementItems(realm,
countriesDOM.getDocumentElement(), "country", null, null);
countryViewer.setInput(countries);

// City
IObservableValue selectedCountry = ViewersObservables
.observeSingleSelection(countryViewer);

org.eclipse.swt.widgets.List cityList = new org.eclipse.swt.widgets.List(
composite, SWT.BORDER | SWT.V_SCROLL);
ListViewer cityViewer = new ListViewer(cityList);
ObservableListContentProvider cityViewerContent = new
ObservableListContentProvider();
cityViewer.setContentProvider(cityViewerContent);

cityViewer.setLabelProvider(new LabelProvider() {
public String getText(Object element) {
Element elt = (Element) element;
return elt.getAttribute("name");
}
});

IObservableList cities = DOMObservables.observeDetailList(realm,
selectedCountry, "city");
cityViewer.setInput(cities);

// Street
IObservableValue selectedCity = ViewersObservables
.observeSingleSelection(cityViewer);

org.eclipse.swt.widgets.List streetList = new org.eclipse.swt.widgets.List(
composite, SWT.BORDER | SWT.V_SCROLL);
ListViewer streetViewer = new ListViewer(streetList);
ObservableListContentProvider streetViewerContent = new
ObservableListContentProvider();
streetViewer.setContentProvider(streetViewerContent);

streetViewer.setLabelProvider(new LabelProvider() {
public String getText(Object element) {
Element elt = (Element) element;
return elt.getAttribute("name");
}
});

IObservableList streets = DOMObservables.observeDetailList(realm,
selectedCity, "street");
streetViewer.setInput(streets);

shell.pack();
shell.open();

while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}

shell.dispose();

If you are interested with my work, don't hesitate to contact me, I will
happy
to contribute to JFace Databinding project.

At end I have too start Rhino JFace Databinding to bind Scriptable
Javascript Object with another thing (DOM, SWT UI....)
I could tell you more if you are interested.

Regards Angelo
Re: [DataBinding] DOM and Rhino JFace Databinding implementation. [message #330483 is a reply to message #330467] Wed, 30 July 2008 01:37 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: zx.code9.com

Angelo wrote:
> Hi,
>
> I'm TK-UI developer. TK-UI is Toolkit to describe your UI with any XML
> markup (XUL, XHTML...)
> and render it with Swing or SWT. I'm using JFace databinding to bind DOM
> Document (Element, Attr, Text...)
> with UI widget. So when you update UI it update DOM, whoen you update
> DOM, the UI is updated.
>
> For instance you can write this XHTML content :
>
> <html xmlns="http://www.w3.org/1999/xhtml">
> <input type="text" value="bla bla bla" />
> </html>
>
> And TK-UI load DOM Document and display SWT Text with "bla bla bla".
> When you type some data into input (SWT Text), it update attribute value
> of the DOM.
> So DOM Document are totally bounded with UI.
>
> To manage DOM binding I have created DOMObservables (like
> BeansObservales, PojoObservables...)
> and you use this factory like another JFace databinding implementation.
> This project is stored into
> UFace project.
>
> But I would like know if JFace team is interested with my DOM JFace
> Databinding implementation?
> Indead I would like to improve this project to manage a lot of thing
> like masterdetail.
>
> Here simple sample with masterdetail which manage three SWT List which
> display countries, cities and streets.
> Each SWT List are bounded with this DOM Document :
>
> <countries>
> <country name="Country 1" >
> <cities>
> <city name="City 1.1" >
> <street name="Street 1.1.1" />
> </city>
> <city name="City 1.2" >
> <street name="Street 1.2.1" />
> <street name="Street 1.2.2" />
> <street name="Street 1.2.3" />
> </city>
> <city name="City 1.3" >
> <street name="Street 1.3.1" />
> <street name="Street 1.3.2" />
> </city>
> </cities>
> </country>
> <country name="Country 2" >
> <cities>
> <city name="City 2.1" >
> <street name="Street 2.1.1" />
> <street name="Street 2.1.2" />
> </city>
> <city name="City 2.2" >
> <street name="Street 2.2.1" />
> <street name="Street 2.2.2" />
> <street name="Street 2.2.3" />
> </city>
> </cities>
> </country>
> </countries>
>
> The first SWT list display countries (Country 1 and Country 2 ).
> When you select a country the second SWT List display cities (ex : you
> select
> Country 1, SWT List cities display City 1.1, City 1.2, City 1.3).
>
> Here the Java code for this sample :
>
> Display display = new Display();
> Shell shell = new Shell(display, SWT.SHELL_TRIM);
> FillLayout layout = new FillLayout();
> shell.setLayout(layout);
>
> Composite composite = new Composite(shell, SWT.NONE);
> composite.setLayout(new FillLayout());
>
> DocumentBuilderFactory factory = new
> org.apache.xerces.jaxp.DocumentBuilderFactoryImpl();
> DocumentBuilder builder = factory.newDocumentBuilder();
> Document countriesDOM = builder.parse(DOMComboViewerMasterDetail.class
> .getResourceAsStream("countries.xml"));
>
> final Realm realm = SWTObservables.getRealm(display);
>
> // Country
> org.eclipse.swt.widgets.List countryList = new
> org.eclipse.swt.widgets.List(
> composite, SWT.BORDER | SWT.V_SCROLL);
> ListViewer countryViewer = new ListViewer(countryList);
> ObservableListContentProvider countryViewerContent = new
> ObservableListContentProvider();
> countryViewer.setContentProvider(countryViewerContent);
>
> countryViewer.setLabelProvider(new LabelProvider() {
> public String getText(Object element) {
> Element elt = (Element) element;
> return elt.getAttribute("name");
> }
> });
>
> IObservableList countries = DOMObservables.observeElementItems(realm,
> countriesDOM.getDocumentElement(), "country", null, null);
> countryViewer.setInput(countries);
>
> // City
> IObservableValue selectedCountry = ViewersObservables
> .observeSingleSelection(countryViewer);
>
> org.eclipse.swt.widgets.List cityList = new org.eclipse.swt.widgets.List(
> composite, SWT.BORDER | SWT.V_SCROLL);
> ListViewer cityViewer = new ListViewer(cityList);
> ObservableListContentProvider cityViewerContent = new
> ObservableListContentProvider();
> cityViewer.setContentProvider(cityViewerContent);
>
> cityViewer.setLabelProvider(new LabelProvider() {
> public String getText(Object element) {
> Element elt = (Element) element;
> return elt.getAttribute("name");
> }
> });
>
> IObservableList cities = DOMObservables.observeDetailList(realm,
> selectedCountry, "city");
> cityViewer.setInput(cities);
>
> // Street
> IObservableValue selectedCity = ViewersObservables
> .observeSingleSelection(cityViewer);
>
> org.eclipse.swt.widgets.List streetList = new org.eclipse.swt.widgets.List(
> composite, SWT.BORDER | SWT.V_SCROLL);
> ListViewer streetViewer = new ListViewer(streetList);
> ObservableListContentProvider streetViewerContent = new
> ObservableListContentProvider();
> streetViewer.setContentProvider(streetViewerContent);
>
> streetViewer.setLabelProvider(new LabelProvider() {
> public String getText(Object element) {
> Element elt = (Element) element;
> return elt.getAttribute("name");
> }
> });
>
> IObservableList streets = DOMObservables.observeDetailList(realm,
> selectedCity, "street");
> streetViewer.setInput(streets);
>
> shell.pack();
> shell.open();
>
> while (!shell.isDisposed()) {
> if (!display.readAndDispatch())
> display.sleep();
> }
>
> shell.dispose();
>
> If you are interested with my work, don't hesitate to contact me, I will
> happy
> to contribute to JFace Databinding project.
>
> At end I have too start Rhino JFace Databinding to bind Scriptable
> Javascript Object with another thing (DOM, SWT UI....)
> I could tell you more if you are interested.

Angelo, I recommend sending this as an email to eclipse-dev, prefixed
with [Databinding]... this is more of a development related discussion
so either the eclipse-dev mailing list or a bug report is the better venue.

Cheers,

~ Chris
Re: [DataBinding] DOM and Rhino JFace Databinding implementation. [message #330489 is a reply to message #330483] Wed, 30 July 2008 05:54 Go to previous message
Angelo ZERR is currently offline Angelo ZERRFriend
Messages: 122
Registered: July 2009
Senior Member
Hi Chris,

Thank for your reply and your suggestion.
I have sent my post to eclipse-dev.

Regards Angelo
Previous Topic:3.4 x64 Windows Vista x64 - Only works when launched via "Run as Administrator?"
Next Topic:eclipse launch framework
Goto Forum:
  


Current Time: Tue Jul 16 06:42:26 GMT 2024

Powered by FUDForum. Page generated in 0.03171 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top