]> git.mxchange.org Git - jcontacts-core.git/blobdiff - src/org/mxchange/jcontacts/contact/UserContact.java
Email address should be optional
[jcontacts-core.git] / src / org / mxchange / jcontacts / contact / UserContact.java
index bb003eebaaac0103ec22c37ca7aa1619a66fea59..7d65e3b0ca2b79b2a0b35ca32fbd0437abeb5597 100644 (file)
@@ -19,20 +19,20 @@ package org.mxchange.jcontacts.contact;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Objects;
-import javax.annotation.PostConstruct;
 import javax.persistence.Basic;
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Index;
 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;
@@ -48,7 +48,7 @@ import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
 import org.mxchange.jphone.phonenumbers.landline.LandLineNumber;
 
 /**
- * A general contact class which should only be extended.
+ * A general contact class which serves as an entity.
  * <p>
  * @author Roland Haeder<roland@mxchange.org>
  * @version 0.0
@@ -68,7 +68,16 @@ import org.mxchange.jphone.phonenumbers.landline.LandLineNumber;
                        )
                }
 )
-public class UserContact implements Contact, Comparable<Contact> {
+@NamedQueries (
+               {
+                       @NamedQuery( name = "AllContacts", query = "SELECT c FROM contacts AS c ORDER BY c.contactId ASC"),
+                       @NamedQuery( name = "AllContactEmailAddresses", query = "SELECT c.contactEmailAddress FROM contacts AS c ORDER BY c.contactId ASC"),
+                       @NamedQuery (name = "AllContactsByCellphone", query = "SELECT c FROM contacts AS c WHERE c.contactCellphoneNumber = :cellPhone ORDER BY c.contactId ASC"),
+                       @NamedQuery (name = "SearchContactById", query = "SELECT c FROM contacts AS c WHERE c.contactId = :contactId")
+               }
+)
+@SuppressWarnings ("PersistenceUnitPresent")
+public class UserContact implements Contact {
 
        /**
         * Serial number
@@ -92,7 +101,7 @@ public class UserContact implements Contact, Comparable<Contact> {
        /**
         * City
         */
-       @Basic(optional = false)
+       @Basic (optional = false)
        @Column (name = "contact_city", nullable = false, length = 100)
        private String contactCity;
 
@@ -107,7 +116,7 @@ public class UserContact implements Contact, Comparable<Contact> {
         * Country code
         */
        @JoinColumn (name = "contact_country_id", nullable = false, referencedColumnName = "country_id")
-       @OneToOne (targetEntity = CountryData.class, cascade = CascadeType.MERGE, optional = false, fetch = FetchType.EAGER)
+       @OneToOne (targetEntity = CountryData.class, cascade = CascadeType.REFRESH, optional = false)
        private Country contactCountry;
 
        /**
@@ -121,8 +130,7 @@ public class UserContact implements Contact, Comparable<Contact> {
        /**
         * Email address
         */
-       @Basic(optional = false)
-       @Column (name = "contact_email_address", length = 100, nullable = false)
+       @Column (name = "contact_email_address", length = 100)
        private String contactEmailAddress;
 
        /**
@@ -157,7 +165,7 @@ public class UserContact implements Contact, Comparable<Contact> {
        /**
         * House number
         */
-       @Basic(optional = false)
+       @Basic (optional = false)
        @Column (name = "contact_house_number", length = 5, nullable = false)
        private Short contactHouseNumber;
 
@@ -166,13 +174,13 @@ public class UserContact implements Contact, Comparable<Contact> {
         */
        @Id
        @GeneratedValue (strategy = GenerationType.IDENTITY)
-       @Column (name = "contact_id", length = 20, nullable = false, updatable = false)
+       @Column (name = "contact_id", nullable = false, updatable = false)
        private Long contactId;
 
        /**
         * Flag whether this contact is user's own data
         */
-       @Basic(optional = false)
+       @Basic (optional = false)
        @Column (name = "contact_own_contact", nullable = false)
        private Boolean contactOwnContact;
 
@@ -186,7 +194,7 @@ public class UserContact implements Contact, Comparable<Contact> {
        /**
         * Street
         */
-       @Basic(optional = false)
+       @Basic (optional = false)
        @Column (name = "contact_street", nullable = false)
        private String contactStreet;
 
@@ -206,10 +214,21 @@ public class UserContact implements Contact, Comparable<Contact> {
        /**
         * ZIP code
         */
-       @Basic(optional = false)
+       @Basic (optional = false)
        @Column (name = "contact_zip_code", nullable = false, length = 6)
        private Integer contactZipCode;
 
+       /**
+        * Default constructor
+        */
+       public UserContact () {
+               // Default is not user's own contact
+               this.contactOwnContact = Boolean.FALSE;
+
+               // Unknown gender
+               this.contactGender = Gender.UNKNOWN;
+       }
+
        /**
         * Constructor for contactGender and names
         * <p>
@@ -218,7 +237,7 @@ public class UserContact implements Contact, Comparable<Contact> {
         * @param contactFamilyName Family name
         */
        public UserContact (final Gender contactGender, final String contactFirstName, final String contactFamilyName) {
-               // Call other constructor
+               // Call default constructor
                this();
 
                // Set all
@@ -227,36 +246,14 @@ public class UserContact implements Contact, Comparable<Contact> {
                this.contactFamilyName = contactFamilyName;
        }
 
-       /**
-        * Default constructor
-        */
-       public UserContact () {
-               // Default is not user's own contact
-               this.contactOwnContact = Boolean.FALSE;
-       }
-
        @Override
-       public int compareTo (final Contact contact) {
-               // contact should not be null
+       public void copyAll (final Contact contact) {
+               // Contact should be valid
                if (null == contact) {
+                       // Throw NPE
                        throw new NullPointerException("contact is null"); //NOI18N
                }
 
-               // Is the contactId the same?
-               if (Objects.equals(this.getContactId(), contact.getContactId())) {
-                       // Same contactId, means same contact
-                       return 0;
-               } else if (this.getContactId() > contact.getContactId()) {
-                       // This contactId is larger than compared to
-                       return -1;
-               }
-
-               // The other contactId is larger
-               return 1;
-       }
-
-       @Override
-       public void copyAll (final Contact contact) {
                // Copy all:
                // - base data
                this.setContactFirstName(contact.getContactFirstName());
@@ -496,15 +493,6 @@ public class UserContact implements Contact, Comparable<Contact> {
                this.contactZipCode = contactZipCode;
        }
 
-       /**
-        * Initialization with fake contactGender UNKNOWN
-        */
-       @PostConstruct
-       public void init () {
-               // Fake contactGender
-               this.contactGender = Gender.UNKNOWN;
-       }
-
        @Override
        public Boolean isOwnContact () {
                return this.contactOwnContact;