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 2021/03/25 15:34:19 UTC

[cayenne] branch master updated: CAY-2706 Modeler: object attribute dialog doesn't properly initialized for the embeddable type

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 <st...@gmail.com>
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);