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.Column;
8 import javax.persistence.Entity;
9 import javax.persistence.EnumType;
10 import javax.persistence.Enumerated;
11 import javax.persistence.Inheritance;
12 import javax.persistence.InheritanceType;
13 import javax.persistence.JoinColumn;
14 import javax.persistence.ManyToOne;
15 import javax.persistence.NamedQueries;
16 import javax.persistence.NamedQuery;
17 import javax.persistence.Table;
18 import javax.xml.bind.annotation.XmlElement;
19 import javax.xml.bind.annotation.XmlIDREF;
20 import javax.xml.bind.annotation.XmlRootElement;
21 import javax.xml.bind.annotation.XmlType;
22
23 import de.campussource.cse.cdmm.Constants;
24
25
26
27
28
29
30
31 @Entity(name = Constants.ROLE)
32 @Table(name = Constants.TABLENAME_ROLE)
33 @Inheritance(strategy = InheritanceType.JOINED)
34 @NamedQueries(value = { @NamedQuery(name = "Role.findByAccountAndCourse", query = "select r from role r where r.account.id=:accountId and r.course.id = :courseId") })
35 @XmlRootElement(namespace = Constants.NAMESPACE_DATATYPES)
36 @XmlType(name = Constants.ROLE_TYPE, propOrder = { Constants.TYPE, Constants.ACCOUNT, Constants.COURSE }, namespace = Constants.NAMESPACE_DATATYPES)
37 public class Role extends de.campussource.cse.cdmm.domain.Entity {
38
39 @Column(name = Constants.COLUMNNAME_ROLE_TYPE, nullable = false, insertable = true, updatable = true)
40 @Enumerated(EnumType.ORDINAL)
41 private RoleType type;
42
43 @ManyToOne(optional = false, cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
44 @JoinColumn(name = Constants.COLUMNNAME_ACCOUNT_ID, nullable = false)
45 private Account account;
46
47 @ManyToOne(optional = false, cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
48 @JoinColumn(name = Constants.COLUMNNAME_COURSE_ID, nullable = false)
49 private Course course;
50
51 public static final String FIND_BY_ACCOUNT_AND_COURSE = "Role.findByAccountAndCourse";
52
53 public Role() {
54 }
55
56
57
58
59
60
61
62
63
64
65
66
67 public boolean addToCourseAndAccount(Course course, Account account) {
68 if ((course == null) || (account == null)) {
69 return false;
70 }
71 List<Role> courseRoles = course.getRoles();
72 if (courseRoles == null) {
73 courseRoles = new ArrayList<Role>();
74 }
75 List<Role> accountRoles = account.getRoles();
76 if (accountRoles == null) {
77 accountRoles = new ArrayList<Role>();
78 }
79 this.setAccount(account);
80 this.setCourse(course);
81 accountRoles.add(this);
82 courseRoles.add(this);
83 account.setRoles(accountRoles);
84 course.setRoles(courseRoles);
85 return true;
86 }
87
88 public Role(Long id, RoleType type) {
89 setId(id);
90 this.type = type;
91 }
92
93 public Role(Long id) {
94 setId(id);
95 }
96
97 @XmlElement(name = Constants.TYPE)
98 public RoleType getType() {
99 return type;
100 }
101
102 public void setType(RoleType type) {
103 this.type = type;
104 }
105
106 @XmlElement(name = Constants.ACCOUNT_ID, required = true)
107 @XmlIDREF
108 public Account getAccount() {
109 return account;
110 }
111
112 public void setAccount(Account account) {
113 this.account = account;
114 }
115
116 @XmlElement(name = Constants.COURSE_ID, required = true)
117 @XmlIDREF
118 public Course getCourse() {
119 return course;
120 }
121
122 public void setCourse(Course course) {
123 this.course = course;
124 }
125 }