1 package de.campussource.cse.cdmm.domain;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.persistence.CascadeType;
7 import javax.persistence.Entity;
8 import javax.persistence.Inheritance;
9 import javax.persistence.InheritanceType;
10 import javax.persistence.JoinColumn;
11 import javax.persistence.JoinTable;
12 import javax.persistence.ManyToMany;
13 import javax.persistence.ManyToOne;
14 import javax.persistence.OneToMany;
15 import javax.persistence.Table;
16 import javax.xml.bind.annotation.XmlElement;
17 import javax.xml.bind.annotation.XmlElementWrapper;
18 import javax.xml.bind.annotation.XmlIDREF;
19 import javax.xml.bind.annotation.XmlRootElement;
20 import javax.xml.bind.annotation.XmlType;
21
22 import org.apache.commons.lang.builder.ToStringBuilder;
23 import org.apache.commons.lang.builder.ToStringStyle;
24
25 import de.campussource.cse.cdmm.Constants;
26
27
28
29
30
31
32 @Entity(name=Constants.COURSE)
33 @Table(name = Constants.TABLENAME_COURSE)
34 @Inheritance(strategy=InheritanceType.JOINED)
35 @XmlRootElement(namespace=Constants.NAMESPACE_DATATYPES)
36 @XmlType(name=Constants.COURSE_TYPE, propOrder={ Constants.CATEGORIES, Constants.PARENT, Constants.WORKGROUPS, Constants.ROLES}, namespace=Constants.NAMESPACE_DATATYPES)
37 public class Course extends de.campussource.cse.cdmm.domain.Entity{
38
39 @ManyToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
40 @JoinTable(name=Constants.COLUMNNAME_PARENT_ID)
41 private Course parent;
42
43 @OneToMany(mappedBy=Constants.PARENT, cascade=CascadeType.REMOVE)
44 private List<Course> workgroups;
45
46 @ManyToMany(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
47 @JoinTable(
48 name = Constants.TABLENAME_COURSE2CATEGORY,
49 joinColumns={@JoinColumn(name=Constants.COLUMNNAME_CATEGORY_ID)},
50 inverseJoinColumns={@JoinColumn(name=Constants.COLUMNNAME_COURSE_ID)})
51 private List<Category> categories;
52
53 @OneToMany(mappedBy=Constants.COURSE, cascade = {CascadeType.REMOVE})
54 private List<Role> roles;
55
56 public Course(){
57 }
58
59 public Course(Long id){
60 setId(id);
61 }
62
63
64
65
66
67
68
69 public boolean addToCategory(Category category){
70 if (category == null){
71 return false;
72 }
73 List<Course> courses = category.getCourses();
74 if (courses==null){
75 courses = new ArrayList<Course>();
76 }
77 List<Category> categories = this.getCategories();
78 if (categories == null){
79 categories = new ArrayList<Category>();
80 }
81 categories.add(category);
82 this.setCategories(categories);
83 courses.add(this);
84 category.setCourses(courses);
85 return true;
86 }
87
88
89
90
91
92
93 public void addToCagetories(List<Category> categories){
94 for (Category category : categories){
95 addToCategory(category);
96 }
97 }
98
99
100
101
102
103
104 public boolean addAsWorkgroupTo(Course course){
105 if (course==null||(course.getParent()!=null)){
106 return false;
107 }
108 List<Course> workgroups = course.getWorkgroups();
109 if (workgroups == null){
110 workgroups = new ArrayList<Course>();
111 }
112 workgroups.add(this);
113 course.setWorkgroups(workgroups);
114 this.setParent(course);
115 return true;
116 }
117
118 public String toString() {
119 return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE).toString();
120 }
121
122 @XmlElement(name=Constants.PARENT)
123 @XmlIDREF
124 public Course getParent() {
125 return parent;
126 }
127
128 public void setParent(Course parent) {
129 this.parent = parent;
130 }
131
132 @XmlElementWrapper(name=Constants.WORKGROUPS)
133 @XmlElement(name=Constants.WORKGROUP)
134 public List<Course> getWorkgroups() {
135 return workgroups;
136 }
137
138 public void setWorkgroups(List<Course> workgroups) {
139 this.workgroups = workgroups;
140 }
141
142 @XmlElementWrapper(name=Constants.CATEGORIES)
143 @XmlElement(name=Constants.CATEGORY)
144 @XmlIDREF
145 public List<Category> getCategories() {
146 return categories;
147 }
148
149 public void setCategories(List<Category> categories) {
150 this.categories = categories;
151 }
152
153 @XmlElementWrapper(name=Constants.ROLES)
154 @XmlElement(name=Constants.ROLE)
155 public List<Role> getRoles() {
156 return roles;
157 }
158
159 public void setRoles(List<Role> roles) {
160 this.roles = roles;
161 }
162
163 }