2 * Copyright (C) 2016 KLC
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.headquarter;
19 import java.text.MessageFormat;
20 import java.util.Date;
21 import java.util.List;
22 import java.util.Objects;
23 import javax.persistence.Basic;
24 import javax.persistence.CascadeType;
25 import javax.persistence.Column;
26 import javax.persistence.Entity;
27 import javax.persistence.GeneratedValue;
28 import javax.persistence.GenerationType;
29 import javax.persistence.Id;
30 import javax.persistence.JoinColumn;
31 import javax.persistence.JoinTable;
32 import javax.persistence.ManyToMany;
33 import javax.persistence.NamedQueries;
34 import javax.persistence.NamedQuery;
35 import javax.persistence.OneToOne;
36 import javax.persistence.Table;
37 import javax.persistence.Temporal;
38 import javax.persistence.TemporalType;
39 import javax.persistence.Transient;
40 import org.mxchange.jcontactsbusiness.model.employee.BusinessEmployee;
41 import org.mxchange.jcontactsbusiness.model.employee.Employable;
42 import org.mxchange.jcontactsbusiness.model.opening_time.BusinessOpeningTime;
43 import org.mxchange.jcontactsbusiness.model.opening_time.OpeningTime;
44 import org.mxchange.jcountry.model.data.Country;
45 import org.mxchange.jcountry.model.data.CountryData;
46 import org.mxchange.jphone.model.phonenumbers.fax.DialableFaxNumber;
47 import org.mxchange.jphone.model.phonenumbers.fax.FaxNumber;
48 import org.mxchange.jphone.model.phonenumbers.landline.DialableLandLineNumber;
49 import org.mxchange.jphone.model.phonenumbers.landline.LandLineNumber;
50 import org.mxchange.jusercore.model.user.LoginUser;
51 import org.mxchange.jusercore.model.user.User;
54 * A POJO for company headquarter data
56 * @author Roland Häder<roland@mxchange.org>
58 @Entity (name = "company_headquarter")
59 @Table (name = "company_headquarter")
62 @NamedQuery (name = "AllHeadquarters", query = "SELECT hq FROM company_headquarter AS hq ORDER BY hq.headquarterId ASC")
65 @SuppressWarnings ("PersistenceUnitPresent")
66 public class BusinessHeadquarter implements Headquarter {
72 private static final long serialVersionUID = 385_752_948_781_761L;
75 * Headquarter' city name
77 @Basic (optional = false)
78 @Column (name = "headquarter_city", length = 100, nullable = false)
79 private String headquarterCity;
82 * Headquarter's company name
84 @Basic (optional = false)
85 @Column (name = "headquarter_company_name", length = 100, nullable = false, unique = true)
86 private String headquarterCompanyName;
89 * Reference to contact person
91 @JoinColumn (name = "headquarter_contact_employee_id", referencedColumnName = "employee_id")
92 @OneToOne (targetEntity = BusinessEmployee.class, cascade = CascadeType.REFRESH)
93 private Employable headquarterContactEmployee;
96 * Headquarter's country code
98 @JoinColumn (name = "headquarter_country_id", nullable = false)
99 @OneToOne (targetEntity = CountryData.class, cascade = CascadeType.REFRESH, optional = false)
100 private Country headquarterCountry;
103 * Timestamp when this entry has been created
105 @Basic (optional = false)
106 @Temporal (TemporalType.TIMESTAMP)
107 @Column (name = "headquarter_entry_created", nullable = false, updatable = false)
108 private Date headquarterCreated;
111 * Email address of headquarter
113 @Column (name = "headquarter_email_address")
114 private String headquarterEmailAddress;
117 * Headquarter' fax number
119 @JoinColumn (name = "headquarter_fax_number_id")
120 @OneToOne (targetEntity = FaxNumber.class, cascade = CascadeType.ALL)
121 private DialableFaxNumber headquarterFaxNumber;
124 * Headquarter' house number
126 @Basic (optional = false)
127 @Column (name = "headquarter_house_number", length = 4, nullable = false)
128 private Short headquarterHouseNumber;
131 * House number's extension
133 @Column (name = "headquarter_house_number_extension")
134 private String headquarterHouseNumberExtension;
140 @GeneratedValue (strategy = GenerationType.IDENTITY)
141 @Column (name = "headquarter_id", nullable = false, updatable = false)
142 private Long headquarterId;
145 * Headquarter' land-line number
147 @JoinColumn (name = "headquarter_landline_number_id")
148 @OneToOne (targetEntity = LandLineNumber.class, cascade = CascadeType.ALL)
149 private DialableLandLineNumber headquarterLandLineNumber;
152 * Headquarter's last house number
154 @Column (name = "headquarter_last_house_number")
155 private Short headquarterLastHouseNumber;
158 * Opening times for this branch office
160 @JoinTable (name = "headquarter_opening_times", joinColumns =
161 @JoinColumn (name = "headquarter_opening_id", referencedColumnName = "headquarter_id"), inverseJoinColumns =
162 @JoinColumn (name = "opening_headquarter_id", referencedColumnName = "opening_times_id"))
163 @ManyToMany (targetEntity = BusinessOpeningTime.class, cascade = CascadeType.ALL)
164 private List<OpeningTime> headquarterOpeningTimes;
167 * Headquarter' store number (multi-store building only)
169 @Column (name = "headquarter_store", length = 3)
170 private Short headquarterStore;
173 * Headquarter' street name
175 @Basic (optional = false)
176 @Column (name = "headquarter_street", length = 100, nullable = false)
177 private String headquarterStreet;
180 * Headquarter' suite number
182 @Column (name = "headquarter_suite_number", length = 4)
183 private Short headquarterSuiteNumber;
186 * User owner instance
188 @JoinColumn (name = "headquarter_user_id")
189 @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH)
190 private User headquarterUserOwner;
193 * Headquarter' ZIP code
195 @Basic (optional = false)
196 @Column (name = "headquarter_zip_code", length = 6, nullable = false)
197 private Integer headquarterZipCode;
200 * Default constructor
202 public BusinessHeadquarter () {
206 * Constructor with all required fields
208 * @param headquarterCompanyName Headquarter's company name
209 * @param headquarterCity City
210 * @param headquarterCountry Country
211 * @param headquarterStreet Street name
212 * @param headquarterZipCode ZIP code
213 * @param headquarterHouseNumber House number
215 public BusinessHeadquarter (final String headquarterCompanyName, final String headquarterCity, final Country headquarterCountry, final String headquarterStreet, final Integer headquarterZipCode, final Short headquarterHouseNumber) {
216 // Call other constructor first
219 // First, validate all parameter
220 if (headquarterCompanyName == null) {
222 throw new NullPointerException("headquarterCompanyName is null"); //NOI18N
223 } else if (headquarterCompanyName.isEmpty()) {
225 throw new IllegalArgumentException("headquarterCompanyName is empty"); //NOI18N
226 } else if (null == headquarterCity) {
228 throw new NullPointerException("headquarterCity is null"); //NOI18N
229 } else if (headquarterCity.isEmpty()) {
231 throw new IllegalArgumentException("headquarterCity is empty"); //NOI18N
232 } else if (null == headquarterCountry) {
234 throw new NullPointerException("headquarterCountry is null"); //NOI18N
235 } else if (headquarterCountry.getCountryId() == null) {
237 throw new NullPointerException("headquarterCountry.countryId is null"); //NOI18N
238 } else if (headquarterCountry.getCountryId() < 1) {
240 throw new IllegalArgumentException(MessageFormat.format("headquarterCountry.countryId={0} is not valid.", headquarterCountry.getCountryId())); //NOI18N
241 } else if (null == headquarterHouseNumber) {
243 throw new NullPointerException("headquarterHouseNumber is null"); //NOI18N
244 } else if (headquarterHouseNumber < 1) {
246 throw new IllegalArgumentException(MessageFormat.format("headquarterHouseNumber={0} is invalid.", headquarterHouseNumber)); //NOI18N
247 } else if (null == headquarterStreet) {
249 throw new NullPointerException("headquarterStreet is null"); //NOI18N
250 } else if (headquarterStreet.isEmpty()) {
252 throw new IllegalArgumentException("headquarterStreet is empty"); //NOI18N
253 } else if (null == headquarterZipCode) {
255 throw new NullPointerException("headquarterZipCode is null"); //NOI18N
256 } else if (headquarterZipCode < 1) {
258 throw new IllegalArgumentException(MessageFormat.format("headquarterZipCode={0} is invalid.", headquarterZipCode)); //NOI18N
262 this.headquarterCompanyName = headquarterCompanyName;
263 this.headquarterCity = headquarterCity;
264 this.headquarterCountry = headquarterCountry;
265 this.headquarterHouseNumber = headquarterHouseNumber;
266 this.headquarterStreet = headquarterStreet;
267 this.headquarterZipCode = headquarterZipCode;
271 public boolean equals (final Object object) {
272 if (null == object) {
274 } else if (this.getClass() != object.getClass()) {
278 final Headquarter headquarter = (Headquarter) object;
280 if (!Objects.equals(this.getHeadquarterId(), headquarter.getHeadquarterId())) {
282 } else if (!Objects.equals(this.getHeadquarterCity(), headquarter.getHeadquarterCity())) {
284 } else if (!Objects.equals(this.getHeadquarterCountry(), headquarter.getHeadquarterCountry())) {
286 } else if (!Objects.equals(this.getHeadquarterHouseNumber(), headquarter.getHeadquarterHouseNumber())) {
288 } else if (!Objects.equals(this.getHeadquarterLastHouseNumber(), headquarter.getHeadquarterLastHouseNumber())) {
290 } else if (!Objects.equals(this.getHeadquarterStore(), headquarter.getHeadquarterStore())) {
292 } else if (!Objects.equals(this.getHeadquarterStreet(), headquarter.getHeadquarterStreet())) {
294 } else if (!Objects.equals(this.getHeadquarterSuiteNumber(), headquarter.getHeadquarterSuiteNumber())) {
296 } else if (!Objects.equals(this.getHeadquarterZipCode(), headquarter.getHeadquarterZipCode())) {
304 public String getHeadquarterCity () {
305 return this.headquarterCity;
309 public void setHeadquarterCity (final String headquarterCity) {
310 this.headquarterCity = headquarterCity;
314 public String getHeadquarterCompanyName () {
315 return this.headquarterCompanyName;
319 public void setHeadquarterCompanyName (final String headquarterCompanyName) {
320 this.headquarterCompanyName = headquarterCompanyName;
324 public Employable getHeadquarterContactEmployee () {
325 return this.headquarterContactEmployee;
329 public void setHeadquarterContactEmployee (final Employable headquarterContactEmployee) {
330 this.headquarterContactEmployee = headquarterContactEmployee;
334 public Country getHeadquarterCountry () {
335 return this.headquarterCountry;
339 public void setHeadquarterCountry (final Country headquarterCountry) {
340 this.headquarterCountry = headquarterCountry;
344 @SuppressWarnings ("ReturnOfDateField")
345 public Date getHeadquarterCreated () {
346 return this.headquarterCreated;
350 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
351 public void setHeadquarterCreated (final Date headquarterCreated) {
352 this.headquarterCreated = headquarterCreated;
356 public String getHeadquarterEmailAddress () {
357 return this.headquarterEmailAddress;
361 public void setHeadquarterEmailAddress (final String headquarterEmailAddress) {
362 this.headquarterEmailAddress = headquarterEmailAddress;
366 public DialableFaxNumber getHeadquarterFaxNumber () {
367 return this.headquarterFaxNumber;
371 public void setHeadquarterFaxNumber (final DialableFaxNumber headquarterFaxNumber) {
372 this.headquarterFaxNumber = headquarterFaxNumber;
376 public Short getHeadquarterHouseNumber () {
377 return this.headquarterHouseNumber;
381 public void setHeadquarterHouseNumber (final Short headquarterHouseNumber) {
382 this.headquarterHouseNumber = headquarterHouseNumber;
386 public String getHeadquarterHouseNumberExtension () {
387 return this.headquarterHouseNumberExtension;
391 public void setHeadquarterHouseNumberExtension (final String headquarterHouseNumberExtension) {
392 this.headquarterHouseNumberExtension = headquarterHouseNumberExtension;
396 public Long getHeadquarterId () {
397 return this.headquarterId;
401 public void setHeadquarterId (final Long headquarterId) {
402 this.headquarterId = headquarterId;
406 public DialableLandLineNumber getHeadquarterLandLineNumber () {
407 return this.headquarterLandLineNumber;
411 public void setHeadquarterLandLineNumber (final DialableLandLineNumber headquarterLandLineNumber) {
412 this.headquarterLandLineNumber = headquarterLandLineNumber;
416 public Short getHeadquarterLastHouseNumber () {
417 return this.headquarterLastHouseNumber;
421 public void setHeadquarterLastHouseNumber (final Short headquarterLastHouseNumber) {
422 this.headquarterLastHouseNumber = headquarterLastHouseNumber;
426 @SuppressWarnings ("ReturnOfCollectionOrArrayField")
427 public List<OpeningTime> getHeadquarterOpeningTimes () {
428 return this.headquarterOpeningTimes;
432 @SuppressWarnings ("AssignmentToCollectionOrArrayFieldFromParameter")
433 public void setHeadquarterOpeningTimes (final List<OpeningTime> headquarterOpeningTimes) {
434 this.headquarterOpeningTimes = headquarterOpeningTimes;
438 public Short getHeadquarterStore () {
439 return this.headquarterStore;
443 public void setHeadquarterStore (final Short headquarterStore) {
444 this.headquarterStore = headquarterStore;
448 public String getHeadquarterStreet () {
449 return this.headquarterStreet;
453 public void setHeadquarterStreet (final String headquarterStreet) {
454 this.headquarterStreet = headquarterStreet;
458 public Short getHeadquarterSuiteNumber () {
459 return this.headquarterSuiteNumber;
463 public void setHeadquarterSuiteNumber (final Short headquarterSuiteNumber) {
464 this.headquarterSuiteNumber = headquarterSuiteNumber;
468 public User getHeadquarterUserOwner () {
469 return this.headquarterUserOwner;
473 public void setHeadquarterUserOwner (final User headquarterUserOwner) {
474 this.headquarterUserOwner = headquarterUserOwner;
478 public Integer getHeadquarterZipCode () {
479 return this.headquarterZipCode;
483 public void setHeadquarterZipCode (final Integer headquarterZipCode) {
484 this.headquarterZipCode = headquarterZipCode;
488 public int hashCode () {
491 hash = 47 * hash + Objects.hashCode(this.getHeadquarterId());
492 hash = 47 * hash + Objects.hashCode(this.getHeadquarterCity());
493 hash = 47 * hash + Objects.hashCode(this.getHeadquarterCountry());
494 hash = 47 * hash + Objects.hashCode(this.getHeadquarterHouseNumber());
495 hash = 47 * hash + Objects.hashCode(this.getHeadquarterLastHouseNumber());
496 hash = 47 * hash + Objects.hashCode(this.getHeadquarterStore());
497 hash = 47 * hash + Objects.hashCode(this.getHeadquarterStreet());
498 hash = 47 * hash + Objects.hashCode(this.getHeadquarterSuiteNumber());
499 hash = 47 * hash + Objects.hashCode(this.getHeadquarterZipCode());