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

abulatski 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 6a62689  CAY-2549 Modeler: Redesign ObjAttribute editor dialog
6a62689 is described below

commit 6a6268912174638fe131ad69d41c4866e888fa70
Author: Arseni Bulatski <ancars...@gmail.com>
AuthorDate: Thu Mar 7 12:00:49 2019 +0300

    CAY-2549 Modeler: Redesign ObjAttribute editor dialog
---
 RELEASE-NOTES.txt                                  |  1 +
 .../dialog/objentity/ObjAttributeInfoDialog.java   | 83 +++++++++++++++++----
 .../objentity/ObjAttributeInfoDialogView.java      | 86 +++++++++++-----------
 3 files changed, 113 insertions(+), 57 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 4f1f186..27ebf74 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -25,6 +25,7 @@ CAY-2522 Make ObjectSelect a direct query
 CAY-2540 Modeler: redesign dbRelationship editor dialog
 CAY-2542 Redesign ObjRelationship editor dialog
 CAY-2543 Move ResultSetMapping generation from metadata to translator
+CAY-2549 Modeler: Redesign ObjAttribute editor dialog
 
 Bug Fixes:
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java
index 71355fb..16c823f 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java
@@ -39,6 +39,7 @@ import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.modeler.util.EntityTreeAttributeRelationshipFilter;
 import org.apache.cayenne.modeler.util.EntityTreeModel;
 import org.apache.cayenne.modeler.util.ModelerUtil;
+import org.apache.cayenne.project.extension.info.ObjectInfo;
 import org.apache.cayenne.swing.BindingBuilder;
 import org.apache.cayenne.util.CayenneMapEntry;
 
@@ -51,6 +52,7 @@ import javax.swing.event.TreeSelectionListener;
 import javax.swing.table.DefaultTableCellRenderer;
 import javax.swing.table.TableColumn;
 import javax.swing.tree.TreePath;
+import java.awt.CardLayout;
 import java.awt.Color;
 import java.awt.Component;
 import java.awt.event.KeyEvent;
@@ -63,6 +65,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
+import static 
org.apache.cayenne.modeler.dialog.objentity.ObjAttributeInfoDialogView.EMBEDDABLE_PANEL;
+import static 
org.apache.cayenne.modeler.dialog.objentity.ObjAttributeInfoDialogView.FLATTENED_PANEL;
+
 public class ObjAttributeInfoDialog extends CayenneController implements 
TreeSelectionListener {
 
        private ObjAttributeTableModel model;
@@ -82,7 +87,7 @@ public class ObjAttributeInfoDialog extends CayenneController 
implements TreeSel
 
        public ObjAttributeInfoDialog(ProjectController mediator, int row, 
ObjAttributeTableModel model) {
                super(mediator);
-               this.view = new ObjAttributeInfoDialogView(mediator);
+               this.view = new ObjAttributeInfoDialogView();
                this.mediator = mediator;
                this.model = model;
                this.row = row;
@@ -148,8 +153,12 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
                        view.getCurrentPathLabel().setText("");
                }
                
view.getSourceEntityLabel().setText(attribute.getEntity().getName());
-
                view.getTypeComboBox().setSelectedItem(attribute.getType());
+               
view.getUsedForLockingCheckBox().setSelected(attribute.isUsedForLocking());
+               view.getCommentField().setText(ObjectInfo
+                               
.getFromMetaData(mediator.getApplication().getMetaData(),
+                                               attr,
+                                               ObjectInfo.COMMENT));
 
                BindingBuilder builder = new 
BindingBuilder(getApplication().getBindingFactory(), this);
                builder.bindToAction(view.getCancelButton(), "closeAction()");
@@ -219,6 +228,25 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
             }
         });
 
