You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2020/03/23 15:23:33 UTC

[cayenne] 02/04: CAY-2648 Whitespace symbols in JDBC Driver and DB URL lines lead to incorrect driver loading - refactor code to make it universal

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

commit ba5ee9486154326740e3017174636dd5d3f7a7a7
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Mon Mar 23 18:21:28 2020 +0300

    CAY-2648 Whitespace symbols in JDBC Driver and DB URL lines lead to incorrect driver loading
      - refactor code to make it universal
---
 .../editor/datanode/JDBCDataSourceView.java        |  8 ++++--
 ...acesValidator.java => JTextFieldValidator.java} | 33 ++++++++++++++++------
 2 files changed, 30 insertions(+), 11 deletions(-)

diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JDBCDataSourceView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JDBCDataSourceView.java
index 2447eac..7aa58c5 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JDBCDataSourceView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JDBCDataSourceView.java
@@ -26,7 +26,7 @@ import javax.swing.JPanel;
 import javax.swing.JPasswordField;
 import javax.swing.JTextField;
 
-import org.apache.cayenne.modeler.util.JTextFieldWhitespacesValidator;
+import org.apache.cayenne.modeler.util.JTextFieldValidator;
 import org.apache.cayenne.modeler.util.JTextFieldUndoable;
 
 import com.jgoodies.forms.builder.PanelBuilder;
@@ -55,8 +55,10 @@ public class JDBCDataSourceView extends JPanel {
         syncWithLocal = new JButton("Sync with Local");
         syncWithLocal.setToolTipText("Update from local DataSource");
 
-        driver.addFocusListener(new JTextFieldWhitespacesValidator(driver));
-        url.addFocusListener(new JTextFieldWhitespacesValidator(url));
+        JTextFieldValidator.addValidation(driver, text -> text.length() != text.trim().length(),
+                "There are some whitespaces in this field");
+        JTextFieldValidator.addValidation(url, text -> text.length() != text.trim().length(),
+                "There are some whitespaces in this field");
 
         // assemble
         CellConstraints cc = new CellConstraints();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/JTextFieldWhitespacesValidator.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/JTextFieldValidator.java
similarity index 55%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/JTextFieldWhitespacesValidator.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/JTextFieldValidator.java
index 7eacb89..56f3f49 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/JTextFieldWhitespacesValidator.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/JTextFieldValidator.java
@@ -20,34 +20,51 @@ package org.apache.cayenne.modeler.util;
 
 import org.apache.cayenne.modeler.dialog.validator.ValidatorDialog;
 
-
 import javax.swing.JTextField;
 import java.awt.event.FocusEvent;
 import java.awt.event.FocusListener;
+import java.util.function.Function;
+import java.util.function.Predicate;
 
 /**
  * @since 4.2
  */
-public class JTextFieldWhitespacesValidator implements FocusListener {
+public class JTextFieldValidator implements FocusListener {
+
+    private final JTextField jTextField;
+    private final Predicate<String> validator;
+    private final Function<String, String> message;
+
+    static public void addValidation(JTextField field, Predicate<String> validator, Function<String, String> message) {
+        JTextFieldValidator validationListener
+                = new JTextFieldValidator(field, validator, message);
+        field.addFocusListener(validationListener);
+    }
 
-    private JTextField jTextField;
+    static public void addValidation(JTextField field, Predicate<String> validator, String message) {
+        addValidation(field, validator, text -> message);
+    }
+
+    static public void addValidation(JTextField field, Predicate<String> validator) {
+        addValidation(field, validator, text -> "There are illegal chars in this field");
+    }
 
-    public JTextFieldWhitespacesValidator(JTextField jTextField) {
+    JTextFieldValidator(JTextField jTextField, Predicate<String> validator, Function<String, String> message) {
         this.jTextField = jTextField;
+        this.validator = validator;
+        this.message = message;
     }
 
     @Override
     public void focusGained(FocusEvent e) {
-
     }
 
     @Override
     public void focusLost(FocusEvent e) {
         String text = jTextField.getText();
-        int length = text.length() - text.trim().length();
-        if (length != 0) {
+        if(validator.test(text)) {
             jTextField.setBackground(ValidatorDialog.WARNING_COLOR);
-            jTextField.setToolTipText("There are some whitespaces in this line");
+            jTextField.setToolTipText(message.apply(text));
         }
     }
 }