CAY-2320 Modeler: Limit input into numeric fields to 10 digits

Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/25594726
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/25594726
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/25594726

Branch: refs/heads/STABLE-4.0
Commit: 255947264868b03a99b471a1c52037c1611a1aaf
Parents: 48fe22c
Author: Nikita Timofeev <stari...@gmail.com>
Authored: Wed Aug 29 14:24:51 2018 +0300
Committer: Nikita Timofeev <stari...@gmail.com>
Committed: Wed Aug 29 14:24:51 2018 +0300

----------------------------------------------------------------------
 RELEASE-NOTES.txt                               |  1 +
 .../modeler/editor/ProcedureParameterTab.java   | 48 +++++++++-------
 .../editor/ProcedureParameterTableModel.java    | 15 +++--
 .../editor/dbentity/DbAttributeTableModel.java  | 25 ++++++---
 .../editor/dbentity/DbEntityAttributePanel.java |  9 +++
 .../swing/components/LimitedTextField.java      | 59 ++++++++++++++++++++
 6 files changed, 120 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/25594726/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index bcdeef0..dfcad7f 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -14,6 +14,7 @@ Date:
 
 Bug Fixes:
 
+CAY-2320 Modeler: Limit input into numeric fields to 10 digits
 CAY-2449 Modeler: Needless scrollbar in Generate DB Schema result menu
 CAY-2450 Modeler: Impossible to update Attribute title after syncing ObjEntity
 CAY-2451 Modeler: ObjEntity "Edit" button doesn't open editor for Relationship

http://git-wip-us.apache.org/repos/asf/cayenne/blob/25594726/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureParameterTab.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureParameterTab.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureParameterTab.java
index c1be0d4..f9d61fe 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureParameterTab.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureParameterTab.java
@@ -19,26 +19,6 @@
 
 package org.apache.cayenne.modeler.editor;
 
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.EventObject;
-import java.util.List;
-
-import javax.swing.Icon;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JMenuItem;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JToolBar;
-import javax.swing.SwingConstants;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.table.DefaultTableCellRenderer;
-import javax.swing.table.TableColumn;
-
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.configuration.event.ProcedureEvent;
 import org.apache.cayenne.configuration.event.ProcedureParameterEvent;
@@ -67,8 +47,28 @@ import org.apache.cayenne.modeler.util.ModelerUtil;
 import org.apache.cayenne.modeler.util.PanelFactory;
 import org.apache.cayenne.modeler.util.UIUtil;
 import org.apache.cayenne.modeler.util.combo.AutoCompletion;
+import org.apache.cayenne.swing.components.LimitedTextField;
 import org.apache.cayenne.swing.components.image.FilteredIconFactory;
 
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JToolBar;
+import javax.swing.SwingConstants;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableColumn;
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.EventObject;
+import java.util.List;
+
 public class ProcedureParameterTab extends JPanel implements 
