]> git.mxchange.org Git - juser-core.git/blobdiff - src/org/mxchange/jusercore/model/user/LoginUser.java
Continued:
[juser-core.git] / src / org / mxchange / jusercore / model / user / LoginUser.java
index f06646070447d4df801c21502584d36fc088230c..d6de5bf9a24a69c44f20abb5ddfc61aa31665f14 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015 Roland Haeder
+ * Copyright (C) 2016 - 2022 Free Software Foundation
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  */
 package org.mxchange.jusercore.model.user;
 
-import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+import java.util.Objects;
 import javax.persistence.Basic;
+import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
@@ -26,45 +29,44 @@ import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
 import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
-import org.mxchange.jcontacts.contact.Contact;
-import org.mxchange.jcontacts.contact.UserContact;
+import javax.persistence.Transient;
+import org.mxchange.jcontacts.model.contact.Contact;
+import org.mxchange.jcontacts.model.contact.UserContact;
+import org.mxchange.jcontacts.model.utils.ContactUtils;
+import org.mxchange.jcoreutils.Comparables;
+import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
 import org.mxchange.jusercore.model.user.status.UserAccountStatus;
 
 /**
- * A shop customer class.
+ * A generic user entity class
  * <p>
- * @author Roland Haeder<roland@mxchange.org>
+ * @author Roland Hรคder<roland@mxchange.org>
  */
 @Entity (name = "users")
