1+ package com .vogella .rcp .databinding .parts ;
2+
3+ import javax .annotation .PostConstruct ;
4+
5+ import org .eclipse .core .databinding .DataBindingContext ;
6+ import org .eclipse .core .databinding .UpdateValueStrategy ;
7+ import org .eclipse .core .databinding .beans .BeanProperties ;
8+ import org .eclipse .core .databinding .conversion .IConverter ;
9+ import org .eclipse .core .databinding .observable .value .IObservableValue ;
10+ import org .eclipse .jface .databinding .swt .WidgetProperties ;
11+ import org .eclipse .jface .layout .GridDataFactory ;
12+ import org .eclipse .jface .layout .GridLayoutFactory ;
13+ import org .eclipse .swt .SWT ;
14+ import org .eclipse .swt .events .SelectionAdapter ;
15+ import org .eclipse .swt .events .SelectionEvent ;
16+ import org .eclipse .swt .layout .GridData ;
17+ import org .eclipse .swt .widgets .Button ;
18+ import org .eclipse .swt .widgets .Composite ;
19+ import org .eclipse .swt .widgets .Label ;
20+ import org .eclipse .swt .widgets .Text ;
21+
22+ public class SamplePart {
23+
24+ @ PostConstruct
25+ @ SuppressWarnings ("unchecked" )
26+ public void createPartControl (Composite parent ) {
27+ // create the Person model with programming skills
28+ Person person = new Person ();
29+ person .setName ("John" );
30+ person .setProgrammingSkills (new String [] { "Java" , "JavaScript" , "Groovy" });
31+ GridLayoutFactory .swtDefaults ().numColumns (2 ).applyTo (parent );
32+ Label programmingSkillsLabel = new Label (parent , SWT .NONE );
33+ programmingSkillsLabel .setText ("Programming Skills" );
34+ GridDataFactory .swtDefaults ().applyTo (programmingSkillsLabel );
35+ Text programmingSkillsText = new Text (parent , SWT .BORDER );
36+ GridDataFactory .fillDefaults ().grab (true , false ).applyTo (programmingSkillsText );
37+ // Do the actual binding and conversion
38+ DataBindingContext dbc = new DataBindingContext ();
39+
40+ // define converters
41+ IConverter convertToStringArray =
42+ IConverter .create (String .class , String [].class , (o1 ) -> ((String ) o1 ).split ("," ));
43+ IConverter convertToString =
44+ IConverter .create (String [].class , String .class , (o1 ) -> convert ((String [])o1 ));;
45+
46+ // create the observables, which should be bound
47+ IObservableValue <Text > programmingSkillsTarget = WidgetProperties .text (SWT .Modify ).observe (programmingSkillsText );
48+ IObservableValue <Person > programmingSkillsModel = BeanProperties .value ("programmingSkills" ).observe (person );
49+
50+ // bind observables together with the appropriate UpdateValueStrategies
51+ dbc .bindValue (programmingSkillsTarget , programmingSkillsModel ,
52+ UpdateValueStrategy .create (convertToStringArray ),
53+ UpdateValueStrategy .create (convertToString ));
54+
55+ // button to check the data model
56+ Button button = new Button (parent , SWT .PUSH );
57+ button .setLayoutData (new GridData (SWT .BEGINNING , SWT .CENTER , false , false ));
58+ button .setText ("Show data model" );
59+ button .addSelectionListener (new SelectionAdapter () {
60+ @ Override
61+ public void widgetSelected (SelectionEvent e ) {
62+ for (String string : person .getProgrammingSkills ()) {
63+ System .out .println (string );
64+
65+ }
66+ }
67+ });
68+
69+ }
70+
71+ private static String convert (String [] fromObject ) {
72+ String [] stringArray = fromObject ;
73+ StringBuilder sb = new StringBuilder ();
74+ int length = stringArray .length ;
75+ for (int i = 0 ; i < length ; i ++) {
76+ String string = stringArray [i ];
77+ sb .append (string );
78+ if (i + 1 < length ) {
79+ sb .append ("," );
80+ }
81+ }
82+ return sb .toString ();
83+ }
84+ }
0 commit comments