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 <oleg.khodokev...@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); } }