-@Table (name = "users")
-@NamedQueries(
-       {
-               @NamedQuery(name = "AllUserNames", query = "SELECT DISTINCT u.userName FROM users AS u ORDER BY u.userId ASC"),
-               @NamedQuery(name = "AllEmailAddresses", query = "SELECT DISTINCT c.emailAddress FROM contacts AS c ORDER BY c.contactId ASC"),
-               @NamedQuery(name = "SearchUserName", query = "SELECT u FROM users AS u WHERE LOWER(u.userName) LIKE LOWER(:param)"),
-               @NamedQuery(name = "SearchEmailAddress", query = "SELECT u FROM users AS u INNER JOIN contacts AS c ON u.userContact = c WHERE LOWER(c.emailAddress) LIKE LOWER(:param)")
-       }
+@Table (
+               name = "users"
+)
+@NamedQueries (
+               {
+                       @NamedQuery (name = "AllUsers", query = "SELECT u FROM users AS u ORDER BY u.userId ASC")
+               }
 )
+@SuppressWarnings ("PersistenceUnitPresent")
 public class LoginUser implements User {
 
        /**
         * Serial number
         */
+       @Transient
        private static final long serialVersionUID = 4_328_454_581_751L;
 
-       /**
-        * Id number from "contacts" table
-        */
-       @JoinColumn (name = "contact_id", nullable = false, updatable = false, unique = true)
-       @OneToOne (targetEntity = UserContact.class, optional = false)
-       private Contact userContact;
-
        /**
         * Account status
         */
@@ -76,43 +78,87 @@ public class LoginUser implements User {
        /**
         * Confirmation key
         */
-       @Column (name = "user_confirm_key", length = 50)
+       @Column (name = "user_confirm_key", unique = true)
        private String userConfirmKey;
 
        /**
-        * "created" timestamp
+        * Id number from "contacts" table
+        */
+       @JoinColumn (name = "user_contact_id", referencedColumnName = "contact_id", nullable = false, updatable = false, unique = true)
+       @OneToOne (targetEntity = UserContact.class, cascade = CascadeType.ALL, optional = false)
+       private Contact userContact;
+
+       /**
+        * Encrypted password
         */
        @Basic (optional = false)
+       @Column (name = "user_encrypted_password", nullable = false)
+       private String userEncryptedPassword;
+
+       /**
+        * When this user entry has been created
+        */
+       @Basic (optional = false)
+       @Temporal (TemporalType.TIMESTAMP)
+       @Column (name = "user_entry_created", nullable = false, updatable = false)
+       private Date userEntryCreated;
+
+       /**
+        * When this user entry has been updated
+        */
        @Temporal (TemporalType.TIMESTAMP)
-       @Column (name = "user_created", nullable = false)
-       private Calendar userCreated;
+       @Column (name = "user_entry_updated", insertable = false)
+       private Date userEntryUpdated;
 
        /**
         * User id
         */
        @Id
-       @Column (name = "user_id", nullable = false, length = 20, updatable = false)
+       @Column (name = "user_id", nullable = false, updatable = false)
        @GeneratedValue (strategy = GenerationType.IDENTITY)
        private Long userId;
 
        /**
-        * "locked" timestamp
+        * Last "locked" timestamp
         */
        @Temporal (TemporalType.TIMESTAMP)
-       @Column (name = "user_locked")
-       private Calendar userLocked;
+       @Column (name = "user_last_locked_timestamp")
+       private Date userLastLocked;
+
+       /**
+        * Last locked reason
+        */
+       @Lob
+       @Column (name = "user_last_locked_reason")
+       private String userLastLockedReason;
+
+       /**
+        * User locale
+        */
+       @Column (name = "user_locale")
+       private Locale userLocale;
+
+       /**
+        * Whether the user must change password after login
+        */
+       @Basic (optional = false)
+       @Column (name = "user_must_change_password", nullable = false)
+       private Boolean userMustChangePassword;
 
        /**
         * User name
         */
-       @Column (name = "user_name", nullable = false, length = 20)
+       @Basic (optional = false)
+       @Column (name = "user_name", nullable = false, length = 30, unique = true)
        private String userName;
 
        /**
-        * Password hash
+        * Profile mode of this user
         */
-       @Column (name = "user_password_hash")
-       private String userPasswordHash;
+       @Basic (optional = false)
+       @Enumerated (EnumType.STRING)
+       @Column (name = "user_profile_mode", nullable = false)
+       private ProfileMode userProfileMode;
 
        /**
         * Default constructor
@@ -120,28 +166,111 @@ public class LoginUser implements User {
        public LoginUser () {
        }
 
-       @Override
-       public void copyAll (final User user) {
-               // Copy also contact data
-               this.getUserContact().copyAll(user.getUserContact());
+       /**
+        * Constructor with all required fields
+        * <p>
+        * @param userName               Username
+        * @param userProfileMode        Profile mode
+        * @param userMustChangePassword Whether user must change password
+        * @param userEncryptedPassword  Encrypted password
+        * @param userAccountStatus      Account status
+        * @param userContact            User's contact data
+        */
+       public LoginUser (final String userName, final ProfileMode userProfileMode, final Boolean userMustChangePassword, final String userEncryptedPassword, final UserAccountStatus userAccountStatus, final Contact userContact) {
+               // Call other constructor first
+               this();
+
+               // Validate all parameter
+               if (null == userName) {
+                       // Throw NPE
+                       throw new NullPointerException("userName is null"); //NOI18N
+               } else if (userName.isEmpty()) {
+                       // Throw IAE
+                       throw new IllegalArgumentException("userName is empty"); //NOI18N
+               } else if (null == userProfileMode) {
+                       // Throw NPE
+                       throw new NullPointerException("userProfileMode is null"); //NOI18N
+               } else if (null == userMustChangePassword) {
+                       // Throw it again
+                       throw new NullPointerException("userMustChangePassword is null"); //NOI18N
+               } else if (null == userEncryptedPassword) {
+                       // Throw it again
+                       throw new NullPointerException("userEncryptedPassword is null"); //NOI18N
+               } else if (userEncryptedPassword.isEmpty()) {
+                       // Throw IAE
+                       throw new IllegalArgumentException("userEncryptedPassword is empty"); //NOI18N
+               } else if (null == userAccountStatus) {
+                       // Throw NPE
+                       throw new NullPointerException("userAccountStatus is null"); //NOI18N
+               } else if (null == userContact) {
+                       // Throw it again
+                       throw new NullPointerException("userContact is null"); //NOI18N
+               }
 
-               // Copy other data
-               this.setUserConfirmKey(user.getUserConfirmKey());
-               this.setUserName(user.getUserName());
-               this.setUserPasswordHash(user.getUserPasswordHash());
-               this.setUserAccountStatus(user.getUserAccountStatus());
-               this.setUserCreated(user.getUserCreated());
-               this.setUserLocked(user.getUserLocked());
+               // Set all fields
+               this.userAccountStatus = userAccountStatus;
+               this.userEncryptedPassword = userEncryptedPassword;
+               this.userMustChangePassword = userMustChangePassword;
+               this.userName = userName;
+               this.userProfileMode = userProfileMode;
+               this.userContact = userContact;
        }
 
        @Override
-       public Contact getUserContact () {
-               return this.userContact;
+       public int compareTo (final User user) {
+               // Checkparameter and return 0 if equal
+               if (null == user) {
+                       // Should not happen
+                       throw new NullPointerException("Parameter 'user' is null"); //NOI18N
+               } else if (Objects.equals(this, user)) {
+                       // Same object
+                       return 0;
+               }
+
+               // Init comparitors
+               final int comparitors[] = {
+                       // First contact
+                       ContactUtils.compare(this.getUserContact(), user.getUserContact()),
+                       // ... then user name
+                       this.getUserName().compareTo(user.getUserName())
+               };
+
+               // Check all values
+               final int comparison = Comparables.checkAll(comparitors);
+
+               // Return value
+               return comparison;
        }
 
        @Override
-       public void setUserContact (final Contact userContact) {
-               this.userContact = userContact;
+       public boolean equals (final Object object) {
+               if (null == object) {
+                       return false;
+               } else if (this.getClass() != object.getClass()) {
+                       return false;
+               }
+
+               final User user = (User) object;
+
+               if (!Objects.equals(this.getUserName(), user.getUserName())) {
+                       return false;
+               } else if (!Objects.equals(this.getUserAccountStatus(), user.getUserAccountStatus())) {
+                       return false;
+               } else if (!Objects.equals(this.getUserConfirmKey(), user.getUserConfirmKey())) {
+                       return false;
+               } else if (!Objects.equals(this.getUserId(), user.getUserId())) {
+                       return false;
+               } else if (!Objects.equals(this.getUserMustChangePassword(), user.getUserMustChangePassword())) {
+                       return false;
+               } else if (!Objects.equals(this.getUserName(), user.getUserName())) {
+                       return false;
+               } else if (!Objects.equals(this.getUserProfileMode(), user.getUserProfileMode())) {
+                       return false;
+               } else if (!Objects.equals(this.getUserContact(), user.getUserContact())) {
+                       return false;
+               }
+
+               return true;
        }
 
        @Override
@@ -160,18 +289,52 @@ public class LoginUser implements User {
        }
 
        @Override
-       public void setUserConfirmKey (final String customerConfirmKey) {
-               this.userConfirmKey = customerConfirmKey;
+       public void setUserConfirmKey (final String userConfirmKey) {
+               this.userConfirmKey = userConfirmKey;
+       }
+
+       @Override
+       public Contact getUserContact () {
+               return this.userContact;
+       }
+
+       @Override
+       public void setUserContact (final Contact userContact) {
+               this.userContact = userContact;
+       }
+
+       @Override
+       public String getUserEncryptedPassword () {
+               return this.userEncryptedPassword;
+       }
+
+       @Override
+       public void setUserEncryptedPassword (final String userEncryptedPassword) {
+               this.userEncryptedPassword = userEncryptedPassword;
+       }
+
+       @Override
+       @SuppressWarnings ("ReturnOfDateField")
+       public Date getUserEntryCreated () {
+               return this.userEntryCreated;
+       }
+
+       @Override
+       @SuppressWarnings ("AssignmentToDateFieldFromParameter")
+       public void setUserEntryCreated (final Date userEntryCreated) {
+               this.userEntryCreated = userEntryCreated;
        }
 
        @Override
-       public Calendar getUserCreated () {
-               return this.userCreated;
+       @SuppressWarnings ("ReturnOfDateField")
+       public Date getUserEntryUpdated () {
+               return this.userEntryUpdated;
        }
 
        @Override
-       public void setUserCreated (final Calendar userCreated) {
-               this.userCreated = userCreated;
+       @SuppressWarnings ("AssignmentToDateFieldFromParameter")
+       public void setUserEntryUpdated (final Date userEntryUpdated) {
+               this.userEntryUpdated = userEntryUpdated;
        }
 
        @Override
@@ -185,13 +348,45 @@ public class LoginUser implements User {
        }
 
        @Override
-       public Calendar getUserLocked () {
-               return this.userLocked;
+       @SuppressWarnings ("ReturnOfDateField")
+       public Date getUserLastLocked () {
+               return this.userLastLocked;
        }
 
        @Override
-       public void setUserLocked (final Calendar userLocked) {
-               this.userLocked = userLocked;
+       @SuppressWarnings ("AssignmentToDateFieldFromParameter")
+       public void setUserLastLocked (final Date userLastLocked) {
+               this.userLastLocked = userLastLocked;
+       }
+
+       @Override
+       public String getUserLastLockedReason () {
+               return this.userLastLockedReason;
+       }
+
+       @Override
+       public void setUserLastLockedReason (final String userLastLockedReason) {
+               this.userLastLockedReason = userLastLockedReason;
+       }
+
+       @Override
+       public Locale getUserLocale () {
+               return this.userLocale;
+       }
+
+       @Override
+       public void setUserLocale (final Locale userLocale) {
+               this.userLocale = userLocale;
+       }
+
+       @Override
+       public Boolean getUserMustChangePassword () {
+               return this.userMustChangePassword;
+       }
+
+       @Override
+       public void setUserMustChangePassword (final Boolean userMustChangePassword) {
+               this.userMustChangePassword = userMustChangePassword;
        }
 
        @Override
@@ -205,12 +400,28 @@ public class LoginUser implements User {
        }
 
        @Override
-       public String getUserPasswordHash () {
-               return this.userPasswordHash;
+       public ProfileMode getUserProfileMode () {
+               return this.userProfileMode;
        }
 
        @Override
-       public void setUserPasswordHash (final String userPasswordHash) {
-               this.userPasswordHash = userPasswordHash;
+       public void setUserProfileMode (final ProfileMode userProfileMode) {
+               this.userProfileMode = userProfileMode;
        }
+
+       @Override
+       public int hashCode () {
+               int hash = 5;
+
+               hash = 83 * hash + Objects.hashCode(this.getUserName());
+               hash = 83 * hash + Objects.hashCode(this.getUserAccountStatus());
+               hash = 83 * hash + Objects.hashCode(this.getUserConfirmKey());
+               hash = 83 * hash + Objects.hashCode(this.getUserId());
+               hash = 83 * hash + Objects.hashCode(this.getUserMustChangePassword());
+               hash = 83 * hash + Objects.hashCode(this.getUserProfileMode());
+               hash = 83 * hash + Objects.hashCode(this.getUserContact());
+
+               return hash;
+       }
+
 }