]> git.mxchange.org Git - jcontacts-business-core.git/blob - src/org/mxchange/jcontactsbusiness/model/basicdata/BusinessBasicData.java
Updated copyright year
[jcontacts-business-core.git] / src / org / mxchange / jcontactsbusiness / model / basicdata / BusinessBasicData.java
1 /*
2  * Copyright (C) 2016 - 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.jcontactsbusiness.model.basicdata;
18
19 import java.util.Date;
20 import java.util.List;
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.Lob;
31 import javax.persistence.NamedQueries;
32 import javax.persistence.NamedQuery;
33 import javax.persistence.OneToOne;
34 import javax.persistence.Table;
35 import javax.persistence.Temporal;
36 import javax.persistence.TemporalType;
37 import javax.persistence.Transient;
38 import org.apache.commons.lang3.StringUtils;
39 import org.mxchange.jcontactsbusiness.model.branchoffice.BranchOffice;
40 import org.mxchange.jcontactsbusiness.model.employee.BusinessEmployee;
41 import org.mxchange.jcontactsbusiness.model.employee.Employable;
42 import org.mxchange.jcontactsbusiness.model.headquarter.BusinessHeadquarter;
43 import org.mxchange.jcontactsbusiness.model.headquarter.Headquarter;
44 import org.mxchange.jcontactsbusiness.model.logo.BusinessLogo;
45 import org.mxchange.jcontactsbusiness.model.logo.Logo;
46 import org.mxchange.jcontactsbusiness.model.utils.HeadquarterUtils;
47 import org.mxchange.jcoreutils.comparable.ComparableUtils;
48 import org.mxchange.jphone.model.phonenumbers.fax.DialableFaxNumber;
49 import org.mxchange.jphone.model.phonenumbers.fax.FaxNumber;
50 import org.mxchange.jphone.model.phonenumbers.landline.DialableLandLineNumber;
51 import org.mxchange.jphone.model.phonenumbers.landline.LandLineNumber;
52 import org.mxchange.jusercore.model.user.LoginUser;
53 import org.mxchange.jusercore.model.user.User;
54
55 /**
56  * A POJO for business basic data
57  * <p>
58  * @author Roland Häder<roland@mxchange.org>
59  */
60 @Entity (name = "company_basic_data")
61 @Table (name = "company_basic_data")
62 @NamedQueries (
63                 {
64                         @NamedQuery (name = "AllBusinessData", query = "SELECT b FROM company_basic_data AS b ORDER BY b.basicDataId"),}
65 )
66 @SuppressWarnings ("PersistenceUnitPresent")
67 public class BusinessBasicData implements BasicData {
68
69         /**
70          * Serial number
71          */
72         @Transient
73         private static final long serialVersionUID = 470_375_172_748_691L;
74
75         /**
76          * Id number
77          */
78         @Id
79         @Column (name = "company_data_id", nullable = false, updatable = false)
80         @GeneratedValue (strategy = GenerationType.IDENTITY)
81         private Long basicDataId;
82
83         /**
84          * Reference to company branch offices
85          */
86         @Transient
87         private List<BranchOffice> brancheOffices;
88
89         /**
90          * Comments (any)
91          */
92         @Lob
93         @Column (name = "company_comments")
94         private String companyComments;
95
96         /**
97          * Reference to contact person
98          */
99         @JoinColumn (name = "company_contact_employee_id")
100         @OneToOne (targetEntity = BusinessEmployee.class, cascade = CascadeType.REFRESH)
101         private Employable companyContactEmployee;
102
103         /**
104          * Company's main email address (example: info@company.com)
105          */
106         @Column (name = "company_email_address", length = 100)
107         private String companyEmailAddress;
108
109         /**
110          * Timestamp when this entry has been created
111          */
112         @Basic (optional = false)
113         @Temporal (TemporalType.TIMESTAMP)
114         @Column (name = "company_entry_created", nullable = false, updatable = false)
115         private Date companyEntryCreated;
116
117         /**
118          * Timestamp when this entry has been updated
119          */
120         @Temporal (TemporalType.TIMESTAMP)
121         @Column (name = "company_entry_updated", insertable = false)
122         private Date companyEntryUpdated;
123
124         /**
125          * Company's main fax numbers: +ccxxxxxxxxxx
126          */
127         @JoinColumn (name = "company_fax_number_id")
128         @OneToOne (targetEntity = FaxNumber.class, cascade = CascadeType.ALL)
129         private DialableFaxNumber companyFaxNumber;
130
131         /**
132          * Reference to CEO "employee"
133          */
134         @JoinColumn (name = "company_founder_id")
135         @OneToOne (targetEntity = BusinessEmployee.class, cascade = CascadeType.REFRESH)
136         private Employable companyFounder;
137
138         /**
139          * Reference to headquarter data
140          */
141         @JoinColumn (name = "company_headquarter_data_id")
142         @OneToOne (targetEntity = BusinessHeadquarter.class, cascade = CascadeType.REFRESH)
143         private Headquarter companyHeadquarterData;
144
145         /**
146          * Company's main phone number: +ccxxxxxxxxxx
147          */
148         @JoinColumn (name = "company_landline_number_id")
149         @OneToOne (targetEntity = LandLineNumber.class, cascade = CascadeType.ALL)
150         private DialableLandLineNumber companyLandLineNumber;
151
152         /**
153          * Id number of company logo
154          */
155         @JoinColumn (name = "company_logo_id")
156         @OneToOne (targetEntity = BusinessLogo.class, cascade = CascadeType.REFRESH)
157         private Logo companyLogo;
158
159         /**
160          * Company name
161          */
162         @Column (name = "company_name", unique = true)
163         private String companyName;
164
165         /**
166          * COmpany road number
167          */
168         @Column (name = "company_road_number", length = 10, unique = true)
169         private String companyRoadNumber;
170
171         /**
172          * Short company name
173          */
174         @Basic (optional = false)
175         @Column (name = "company_short_name", length = 100, nullable = false, unique = true)
176         private String companyShortName;
177
178         /**
179          * Tax number
180          */
181         @Column (name = "company_tax_number", length = 30)
182         private String companyTaxNumber;
183
184         /**
185          * User owner instance
186          */
187         @JoinColumn (name = "company_owner_user_id")
188         @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH)
189         private User companyUserOwner;
190
191         /**
192          * URL for company website
193          */
194         @Column (name = "company_website_url")
195         private String companyWebsiteUrl;
196
197         /**
198          * Default constructor, required for JPA
199          */
200         public BusinessBasicData () {
201         }
202
203         /**
204          * Constructor with company short name
205          * <p>
206          * @param companyShortName Company short name
207          */
208         public BusinessBasicData (final String companyShortName) {
209                 // Call other constructor
210                 this();
211
212                 // First, validate all parameter
213                 if (null == companyShortName) {
214                         // Is null
215                         throw new NullPointerException("companyShortName is null"); //NOI18N
216                 } else if (companyShortName.isEmpty()) {
217                         // Is null
218                         throw new IllegalArgumentException("companyShortName is empty"); //NOI18N
219                 }
220
221                 // Set company short name
222                 this.companyShortName = companyShortName;
223         }
224
225         @Override
226         public int compareTo (final BasicData basicData) {
227                 // Check parameter on null-reference and equality to this
228                 if (null == basicData) {
229                         // Should not happen
230                         throw new NullPointerException("basicData is null"); //NOI18N
231                 } else if (Objects.equals(this, basicData)) {
232                         // Same object
233                         return 0;
234                 }
235
236                 // Init comparators
237                 final int comparators[] = {
238                         // First compare company short name
239                         StringUtils.compareIgnoreCase(this.getCompanyShortName(), basicData.getCompanyShortName()),
240                         // ... 2nd compare company name
241                         StringUtils.compareIgnoreCase(this.getCompanyName(), basicData.getCompanyName()),
242                         // ... next tax number
243                         StringUtils.compareIgnoreCase(this.getCompanyTaxNumber(), basicData.getCompanyTaxNumber()),
244                         // ... and email address
245                         StringUtils.compareIgnoreCase(this.getCompanyEmailAddress(), basicData.getCompanyEmailAddress()),
246                         // ... head quarter data
247                         HeadquarterUtils.compare(this.getCompanyHeadquarterData(), basicData.getCompanyHeadquarterData())
248                 };
249
250                 // Check all values
251                 final int comparison = ComparableUtils.checkAll(comparators);
252
253                 // Return value
254                 return comparison;
255         }
256
257         @Override
258         public boolean equals (final Object object) {
259                 if (null == object) {
260                         return false;
261                 } else if (this.getClass() != object.getClass()) {
262                         return false;
263                 }
264
265                 final BasicData basicData = (BasicData) object;
266
267                 if (!Objects.equals(this.getBasicDataId(), basicData.getBasicDataId())) {
268                         return false;
269                 } else if (!Objects.equals(this.getCompanyComments(), basicData.getCompanyComments())) {
270                         return false;
271                 } else if (!Objects.equals(this.getCompanyEmailAddress(), basicData.getCompanyEmailAddress())) {
272                         return false;
273                 } else if (!Objects.equals(this.getCompanyFaxNumber(), basicData.getCompanyFaxNumber())) {
274                         return false;
275                 } else if (!Objects.equals(this.getCompanyLandLineNumber(), basicData.getCompanyLandLineNumber())) {
276                         return false;
277                 } else if (!Objects.equals(this.getCompanyLogo(), basicData.getCompanyLogo())) {
278                         return false;
279                 } else if (!Objects.equals(this.getCompanyName(), basicData.getCompanyName())) {
280                         return false;
281                 } else if (!Objects.equals(this.getCompanyRoadNumber(), basicData.getCompanyRoadNumber())) {
282                         return false;
283                 } else if (!Objects.equals(this.getCompanyShortName(), basicData.getCompanyShortName())) {
284                         return false;
285                 } else if (!Objects.equals(this.getCompanyTaxNumber(), basicData.getCompanyTaxNumber())) {
286                         return false;
287                 } else if (!Objects.equals(this.getCompanyUserOwner(), basicData.getCompanyUserOwner())) {
288                         return false;
289                 } else if (!Objects.equals(this.getCompanyWebsiteUrl(), basicData.getCompanyWebsiteUrl())) {
290                         return false;
291                 }
292
293                 return true;
294         }
295
296         @Override
297         public Long getBasicDataId () {
298                 return this.basicDataId;
299         }
300
301         @Override
302         public void setBasicDataId (final Long basicDataId) {
303                 this.basicDataId = basicDataId;
304         }
305
306         @Override
307         @SuppressWarnings ("ReturnOfCollectionOrArrayField")
308         public List<BranchOffice> getBrancheOffices () {
309                 return this.brancheOffices;
310         }
311
312         @Override
313         @SuppressWarnings ("AssignmentToCollectionOrArrayFieldFromParameter")
314         public void setBrancheOffices (final List<BranchOffice> brancheOffices) {
315                 this.brancheOffices = brancheOffices;
316         }
317
318         @Override
319         public String getCompanyComments () {
320                 return this.companyComments;
321         }
322
323         @Override
324         public void setCompanyComments (final String companyComments) {
325                 this.companyComments = companyComments;
326         }
327
328         @Override
329         public Employable getCompanyContactEmployee () {
330                 return this.companyContactEmployee;
331         }
332
333         @Override
334         public void setCompanyContactEmployee (final Employable companyContactEmployee) {
335                 this.companyContactEmployee = companyContactEmployee;
336         }
337
338         @Override
339         public String getCompanyEmailAddress () {
340                 return this.companyEmailAddress;
341         }
342
343         @Override
344         public void setCompanyEmailAddress (final String companyEmailAddress) {
345                 this.companyEmailAddress = companyEmailAddress;
346         }
347
348         @Override
349         @SuppressWarnings ("ReturnOfDateField")
350         public Date getCompanyEntryCreated () {
351                 return this.companyEntryCreated;
352         }
353
354         @Override
355         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
356         public void setCompanyEntryCreated (final Date companyEntryCreated) {
357                 this.companyEntryCreated = companyEntryCreated;
358         }
359
360         @Override
361         @SuppressWarnings ("ReturnOfDateField")
362         public Date getCompanyEntryUpdated () {
363                 return this.companyEntryUpdated;
364         }
365
366         @Override
367         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
368         public void setCompanyEntryUpdated (final Date companyEntryUpdated) {
369                 this.companyEntryUpdated = companyEntryUpdated;
370         }
371
372         @Override
373         public DialableFaxNumber getCompanyFaxNumber () {
374                 return this.companyFaxNumber;
375         }
376
377         @Override
378         public void setCompanyFaxNumber (final DialableFaxNumber companyFaxNumber) {
379                 this.companyFaxNumber = companyFaxNumber;
380         }
381
382         @Override
383         public Employable getCompanyFounder () {
384                 return this.companyFounder;
385         }
386
387         @Override
388         public void setCompanyFounder (final Employable companyFounder) {
389                 this.companyFounder = companyFounder;
390         }
391
392         @Override
393         public Headquarter getCompanyHeadquarterData () {
394                 return this.companyHeadquarterData;
395         }
396
397         @Override
398         public void setCompanyHeadquarterData (final Headquarter companyHeadquarterData) {
399                 this.companyHeadquarterData = companyHeadquarterData;
400         }
401
402         @Override
403         public DialableLandLineNumber getCompanyLandLineNumber () {
404                 return this.companyLandLineNumber;
405         }
406
407         @Override
408         public void setCompanyLandLineNumber (final DialableLandLineNumber companyLandLineNumber) {
409                 this.companyLandLineNumber = companyLandLineNumber;
410         }
411
412         @Override
413         public Logo getCompanyLogo () {
414                 return this.companyLogo;
415         }
416
417         @Override
418         public void setCompanyLogo (final Logo companyLogoId) {
419                 this.companyLogo = companyLogoId;
420         }
421
422         @Override
423         public String getCompanyName () {
424                 return this.companyName;
425         }
426
427         @Override
428         public void setCompanyName (final String companyName) {
429                 this.companyName = companyName;
430         }
431
432         @Override
433         public String getCompanyRoadNumber () {
434                 return this.companyRoadNumber;
435         }
436
437         @Override
438         public void setCompanyRoadNumber (final String companyRoadNumber) {
439                 this.companyRoadNumber = companyRoadNumber;
440         }
441
442         @Override
443         public String getCompanyShortName () {
444                 return this.companyShortName;
445         }
446
447         @Override
448         public void setCompanyShortName (final String companyShortName) {
449                 this.companyShortName = companyShortName;
450         }
451
452         @Override
453         public String getCompanyTaxNumber () {
454                 return this.companyTaxNumber;
455         }
456
457         @Override
458         public void setCompanyTaxNumber (final String companyTaxNumber) {
459                 this.companyTaxNumber = companyTaxNumber;
460         }
461
462         @Override
463         public User getCompanyUserOwner () {
464                 return this.companyUserOwner;
465         }
466
467         @Override
468         public void setCompanyUserOwner (final User companyUserOwner) {
469                 this.companyUserOwner = companyUserOwner;
470         }
471
472         @Override
473         public String getCompanyWebsiteUrl () {
474                 return this.companyWebsiteUrl;
475         }
476
477         @Override
478         public void setCompanyWebsiteUrl (final String companyWebsiteUrl) {
479                 this.companyWebsiteUrl = companyWebsiteUrl;
480         }
481
482         @Override
483         public int hashCode () {
484                 int hash = 3;
485
486                 hash = 37 * hash + Objects.hashCode(this.getBasicDataId());
487                 hash = 37 * hash + Objects.hashCode(this.getCompanyComments());
488                 hash = 37 * hash + Objects.hashCode(this.getCompanyEmailAddress());
489                 hash = 37 * hash + Objects.hashCode(this.getCompanyFaxNumber());
490                 hash = 37 * hash + Objects.hashCode(this.getCompanyLandLineNumber());
491                 hash = 37 * hash + Objects.hashCode(this.getCompanyLogo());
492                 hash = 37 * hash + Objects.hashCode(this.getCompanyName());
493                 hash = 37 * hash + Objects.hashCode(this.getCompanyRoadNumber());
494                 hash = 37 * hash + Objects.hashCode(this.getCompanyShortName());
495                 hash = 37 * hash + Objects.hashCode(this.getCompanyTaxNumber());
496                 hash = 37 * hash + Objects.hashCode(this.getCompanyUserOwner());
497                 hash = 37 * hash + Objects.hashCode(this.getCompanyWebsiteUrl());
498
499                 return hash;
500         }
501
502 }