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));