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.headquarters;
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.JoinTable;
31 import javax.persistence.ManyToMany;
32 import javax.persistence.OneToOne;
33 import javax.persistence.Table;
34 import javax.persistence.Temporal;
35 import javax.persistence.TemporalType;
36 import javax.persistence.Transient;
37 import org.mxchange.jcontactsbusiness.model.employee.BusinessEmployee;
38 import org.mxchange.jcontactsbusiness.model.employee.Employable;
39 import org.mxchange.jcontactsbusiness.model.opening_time.BusinessOpeningTime;
40 import org.mxchange.jcontactsbusiness.model.opening_time.OpeningTime;
41 import org.mxchange.jcountry.model.data.Country;
42 import org.mxchange.jcountry.model.data.CountryData;
43 import org.mxchange.jphone.model.phonenumbers.fax.DialableFaxNumber;
44 import org.mxchange.jphone.model.phonenumbers.fax.FaxNumber;
45 import org.mxchange.jphone.model.phonenumbers.landline.DialableLandLineNumber;
46 import org.mxchange.jphone.model.phonenumbers.landline.LandLineNumber;
47 import org.mxchange.jusercore.model.user.LoginUser;
48 import org.mxchange.jusercore.model.user.User;
51 * A POJO for company headquarters data
53 * @author Roland Häder<roland@mxchange.org>
55 @Entity (name = "company_headquarters")
56 @Table (name = "company_headquarters")
57 @SuppressWarnings ("PersistenceUnitPresent")
58 public class BusinessHeadquarters implements Headquarters {
64 private static final long serialVersionUID = 385_752_948_781_761L;
67 * Headquarters' city name
69 @Basic (optional = false)
70 @Column (name = "headquarters_city", length = 100, nullable = false)
71 private String headquartersCity;
74 * Reference to contact person
76 @JoinColumn (name = "headquarters_contact_employee_id", referencedColumnName = "employee_id")
77 @OneToOne (targetEntity = BusinessEmployee.class, cascade = CascadeType.REFRESH)
78 private Employable headquartersContactEmployee;
81 * Headquarter's country code
83 @JoinColumn (name = "headquarters_country_id", nullable = false)
84 @OneToOne (targetEntity = CountryData.class, cascade = CascadeType.REFRESH, optional = false)
85 private Country headquartersCountry;
88 * Timestamp when this entry has been created
90 @Basic (optional = false)
91 @Temporal (TemporalType.TIMESTAMP)
92 @Column (name = "headquarters_entry_created", nullable = false, updatable = false)
93 private Date headquartersCreated;
96 * Headquarters' fax number
98 @JoinColumn (name = "headquarters_fax_number_id")
99 @OneToOne (targetEntity = FaxNumber.class, cascade = CascadeType.ALL)
100 private DialableFaxNumber headquartersFaxNumber;
103 * Headquarters' house number
105 @Basic (optional = false)
106 @Column (name = "headquarters_house_number", length = 4, nullable = false)
107 private Short headquartersHouseNumber;
113 @GeneratedValue (strategy = GenerationType.IDENTITY)
114 @Column (name = "headquarters_id", nullable = false, updatable = false)
115 private Long headquartersId;
118 * Headquarters' land-line number
120 @JoinColumn (name = "headquarters_landline_number_id")
121 @OneToOne (targetEntity = LandLineNumber.class, cascade = CascadeType.ALL)
122 private DialableLandLineNumber headquartersLandLineNumber;
125 * Opening times for this branch office
127 @JoinTable (name = "headquarters_opening_times", joinColumns =@JoinColumn (name = "headquarters_opening_id", referencedColumnName = "branch_id"), inverseJoinColumns = @JoinColumn (name = "opening_headquarters_id", referencedColumnName = "opening_times_id"))
128 @ManyToMany (targetEntity = BusinessOpeningTime.class, cascade = CascadeType.ALL)
129 private List<OpeningTime> headquartersOpeningTimes;
132 * Headquarters' store number (multi-store building only)
134 @Column (name = "headquarters_store", length = 3)
135 private Short headquartersStore;
138 * Headquarters' street name
140 @Basic (optional = false)
141 @Column (name = "headquarters_street", length = 100, nullable = false)
142 private String headquartersStreet;
145 * Headquarters' suite number
147 @Column (name = "headquarters_suite_number", length = 4)
148 private Short headquartersSuiteNumber;
151 * User owner instance
153 @JoinColumn (name = "headquarters_user_id")
154 @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH)
155 private User headquartersUserOwner;
158 * Headquarters' ZIP code
160 @Basic (optional = false)
161 @Column (name = "headquarters_zip_code", length = 6, nullable = false)
162 private Integer headquartersZipCode;
165 public boolean equals (final Object object) {
166 if (null == object) {
168 } else if (this.getClass() != object.getClass()) {
172 final Headquarters other = (Headquarters) object;
174 if (!Objects.equals(this.getHeadquartersId(), other.getHeadquartersId())) {
176 } else if (!Objects.equals(this.getHeadquartersCity(), other.getHeadquartersCity())) {
178 } else if (!Objects.equals(this.getHeadquartersCountry(), other.getHeadquartersCountry())) {
180 } else if (!Objects.equals(this.getHeadquartersHouseNumber(), other.getHeadquartersHouseNumber())) {
182 } else if (!Objects.equals(this.getHeadquartersStore(), other.getHeadquartersStore())) {
184 } else if (!Objects.equals(this.getHeadquartersStreet(), other.getHeadquartersStreet())) {
186 } else if (!Objects.equals(this.getHeadquartersSuiteNumber(), other.getHeadquartersSuiteNumber())) {
188 } else if (!Objects.equals(this.getHeadquartersZipCode(), other.getHeadquartersZipCode())) {
196 public String getHeadquartersCity () {
197 return this.headquartersCity;
201 public void setHeadquartersCity (final String headquartersCity) {
202 this.headquartersCity = headquartersCity;
206 public Employable getHeadquartersContactEmployee () {
207 return this.headquartersContactEmployee;
211 public void setHeadquartersContactEmployee (final Employable headquartersContactEmployee) {
212 this.headquartersContactEmployee = headquartersContactEmployee;
216 public Country getHeadquartersCountry () {
217 return this.headquartersCountry;
221 public void setHeadquartersCountry (final Country headquartersCountry) {
222 this.headquartersCountry = headquartersCountry;
226 @SuppressWarnings ("ReturnOfDateField")
227 public Date getHeadquartersCreated () {
228 return this.headquartersCreated;
232 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
233 public void setHeadquartersCreated (final Date headquartersCreated) {
234 this.headquartersCreated = headquartersCreated;
238 public DialableFaxNumber getHeadquartersFaxNumber () {
239 return this.headquartersFaxNumber;
243 public void setHeadquartersFaxNumber (final DialableFaxNumber headquartersFaxNumber) {
244 this.headquartersFaxNumber = headquartersFaxNumber;
248 public Short getHeadquartersHouseNumber () {
249 return this.headquartersHouseNumber;
253 public void setHeadquartersHouseNumber (final Short headquartersHouseNumber) {
254 this.headquartersHouseNumber = headquartersHouseNumber;
258 public Long getHeadquartersId () {
259 return this.headquartersId;
263 public void setHeadquartersId (final Long headquartersId) {
264 this.headquartersId = headquartersId;
268 public DialableLandLineNumber getHeadquartersLandLineNumber () {
269 return this.headquartersLandLineNumber;
273 public void setHeadquartersLandLineNumber (final DialableLandLineNumber headquartersLandLineNumber) {
274 this.headquartersLandLineNumber = headquartersLandLineNumber;
278 @SuppressWarnings ("ReturnOfCollectionOrArrayField")
279 public List<OpeningTime> getHeadquartersOpeningTimes () {
280 return this.headquartersOpeningTimes;
284 @SuppressWarnings ("AssignmentToCollectionOrArrayFieldFromParameter")
285 public void setHeadquartersOpeningTimes (final List<OpeningTime> headquartersOpeningTimes) {
286 this.headquartersOpeningTimes = headquartersOpeningTimes;
290 public Short getHeadquartersStore () {
291 return this.headquartersStore;
295 public void setHeadquartersStore (final Short headquartersStore) {
296 this.headquartersStore = headquartersStore;
300 public String getHeadquartersStreet () {
301 return this.headquartersStreet;
305 public void setHeadquartersStreet (final String headquartersStreet) {
306 this.headquartersStreet = headquartersStreet;
310 public Short getHeadquartersSuiteNumber () {
311 return this.headquartersSuiteNumber;
315 public void setHeadquartersSuiteNumber (final Short headquartersSuiteNumber) {
316 this.headquartersSuiteNumber = headquartersSuiteNumber;
320 public User getHeadquartersUserOwner () {
321 return this.headquartersUserOwner;
325 public void setHeadquartersUserOwner (final User headquartersUserOwner) {
326 this.headquartersUserOwner = headquartersUserOwner;
330 public Integer getHeadquartersZipCode () {
331 return this.headquartersZipCode;
335 public void setHeadquartersZipCode (final Integer headquartersZipCode) {
336 this.headquartersZipCode = headquartersZipCode;
340 public int hashCode () {
343 hash = 47 * hash + Objects.hashCode(this.getHeadquartersId());
344 hash = 47 * hash + Objects.hashCode(this.getHeadquartersCity());
345 hash = 47 * hash + Objects.hashCode(this.getHeadquartersCountry());
346 hash = 47 * hash + Objects.hashCode(this.getHeadquartersHouseNumber());
347 hash = 47 * hash + Objects.hashCode(this.getHeadquartersStore());
348 hash = 47 * hash + Objects.hashCode(this.getHeadquartersStreet());
349 hash = 47 * hash + Objects.hashCode(this.getHeadquartersSuiteNumber());
350 hash = 47 * hash + Objects.hashCode(this.getHeadquartersZipCode());