]> git.mxchange.org Git - jcontacts-core.git/blobdiff - src/org/mxchange/jcontacts/contact/UserContact.java
Updated copyright year
[jcontacts-core.git] / src / org / mxchange / jcontacts / contact / UserContact.java
index 47554565789d91bf89924f6fbe5d043b7e9e625f..a4d512aebcb16ab254e5b83d0984e82f7d8f46ea 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015 Roland Haeder
+ * 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
@@ -21,18 +21,31 @@ 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.OneToOne;
 import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 import org.mxchange.jcontacts.contact.gender.Gender;
+import org.mxchange.jcountry.data.Country;
+import org.mxchange.jcountry.data.CountryData;
+import org.mxchange.jphone.phonenumbers.cellphone.CellphoneNumber;
+import org.mxchange.jphone.phonenumbers.cellphone.DialableCellphoneNumber;
+import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
+import org.mxchange.jphone.phonenumbers.fax.FaxNumber;
+import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
+import org.mxchange.jphone.phonenumbers.landline.LandLineNumber;
 
 /**
  * A general contact class which should only be extended.
@@ -41,7 +54,20 @@ import org.mxchange.jcontacts.contact.gender.Gender;
  * @version 0.0
  */
 @Entity (name = "contacts")
-@Table (name = "contacts")
+@Table (
+               name = "contacts",
+               indexes = {
+                       @Index (
+                                       name = "contact_gender",
+                                       columnList = "contact_gender"
+                       ),
+                       @Index (
+                                       name = "contact_email_address",
+                                       unique = true,
+                                       columnList = "contact_email_address"
+                       )
+               }
+)
 public class UserContact implements Contact, Comparable<Contact> {
 
        /**
@@ -52,141 +78,144 @@ public class UserContact implements Contact, Comparable<Contact> {
        /**
         * Birth day
         */
-       @Column (name = "birthday")
+       @Column (name = "contact_birthday")
        @Temporal (TemporalType.DATE)
-       private Date birthday;
+       private Date contactBirthday;
 
        /**
         * Cellphone number
         */
-       @Column (name = "cellphone_number", length = 100)
-       private String cellphoneNumber;
+       @JoinColumn (name = "contact_cellphone_number_id")
+       @OneToOne (targetEntity = CellphoneNumber.class, cascade = CascadeType.ALL)
+       private DialableCellphoneNumber contactCellphoneNumber;
 
        /**
         * City
         */
-       @Column (name = "city", nullable = false, length = 100)
-       private String city;
+       @Column (name = "contact_city", nullable = false, length = 100)
+       private String contactCity;
 
        /**
         * Optional comments
         */
        @Lob
-       @Column (name = "comment")
-       private String comment;
-
-       /**
-        * Company name
-        */
-       @Column (name = "company_name", nullable = false)
-       private String companyName;
-
-       /**
-        * Id number
-        */
-       @Id
-       @GeneratedValue (strategy = GenerationType.IDENTITY)
-       @Column (name = "contact_id", length = 20, updatable = false)
-       private Long contactId;
+       @Column (name = "contact_comment")
+       private String contactComment;
 
        /**
         * Country code
         */
-       @Column (name = "country_code", length = 2, nullable = false)
-       private String countryCode;
+       @JoinColumn (name = "contact_country_id", nullable = false)
+       @OneToOne (targetEntity = CountryData.class, cascade = CascadeType.MERGE, optional = false, fetch = FetchType.EAGER)
+       private Country contactCountry;
 
        /**
         * When the contact has been created
         */
        @Basic (optional = false)
        @Temporal (TemporalType.TIMESTAMP)
-       @Column (name = "created", nullable = false)
-       private Calendar created;
+       @Column (name = "contact_created", nullable = false)
+       private Calendar contactCreated;
 
        /**
         * Email address
         */
-       @Column (name = "email_address", length = 100, nullable = false)
-       private String emailAddress;
+       @Column (name = "contact_email_address", length = 100, nullable = false)
+       private String contactEmailAddress;
 
        /**
         * Family name
         */
        @Basic (optional = false)
-       @Column (name = "family_name", length = 100, nullable = false)
-       private String familyName;
+       @Column (name = "contact_family_name", length = 100, nullable = false)
+       private String contactFamilyName;
 
        /**
         * Fax number
         */
-       @Column (name = "fax_number", length = 100)
-       private String faxNumber;
+       @JoinColumn (name = "contact_fax_number_id")
+       @OneToOne (targetEntity = FaxNumber.class, cascade = CascadeType.ALL)
+       private DialableFaxNumber contactFaxNumber;
 
        /**
         * First name
         */
        @Basic (optional = false)
-       @Column (name = "first_name", length = 100, nullable = false)
-       private String firstName;
+       @Column (name = "contact_first_name", length = 100, nullable = false)
+       private String contactFirstName;
 
        /**
         * Gender instance
         */
        @Basic (optional = false)
-       @Column (name = "gender", nullable = false)
+       @Column (name = "contact_gender", nullable = false)
        @Enumerated (EnumType.STRING)
-       private Gender gender;
+       private Gender contactGender;
 
        /**
         * House number
         */
-       @Column (name = "house_number", length = 5, nullable = false)
-       private Short houseNumber;
+       @Column (name = "contact_house_number", length = 5, nullable = false)
+       private Short contactHouseNumber;
+
+       /**
+        * Id number
+        */
+       @Id
+       @GeneratedValue (strategy = GenerationType.IDENTITY)
+       @Column (name = "contact_id", length = 20, nullable = false, updatable = false)
+       private Long contactId;
 
        /**
         * Flag whether this contact is user's own data
         */
-       @Column (name = "own_contact", nullable = false)
-       private Boolean ownContact;
+       @Column (name = "contact_own_contact", nullable = false)
+       private Boolean contactOwnContact;
 
        /**
         * Phone number
         */
-       @Column (name = "phone_number", length = 100)
-       private String phoneNumber;
+       @JoinColumn (name = "contact_phone_number_id")
+       @OneToOne (targetEntity = LandLineNumber.class, cascade = CascadeType.ALL)
+       private DialableLandLineNumber contactPhoneNumber;
 
        /**
         * Street
         */
-       @Column (name = "street", nullable = false)
-       private String street;
+       @Column (name = "contact_street", nullable = false)
+       private String contactStreet;
+
+       /**
+        * Title (Doctor, etc)
+        */
+       @Column (name = "contact_title")
+       private String contactTitle;
 
        /**
         * When the contact has been updated
         */
        @Temporal (TemporalType.TIMESTAMP)
-       @Column (name = "updated")
-       private Calendar updated;
+       @Column (name = "contact_updated")
+       private Calendar contactUpdated;
 
        /**
         * ZIP code
         */
-       @Column (name = "zip_code", nullable = false, length = 6)
-       private Long zipCode;
+       @Column (name = "contact_zip_code", nullable = false, length = 6)
+       private Integer contactZipCode;
 
        /**
-        * Constructor for gender and names
+        * Constructor for contactGender and names
         * <p>
-        * @param gender Gender instance
-        * @param firstName First name
-        * @param familyName Family name
-        * @param companyName Company name
+        * @param contactGender Gender instance
+        * @param contactFirstName First name
+        * @param contactFamilyName Family name
         */
-       public UserContact (final Gender gender, final String firstName, final String familyName, final String companyName) {
+       public UserContact (final Gender contactGender, final String contactFirstName, final String contactFamilyName) {
                // Set all
-               this.gender = gender;
-               this.firstName = firstName;
-               this.familyName = familyName;
+               this.contactGender = contactGender;
+               this.contactFirstName = contactFirstName;
+               this.contactFamilyName = contactFamilyName;
        }
 
        /**
@@ -199,6 +228,7 @@ public class UserContact implements Contact, Comparable<Contact> {
         * Compares two contacts with each other
         * <p>
         * @param contact Contact comparator
+        * <p>
         * @return Comparison value
         */
        @Override
@@ -225,32 +255,25 @@ public class UserContact implements Contact, Comparable<Contact> {
        public void copyAll (final Contact contact) {
                // Copy all:
                // - base data
-               this.setFirstName(contact.getFirstName());
-               this.setFamilyName(contact.getFamilyName());
-               this.setCompanyName(contact.getCompanyName());
-               this.setStreet(contact.getStreet());
-               this.setZipCode(contact.getZipCode());
-               this.setCity(contact.getCity());
-               this.setCountryCode(contact.getCountryCode());
+               this.setContactFirstName(contact.getContactFirstName());
+               this.setContactFamilyName(contact.getContactFamilyName());
+               this.setContactStreet(contact.getContactStreet());
+               this.setContactZipCode(contact.getContactZipCode());
+               this.setContactCity(contact.getContactCity());
+               this.setContactCountry(contact.getContactCountry());
 
                // - phone, fax, email
-               this.setPhoneNumber(contact.getPhoneNumber());
-               this.setFaxNumber(contact.getFaxNumber());
-               this.setCellphoneNumber(contact.getCellphoneNumber());
+               this.setContactPhoneNumber(contact.getContactPhoneNumber());
+               this.setContactFaxNumber(contact.getContactFaxNumber());
+               this.setContactCellphoneNumber(contact.getContactCellphoneNumber());
 
                // - other data
-               this.setBirthday(contact.getBirthday());
-               this.setComment(contact.getComment());
-               this.setCreated(contact.getCreated());
-               this.setUpdated(contact.getUpdated());
+               this.setContactBirthday(contact.getContactBirthday());
+               this.setContactComment(contact.getContactComment());
+               this.setContactCreated(contact.getContactCreated());
+               this.setContactUpdated(contact.getContactUpdated());
        }
 
-       /**
-        * Check if contacts are same or throw an exception
-        * <p>
-        * @param object Other possible contact class
-        * @return Whether both contacts are same TODO Needs a lot improvements
-        */
        @Override
        public boolean equals (final Object object) {
                // Is it same type?
@@ -266,220 +289,219 @@ public class UserContact implements Contact, Comparable<Contact> {
                Contact contact = (Contact) object;
 
                // Now test some data TODO Definedly needs improvement
-               return ((this.getGender().equals(contact.getGender()))
-                               && (this.getFirstName().toLowerCase().equals(contact.getFirstName().toLowerCase()))
-                               && (this.getFamilyName().toLowerCase().equals(contact.getFamilyName().toLowerCase())));
+               return ((this.getContactGender().equals(contact.getContactGender()))
+                               && (this.getContactFirstName().toLowerCase().equals(contact.getContactFirstName().toLowerCase()))
+                               && (this.getContactFamilyName().toLowerCase().equals(contact.getContactFamilyName().toLowerCase())));
        }
 
        @Override
-       public Date getBirthday () {
-               return this.birthday;
+       public Date getContactBirthday () {
+               return this.contactBirthday;
        }
 
        @Override
-       public void setBirthday (final Date birthday) {
-               this.birthday = birthday;
+       public void setContactBirthday (final Date contactBirthday) {
+               this.contactBirthday = contactBirthday;
        }
 
        @Override
-       public String getCellphoneNumber () {
-               return this.cellphoneNumber;
+       public DialableCellphoneNumber getContactCellphoneNumber () {
+               return this.contactCellphoneNumber;
        }
 
        @Override
-       public void setCellphoneNumber (final String cellphoneNumber) {
-               this.cellphoneNumber = cellphoneNumber;
+       public void setContactCellphoneNumber (final DialableCellphoneNumber contactCellphoneNumber) {
+               this.contactCellphoneNumber = contactCellphoneNumber;
        }
 
        @Override
-       public String getCity () {
-               return this.city;
+       public String getContactCity () {
+               return this.contactCity;
        }
 
        @Override
-       public void setCity (final String city) {
-               this.city = city;
+       public void setContactCity (final String contactCity) {
+               this.contactCity = contactCity;
        }
 
        @Override
-       public String getComment () {
-               return this.comment;
+       public String getContactComment () {
+               return this.contactComment;
        }
 
        @Override
-       public void setComment (final String comment) {
-               this.comment = comment;
+       public void setContactComment (final String contactComment) {
+               this.contactComment = contactComment;
        }
 
        @Override
-       public String getCompanyName () {
-               return this.companyName;
+       public Country getContactCountry () {
+               return this.contactCountry;
        }
 
        @Override
-       public void setCompanyName (final String companyName) {
-               this.companyName = companyName;
+       public void setContactCountry (final Country contactCountry) {
+               this.contactCountry = contactCountry;
        }
 
        @Override
-       public Long getContactId () {
-               return this.contactId;
+       public Calendar getContactCreated () {
+               return this.contactCreated;
        }
 
        @Override
-       public void setContactId (final Long contactId) {
-               this.contactId = contactId;
+       public void setContactCreated (final Calendar contactCreated) {
+               this.contactCreated = contactCreated;
        }
 
        @Override
-       public String getCountryCode () {
-               return this.countryCode;
+       public String getContactEmailAddress () {
+               return this.contactEmailAddress;
        }
 
        @Override
-       public void setCountryCode (final String countryCode) {
-               this.countryCode = countryCode;
+       public void setContactEmailAddress (final String contactEmailAddress) {
+               this.contactEmailAddress = contactEmailAddress;
        }
 
        @Override
-       public Calendar getCreated () {
-               return this.created;
+       public String getContactFamilyName () {
+               //* NOISY-DEBUG: */ this.getLogger().logTrace("CALLED!");
+               return this.contactFamilyName;
        }
 
        @Override
-       public void setCreated (final Calendar created) {
-               this.created = created;
+       public void setContactFamilyName (final String contactFamilyName) {
+               this.contactFamilyName = contactFamilyName;
        }
 
        @Override
-       public String getEmailAddress () {
-               return this.emailAddress;
+       public DialableFaxNumber getContactFaxNumber () {
+               return this.contactFaxNumber;
        }
 
        @Override
-       public void setEmailAddress (final String emailAddress) {
-               this.emailAddress = emailAddress;
+       public void setContactFaxNumber (final DialableFaxNumber contactFaxNumber) {
+               this.contactFaxNumber = contactFaxNumber;
        }
 
        @Override
-       public String getFamilyName () {
-               //* NOISY-DEBUG: */ this.getLogger().logTrace("CALLED!");
-               return this.familyName;
+       public String getContactFirstName () {
+               return this.contactFirstName;
        }
 
        @Override
-       public void setFamilyName (final String familyName) {
-               this.familyName = familyName;
+       public void setContactFirstName (final String contactFirstName) {
+               this.contactFirstName = contactFirstName;
        }
 
        @Override
-       public String getFaxNumber () {
-               return this.faxNumber;
+       public Gender getContactGender () {
+               return this.contactGender;
        }
 
        @Override
-       public void setFaxNumber (final String faxNumber) {
-               this.faxNumber = faxNumber;
+       public void setContactGender (final Gender contactGender) {
+               this.contactGender = contactGender;
        }
 
        @Override
-       public String getFirstName () {
-               return this.firstName;
+       public Short getContactHouseNumber () {
+               return this.contactHouseNumber;
        }
 
        @Override
-       public void setFirstName (final String firstName) {
-               this.firstName = firstName;
+       public void setContactHouseNumber (final Short contactHouseNumber) {
+               this.contactHouseNumber = contactHouseNumber;
        }
 
        @Override
-       public Gender getGender () {
-               return this.gender;
+       public Long getContactId () {
+               return this.contactId;
        }
-
        @Override
-       public void setGender (final Gender gender) {
-               this.gender = gender;
+       public void setContactId (final Long contactId) {
+               this.contactId = contactId;
        }
 
        @Override
-       public Short getHouseNumber () {
-               return this.houseNumber;
+       public void setContactOwnContact (final Boolean contactOwnContact) {
+               this.contactOwnContact = contactOwnContact;
        }
 
        @Override
-       public void setHouseNumber (final Short houseNumber) {
-               this.houseNumber = houseNumber;
+       public DialableLandLineNumber getContactPhoneNumber () {
+               return this.contactPhoneNumber;
        }
 
        @Override
-       public void setOwnContact (final Boolean ownContact) {
-               this.ownContact = ownContact;
+       public void setContactPhoneNumber (final DialableLandLineNumber contactPhoneNumber) {
+               this.contactPhoneNumber = contactPhoneNumber;
        }
 
        @Override
-       public String getPhoneNumber () {
-               return this.phoneNumber;
+       public String getContactStreet () {
+               return this.contactStreet;
        }
 
        @Override
-       public void setPhoneNumber (final String phoneNumber) {
-               this.phoneNumber = phoneNumber;
+       public void setContactStreet (final String contactStreet) {
+               this.contactStreet = contactStreet;
        }
 
        @Override
-       public String getStreet () {
-               return this.street;
+       public String getContactTitle () {
+               return this.contactTitle;
        }
 
        @Override
-       public void setStreet (final String street) {
-               this.street = street;
+       public void setContactTitle (final String contactTitle) {
+               this.contactTitle = contactTitle;
        }
 
        @Override
-       public Calendar getUpdated () {
-               return this.updated;
+       public Calendar getContactUpdated () {
+               return this.contactUpdated;
        }
 
        @Override
-       public void setUpdated (final Calendar updated) {
-               this.updated = updated;
+       public void setContactUpdated (final Calendar contactUpdated) {
+               this.contactUpdated = contactUpdated;
        }
 
        @Override
-       public Long getZipCode () {
-               return this.zipCode;
+       public Integer getContactZipCode () {
+               return this.contactZipCode;
        }
 
        @Override
-       public void setZipCode (final Long zipCode) {
-               this.zipCode = zipCode;
+       public void setContactZipCode (final Integer contactZipCode) {
+               this.contactZipCode = contactZipCode;
        }
 
        @Override
        public int hashCode () {
-               // Validate gender instance
-               assert (this.getGender() instanceof Gender) : "gender is not set."; //NOI18N
+               // Validate contactGender instance
+               assert (this.getContactGender() instanceof Gender) : "gender is not set."; //NOI18N
 
                int hash = 7;
-               hash = 79 * hash + Objects.hashCode(this.getFamilyName());
-               hash = 79 * hash + this.getGender().hashCode();
-               hash = 79 * hash + Objects.hashCode(this.getFirstName());
+               hash = 79 * hash + Objects.hashCode(this.getContactFamilyName());
+               hash = 79 * hash + this.getContactGender().hashCode();
+               hash = 79 * hash + Objects.hashCode(this.getContactFirstName());
                return hash;
        }
 
        /**
-        * Initialization with fake gender UNKNOWN
+        * Initialization with fake contactGender UNKNOWN
         */
        @PostConstruct
        public void init () {
-               // Fake gender
-               this.gender = Gender.UNKNOWN;
+               // Fake contactGender
+               this.contactGender = Gender.UNKNOWN;
        }
 
        @Override
        public Boolean isOwnContact () {
-               return this.ownContact;
+               return this.contactOwnContact;
        }
 }