Bonjour,
Je me permets de poster un message pour informer que j'ai créé Pojo Bindable qui permet d'utiliser JFace Data Binding avec BeansObservable avec de simple Pojo.
Sans Pojo Bindable, si vous utilisez JFace Data Binding avec de simples Pojo, vous devez utiliser PojoObservables qui permet de binder un Pojo avec une widget SWT. Le binding s'effectue que dans un sens UI -> Model Pojo.
Si vous souhaitez effectuer du binding dans les 2 sens UI <-> Model Pojo, vous devez coder le déclenchement des listener avec PropertyChangeSupport sur chacun des setter.
Avec Pojo bindable vous codez un simple Pojo et celui-ci est transformé pour ajouter automatiquement les listeners et bénéficier des 2 sens UI <-> Model Pojo.
Par exemple si vous écrivez ce Pojo :
Pojo Bindable transforme au runtime le bytecode de la classe Pojo en :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package org.eclipse.core.examples.databinding.pojo.bindable.model; public class PojoPerson { String name = "HelloWorld"; public String getName() { return name; } public void setName(String name) { this.name = name; } }
La transformation du bytecode s'effectue avec ASM et utilise :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 package org.eclipse.core.examples.databinding.pojo.bindable.model; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; public class PojoPerson { private transient PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport( this); String name = "HelloWorld"; public String getName() { return name; } public void setName(String name) { Object oldValue = getName(); Object newValue = name; this.name = name; firePropertyChange("name", oldValue, newValue); } public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { propertyChangeSupport.addPropertyChangeListener(propertyName, listener); } public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { propertyChangeSupport.removePropertyChangeListener(propertyName, listener); } protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue); } }
- dans un contexte NON OSGi un Agent Java => http://wiki.eclipse.org/JFace_Data_B...ble_Java_Agent
- dans un contexte OSGi (uniquement avec Equinox) => http://wiki.eclipse.org/JFace_Data_B...ojoBindableSVN
Angelo
Partager