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/12/07 10:13:35 UTC
[cayenne] 01/03: change relationship preservetion function
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
commit f65bf950b8e1f1d66a1710c04b8aba7cbf03d988
Author: Oleg Khodokevich <ol...@mail.ru>
AuthorDate: Mon Dec 6 19:06:15 2021 +0300
change relationship preservetion function
---
.../dialog/objentity/ObjRelationshipInfo.java | 15 ++++------
.../apache/cayenne/modeler/util/ProjectUtil.java | 34 ++++++++++++----------
2 files changed, 23 insertions(+), 26 deletions(-)
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java
index e173c21..e2d670d 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java
@@ -52,11 +52,7 @@ import org.apache.cayenne.modeler.dialog.DbRelationshipDialog;
import org.apache.cayenne.modeler.event.RelationshipDisplayEvent;
import org.apache.cayenne.modeler.undo.CreateRelationshipUndoableEdit;
import org.apache.cayenne.modeler.undo.RelationshipUndoableEdit;
-import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.modeler.util.Comparators;
-import org.apache.cayenne.modeler.util.EntityTreeModel;
-import org.apache.cayenne.modeler.util.EntityTreeRelationshipFilter;
-import org.apache.cayenne.modeler.util.MultiColumnBrowser;
+import org.apache.cayenne.modeler.util.*;
import org.apache.cayenne.project.extension.info.ObjectInfo;
import org.apache.cayenne.util.DeleteRuleUpdater;
import org.apache.cayenne.util.Util;
@@ -280,10 +276,9 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect
this.savedDbRelationships = new ArrayList<>(dbRelationships);
}
}
-
- savePath();
- relationship.getSourceEntity().addRelationship(relationship);
+ configureRelationship();
if(isCreate) {
+ relationship.getSourceEntity().addRelationship(relationship);
fireObjRelationshipEvent(this);
Application.getInstance().getUndoManager().addEdit(
new CreateRelationshipUndoableEdit(relationship.getSourceEntity(), new ObjRelationship[]{relationship}));
@@ -541,7 +536,7 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect
/**
* Stores current state of the model in the internal ObjRelationship.
*/
- public boolean savePath() {
+ public boolean configureRelationship() {
boolean hasChanges = false;
boolean oldToMany = relationship.isToMany();
@@ -549,8 +544,8 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect
String relationshipName = getRelationshipName();
if (!Util.nullSafeEquals(relationship.getName(), relationshipName)) {
+ ProjectUtil.setRelationshipName(relationship.getSourceEntity(), relationship, relationshipName);
hasChanges = true;
- relationship.setName(relationshipName);
}
if (savedDbRelationships.size() > 0) {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectUtil.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectUtil.java
index 23b20e4..d774415 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectUtil.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectUtil.java
@@ -208,16 +208,19 @@ public class ProjectUtil {
}
}
- /** Changes the name of the attribute in all places in DataMap. */
+ /**
+ * Adds or changes the name of the attribute in all places in DataMap.
+ */
public static void setRelationshipName(Entity entity, Relationship rel, String newName) {
-
- if (rel == null || rel != entity.getRelationship(rel.getName())) {
- return;
+ Relationship existingRelationship = entity.getRelationship(newName);
+ if (existingRelationship != null && existingRelationship != rel) {
+ throw new IllegalArgumentException("An attempt to override relationship '" + rel.getName() + "'");
+ }
+ if (rel != null) {
+ entity.removeRelationship(rel.getName());
+ rel.setName(newName);
+ entity.addRelationship(rel);
}
-
- entity.removeRelationship(rel.getName());
- rel.setName(newName);
- entity.addRelationship(rel);
}
/**
@@ -253,8 +256,7 @@ public class ProjectUtil {
att.setDbAttributePath(null);
}
}
- }
- else {
+ } else {
DbAttribute dbAtt = att.getDbAttribute();
if (dbAtt != null) {
if (dbEnt.getAttribute(dbAtt.getName()) != dbAtt) {
@@ -286,7 +288,7 @@ public class ProjectUtil {
* objects, each <code>DbRelationship</code> object have following <code>DbRelationship</code>
* object as a target, last component is <code>DbAttribute</code>
*
- * @param currentEnt current db entity
+ * @param currentEnt current db entity
* @param dbAttributePath path to check
* @return if path is correct return true
*/
@@ -433,7 +435,7 @@ public class ProjectUtil {
public static Collection<ObjEntity> getCollectionOfChildren(ObjEntity objEntity) {
Collection<ObjEntity> objEntities = new ArrayList<>();
- for (ObjEntity child: objEntity.getDataMap().getObjEntities()) {
+ for (ObjEntity child : objEntity.getDataMap().getObjEntities()) {
if (child.isSubentityOf(objEntity)) {
objEntities.add(child);
}
@@ -460,17 +462,17 @@ public class ProjectUtil {
}
public static Collection<ObjAttribute> findObjAttributesForDbRelationship(ProjectController mediator,
- DbRelationship relationship) {
+ DbRelationship relationship) {
DataChannelDescriptor domain = (DataChannelDescriptor) mediator.getProject().getRootNode();
List<ObjAttribute> attributes = new ArrayList<>();
if (domain != null) {
for (DataMap map : domain.getDataMaps()) {
for (ObjEntity entity : map.getObjEntities()) {
for (ObjAttribute objAttribute : entity.getAttributes()) {
- if(objAttribute.isFlattened()) {
+ if (objAttribute.isFlattened()) {
objAttribute.getDbPathIterator().forEachRemaining(entry -> {
- if(entry instanceof DbRelationship) {
- if(entry.equals(relationship)) {
+ if (entry instanceof DbRelationship) {
+ if (entry.equals(relationship)) {
attributes.add(objAttribute);
}
}