Now working with both hibernate and eclipselink
[utils] / security / impl / src / main / java / org / wamblee / usermgt / User.java
index 224435a14a66726682eb861122ed3d223e238983..0e1c545394a7d0031c067c8f8fcf92d9a7a7f9eb 100644 (file)
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- */ 
+ */
 package org.wamblee.usermgt;
 
-import org.wamblee.persistence.AbstractPersistent;
-
-import org.wamblee.security.encryption.MessageDigester;
-
-import org.wamblee.usermgt.UserMgtException.Reason;
-
 import java.io.Serializable;
-
 import java.util.Set;
 import java.util.TreeSet;
 
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
+import org.wamblee.security.encryption.MessageDigester;
+import org.wamblee.usermgt.UserMgtException.Reason;
+
 /**
  * Represents a user. The methods for managing the groups of the user have
  * package scope. Managing the groups of the user should be done through the
  * {@link org.wamblee.usermgt.UserAdministration} interface.
  */
-public class User extends AbstractPersistent implements Serializable,
-    Comparable {
+@Entity
+@Table(name = "SEC_USER")
+@NamedQueries( {
+    @NamedQuery(name = User.QUERY_FIND_BY_NAME, query = "select u from User u where u.name = :" +
+        User.NAME_PARAM),
+    @NamedQuery(name = User.QUERY_FIND_BY_GROUP_NAME, query = "select user from User user join user.groups grp where grp.name = :name"),
+    @NamedQuery(name = User.QUERY_COUNT_USERS, query = "select count(u) from User u"),
+    @NamedQuery(name = User.QUERY_ALL_USERS, query = "select u from User u") })
+public class User implements Serializable, Comparable {
+
+    public static final String QUERY_FIND_BY_NAME = "User.findByName";
+    public static final String QUERY_FIND_BY_GROUP_NAME = "User.findByGroupName";
+    public static final String QUERY_COUNT_USERS = "User.count";
+    public static final String QUERY_ALL_USERS = "User.all";
+    public static final String NAME_PARAM = "name";
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long primaryKey;
+
+    @Version
+    private int version;
+
     /**
      * User name.
      */
@@ -46,16 +76,19 @@ public class User extends AbstractPersistent implements Serializable,
     /**
      * Groups the user belongs to.
      */
+    @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
     private Set<Group> groups;
 
     /**
      * Password validator.
      */
+    @Transient
     private NameValidator passwordValidator;
 
     /**
      * Password encoder.
      */
+    @Transient
     private MessageDigester passwordEncoder;
 
     /**
@@ -86,7 +119,8 @@ public class User extends AbstractPersistent implements Serializable,
      * 
      */
     public User(User aUser) {
-        super(aUser);
+        primaryKey = aUser.primaryKey;
+        version = aUser.version;
         name = aUser.name;
         password = aUser.password;
         groups = new TreeSet<Group>();
@@ -322,6 +356,9 @@ public class User extends AbstractPersistent implements Serializable,
      */
     @Override
     public boolean equals(Object aUser) {
+        if (aUser == null) {
+            return false;
+        }
         if (!(aUser instanceof User)) {
             return false;
         }
@@ -365,4 +402,8 @@ public class User extends AbstractPersistent implements Serializable,
     public int compareTo(Object aUser) {
         return name.compareTo(((User) aUser).name);
     }
+
+    public Long getPrimaryKey() {
+        return primaryKey;
+    }
 }