This is an automated email from the ASF dual-hosted git repository. ntimofeev pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push: new c1e3e91a0 CAY-2751 Simplify DataNode configuration - update UI c1e3e91a0 is described below commit c1e3e91a0faf95166edc56001bde12c9fabdf805 Author: Nikita Timofeev <stari...@gmail.com> AuthorDate: Thu Jul 14 18:34:44 2022 +0300 CAY-2751 Simplify DataNode configuration - update UI --- .../editor/datanode/CustomDataSourceEditor.java | 33 +++++++++++++++------ .../editor/datanode/CustomDataSourceView.java | 11 +++++-- .../editor/datanode/MainDataNodeEditor.java | 34 ++++++++++++++++++---- 3 files changed, 61 insertions(+), 17 deletions(-) diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/CustomDataSourceEditor.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/CustomDataSourceEditor.java index 0315ed6fa..a3bf188ec 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/CustomDataSourceEditor.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/CustomDataSourceEditor.java @@ -19,8 +19,7 @@ package org.apache.cayenne.modeler.editor.datanode; -import java.awt.Component; - +import org.apache.cayenne.configuration.DataNodeDescriptor; import org.apache.cayenne.modeler.ProjectController; import org.apache.cayenne.swing.BindingBuilder; import org.apache.cayenne.swing.BindingDelegate; @@ -32,21 +31,37 @@ public class CustomDataSourceEditor extends DataSourceEditor { protected CustomDataSourceView view; - public CustomDataSourceEditor(ProjectController controller, - BindingDelegate nodeChangeProcessor) { + protected String factoryName; + + public CustomDataSourceEditor(ProjectController controller, BindingDelegate nodeChangeProcessor) { super(controller, nodeChangeProcessor); } + @Override + public void setNode(DataNodeDescriptor node) { + setFactoryName(node.getDataSourceFactoryType()); + super.setNode(node); + } + + @Override protected void prepareBindings(BindingBuilder builder) { this.view = new CustomDataSourceView(); - fieldAdapters = new ObjectBinding[1]; - fieldAdapters[0] = builder.bindToTextField( - view.getLocationHint(), - "node.parameters"); + fieldAdapters = new ObjectBinding[2]; + fieldAdapters[0] = builder.bindToTextField(view.getFactoryName(), "factoryName"); + fieldAdapters[1] = builder.bindToTextField(view.getLocationHint(), "node.parameters"); } - public Component getView() { + @Override + public CustomDataSourceView getView() { return view; } + + public String getFactoryName() { + return factoryName; + } + + public void setFactoryName(String factoryName) { + this.factoryName = factoryName; + } } diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/CustomDataSourceView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/CustomDataSourceView.java index b5e95fc1e..78dd079a7 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/CustomDataSourceView.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/CustomDataSourceView.java @@ -31,10 +31,12 @@ import com.jgoodies.forms.layout.FormLayout; public class CustomDataSourceView extends JPanel { + protected JTextField factoryName; protected JTextField locationHint; public CustomDataSourceView() { + factoryName = new JTextFieldUndoable(); locationHint = new JTextFieldUndoable(); // assemble @@ -42,9 +44,10 @@ public class CustomDataSourceView extends JPanel { DefaultFormBuilder builder = new DefaultFormBuilder(layout); builder.setDefaultDialogBorder(); - builder.appendSeparator("Custom Configuration"); + builder.appendSeparator("Custom Data Source Factory"); - builder.append("Location Hint:", locationHint); + builder.append("Factory Class:", factoryName); + builder.append("Location Hint (optional):", locationHint); this.setLayout(new BorderLayout()); this.add(builder.getPanel(), BorderLayout.CENTER); @@ -53,4 +56,8 @@ public class CustomDataSourceView extends JPanel { public JTextField getLocationHint() { return locationHint; } + + public JTextField getFactoryName() { + return factoryName; + } } diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeEditor.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeEditor.java index 5cb47cb65..a6a1d188c 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeEditor.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeEditor.java @@ -54,9 +54,11 @@ import org.apache.cayenne.validation.ValidationException; public class MainDataNodeEditor extends CayenneController { protected static final String NO_LOCAL_DATA_SOURCE = "Select DataSource for Local Work..."; + private final static String XML_POOLING_DATA_SOURCE_FACTORY = XMLPoolingDataSourceFactory.class.getName(); private final static String[] STANDARD_DATA_SOURCE_FACTORIES = new String[] { - XMLPoolingDataSourceFactory.class.getName() + DataSourceFactoryType.CAYENNE.getLabel(), + DataSourceFactoryType.CUSTOM.getLabel() }; private final static String[] STANDARD_SCHEMA_UPDATE_STRATEGY = new String[] { @@ -71,7 +73,7 @@ public class MainDataNodeEditor extends CayenneController { protected DataNodeDescriptor node; protected Map<String, DataSourceEditor> datasourceEditors; - protected DataSourceEditor defaultSubeditor; + protected CustomDataSourceEditor defaultSubeditor; protected BindingDelegate nodeChangeProcessor; protected ObjectBinding[] bindings; protected ObjectBinding localDataSourceBinding; @@ -106,12 +108,18 @@ public class MainDataNodeEditor extends CayenneController { } public String getFactoryName() { - return (node != null) ? node.getDataSourceFactoryType() : null; + return XML_POOLING_DATA_SOURCE_FACTORY.equals(node.getDataSourceFactoryType()) + ? DataSourceFactoryType.CAYENNE.getLabel() + : DataSourceFactoryType.CUSTOM.getLabel(); } public void setFactoryName(String factoryName) { if (node != null) { - node.setDataSourceFactoryType(factoryName); + if(DataSourceFactoryType.CAYENNE.getLabel().equals(factoryName)) { + node.setDataSourceFactoryType(XML_POOLING_DATA_SOURCE_FACTORY); + } else { + node.setDataSourceFactoryType(defaultSubeditor.getFactoryName()); + } showDataSourceSubview(factoryName); } } @@ -162,7 +170,7 @@ public class MainDataNodeEditor extends CayenneController { protected void initController() { view.getDataSourceDetail().add(defaultSubeditor.getView(), "default"); - view.getFactories().setEditable(true); + view.getFactories().setEditable(false); // init combo box choices view.getFactories().setModel(new DefaultComboBoxModel<>(STANDARD_DATA_SOURCE_FACTORIES)); @@ -251,7 +259,7 @@ public class MainDataNodeEditor extends CayenneController { DataSourceEditor c = datasourceEditors.get(factoryName); // create subview dynamically... if (c == null) { - if (XMLPoolingDataSourceFactory.class.getName().equals(factoryName)) { + if (DataSourceFactoryType.CAYENNE.getLabel().equals(factoryName)) { c = new JDBCDataSourceEditor((ProjectController) getParent(), nodeChangeProcessor); } else { // special case - no detail view, just show it and bail.. @@ -280,4 +288,18 @@ public class MainDataNodeEditor extends CayenneController { public void setAdapterName(String name) { node.setAdapterType(name); } + + enum DataSourceFactoryType { + CAYENNE("Cayenne Data Source Factory"), + CUSTOM("Custom Data Source Factory"); + private final String label; + + DataSourceFactoryType(String label) { + this.label = label; + } + + public String getLabel() { + return label; + } + } }