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.OneToMany;
14 import javax.persistence.Table;
15 import javax.xml.bind.annotation.XmlElement;
16 import javax.xml.bind.annotation.XmlElementWrapper;
17 import javax.xml.bind.annotation.XmlIDREF;
18 import javax.xml.bind.annotation.XmlRootElement;
19 import javax.xml.bind.annotation.XmlType;
20
21 import org.apache.commons.lang.builder.ToStringBuilder;
22 import org.apache.commons.lang.builder.ToStringStyle;
23
24 import de.campussource.cse.cdmm.Constants;
25
26
27
28
29
30
31 @Entity(name=Constants.ACCOUNT)
32 @Table(name = Constants.TABLENAME_ACCOUNT)
33 @Inheritance(strategy=InheritanceType.JOINED)
34 @XmlRootElement(namespace=Constants.NAMESPACE_DATATYPES)
35 @XmlType(name=Constants.ACCOUNT_TYPE, propOrder={Constants.GROUPS, Constants.ROLES}, namespace=Constants.NAMESPACE_DATATYPES)
36 public class Account extends de.campussource.cse.cdmm.domain.Entity{
37
38 @OneToMany(mappedBy=Constants.ACCOUNT, cascade=CascadeType.REMOVE)
39 private List<Role> roles;
40
41 @ManyToMany
42 @JoinTable(
43 name = Constants.TABLENAME_GROUP2ACCOUNT,
44 joinColumns={@JoinColumn(name=Constants.COLUMNNAME_ACCOUNT_ID)},
45 inverseJoinColumns={@JoinColumn(name=Constants.COLUMNNAME_GROUP_ID)})
46 private List<Group> groups;
47
48 public Account(){
49 }
50
51 public Account(Long id){
52 setId(id);
53 }
54
55
56
57
58
59
60 public boolean addToGroup(Group group){
61 if(group==null){
62 return false;
63 }
64 List<Group> groups = this.getGroups();
65 if (groups==null){
66 groups = new ArrayList<Group>();
67 }
68 if (groups.contains(group)||(group.getMembers()!=null && group.getMembers().contains(this))){
69 return false;
70 }
71 groups.add(group);
72 setGroups(groups);
73 List<Account> accounts = group.getMembers();
74 if (accounts == null){
75 accounts = new ArrayList<Account>();
76 }
77 accounts.add(this);
78 group.setMembers(accounts);
79 return true;
80 }
81
82
83
84
85
86
87 public boolean removeFromGroup(Group group){
88 if (group == null){
89 return false;
90 }
91 List<Group> groups = this.getGroups();
92 if ((!(groups==null) && !groups.contains(group))||!group.getMembers().contains(this)){
93 return false;
94 }
95 groups.remove(group);
96 setGroups(groups);
97 List<Account> accounts = group.getMembers();
98 accounts.remove(this);
99 group.setMembers(accounts);
100 return true;
101 }
102
103
104
105
106
107
108 public boolean isInGroup(Group group){
109 if (group == null){
110 return false;
111 }
112 if (group.getMembers()==null){
113 return false;
114 }
115 return (group.getMembers().contains(this));
116 }
117
118 @Override
119 public boolean equals(Object obj) {
120 if (this == obj) {
121 return true;
122 }
123 if (!(obj instanceof Account)) {
124 return false;
125 }
126 if (this.getId() == null) {
127 return false;
128 } else {
129 return this.getId().equals(((Account) obj).getId());
130 }
131 }
132
133 @Override
134 public int hashCode() {
135 if (this.getId() == null) {
136 return super.hashCode();
137 } else {
138 return this.getId().hashCode();
139 }
140 }
141
142 public String toString() {
143 return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE).append(this.getId()).toString();
144 }
145
146 @XmlElementWrapper(name=Constants.ROLES)
147 @XmlElement(name=Constants.ROLE)
148 public List<Role> getRoles() {
149 return roles;
150 }
151
152 public void setRoles(List<Role> roles) {
153 this.roles = roles;
154 }
155
156 @XmlElementWrapper(name=Constants.GROUPS)
157 @XmlElement(name=Constants.GROUP)
158 @XmlIDREF
159 public List<Group> getGroups() {
160 return groups;
161 }
162
163 public void setGroups(List<Group> groups) {
164 this.groups = groups;
165 }
166 }