You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by to...@apache.org on 2008/01/20 00:06:51 UTC
svn commit: r613476 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src:
main/java/org/apache/cayenne/merge/ test/java/org/apache/cayenne/merge/
Author: torehalset
Date: Sat Jan 19 15:06:50 2008
New Revision: 613476
URL: http://svn.apache.org/viewvc?rev=613476&view=rev
Log:
CAY-885: merge changes between model and db
* drop ObjRelationship
* drop reverse (Db/Obj)relationships
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/AbstractToModelToken.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropColumnToModel.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropRelationshipToModel.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/DropColumnToModelTest.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/AbstractToModelToken.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/AbstractToModelToken.java?rev=613476&r1=613475&r2=613476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/AbstractToModelToken.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/AbstractToModelToken.java Sat Jan 19 15:06:50 2008
@@ -18,6 +18,15 @@
****************************************************************/
package org.apache.cayenne.merge;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.MappingNamespace;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.util.EntityMergeSupport;
+
/**
* Common abstract superclass for all {@link MergerToken}s going from the database to the
* model.
@@ -28,6 +37,24 @@
public final MergeDirection getDirection() {
return MergeDirection.TO_MODEL;
+ }
+
+ protected void synchronizeWithObjEntity(DbEntity entity) {
+ for (ObjEntity objEntity : objEntitiesMappedToDbEntity(entity)) {
+ new EntityMergeSupport(objEntity.getDataMap())
+ .synchronizeWithDbEntity(objEntity);
+ }
+ }
+
+ protected Collection<ObjEntity> objEntitiesMappedToDbEntity(DbEntity entity) {
+ Set<ObjEntity> objEntities = new HashSet<ObjEntity>();
+ MappingNamespace mns = entity.getDataMap().getNamespace();
+ for (ObjEntity objEntity : mns.getObjEntities()) {
+ if (objEntity.getDbEntity().equals(entity)) {
+ objEntities.add(objEntity);
+ }
+ }
+ return objEntities;
}
@Override
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropColumnToModel.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropColumnToModel.java?rev=613476&r1=613475&r2=613476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropColumnToModel.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropColumnToModel.java Sat Jan 19 15:06:50 2008
@@ -44,12 +44,10 @@
public void execute(MergerContext mergerContext) {
// remove ObjAttribute mapped to same column
- for (ObjEntity objEntity : entity.getDataMap().getObjEntities()) {
- if (objEntity.getDbEntity().equals(entity)) {
- ObjAttribute objAttribute = objEntity.getAttributeForDbAttribute(column);
- if (objAttribute != null) {
- objEntity.removeAttribute(objAttribute.getName());
- }
+ for (ObjEntity objEntity : objEntitiesMappedToDbEntity(entity)) {
+ ObjAttribute objAttribute = objEntity.getAttributeForDbAttribute(column);
+ if (objAttribute != null) {
+ objEntity.removeAttribute(objAttribute.getName());
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropRelationshipToModel.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropRelationshipToModel.java?rev=613476&r1=613475&r2=613476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropRelationshipToModel.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropRelationshipToModel.java Sat Jan 19 15:06:50 2008
@@ -20,6 +20,8 @@
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.ObjRelationship;
public class DropRelationshipToModel extends AbstractToModelToken {
@@ -36,8 +38,33 @@
}
public void execute(MergerContext mergerContext) {
- // TODO: is this correct?
- entity.removeRelationship(rel.getName());
+ remove(rel, true);
+ }
+
+ private void remove(DbRelationship rel, boolean reverse) {
+ if (rel == null) {
+ return;
+ }
+ if (reverse) {
+ remove(rel.getReverseRelationship(), false);
+ }
+
+ DbEntity dbEntity = (DbEntity) rel.getSourceEntity();
+ for (ObjEntity objEntity : objEntitiesMappedToDbEntity(dbEntity)) {
+ remove(objEntity.getRelationshipForDbRelationship(rel), true);
+ }
+
+ rel.getSourceEntity().removeRelationship(rel.getName());
+ }
+
+ private void remove(ObjRelationship rel, boolean reverse) {
+ if (rel == null) {
+ return;
+ }
+ if (reverse) {
+ remove(rel.getReverseRelationship(), false);
+ }
+ rel.getSourceEntity().removeRelationship(rel.getName());
}
public String getTokenName() {
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/DropColumnToModelTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/DropColumnToModelTest.java?rev=613476&r1=613475&r2=613476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/DropColumnToModelTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/DropColumnToModelTest.java Sat Jan 19 15:06:50 2008
@@ -28,6 +28,7 @@
import org.apache.cayenne.map.DbRelationship;
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.ObjRelationship;
public class DropColumnToModelTest extends MergeCase {
@@ -136,10 +137,13 @@
rel2To1.setToMany(false);
rel2To1.addJoin(new DbJoin(rel2To1, e2col2.getName(), e1col1.getName()));
dbEntity2.addRelationship(rel2To1);
+ assertSame(rel1To2, rel2To1.getReverseRelationship());
+ assertSame(rel2To1, rel1To2.getReverseRelationship());
assertTokensAndExecute(node, map, 4, 0);
assertTokensAndExecute(node, map, 0, 0);
+ // create ObjEntities
ObjEntity objEntity1 = new ObjEntity("NewTable");
objEntity1.setDbEntity(dbEntity1);
ObjAttribute oatr1 = new ObjAttribute("name");
@@ -147,16 +151,33 @@
oatr1.setType("java.lang.String");
objEntity1.addAttribute(oatr1);
map.addObjEntity(objEntity1);
-
ObjEntity objEntity2 = new ObjEntity("NewTable2");
objEntity2.setDbEntity(dbEntity1);
ObjAttribute o2a1 = new ObjAttribute("name");
o2a1.setDbAttributePath(e1col2.getName());
o2a1.setType("java.lang.String");
objEntity2.addAttribute(o2a1);
- map.addObjEntity(objEntity1);
+ map.addObjEntity(objEntity2);
+
+ // create ObjRelationships
+ assertEquals(0, objEntity1.getRelationships().size());
+ assertEquals(0, objEntity2.getRelationships().size());
+ ObjRelationship objRel1To2 = new ObjRelationship("objRel1To2");
+ objRel1To2.addDbRelationship(rel1To2);
+ objRel1To2.setSourceEntity(objEntity1);
+ objRel1To2.setTargetEntity(objEntity2);
+ objEntity1.addRelationship(objRel1To2);
+ ObjRelationship objRel2To1 = new ObjRelationship("objRel2To1");
+ objRel2To1.addDbRelationship(rel2To1);
+ objRel2To1.setSourceEntity(objEntity2);
+ objRel2To1.setTargetEntity(objEntity1);
+ objEntity2.addRelationship(objRel2To1);
+ assertEquals(1, objEntity1.getRelationships().size());
+ assertEquals(1, objEntity2.getRelationships().size());
+ assertSame(objRel1To2, objRel2To1.getReverseRelationship());
+ assertSame(objRel2To1, objRel1To2.getReverseRelationship());
- // remove relationship and fk from model, merge to db and add to model
+ // remove relationship and fk from model, merge to db and read to model
dbEntity2.removeRelationship(rel2To1.getName());
dbEntity1.removeRelationship(rel1To2.getName());
dbEntity2.removeAttribute(e2col2.getName());
@@ -182,12 +203,13 @@
assertTrue(token1 instanceof DropRelationshipToModel);
execute(token1);
execute(token0);
- assertNull(dbEntity2.getAttribute(e2col2.getName()));
- // TODO: assertTrue(dbEntity1.getRelationships().isEmpty());
- assertTrue(dbEntity2.getRelationships().isEmpty());
- // assertNull(objEntity.getAttribute(oatr1.getName()));
- // TODO: test that relationship is gone
+ // check after merging
+ assertNull(dbEntity2.getAttribute(e2col2.getName()));
+ assertEquals(0, dbEntity1.getRelationships().size());
+ assertEquals(0, dbEntity2.getRelationships().size());
+ assertEquals(0, objEntity1.getRelationships().size());
+ assertEquals(0, objEntity2.getRelationships().size());
// clear up
DataContext ctxt = createDataContext();