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.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   * Role entity object
27   * 
28   * @author Sebastian Roekens
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  	 * Convenience method to add role to a course and an account. Role is added
58  	 * to roles list of course and account object, and course and account are
59  	 * added to role object
60  	 * 
61  	 * @param course
62  	 *            target course role is associated to
63  	 * @param account
64  	 *            target account role is associated to
65  	 * @return success of operation
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 }