This is an automated email from the ASF dual-hosted git repository.

aadamchik 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 3aeb0c287 CAY-2918 Remove OGNL Binding Architecture from CayenneModeler
3aeb0c287 is described below

commit 3aeb0c287cefeb841b2c2c0fa6d3a9a83ba3d488
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sun Apr 12 15:45:08 2026 -0400

    CAY-2918 Remove OGNL Binding Architecture from CayenneModeler
    
    getting rid of the binding code
---
 RELEASE-NOTES.txt                                  |   1 +
 .../main/resources/META-INF/cayenne/LICENSE.txt.vm |  59 -------
 .../main/resources/META-INF/cayenne/NOTICE.txt.vm  |   7 -
 .../org/apache/cayenne/exp/parser/SimpleNode.java  |   4 -
 modeler/cayenne-modeler/pom.xml                    |   5 -
 .../org/apache/cayenne/modeler/Application.java    |  32 +---
 .../cayenne/modeler/action/OpenProjectAction.java  |   2 +-
 .../cayenne/modeler/dialog/FindDialogView.java     |   2 +-
 .../cgen/CgenArtefactSelectorController.java       |   2 +-
 .../editor/datanode/CustomDataSourceEditor.java    |   7 +-
 .../modeler/editor/datanode/DataSourceEditor.java  |   5 +-
 .../editor/datanode/JDBCDataSourceEditor.java      |  17 +-
 .../editor/datanode/MainDataNodeEditor.java        |  14 +-
 .../cayenne/modeler/util/CayenneController.java    |  27 +--
 .../control => modeler/util}/FileMenuItem.java     |   9 +-
 .../util}/ImageRendererColumn.java                 |   2 +-
 .../cayenne/modeler/util/RecentFileMenu.java       |   1 -
 .../java/org/apache/cayenne/swing/BindingBase.java | 181 -------------------
 .../org/apache/cayenne/swing/BindingBuilder.java   |  76 --------
 .../org/apache/cayenne/swing/BindingDelegate.java  |  34 ----
 .../org/apache/cayenne/swing/BindingException.java |  33 ----
 .../apache/cayenne/swing/BindingExpression.java    |  96 -----------
 .../org/apache/cayenne/swing/BindingFactory.java   |  84 ---------
 .../org/apache/cayenne/swing/BoundComponent.java   |  50 ------
 .../org/apache/cayenne/swing/ObjectBinding.java    |  44 -----
 .../org/apache/cayenne/swing/TableBinding.java     | 191 ---------------------
 .../apache/cayenne/swing/TableBindingBuilder.java  | 126 --------------
 pom.xml                                            |   5 -
 28 files changed, 41 insertions(+), 1075 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 661363546..d2da33178 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -22,6 +22,7 @@ CAY-2905 Upgrade Gradle to 8.14
 CAY-2908 Review and upgrade dependencies
 CAY-2916 SelectById: unify logic for null/empty values
 CAY-2917 Add Qualifier Joins Before Depenent Table Joins
+CAY-2918 Remove OGNL Binding Architecture from CayenneModeler
 
 Bug Fixes:
 
diff --git 
a/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/LICENSE.txt.vm 
b/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/LICENSE.txt.vm
index 102b5c7f0..450757a3c 100644
--- 
a/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/LICENSE.txt.vm
+++ 
b/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/LICENSE.txt.vm
@@ -405,65 +405,6 @@ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
NEGLIGENCE OR
 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-=====================================================================
-7. OGNL LICENSE
-
-//     Copyright (c) 1998-2004, Drew Davidson and Luke Blanshard
-//  All rights reserved.
-//
-//     Redistribution and use in source and binary forms, with or without
-//  modification, are permitted provided that the following conditions are
-//  met:
-//
-//     Redistributions of source code must retain the above copyright notice,
-//  this list of conditions and the following disclaimer.
-//     Redistributions in binary form must reproduce the above copyright
-//  notice, this list of conditions and the following disclaimer in the
-//  documentation and/or other materials provided with the distribution.
-//     Neither the name of the Drew Davidson nor the names of its contributors
-//  may be used to endorse or promote products derived from this software
-//  without specific prior written permission.
-//
-//     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-//  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-//  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-//  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-//  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-//  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-//  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-//  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-//  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-//  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-//  DAMAGE.
-
-=====================================================================
-
-jEdit Syntax License
-
-The MIT License
-
-Copyright (c) Copyright 1998-1999 Slava Pestov, Artur Biesiadowski, Clancy 
Malcolm,
-Jonathan Revusky, Juha Lindfors and Mike Dillon.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
 =====================================================================
 Inflector License
 
