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 2018/07/10 08:30:21 UTC

[2/7] cayenne git commit: CAY-2427 Undo: undo throws exeption

CAY-2427 Undo: undo throws exeption


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

Branch: refs/heads/STABLE-4.0
Commit: 94db9226bf1466069c22a3c75e496c8c492adbb9
Parents: 8d4c83a
Author: Arseni Bulatski <an...@gmail.com>
Authored: Tue Jul 10 11:04:14 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Tue Jul 10 11:04:14 2018 +0300

----------------------------------------------------------------------
 RELEASE-NOTES.txt                                    |  1 +
 .../cayenne/modeler/action/DbEntitySyncAction.java   | 15 +++++++++++----
 2 files changed, 12 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/94db9226/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 1d85638..8599c3b 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -47,6 +47,7 @@ CAY-2401 Modeler: NPE in ObjEntity sync action
 CAY-2405 Broken prefetch of entity with inheritance and attribute with custom java type
 CAY-2411 Wrong resolution of ExtendedType with ValueObjectType for inherited class
 CAY-2420 Modeler: search is not performed for Stored Procedures
+CAY-2427 Modeler: Undo throws exeption
 CAY-2429 Generate classes: Invalid template type: EMBEDDABLE_SINGLE_CLASS
 
 ----------------------------------

http://git-wip-us.apache.org/repos/asf/cayenne/blob/94db9226/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
index b774233..822e95a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
@@ -22,6 +22,7 @@ package org.apache.cayenne.modeler.action;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.dbsync.merge.context.EntityMergeSupport;
 import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
+import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.map.ObjEntity;
@@ -99,6 +100,7 @@ public class DbEntitySyncAction extends CayenneAction {
 			// filter out inherited entities, as we need to add attributes only to the roots
 			filterInheritedEntities(entities);
 
+			boolean hasChanges = false;
 			for(ObjEntity entity : entities) {
 
 				DbEntitySyncUndoableEdit.EntitySyncUndoableListener listener = undoableEdit.new EntitySyncUndoableListener(
@@ -106,21 +108,26 @@ public class DbEntitySyncAction extends CayenneAction {
 
 				merger.addEntityMergeListener(listener);
 
+				Collection<DbAttribute> meaningfulFKs = merger.getMeaningfulFKs(entity);
+
 				// TODO: addition or removal of model objects should be reflected in listener callbacks...
 				// we should not be trying to introspect the merger
-				if (merger.isRemovingMeaningfulFKs()) {
-					undoableEdit.addEdit(undoableEdit.new MeaningfulFKsUndoableEdit(entity, merger
-							.getMeaningfulFKs(entity)));
+				if (merger.isRemovingMeaningfulFKs() && !meaningfulFKs.isEmpty()) {
+					undoableEdit.addEdit(undoableEdit.new MeaningfulFKsUndoableEdit(entity, meaningfulFKs));
+					hasChanges = true;
 				}
 
 				if (merger.synchronizeWithDbEntity(entity)) {
 					mediator.fireObjEntityEvent(new EntityEvent(this, entity, MapEvent.CHANGE));
+					hasChanges = true;
 				}
 
 				merger.removeEntityMergeListener(listener);
 			}
 
-			application.getUndoManager().addEdit(undoableEdit);
+			if(hasChanges) {
+				application.getUndoManager().addEdit(undoableEdit);
+			}
 		}
 	}