merge-update from trunk
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / common / User.java
index bbd2ce89ed0754ffd8a63c50ad6c2917fc0d8257..2e6ad25107d377bb31ef752a39eaa62e766a7524 100644 (file)
@@ -13,6 +13,7 @@ import java.util.Collection;
 import java.util.HashSet;\r
 import java.util.Set;\r
 \r
+import javax.persistence.Column;\r
 import javax.persistence.Entity;\r
 import javax.persistence.FetchType;\r
 import javax.persistence.ManyToMany;\r
@@ -32,13 +33,10 @@ import javax.xml.bind.annotation.XmlType;
 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
-\r
-\r
+import org.hibernate.search.annotations.Analyze;\r
 import org.hibernate.search.annotations.Field;\r
-import org.hibernate.search.annotations.Index;\r
 import org.hibernate.search.annotations.Indexed;\r
 import org.hibernate.search.annotations.IndexedEmbedded;\r
 import org.springframework.security.core.GrantedAuthority;\r
@@ -68,10 +66,8 @@ public class User extends CdmBase implements UserDetails {
     private static final long serialVersionUID = 6582191171369439163L;\r
     private static final Logger logger = Logger.getLogger(User.class);\r
 \r
-    protected User(){\r
-        super();\r
-    }\r
-\r
+ // **************************** FACTORY *****************************************/   \r
+    \r
     public static User NewInstance(String username, String pwd){\r
         User user = new User();\r
         user.setUsername(username);\r
@@ -100,9 +96,11 @@ public class User extends CdmBase implements UserDetails {
         return user;\r
     }\r
 \r
+//***************************** Fields *********************** /\r
+    \r
     @XmlElement(name = "Username")\r
-    @NaturalId\r
-    @Field(index = Index.UN_TOKENIZED)\r
+    @Column(unique = true)\r
+    @Field(analyze = Analyze.NO)\r
     protected String username;\r
 \r
     /**\r
@@ -120,7 +118,7 @@ public class User extends CdmBase implements UserDetails {
     @XmlIDREF\r
     @XmlSchemaType(name = "IDREF")\r
     @ManyToMany(fetch = FetchType.LAZY, targetEntity = GrantedAuthorityImpl.class)\r
-    @Cascade(CascadeType.SAVE_UPDATE)\r
+    @Cascade({CascadeType.SAVE_UPDATE, CascadeType.REFRESH}) // see #2414 (Group updating doesn't work)\r
     @NotAudited\r
     protected Set<GrantedAuthority> grantedAuthorities = new HashSet<GrantedAuthority>();  //authorities of this user only\r
 \r
@@ -129,6 +127,7 @@ public class User extends CdmBase implements UserDetails {
     @XmlIDREF\r
     @XmlSchemaType(name = "IDREF")\r
     @ManyToMany(fetch = FetchType.LAZY)\r
+    @Cascade(CascadeType.REFRESH) // see #2414 (Group updating doesn't work)\r
     @IndexedEmbedded(depth = 1)\r
     @NotAudited\r
     protected Set<Group> groups = new HashSet<Group>();\r
@@ -157,7 +156,20 @@ public class User extends CdmBase implements UserDetails {
     @Transient\r
     private Set<GrantedAuthority> authorities;  //authorities of this user and of all groups the user belongs to\r
 \r
-    private void initAuthorities() {\r
+//***************************** Constructor *********************** /\r
+    \r
+    protected User(){\r
+        super();\r
+    }\r
+    \r
+// ***************************** METHODS ******************************/\r
+    \r
+    /**\r
+     * Initializes or refreshes the collection of authorities, See\r
+     * {@link #getAuthorities()}\r
+     */\r
+    //FIXME made public as preliminary solution to #4053 (Transient field User.authorities not refreshed on reloading entity)\r
+    public void initAuthorities() {\r
         authorities = new HashSet<GrantedAuthority>();\r
         authorities.addAll(grantedAuthorities);\r
         for(Group group : groups) {\r
@@ -166,10 +178,15 @@ public class User extends CdmBase implements UserDetails {
     }\r
 \r
     /**\r
+     * Implementation of {@link UserDetails#getAuthorities()}\r
+     *\r
      * {@inheritDoc}\r
      *\r
-     * @return returns a {@code Set<GrantedAuthority>} as Collection\r
+     * @return returns all {@code Set<GrantedAuthority>} instances contained in\r
+     *         the sets {@link #getGrantedAuthorities()} and\r
+     *         {@link #getGroups()}\r
      */\r
+    @Override\r
     @Transient\r
     public Collection<GrantedAuthority> getAuthorities() {\r
         if(authorities == null || authorities.size() == 0) {\r
@@ -178,26 +195,32 @@ public class User extends CdmBase implements UserDetails {
         return authorities;\r
     }\r
 \r
+    @Override\r
     public String getPassword() {\r
         return password;\r
     }\r
 \r
+    @Override\r
     public String getUsername() {\r
         return username;\r
     }\r
 \r
+    @Override\r
     public boolean isAccountNonExpired() {\r
         return accountNonExpired;\r
     }\r
 \r
+    @Override\r
     public boolean isAccountNonLocked() {\r
         return accountNonLocked;\r
     }\r
 \r
+    @Override\r
     public boolean isCredentialsNonExpired() {\r
         return credentialsNonExpired;\r
     }\r
 \r
+    @Override\r
     public boolean isEnabled() {\r
         return enabled;\r
     }\r