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