2 * Copyright (C) 2016 - 2022 Free Software Foundation
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 package org.mxchange.jaddressbook.model.addressbook.entry;
19 import java.util.Date;
20 import java.util.Objects;
21 import javax.persistence.Basic;
22 import javax.persistence.CascadeType;
23 import javax.persistence.Column;
24 import javax.persistence.Entity;
25 import javax.persistence.GeneratedValue;
26 import javax.persistence.GenerationType;
27 import javax.persistence.Id;
28 import javax.persistence.JoinColumn;
29 import javax.persistence.NamedQueries;
30 import javax.persistence.NamedQuery;
31 import javax.persistence.OneToOne;
32 import javax.persistence.Table;
33 import javax.persistence.Temporal;
34 import javax.persistence.TemporalType;
35 import javax.persistence.Transient;
36 import org.mxchange.jaddressbook.model.addressbook.Addressbook;
37 import org.mxchange.jaddressbook.model.addressbook.UserAddressbook;
38 import org.mxchange.jcontacts.model.contact.Contact;
39 import org.mxchange.jcontacts.model.contact.UserContact;
40 import org.mxchange.jcontacts.model.utils.ContactUtils;
41 import org.mxchange.jcontactsbusiness.model.basicdata.BasicData;
42 import org.mxchange.jcontactsbusiness.model.basicdata.BusinessBasicData;
43 import org.mxchange.jcontactsbusiness.model.utils.BasicDataUtils;
44 import org.mxchange.jcoreutils.comparable.ComparableUtils;
47 * A POJO for address book entries
49 * @author Roland Häder<roland@mxchange.org>
51 @Entity (name = "addressbook_entries")
52 @Table (name = "addressbook_entries")
55 @NamedQuery (name = "AllAddressBookEntries", query = "SELECT e FROM addressbook_entries AS e ORDER BY e.addressbookEntryId ASC")
58 @SuppressWarnings ("PersistenceUnitPresent")
59 public class UserAddressbookEntry implements AddressbookEntry {
65 private static final long serialVersionUID = 178_581_768_581_960L;
68 * Connection to table "business_contacts" (commercial contacts)
70 @JoinColumn (name = "entry_business_contact_id", updatable = false)
71 @OneToOne (targetEntity = BusinessBasicData.class, cascade = CascadeType.REFRESH)
72 private BasicData addressbookEntryBusinessBasicData;
75 * When this address book entry has been created
77 @Basic (optional = false)
78 @Temporal (TemporalType.TIMESTAMP)
79 @Column (name = "entry_created", updatable = false, nullable = false)
80 private Date addressbookEntryCreated;
86 @GeneratedValue (strategy = GenerationType.IDENTITY)
87 @Column (name = "entry_id", nullable = false, updatable = false)
88 private Long addressbookEntryId;
91 * Connection to table "contacts" (private contacts)
93 @JoinColumn (name = "entry_private_contact_id", updatable = false)
94 @OneToOne (targetEntity = UserContact.class, cascade = CascadeType.REFRESH)
95 private Contact addressbookEntryPrivateContact;
98 * When this address book entry has been updated
100 @Temporal (TemporalType.TIMESTAMP)
101 @Column (name = "entry_updated", insertable = false, nullable = false)
102 private Date addressbookEntryUpdated;
105 * Connection to table "address books"
107 @JoinColumn (name = "entry_addressbook_id", nullable = false, updatable = false)
108 @OneToOne (targetEntity = UserAddressbook.class, cascade = CascadeType.REFRESH, optional = false)
109 private Addressbook entryAddressbook;
112 public int compareTo (final AddressbookEntry addressbookEntry) {
113 // Parameter should not be NULL
114 if (null == addressbookEntry) {
116 throw new NullPointerException("addressbookEntry is null"); //NOI18N
117 } else if (addressbookEntry.equals(this)) {
123 final int comparitors[] = {
124 // First compare address books
125 this.getEntryAddressbook().compareTo(addressbookEntry.getEntryAddressbook()),
126 // ... then business address
127 BasicDataUtils.compare(this.getAddressbookEntryBusinessBasicData(), addressbookEntry.getAddressbookEntryBusinessBasicData()),
128 // ... then private contact
129 ContactUtils.compare(this.getAddressbookEntryPrivateContact(), addressbookEntry.getAddressbookEntryPrivateContact())
133 final int comparison = ComparableUtils.checkAll(comparitors);
140 public boolean equals (final Object object) {
141 if (null == object) {
143 } else if (this.getClass() != object.getClass()) {
147 final AddressbookEntry addressbookEntry = (AddressbookEntry) object;
149 if (!Objects.equals(this.getAddressbookEntryBusinessBasicData(), addressbookEntry.getAddressbookEntryBusinessBasicData())) {
151 } else if (!Objects.equals(this.getAddressbookEntryId(), addressbookEntry.getAddressbookEntryId())) {
153 } else if (!Objects.equals(this.getAddressbookEntryPrivateContact(), addressbookEntry.getAddressbookEntryPrivateContact())) {
155 } else if (!Objects.equals(this.getEntryAddressbook(), addressbookEntry.getEntryAddressbook())) {
163 public BasicData getAddressbookEntryBusinessBasicData () {
164 return this.addressbookEntryBusinessBasicData;
168 public void setAddressbookEntryBusinessBasicData (final BasicData addressbookEntryBusinessBasicData) {
169 this.addressbookEntryBusinessBasicData = addressbookEntryBusinessBasicData;
173 @SuppressWarnings ("ReturnOfDateField")
174 public Date getAddressbookEntryCreated () {
175 return this.addressbookEntryCreated;
179 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
180 public void setAddressbookEntryCreated (final Date addressbookEntryCreated) {
181 this.addressbookEntryCreated = addressbookEntryCreated;
185 public Long getAddressbookEntryId () {
186 return this.addressbookEntryId;
190 public void setAddressbookEntryId (final Long addressbookEntryId) {
191 this.addressbookEntryId = addressbookEntryId;
195 public Contact getAddressbookEntryPrivateContact () {
196 return this.addressbookEntryPrivateContact;
200 public void setAddressbookEntryPrivateContact (final Contact addressbookEntryPrivateContact) {
201 this.addressbookEntryPrivateContact = addressbookEntryPrivateContact;
205 @SuppressWarnings ("ReturnOfDateField")
206 public Date getAddressbookEntryUpdated () {
207 return this.addressbookEntryUpdated;
211 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
212 public void setAddressbookEntryUpdated (final Date addressbookEntryUpdated) {
213 this.addressbookEntryUpdated = addressbookEntryUpdated;
217 public Addressbook getEntryAddressbook () {
218 return this.entryAddressbook;
222 public void setEntryAddressbook (final Addressbook entryAddressbook) {
223 this.entryAddressbook = entryAddressbook;
227 public int hashCode () {
230 hash = 19 * hash + Objects.hashCode(this.getAddressbookEntryBusinessBasicData());
231 hash = 19 * hash + Objects.hashCode(this.getAddressbookEntryId());
232 hash = 19 * hash + Objects.hashCode(this.getAddressbookEntryPrivateContact());
233 hash = 19 * hash + Objects.hashCode(this.getEntryAddressbook());