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 * Reference to contact person
84 @JoinColumn (name = "headquarter_contact_employee_id", referencedColumnName = "employee_id")
85 @OneToOne (targetEntity = BusinessEmployee.class, cascade = CascadeType.REFRESH)
86 private Employable headquarterContactEmployee;
89 * Headquarter's country code
91 @JoinColumn (name = "headquarter_country_id", nullable = false)
92 @OneToOne (targetEntity = CountryData.class, cascade = CascadeType.REFRESH, optional = false)
93 private Country headquarterCountry;
96 * Timestamp when this entry has been created
98 @Basic (optional = false)
99 @Temporal (TemporalType.TIMESTAMP)
100 @Column (name = "headquarter_entry_created", nullable = false, updatable = false)
101 private Date headquarterCreated;
104 * Email address of headquarter
106 @Column (name = "headquarter_email_address")
107 private String headquarterEmailAddress;
110 * Headquarter' fax number
112 @JoinColumn (name = "headquarter_fax_number_id")
113 @OneToOne (targetEntity = FaxNumber.class, cascade = CascadeType.ALL)
114 private DialableFaxNumber headquarterFaxNumber;
117 * Headquarter' house number
119 @Basic (optional = false)
120 @Column (name = "headquarter_house_number", length = 4, nullable = false)
121 private Short headquarterHouseNumber;
124 * House number's extension
126 @Column (name = "headquarter_house_number_extension")
127 private String headquarterHouseNumberExtension;
133 @GeneratedValue (strategy = GenerationType.IDENTITY)
134 @Column (name = "headquarter_id", nullable = false, updatable = false)
135 private Long headquarterId;
138 * Headquarter' land-line number
140 @JoinColumn (name = "headquarter_landline_number_id")
141 @OneToOne (targetEntity = LandLineNumber.class, cascade = CascadeType.ALL)
142 private DialableLandLineNumber headquarterLandLineNumber;
145 * Headquarter's last house number
147 @Column (name = "headquarter_last_house_number")
148 private Short headquarterLastHouseNumber;
151 * Opening times for this branch office
153 @JoinTable (name = "headquarter_opening_times", joinColumns =@JoinColumn (name = "headquarter_opening_id", referencedColumnName = "headquarter_id"), inverseJoinColumns = @JoinColumn (name = "opening_headquarter_id", referencedColumnName = "opening_times_id"))
154 @ManyToMany (targetEntity = BusinessOpeningTime.class, cascade = CascadeType.ALL)
155 private List<OpeningTime> headquarterOpeningTimes;
158 * Headquarter' store number (multi-store building only)
160 @Column (name = "headquarter_store", length = 3)
161 private Short headquarterStore;
164 * Headquarter' street name
166 @Basic (optional = false)
167 @Column (name = "headquarter_street", length = 100, nullable = false)
168 private String headquarterStreet;
171 * Headquarter' suite number
173 @Column (name = "headquarter_suite_number", length = 4)
174 private Short headquarterSuiteNumber;
177 * User owner instance
179 @JoinColumn (name = "headquarter_user_id")
180 @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH)
181 private User headquarterUserOwner;
184 * Headquarter' ZIP code
186 @Basic (optional = false)
187 @Column (name = "headquarter_zip_code", length = 6, nullable = false)
188 private Integer headquarterZipCode;
191 * Default constructor
193 public BusinessHeadquarter () {
197 * Constructor with all required fields
199 * @param headquarterCity City
200 * @param headquarterCountry Country
201 * @param headquarterStreet Street name
202 * @param headquarterZipCode ZIP code
203 * @param headquarterHouseNumber House number
205 public BusinessHeadquarter (final String headquarterCity, final Country headquarterCountry, final String headquarterStreet, final Integer headquarterZipCode, final Short headquarterHouseNumber) {
206 // Call other constructor first
209 // Validate parameters
210 if (null == headquarterCity) {
212 throw new NullPointerException("headquarterCity is null"); //NOI18N
213 } else if (headquarterCity.isEmpty()) {
215 throw new IllegalArgumentException("headquarterCity is empty"); //NOI18N
216 } else if (null == headquarterCountry) {
218 throw new NullPointerException("headquarterCountry is null"); //NOI18N
219 } else if (headquarterCountry.getCountryId() == null) {
221 throw new NullPointerException("headquarterCountry.countryId is null"); //NOI18N
222 } else if (headquarterCountry.getCountryId() < 1) {
224 throw new IllegalArgumentException(MessageFormat.format("headquarterCountry.countryId={0} is not valid.", headquarterCountry.getCountryId())); //NOI18N
225 } else if (null == headquarterHouseNumber) {
227 throw new NullPointerException("headquarterHouseNumber is null"); //NOI18N
228 } else if (headquarterHouseNumber < 1) {
230 throw new IllegalArgumentException(MessageFormat.format("headquarterHouseNumber={0} is invalid.", headquarterHouseNumber)); //NOI18N
231 } else if (null == headquarterStreet) {
233 throw new NullPointerException("headquarterStreet is null"); //NOI18N
234 } else if (headquarterStreet.isEmpty()) {
236 throw new IllegalArgumentException("headquarterStreet is empty"); //NOI18N
237 } else if (null == headquarterZipCode) {
239 throw new NullPointerException("headquarterZipCode is null"); //NOI18N
240 } else if (headquarterZipCode < 1) {
242 throw new IllegalArgumentException(MessageFormat.format("headquarterZipCode={0} is invalid.", headquarterZipCode)); //NOI18N
246 this.headquarterCity = headquarterCity;
247 this.headquarterCountry = headquarterCountry;
248 this.headquarterHouseNumber = headquarterHouseNumber;
249 this.headquarterStreet = headquarterStreet;
250 this.headquarterZipCode = headquarterZipCode;
254 public boolean equals (final Object object) {
255 if (null == object) {
257 } else if (this.getClass() != object.getClass()) {
261 final Headquarter headquarter = (Headquarter) object;
263 if (!Objects.equals(this.getHeadquarterId(), headquarter.getHeadquarterId())) {
265 } else if (!Objects.equals(this.getHeadquarterCity(), headquarter.getHeadquarterCity())) {
267 } else if (!Objects.equals(this.getHeadquarterCountry(), headquarter.getHeadquarterCountry())) {
269 } else if (!Objects.equals(this.getHeadquarterHouseNumber(), headquarter.getHeadquarterHouseNumber())) {
271 } else if (!Objects.equals(this.getHeadquarterLastHouseNumber(), headquarter.getHeadquarterLastHouseNumber())) {
273 } else if (!Objects.equals(this.getHeadquarterStore(), headquarter.getHeadquarterStore())) {
275 } else if (!Objects.equals(this.getHeadquarterStreet(), headquarter.getHeadquarterStreet())) {
277 } else if (!Objects.equals(this.getHeadquarterSuiteNumber(), headquarter.getHeadquarterSuiteNumber())) {
279 } else if (!Objects.equals(this.getHeadquarterZipCode(), headquarter.getHeadquarterZipCode())) {
287 public String getHeadquarterCity () {
288 return this.headquarterCity;
292 public void setHeadquarterCity (final String headquarterCity) {
293 this.headquarterCity = headquarterCity;
297 public Employable getHeadquarterContactEmployee () {
298 return this.headquarterContactEmployee;
302 public void setHeadquarterContactEmployee (final Employable headquarterContactEmployee) {
303 this.headquarterContactEmployee = headquarterContactEmployee;
307 public Country getHeadquarterCountry () {
308 return this.headquarterCountry;
312 public void setHeadquarterCountry (final Country headquarterCountry) {
313 this.headquarterCountry = headquarterCountry;
317 @SuppressWarnings ("ReturnOfDateField")
318 public Date getHeadquarterCreated () {
319 return this.headquarterCreated;
323 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
324 public void setHeadquarterCreated (final Date headquarterCreated) {
325 this.headquarterCreated = headquarterCreated;
329 public String getHeadquarterEmailAddress () {
330 return this.headquarterEmailAddress;
334 public void setHeadquarterEmailAddress (final String headquarterEmailAddress) {
335 this.headquarterEmailAddress = headquarterEmailAddress;
339 public DialableFaxNumber getHeadquarterFaxNumber () {
340 return this.headquarterFaxNumber;
344 public void setHeadquarterFaxNumber (final DialableFaxNumber headquarterFaxNumber) {
345 this.headquarterFaxNumber = headquarterFaxNumber;
349 public Short getHeadquarterHouseNumber () {
350 return this.headquarterHouseNumber;
354 public void setHeadquarterHouseNumber (final Short headquarterHouseNumber) {
355 this.headquarterHouseNumber = headquarterHouseNumber;
359 public String getHeadquarterHouseNumberExtension () {
360 return this.headquarterHouseNumberExtension;
364 public void setHeadquarterHouseNumberExtension (final String headquarterHouseNumberExtension) {
365 this.headquarterHouseNumberExtension = headquarterHouseNumberExtension;
369 public Long getHeadquarterId () {
370 return this.headquarterId;
374 public void setHeadquarterId (final Long headquarterId) {
375 this.headquarterId = headquarterId;
379 public DialableLandLineNumber getHeadquarterLandLineNumber () {
380 return this.headquarterLandLineNumber;
384 public void setHeadquarterLandLineNumber (final DialableLandLineNumber headquarterLandLineNumber) {
385 this.headquarterLandLineNumber = headquarterLandLineNumber;
389 public Short getHeadquarterLastHouseNumber () {
390 return this.headquarterLastHouseNumber;
394 public void setHeadquarterLastHouseNumber (final Short headquarterLastHouseNumber) {
395 this.headquarterLastHouseNumber = headquarterLastHouseNumber;
399 @SuppressWarnings ("ReturnOfCollectionOrArrayField")
400 public List<OpeningTime> getHeadquarterOpeningTimes () {
401 return this.headquarterOpeningTimes;
405 @SuppressWarnings ("AssignmentToCollectionOrArrayFieldFromParameter")
406 public void setHeadquarterOpeningTimes (final List<OpeningTime> headquarterOpeningTimes) {
407 this.headquarterOpeningTimes = headquarterOpeningTimes;
411 public Short getHeadquarterStore () {
412 return this.headquarterStore;
416 public void setHeadquarterStore (final Short headquarterStore) {
417 this.headquarterStore = headquarterStore;
421 public String getHeadquarterStreet () {
422 return this.headquarterStreet;
426 public void setHeadquarterStreet (final String headquarterStreet) {
427 this.headquarterStreet = headquarterStreet;
431 public Short getHeadquarterSuiteNumber () {
432 return this.headquarterSuiteNumber;
436 public void setHeadquarterSuiteNumber (final Short headquarterSuiteNumber) {
437 this.headquarterSuiteNumber = headquarterSuiteNumber;
441 public User getHeadquarterUserOwner () {
442 return this.headquarterUserOwner;
446 public void setHeadquarterUserOwner (final User headquarterUserOwner) {
447 this.headquarterUserOwner = headquarterUserOwner;
451 public Integer getHeadquarterZipCode () {
452 return this.headquarterZipCode;
456 public void setHeadquarterZipCode (final Integer headquarterZipCode) {
457 this.headquarterZipCode = headquarterZipCode;
461 public int hashCode () {
464 hash = 47 * hash + Objects.hashCode(this.getHeadquarterId());
465 hash = 47 * hash + Objects.hashCode(this.getHeadquarterCity());
466 hash = 47 * hash + Objects.hashCode(this.getHeadquarterCountry());
467 hash = 47 * hash + Objects.hashCode(this.getHeadquarterHouseNumber());
468 hash = 47 * hash + Objects.hashCode(this.getHeadquarterLastHouseNumber());
469 hash = 47 * hash + Objects.hashCode(this.getHeadquarterStore());
470 hash = 47 * hash + Objects.hashCode(this.getHeadquarterStreet());
471 hash = 47 * hash + Objects.hashCode(this.getHeadquarterSuiteNumber());
472 hash = 47 * hash + Objects.hashCode(this.getHeadquarterZipCode());