2 * Copyright (C) 2016 - 2020 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.headquarter.Headquarters;
45 import org.mxchange.jcontactsbusiness.model.logo.BusinessLogo;
46 import org.mxchange.jcontactsbusiness.model.logo.Logo;
47 import org.mxchange.jcoreutils.Comparables;
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"),
67 @SuppressWarnings ("PersistenceUnitPresent")
68 public class BusinessBasicData implements BasicData {
74 private static final long serialVersionUID = 470_375_172_748_691L;
80 @Column (name = "company_data_id", nullable = false, updatable = false)
81 @GeneratedValue (strategy = GenerationType.IDENTITY)
82 private Long basicDataId;
85 * Reference to company branch offices
88 private List<BranchOffice> brancheOffices;
94 @Column (name = "company_comments")
95 private String companyComments;
98 * Reference to contact person
100 @JoinColumn (name = "company_contact_employee_id")
101 @OneToOne (targetEntity = BusinessEmployee.class, cascade = CascadeType.REFRESH)
102 private Employable companyContactEmployee;
105 * Timestamp when this entry has been created
107 @Basic (optional = false)
108 @Temporal (TemporalType.TIMESTAMP)
109 @Column (name = "company_entry_created", nullable = false, updatable = false)
110 private Date companyCreated;
113 * Company's main email address (example: info@company.com)
115 @Column (name = "company_email_address", length = 100)
116 private String companyEmailAddress;
119 * Company's main fax numbers: +ccxxxxxxxxxx
121 @JoinColumn (name = "company_fax_number_id")
122 @OneToOne (targetEntity = FaxNumber.class, cascade = CascadeType.ALL)
123 private DialableFaxNumber companyFaxNumber;
126 * Reference to CEO "employee"
128 @JoinColumn (name = "company_founder_id")
129 @OneToOne (targetEntity = BusinessEmployee.class, cascade = CascadeType.REFRESH)
130 private Employable companyFounder;
133 * Reference to headquarter data
135 @JoinColumn (name = "company_headquarter_data_id")
136 @OneToOne (targetEntity = BusinessHeadquarter.class, cascade = CascadeType.REFRESH)
137 private Headquarter companyHeadquarterData;
140 * Company's main phone number: +ccxxxxxxxxxx
142 @JoinColumn (name = "company_landline_number_id")
143 @OneToOne (targetEntity = LandLineNumber.class, cascade = CascadeType.ALL)
144 private DialableLandLineNumber companyLandLineNumber;
147 * Id number of company logo
149 @JoinColumn (name = "company_logo_id")
150 @OneToOne (targetEntity = BusinessLogo.class, cascade = CascadeType.REFRESH)
151 private Logo companyLogo;
156 @Column (name = "company_name", unique = true)
157 private String companyName;
162 @Basic (optional = false)
163 @Column (name = "company_short_name", length = 100, nullable = false, unique = true)
164 private String companyShortName;
169 @Column (name = "company_tax_number", length = 30)
170 private String companyTaxNumber;
173 * User owner instance
175 @JoinColumn (name = "company_owner_user_id")
176 @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH)
177 private User companyUserOwner;
180 * URL for company website
182 @Column (name = "company_website_url")
183 private String companyWebsiteUrl;
186 * Default constructor, required for JPA
188 public BusinessBasicData () {
192 * Constructor with company short name
194 * @param companyShortName Company short name
196 public BusinessBasicData (final String companyShortName) {
197 // First, validate all parameter
198 if (companyShortName == null) {
200 throw new NullPointerException("companyShortName is null"); //NOI18N
201 } else if (companyShortName.isEmpty()) {
203 throw new IllegalArgumentException("companyShortName is empty"); //NOI18N
206 // Set company short name
207 this.companyShortName = companyShortName;
211 public int compareTo (final BasicData basicData) {
212 // Check parameter on null-reference and equality to this
213 if (null == basicData) {
215 throw new NullPointerException("basicData is null"); //NOI18N
216 } else if (basicData.equals(this)) {
222 final int comparators[] = {
223 // First compare company short name
224 this.getCompanyShortName().compareToIgnoreCase(basicData.getCompanyShortName()),
225 // ... 2nd compare company name
226 StringUtils.compareIgnoreCase(this.getCompanyName(), basicData.getCompanyName()),
227 // ... next tax number
228 StringUtils.compareIgnoreCase(this.getCompanyTaxNumber(), basicData.getCompanyTaxNumber()),
229 // ... and email address
230 StringUtils.compareIgnoreCase(this.getCompanyEmailAddress(), basicData.getCompanyEmailAddress()),
231 // ... head quarter data
232 Headquarters.compare(this.getCompanyHeadquarterData(), basicData.getCompanyHeadquarterData())
236 final int comparison = Comparables.checkAll(comparators);
243 public boolean equals (final Object object) {
244 if (null == object) {
246 } else if (this.getClass() != object.getClass()) {
250 final BasicData other = (BasicData) object;
252 if (!Objects.equals(this.getBasicDataId(), other.getBasicDataId())) {
254 } else if (!Objects.equals(this.getCompanyShortName(), other.getCompanyShortName())) {
256 } else if (!Objects.equals(this.getCompanyName(), other.getCompanyName())) {
264 public Long getBasicDataId () {
265 return this.basicDataId;
269 public void setBasicDataId (final Long basicDataId) {
270 this.basicDataId = basicDataId;
274 @SuppressWarnings ("ReturnOfCollectionOrArrayField")
275 public List<BranchOffice> getBrancheOffices () {
276 return this.brancheOffices;
280 @SuppressWarnings ("AssignmentToCollectionOrArrayFieldFromParameter")
281 public void setBrancheOffices (final List<BranchOffice> brancheOffices) {
282 this.brancheOffices = brancheOffices;
286 public String getCompanyComments () {
287 return this.companyComments;
291 public void setCompanyComments (final String companyComments) {
292 this.companyComments = companyComments;
296 public Employable getCompanyContactEmployee () {
297 return this.companyContactEmployee;
301 public void setCompanyContactEmployee (final Employable companyContactEmployee) {
302 this.companyContactEmployee = companyContactEmployee;
306 @SuppressWarnings ("ReturnOfDateField")
307 public Date getCompanyCreated () {
308 return this.companyCreated;
312 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
313 public void setCompanyCreated (final Date companyCreated) {
314 this.companyCreated = companyCreated;
318 public String getCompanyEmailAddress () {
319 return this.companyEmailAddress;
323 public void setCompanyEmailAddress (final String companyEmailAddress) {
324 this.companyEmailAddress = companyEmailAddress;
328 public DialableFaxNumber getCompanyFaxNumber () {
329 return this.companyFaxNumber;
333 public void setCompanyFaxNumber (final DialableFaxNumber companyFaxNumber) {
334 this.companyFaxNumber = companyFaxNumber;
338 public Employable getCompanyFounder () {
339 return this.companyFounder;
343 public void setCompanyFounder (final Employable companyFounder) {
344 this.companyFounder = companyFounder;
348 public Headquarter getCompanyHeadquarterData () {
349 return this.companyHeadquarterData;
353 public void setCompanyHeadquarterData (final Headquarter companyHeadquarterData) {
354 this.companyHeadquarterData = companyHeadquarterData;
358 public DialableLandLineNumber getCompanyLandLineNumber () {
359 return this.companyLandLineNumber;
363 public void setCompanyLandLineNumber (final DialableLandLineNumber companyLandLineNumber) {
364 this.companyLandLineNumber = companyLandLineNumber;
368 public Logo getCompanyLogo () {
369 return this.companyLogo;
373 public void setCompanyLogo (final Logo companyLogoId) {
374 this.companyLogo = companyLogoId;
378 public String getCompanyName () {
379 return this.companyName;
383 public void setCompanyName (final String companyName) {
384 this.companyName = companyName;
388 public String getCompanyShortName () {
389 return this.companyShortName;
393 public void setCompanyShortName (final String companyShortName) {
394 this.companyShortName = companyShortName;
398 public String getCompanyTaxNumber () {
399 return this.companyTaxNumber;
403 public void setCompanyTaxNumber (final String companyTaxNumber) {
404 this.companyTaxNumber = companyTaxNumber;
408 public User getCompanyUserOwner () {
409 return this.companyUserOwner;
413 public void setCompanyUserOwner (final User companyUserOwner) {
414 this.companyUserOwner = companyUserOwner;
418 public String getCompanyWebsiteUrl () {
419 return this.companyWebsiteUrl;
423 public void setCompanyWebsiteUrl (final String companyWebsiteUrl) {
424 this.companyWebsiteUrl = companyWebsiteUrl;
428 public int hashCode () {
431 hash = 37 * hash + Objects.hashCode(this.getBasicDataId());
432 hash = 37 * hash + Objects.hashCode(this.getCompanyShortName());
433 hash = 37 * hash + Objects.hashCode(this.getCompanyName());