Skip to content

Commit 452fe96

Browse files
committed
CAY-2918 Remove OGNL Binding Architecture from CayenneModeler
getting rid of "bindToTextField"
1 parent fef4609 commit 452fe96

9 files changed

Lines changed: 229 additions & 145 deletions

File tree

modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/gen/DBGeneratorOptions.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,10 @@
3434
import org.apache.cayenne.swing.ObjectBinding;
3535
import org.apache.cayenne.validation.ValidationResult;
3636

37-
import javax.swing.DefaultComboBoxModel;
38-
import javax.swing.JFileChooser;
39-
import javax.swing.JOptionPane;
40-
import javax.swing.WindowConstants;
37+
import javax.swing.*;
4138
import javax.swing.event.ChangeEvent;
4239
import javax.swing.event.ChangeListener;
43-
import java.awt.Component;
40+
import java.awt.*;
4441
import java.io.File;
4542
import java.io.FileWriter;
4643
import java.io.IOException;
@@ -55,7 +52,6 @@ public class DBGeneratorOptions extends CayenneController {
5552

5653
protected DBGeneratorOptionsView view;
5754
protected ObjectBinding[] optionBindings;
58-
protected ObjectBinding sqlBinding;
5955
protected ObjectBinding adapterBinding;
6056

6157
protected DBConnectionInfo connectionInfo;
@@ -98,10 +94,6 @@ public DBGeneratorDefaults getGeneratorDefaults() {
9894
return generatorDefaults;
9995
}
10096

101-
public String getTextForSQL() {
102-
return textForSQL;
103-
}
104-
10597
protected void initController() {
10698

10799
DefaultComboBoxModel<String> adapterModel = new DefaultComboBoxModel<>(
@@ -113,7 +105,6 @@ protected void initController() {
113105
getApplication().getBindingFactory(),
114106
this);
115107

116-
sqlBinding = builder.bindToTextArea(view.getSql(), "textForSQL");
117108
adapterBinding = builder.bindToComboSelection(
118109
view.getAdapters(),
119110
"connectionInfo.dbAdapter",
@@ -208,7 +199,7 @@ protected void refreshView() {
208199
optionBinding.updateView();
209200
}
210201

211-
sqlBinding.updateView();
202+
view.getSql().setText(textForSQL);
212203
}
213204

214205
// ===============
@@ -242,7 +233,7 @@ public void refreshSQLAction() {
242233
prepareGenerator();
243234
generatorDefaults.configureGenerator(generators);
244235
createSQL();
245-
sqlBinding.updateView();
236+
view.getSql().setText(textForSQL);
246237
}
247238

248239
/**

modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/merge/MergerOptions.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,9 @@
4949
import org.apache.cayenne.modeler.dialog.ValidationResultBrowser;
5050
import org.apache.cayenne.modeler.pref.DBConnectionInfo;
5151
import org.apache.cayenne.modeler.util.CayenneController;
52+
import org.apache.cayenne.modeler.util.TextBinder;
5253
import org.apache.cayenne.project.Project;
5354
import org.apache.cayenne.resource.Resource;
54-
import org.apache.cayenne.swing.BindingBuilder;
55-
import org.apache.cayenne.swing.ObjectBinding;
5655
import org.apache.cayenne.validation.ValidationResult;
5756
import org.slf4j.LoggerFactory;
5857

@@ -77,7 +76,6 @@
7776
public class MergerOptions extends CayenneController {
7877

7978
protected MergerOptionsView view;
80-
protected ObjectBinding sqlBinding;
8179

8280
protected DBConnectionInfo connectionInfo;
8381
protected DataMap dataMap;
@@ -123,11 +121,7 @@ public String getTextForSQL() {
123121

124122
protected void initController() {
125123

126-
BindingBuilder builder = new BindingBuilder(
127-
getApplication().getBindingFactory(),
128-
this);
129-
130-
sqlBinding = builder.bindToTextArea(view.getSql(), "textForSQL");
124+
TextBinder.bind(view.getSql(), v -> textForSQL = v);
131125

132126
view.getGenerateButton().addActionListener(e -> generateSchemaAction());
133127
view.getSaveSqlButton().addActionListener(e -> storeSQLAction());
@@ -213,7 +207,7 @@ protected void createSQL() {
213207
}
214208

215209
protected void refreshView() {
216-
sqlBinding.updateView();
210+
view.getSql().setText(textForSQL);
217211
}
218212

219213
// ===============
@@ -241,7 +235,7 @@ public void refreshGeneratorAction() {
241235
*/
242236
public void refreshSQLAction() {
243237
createSQL();
244-
sqlBinding.updateView();
238+
view.getSql().setText(textForSQL);
245239
}
246240

247241
/**

modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/DBConnectionInfoEditor.java

Lines changed: 39 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,16 @@
1919

2020
package org.apache.cayenne.modeler.dialog.pref;
2121

22-
import java.awt.Component;
23-
24-
import javax.swing.DefaultComboBoxModel;
25-
2622
import org.apache.cayenne.modeler.pref.DBConnectionInfo;
2723
import org.apache.cayenne.modeler.util.CayenneController;
2824
import org.apache.cayenne.modeler.util.DbAdapterInfo;
29-
import org.apache.cayenne.swing.BindingBuilder;
30-
import org.apache.cayenne.swing.ObjectBinding;
25+
import org.apache.cayenne.modeler.util.TextBinder;
26+
27+
import javax.swing.*;
28+
import java.awt.*;
3129

3230
/**
3331
* A reusable editor for DBConnectionInfo object.
34-
*
3532
*/
3633
public class DBConnectionInfoEditor extends CayenneController {
3734

@@ -40,63 +37,58 @@ public class DBConnectionInfoEditor extends CayenneController {
4037

4138
protected DBConnectionInfoEditorView view;
4239
protected DBConnectionInfo connectionInfo;
43-
protected ObjectBinding[] bindings;
4440

4541
public DBConnectionInfoEditor(CayenneController parent) {
4642
super(parent);
4743

4844
this.view = new DBConnectionInfoEditorView();
49-
initBindings();
50-
}
51-
52-
public Component getView() {
53-
return view;
54-
}
55-
56-
protected void initBindings() {
5745
this.view.setEnabled(false);
5846

59-
DefaultComboBoxModel adapterModel = new DefaultComboBoxModel(DbAdapterInfo
60-
.getStandardAdapters());
47+
DefaultComboBoxModel adapterModel = new DefaultComboBoxModel(DbAdapterInfo.getStandardAdapters());
6148
view.getAdapters().setModel(adapterModel);
6249
view.getAdapters().setSelectedIndex(0);
6350

64-
BindingBuilder builder = new BindingBuilder(
65-
getApplication().getBindingFactory(),
66-
this);
67-
68-
bindings = new ObjectBinding[5];
69-
70-
bindings[0] = builder.bindToTextField(
71-
view.getUserName(),
72-
"connectionInfo.userName");
73-
bindings[1] = builder.bindToTextField(
74-
view.getPassword(),
75-
"connectionInfo.password");
76-
bindings[2] = builder.bindToTextField(
77-
view.getDriver(),
78-
"connectionInfo.jdbcDriver");
79-
bindings[3] = builder.bindToTextField(view.getUrl(), "connectionInfo.url");
80-
81-
bindings[4] = builder.bindToComboSelection(
82-
view.getAdapters(),
83-
"connectionInfo.dbAdapter", "Automatic");
51+
TextBinder.bind(view.getUserName(), v -> {
52+
DBConnectionInfo ci = connectionInfo;
53+
if (ci != null) ci.setUserName(v);
54+
});
55+
TextBinder.bind(view.getPassword(), v -> {
56+
DBConnectionInfo ci = connectionInfo;
57+
if (ci != null) ci.setPassword(v);
58+
});
59+
TextBinder.bind(view.getDriver(), v -> {
60+
DBConnectionInfo ci = connectionInfo;
61+
if (ci != null) ci.setJdbcDriver(v);
62+
});
63+
TextBinder.bind(view.getUrl(), v -> {
64+
DBConnectionInfo ci = connectionInfo;
65+
if (ci != null) ci.setUrl(v);
66+
});
67+
68+
view.getAdapters().addActionListener(e -> {
69+
DBConnectionInfo ci = connectionInfo;
70+
if (ci != null) {
71+
Object sel = view.getAdapters().getSelectedItem();
72+
ci.setDbAdapter("Automatic".equals(sel) ? null : (String) sel);
73+
}
74+
});
8475
}
8576

86-
public DBConnectionInfo getConnectionInfo() {
87-
return connectionInfo != null ? connectionInfo : emptyInfo;
77+
@Override
78+
public Component getView() {
79+
return view;
8880
}
8981

9082
public void setConnectionInfo(DBConnectionInfo connectionInfo) {
9183
this.connectionInfo = connectionInfo;
92-
refreshView();
93-
}
9484

95-
protected void refreshView() {
96-
getView().setEnabled(connectionInfo != null);
85+
view.setEnabled(connectionInfo != null);
9786

98-
for (ObjectBinding binding : bindings) {
99-
binding.updateView();
100-
}
87+
DBConnectionInfo ci = connectionInfo != null ? connectionInfo : emptyInfo;
88+
view.getUserName().setText(ci.getUserName());
89+
view.getPassword().setText(ci.getPassword());
90+
view.getDriver().setText(ci.getJdbcDriver());
91+
view.getUrl().setText(ci.getUrl());
92+
view.getAdapters().setSelectedItem(ci.getDbAdapter() != null ? ci.getDbAdapter() : "Automatic");
10193
}
10294
}

modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/CustomDataSourceEditor.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,14 @@
2121

2222
import org.apache.cayenne.configuration.DataNodeDescriptor;
2323
import org.apache.cayenne.modeler.ProjectController;
24-
import org.apache.cayenne.swing.BindingBuilder;
24+
import org.apache.cayenne.modeler.util.TextBinder;
2525
import org.apache.cayenne.swing.BindingDelegate;
26-
import org.apache.cayenne.swing.ObjectBinding;
2726

2827
/**
2928
*/
3029
public class CustomDataSourceEditor extends DataSourceEditor {
3130

3231
protected CustomDataSourceView view;
33-
3432
protected String factoryName;
3533

3634
public CustomDataSourceEditor(ProjectController controller, BindingDelegate nodeChangeProcessor) {
@@ -44,12 +42,23 @@ public void setNode(DataNodeDescriptor node) {
4442
}
4543

4644
@Override
47-
protected void prepareBindings(BindingBuilder builder) {
45+
protected void initFieldListeners() {
4846
this.view = new CustomDataSourceView();
4947

50-
fieldAdapters = new ObjectBinding[2];
51-
fieldAdapters[0] = builder.bindToTextField(view.getFactoryName(), "factoryName");
52-
fieldAdapters[1] = builder.bindToTextField(view.getLocationHint(), "node.parameters");
48+
TextBinder.bind(view.getFactoryName(), v -> {
49+
setFactoryName(v);
50+
nodeChangeProcessor.modelUpdated(null, null, null);
51+
});
52+
TextBinder.bind(view.getLocationHint(), v -> {
53+
getNode().setParameters(v);
54+
nodeChangeProcessor.modelUpdated(null, null, null);
55+
});
56+
}
57+
58+
@Override
59+
protected void refreshView() {
60+
view.getFactoryName().setText(factoryName);
61+
view.getLocationHint().setText(getNode().getParameters());
5362
}
5463

5564
@Override

modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/DataSourceEditor.java

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,24 +22,20 @@
2222
import org.apache.cayenne.configuration.DataNodeDescriptor;
2323
import org.apache.cayenne.modeler.ProjectController;
2424
import org.apache.cayenne.modeler.util.CayenneController;
25-
import org.apache.cayenne.swing.BindingBuilder;
2625
import org.apache.cayenne.swing.BindingDelegate;
27-
import org.apache.cayenne.swing.ObjectBinding;
2826
import org.apache.cayenne.util.Util;
2927

3028
/**
3129
*/
3230
public abstract class DataSourceEditor extends CayenneController {
3331

34-
protected ObjectBinding[] fieldAdapters;
3532
private DataNodeDescriptor node;
3633
protected BindingDelegate nodeChangeProcessor;
3734

38-
public DataSourceEditor(ProjectController controller,
39-
BindingDelegate nodeChangeProcessor) {
35+
public DataSourceEditor(ProjectController controller, BindingDelegate nodeChangeProcessor) {
4036
super(controller);
4137
this.nodeChangeProcessor = nodeChangeProcessor;
42-
initBindings();
38+
initFieldListeners();
4339
}
4440

4541
public DataNodeDescriptor getNode() {
@@ -49,26 +45,11 @@ public DataNodeDescriptor getNode() {
4945
public void setNode(DataNodeDescriptor node) {
5046
if (!Util.nullSafeEquals(this.node, node)) {
5147
this.node = node;
52-
53-
for (ObjectBinding fieldAdapter : fieldAdapters) {
54-
fieldAdapter.updateView();
55-
}
48+
refreshView();
5649
}
5750
}
5851

59-
protected void initBindings() {
60-
BindingBuilder builder = new BindingBuilder(
61-
getApplication().getBindingFactory(),
62-
this);
63-
builder.setDelegate(nodeChangeProcessor);
64-
prepareBindings(builder);
65-
}
66-
67-
protected abstract void prepareBindings(BindingBuilder builder);
52+
protected abstract void initFieldListeners();
6853

69-
protected void refreshView() {
70-
for (ObjectBinding fieldAdapter : fieldAdapters) {
71-
fieldAdapter.updateView();
72-
}
73-
}
54+
protected abstract void refreshView();
7455
}

0 commit comments

Comments
 (0)