]> 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 ad516c23436876f6e0f95a028fca8643fa4d197a..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,12 +44,15 @@ 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")
                }
 )
+@SuppressWarnings ("PersistenceUnitPresent")
 public class EmailAddressChange implements ChangeableEmailAddress {
 
        /**
@@ -78,12 +83,19 @@ public class EmailAddressChange implements ChangeableEmailAddress {
        @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 {
        /**
         * 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,6 +121,44 @@ public class EmailAddressChange implements ChangeableEmailAddress {
                this.emailChangeStatus = EmailChangeStatus.NEW;
        }
 
+       /**
+        * 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) {
@@ -167,6 +216,16 @@ public class EmailAddressChange implements ChangeableEmailAddress {
                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;