Fix NPE

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

Branch: refs/heads/STABLE-4.0
Commit: 50668a4b85127f3199cfb16949b6980c10c1b092
Parents: 3645943
Author: Nikita Timofeev <stari...@gmail.com>
Authored: Thu Sep 20 17:03:45 2018 +0300
Committer: Arseni Bulatski <ancars...@gmail.com>
Committed: Tue Sep 25 12:41:04 2018 +0300

----------------------------------------------------------------------
 .../util/DbRelationshipPathComboBoxEditor.java  | 32 ++++++++++++++------
 1 file changed, 23 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/50668a4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DbRelationshipPathComboBoxEditor.java
----------------------------------------------------------------------
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DbRelationshipPathComboBoxEditor.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DbRelationshipPathComboBoxEditor.java
index a3e6935..b79e68d 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DbRelationshipPathComboBoxEditor.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DbRelationshipPathComboBoxEditor.java
@@ -22,9 +22,11 @@ package org.apache.cayenne.modeler.util;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.editor.ObjRelationshipTableModel;
 
 import javax.swing.JLabel;
+import javax.swing.JOptionPane;
 import javax.swing.JTable;
 import javax.swing.text.JTextComponent;
 import java.awt.Component;
@@ -98,12 +100,14 @@ public class DbRelationshipPathComboBoxEditor extends 
PathChooserComboBoxCellEdi
 
                     //we need object target to save it in model
                     DbEntity lastEntity = ((DbRelationship) 
currentNode).getTargetEntity();
-                    Collection<ObjEntity> objEntities = ((DbRelationship) 
currentNode).getTargetEntity().
-                            getDataMap().getMappedEntities(lastEntity);
-                    ObjEntity objectTarget = objEntities.isEmpty() ? null : 
objEntities.iterator().next();
-                    
model.getRelationship(row).setTargetEntityName(objectTarget);
-                    model.setUpdatedValueAt(dbRelationshipPath, row, 
REL_TARGET_PATH_COLUMN);
-                    
model.getRelationship(row).setDbRelationshipPath(dbRelationshipPath);
+                    if(lastEntity == null) {
+                        Collection<ObjEntity> objEntities = ((DbRelationship) 
currentNode).getTargetEntity().
+                                getDataMap().getMappedEntities(lastEntity);
+                        ObjEntity objectTarget = objEntities.isEmpty() ? null 
: objEntities.iterator().next();
+                        
model.getRelationship(row).setTargetEntityName(objectTarget);
+                        model.setUpdatedValueAt(dbRelationshipPath, row, 
REL_TARGET_PATH_COLUMN);
+                        
model.getRelationship(row).setDbRelationshipPath(dbRelationshipPath);
+                    }
                     model.getRelationship(row).setMapKey(null);
                 }
                 table.repaint();
@@ -154,17 +158,21 @@ public class DbRelationshipPathComboBoxEditor extends 
PathChooserComboBoxCellEdi
         return pathString.replaceAll(lastStringInPath + '$', "");
     }
 
-    private void changeObjEntity(String path){
+    private boolean changeObjEntity(String path){
         Object currentNode = getCurrentNode(path);
         if (currentNode instanceof DbEntity){
-            return;
+            return false;
         }
         DbEntity lastEntity = ((DbRelationship) currentNode).getTargetEntity();
+        if(lastEntity == null) {
+            return false;
+        }
         Collection<ObjEntity> objEntities = ((DbRelationship) 
currentNode).getTargetEntity().
                 getDataMap().getMappedEntities(lastEntity);
         ObjEntity objectTarget = objEntities.isEmpty() ? null : 
objEntities.iterator().next();
         model.getRelationship(row).setTargetEntityName(objectTarget);
         table.repaint();
+        return true;
     }
 
     @Override
@@ -174,6 +182,12 @@ public class DbRelationshipPathComboBoxEditor extends 
PathChooserComboBoxCellEdi
     @Override
     public void focusLost(FocusEvent focusEvent) {
         String path = model.getRelationship(row).getDbRelationshipPath();
-        changeObjEntity(path);
+        if(!changeObjEntity(path)) {
+            JOptionPane.showMessageDialog(
+                    Application.getFrame(),
+                    "Can't set dbAttribute path. At first set target entity in 
dbEntity.",
+                    "Error",
+                    JOptionPane.ERROR_MESSAGE);
+        }
     }
 }

Reply via email to