From: <ro...@us...> - 2009-03-09 16:22:13
|
Revision: 67 http://cse-ip.svn.sourceforge.net/cse-ip/?rev=67&view=rev Author: roekens Date: 2009-03-09 16:22:06 +0000 (Mon, 09 Mar 2009) Log Message: ----------- - introduced cascading for categories - several bugfixes - more tests Modified Paths: -------------- cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/Constants.java cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Account.java cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Category.java cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/CategoryDaoTest.java cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/TestXmlConversion.java Modified: cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/Constants.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/Constants.java 2009-03-09 13:13:44 UTC (rev 66) +++ cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/Constants.java 2009-03-09 16:22:06 UTC (rev 67) @@ -36,6 +36,7 @@ //entity property names public static final String PROPERTY_ATTRIBUTES = "attributes"; public static final String PROPERTY_PARENTS = "parents"; + public static final String PROPERTY_PARENT = "parent"; public static final String PROPERTY_CHILDREN = "children"; public static final String PROPERTY_COURSES = "courses"; public static final String PROPERTY_NAME = "name"; @@ -49,11 +50,11 @@ public static final String TABLENAME_ENTITY = "CDMM_ENTITY"; public static final String TABLENAME_GROUP = "CDMM_GROUP"; public static final String TABLENAME_ROLE = "CDMM_ROLE"; - public static final String TABLENAME_CATEGORY2CATEGORY = "CDMM_CAT2CAT"; public static final String TABLENAME_GROUP2ACCOUNT = "CDMM_GROUP2ACCOUNT"; public static final String TABLENAME_COURSE2CATEGORY = "CDMM_COURSE2CAT"; //column names + public static final String COLUMNNAME_CATEGORY2CATEGORY = "PARENT_CAT_ID"; public static final String COLUMNNAME_ROLE_TYPE="ROLE_TYPE"; public static final String COLUMNNAME_CHILD_ID="CHILD_ID"; public static final String COLUMNNAME_PARENT_ID="PARENT_ID"; Modified: cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Account.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Account.java 2009-03-09 13:13:44 UTC (rev 66) +++ cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Account.java 2009-03-09 16:22:06 UTC (rev 67) @@ -1,5 +1,6 @@ package de.campussource.cse.cdmm.domain; +import java.util.ArrayList; import java.util.List; import javax.persistence.Entity; @@ -22,7 +23,7 @@ @Table(name = Constants.TABLENAME_ACCOUNT) @Inheritance(strategy=InheritanceType.JOINED) @XmlRootElement(namespace=Constants.NAMESPACE_DATATYPES) -@XmlType(propOrder={ Constants.GROUPS, Constants.ROLES}, namespace=Constants.NAMESPACE_DATATYPES) +@XmlType(propOrder={Constants.GROUPS, Constants.ROLES}, namespace=Constants.NAMESPACE_DATATYPES) public class Account extends de.campussource.cse.cdmm.domain.Entity{ @OneToMany(mappedBy=Constants.ACCOUNT) @@ -48,6 +49,54 @@ this.roles = roles; } + public boolean addToGroup(Group group){ + if(group==null){ + return false; + } + List<Group> groups = this.getGroups(); + if (groups==null){ + groups = new ArrayList<Group>(); + } + if (groups.contains(group)||group.getMembers().contains(this)){ + return false; + } + groups.add(group); + setGroups(groups); + List<Account> accounts = group.getMembers(); + if (accounts == null){ + accounts = new ArrayList<Account>(); + } + accounts.add(this); + group.setMembers(accounts); + return true; + } + + public boolean removeFromGroup(Group group){ + if (group == null){ + return false; + } + List<Group> groups = this.getGroups(); + if (!groups.contains(group)||!group.getMembers().contains(this)){ + return false; + } + groups.remove(group); + setGroups(groups); + List<Account> accounts = group.getMembers(); + accounts.remove(this); + group.setMembers(accounts); + return true; + } + + public boolean isInGroup(Group group){ + if (group == null){ + return false; + } + if (group.getMembers()==null){ + return false; + } + return (group.getMembers().contains(this)); + } + @XmlElementWrapper(name=Constants.ROLES) @XmlElement(name=Constants.ROLE) public List<Role> getRoles() { Modified: cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Category.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Category.java 2009-03-09 13:13:44 UTC (rev 66) +++ cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Category.java 2009-03-09 16:22:06 UTC (rev 67) @@ -2,12 +2,14 @@ import java.util.List; +import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; -import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; import javax.persistence.Table; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; @@ -22,17 +24,14 @@ @Inheritance(strategy=InheritanceType.JOINED) @Table(name = Constants.TABLENAME_CATEGORY) @XmlRootElement(namespace=Constants.NAMESPACE_DATATYPES) -@XmlType(propOrder={Constants.PROPERTY_PARENTS, Constants.PROPERTY_CHILDREN, Constants.PROPERTY_COURSES}, namespace=Constants.NAMESPACE_DATATYPES) +@XmlType(propOrder={Constants.PROPERTY_PARENT, Constants.PROPERTY_CHILDREN, Constants.PROPERTY_COURSES}, namespace=Constants.NAMESPACE_DATATYPES) public class Category extends de.campussource.cse.cdmm.domain.Entity { - @ManyToMany - @JoinTable( - name = Constants.TABLENAME_CATEGORY2CATEGORY, - joinColumns={@JoinColumn(name=Constants.COLUMNNAME_CHILD_ID)}, - inverseJoinColumns={@JoinColumn(name=Constants.COLUMNNAME_PARENT_ID)}) - private List<Category> parents; + @ManyToOne(cascade={CascadeType.REMOVE}) + @JoinTable(name = Constants.COLUMNNAME_CATEGORY2CATEGORY) + private Category parent; - @ManyToMany(mappedBy=Constants.PARENTS) + @OneToMany(mappedBy=Constants.PARENT, cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) private List<Category> children; @ManyToMany(mappedBy=Constants.CATEGORIES) @@ -45,14 +44,14 @@ setId(id); } - public Category(Long id, List<Category> children, List<Course> courses, List<Category> parents){ + public Category(Long id, List<Category> children, List<Course> courses, Category parent){ setId(id); this.children = children; this.courses = courses; - this.parents = parents; + this.parent = parent; } - - + + @XmlElementWrapper(name=Constants.CATEGORIES) @XmlElement(name=Constants.CATEGORY) public List<Category> getChildren() { @@ -74,20 +73,19 @@ this.courses = courses; } - @XmlElementWrapper(name=Constants.PARENTS) @XmlElement(name=Constants.PARENT) @XmlIDREF - public List<Category> getParents() { - return parents; + public Category getParent() { + return parent; } - public void setParents(List<Category> parents) { - this.parents = parents; + public void setParent(Category parent) { + this.parent = parent; } @XmlTransient public boolean isRoot(){ - return ((parents==null)||parents.size()==0); + return (parent==null); } } Modified: cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/CategoryDaoTest.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/CategoryDaoTest.java 2009-03-09 13:13:44 UTC (rev 66) +++ cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/CategoryDaoTest.java 2009-03-09 16:22:06 UTC (rev 67) @@ -17,10 +17,12 @@ private CategoryDao dao; private Category category; + private Category parentCategory; @Before public void setUp() { category = newCategory(); + parentCategory = newCategory(); dao = new CategoryDao(); autowireByType(dao); txBegin(); @@ -54,6 +56,17 @@ } @Test + public void testCascading(){ + category.setParent(parentCategory); + dao.persist(category); + assertNotNull(category.getId()); + assertNotNull(parentCategory.getId()); + dao.remove(parentCategory); + assertNull(dao.find(parentCategory.getId())); + assertNull(dao.find(category.getId())); + } + + @Test public void testDoNotFindById() { Category foundCategory = dao.find(0L); assertNull(foundCategory); Modified: cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/TestXmlConversion.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/TestXmlConversion.java 2009-03-09 13:13:44 UTC (rev 66) +++ cse-ip/trunk/sandbox/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/TestXmlConversion.java 2009-03-09 16:22:06 UTC (rev 67) @@ -350,17 +350,17 @@ Category parentCategory = new Category(createUniqueId()); Category childCategory = new Category(createUniqueId()); - List<Category> parentCategoryList = new ArrayList<Category>(); - parentCategoryList.add(parentCategory); List<Category> childCategoryList = new ArrayList<Category>(); childCategoryList.add(childCategory); parentCategory.setChildren(childCategoryList); - childCategory.setParents(parentCategoryList); + childCategory.setParent(parentCategory); //create Course with one child workgroup + List<Category> parentCategoryList = new ArrayList<Category>(); + parentCategoryList.add(parentCategory); Course course = new Course(createUniqueId()); course.setCategories(parentCategoryList); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |