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.jcontactsbusiness.model.basicdata;
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;
56 * A POJO for business basic data
58 * @author Roland Häder<roland@mxchange.org>
60 @Entity (name = "company_basic_data")
61 @Table (name = "company_basic_data")
64 @NamedQuery (name = "AllBusinessData", query = "SELECT b FROM company_basic_data AS b ORDER BY b.basicDataId"),}
66 @SuppressWarnings ("PersistenceUnitPresent")
67 public class BusinessBasicData implements BasicData {
73 private static final long serialVersionUID = 470_375_172_748_691L;
79 @Column (name = "company_data_id", nullable = false, updatable = false)
80 @GeneratedValue (strategy = GenerationType.IDENTITY)
81 private Long basicDataId;
84 * Reference to company branch offices
87 private List<BranchOffice> brancheOffices;
93 @Column (name = "company_comments")
94 private String companyComments;
97 * Reference to contact person
99 @JoinColumn (name = "company_contact_employee_id")
100 @OneToOne (targetEntity = BusinessEmployee.class, cascade = CascadeType.REFRESH)
101 private Employable companyContactEmployee;
104 * Company's main email address (example: info@company.com)
106 @Column (name = "company_email_address", length = 100)
107 private String companyEmailAddress;
110 * Timestamp when this entry has been created
112 @Basic (optional = false)
113 @Temporal (TemporalType.TIMESTAMP)
114 @Column (name = "company_entry_created", nullable = false, updatable = false)
115 private Date companyEntryCreated;
118 * Timestamp when this entry has been updated
120 @Temporal (TemporalType.TIMESTAMP)
121 @Column (name = "company_entry_updated", insertable = false)
122 private Date companyEntryUpdated;
125 * Company's main fax numbers: +ccxxxxxxxxxx
127 @JoinColumn (name = "company_fax_number_id")
128 @OneToOne (targetEntity = FaxNumber.class, cascade = CascadeType.ALL)
129 private DialableFaxNumber companyFaxNumber;
132 * Reference to CEO "employee"
134 @JoinColumn (name = "company_founder_id")
135 @OneToOne (targetEntity = BusinessEmployee.class, cascade = CascadeType.REFRESH)
136 private Employable companyFounder;
139 * Reference to headquarter data
141 @JoinColumn (name = "company_headquarter_data_id")
142 @OneToOne (targetEntity = BusinessHeadquarter.class, cascade = CascadeType.REFRESH)
143 private Headquarter companyHeadquarterData;
146 * Company's main phone number: +ccxxxxxxxxxx
148 @JoinColumn (name = "company_landline_number_id")
149 @OneToOne (targetEntity = LandLineNumber.class, cascade = CascadeType.ALL)
150 private DialableLandLineNumber companyLandLineNumber;
153 * Id number of company logo
155 @JoinColumn (name = "company_logo_id")
156 @OneToOne (targetEntity = BusinessLogo.class, cascade = CascadeType.REFRESH)
157 private Logo companyLogo;
162 @Column (name = "company_name", unique = true)
163 private String companyName;
166 * COmpany road number
168 @Column (name = "company_road_number", length = 10, unique = true)
169 private String companyRoadNumber;
174 @Basic (optional = false)
175 @Column (name = "company_short_name", length = 100, nullable = false, unique = true)
176 private String companyShortName;
181 @Column (name = "company_tax_number", length = 30)
182 private String companyTaxNumber;
185 * User owner instance
187 @JoinColumn (name = "company_owner_user_id")
188 @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH)
189 private User companyUserOwner;
192 * URL for company website
194 @Column (name = "company_website_url")
195 private String companyWebsiteUrl;
198 * Default constructor, required for JPA
200 public BusinessBasicData () {
204 * Constructor with company short name
206 * @param companyShortName Company short name
208 public BusinessBasicData (final String companyShortName) {
209 // Call other constructor
212 // First, validate all parameter
213 if (null == companyShortName) {
215 throw new NullPointerException("companyShortName is null"); //NOI18N
216 } else if (companyShortName.isEmpty()) {
218 throw new IllegalArgumentException("companyShortName is empty"); //NOI18N
221 // Set company short name
222 this.companyShortName = companyShortName;
226 public int compareTo (final BasicData basicData) {
227 // Check parameter on null-reference and equality to this
228 if (null == basicData) {
230 throw new NullPointerException("basicData is null"); //NOI18N
231 } else if (Objects.equals(this, basicData)) {
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())
251 final int comparison = ComparableUtils.checkAll(comparators);
258 public boolean equals (final Object object) {
259 if (null == object) {
261 } else if (this.getClass() != object.getClass()) {
265 final BasicData basicData = (BasicData) object;
267 if (!Objects.equals(this.getBasicDataId(), basicData.getBasicDataId())) {
269 } else if (!Objects.equals(this.getCompanyComments(), basicData.getCompanyComments())) {
271 } else if (!Objects.equals(this.getCompanyEmailAddress(), basicData.getCompanyEmailAddress())) {
273 } else if (!Objects.equals(this.getCompanyFaxNumber(), basicData.getCompanyFaxNumber())) {
275 } else if (!Objects.equals(this.getCompanyLandLineNumber(), basicData.getCompanyLandLineNumber())) {
277 } else if (!Objects.equals(this.getCompanyLogo(), basicData.getCompanyLogo())) {
279 } else if (!Objects.equals(this.getCompanyName(), basicData.getCompanyName())) {
281 } else if (!Objects.equals(this.getCompanyRoadNumber(), basicData.getCompanyRoadNumber())) {
283 } else if (!Objects.equals(this.getCompanyShortName(), basicData.getCompanyShortName())) {
285 } else if (!Objects.equals(this.getCompanyTaxNumber(), basicData.getCompanyTaxNumber())) {
287 } else if (!Objects.equals(this.getCompanyUserOwner(), basicData.getCompanyUserOwner())) {
289 } else if (!Objects.equals(this.getCompanyWebsiteUrl(), basicData.getCompanyWebsiteUrl())) {
297 public Long getBasicDataId () {
298 return this.basicDataId;
302 public void setBasicDataId (final Long basicDataId) {
303 this.basicDataId = basicDataId;
307 @SuppressWarnings ("ReturnOfCollectionOrArrayField")
308 public List<BranchOffice> getBrancheOffices () {
309 return this.brancheOffices;
313 @SuppressWarnings ("AssignmentToCollectionOrArrayFieldFromParameter")
314 public void setBrancheOffices (final List<BranchOffice> brancheOffices) {
315 this.brancheOffices = brancheOffices;
319 public String getCompanyComments () {
320 return this.companyComments;
324 public void setCompanyComments (final String companyComments) {
325 this.companyComments = companyComments;
329 public Employable getCompanyContactEmployee () {
330 return this.companyContactEmployee;
334 public void setCompanyContactEmployee (final Employable companyContactEmployee) {
335 this.companyContactEmployee = companyContactEmployee;
339 public String getCompanyEmailAddress () {
340 return this.companyEmailAddress;
344 public void setCompanyEmailAddress (final String companyEmailAddress) {
345 this.companyEmailAddress = companyEmailAddress;
349 @SuppressWarnings ("ReturnOfDateField")
350 public Date getCompanyEntryCreated () {
351 return this.companyEntryCreated;
355 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
356 public void setCompanyEntryCreated (final Date companyEntryCreated) {
357 this.companyEntryCreated = companyEntryCreated;
361 @SuppressWarnings ("ReturnOfDateField")
362 public Date getCompanyEntryUpdated () {
363 return this.companyEntryUpdated;
367 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
368 public void setCompanyEntryUpdated (final Date companyEntryUpdated) {
369 this.companyEntryUpdated = companyEntryUpdated;
373 public DialableFaxNumber getCompanyFaxNumber () {
374 return this.companyFaxNumber;
378 public void setCompanyFaxNumber (final DialableFaxNumber companyFaxNumber) {
379 this.companyFaxNumber = companyFaxNumber;
383 public Employable getCompanyFounder () {
384 return this.companyFounder;
388 public void setCompanyFounder (final Employable companyFounder) {
389 this.companyFounder = companyFounder;
393 public Headquarter getCompanyHeadquarterData () {
394 return this.companyHeadquarterData;
398 public void setCompanyHeadquarterData (final Headquarter companyHeadquarterData) {
399 this.companyHeadquarterData = companyHeadquarterData;
403 public DialableLandLineNumber getCompanyLandLineNumber () {
404 return this.companyLandLineNumber;
408 public void setCompanyLandLineNumber (final DialableLandLineNumber companyLandLineNumber) {
409 this.companyLandLineNumber = companyLandLineNumber;
413 public Logo getCompanyLogo () {
414 return this.companyLogo;
418 public void setCompanyLogo (final Logo companyLogoId) {
419 this.companyLogo = companyLogoId;
423 public String getCompanyName () {
424 return this.companyName;
428 public void setCompanyName (final String companyName) {
429 this.companyName = companyName;
433 public String getCompanyRoadNumber () {
434 return this.companyRoadNumber;
438 public void setCompanyRoadNumber (final String companyRoadNumber) {
439 this.companyRoadNumber = companyRoadNumber;
443 public String getCompanyShortName () {
444 return this.companyShortName;
448 public void setCompanyShortName (final String companyShortName) {
449 this.companyShortName = companyShortName;
453 public String getCompanyTaxNumber () {
454 return this.companyTaxNumber;
458 public void setCompanyTaxNumber (final String companyTaxNumber) {
459 this.companyTaxNumber = companyTaxNumber;
463 public User getCompanyUserOwner () {
464 return this.companyUserOwner;
468 public void setCompanyUserOwner (final User companyUserOwner) {
469 this.companyUserOwner = companyUserOwner;
473 public String getCompanyWebsiteUrl () {
474 return this.companyWebsiteUrl;
478 public void setCompanyWebsiteUrl (final String companyWebsiteUrl) {
479 this.companyWebsiteUrl = companyWebsiteUrl;
483 public int hashCode () {
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());