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


The following commit(s) were added to refs/heads/master by this push:
     new 4fb34fe  CAY-2706 Modeler: object attribute dialog doesn't properly 
initialized for the embeddable type
4fb34fe is described below

commit 4fb34fe5c71e674754676fb5548f05cc928e1497
Author: Nikita Timofeev <[email protected]>
AuthorDate: Thu Mar 25 18:34:09 2021 +0300

    CAY-2706 Modeler: object attribute dialog doesn't properly initialized for 
the embeddable type
---
 RELEASE-NOTES.txt                                  |   1 +
 .../dialog/objentity/ObjAttributeInfoDialog.java   | 100 ++++++++++-----------
 .../objentity/ObjAttributeInfoDialogView.java      |   4 +-
 3 files changed, 50 insertions(+), 55 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index f8ed0ac..59a1be5 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -17,6 +17,7 @@ Bug Fixes:
 
 CAY-2702 Modeler: Callbacks table has too small default width
 CAY-2705 Performance of callback annotation processing
+CAY-2706 Modeler: object attribute dialog doesn't properly initialized for the 
embeddable type
 
 ----------------------------------
 Release: 4.2.M3
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 e8e027e..6ff5366 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
@@ -121,8 +121,27 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
        private void initController(ObjAttribute attr) {
 
                for (String embeddableName : embeddableNames) {
-                       ((DefaultComboBoxModel) 
view.getTypeComboBox().getModel()).addElement(embeddableName);
+                       ((DefaultComboBoxModel<String>) 
view.getTypeComboBox().getModel()).addElement(embeddableName);
                }
+               // need to initialize this early, to react to the later call of 
the view.getTypeComboBox().setSelectedItem()
+               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("");
+                       }
+               });
 
                this.attribute = attr;
 
@@ -134,7 +153,7 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
 
                copyObjAttribute(attributeSaved, attribute);
 
