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 bb821375c CAY-2918 Remove OGNL Binding Architecture from CayenneModeler
bb821375c is described below
commit bb821375c1dbb9db132c721a67ab273ad8488a79
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 "bindToTextField"
---
.../org/apache/cayenne/swing/ActionBinding.java | 56 --------
.../apache/cayenne/swing/BeanActionBinding.java | 93 --------------
.../java/org/apache/cayenne/swing/BindingBase.java | 2 +-
.../org/apache/cayenne/swing/BindingBuilder.java | 10 --
.../org/apache/cayenne/swing/BindingDelegate.java | 4 +-
.../org/apache/cayenne/swing/BindingException.java | 8 --
.../org/apache/cayenne/swing/BindingFactory.java | 43 +------
.../org/apache/cayenne/swing/CheckBoxBinding.java | 16 +--
.../apache/cayenne/swing/ImageRendererColumn.java | 10 +-
.../apache/cayenne/swing/TableBindingBuilder.java | 7 +-
.../java/org/apache/cayenne/swing/TextBinding.java | 143 ---------------------
11 files changed, 12 insertions(+), 380 deletions(-)
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ActionBinding.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ActionBinding.java
deleted file mode 100644
index 35651c1ce..000000000
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ActionBinding.java
+++ /dev/null
@@ -1,56 +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 javax.swing.AbstractButton;
-
-public class ActionBinding extends BindingBase {
-
- protected Component view;
-
- public ActionBinding(AbstractButton button, String propertyExpression) {
- super(propertyExpression);
- button.addActionListener(e -> fireAction());
- this.view = button;
- }
-
- public ActionBinding(BoundComponent component, String propertyExpression,
String boundExpression) {
- super(propertyExpression);
- component.addPropertyChangeListener(boundExpression, event ->
fireAction());
- this.view = component.getView();
- }
-
- public Component getView() {
- if (view == null) {
- throw new BindingException("headless action");
- }
- return view;
- }
-
- public void updateView() {
- // noop
- }
-
- protected void fireAction() {
- getValue();
- }
-}
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BeanActionBinding.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BeanActionBinding.java
deleted file mode 100644
index 77b8da4a6..000000000
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BeanActionBinding.java
+++ /dev/null
@@ -1,93 +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.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.beans.BeanInfo;
-import java.beans.EventSetDescriptor;
-import java.beans.Introspector;
-
-import org.apache.cayenne.CayenneRuntimeException;
-
-/**
- * A binding that registers for action events of an arbitrary Component
JavaBean that
- * provides a way to add an ActionListener via BeanDescriptor.
- *
- */
-public class BeanActionBinding extends BindingBase {
-
- protected Component view;
-
- public BeanActionBinding(Component component, String actionExpression) {
- super(actionExpression);
- this.view = component;
-
- boolean foundActionEvents = false;
-
- try {
- BeanInfo info = Introspector.getBeanInfo(component.getClass());
- EventSetDescriptor[] events = info.getEventSetDescriptors();
-
- if (events != null && events.length > 0) {
- for (EventSetDescriptor event : events) {
- if (ActionListener.class
- .isAssignableFrom(event.getListenerType())) {
-
- event.getAddListenerMethod().invoke(component, new
ActionListener() {
- public void actionPerformed(ActionEvent e)
{
- fireAction();
- }
- });
-
- foundActionEvents = true;
- break;
- }
- }
- }
-
- }
- catch (Exception e) {
- throw new CayenneRuntimeException("Error binding to component", e);
- }
-
- if (!foundActionEvents) {
- throw new CayenneRuntimeException("Component does not define
action events: %s", component);
- }
- }
-
- public Component getView() {
- if (view == null) {
- throw new BindingException("headless action");
- }
-
- return view;
- }
-
- public void updateView() {
- // noop
- }
-
- protected void fireAction() {
- // TODO: catch exceptions...
- getValue();
- }
-}
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
index 29dc826a8..a41a5f854 100644
---
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
@@ -30,7 +30,7 @@ import org.apache.cayenne.validation.ValidationException;
*/
public abstract class BindingBase implements ObjectBinding {
- private Object compiled;
+ private final Object compiled;
protected Object context;
protected String expression;
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
index 187345a19..04ca79a9d 100644
---
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
@@ -128,16 +128,6 @@ public class BindingBuilder {
return initBinding(binding, getActionDelegate(action));
}
- public ObjectBinding bindToTextArea(JTextArea component, String property) {
- ObjectBinding binding = factory.bindToTextArea(component, property);
- return initBinding(binding, delegate);
- }
-
- public ObjectBinding bindToTextField(JTextField component, String
property) {
- ObjectBinding binding = factory.bindToTextField(component, property);
- return initBinding(binding, delegate);
- }
-
public ObjectBinding bindToCheckBox(JCheckBox component, String property) {
ObjectBinding binding = factory.bindToCheckBox(component, property);
return initBinding(binding, delegate);
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
index 754e38357..f3c26050b 100644
---
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
@@ -23,12 +23,12 @@ 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.
*/
- public void modelUpdated(ObjectBinding binding, Object oldValue, Object
newValue);
+ 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
index 7e9a7e1c3..be668f573 100644
---
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
@@ -23,10 +23,6 @@ import org.apache.cayenne.CayenneRuntimeException;
public class BindingException extends CayenneRuntimeException {
- public BindingException() {
- super();
- }
-
public BindingException(String messageFormat, Object... messageArgs) {
super(messageFormat, messageArgs);
}
@@ -34,8 +30,4 @@ public class BindingException extends CayenneRuntimeException
{
public BindingException(String messageFormat, Throwable cause, Object...
messageArgs) {
super(messageFormat, cause, messageArgs);
}
-
- public BindingException(Throwable cause) {
- super(cause);
- }
}
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
index 938d97135..16b002955 100644
---
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
@@ -19,9 +19,8 @@
package org.apache.cayenne.swing;
-import java.awt.Component;
-
import javax.swing.*;
+import java.awt.*;
/**
* A factory for a number of common bindings.
@@ -75,33 +74,6 @@ public class BindingFactory {
return prepareBinding(binding);
}
- /**
- * Binds to AbstractButton action events. Most common AbstractButton
subclasses are
- * JButton, JCheckBox, JRadioButton.
- */
- public ObjectBinding bindToAction(AbstractButton button, String action) {
- ActionBinding binding = new ActionBinding(button, action);
- return prepareBinding(binding);
- }
-
- /**
- * Binds to a generic component. Action events support is discovered via
- * introspection. If component class does not define action events, an
exception is
- * thrown.
- */
- public ObjectBinding bindToAction(Component component, String action) {
- BeanActionBinding binding = new BeanActionBinding(component, action);
- return prepareBinding(binding);
- }
-
- public ObjectBinding bindToAction(
- BoundComponent component,
- String action,
- String boundExpression) {
- ActionBinding binding = new ActionBinding(component, action,
boundExpression);
- return prepareBinding(binding);
- }
-
public ObjectBinding bindToComboSelection(
JComboBox component,
String property,
@@ -113,19 +85,6 @@ public class BindingFactory {
return prepareBinding(binding);
}
- public ObjectBinding bindToTextArea(JTextArea component, String property) {
- TextBinding binding = new TextBinding(component, property);
- return prepareBinding(binding);
- }
-
- /**
- * Creates a binding that updates a property on text field text changes.
- */
- public ObjectBinding bindToTextField(JTextField component, String
property) {
- TextBinding binding = new TextBinding(component, property);
- return prepareBinding(binding);
- }
-
public ObjectBinding bindToCheckBox(JCheckBox component, String property) {
CheckBoxBinding binding = new CheckBoxBinding(component, property);
return prepareBinding(binding);
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/CheckBoxBinding.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/CheckBoxBinding.java
index a67aa3cd9..7c1b009db 100644
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/CheckBoxBinding.java
+++
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/CheckBoxBinding.java
@@ -18,11 +18,8 @@
****************************************************************/
package org.apache.cayenne.swing;
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JCheckBox;
+import javax.swing.*;
+import java.awt.*;
/**
* A generic adapter that binds a check box to a bean property.
@@ -36,12 +33,9 @@ public class CheckBoxBinding extends BindingBase {
super(propertyExpression);
this.checkBox = checkBox;
- this.checkBox.addActionListener(new ActionListener()
- {
- public void actionPerformed(final ActionEvent event) {
- if (!modelUpdateDisabled) {
- updateModel();
- }
+ this.checkBox.addActionListener(event -> {
+ if (!modelUpdateDisabled) {
+ updateModel();
}
});
}
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/swing/ImageRendererColumn.java
index 11ea7ede3..f4eaa7931 100644
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ImageRendererColumn.java
+++
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ImageRendererColumn.java
@@ -18,15 +18,9 @@
****************************************************************/
package org.apache.cayenne.swing;
-import java.awt.Component;
-
-import javax.swing.BorderFactory;
-import javax.swing.Icon;
-import javax.swing.JLabel;
-import javax.swing.JTable;
+import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
-
-import org.apache.cayenne.swing.components.image.FilteredIconFactory;
+import java.awt.*;
public class ImageRendererColumn extends DefaultTableCellRenderer {
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
index 5f868cf8f..755862f9e 100644
---
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
@@ -20,11 +20,10 @@
package org.apache.cayenne.swing;
+import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
-import javax.swing.JTable;
-
/**
* A builder for a JTable binding.
*
@@ -34,10 +33,6 @@ public class TableBindingBuilder {
protected BindingBuilder helper;
protected List columns;
- public TableBindingBuilder(BindingFactory factory, Object context) {
- this(new BindingBuilder(factory, context));
- }
-
public TableBindingBuilder(BindingBuilder helper) {
this.helper = helper;
}
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/TextBinding.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/TextBinding.java
deleted file mode 100644
index 30f119369..000000000
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/TextBinding.java
+++ /dev/null
@@ -1,143 +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.Color;
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.InputVerifier;
-import javax.swing.JComponent;
-import javax.swing.JTextArea;
-import javax.swing.JTextField;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.text.JTextComponent;
-
-import org.apache.cayenne.modeler.dialog.validator.ValidatorDialog;
-import org.apache.cayenne.validation.ValidationException;
-
-/**
- * A generic text adapter that is bound to a bean property.
- *
- */
-public class TextBinding extends BindingBase {
-
- protected JTextComponent textComponent;
-
- protected Color defaultBGColor;
- protected Color errorColor;
- protected String defaultToolTip;
-
- public TextBinding(JTextField textField, String expression) {
- super(expression);
- this.textComponent = textField;
- initComponentDefaults();
-
- textField.addActionListener(new ActionListener() {
-
- public void actionPerformed(ActionEvent e) {
- if (!modelUpdateDisabled) {
- updateModel();
- }
- }
- });
-
- textComponent.setInputVerifier(new InputVerifier() {
-
- public boolean verify(JComponent c) {
- updateModel();
- // release focus after coloring the field...
- return true;
- }
- });
-
- }
-
- public TextBinding(JTextArea textArea, String property) {
- super(property);
- this.textComponent = textArea;
- initComponentDefaults();
-
- textComponent.getDocument().addDocumentListener(new DocumentListener()
{
-
- public void insertUpdate(DocumentEvent e) {
- verifyTextChange(e);
- }
-
- public void changedUpdate(DocumentEvent e) {
- verifyTextChange(e);
- }
-
- public void removeUpdate(DocumentEvent e) {
- verifyTextChange(e);
- }
-
- void verifyTextChange(DocumentEvent e) {
- if (!modelUpdateDisabled) {
- updateModel();
- }
- }
- });
- }
-
- protected void initComponentDefaults() {
- this.errorColor = ValidatorDialog.WARNING_COLOR;
- this.defaultBGColor = textComponent.getBackground();
- this.defaultToolTip = textComponent.getToolTipText();
- }
-
- public void updateView() {
- Object value = getValue();
- String text = (value != null) ? value.toString() : null;
-
- modelUpdateDisabled = true;
- try {
- clear();
- textComponent.setText(text);
- }
- finally {
- modelUpdateDisabled = false;
- }
- }
-
- /**
- * Returns internal text component.
- */
- public Component getView() {
- return textComponent;
- }
-
- protected void updateModel() {
- try {
- setValue(textComponent.getText());
- clear();
- }
- catch (ValidationException vex) {
- textComponent.setBackground(errorColor);
- textComponent.setToolTipText(vex.getUnlabeledMessage());
- }
- }
-
- protected void clear() {
- textComponent.setBackground(defaultBGColor);
- textComponent.setToolTipText(defaultToolTip);
- }
-}