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. |