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); + } + } + } +}