View Javadoc

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   * Course entity object
29   * @author Sebastian Roekens
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  	 * Convenience method to add this course to a category. 
65  	 * Updates category list of course object and course list of category object.
66  	 * @param category the category this course should be added to
67  	 * @return Success of operation
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  	 * Convenience method for adding course to a number of categories
90  	 * 
91  	 * @param categories List of categories course is to add to
92  	 */
93  	public void addToCagetories(List<Category> categories){
94  		for (Category category : categories){
95  			addToCategory(category);
96  		}
97  	}
98  	
99  	/**
100 	 * Convenience method to add this course as a workgroup to course
101 	 * @param course parent course
102 	 * @return success of operation
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 }