/*
- * 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
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.
* @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> {
/**
/**
* 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;
}
/**
* Compares two contacts with each other
* <p>
* @param contact Contact comparator
+ * <p>
* @return Comparison value
*/
@Override
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?
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;
}
}