|
From: <ro...@us...> - 2009-04-29 09:32:59
|
Revision: 192
http://cse-ip.svn.sourceforge.net/cse-ip/?rev=192&view=rev
Author: roekens
Date: 2009-04-29 09:32:50 +0000 (Wed, 29 Apr 2009)
Log Message:
-----------
fix for AddReferenceVisitor bug concerning roles
-> now Roles are handled correct by creating an AddReferenceVisitor with the persistentObject, the associated object and the association type
Modified Paths:
--------------
trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/ModelMergerBean.java
trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/AddReferenceVisitor.java
trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/ModelMergerTest.java
trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/domain/AddReferenceVisitorTest.java
Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/ModelMergerBean.java
===================================================================
--- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/ModelMergerBean.java 2009-04-29 08:23:47 UTC (rev 191)
+++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/ModelMergerBean.java 2009-04-29 09:32:50 UTC (rev 192)
@@ -3,7 +3,6 @@
import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Stateless;
-import javax.persistence.PersistenceContext;
import de.campussource.cse.cdmm.dao.EntityDao;
import de.campussource.cse.cdmm.domain.AddReferenceVisitor;
@@ -27,6 +26,7 @@
private EventBuilder eventBuilder;
+ @SuppressWarnings("unchecked")
public <E extends Entity> E merge(E input) {
E entity = (E) dao.find(input.getClass(), input.getId());
mergeEntities(input, entity);
@@ -85,7 +85,7 @@
entity.setDate(input.getDate());
}
// TODO Is it possible that the reference allready exists?
- loaded.accept(new AddReferenceVisitor(entity, type));
+ loaded.accept(new AddReferenceVisitor(entity, target, type));
// add to reference found list
}
Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/AddReferenceVisitor.java
===================================================================
--- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/AddReferenceVisitor.java 2009-04-29 08:23:47 UTC (rev 191)
+++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/AddReferenceVisitor.java 2009-04-29 09:32:50 UTC (rev 192)
@@ -10,7 +10,15 @@
private ReferenceType type;
- private Entity target;
+ /**
+ * represents associated target entity in persistence
+ */
+ private Entity persistentTarget;
+
+ /**
+ * represents associated target entity in given object structure
+ */
+ private Entity associatedTarget;
/**
*
@@ -19,19 +27,23 @@
* @param type
* of reference that will be added
*/
- public AddReferenceVisitor(Entity target, ReferenceType type) {
+ public AddReferenceVisitor(Entity persistentTarget, Entity associatedTarget, ReferenceType type) {
this.type = type;
- this.target = target;
+ this.persistentTarget = persistentTarget;
+ this.associatedTarget = associatedTarget;
}
@Override
public void visit(Account account) {
switch (type) {
case GROUP:
- account.addToGroup((Group) target);
+ account.addToGroup((Group) persistentTarget);
break;
case ROLE:
- account.addRole((Role) target);
+ ((Role)persistentTarget).setAccount(((Role)associatedTarget).getAccount());
+ ((Role)persistentTarget).setCourse(((Role)associatedTarget).getCourse());
+ ((Role)persistentTarget).setType(((Role)associatedTarget).getType());
+ account.addRole((Role) persistentTarget);
break;
default:
throw new IllegalStateException("Reference type doesn't apply to entity.");
@@ -42,13 +54,13 @@
public void visit(Category category) {
switch (type) {
case CATEGORY:
- category.addToParentCategory((Category) target);
+ category.addToParentCategory((Category) persistentTarget);
break;
case COURSE:
- ((Course)target).addToCategory(category);
+ ((Course)persistentTarget).addToCategory(category);
break;
case PARENT:
- category.setParent((Category) target);
+ category.setParent((Category) persistentTarget);
break;
default:
throw new IllegalStateException("Reference type doesn't apply to entity.");
@@ -59,16 +71,19 @@
public void visit(Course course) {
switch (type) {
case CATEGORY:
- course.addToCategory((Category) target);
+ course.addToCategory((Category) persistentTarget);
break;
case WORKGROUP:
- ((Course) target).addAsWorkgroupTo(course);
+ ((Course) persistentTarget).addAsWorkgroupTo(course);
break;
case PARENT:
- course.setParent((Course) target);
+ course.setParent((Course) persistentTarget);
break;
case ROLE:
- course.addRole((Role) target);
+ ((Role)persistentTarget).setAccount(((Role)associatedTarget).getAccount());
+ ((Role)persistentTarget).setCourse(((Role)associatedTarget).getCourse());
+ ((Role)persistentTarget).setType(((Role)associatedTarget).getType());
+ course.addRole((Role) persistentTarget);
break;
default:
throw new IllegalStateException("Reference type doesn't apply to entity.");
@@ -79,7 +94,7 @@
public void visit(Group group) {
switch (type){
case MEMBER:
- ((Account)target).addToGroup(group);
+ ((Account)persistentTarget).addToGroup(group);
break;
default:
throw new IllegalStateException("Reference type doesn't apply to entity.");
@@ -90,10 +105,10 @@
public void visit(Role role) {
switch (type){
case ACCOUNT:
- ((Account)target).addRole(role);
+ ((Account)persistentTarget).addRole(role);
break;
case COURSE:
- ((Course)target).addRole(role);
+ ((Course)persistentTarget).addRole(role);
break;
default:
throw new IllegalStateException("Reference type doesn't apply to entity.");
Modified: trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/ModelMergerTest.java
===================================================================
--- trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/ModelMergerTest.java 2009-04-29 08:23:47 UTC (rev 191)
+++ trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/ModelMergerTest.java 2009-04-29 09:32:50 UTC (rev 192)
@@ -64,10 +64,9 @@
assertEquals(State.KNOWN, entity.getWorkgroups().get(0).getState());
// check role
- //FIXME test broken due to incorrect role association updating
-// assertFalse(entity.getRoles().isEmpty());
-// assertEquals(ROLE_ID, entity.getRoles().get(0).getId());
-// assertEquals(State.KNOWN, entity.getRoles().get(0).getState());
+ assertFalse(entity.getRoles().isEmpty());
+ assertEquals(ROLE_ID, entity.getRoles().get(0).getId());
+ assertEquals(State.KNOWN, entity.getRoles().get(0).getState());
}
@Test
@@ -94,10 +93,9 @@
assertEquals(State.EXISTS, entity.getWorkgroups().get(0).getState());
// check role
- //FIXME test broken due to incorrect role association updating
-// assertFalse(entity.getRoles().isEmpty());
-// assertEquals(ROLE_ID, entity.getRoles().get(0).getId());
-// assertEquals(State.EXISTS, entity.getRoles().get(0).getState());
+ assertFalse(entity.getRoles().isEmpty());
+ assertEquals(ROLE_ID, entity.getRoles().get(0).getId());
+ assertEquals(State.EXISTS, entity.getRoles().get(0).getState());
}
@Test
@@ -125,9 +123,9 @@
// check role
//FIXME test broken due to incorrect role association updating
-// assertFalse(entity.getRoles().isEmpty());
-// assertEquals(ROLE_ID, entity.getRoles().get(0).getId());
-// assertEquals(State.KNOWN, entity.getRoles().get(0).getState());
+ assertFalse(entity.getRoles().isEmpty());
+ assertEquals(ROLE_ID, entity.getRoles().get(0).getId());
+ assertEquals(State.KNOWN, entity.getRoles().get(0).getState());
}
/**
Modified: trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/domain/AddReferenceVisitorTest.java
===================================================================
--- trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/domain/AddReferenceVisitorTest.java 2009-04-29 08:23:47 UTC (rev 191)
+++ trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/domain/AddReferenceVisitorTest.java 2009-04-29 09:32:50 UTC (rev 192)
@@ -16,7 +16,7 @@
public void testAddCategoryToCourse() {
Course course = new Course();
Category category = new Category();
- course.accept(new AddReferenceVisitor(category, ReferenceType.CATEGORY));
+ course.accept(new AddReferenceVisitor(category, category, ReferenceType.CATEGORY));
assertFalse(course.getCategories().isEmpty());
assertEquals(category, course.getCategories().get(0));
}
@@ -25,7 +25,7 @@
public void testAddWorkgroupToCourse() {
Course course = new Course();
Course workgroup = new Course();
- course.accept(new AddReferenceVisitor(workgroup, ReferenceType.WORKGROUP));
+ course.accept(new AddReferenceVisitor(workgroup, workgroup, ReferenceType.WORKGROUP));
assertFalse(course.getWorkgroups().isEmpty());
assertEquals(workgroup, course.getWorkgroups().get(0));
}
@@ -38,7 +38,7 @@
role.setCourse(course);
role.setAccount(account);
- course.accept(new AddReferenceVisitor(role, ReferenceType.ROLE));
+ course.accept(new AddReferenceVisitor(role, role, ReferenceType.ROLE));
assertFalse(course.getRoles().isEmpty());
assertEquals(role, course.getRoles().get(0));
}
@@ -47,7 +47,7 @@
public void testAddParentToCourse() {
Course course = new Course();
Course parent = new Course();
- course.accept(new AddReferenceVisitor(parent, ReferenceType.PARENT));
+ course.accept(new AddReferenceVisitor(parent, parent, ReferenceType.PARENT));
assertNotNull(course.getParent());
assertEquals(parent, course.getParent());
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|