ProcedureParameterListener,
         ProcedureDisplayListener, ExistingSelectionProcessor, ActionListener {
 
@@ -303,6 +303,14 @@ public class ProcedureParameterTab extends JPanel 
implements ProcedureParameterL
         directionEditor.setEditable(false);
         directionColumn.setCellEditor(new CayenneCellEditor(directionEditor));
 
+        TableColumn precisionColumn = 
table.getColumnModel().getColumn(ProcedureParameterTableModel.PARAMETER_PRECISION);
+        LimitedTextField limitedPrecisionField = new LimitedTextField(10);
+        
precisionColumn.setCellEditor(Application.getWidgetFactory().createCellEditor(limitedPrecisionField));
+
+        TableColumn lengthColumn = 
table.getColumnModel().getColumn(ProcedureParameterTableModel.PARAMETER_LENGTH);
+        LimitedTextField limitedLengthField = new LimitedTextField(10);
+        
lengthColumn.setCellEditor(Application.getWidgetFactory().createCellEditor(limitedLengthField));
+
         moveUp.setEnabled(false);
         moveDown.setEnabled(false);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/25594726/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureParameterTableModel.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureParameterTableModel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureParameterTableModel.java
index 40005fc..b316270 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureParameterTableModel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureParameterTableModel.java
@@ -19,10 +19,6 @@
 
 package org.apache.cayenne.modeler.editor;
 
-import java.util.ArrayList;
-
-import javax.swing.JOptionPane;
-
 import org.apache.cayenne.configuration.event.ProcedureParameterEvent;
 import org.apache.cayenne.dba.TypesMapping;
 import org.apache.cayenne.map.Procedure;
@@ -31,6 +27,9 @@ import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.util.CayenneTableModel;
 import org.apache.cayenne.modeler.util.ProjectUtil;
 
+import javax.swing.JOptionPane;
+import java.util.ArrayList;
+
 public class ProcedureParameterTableModel extends 
CayenneTableModel<ProcedureParameter> {
 
     public static final int PARAMETER_NUMBER    = 0;
@@ -127,10 +126,10 @@ public class ProcedureParameterTableModel extends 
CayenneTableModel<ProcedurePar
                 parameter.setMaxLength(Integer.parseInt(newVal));
             } catch (NumberFormatException ex) {
                 JOptionPane.showMessageDialog(
-                    null,
-                    "Invalid Max Length (" + newVal + "), only numbers are 
allowed",
-                    "Invalid Maximum Length",
-                    JOptionPane.ERROR_MESSAGE);
+                        null,
+                        "Invalid Max Length (" + newVal + "), only numbers are 
allowed",
+                        "Invalid Maximum Length",
+                        JOptionPane.ERROR_MESSAGE);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/25594726/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbAttributeTableModel.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbAttributeTableModel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbAttributeTableModel.java
index 66451fd..aa2add4 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbAttributeTableModel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbAttributeTableModel.java
@@ -19,15 +19,6 @@
 
 package org.apache.cayenne.modeler.editor.dbentity;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.swing.JOptionPane;
-
 import org.apache.cayenne.dba.TypesMapping;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
@@ -38,6 +29,14 @@ import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.util.CayenneTableModel;
 import org.apache.cayenne.modeler.util.ProjectUtil;
 
+import javax.swing.JOptionPane;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
 /**
  * Model for DbEntity attributes. Allows adding/removing attributes, modifying 
types and
  * names.
@@ -75,6 +74,14 @@ public class DbAttributeTableModel extends CayenneTableModel 
{
         return DB_ATTRIBUTE_TYPE;
     }
 
+    public int lengthColumnId(){
+        return DB_ATTRIBUTE_MAX;
+    }
+
+    public int scaleColumnId(){
+        return DB_ATTRIBUTE_SCALE;
+    }
+
     public int mandatoryColumnInd() {
         return DB_ATTRIBUTE_MANDATORY;
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/25594726/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributePanel.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributePanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributePanel.java
index 337ebe7..adccd1b 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributePanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributePanel.java
@@ -39,6 +39,7 @@ import org.apache.cayenne.modeler.util.CayenneTable;
 import org.apache.cayenne.modeler.util.PanelFactory;
 import org.apache.cayenne.modeler.util.UIUtil;
 import org.apache.cayenne.modeler.util.combo.AutoCompletion;
+import org.apache.cayenne.swing.components.LimitedTextField;
 
 import javax.swing.JComboBox;
 import javax.swing.JPanel;
@@ -180,6 +181,14 @@ public class DbEntityAttributePanel extends JPanel 
implements DbEntityDisplayLis
 
         
col.setCellEditor(Application.getWidgetFactory().createCellEditor(comboBox));
 
+        TableColumn lengthColumn = 
table.getColumnModel().getColumn(model.lengthColumnId());
+        LimitedTextField limitedLengthField = new LimitedTextField(10);
+        
lengthColumn.setCellEditor(Application.getWidgetFactory().createCellEditor(limitedLengthField));
+
+        TableColumn scaleColumn = 
table.getColumnModel().getColumn(model.scaleColumnId());
+        LimitedTextField limitedScaleField = new LimitedTextField(10);
+        
scaleColumn.setCellEditor(Application.getWidgetFactory().createCellEditor(limitedScaleField));
+
         tablePreferences.bind(table, null, null, null, model.nameColumnInd(), 
true);
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/25594726/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/LimitedTextField.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/LimitedTextField.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/LimitedTextField.java
new file mode 100644
index 0000000..e8eba92
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/LimitedTextField.java
@@ -0,0 +1,59 @@
+/*****************************************************************
+ *   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
+ *
+ *    http://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.components;
+
+import javax.swing.JTextField;
+import javax.swing.text.AttributeSet;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.PlainDocument;
+
+/**
+ * Text field that limits input length
+ *
+ * @since 4.0.1
+ */
+public class LimitedTextField extends JTextField {
+
+    private static final long serialVersionUID = 5615520143950793884L;
+
+    public LimitedTextField(int limit) {
+        setDocument(new LimitedDocument(limit));
+    }
+
+    private static class LimitedDocument extends PlainDocument {
+
+        private static final long serialVersionUID = 2371422073526259311L;
+
+        private int limit;
+
+        LimitedDocument(int limit) {
+            super();
+            this.limit = limit;
+        }
+
+        public void insertString( int offset, String  str, AttributeSet attr ) 
throws BadLocationException {
+            if (str == null) return;
+
+            if ((getLength() + str.length()) <= limit) {
+                super.insertString(offset, str, attr);
+            }
+        }
+    }
+}

Reply via email to