Extension.value -> LOB,
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / common / User.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.cdm.model.common;
11
12 import java.util.HashSet;
13 import java.util.Set;
14 import java.util.TreeSet;
15
16 import javax.persistence.Entity;
17 import javax.persistence.FetchType;
18 import javax.persistence.ManyToMany;
19 import javax.persistence.OneToOne;
20 import javax.persistence.Table;
21 import javax.persistence.Transient;
22 import javax.xml.bind.annotation.XmlAccessType;
23 import javax.xml.bind.annotation.XmlAccessorType;
24 import javax.xml.bind.annotation.XmlElement;
25 import javax.xml.bind.annotation.XmlElementWrapper;
26 import javax.xml.bind.annotation.XmlIDREF;
27 import javax.xml.bind.annotation.XmlRootElement;
28 import javax.xml.bind.annotation.XmlSchemaType;
29 import javax.xml.bind.annotation.XmlTransient;
30 import javax.xml.bind.annotation.XmlType;
31
32 import org.apache.log4j.Logger;
33 import org.hibernate.annotations.Cascade;
34 import org.hibernate.annotations.CascadeType;
35 import org.hibernate.annotations.NaturalId;
36 import org.hibernate.envers.Audited;
37 import org.hibernate.envers.NotAudited;
38 import org.springframework.security.GrantedAuthority;
39 import org.springframework.security.userdetails.UserDetails;
40
41 import eu.etaxonomy.cdm.model.agent.Person;
42
43 @XmlAccessorType(XmlAccessType.FIELD)
44 @XmlType(name = "User", propOrder = {
45 "username",
46 "password",
47 "emailAddress",
48 "grantedAuthorities",
49 "groups",
50 "enabled",
51 "accountNonExpired",
52 "credentialsNonExpired",
53 "accountNonLocked",
54 "person"
55 })
56 @XmlRootElement(name = "User")
57 @Entity
58 @Audited
59 @Table(name = "UserAccount")
60 public class User extends CdmBase implements UserDetails {
61 private static final long serialVersionUID = 6582191171369439163L;
62 @SuppressWarnings(value="unused")
63 private static final Logger logger = Logger.getLogger(User.class);
64
65 public static User NewInstance(String username, String pwd){
66 User user = new User();
67 user.setUsername(username);
68 user.setPassword(pwd);
69 return user;
70 }
71
72 @XmlElement(name = "Username")
73 @NaturalId
74 protected String username;
75
76 /**
77 * a salted, MD5 encoded hash of the plaintext password
78 */
79 @XmlElement(name = "Password")
80 @NotAudited
81 protected String password;
82
83 @XmlElement(name = "EmailAddress")
84 protected String emailAddress;
85
86 @XmlElementWrapper(name = "GrantedAuthorities")
87 @XmlElement(name = "GrantedAuthority", type = GrantedAuthorityImpl.class)
88 @XmlIDREF
89 @XmlSchemaType(name = "IDREF")
90 @ManyToMany(fetch = FetchType.LAZY, targetEntity = GrantedAuthorityImpl.class)
91 @NotAudited
92 protected Set<GrantedAuthority> grantedAuthorities = new HashSet<GrantedAuthority>();
93
94 @XmlElementWrapper(name = "Groups")
95 @XmlElement(name = "Group")
96 @XmlIDREF
97 @XmlSchemaType(name = "IDREF")
98 @ManyToMany(fetch = FetchType.LAZY)
99 @NotAudited
100 protected Set<Group> groups = new HashSet<Group>();
101
102 @XmlElement(name = "Enabled")
103 protected boolean enabled;
104
105 @XmlElement(name = "AccountNonExpired")
106 protected boolean accountNonExpired;
107
108 @XmlElement(name = "CredentialsNonExpired")
109 protected boolean credentialsNonExpired;
110
111 @XmlElement(name = "AccountNonLocked")
112 protected boolean accountNonLocked;
113
114 @XmlElement(name = "Person")
115 @XmlIDREF
116 @XmlSchemaType(name = "IDREF")
117 @OneToOne(fetch = FetchType.LAZY)
118 @Cascade({CascadeType.SAVE_UPDATE})
119 protected Person person;
120
121 @XmlTransient
122 @Transient
123 private GrantedAuthority[] authorities;
124
125 private void initAuthorities() {
126 Set<GrantedAuthority> allAuthorities = new TreeSet<GrantedAuthority>();
127 allAuthorities.addAll(grantedAuthorities);
128 for(Group group : groups) {
129 allAuthorities.addAll(group.getGrantedAuthorities());
130 }
131
132 authorities = allAuthorities.toArray(new GrantedAuthority[allAuthorities.size()]);
133 }
134
135 @Transient
136 public GrantedAuthority[] getAuthorities() {
137 if(authorities == null) initAuthorities();
138 return authorities;
139 }
140
141 public String getPassword() {
142 return password;
143 }
144
145 public String getUsername() {
146 return username;
147 }
148
149 public boolean isAccountNonExpired() {
150 return accountNonExpired;
151 }
152
153 public boolean isAccountNonLocked() {
154 return accountNonLocked;
155 }
156
157 public boolean isCredentialsNonExpired() {
158 return credentialsNonExpired;
159 }
160
161 public boolean isEnabled() {
162 return enabled;
163 }
164
165 public String getEmailAddress() {
166 return emailAddress;
167 }
168
169 public void setEmailAddress(String emailAddress) {
170 this.emailAddress = emailAddress;
171 }
172
173 public Set<GrantedAuthority> getGrantedAuthorities() {
174 return grantedAuthorities;
175 }
176
177 public void setGrantedAuthorities(Set<GrantedAuthority> grantedAuthorities) {
178 this.grantedAuthorities = grantedAuthorities;
179 initAuthorities();
180 }
181
182 public void setUsername(String username) {
183 this.username = username;
184 }
185
186 public void setPassword(String password) {
187 this.password = password;
188 }
189
190 public void setEnabled(boolean enabled) {
191 this.enabled = enabled;
192 }
193
194 public void setAccountNonExpired(boolean accountNonExpired) {
195 this.accountNonExpired = accountNonExpired;
196 }
197
198 public void setCredentialsNonExpired(boolean credentialsNonExpired) {
199 this.credentialsNonExpired = credentialsNonExpired;
200 }
201
202 public void setAccountNonLocked(boolean accountNonLocked) {
203 this.accountNonLocked = accountNonLocked;
204 }
205
206 protected void setGroups(Set<Group> groups) {
207 this.groups = groups;
208 initAuthorities();
209 }
210
211 public Set<Group> getGroups() {
212 return groups;
213 }
214
215 public Person getPerson() {
216 return person;
217 }
218
219 public void setPerson(Person person) {
220 this.person = person;
221 }
222 }