]> git.mxchange.org Git - juser-login-core.git/blobdiff - src/org/mxchange/jusercore/model/email_address/EmailAddressChange.java
ignored create-persistence-unit warning as no persistence.xml shall be created here...
[juser-login-core.git] / src / org / mxchange / jusercore / model / email_address / EmailAddressChange.java
index e039b2c0d22b58412a41f158f38680a1901cf385..a7058545c12322ccf0801941f970f8be80f68e29 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 quix0r
+ * Copyright (C) 2016 Roland Haeder
  *
  * 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
@@ -27,7 +27,9 @@ import javax.persistence.Enumerated;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
-import javax.persistence.Index;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
 import javax.persistence.Temporal;
@@ -42,13 +44,16 @@ import org.mxchange.jusercore.model.user.User;
  * @author Roland Haeder<roland@mxchange.org>
  */
 @Entity (name = "email_changes")
-@Table (
-               name = "email_changes",
-               indexes = {
-                       @Index (name = "email_change_user", columnList = "email_change_user")
+@Table (name = "email_changes")
+@NamedQueries (
+               value = {
+                       @NamedQuery (name = "SearchEmailChangeByEmail", query = "SELECT e FROM email_changes AS e WHERE LOWER(e.emailAddress) LIKE LOWER(:email)"),
+                       @NamedQuery (name = "AllEmailAddressChanges", query = "SELECT e.emailAddress FROM email_changes AS e ORDER BY e.emailChangeId ASC"),
+                       @NamedQuery (name = "SearchEmailChangeByHash", query = "SELECT e FROM email_changes AS e WHERE e.emailChangeHash = :hash")
                }
 )
-public class EmailAddressChange implements ChangeableEmailAddress, Comparable<ChangeableEmailAddress> {
+@SuppressWarnings ("PersistenceUnitPresent")
+public class EmailAddressChange implements ChangeableEmailAddress {
 
        /**
         * Serial number
@@ -78,12 +83,19 @@ public class EmailAddressChange implements ChangeableEmailAddress, Comparable<Ch
        @Column (name = "email_change_done", nullable = false, updatable = false)
        private Calendar emailChangeDone;
 
+       /**
+        * Email change hash the user has to click
+        */
+       @Basic (optional = false)
+       @Column (name = "email_change_hash", unique = true)
+       private String emailChangeHash;
+
        /**
         * Email change id
         */
        @Id
        @GeneratedValue (strategy = GenerationType.IDENTITY)
-       @Column (name = "email_change_id", length = 20, nullable = false, updatable = false)
+       @Column (name = "email_change_id", nullable = false, updatable = false)
        private Long emailChangeId;
 
        /**
@@ -97,9 +109,8 @@ public class EmailAddressChange implements ChangeableEmailAddress, Comparable<Ch
        /**
         * User initiating the email change
         */
-       @Basic (optional = false)
-       @Column (name = "email_change_user_id", length = 20, nullable = false, updatable = false)
-       @OneToOne (targetEntity = LoginUser.class, optional = false, cascade = CascadeType.REFRESH)
+       @JoinColumn (name = "email_change_user_id", nullable = false, updatable = false)
+       @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH, optional = false)
        private User emailChangeUser;
 
        /**
@@ -110,16 +121,49 @@ public class EmailAddressChange implements ChangeableEmailAddress, Comparable<Ch
                this.emailChangeStatus = EmailChangeStatus.NEW;
        }
 
-       @Override
-       public int compareTo (final ChangeableEmailAddress emailAddress) {
-               throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+       /**
+        * Constructor with all fields to set
+        * <p>
+        * @param emailChangeId      Email change id
+        * @param user               User instance
+        * @param emailAddress       Email address
+        * @param emailChangeCreated Timestamp for creation
+        * @param emailChangeStatus  Email change status
+        * @param emailChangeDone    When this entry has been done
+        * @param emailChangeHash    Email change hash
+        */
+       public EmailAddressChange (final Long emailChangeId, final User user, final String emailAddress, final Calendar emailChangeCreated, final EmailChangeStatus emailChangeStatus, final Calendar emailChangeDone, final String emailChangeHash) {
+               // Call other constructor
+               this(user, emailAddress);
+
+               // Set remaining
+               this.emailChangeId = emailChangeId;
+               this.emailChangeCreated = emailChangeCreated;
+               this.emailChangeStatus = emailChangeStatus;
+               this.emailChangeDone = emailChangeDone;
+               this.emailChangeHash = emailChangeHash;
+       }
+
+       /**
+        * Constructor with user and email address
+        * <p>
+        * @param user         User instance
+        * @param emailAddress Email address
+        */
+       public EmailAddressChange (final User user, final String emailAddress) {
+               // Call other constructor
+               this();
+
+               // Set all
+               this.emailChangeUser = user;
+               this.emailAddress = emailAddress;
        }
 
        @Override
        public boolean equals (final Object object) {
                if (this == object) {
                        return true;
-               } else if (object == null) {
+               } else if (null == object) {
                        return false;
                } else if (this.getClass() != object.getClass()) {
                        return false;
@@ -127,7 +171,7 @@ public class EmailAddressChange implements ChangeableEmailAddress, Comparable<Ch
 
                final ChangeableEmailAddress otherEmail = (ChangeableEmailAddress) object;
 
-               if (!Objects.equals(this.getEmailChangeId(), otherEmail.getEmailChangeId())) {
+               if (!Objects.equals(this.getEmailAddress(), otherEmail.getEmailAddress())) {
                        return false;
                }
 
@@ -137,8 +181,8 @@ public class EmailAddressChange implements ChangeableEmailAddress, Comparable<Ch
        @Override
        public int hashCode () {
                int hash = 5;
-               hash = 71 * hash + Objects.hashCode(this.emailChangeId);
-               hash = 71 * hash + Objects.hashCode(this.emailChangeUser);
+               hash = 71 * hash + Objects.hashCode(this.getEmailAddress());
+               hash = 71 * hash + Objects.hashCode(this.getEmailChangeUser());
                return hash;
        }
 
@@ -172,6 +216,16 @@ public class EmailAddressChange implements ChangeableEmailAddress, Comparable<Ch
                this.emailChangeDone = emailChangeDone;
        }
 
+       @Override
+       public String getEmailChangeHash () {
+               return this.emailChangeHash;
+       }
+
+       @Override
+       public void setEmailChangeHash (final String emailChangeHash) {
+               this.emailChangeHash = emailChangeHash;
+       }
+
        @Override
        public Long getEmailChangeId () {
                return this.emailChangeId;