2 * Copyright (C) 2016 - 2024 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.text.MessageFormat;
20 import java.util.Date;
21 import java.util.Objects;
22 import javax.persistence.Basic;
23 import javax.persistence.CascadeType;
24 import javax.persistence.Column;
25 import javax.persistence.Entity;
26 import javax.persistence.GeneratedValue;
27 import javax.persistence.GenerationType;
28 import javax.persistence.Id;
29 import javax.persistence.JoinColumn;
30 import javax.persistence.NamedQueries;
31 import javax.persistence.NamedQuery;
32 import javax.persistence.OneToOne;
33 import javax.persistence.Table;
34 import javax.persistence.Temporal;
35 import javax.persistence.TemporalType;
36 import javax.persistence.Transient;
37 import org.mxchange.jaddressbook.model.addressbook.Addressbook;
38 import org.mxchange.jaddressbook.model.addressbook.UserAddressbook;
39 import org.mxchange.jaddressbook.model.utils.AddressbookUtils;
40 import org.mxchange.jcontacts.model.contact.Contact;
41 import org.mxchange.jcontacts.model.contact.UserContact;
42 import org.mxchange.jcontacts.model.utils.ContactUtils;
43 import org.mxchange.jcontactsbusiness.model.basicdata.BasicData;
44 import org.mxchange.jcontactsbusiness.model.basicdata.BusinessBasicData;
45 import org.mxchange.jcontactsbusiness.model.utils.BasicDataUtils;
46 import org.mxchange.jcoreutils.comparable.ComparableUtils;
49 * A POJO for address book entries
51 * @author Roland Häder<roland@mxchange.org>
53 @Entity (name = "addressbook_entries")
54 @Table (name = "addressbook_entries")
57 @NamedQuery (name = "AllAddressBookEntries", query = "SELECT e FROM addressbook_entries AS e ORDER BY e.addressbookEntryId ASC")
60 @SuppressWarnings ("PersistenceUnitPresent")
61 public class UserAddressbookEntry implements AddressbookEntry {
67 private static final long serialVersionUID = 178_581_768_581_960L;
70 * Connection to table "business_contacts" (commercial contacts)
72 @JoinColumn (name = "entry_business_contact_id", updatable = false)
73 @OneToOne (targetEntity = BusinessBasicData.class, cascade = CascadeType.REFRESH)
74 private BasicData addressbookEntryBusinessBasicData;
77 * When this address book entry has been created
79 @Basic (optional = false)
80 @Temporal (TemporalType.TIMESTAMP)
81 @Column (name = "entry_created", updatable = false, nullable = false)
82 private Date addressbookEntryCreated;
88 @GeneratedValue (strategy = GenerationType.IDENTITY)
89 @Column (name = "entry_id", nullable = false, updatable = false)
90 private Long addressbookEntryId;
93 * Connection to table "contacts" (private contacts)
95 @JoinColumn (name = "entry_private_contact_id", updatable = false)
96 @OneToOne (targetEntity = UserContact.class, cascade = CascadeType.REFRESH)
97 private Contact addressbookEntryPrivateContact;
100 * When this address book entry has been updated
102 @Temporal (TemporalType.TIMESTAMP)
103 @Column (name = "entry_updated", insertable = false, nullable = false)
104 private Date addressbookEntryUpdated;
107 * Connection to table "address books"
109 @JoinColumn (name = "entry_addressbook_id", nullable = false, updatable = false)
110 @OneToOne (targetEntity = UserAddressbook.class, cascade = CascadeType.REFRESH, optional = false)
111 private Addressbook entryAddressbook;
114 * Default constructor for the JPA, please use other constructor if you need
115 * a properly set instance of this class.
117 public UserAddressbookEntry () {
121 * Constructor with all mandatory entity attributes, except timestamps and
124 * @param addressbook Address book instance to link this entry to
126 public UserAddressbookEntry (final Addressbook addressbook) {
128 if (null == addressbook) {
130 throw new NullPointerException("Parameter 'addressbook' is null");
131 } else if (addressbook.getAddressbookId() == null) {
133 throw new NullPointerException("addressbook.addressbookId is null");
134 } else if (addressbook.getAddressbookId() < 1) {
136 throw new IllegalArgumentException(MessageFormat.format("addressbook.addressbookId={0} is invalid", addressbook.getAddressbookId()));
140 this.entryAddressbook = addressbook;
144 public int compareTo (final AddressbookEntry addressbookEntry) {
145 // Parameter should not be NULL
146 if (null == addressbookEntry) {
148 throw new NullPointerException("Parameter 'addressbookEntry' is null"); //NOI18N
149 } else if (addressbookEntry.equals(this)) {
155 final int comparitors[] = {
156 // First compare address books
157 AddressbookUtils.compare(this.getEntryAddressbook(), addressbookEntry.getEntryAddressbook()),
158 // ... then business address
159 BasicDataUtils.compare(this.getAddressbookEntryBusinessBasicData(), addressbookEntry.getAddressbookEntryBusinessBasicData()),
160 // ... then private contact
161 ContactUtils.compare(this.getAddressbookEntryPrivateContact(), addressbookEntry.getAddressbookEntryPrivateContact())
165 final int comparison = ComparableUtils.checkAll(comparitors);
172 public boolean equals (final Object object) {
173 if (null == object) {
175 } else if (this.getClass() != object.getClass()) {
179 final AddressbookEntry addressbookEntry = (AddressbookEntry) object;
181 if (!Objects.equals(this.getAddressbookEntryBusinessBasicData(), addressbookEntry.getAddressbookEntryBusinessBasicData())) {
183 } else if (!Objects.equals(this.getAddressbookEntryId(), addressbookEntry.getAddressbookEntryId())) {
185 } else if (!Objects.equals(this.getAddressbookEntryPrivateContact(), addressbookEntry.getAddressbookEntryPrivateContact())) {
187 } else if (!Objects.equals(this.getEntryAddressbook(), addressbookEntry.getEntryAddressbook())) {
195 public BasicData getAddressbookEntryBusinessBasicData () {
196 return this.addressbookEntryBusinessBasicData;
200 public void setAddressbookEntryBusinessBasicData (final BasicData addressbookEntryBusinessBasicData) {
201 this.addressbookEntryBusinessBasicData = addressbookEntryBusinessBasicData;
205 @SuppressWarnings ("ReturnOfDateField")
206 public Date getAddressbookEntryCreated () {
207 return this.addressbookEntryCreated;
211 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
212 public void setAddressbookEntryCreated (final Date addressbookEntryCreated) {
213 this.addressbookEntryCreated = addressbookEntryCreated;
217 public Long getAddressbookEntryId () {
218 return this.addressbookEntryId;
222 public void setAddressbookEntryId (final Long addressbookEntryId) {
223 this.addressbookEntryId = addressbookEntryId;
227 public Contact getAddressbookEntryPrivateContact () {
228 return this.addressbookEntryPrivateContact;
232 public void setAddressbookEntryPrivateContact (final Contact addressbookEntryPrivateContact) {
233 this.addressbookEntryPrivateContact = addressbookEntryPrivateContact;
237 @SuppressWarnings ("ReturnOfDateField")
238 public Date getAddressbookEntryUpdated () {
239 return this.addressbookEntryUpdated;
243 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
244 public void setAddressbookEntryUpdated (final Date addressbookEntryUpdated) {
245 this.addressbookEntryUpdated = addressbookEntryUpdated;
249 public Addressbook getEntryAddressbook () {
250 return this.entryAddressbook;
254 public void setEntryAddressbook (final Addressbook entryAddressbook) {
255 this.entryAddressbook = entryAddressbook;
259 public int hashCode () {
262 hash = 19 * hash + Objects.hashCode(this.getAddressbookEntryBusinessBasicData());
263 hash = 19 * hash + Objects.hashCode(this.getAddressbookEntryId());
264 hash = 19 * hash + Objects.hashCode(this.getAddressbookEntryPrivateContact());
265 hash = 19 * hash + Objects.hashCode(this.getEntryAddressbook());