/*
- * 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
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;
* @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 {
/**
@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;
/**
/**
* 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;
/**
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) {
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;