+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
package eu.etaxonomy.cdm.model.common;\r
\r
import java.util.HashSet;\r
import javax.persistence.Entity;\r
import javax.persistence.FetchType;\r
import javax.persistence.ManyToMany;\r
+import javax.persistence.OneToOne;\r
+import javax.persistence.Table;\r
import javax.persistence.Transient;\r
-\r
+import javax.xml.bind.annotation.XmlAccessType;\r
+import javax.xml.bind.annotation.XmlAccessorType;\r
+import javax.xml.bind.annotation.XmlElement;\r
+import javax.xml.bind.annotation.XmlElementWrapper;\r
+import javax.xml.bind.annotation.XmlIDREF;\r
+import javax.xml.bind.annotation.XmlRootElement;\r
+import javax.xml.bind.annotation.XmlSchemaType;\r
+import javax.xml.bind.annotation.XmlTransient;\r
+import javax.xml.bind.annotation.XmlType;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hibernate.annotations.Cascade;\r
+import org.hibernate.annotations.CascadeType;\r
import org.hibernate.annotations.NaturalId;\r
+import org.hibernate.envers.Audited;\r
+import org.hibernate.envers.NotAudited;\r
import org.springframework.security.GrantedAuthority;\r
import org.springframework.security.userdetails.UserDetails;\r
\r
+import eu.etaxonomy.cdm.model.agent.Person;\r
+\r
+@XmlAccessorType(XmlAccessType.FIELD)\r
+@XmlType(name = "User", propOrder = {\r
+ "username",\r
+ "password",\r
+ "emailAddress",\r
+ "grantedAuthorities",\r
+ "groups",\r
+ "enabled",\r
+ "accountNonExpired",\r
+ "credentialsNonExpired",\r
+ "accountNonLocked",\r
+ "person" \r
+})\r
+@XmlRootElement(name = "User")\r
@Entity\r
+@Audited\r
+@Table(name = "UserAccount")\r
public class User extends CdmBase implements UserDetails {\r
-\r
- /**\r
- * \r
- */\r
private static final long serialVersionUID = 6582191171369439163L;\r
-\r
+ @SuppressWarnings(value="unused")\r
+ private static final Logger logger = Logger.getLogger(User.class);\r
+ \r
+ public static User NewInstance(String username, String pwd){\r
+ User user = new User();\r
+ user.setUsername(username);\r
+ user.setPassword(pwd);\r
+ return user;\r
+ }\r
+ \r
+ @XmlElement(name = "Username")\r
+ @NaturalId\r
protected String username;\r
\r
/**\r
* a salted, MD5 encoded hash of the plaintext password\r
*/\r
+ @XmlElement(name = "Password")\r
+ @NotAudited\r
protected String password;\r
\r
+ @XmlElement(name = "EmailAddress")\r
protected String emailAddress;\r
\r
- protected Set <GrantedAuthority> grantedAuthorities = new HashSet<GrantedAuthority>();\r
+ @XmlElementWrapper(name = "GrantedAuthorities")\r
+ @XmlElement(name = "GrantedAuthority", type = GrantedAuthorityImpl.class)\r
+ @XmlIDREF\r
+ @XmlSchemaType(name = "IDREF")\r
+ @ManyToMany(fetch = FetchType.LAZY, targetEntity = GrantedAuthorityImpl.class)\r
+ @NotAudited\r
+ protected Set<GrantedAuthority> grantedAuthorities = new HashSet<GrantedAuthority>();\r
\r
+ @XmlElementWrapper(name = "Groups")\r
+ @XmlElement(name = "Group")\r
+ @XmlIDREF\r
+ @XmlSchemaType(name = "IDREF")\r
+ @ManyToMany(fetch = FetchType.LAZY)\r
+ @NotAudited\r
protected Set<Group> groups = new HashSet<Group>();\r
\r
+ @XmlElement(name = "Enabled")\r
protected boolean enabled;\r
\r
+ @XmlElement(name = "AccountNonExpired")\r
protected boolean accountNonExpired;\r
- \r
+\r
+ @XmlElement(name = "CredentialsNonExpired")\r
protected boolean credentialsNonExpired;\r
\r
+ @XmlElement(name = "AccountNonLocked")\r
protected boolean accountNonLocked; \r
\r
+ @XmlElement(name = "Person")\r
+ @XmlIDREF\r
+ @XmlSchemaType(name = "IDREF")\r
+ @OneToOne(fetch = FetchType.LAZY)\r
+ @Cascade({CascadeType.SAVE_UPDATE})\r
+ protected Person person;\r
+ \r
+ @XmlTransient\r
+ @Transient\r
private GrantedAuthority[] authorities;\r
\r
private void initAuthorities() {\r
return password;\r
}\r
\r
- @NaturalId\r
public String getUsername() {\r
return username;\r
}\r
this.emailAddress = emailAddress;\r
}\r
\r
- @ManyToMany(fetch = FetchType.LAZY, targetEntity = GrantedAuthorityImpl.class)\r
public Set<GrantedAuthority> getGrantedAuthorities() {\r
return grantedAuthorities;\r
}\r
initAuthorities();\r
}\r
\r
- @ManyToMany(fetch = FetchType.LAZY)\r
public Set<Group> getGroups() {\r
return groups;\r
}\r
+ \r
+ public Person getPerson() {\r
+ return person;\r
+ }\r
+ \r
+ public void setPerson(Person person) {\r
+ this.person = person;\r
+ }\r
}\r