]> git.mxchange.org Git - jcontacts-business-core.git/blob - src/org/mxchange/jcontactsbusiness/model/headquarter/BusinessHeadquarter.java
Continued:
[jcontacts-business-core.git] / src / org / mxchange / jcontactsbusiness / model / headquarter / BusinessHeadquarter.java
1 /*
2  * Copyright (C) 2016 KLC
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.headquarter;
18
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;
52
53 /**
54  * A POJO for company headquarter data
55  * <p>
56  * @author Roland Häder<roland@mxchange.org>
57  */
58 @Entity (name = "company_headquarter")
59 @Table (name = "company_headquarter")
60 @NamedQueries (
61                 {
62                         @NamedQuery (name = "AllHeadquarters", query = "SELECT hq FROM company_headquarter AS hq ORDER BY hq.headquarterId ASC")
63                 }
64 )
65 @SuppressWarnings ("PersistenceUnitPresent")
66 public class BusinessHeadquarter implements Headquarter {
67
68         /**
69          * Serial number
70          */
71         @Transient
72         private static final long serialVersionUID = 385_752_948_781_761L;
73
74         /**
75          * Headquarter' city name
76          */
77         @Basic (optional = false)
78         @Column (name = "headquarter_city", length = 100, nullable = false)
79         private String headquarterCity;
80
81         /**
82          * Headquarter's company name
83          */
84         @Basic (optional = false)
85         @Column (name = "headquarter_company_name", length = 100, nullable = false, unique = true)
86         private String headquarterCompanyName;
87
88         /**
89          * Reference to contact person
90          */
91         @JoinColumn (name = "headquarter_contact_employee_id", referencedColumnName = "employee_id")
92         @OneToOne (targetEntity = BusinessEmployee.class, cascade = CascadeType.REFRESH)
93         private Employable headquarterContactEmployee;
94
95         /**
96          * Headquarter's country code
97          */
98         @JoinColumn (name = "headquarter_country_id", nullable = false)
99         @OneToOne (targetEntity = CountryData.class, cascade = CascadeType.REFRESH, optional = false)
100         private Country headquarterCountry;
101
102         /**
103          * Timestamp when this entry has been created
104          */
105         @Basic (optional = false)
106         @Temporal (TemporalType.TIMESTAMP)
107         @Column (name = "headquarter_entry_created", nullable = false, updatable = false)
108         private Date headquarterCreated;
109
110         /**
111          * Email address of headquarter
112          */
113         @Column (name = "headquarter_email_address")
114         private String headquarterEmailAddress;
115
116         /**
117          * Headquarter' fax number
118          */
119         @JoinColumn (name = "headquarter_fax_number_id")
120         @OneToOne (targetEntity = FaxNumber.class, cascade = CascadeType.ALL)
121         private DialableFaxNumber headquarterFaxNumber;
122
123         /**
124          * Headquarter' house number
125          */
126         @Basic (optional = false)
127         @Column (name = "headquarter_house_number", length = 4, nullable = false)
128         private Short headquarterHouseNumber;
129
130         /**
131          * House number's extension
132          */
133         @Column (name = "headquarter_house_number_extension")
134         private String headquarterHouseNumberExtension;
135
136         /**
137          * Id number
138          */
139         @Id
140         @GeneratedValue (strategy = GenerationType.IDENTITY)
141         @Column (name = "headquarter_id", nullable = false, updatable = false)
142         private Long headquarterId;
143
144         /**
145          * Headquarter' land-line number
146          */
147         @JoinColumn (name = "headquarter_landline_number_id")
148         @OneToOne (targetEntity = LandLineNumber.class, cascade = CascadeType.ALL)
149         private DialableLandLineNumber headquarterLandLineNumber;
150
151         /**
152          * Headquarter's last house number
153          */
154         @Column (name = "headquarter_last_house_number")
155         private Short headquarterLastHouseNumber;
156
157         /**
158          * Opening times for this branch office
159          */
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;
165
166         /**
167          * Headquarter' store number (multi-store building only)
168          */
169         @Column (name = "headquarter_store", length = 3)
170         private Short headquarterStore;
171
172         /**
173          * Headquarter' street name
174          */
175         @Basic (optional = false)
176         @Column (name = "headquarter_street", length = 100, nullable = false)
177         private String headquarterStreet;
178
179         /**
180          * Headquarter' suite number
181          */
182         @Column (name = "headquarter_suite_number", length = 4)
183         private Short headquarterSuiteNumber;
184
185         /**
186          * User owner instance
187          */
188         @JoinColumn (name = "headquarter_user_id")
189         @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH)
190         private User headquarterUserOwner;
191
192         /**
193          * Headquarter' ZIP code
194          */
195         @Basic (optional = false)
196         @Column (name = "headquarter_zip_code", length = 6, nullable = false)
197         private Integer headquarterZipCode;
198
199         /**
200          * Default constructor
201          */
202         public BusinessHeadquarter () {
203         }
204
205         /**
206          * Constructor with all required fields
207          * <p>
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
214          */
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
217                 this();
218
219                 // First, validate all parameter
220                 if (headquarterCompanyName == null) {
221                         // Is null
222                         throw new NullPointerException("headquarterCompanyName is null"); //NOI18N
223                 } else if (headquarterCompanyName.isEmpty()) {
224                         // Is null
225                         throw new IllegalArgumentException("headquarterCompanyName is empty"); //NOI18N
226                 } else if (null == headquarterCity) {
227                         // Throw NPE
228                         throw new NullPointerException("headquarterCity is null"); //NOI18N
229                 } else if (headquarterCity.isEmpty()) {
230                         // Throw IAE
231                         throw new IllegalArgumentException("headquarterCity is empty"); //NOI18N
232                 } else if (null == headquarterCountry) {
233                         // Throw NPE
234                         throw new NullPointerException("headquarterCountry is null"); //NOI18N
235                 } else if (headquarterCountry.getCountryId() == null) {
236                         // Throw NPE again
237                         throw new NullPointerException("headquarterCountry.countryId is null"); //NOI18N
238                 } else if (headquarterCountry.getCountryId() < 1) {
239                         // Throw IAE
240                         throw new IllegalArgumentException(MessageFormat.format("headquarterCountry.countryId={0} is not valid.", headquarterCountry.getCountryId())); //NOI18N
241                 } else if (null == headquarterHouseNumber) {
242                         // Throw NPE
243                         throw new NullPointerException("headquarterHouseNumber is null"); //NOI18N
244                 } else if (headquarterHouseNumber < 1) {
245                         // Throw IAE
246                         throw new IllegalArgumentException(MessageFormat.format("headquarterHouseNumber={0} is invalid.", headquarterHouseNumber)); //NOI18N
247                 } else if (null == headquarterStreet) {
248                         // Throw NPE
249                         throw new NullPointerException("headquarterStreet is null"); //NOI18N
250                 } else if (headquarterStreet.isEmpty()) {
251                         // Throw IAE
252                         throw new IllegalArgumentException("headquarterStreet is empty"); //NOI18N
253                 } else if (null == headquarterZipCode) {
254                         // Throw NPE
255                         throw new NullPointerException("headquarterZipCode is null"); //NOI18N
256                 } else if (headquarterZipCode < 1) {
257                         // Throw IAE
258                         throw new IllegalArgumentException(MessageFormat.format("headquarterZipCode={0} is invalid.", headquarterZipCode)); //NOI18N
259                 }
260
261                 // Set all fields
262                 this.headquarterCompanyName = headquarterCompanyName;
263                 this.headquarterCity = headquarterCity;
264                 this.headquarterCountry = headquarterCountry;
265                 this.headquarterHouseNumber = headquarterHouseNumber;
266                 this.headquarterStreet = headquarterStreet;
267                 this.headquarterZipCode = headquarterZipCode;
268         }
269
270         @Override
271         public boolean equals (final Object object) {
272                 if (null == object) {
273                         return false;
274                 } else if (this.getClass() != object.getClass()) {
275                         return false;
276                 }
277
278                 final Headquarter headquarter = (Headquarter) object;
279
280                 if (!Objects.equals(this.getHeadquarterId(), headquarter.getHeadquarterId())) {
281                         return false;
282                 } else if (!Objects.equals(this.getHeadquarterCity(), headquarter.getHeadquarterCity())) {
283                         return false;
284                 } else if (!Objects.equals(this.getHeadquarterCountry(), headquarter.getHeadquarterCountry())) {
285                         return false;
286                 } else if (!Objects.equals(this.getHeadquarterHouseNumber(), headquarter.getHeadquarterHouseNumber())) {
287                         return false;
288                 } else if (!Objects.equals(this.getHeadquarterLastHouseNumber(), headquarter.getHeadquarterLastHouseNumber())) {
289                         return false;
290                 } else if (!Objects.equals(this.getHeadquarterStore(), headquarter.getHeadquarterStore())) {
291                         return false;
292                 } else if (!Objects.equals(this.getHeadquarterStreet(), headquarter.getHeadquarterStreet())) {
293                         return false;
294                 } else if (!Objects.equals(this.getHeadquarterSuiteNumber(), headquarter.getHeadquarterSuiteNumber())) {
295                         return false;
296                 } else if (!Objects.equals(this.getHeadquarterZipCode(), headquarter.getHeadquarterZipCode())) {
297                         return false;
298                 }
299
300                 return true;
301         }
302
303         @Override
304         public String getHeadquarterCity () {
305                 return this.headquarterCity;
306         }
307
308         @Override
309         public void setHeadquarterCity (final String headquarterCity) {
310                 this.headquarterCity = headquarterCity;
311         }
312
313         @Override
314         public String getHeadquarterCompanyName () {
315                 return this.headquarterCompanyName;
316         }
317
318         @Override
319         public void setHeadquarterCompanyName (final String headquarterCompanyName) {
320                 this.headquarterCompanyName = headquarterCompanyName;
321         }
322
323         @Override
324         public Employable getHeadquarterContactEmployee () {
325                 return this.headquarterContactEmployee;
326         }
327
328         @Override
329         public void setHeadquarterContactEmployee (final Employable headquarterContactEmployee) {
330                 this.headquarterContactEmployee = headquarterContactEmployee;
331         }
332
333         @Override
334         public Country getHeadquarterCountry () {
335                 return this.headquarterCountry;
336         }
337
338         @Override
339         public void setHeadquarterCountry (final Country headquarterCountry) {
340                 this.headquarterCountry = headquarterCountry;
341         }
342
343         @Override
344         @SuppressWarnings ("ReturnOfDateField")
345         public Date getHeadquarterCreated () {
346                 return this.headquarterCreated;
347         }
348
349         @Override
350         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
351         public void setHeadquarterCreated (final Date headquarterCreated) {
352                 this.headquarterCreated = headquarterCreated;
353         }
354
355         @Override
356         public String getHeadquarterEmailAddress () {
357                 return this.headquarterEmailAddress;
358         }
359
360         @Override
361         public void setHeadquarterEmailAddress (final String headquarterEmailAddress) {
362                 this.headquarterEmailAddress = headquarterEmailAddress;
363         }
364
365         @Override
366         public DialableFaxNumber getHeadquarterFaxNumber () {
367                 return this.headquarterFaxNumber;
368         }
369
370         @Override
371         public void setHeadquarterFaxNumber (final DialableFaxNumber headquarterFaxNumber) {
372                 this.headquarterFaxNumber = headquarterFaxNumber;
373         }
374
375         @Override
376         public Short getHeadquarterHouseNumber () {
377                 return this.headquarterHouseNumber;
378         }
379
380         @Override
381         public void setHeadquarterHouseNumber (final Short headquarterHouseNumber) {
382                 this.headquarterHouseNumber = headquarterHouseNumber;
383         }
384
385         @Override
386         public String getHeadquarterHouseNumberExtension () {
387                 return this.headquarterHouseNumberExtension;
388         }
389
390         @Override
391         public void setHeadquarterHouseNumberExtension (final String headquarterHouseNumberExtension) {
392                 this.headquarterHouseNumberExtension = headquarterHouseNumberExtension;
393         }
394
395         @Override
396         public Long getHeadquarterId () {
397                 return this.headquarterId;
398         }
399
400         @Override
401         public void setHeadquarterId (final Long headquarterId) {
402                 this.headquarterId = headquarterId;
403         }
404
405         @Override
406         public DialableLandLineNumber getHeadquarterLandLineNumber () {
407                 return this.headquarterLandLineNumber;
408         }
409
410         @Override
411         public void setHeadquarterLandLineNumber (final DialableLandLineNumber headquarterLandLineNumber) {
412                 this.headquarterLandLineNumber = headquarterLandLineNumber;
413         }
414
415         @Override
416         public Short getHeadquarterLastHouseNumber () {
417                 return this.headquarterLastHouseNumber;
418         }
419
420         @Override
421         public void setHeadquarterLastHouseNumber (final Short headquarterLastHouseNumber) {
422                 this.headquarterLastHouseNumber = headquarterLastHouseNumber;
423         }
424
425         @Override
426         @SuppressWarnings ("ReturnOfCollectionOrArrayField")
427         public List<OpeningTime> getHeadquarterOpeningTimes () {
428                 return this.headquarterOpeningTimes;
429         }
430
431         @Override
432         @SuppressWarnings ("AssignmentToCollectionOrArrayFieldFromParameter")
433         public void setHeadquarterOpeningTimes (final List<OpeningTime> headquarterOpeningTimes) {
434                 this.headquarterOpeningTimes = headquarterOpeningTimes;
435         }
436
437         @Override
438         public Short getHeadquarterStore () {
439                 return this.headquarterStore;
440         }
441
442         @Override
443         public void setHeadquarterStore (final Short headquarterStore) {
444                 this.headquarterStore = headquarterStore;
445         }
446
447         @Override
448         public String getHeadquarterStreet () {
449                 return this.headquarterStreet;
450         }
451
452         @Override
453         public void setHeadquarterStreet (final String headquarterStreet) {
454                 this.headquarterStreet = headquarterStreet;
455         }
456
457         @Override
458         public Short getHeadquarterSuiteNumber () {
459                 return this.headquarterSuiteNumber;
460         }
461
462         @Override
463         public void setHeadquarterSuiteNumber (final Short headquarterSuiteNumber) {
464                 this.headquarterSuiteNumber = headquarterSuiteNumber;
465         }
466
467         @Override
468         public User getHeadquarterUserOwner () {
469                 return this.headquarterUserOwner;
470         }
471
472         @Override
473         public void setHeadquarterUserOwner (final User headquarterUserOwner) {
474                 this.headquarterUserOwner = headquarterUserOwner;
475         }
476
477         @Override
478         public Integer getHeadquarterZipCode () {
479                 return this.headquarterZipCode;
480         }
481
482         @Override
483         public void setHeadquarterZipCode (final Integer headquarterZipCode) {
484                 this.headquarterZipCode = headquarterZipCode;
485         }
486
487         @Override
488         public int hashCode () {
489                 int hash = 7;
490
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());
500
501                 return hash;
502         }
503
504 }