]> git.mxchange.org Git - jcontacts-business-core.git/blob - src/org/mxchange/jcontactsbusiness/model/basicdata/CompanyBasicData.java
Continued:
[jcontacts-business-core.git] / src / org / mxchange / jcontactsbusiness / model / basicdata / CompanyBasicData.java
1 /*
2  * Copyright (C) 2016, 2017 Roland Häder
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.basicdata;
18
19 import java.util.Calendar;
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.Lob;
31 import javax.persistence.NamedQueries;
32 import javax.persistence.NamedQuery;
33 import javax.persistence.OneToOne;
34 import javax.persistence.Table;
35 import javax.persistence.Temporal;
36 import javax.persistence.TemporalType;
37 import javax.persistence.Transient;
38 import org.mxchange.jcontactsbusiness.model.branchoffice.BranchOffice;
39 import org.mxchange.jcontactsbusiness.model.employee.CompanyEmployee;
40 import org.mxchange.jcontactsbusiness.model.employee.Employee;
41 import org.mxchange.jcontactsbusiness.model.headquarters.CompanyHeadquartersData;
42 import org.mxchange.jcontactsbusiness.model.headquarters.HeadquartersData;
43 import org.mxchange.jcontactsbusiness.model.logo.BusinessLogo;
44 import org.mxchange.jcontactsbusiness.model.logo.CompanyLogo;
45 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
46 import org.mxchange.jphone.phonenumbers.fax.FaxNumber;
47 import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
48 import org.mxchange.jphone.phonenumbers.landline.LandLineNumber;
49 import org.mxchange.jusercore.model.user.LoginUser;
50 import org.mxchange.jusercore.model.user.User;
51
52 /**
53  * A POJO for business basic data
54  * <p>
55  * @author Roland Häder<roland@mxchange.org>
56  */
57 @Entity (name = "company_basic_data")
58 @Table (name = "company_basic_data")
59 @NamedQueries (
60                 {
61                         @NamedQuery (name = "AllBusinessData", query = "SELECT b FROM company_basic_data AS b ORDER BY b.basicDataId"),
62                         @NamedQuery (name = "SearchBusinessDataById", query = "SELECT b FROM company_basic_data AS b WHERE b.basicDataId = :basicDataId")
63                 }
64 )
65 @SuppressWarnings ("PersistenceUnitPresent")
66 public class CompanyBasicData implements BusinessBasicData {
67
68         /**
69          * Serial number
70          */
71         @Transient
72         private static final long serialVersionUID = 470_375_172_748_691L;
73
74         /**
75          * Id number
76          */
77         @Id
78         @Column (name = "company_data_id", nullable = false, updatable = false)
79         @GeneratedValue (strategy = GenerationType.IDENTITY)
80         private Long basicDataId;
81
82         /**
83          * Reference to company branch offices
84          */
85         @Transient
86         private List<BranchOffice> brancheOffices;
87
88         /**
89          * Comments (any)
90          */
91         @Lob
92         @Column (name = "company_comments")
93         private String companyComments;
94
95         /**
96          * Reference to contact person
97          */
98         @JoinColumn (name = "company_contact_employee_id")
99         @OneToOne (targetEntity = CompanyEmployee.class, cascade = CascadeType.ALL)
100         private Employee companyContactEmployee;
101
102         /**
103          * Timestamp when this entry has been created
104          */
105         @Basic (optional = false)
106         @Temporal (TemporalType.TIMESTAMP)
107         @Column (name = "company_entry_created", nullable = false, updatable = false)
108         private Calendar companyCreated;
109
110         /**
111          * Company's main email address (example: info@company.com)
112          */
113         @Column (name = "company_email_address", length = 100)
114         private String companyEmailAddress;
115
116         /**
117          * Company's main fax numbers: +ccxxxxxxxxxx
118          */
119         @JoinColumn (name = "company_fax_number_id")
120         @OneToOne (targetEntity = FaxNumber.class, cascade = CascadeType.ALL)
121         private DialableFaxNumber companyFaxNumber;
122
123         /**
124          * Reference to CEO "employee"
125          */
126         @JoinColumn (name = "company_founder_id")
127         @OneToOne (targetEntity = CompanyEmployee.class, cascade = CascadeType.ALL)
128         private Employee companyFounder;
129
130         /**
131          * Reference to headquarters data
132          */
133         @JoinColumn (name = "company_headquarters_data_id")
134         @OneToOne (targetEntity = CompanyHeadquartersData.class, cascade = CascadeType.ALL)
135         private HeadquartersData companyHeadQuartersData;
136
137         /**
138          * Company's main phone number: +ccxxxxxxxxxx
139          */
140         @JoinColumn (name = "company_landline_number_id")
141         @OneToOne (targetEntity = LandLineNumber.class, cascade = CascadeType.ALL)
142         private DialableLandLineNumber companyLandLineNumber;
143
144         /**
145          * Id number of company logo
146          */
147         @JoinColumn (name = "company_logo_id")
148         @OneToOne (targetEntity = CompanyLogo.class, cascade = CascadeType.ALL)
149         private BusinessLogo companyLogo;
150
151         /**
152          * Company name
153          */
154         @Basic (optional = false)
155         @Column (name = "company_name", length = 100, nullable = false, unique = true)
156         private String companyName;
157
158         /**
159          * Tax number
160          */
161         @Column (name = "company_tax_number", length = 30)
162         private String companyTaxNumber;
163
164         /**
165          * User owner instance
166          */
167         @JoinColumn (name = "company_owner_user_id")
168         @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH)
169         private User companyUserOwner;
170
171         /**
172          * URL for company website
173          */
174         @Column (name = "company_website_url")
175         private String companyWebsiteUrl;
176
177         /**
178          * Default constructor, required for JPA
179          */
180         public CompanyBasicData () {
181         }
182
183         /**
184          * Constructor with company name
185          * <p>
186          * @param companyName Company name
187          */
188         public CompanyBasicData (final String companyName) {
189                 // First, validate all parameter
190                 if (companyName == null) {
191                         // Is null
192                         throw new NullPointerException("companyName is null"); //NOI18N
193                 } else if (companyName.isEmpty()) {
194                         // Is null
195                         throw new IllegalArgumentException("companyName is empty"); //NOI18N
196                 }
197
198                 // Set company name
199                 this.companyName = companyName;
200         }
201
202         @Override
203         public boolean equals (final Object object) {
204                 if (null == object) {
205                         return false;
206                 } else if (this.getClass() != object.getClass()) {
207                         return false;
208                 }
209
210                 final BusinessBasicData other = (BusinessBasicData) object;
211
212                 if (!Objects.equals(this.getBasicDataId(), other.getBasicDataId())) {
213                         return false;
214                 } else if (!Objects.equals(this.getCompanyName(), other.getCompanyName())) {
215                         return false;
216                 } else if (!Objects.equals(this.getCompanyHeadQuartersData(), other.getCompanyHeadQuartersData())) {
217                         return false;
218                 } else if (!Objects.equals(this.getCompanyContactEmployee(), other.getCompanyContactEmployee())) {
219                         return false;
220                 } else if (!Objects.equals(this.getCompanyFounder(), other.getCompanyFounder())) {
221                         return false;
222                 }
223
224                 return true;
225         }
226
227         @Override
228         public Long getBasicDataId () {
229                 return this.basicDataId;
230         }
231
232         @Override
233         public void setBasicDataId (final Long basicDataId) {
234                 this.basicDataId = basicDataId;
235         }
236
237         @Override
238         @SuppressWarnings ("ReturnOfCollectionOrArrayField")
239         public List<BranchOffice> getBrancheOffices () {
240                 return this.brancheOffices;
241         }
242
243         @Override
244         @SuppressWarnings ("AssignmentToCollectionOrArrayFieldFromParameter")
245         public void setBrancheOffices (final List<BranchOffice> brancheOffices) {
246                 this.brancheOffices = brancheOffices;
247         }
248
249         @Override
250         public String getCompanyComments () {
251                 return this.companyComments;
252         }
253
254         @Override
255         public void setCompanyComments (final String companyComments) {
256                 this.companyComments = companyComments;
257         }
258
259         @Override
260         public Employee getCompanyContactEmployee () {
261                 return this.companyContactEmployee;
262         }
263
264         @Override
265         public void setCompanyContactEmployee (final Employee companyContactEmployee) {
266                 this.companyContactEmployee = companyContactEmployee;
267         }
268
269         @Override
270         @SuppressWarnings ("ReturnOfDateField")
271         public Calendar getCompanyCreated () {
272                 return this.companyCreated;
273         }
274
275         @Override
276         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
277         public void setCompanyCreated (final Calendar companyCreated) {
278                 this.companyCreated = companyCreated;
279         }
280
281         @Override
282         public String getCompanyEmailAddress () {
283                 return this.companyEmailAddress;
284         }
285
286         @Override
287         public void setCompanyEmailAddress (final String companyEmailAddress) {
288                 this.companyEmailAddress = companyEmailAddress;
289         }
290
291         @Override
292         public DialableFaxNumber getCompanyFaxNumber () {
293                 return this.companyFaxNumber;
294         }
295
296         @Override
297         public void setCompanyFaxNumber (final DialableFaxNumber companyFaxNumber) {
298                 this.companyFaxNumber = companyFaxNumber;
299         }
300
301         @Override
302         public Employee getCompanyFounder () {
303                 return this.companyFounder;
304         }
305
306         @Override
307         public void setCompanyFounder (final Employee companyFounder) {
308                 this.companyFounder = companyFounder;
309         }
310
311         @Override
312         public HeadquartersData getCompanyHeadQuartersData () {
313                 return this.companyHeadQuartersData;
314         }
315
316         @Override
317         public void setCompanyHeadQuartersData (final HeadquartersData companyHeadQuartersData) {
318                 this.companyHeadQuartersData = companyHeadQuartersData;
319         }
320
321         @Override
322         public DialableLandLineNumber getCompanyLandLineNumber () {
323                 return this.companyLandLineNumber;
324         }
325
326         @Override
327         public void setCompanyLandLineNumber (final DialableLandLineNumber companyLandLineNumber) {
328                 this.companyLandLineNumber = companyLandLineNumber;
329         }
330
331         @Override
332         public BusinessLogo getCompanyLogo () {
333                 return this.companyLogo;
334         }
335
336         @Override
337         public void setCompanyLogo (final BusinessLogo companyLogoId) {
338                 this.companyLogo = companyLogoId;
339         }
340
341         @Override
342         public String getCompanyName () {
343                 return this.companyName;
344         }
345
346         @Override
347         public void setCompanyName (final String companyName) {
348                 this.companyName = companyName;
349         }
350
351         @Override
352         public String getCompanyTaxNumber () {
353                 return this.companyTaxNumber;
354         }
355
356         @Override
357         public void setCompanyTaxNumber (final String companyTaxNumber) {
358                 this.companyTaxNumber = companyTaxNumber;
359         }
360
361         @Override
362         public User getCompanyUserOwner () {
363                 return this.companyUserOwner;
364         }
365
366         @Override
367         public void setCompanyUserOwner (final User companyUserOwner) {
368                 this.companyUserOwner = companyUserOwner;
369         }
370
371         @Override
372         public String getCompanyWebsiteUrl () {
373                 return this.companyWebsiteUrl;
374         }
375
376         @Override
377         public void setCompanyWebsiteUrl (final String companyWebsiteUrl) {
378                 this.companyWebsiteUrl = companyWebsiteUrl;
379         }
380
381         @Override
382         public int hashCode () {
383                 int hash = 3;
384
385                 hash = 37 * hash + Objects.hashCode(this.getBasicDataId());
386                 hash = 37 * hash + Objects.hashCode(this.getCompanyName());
387                 hash = 37 * hash + Objects.hashCode(this.getCompanyHeadQuartersData());
388                 hash = 37 * hash + Objects.hashCode(this.getCompanyContactEmployee());
389                 hash = 37 * hash + Objects.hashCode(this.getCompanyFounder());
390
391                 return hash;
392         }
393
394 }