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 2017/02/20 12:45:41 UTC

cayenne git commit: CAY-2238 Modeler: Preserve manually set DbRelationship name when syncing with ObjEntity

Repository: cayenne
Updated Branches:
  refs/heads/master 103a2026f -> c21fc6896


CAY-2238 Modeler: Preserve manually set DbRelationship name when syncing with ObjEntity


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

Branch: refs/heads/master
Commit: c21fc6896397970a6bcb7448e04277db19e293c6
Parents: 103a202
Author: Nikita Timofeev <st...@gmail.com>
Authored: Mon Feb 20 15:41:45 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Mon Feb 20 15:41:45 2017 +0300

----------------------------------------------------------------------
 .../merge/context/EntityMergeSupport.java       |  6 +++-
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |  1 +
 .../modeler/action/CreateObjEntityAction.java   |  1 +
 .../modeler/action/DbEntitySyncAction.java      | 30 +++++++++++++++++---
 .../modeler/action/ObjEntitySyncAction.java     |  6 ++--
 5 files changed, 37 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/c21fc689/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/context/EntityMergeSupport.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/context/EntityMergeSupport.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/context/EntityMergeSupport.java
index 72677c7..ae93916 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/context/EntityMergeSupport.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/context/EntityMergeSupport.java
@@ -74,7 +74,7 @@ public class EntityMergeSupport {
         SQL_TYPE_TO_JAVA8_TYPE.put(Types.TIMESTAMP, "java.time.LocalDateTime");
     }
 
-    private final ObjectNameGenerator nameGenerator;
+    private ObjectNameGenerator nameGenerator;
     private final List<EntityMergeListener> listeners;
     private final boolean removingMeaningfulFKs;
     private final NameFilter meaningfulPKsFilter;
@@ -500,4 +500,8 @@ public class EntityMergeSupport {
             listener.objRelationshipAdded(rel);
         }
     }
+
+    public void setNameGenerator(ObjectNameGenerator nameGenerator) {
+        this.nameGenerator = nameGenerator;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c21fc689/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index 1562ac5..662c304 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -45,6 +45,7 @@ CAY-2183 Newly created DbRelationship is unexpectedly renamed by the Modeler
 CAY-2199 Modeler on Windows: The same project is displayed twice in "Recent Projects"
 CAY-2221 In-memory expression evaluation gives different result than select query
 CAY-2236 Modeler Migrate DB Schema: unable to Reverse All Operations
+CAY-2238 Modeler: Preserve manually set DbRelationship name when syncing with ObjEntity
 
 ----------------------------------
 Release: 4.0.M4

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c21fc689/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
index d4e745b..397bf3a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
@@ -114,6 +114,7 @@ public class CreateObjEntityAction extends CayenneAction {
         // TODO: Modeler-controlled defaults for all the hardcoded boolean flags here.
         EntityMergeSupport merger = new EntityMergeSupport(new DefaultObjectNameGenerator(NoStemStemmer.getInstance()),
                 NamePatternMatcher.EXCLUDE_ALL, true, true, false);
+        merger.setNameGenerator(new DbEntitySyncAction.PreserveRelationshipNameGenerator());
         merger.addEntityMergeListener(DeleteRuleUpdater.getEntityMergeListener());
         merger.synchronizeWithDbEntity(entity);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c21fc689/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 cf4d2de..9b4cb30 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
@@ -21,7 +21,9 @@ 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.DbEntity;
+import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.event.EntityEvent;
 import org.apache.cayenne.map.event.MapEvent;
@@ -56,10 +58,10 @@ public class DbEntitySyncAction extends CayenneAction {
 	 * @see org.apache.cayenne.modeler.util.CayenneAction#performAction(ActionEvent)
 	 */
 	public void performAction(ActionEvent e) {
-		synchDbEntity();
+		syncDbEntity();
 	}
 
-	protected void synchDbEntity() {
+	protected void syncDbEntity() {
 		ProjectController mediator = getProjectController();
 
 		DbEntity dbEntity = mediator.getCurrentDbEntity();
@@ -71,13 +73,15 @@ public class DbEntitySyncAction extends CayenneAction {
 				return;
 			}
 
-			EntityMergeSupport merger = new EntitySyncController(Application.getInstance().getFrameController(),
-					dbEntity).createMerger();
+			EntityMergeSupport merger = new EntitySyncController(Application.getInstance().getFrameController(), dbEntity)
+					.createMerger();
 
 			if (merger == null) {
 				return;
 			}
 
+			merger.setNameGenerator(new PreserveRelationshipNameGenerator());
+
 			DbEntitySyncUndoableEdit undoableEdit = new DbEntitySyncUndoableEdit((DataChannelDescriptor) mediator
 					.getProject().getRootNode(), mediator.getCurrentDataMap());
 
@@ -106,4 +110,22 @@ public class DbEntitySyncAction extends CayenneAction {
 			application.getUndoManager().addEdit(undoableEdit);
 		}
 	}
+
+	static class PreserveRelationshipNameGenerator extends DefaultObjectNameGenerator {
+
+		@Override
+		public String relationshipName(DbRelationship... relationshipChain) {
+			if(relationshipChain.length == 0) {
+				return super.relationshipName(relationshipChain);
+			}
+			DbRelationship last = relationshipChain[relationshipChain.length - 1];
+			// must be in sync with DefaultBaseNameVisitor.visitDbRelationship
+			if(last.getName().startsWith("untitledRel")) {
+				return super.relationshipName(relationshipChain);
+			}
+
+			// keep manually set relationship name
+			return last.getName();
+		}
+	}
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c21fc689/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ObjEntitySyncAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ObjEntitySyncAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ObjEntitySyncAction.java
index c153a5b..6693458 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ObjEntitySyncAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ObjEntitySyncAction.java
@@ -64,10 +64,10 @@ public class ObjEntitySyncAction extends CayenneAction {
      * @see org.apache.cayenne.modeler.util.CayenneAction#performAction(ActionEvent)
      */
     public void performAction(ActionEvent e) {
-        synchObjEntity();
+        syncObjEntity();
     }
 
-    protected void synchObjEntity() {
+    protected void syncObjEntity() {
         ProjectController mediator = getProjectController();
         ObjEntity entity = mediator.getCurrentObjEntity();
 
@@ -80,6 +80,8 @@ public class ObjEntitySyncAction extends CayenneAction {
                 return;
             }
 
+            merger.setNameGenerator(new DbEntitySyncAction.PreserveRelationshipNameGenerator());
+
             if (merger.synchronizeWithDbEntity(entity)) {
                 mediator
                         .fireObjEntityEvent(new EntityEvent(this, entity, MapEvent.CHANGE));