+               view.getTypeComboBox().addActionListener(e -> {
+                       boolean isType = false;
+                       String[] typeNames = 
ModelerUtil.getRegisteredTypeNames();
+                       for (String typeName : typeNames) {
+                               if (view.getTypeComboBox().getSelectedItem() == 
null ||
+                                               
typeName.equals(view.getTypeComboBox().getSelectedItem().toString())) {
+                                       isType = true;
+                               }
+                       }
+
+                       if (isType || 
!mediator.getEmbeddableNamesInCurrentDataDomain()
+                                       
.contains((String)view.getTypeComboBox().getSelectedItem())) {
+                               ((CardLayout) 
view.getTypeManagerPane().getLayout()).show(view.getTypeManagerPane(), 
FLATTENED_PANEL);
+                       } else {
+                               ((CardLayout) 
view.getTypeManagerPane().getLayout()).show(view.getTypeManagerPane(), 
EMBEDDABLE_PANEL);
+                               view.getCurrentPathLabel().setText("");
+                       }
+               });
+
                view.getAttributeName().addKeyListener(new KeyListener() {
 
                        public void keyPressed(KeyEvent e) {
@@ -346,6 +374,11 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
                                
attributeSaved.setType(view.getTypeComboBox().getSelectedItem().toString());
                        }
                        
attributeSaved.setName(view.getAttributeName().getText());
+                       
attributeSaved.setUsedForLocking(view.getUsedForLockingCheckBox().isSelected());
+                       
ObjectInfo.putToMetaData(mediator.getApplication().getMetaData(),
+                                       attributeSaved,
+                                       ObjectInfo.COMMENT,
+                                       view.getCommentField().getText());
                }
 
                if (!(attributeSaved instanceof EmbeddedAttribute) || 
isRegistredType(attributeSaved.getType())) {
@@ -388,7 +421,7 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
                                        
attributeSaved.setDbAttributePath(attributePath.toString());
 
                                        if 
(!attribute.getDbAttributePath().equals(attributePath.toString()) && isChange) {
-                                               
model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 3);
+                                               
model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 2);
                                        }
                                        return true;
                                }
@@ -398,13 +431,14 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
 
                                        
attributeSaved.setDbAttributePath(attributePath.toString());
                                        if (attributePath.length() == 0) {
-                                               
model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 3);
+                                               
model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 2);
                                                return false;
                                        }
                                        return true;
                                }
                        }
                }
+
                return false;
        }
 
@@ -415,7 +449,21 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
                return isOverrideTableChange
                                || 
!attribute.getName().equals(view.getAttributeName().getText())
                                || (attribute.getType() == null && 
view.getTypeComboBox().getSelectedItem() != null)
-                               || !Objects.equals(attribute.getType(), 
view.getTypeComboBox().getSelectedItem());
+                               || !Objects.equals(attribute.getType(), 
view.getTypeComboBox().getSelectedItem())
+                               || attribute.isUsedForLocking() != 
view.getUsedForLockingCheckBox().isSelected()
+                               || !ObjectInfo.getFromMetaData(
+                                               
mediator.getApplication().getMetaData(), attribute, ObjectInfo.COMMENT)
+                               .equals(view.getCommentField().getText());
+       }
+
+       private void updateTable() {
+               model.setUpdatedValueAt(attributeSaved.getName(), row, 0);
+               model.setUpdatedValueAt(attributeSaved.getType(), row, 1);
+               model.setUpdatedValueAt(attributeSaved.isUsedForLocking(), row, 
4);
+               model.setUpdatedValueAt(ObjectInfo
+                               
.getFromMetaData(mediator.getApplication().getMetaData(),
+                                               attributeSaved,
+                                               ObjectInfo.COMMENT), row, 5);
        }
 
        public void saveMapping() {
@@ -429,14 +477,12 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
                                if (attribute instanceof EmbeddedAttribute) {
                                        changeAttributeObject();
                                } else {
-                                       
model.setUpdatedValueAt(attributeSaved.getName(), row, 1);
-                                       
model.setUpdatedValueAt(attributeSaved.getType(), row, 2);
+                                       updateTable();
                                }
 
-                               
model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 3);
+                               
model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 2);
                        } else {
-                               
model.setUpdatedValueAt(attributeSaved.getName(), row, 1);
-                               
model.setUpdatedValueAt(attributeSaved.getType(), row, 2);
+                               updateTable();
                        }
                } else {
                        if ((attributeSaved instanceof EmbeddedAttribute && 
!(attribute instanceof EmbeddedAttribute))
@@ -450,14 +496,13 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
                                        
compareAndSetOverrideInEmbeddedAttribute(attributeSaved, overrides, 
currentOverrAttr);
                                }
 
-                               
model.setUpdatedValueAt(attributeSaved.getName(), row, 1);
-                               
model.setUpdatedValueAt(attributeSaved.getType(), row, 2);
-                               
model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 3);
+                               updateTable();
+                               
model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 2);
                        }
 
                        if (attributeSaved instanceof EmbeddedAttribute && 
attribute instanceof EmbeddedAttribute) {
 
-                               
model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 3);
+                               
model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 2);
                                if 
