]> git.mxchange.org Git - jbonuscard-core.git/blob - src/org/mxchange/jbonuscard/model/bonus_card/RoyalityCard.java
Updated copyright year
[jbonuscard-core.git] / src / org / mxchange / jbonuscard / model / bonus_card / RoyalityCard.java
1 /*
2  * Copyright (C) 2017 - 2024 Free Software Foundation
3  *
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.
8  *
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.
13  *
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/>.
16  */
17 package org.mxchange.jbonuscard.model.bonus_card;
18
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.OneToOne;
31 import javax.persistence.Table;
32 import javax.persistence.Temporal;
33 import javax.persistence.TemporalType;
34 import javax.persistence.Transient;
35 import org.apache.commons.lang3.StringUtils;
36 import org.mxchange.jcontacts.model.contact.Contact;
37 import org.mxchange.jcontacts.model.contact.UserContact;
38 import org.mxchange.jcontacts.model.utils.ContactUtils;
39 import org.mxchange.jcontactsbusiness.model.basicdata.BasicData;
40 import org.mxchange.jcontactsbusiness.model.basicdata.BusinessBasicData;
41 import org.mxchange.jcontactsbusiness.model.utils.BasicDataUtils;
42 import org.mxchange.jcoreutils.comparable.ComparableUtils;
43 import org.mxchange.jcustomercore.model.customer.ContactCustomer;
44 import org.mxchange.jcustomercore.model.customer.Customer;
45 import org.mxchange.jcustomercore.model.utils.CustomerUtils;
46
47 /**
48  * A POJO (entity) for bonus cards
49  * <p>
50  * @author Roland Häder<roland@mxchange.org>
51  */
52 @Entity (name = "bonus_cards")
53 @Table (
54                 name = "bonus_cards"
55 )
56 @SuppressWarnings ("PersistenceUnitPresent")
57 public class RoyalityCard implements BonusCard {
58
59         /**
60          * Serial number
61          */
62         @Transient
63         private static final long serialVersionUID = 12_586_367_165_980L;
64
65         /**
66          * Bar code on bonus card
67          */
68         @Column (name = "bonus_card_bar_code", unique = true)
69         private String bonusCardBarCode;
70
71         /**
72          * The contact that this card is assigned to
73          */
74         @JoinColumn (name = "bonus_card_contact_id", referencedColumnName = "contact_id", nullable = false)
75         @OneToOne (targetEntity = UserContact.class, cascade = CascadeType.REFRESH, optional = false)
76         private Contact bonusCardContact;
77
78         /**
79          * Bonus card customer id
80          */
81         @JoinColumn (name = "bonus_card_customer_id", referencedColumnName = "customer_id")
82         @OneToOne (targetEntity = ContactCustomer.class, cascade = CascadeType.REFRESH)
83         private Customer bonusCardCustomer;
84
85         /**
86          * When this entry has been created
87          */
88         @Basic (optional = false)
89         @Column (name = "bonus_card_entry_created", updatable = false, nullable = false)
90         @Temporal (TemporalType.TIMESTAMP)
91         private Date bonusCardEntryCreated;
92
93         /**
94          * When this entry has been updated
95          */
96         @Column (name = "bonus_card_entry_updated", insertable = false)
97         @Temporal (TemporalType.TIMESTAMP)
98         private Date bonusCardEntryUpdated;
99
100         /**
101          * Id number
102          */
103         @Id
104         @GeneratedValue (strategy = GenerationType.IDENTITY)
105         @Column (name = "bonus_card_id", nullable = false, updatable = false)
106         private Long bonusCardId;
107
108         /**
109          * Issuing company of this card
110          */
111         @JoinColumn (name = "bonus_card_issuer_id", referencedColumnName = "company_data_id", nullable = false)
112         @OneToOne (targetEntity = BusinessBasicData.class, cascade = CascadeType.REFRESH, optional = false)
113         private BasicData bonusCardIssuer;
114
115         /**
116          * Bonus card number
117          */
118         @Column (name = "bonus_card_number")
119         private String bonusCardNumber;
120
121         /**
122          * Partnering/branding company of this card
123          */
124         @JoinColumn (name = "bonus_card_partner_id", referencedColumnName = "company_data_id")
125         @OneToOne (targetEntity = BusinessBasicData.class, cascade = CascadeType.REFRESH)
126         private BasicData bonusCardPartner;
127
128         /**
129          * Default constructor (required for JPA)
130          */
131         public RoyalityCard () {
132         }
133
134         /**
135          * Constructor with all required fields
136          * <p>
137          * @param bonusCardContact Contact instance
138          * @param bonusCardIssuer  Issuing company instance
139          */
140         public RoyalityCard (final Contact bonusCardContact, final BasicData bonusCardIssuer) {
141                 // Call other constructor first
142                 this();
143
144                 // Validate parameter
145                 if (null == bonusCardContact) {
146                         // Throw NPE
147                         throw new NullPointerException("bonusCardContact is null"); //NOI18N
148                 } else if (bonusCardContact.getContactId() == null) {
149                         // Throw it again
150                         throw new NullPointerException("bonusCardContact.contactId is null"); //NOI18N
151                 } else if (bonusCardContact.getContactId() < 1) {
152                         // Throw IAE
153                         throw new IllegalArgumentException(MessageFormat.format("bonusCardContact.contactId={0} is invalid", bonusCardContact.getContactId())); //NOI18N
154                 } else if (null == bonusCardIssuer) {
155                         // Throw NPE
156                         throw new NullPointerException("bonusCardOwner is null"); //NOI18N
157                 } else if (bonusCardIssuer.getBasicDataId() == null) {
158                         // Throw it again
159                         throw new NullPointerException("bonusCardOwner.baseDataId is null"); //NOI18N
160                 } else if (bonusCardIssuer.getBasicDataId() < 1) {
161                         // Throw IAE
162                         throw new IllegalArgumentException(MessageFormat.format("bonusCardOwner.baseDataId={0} is invalid", bonusCardIssuer.getBasicDataId())); //NOI18N
163                 }
164
165                 // Set all
166                 this.bonusCardContact = bonusCardContact;
167                 this.bonusCardIssuer = bonusCardIssuer;
168         }
169
170         @Override
171         public int compareTo (final BonusCard bonusCard) {
172                 // Check parameter on null-reference and equality to this
173                 if (null == bonusCard) {
174                         // Should not happen
175                         throw new NullPointerException("bonusCard is null"); //NOI18N
176                 } else if (bonusCard.equals(this)) {
177                         // Same object
178                         return 0;
179                 }
180
181                 // Init comparators
182                 final int comparators[] = {
183                         // First compare by number
184                         StringUtils.compare(this.getBonusCardNumber(), bonusCard.getBonusCardNumber()),
185                         // ... next by bar code
186                         StringUtils.compare(this.getBonusCardBarCode(), bonusCard.getBonusCardBarCode()),
187                         // ... customer data
188                         CustomerUtils.compare(this.getBonusCardCustomer(), bonusCard.getBonusCardCustomer()),
189                         // ... contact data (card holder)
190                         ContactUtils.compare(this.getBonusCardContact(), bonusCard.getBonusCardContact()),
191                         // ... issuing company data
192                         BasicDataUtils.compare(this.getBonusCardIssuer(), bonusCard.getBonusCardIssuer()),
193                         // ... partner company data
194                         BasicDataUtils.compare(this.getBonusCardPartner(), bonusCard.getBonusCardPartner())
195                 };
196
197                 // Check all values
198                 final int comparison = ComparableUtils.checkAll(comparators);
199
200                 // Return value
201                 return comparison;
202         }
203
204         @Override
205         public boolean equals (final Object object) {
206                 if (this == object) {
207                         return true;
208                 } else if (null == object) {
209                         return false;
210                 }
211                 if (this.getClass() != object.getClass()) {
212                         return false;
213                 }
214
215                 final BonusCard bonusCard = (BonusCard) object;
216
217                 if (!Objects.equals(this.getBonusCardBarCode(), bonusCard.getBonusCardBarCode())) {
218                         return false;
219                 } else if (!Objects.equals(this.getBonusCardContact(), bonusCard.getBonusCardContact())) {
220                         return false;
221                 } else if (!Objects.equals(this.getBonusCardCustomer(), bonusCard.getBonusCardCustomer())) {
222                         return false;
223                 } else if (!Objects.equals(this.getBonusCardId(), bonusCard.getBonusCardId())) {
224                         return false;
225                 } else if (!Objects.equals(this.getBonusCardIssuer(), bonusCard.getBonusCardIssuer())) {
226                         return false;
227                 } else if (!Objects.equals(this.getBonusCardNumber(), bonusCard.getBonusCardNumber())) {
228                         return false;
229                 } else if (!Objects.equals(this.getBonusCardPartner(), bonusCard.getBonusCardPartner())) {
230                         return false;
231                 }
232
233                 return true;
234         }
235
236         @Override
237         public String getBonusCardBarCode () {
238                 return this.bonusCardBarCode;
239         }
240
241         @Override
242         public void setBonusCardBarCode (final String bonusCardBarCode) {
243                 this.bonusCardBarCode = bonusCardBarCode;
244         }
245
246         @Override
247         public Contact getBonusCardContact () {
248                 return this.bonusCardContact;
249         }
250
251         @Override
252         public void setBonusCardContact (final Contact bonusCardContact) {
253                 this.bonusCardContact = bonusCardContact;
254         }
255
256         @Override
257         public Customer getBonusCardCustomer () {
258                 return this.bonusCardCustomer;
259         }
260
261         @Override
262         public void setBonusCardCustomer (final Customer bonusCardCustomer) {
263                 this.bonusCardCustomer = bonusCardCustomer;
264         }
265
266         @Override
267         @SuppressWarnings ("ReturnOfDateField")
268         public Date getBonusCardEntryCreated () {
269                 return this.bonusCardEntryCreated;
270         }
271
272         @Override
273         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
274         public void setBonusCardEntryCreated (final Date bonusCardEntryCreated) {
275                 this.bonusCardEntryCreated = bonusCardEntryCreated;
276         }
277
278         @Override
279         @SuppressWarnings ("ReturnOfDateField")
280         public Date getBonusCardEntryUpdated () {
281                 return this.bonusCardEntryUpdated;
282         }
283
284         @Override
285         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
286         public void setBonusCardEntryUpdated (final Date bonusCardEntryUpdated) {
287                 this.bonusCardEntryUpdated = bonusCardEntryUpdated;
288         }
289
290         @Override
291         public Long getBonusCardId () {
292                 return this.bonusCardId;
293         }
294
295         @Override
296         public void setBonusCardId (final Long bonusCardId) {
297                 this.bonusCardId = bonusCardId;
298         }
299
300         @Override
301         public BasicData getBonusCardIssuer () {
302                 return this.bonusCardIssuer;
303         }
304
305         @Override
306         public void setBonusCardIssuer (final BasicData bonusCardIssuer) {
307                 this.bonusCardIssuer = bonusCardIssuer;
308         }
309
310         @Override
311         public String getBonusCardNumber () {
312                 return this.bonusCardNumber;
313         }
314
315         @Override
316         public void setBonusCardNumber (final String bonusCardNumber) {
317                 this.bonusCardNumber = bonusCardNumber;
318         }
319
320         @Override
321         public BasicData getBonusCardPartner () {
322                 return this.bonusCardPartner;
323         }
324
325         @Override
326         public void setBonusCardPartner (final BasicData bonusCardPartner) {
327                 this.bonusCardPartner = bonusCardPartner;
328         }
329
330         @Override
331         public int hashCode () {
332                 int hash = 5;
333
334                 hash = 13 * hash + Objects.hashCode(this.getBonusCardBarCode());
335                 hash = 13 * hash + Objects.hashCode(this.getBonusCardContact());
336                 hash = 13 * hash + Objects.hashCode(this.getBonusCardCustomer());
337                 hash = 13 * hash + Objects.hashCode(this.getBonusCardId());
338                 hash = 13 * hash + Objects.hashCode(this.getBonusCardIssuer());
339                 hash = 13 * hash + Objects.hashCode(this.getBonusCardNumber());
340                 hash = 13 * hash + Objects.hashCode(this.getBonusCardPartner());
341
342                 return hash;
343         }
344
345 }