diff --git 
a/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/NOTICE.txt.vm 
b/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/NOTICE.txt.vm
index d3a56d3f4..e6b9a2c81 100644
--- 
a/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/NOTICE.txt.vm
+++ 
b/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/NOTICE.txt.vm
@@ -24,13 +24,6 @@ GUI TOOLS
 * CayenneModeler includes JGoodies library developed by Karsten Lentzsch.
 (http://www.jgoodies.com/)
 
-* CayenneModeler includes OGNL library developed by Drew Davidson and Luke 
Blanshard
-(http://commons.apache.org/ognl/)
-
-* CayenneModeler includes jEdit-syntax library developed by Slava Pestov, 
Artur Biesiadowski, 
-Clancy Malcolm, Jonathan Revusky, Juha Lindfors and Mike Dillon.
-(http://jedit-syntax.sourceforge.net/)
-
 * CayenneModeler includes Inflector library developed by the Inflector project
 (https://inflector.dev.java.net/)
 
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java 
b/cayenne/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java
index 579235739..705d061b0 100644
--- a/cayenne/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java
+++ b/cayenne/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java
@@ -34,10 +34,6 @@ import org.apache.cayenne.util.Util;
 
 /**
  * Superclass of AST* expressions that implements Node interface defined by 
JavaCC framework.
- * <p>
- * Some parts of the parser are based on OGNL parser,
- * copyright (c) 2002, Drew Davidson and Luke Blanshard.
- * </p>
  * 
  * @since 1.1
  */
diff --git a/modeler/cayenne-modeler/pom.xml b/modeler/cayenne-modeler/pom.xml
index ba4c7d478..00d3832d2 100644
--- a/modeler/cayenne-modeler/pom.xml
+++ b/modeler/cayenne-modeler/pom.xml
@@ -73,11 +73,6 @@
                        <version>${project.version}</version>
                </dependency>
 
-               <dependency>
-                       <groupId>ognl</groupId>
-                       <artifactId>ognl</artifactId>
-               </dependency>
-
                <dependency>
                        <groupId>jgraph</groupId>
                        <artifactId>jgraph</artifactId>
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
index 1a2ac48f7..cca08a48b 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
@@ -19,14 +19,6 @@
 
 package org.apache.cayenne.modeler;
 
-import javax.swing.*;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.prefs.BackingStoreException;
-import java.util.prefs.Preferences;
-import java.util.stream.Collectors;
-
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.configuration.xml.DataChannelMetaData;
 import org.apache.cayenne.di.Inject;
@@ -40,9 +32,16 @@ import org.apache.cayenne.modeler.util.WidgetFactory;
 import org.apache.cayenne.pref.CayennePreference;
 import org.apache.cayenne.pref.CayenneProjectPreferences;
 import org.apache.cayenne.project.Project;
-import org.apache.cayenne.swing.BindingFactory;
 import org.apache.cayenne.util.IDUtil;
 
+import javax.swing.*;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.prefs.BackingStoreException;
+import java.util.prefs.Preferences;
+import java.util.stream.Collectors;
+
 /**
  * A main modeler application class that provides a number of services to the 
Modeler
  * components. Configuration properties:
@@ -63,18 +62,11 @@ public class Application {
     private static Application instance;
 
     protected FileClassLoadingService modelerClassLoader;
-
     protected CayenneModelerController frameController;
-
     protected String name;
-
-    protected BindingFactory bindingFactory;
     protected AdapterMapping adapterMapping;
-
     protected CayenneUndoManager undoManager;
-
     protected CayenneProjectPreferences cayenneProjectPreferences;
-
     protected CayennePreference cayennePreference;
 
     @Inject
@@ -82,7 +74,6 @@ public class Application {
 
     @Inject
     protected DataChannelMetaData metaData;
-
     private String newProjectTemporaryName;
 
     public static Application getInstance() {
@@ -176,7 +167,6 @@ public class Application {
         initPreferences();
         initClassLoader();
 
-        this.bindingFactory = new BindingFactory();
         this.adapterMapping = new AdapterMapping();
 
         this.undoManager = new CayenneUndoManager(this);
@@ -191,10 +181,6 @@ public class Application {
         getFrame().setVisible(true);
     }
 
-    public BindingFactory getBindingFactory() {
-        return bindingFactory;
-    }
-
     public CayenneProjectPreferences getCayenneProjectPreferences() {
         return cayenneProjectPreferences;
     }
@@ -239,7 +225,7 @@ public class Application {
         try {
             keys = classLoaderPreference.keys();
             for (String cpKey : keys) {
-               values.add(classLoaderPreference.get(cpKey, ""));
+                values.add(classLoaderPreference.get(cpKey, ""));
             }
         } catch (BackingStoreException ignored) {
         }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/OpenProjectAction.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/OpenProjectAction.java
index cbf59b6d2..f5e9abfea 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/OpenProjectAction.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/OpenProjectAction.java
@@ -28,7 +28,7 @@ import org.apache.cayenne.project.upgrade.UpgradeMetaData;
 import org.apache.cayenne.project.upgrade.UpgradeService;
 import org.apache.cayenne.resource.Resource;
 import org.apache.cayenne.resource.URLResource;
-import org.apache.cayenne.swing.control.FileMenuItem;
+import org.apache.cayenne.modeler.util.FileMenuItem;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialogView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialogView.java
index 9352ce719..70a1230bc 100755
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialogView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialogView.java
@@ -20,7 +20,7 @@ package org.apache.cayenne.modeler.dialog;
 
 import org.apache.cayenne.modeler.action.FindAction;
 import org.apache.cayenne.modeler.util.CellRenderers;
-import org.apache.cayenne.swing.ImageRendererColumn;
+import org.apache.cayenne.modeler.util.ImageRendererColumn;
 import org.apache.cayenne.swing.components.TopBorder;
 
 import javax.swing.*;
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CgenArtefactSelectorController.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CgenArtefactSelectorController.java
index fb4dac618..816be7ee8 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CgenArtefactSelectorController.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CgenArtefactSelectorController.java
@@ -28,7 +28,7 @@ import org.apache.cayenne.modeler.util.CellRenderers;
 import org.apache.cayenne.modeler.util.CheckBoxHeader;
 import org.apache.cayenne.modeler.util.ModelerUtil;
 import org.apache.cayenne.modeler.util.TableSizer;
-import org.apache.cayenne.swing.ImageRendererColumn;
+import org.apache.cayenne.modeler.util.ImageRendererColumn;
 import org.apache.cayenne.validation.ValidationFailure;
 import org.apache.cayenne.validation.ValidationResult;
 
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 ba9ad527c..7c9ad99f6 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
@@ -22,7 +22,6 @@ package org.apache.cayenne.modeler.editor.datanode;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.util.TextBinder;
-import org.apache.cayenne.swing.BindingDelegate;
 
 /**
  */
@@ -31,7 +30,7 @@ public class CustomDataSourceEditor extends DataSourceEditor {
     protected CustomDataSourceView view;
     protected String factoryName;
 
-    public CustomDataSourceEditor(ProjectController controller, 
BindingDelegate nodeChangeProcessor) {
+    public CustomDataSourceEditor(ProjectController controller, Runnable 
nodeChangeProcessor) {
         super(controller, nodeChangeProcessor);
     }
 
@@ -47,11 +46,11 @@ public class CustomDataSourceEditor extends 
DataSourceEditor {
 
         TextBinder.bind(view.getFactoryName(), v -> {
             setFactoryName(v);
-            nodeChangeProcessor.modelUpdated(null, null, null);
+            nodeChangeProcessor.run();
         });
         TextBinder.bind(view.getLocationHint(), v -> {
             getNode().setParameters(v);
-            nodeChangeProcessor.modelUpdated(null, null, null);
+            nodeChangeProcessor.run();
         });
     }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/DataSourceEditor.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/DataSourceEditor.java
index 500325ed3..f3ca48f12 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/DataSourceEditor.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/DataSourceEditor.java
@@ -22,7 +22,6 @@ package org.apache.cayenne.modeler.editor.datanode;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.swing.BindingDelegate;
 import org.apache.cayenne.util.Util;
 
 /**
@@ -30,9 +29,9 @@ import org.apache.cayenne.util.Util;
 public abstract class DataSourceEditor extends CayenneController {
 
     private DataNodeDescriptor node;
-    protected BindingDelegate nodeChangeProcessor;
+    protected Runnable nodeChangeProcessor;
 
-    public DataSourceEditor(ProjectController controller, BindingDelegate 
nodeChangeProcessor) {
+    public DataSourceEditor(ProjectController controller, Runnable 
nodeChangeProcessor) {
         super(controller);
         this.nodeChangeProcessor = nodeChangeProcessor;
         initFieldListeners();
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JDBCDataSourceEditor.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JDBCDataSourceEditor.java
index 2d6d0a18b..9a5a5e2d0 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JDBCDataSourceEditor.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JDBCDataSourceEditor.java
@@ -27,14 +27,13 @@ import org.apache.cayenne.modeler.CayenneModelerController;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.pref.DBConnectionInfo;
 import org.apache.cayenne.modeler.util.TextBinder;
-import org.apache.cayenne.swing.BindingDelegate;
 import org.apache.cayenne.util.Util;
 
 public class JDBCDataSourceEditor extends DataSourceEditor {
 
     protected JDBCDataSourceView view;
 
-    public JDBCDataSourceEditor(ProjectController parent, BindingDelegate 
nodeChangeProcessor) {
+    public JDBCDataSourceEditor(ProjectController parent, Runnable 
nodeChangeProcessor) {
         super(parent, nodeChangeProcessor);
     }
 
@@ -58,25 +57,25 @@ public class JDBCDataSourceEditor extends DataSourceEditor {
 
         TextBinder.bind(view.getUserName(), v -> {
             getNode().getDataSourceDescriptor().setUserName(v);
-            nodeChangeProcessor.modelUpdated(null, null, null);
+            nodeChangeProcessor.run();
         });
         TextBinder.bind(view.getPassword(), v -> {
             getNode().getDataSourceDescriptor().setPassword(v);
-            nodeChangeProcessor.modelUpdated(null, null, null);
+            nodeChangeProcessor.run();
         });
         TextBinder.bind(view.getUrl(), v -> {
             getNode().getDataSourceDescriptor().setDataSourceUrl(v);
-            nodeChangeProcessor.modelUpdated(null, null, null);
+            nodeChangeProcessor.run();
         });
         TextBinder.bind(view.getDriver(), v -> {
             getNode().getDataSourceDescriptor().setJdbcDriver(v);
-            nodeChangeProcessor.modelUpdated(null, null, null);
+            nodeChangeProcessor.run();
         });
         TextBinder.bind(view.getMaxConnections(), v -> {
             if (v != null) {
                 try {
                     
getNode().getDataSourceDescriptor().setMaxConnections(Integer.parseInt(v));
-                    nodeChangeProcessor.modelUpdated(null, null, null);
+                    nodeChangeProcessor.run();
                 } catch (NumberFormatException ignored) {
                 }
             }
@@ -85,7 +84,7 @@ public class JDBCDataSourceEditor extends DataSourceEditor {
             if (v != null) {
                 try {
                     
getNode().getDataSourceDescriptor().setMinConnections(Integer.parseInt(v));
-                    nodeChangeProcessor.modelUpdated(null, null, null);
+                    nodeChangeProcessor.run();
                 } catch (NumberFormatException ignored) {
                 }
             }
@@ -129,7 +128,7 @@ public class JDBCDataSourceEditor extends DataSourceEditor {
         if (dataSource != null) {
             if (dataSource.copyTo(projectDataSourceDescriptor)) {
                 refreshView();
-                super.nodeChangeProcessor.modelUpdated(null, null, null);
+                super.nodeChangeProcessor.run();
                 mainController.updateStatus(null);
             } else {
                 mainController.updateStatus("DataNode is up to date...");
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 449eb72a8..57915024e 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
@@ -43,7 +43,6 @@ import org.apache.cayenne.modeler.pref.DataNodeDefaults;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.modeler.util.ProjectUtil;
 import org.apache.cayenne.modeler.util.TextBinder;
-import org.apache.cayenne.swing.BindingDelegate;
 import org.apache.cayenne.validation.ValidationException;
 
 /**
@@ -73,7 +72,7 @@ public class MainDataNodeEditor extends CayenneController {
        protected Map<String, DataSourceEditor> datasourceEditors;
 
        protected CustomDataSourceEditor defaultSubeditor;
-       protected BindingDelegate nodeChangeProcessor;
+       protected Runnable nodeChangeProcessor;
        private boolean refreshing;
 
        public MainDataNodeEditor(ProjectController parent, DataNodeEditor 
tabController) {
@@ -84,15 +83,8 @@ public class MainDataNodeEditor extends CayenneController {
                this.view = new MainDataNodeView();
                this.datasourceEditors = new HashMap<>();
 
-               this.nodeChangeProcessor = (binding, oldValue, newValue) -> {
-
-            DataNodeEvent e = new DataNodeEvent(MainDataNodeEditor.this, node);
-            if (binding != null && binding.getView() == 
view.getDataNodeName()) {
-                e.setOldName(oldValue != null ? oldValue.toString() : null);
-            }
-
-            ((ProjectController) getParent()).fireDataNodeEvent(e);
-        };
+               this.nodeChangeProcessor = () ->
+                ((ProjectController) getParent()).fireDataNodeEvent(new 
DataNodeEvent(MainDataNodeEditor.this, node));
 
                this.defaultSubeditor = new CustomDataSourceEditor(parent, 
nodeChangeProcessor);
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneController.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneController.java
index 861e10675..e1501baf9 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneController.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneController.java
@@ -19,10 +19,14 @@
 
 package org.apache.cayenne.modeler.util;
 
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Point;
-import java.awt.Window;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.pref.FSPath;
+import org.apache.cayenne.util.Util;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.swing.*;
+import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
@@ -30,23 +34,10 @@ import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
 import java.util.prefs.Preferences;
 
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JFrame;
-import javax.swing.JOptionPane;
-import javax.swing.KeyStroke;
-
-import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.pref.FSPath;
-import org.apache.cayenne.swing.BoundComponent;
-import org.apache.cayenne.util.Util;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * A superclass of CayenneModeler controllers.
  */
-public abstract class CayenneController implements BoundComponent {
+public abstract class CayenneController {
 
     private static Logger logObj = 
LoggerFactory.getLogger(CayenneController.class);
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/control/FileMenuItem.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/FileMenuItem.java
similarity index 92%
rename from 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/control/FileMenuItem.java
rename to 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/FileMenuItem.java
index 428e7ec54..feadd958b 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/control/FileMenuItem.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/FileMenuItem.java
@@ -17,18 +17,13 @@
  *  under the License.
  ****************************************************************/
 
-package org.apache.cayenne.swing.control;
+package org.apache.cayenne.modeler.util;
 
+import javax.swing.*;
 import java.io.File;
 
-import javax.swing.Action;
-import javax.swing.Icon;
-
-import org.apache.cayenne.modeler.util.CayenneAction;
-
 /**
  * A menu item that points to a file.
- * 
  */
 public class FileMenuItem extends CayenneAction.CayenneMenuItem {
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ImageRendererColumn.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ImageRendererColumn.java
similarity index 97%
rename from 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ImageRendererColumn.java
rename to 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ImageRendererColumn.java
index f4eaa7931..b2a4329a1 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ImageRendererColumn.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ImageRendererColumn.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-package org.apache.cayenne.swing;
+package org.apache.cayenne.modeler.util;
 
 import javax.swing.*;
 import javax.swing.table.DefaultTableCellRenderer;
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java
index 494da4c1b..ed2334bd7 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java
@@ -31,7 +31,6 @@ import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ModelerPreferences;
 import org.apache.cayenne.modeler.action.OpenProjectAction;
 import org.apache.cayenne.modeler.event.RecentFileListListener;
-import org.apache.cayenne.swing.control.FileMenuItem;
 
 /**
  * Menu that contains a list of previously used files. It is built from 
CayenneModeler
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingBase.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingBase.java
deleted file mode 100644
index a41a5f854..000000000
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingBase.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-
-package org.apache.cayenne.swing;
-
-import ognl.Ognl;
-import ognl.OgnlException;
-
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.util.Util;
-import org.apache.cayenne.validation.ValidationException;
-
-/**
- */
-public abstract class BindingBase implements ObjectBinding {
-
-    private final Object compiled;
-
-    protected Object context;
-    protected String expression;
-
-    protected BindingDelegate delegate;
-    protected boolean modelUpdateDisabled;
-
-    protected boolean usingNullForEmptyStrings;
-    protected boolean checkingForValueChange;
-
-    static Throwable unwind(Throwable th) {
-        if (th instanceof OgnlException) {
-            Throwable reason = ((OgnlException) th).getReason();
-            return (reason != null) ? unwind(reason) : th;
-        } else {
-            return Util.unwindException(th);
-        }
-    }
-
-    public BindingBase(String propertyExpression) {
-
-        try {
-            this.compiled = Ognl.parseExpression(propertyExpression);
-        } catch (OgnlException ex) {
-            throw new CayenneRuntimeException("Invalid expression - "
-                    + propertyExpression, BindingBase.unwind(ex));
-        }
-
-        this.expression = propertyExpression;
-    }
-
-    public Object getContext() {
-        return context;
-    }
-
-    public void setContext(Object object) {
-        this.context = object;
-    }
-
-    public boolean isCheckingForValueChange() {
-        return checkingForValueChange;
-    }
-
-    public void setCheckingForValueChange(boolean checkingForValueChange) {
-        this.checkingForValueChange = checkingForValueChange;
-    }
-
-    public boolean isUsingNullForEmptyStrings() {
-        return usingNullForEmptyStrings;
-    }
-
-    public void setUsingNullForEmptyStrings(boolean b) {
-        this.usingNullForEmptyStrings = b;
-    }
-
-    public String getExpression() {
-        return expression;
-    }
-
-    public BindingDelegate getDelegate() {
-        return delegate;
-    }
-
-    public void setDelegate(BindingDelegate delegate) {
-        this.delegate = delegate;
-    }
-
-    /**
-     * Pushes a new value to the bound context. If binding delegate is set, 
notifies it
-     * delegate about the update.
-     */
-    public void setValue(Object value) {
-        if (context == null) {
-            throw new BindingException("No context");
-        }
-
-        try {
-            // prevent the same thread from calling setValue recursively - 
something that
-            // may happen due to event loops.
-
-            if (modelUpdateDisabled) {
-                return;
-            }
-
-            Object oldValue = null;
-
-            modelUpdateDisabled = true;
-            try {
-
-                if (delegate != null) {
-                    // find old value
-                    oldValue = getValue();
-                }
-
-                if (isUsingNullForEmptyStrings() && "".equals(value)) {
-                    value = null;
-                }
-
-                if (isCheckingForValueChange()) {
-                    // avoid calling getValue() twice...
-
-                    Object existingValue = (delegate != null) ? oldValue : 
getValue();
-                    if (Util.nullSafeEquals(value, existingValue)) {
-                        return;
-                    }
-                }
-
-                Ognl.setValue(compiled, context, value);
-            } finally {
-                modelUpdateDisabled = false;
-            }
-
-            if (delegate != null) {
-                delegate.modelUpdated(this, oldValue, value);
-            }
-        } catch (OgnlException ex) {
-            processException(ex);
-        }
-    }
-
-    /**
-     * Pulls bound value from the context.
-     */
-    public Object getValue() {
-        if (context == null) {
-            throw new BindingException("No context");
-        }
-
-        try {
-            return Ognl.getValue(compiled, context);
-        } catch (OgnlException ex) {
-            processException(ex);
-            return null;
-        }
-    }
-
-    protected void processException(Throwable th) throws ValidationException, 
BindingException {
-        Throwable root = BindingBase.unwind(th);
-        if (root instanceof ValidationException) {
-            throw (ValidationException) root;
-        } else if (root instanceof NumberFormatException) {
-            throw new ValidationException("Invalid numeric string");
-        }
-
-        throw new BindingException("Evaluation failed in context: " + context, 
root);
-    }
-
-}
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingBuilder.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingBuilder.java
deleted file mode 100644
index 6addce267..000000000
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingBuilder.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-
-package org.apache.cayenne.swing;
-
-/**
- * A builder for component bindings that delegates the creation of the binding 
to the
- * underlying factory, and itself configures a number of binding parameters.
- * 
- */
-public class BindingBuilder {
-
-    protected BindingFactory factory;
-    protected BindingDelegate delegate;
-    protected Object context;
-
-    /**
-     * Constructs BindingBuilder with a BindingFactory and a root model object 
(or
-     * context) of the binding.
-     */
-    public BindingBuilder(BindingFactory factory, Object context) {
-        this.factory = factory;
-        this.context = context;
-    }
-
-    public BindingDelegate getDelegate() {
-        return delegate;
-    }
-
-    /**
-     * Sets BindingDelegate that will be assigned to all bindings created via 
this
-     * BindingBuilder.
-     */
-    public void setDelegate(BindingDelegate delegate) {
-        this.delegate = delegate;
-    }
-
-    public Object getContext() {
-        return context;
-    }
-
-    /**
-     * Sets the context object that will be used by all bindings created via 
this
-     * BindingBuilder. Context is a root of the domain model for the given 
binding.
-     */
-    public void setContext(Object context) {
-        this.context = context;
-    }
-
-    public BindingFactory getFactory() {
-        return factory;
-    }
-
-
-    protected ObjectBinding initBinding(ObjectBinding binding, BindingDelegate 
delegate) {
-        binding.setDelegate(delegate);
-        binding.setContext(context);
-        return binding;
-    }
-}
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingDelegate.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingDelegate.java
deleted file mode 100644
index f3c26050b..000000000
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingDelegate.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-
-package org.apache.cayenne.swing;
-
-/**
- * Defines an API of a delegate notified by bindings whenever values are 
pushed from the
- * view to the model. The value of delegate is that it allows to track changes 
to the
- * model properties that themselves do not fire property change events.
- *
- */
-public interface BindingDelegate {
-
-    /**
-     * Called by a binding to notify that a model value was updated.
-     */
-    void modelUpdated(ObjectBinding binding, Object oldValue, Object newValue);
-}
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingException.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingException.java
deleted file mode 100644
index be668f573..000000000
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-
-package org.apache.cayenne.swing;
-
-import org.apache.cayenne.CayenneRuntimeException;
-
-public class BindingException extends CayenneRuntimeException {
-
-    public BindingException(String messageFormat, Object... messageArgs) {
-        super(messageFormat, messageArgs);
-    }
-
-    public BindingException(String messageFormat, Throwable cause, Object... 
messageArgs) {
-        super(messageFormat, cause, messageArgs);
-    }
-}
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingExpression.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingExpression.java
deleted file mode 100644
index 44158b41a..000000000
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingExpression.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-
-
-package org.apache.cayenne.swing;
-
-import java.util.Map;
-
-import ognl.Ognl;
-import ognl.OgnlException;
-
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.util.Util;
-
-/**
- * A class for expression evaluation using a designated scripting language 
(now - OGNL).
- * 
- */
-public class BindingExpression {
-
-    private Object compiled;
-    protected String expression;
-
-    static Throwable unwind(Throwable th) {
-        if (th instanceof OgnlException) {
-            Throwable reason = ((OgnlException) th).getReason();
-            return (reason != null) ? unwind(reason) : th;
-        }
-        else {
-            return Util.unwindException(th);
-        }
-    }
-
-    public BindingExpression(String expression) {
-        try {
-            this.compiled = Ognl.parseExpression(expression);
-        }
-        catch (OgnlException ex) {
-            throw new CayenneRuntimeException(
-                    "Invalid expression - " + expression,
-                    BindingBase.unwind(ex));
-        }
-
-        this.expression = expression;
-    }
-
-    public String getExpression() {
-        return expression;
-    }
-
-    public void setValue(Object context, Map contextVariables, Object value) {
-        if (context == null) {
-            throw new BindingException("No context");
-        }
-
-        try {
-            Ognl.setValue(compiled, contextVariables, context, value);
-        }
-        catch (OgnlException ex) {
-            throw new BindingException(
-                    "Evaluation failed in context: " + context,
-                    unwind(ex));
-        }
-    }
-
-    public Object getValue(Object context, Map contextVariables) {
-        if (context == null) {
-            throw new BindingException("No context");
-        }
-
-        try {
-            return Ognl.getValue(compiled, contextVariables, context);
-        }
-        catch (OgnlException ex) {
-            throw new BindingException(
-                    "Evaluation failed in context: " + context,
-                    unwind(ex));
-        }
-    }
-}
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingFactory.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingFactory.java
deleted file mode 100644
index 1b3973373..000000000
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingFactory.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-
-package org.apache.cayenne.swing;
-
-import javax.swing.*;
-import java.awt.*;
-
-/**
- * A factory for a number of common bindings.
- * 
- */
-public class BindingFactory {
-
-    protected boolean usingNullForEmptyStrings;
-    protected boolean checkingForValueChange;
-
-    public BindingFactory() {
-        // init defaults...
-        usingNullForEmptyStrings = true;
-        checkingForValueChange = true;
-    }
-
-    public ObjectBinding bindToTable(
-            JTable table,
-            String listBinding,
-            String[] headers,
-            BindingExpression[] columns,
-            Class[] columnClass,
-            boolean[] editableState,
-            Object[] sampleLongValues) {
-
-        TableBinding binding = new TableBinding(
-                table,
-                listBinding,
-                headers,
-                columns,
-                columnClass,
-                editableState,
-                sampleLongValues);
-        return prepareBinding(binding);
-    }
-
-    /**
-     * Configures binding with factory default settings.
-     */
-    protected ObjectBinding prepareBinding(BindingBase binding) {
-        binding.setUsingNullForEmptyStrings(isUsingNullForEmptyStrings());
-        binding.setCheckingForValueChange(isCheckingForValueChange());
-        return binding;
-    }
-
-    public boolean isCheckingForValueChange() {
-        return checkingForValueChange;
-    }
-
-    public void setCheckingForValueChange(boolean callingSetForEqual) {
-        this.checkingForValueChange = callingSetForEqual;
-    }
-
-    public boolean isUsingNullForEmptyStrings() {
-        return usingNullForEmptyStrings;
-    }
-
-    public void setUsingNullForEmptyStrings(boolean usingNullForEmptyStrings) {
-        this.usingNullForEmptyStrings = usingNullForEmptyStrings;
-    }
-}
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BoundComponent.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BoundComponent.java
deleted file mode 100644
index b7f0c7a12..000000000
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BoundComponent.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-
-package org.apache.cayenne.swing;
-
-import java.awt.Component;
-import java.beans.PropertyChangeListener;
-
-/**
- * An API for a binding child that allows to establish bindings to custom Swing
- * components.
- * 
- * @since 1.2
- */
-public interface BoundComponent {
-
-    /**
-     * Processes value pushed from parent.
-     */
-    void bindingUpdated(String expression, Object newValue);
-
-    /**
-     * Adds a property change listener to be notified of property updates.
-     */
-    // TODO: andrus, 04/8/2006 - declaring this method in the interface is 
redundant...
-    // property "add*" methods can be discoverd via Bean introspection. See
-    // BeanActionBinding for details.
-    void addPropertyChangeListener(String expression, PropertyChangeListener 
listener);
-
-    /**
-     * Returns bound view component.
-     */
-    Component getView();
-}
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ObjectBinding.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ObjectBinding.java
deleted file mode 100644
index a2a12c7fe..000000000
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ObjectBinding.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-
-package org.apache.cayenne.swing;
-
-import java.awt.Component;
-
-/**
- * Defines API of a binding sitting between a Swing widget and domain model, 
synchronizing
- * the values between the two. Parent part of the binding is called 
"context"as it is used
- * as a context of binding expressions. Child of the binding is a bound 
component that is
- * being synchronized with the context.
- * 
- */
-public interface ObjectBinding {
-
-    Component getView();
-
-    Object getContext();
-
-    void setContext(Object object);
-
-    void updateView();
-
-    BindingDelegate getDelegate();
-
-    void setDelegate(BindingDelegate delegate);
-}
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/TableBinding.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/TableBinding.java
deleted file mode 100644
index 2a3aa6483..000000000
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/TableBinding.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-
-
-package org.apache.cayenne.swing;
-
-import java.awt.Component;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.swing.JTable;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableCellRenderer;
-import javax.swing.table.TableColumn;
-import javax.swing.table.TableColumnModel;
-import javax.swing.table.TableModel;
-
-import org.apache.cayenne.util.Util;
-
-/**
- * A binding for a JTable.
- * 
- */
-public class TableBinding extends BindingBase {
-
-    /**
-     * A variable exposed in the context of set/get cell value.
-     */
-    public static final String ITEM_VAR = "item";
-
-    protected JTable table;
-    protected String[] headers;
-    protected BindingExpression[] columns;
-    protected boolean[] editableState;
-    protected Class[] columnClass;
-    protected List list;
-
-    public TableBinding(JTable table, String listBinding, String[] headers,
-            BindingExpression[] columns, Class[] columnClass, boolean[] 
editableState,
-            Object[] sampleLongValues) {
-
-        super(listBinding);
-        this.table = table;
-        this.headers = headers;
-        this.columns = columns;
-        this.editableState = editableState;
-        this.columnClass = columnClass;
-
-        table.setModel(new BoundTableModel());
-        resizeColumns(sampleLongValues);
-    }
-
-    protected void resizeColumns(Object[] sampleLongValues) {
-
-        TableCellRenderer headerRenderer = 
table.getTableHeader().getDefaultRenderer();
-        TableColumnModel columnModel = table.getColumnModel();
-        TableModel tableModel = table.getModel();
-
-        for (int i = 0; i < columnModel.getColumnCount(); i++) {
-
-            TableColumn column = columnModel.getColumn(i);
-
-            Component header = 
headerRenderer.getTableCellRendererComponent(null, column
-                    .getHeaderValue(), false, false, 0, 0);
-            int headerWidth = header.getPreferredSize().width;
-
-            if (sampleLongValues[i] != null) {
-                Component bigCell = table
-                        .getDefaultRenderer(tableModel.getColumnClass(i))
-                        .getTableCellRendererComponent(
-                                table,
-                                sampleLongValues[i],
-                                false,
-                                false,
-                                0,
-                                i);
-                int cellWidth = bigCell.getPreferredSize().width;
-                column.setPreferredWidth(Math.max(headerWidth, cellWidth));
-            }
-            else {
-                column.setPreferredWidth(headerWidth);
-            }
-        }
-    }
-
-    public void setContext(Object object) {
-        super.setContext(object);
-
-        this.list = updateList();
-    }
-
-    public Component getView() {
-        return table;
-    }
-
-    public void updateView() {
-        this.list = updateList();
-        ((BoundTableModel) table.getModel()).fireTableDataChanged();
-    }
-
-    int getListSize() {
-        return (list != null) ? list.size() : 0;
-    }
-
-    List updateList() {
-        if (getContext() == null) {
-            return null;
-        }
-
-        Object list = getValue();
-        if (list == null) {
-            return null;
-        }
-
-        if (list instanceof List) {
-            return (List) list;
-        }
-
-        if (list instanceof Object[]) {
-            Object[] objects = (Object[]) list;
-            return Arrays.asList(objects);
-        }
-
-        if (list instanceof Collection) {
-            return new ArrayList((Collection) list);
-        }
-
-        throw new BindingException("List expected, got - " + list);
-    }
-
-    final class BoundTableModel extends AbstractTableModel {
-
-        // this map is used as "flyweight", providing on the spot context for 
Ognl
-        // expression evaluation
-        Map<String, Object> listContext = new HashMap<String, 
Object>(){{put(ITEM_VAR, null);}};
-
-        public int getColumnCount() {
-            return headers.length;
-        }
-
-        public int getRowCount() {
-            return getListSize();
-        }
-
-        public boolean isCellEditable(int rowIndex, int columnIndex) {
-            return editableState[columnIndex];
-        }
-
-        public Object getValueAt(int rowIndex, int columnIndex) {
-            Object item = list.get(rowIndex);
-            listContext.put(ITEM_VAR, item);
-            return columns[columnIndex].getValue(getContext(), listContext);
-        }
-
-        public String getColumnName(int column) {
-            // per CAY-513 - if an empty string is passed for header, table 
header will
-            // have zero height on Windows... So we have to check for this 
condition
-            return Util.isEmptyString(headers[column]) ? " " : headers[column];
-        }
-
-        public Class getColumnClass(int columnIndex) {
-            return columnClass[columnIndex];
-        }
-
-        public void setValueAt(Object value, int rowIndex, int columnIndex) {
-            Object item = list.get(rowIndex);
-            listContext.put(ITEM_VAR, item);
-            columns[columnIndex].setValue(getContext(), listContext, value);
-        }
-    }
-}
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/TableBindingBuilder.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/TableBindingBuilder.java
deleted file mode 100644
index 755862f9e..000000000
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/TableBindingBuilder.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-
-
-package org.apache.cayenne.swing;
-
-import javax.swing.*;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A builder for a JTable binding.
- * 
- */
-public class TableBindingBuilder {
-
-    protected BindingBuilder helper;
-    protected List columns;
-
-    public TableBindingBuilder(BindingBuilder helper) {
-        this.helper = helper;
-    }
-
-    /**
-     * Creates a binding using preconfigured parameters.
-     */
-    public ObjectBinding bindToTable(JTable table, String listBinding) {
-        int width = (columns != null) ? columns.size() : 0;
-
-        String[] headers = new String[width];
-        BindingExpression[] expressions = new BindingExpression[width];
-        Class[] classes = new Class[width];
-        boolean[] editableState = new boolean[width];
-        Object[] sampleLongValues = new Object[width];
-
-        for (int i = 0; i < width; i++) {
-            ColumnDescriptor descriptor = (ColumnDescriptor) columns.get(i);
-            headers[i] = descriptor.header;
-            expressions[i] = descriptor.expression;
-            classes[i] = descriptor.columnClass;
-            editableState[i] = descriptor.editable;
-            sampleLongValues[i] = descriptor.sampleLongValue;
-        }
-
-        ObjectBinding binding = helper.getFactory().bindToTable(
-                table,
-                listBinding,
-                headers,
-                expressions,
-                classes,
-                editableState,
-                sampleLongValues);
-        return helper.initBinding(binding, helper.getDelegate());
-    }
-
-    /**
-     * Adds a column to the table description.
-     */
-    public void addColumn(
-            String header,
-            String expression,
-            Class columnClass,
-            boolean editable) {
-
-        this.addColumn(header, expression, columnClass, editable, null);
-    }
-
-    /**
-     * Adds a column to the table description.
-     * 
-     * @param sampleLongValue if not null, this value rendered size is used to 
size the
-     *            column.
-     */
-    public void addColumn(
-            String header,
-            String expression,
-            Class columnClass,
-            boolean editable,
-            Object sampleLongValue) {
-
-        if (columns == null) {
-            columns = new ArrayList();
-        }
-
-        columns.add(new ColumnDescriptor(
-                header,
-                new BindingExpression(expression),
-                columnClass,
-                editable,
-                sampleLongValue));
-    }
-
-    final class ColumnDescriptor {
-
-        String header;
-        BindingExpression expression;
-        boolean editable;
-        Class columnClass;
-        Object sampleLongValue;
-
-        ColumnDescriptor(String header, BindingExpression expression, Class 
columnClass,
-                boolean editable, Object sampleLongValue) {
-            this.header = header;
-            this.expression = expression;
-            this.editable = editable;
-            this.columnClass = columnClass;
-            this.sampleLongValue = sampleLongValue;
-        }
-    }
-}
diff --git a/pom.xml b/pom.xml
index 717002d5e..9a3af3815 100644
--- a/pom.xml
+++ b/pom.xml
@@ -329,11 +329,6 @@
                                <version>2.0.7</version>
                                <scope>test</scope>
                        </dependency>
-                       <dependency>
-                               <groupId>ognl</groupId>
-                               <artifactId>ognl</artifactId>
-                               <version>3.3.5</version>
-                       </dependency>
                        <dependency>
                                <groupId>org.springframework</groupId>
                                <artifactId>spring-core</artifactId>

Reply via email to