(embeddableModel.isAttributeOverrideChange()) {
                                        Map<String, String> overrides;
                                        overrides = ((EmbeddedAttribute) 
attribute).getAttributeOverrides();
@@ -479,7 +524,7 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
                }
                if (attributeSaved instanceof EmbeddedAttribute) {
                        attributeSaved.setDbAttributePath(null);
-                       
model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 3);
+                       
model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 2);
                }
 
                model.getEntity().removeAttribute(attribute.getName());
@@ -604,6 +649,14 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
                attributeSaved.setParent(attribute.getParent());
                attributeSaved.setType(attribute.getType());
                attributeSaved.setUsedForLocking(attribute.isUsedForLocking());
+               String comment = ObjectInfo
+                               
.getFromMetaData(mediator.getApplication().getMetaData(),
+                                               attribute,
+                                               ObjectInfo.COMMENT);
+               
ObjectInfo.putToMetaData(mediator.getApplication().getMetaData(),
+                               attributeSaved,
+                               ObjectInfo.COMMENT,
+                               comment);
 
                if (attributeSaved instanceof EmbeddedAttribute) {
                        Map<String, String> attrOverrides;
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java
index d98ad0f..62b146a 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java
@@ -23,7 +23,6 @@ import com.jgoodies.forms.layout.CellConstraints;
 import com.jgoodies.forms.layout.FormLayout;
 import com.jgoodies.forms.layout.RowSpec;
 import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.pref.TableColumnPreferences;
 import org.apache.cayenne.modeler.util.CayenneTable;
 import org.apache.cayenne.modeler.util.ModelerUtil;
@@ -32,6 +31,7 @@ import org.apache.cayenne.modeler.util.PanelFactory;
 import org.apache.cayenne.modeler.util.combo.AutoCompletion;
 
 import javax.swing.JButton;
+import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
 import javax.swing.JDialog;
 import javax.swing.JLabel;
@@ -47,36 +47,34 @@ import java.awt.event.ComponentListener;
 
 public class ObjAttributeInfoDialogView extends JDialog {
 
+    static final String EMBEDDABLE_PANEL = "EMBEDDABLE_PANEL";
+    static final String FLATTENED_PANEL = "FLATTENED_PANEL";
+
     /**
      * // * Browser to select path for attribute //
      */
-    protected MultiColumnBrowser pathBrowser;
+    private MultiColumnBrowser pathBrowser;
 
-    protected JButton cancelButton;
-    protected JButton saveButton;
-    protected JButton selectPathButton;
+    private JButton cancelButton;
+    private JButton saveButton;
+    private JButton selectPathButton;
 
-    protected JTextField attributeName;
-    protected JLabel currentPathLabel;
-    protected JLabel sourceEntityLabel;
+    private JTextField attributeName;
+    private JLabel currentPathLabel;
+    private JLabel sourceEntityLabel;
 
-    protected JComboBox<String> typeComboBox;
-    protected JPanel typeManagerPane;
+    private JComboBox<String> typeComboBox;
+    private JPanel typeManagerPane;
 
-    protected CayenneTable overrideAttributeTable;
-    protected TableColumnPreferences tablePreferences;
-    
-    ProjectController mediator;
+    private CayenneTable overrideAttributeTable;
+    private TableColumnPreferences tablePreferences;
 
-    static final Dimension BROWSER_CELL_DIM = new Dimension(130, 200);
-    
-    static final String EMBEDDABLE_PANEL = "EMBEDDABLE_PANEL"; 
-    static final String FLATTENED_PANEL = "FLATTENED_PANEL"; 
+    private JCheckBox usedForLockingCheckBox;
+    private JTextField commentField;
 
-    public ObjAttributeInfoDialogView(final ProjectController mediator) {
-
-        this.mediator = mediator;
+    private static final Dimension BROWSER_CELL_DIM = new Dimension(130, 200);
 
+    public ObjAttributeInfoDialogView() {
         // create widgets
         this.cancelButton = new JButton("Cancel");
         this.saveButton = new JButton("Done");
@@ -90,6 +88,9 @@ public class ObjAttributeInfoDialogView extends JDialog {
         AutoCompletion.enable(typeComboBox, false, true);
         typeComboBox.getRenderer();
 
+        this.usedForLockingCheckBox = new JCheckBox();
+        this.commentField = new JTextField();
+
         overrideAttributeTable = new CayenneTable();
         tablePreferences = new TableColumnPreferences(getClass(), 
"overrideAttributeTable");
 
@@ -105,7 +106,7 @@ public class ObjAttributeInfoDialogView extends JDialog {
         final PanelBuilder builder = new PanelBuilder(
                 new FormLayout(
                         "right:max(50dlu;pref), 3dlu, 200dlu, 15dlu, 
right:max(30dlu;pref), 3dlu, 200dlu",
-                        "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 6dlu, p, 6dlu, 
p, 3dlu, fill:p:grow"));
+                        "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, 
p, 3dlu, p, 6dlu, p, 6dlu, p, 3dlu, fill:p:grow"));
         builder.setDefaultDialogBorder();
         builder.addSeparator("ObjAttribute Information", cc.xywh(1, 1, 7, 1));
 
@@ -118,10 +119,16 @@ public class ObjAttributeInfoDialogView extends JDialog {
         builder.addLabel("Current Db Path:", cc.xy(1, 7));
         builder.add(currentPathLabel, cc.xywh(3, 7, 5, 1));
 
-        builder.addLabel("Type:", cc.xy(1, 9));
+        builder.addLabel("Java Type:", cc.xy(1, 9));
         builder.add(typeComboBox, cc.xywh(3, 9, 1, 1));
 
-        builder.addSeparator("Mapping to DbAttributes", cc.xywh(1, 11, 7, 1));
+        builder.addLabel("Used for locking:", cc.xy(1, 11));
+        builder.add(usedForLockingCheckBox, cc.xywh(3, 11, 1, 1));
+
+        builder.addLabel("Comment:", cc.xy(1, 13));
+        builder.add(commentField, cc.xywh(3, 13, 1, 1));
+
+        builder.addSeparator("Mapping to DbAttributes", cc.xywh(1, 15, 7, 1));
 
         typeManagerPane = new JPanel();
         typeManagerPane.setLayout(new CardLayout());
@@ -160,7 +167,7 @@ public class ObjAttributeInfoDialogView extends JDialog {
         typeManagerPane.add(builderPathPane.getPanel(), FLATTENED_PANEL);
         typeManagerPane.add(embeddablePane.getPanel(), EMBEDDABLE_PANEL);
 
-        builder.add(typeManagerPane, cc.xywh(1, 13, 7, 1));
+        builder.add(typeManagerPane, cc.xywh(1, 17, 7, 1));
 
         add(builder.getPanel(), BorderLayout.CENTER);
 
@@ -189,23 +196,6 @@ public class ObjAttributeInfoDialogView extends JDialog {
 
         JButton[] buttons = {cancelButton, saveButton};
         add(PanelFactory.createButtonPanel(buttons), BorderLayout.SOUTH);
-
-        typeComboBox.addActionListener(e -> {
-            boolean isType = false;
-            String[] typeNames = ModelerUtil.getRegisteredTypeNames();
-            for (String typeName : typeNames) {
-                if (typeComboBox.getSelectedItem() == null || 
typeName.equals(typeComboBox.getSelectedItem().toString())) {
-                    isType = true;
-                }
-            }
-
-            if (isType || 
!mediator.getEmbeddableNamesInCurrentDataDomain().contains((String)typeComboBox.getSelectedItem()))
 {
-                ((CardLayout) 
typeManagerPane.getLayout()).show(typeManagerPane, FLATTENED_PANEL);
-            } else {
-                ((CardLayout) 
typeManagerPane.getLayout()).show(typeManagerPane, EMBEDDABLE_PANEL);
-                getCurrentPathLabel().setText("");
-            }
-        });
     }
 
     public CayenneTable getOverrideAttributeTable() {
@@ -247,4 +237,16 @@ public class ObjAttributeInfoDialogView extends JDialog {
     public JLabel getSourceEntityLabel() {
         return sourceEntityLabel;
     }
+
+    public JCheckBox getUsedForLockingCheckBox() {
+        return usedForLockingCheckBox;
+    }
+
+    public JTextField getCommentField() {
+        return commentField;
+    }
+
+    public JPanel getTypeManagerPane() {
+        return typeManagerPane;
+    }
 }

Reply via email to