-               relTargets = new 
ArrayList<DbEntity>(attribute.getEntity().getDataMap().getDbEntities());
+               relTargets = new 
ArrayList<>(attribute.getEntity().getDataMap().getDbEntities());
 
                /*
                 * Register auto-selection of the target
@@ -229,25 +248,6 @@ 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) {
@@ -370,7 +370,7 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
 
        public boolean setPath(boolean isChange) {
 
-               if (isChange()) {
+               if (isModified()) {
                        if(view.getTypeComboBox().getSelectedItem() != null) {
                                
attributeSaved.setType(view.getTypeComboBox().getSelectedItem().toString());
                        }
@@ -383,7 +383,7 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
                                        view.getCommentField().getText());
                }
 
-               if (!(attributeSaved instanceof EmbeddedAttribute) || 
isRegistredType(attributeSaved.getType())) {
+               if (!(attributeSaved instanceof EmbeddedAttribute) || 
isRegisteredType(attributeSaved.getType())) {
 
                        StringBuilder attributePath = new StringBuilder();
                        StringBuilder pathStr = new StringBuilder();
@@ -444,36 +444,33 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
                return false;
        }
 
-       public boolean isChange() {
-
-               boolean isOverrideTableChange = 
((OverrideEmbeddableAttributeTableModel) view.getOverrideAttributeTable()
-                               .getModel()).isAttributeOverrideChange();
+       public boolean isModified() {
+               boolean isOverrideTableChange =
+                               ((OverrideEmbeddableAttributeTableModel) 
view.getOverrideAttributeTable().getModel())
+                                               .isAttributeOverrideChange();
+               String comment = ObjectInfo
+                               
.getFromMetaData(mediator.getApplication().getMetaData(), attribute, 
ObjectInfo.COMMENT);
                return isOverrideTableChange
                                || 
!attribute.getName().equals(view.getAttributeName().getText())
                                || (attribute.getType() == null && 
view.getTypeComboBox().getSelectedItem() != null)
                                || !Objects.equals(attribute.getType(), 
view.getTypeComboBox().getSelectedItem())
                                || attribute.isUsedForLocking() != 
view.getUsedForLockingCheckBox().isSelected()
                                || attribute.isLazy() != 
view.getLazyCheckBox().isSelected()
-                               || !ObjectInfo.getFromMetaData(
-                                               
mediator.getApplication().getMetaData(), attribute, ObjectInfo.COMMENT)
-                               .equals(view.getCommentField().getText());
+                               || !Objects.equals(comment, 
view.getCommentField().getText());
        }
 
        private void updateTable() {
+               String comment = ObjectInfo
+                               
.getFromMetaData(mediator.getApplication().getMetaData(), attributeSaved, 
ObjectInfo.COMMENT);
                model.setUpdatedValueAt(attributeSaved.getName(), row, 0);
                model.setUpdatedValueAt(attributeSaved.getType(), row, 1);
                model.setUpdatedValueAt(attributeSaved.isUsedForLocking(), row, 
4);
                model.setUpdatedValueAt(attributeSaved.isLazy(), row, 5);
-               model.setUpdatedValueAt(ObjectInfo
-                               
.getFromMetaData(mediator.getApplication().getMetaData(),
-                                               attributeSaved,
-                                               ObjectInfo.COMMENT), row, 6);
+               model.setUpdatedValueAt(comment, row, 6);
        }
 
        public void saveMapping() {
-
                if (setPath(false)) {
-
                        if (JOptionPane.showConfirmDialog(getView(),
                                        "You have changed Db Attribute path. Do 
you want it to be saved?", "Save ObjAttribute",
                                        JOptionPane.YES_NO_OPTION) == 
JOptionPane.YES_OPTION) {
@@ -552,17 +549,17 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
        }
 
        public Map<String, String> getCurrentOverrideAttribute() {
-               Map<String, String> currentEmbeddableOverrite = new HashMap<>();
+               Map<String, String> currentEmbeddableOverride = new HashMap<>();
                Collection<EmbeddableAttribute> embList = 
embeddableModel.getEmbeddableList();
                Embeddable emb = 
stringToEmbeddables.get(attributeSaved.getType());
                for (EmbeddableAttribute e : embList) {
                        if ((emb.getAttribute(e.getName()).getDbAttributeName() 
== null && e.getDbAttributeName() != null)
                                        || 
(emb.getAttribute(e.getName()).getDbAttributeName() != null && 
!emb.getAttribute(e.getName())
                                        
.getDbAttributeName().equals(e.getDbAttributeName()))) {
-                               currentEmbeddableOverrite.put(e.getName(), 
e.getDbAttributeName());
+                               currentEmbeddableOverride.put(e.getName(), 
e.getDbAttributeName());
                        }
                }
-               return currentEmbeddableOverrite;
+               return currentEmbeddableOverride;
        }
 
        public void valueChanged(TreeSelectionEvent e) {
@@ -613,19 +610,18 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
                }
        }
 
-       public boolean isRegistredType(String typeName) {
-               boolean isType = false;
+       public boolean isRegisteredType(String typeName) {
                String[] typeNames = ModelerUtil.getRegisteredTypeNames();
                for (String nextTypeName : typeNames) {
                        if (nextTypeName.equals(typeName)) {
-                               isType = true;
+                               return true;
                        }
                }
-               return isType;
+               return false;
        }
 
        // custom renderer used for inherited attributes highlighting
-       final class CellRenderer extends DefaultTableCellRenderer {
+       static final class CellRenderer extends DefaultTableCellRenderer {
 
                @Override
                public Component getTableCellRendererComponent(JTable table, 
Object value, boolean isSelected,
@@ -678,23 +674,21 @@ public class ObjAttributeInfoDialog extends 
CayenneController implements TreeSel
                }
        }
 
-       private void compareAndSetOverrideInEmbeddedAttribute(ObjAttribute 
attribute, Map<String, String> overrides,
-                       Map<String, String> currentOverrAttr) {
+       private void compareAndSetOverrideInEmbeddedAttribute(ObjAttribute 
attribute,
+                                                                               
                                  Map<String, String> overrides,
+                                                                               
                                  Map<String, String> currentOverrAttr) {
                ArrayList<String> keysForDelete = new ArrayList<>();
                ArrayList<String> keysForAdd = new ArrayList<>();
 
-               for (Object o : overrides.entrySet()) {
-                       Map.Entry obj = (Map.Entry) o;
-
-                       String key = (String) obj.getKey();
+               for (Map.Entry<String, String> obj : overrides.entrySet()) {
+                       String key = obj.getKey();
                        if (currentOverrAttr.get(key) == null || 
!(obj.getValue().equals(currentOverrAttr.get(key)))) {
                                keysForDelete.add(key);
                        }
                }
 
-               for (Object o : currentOverrAttr.entrySet()) {
-                       Map.Entry obj = (Map.Entry) o;
-                       String key = (String) obj.getKey();
+               for (Map.Entry<String, String> obj : 
currentOverrAttr.entrySet()) {
+                       String key = obj.getKey();
                        if (overrides.get(key) == null || 
!(obj.getValue().equals(overrides.get(key)))) {
                                keysForAdd.add(key);
                        }
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 0678047..caf0f7d 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
@@ -133,7 +133,7 @@ public class ObjAttributeInfoDialogView extends JDialog {
         builder.addLabel("Comment:", cc.xy(1, 15));
         builder.add(commentField, cc.xywh(3, 15, 1, 1));
 
-        builder.addSeparator("Mapping to DbAttributes", cc.xywh(1, 15, 7, 1));
+        builder.addSeparator("Mapping to DbAttributes", cc.xywh(1, 17, 7, 1));
 
         typeManagerPane = new JPanel();
         typeManagerPane.setLayout(new CardLayout());
@@ -172,7 +172,7 @@ public class ObjAttributeInfoDialogView extends JDialog {
         typeManagerPane.add(builderPathPane.getPanel(), FLATTENED_PANEL);
         typeManagerPane.add(embeddablePane.getPanel(), EMBEDDABLE_PANEL);
 
-        builder.add(typeManagerPane, cc.xywh(1, 17, 7, 1));
+        builder.add(typeManagerPane, cc.xywh(1, 19, 7, 1));
 
         add(builder.getPanel(), BorderLayout.CENTER);
 

Reply via email to