]> git.mxchange.org Git - jcontacts-business-core.git/blob - src/org/mxchange/jcontactsbusiness/model/employee/BusinessEmployee.java
Continued:
[jcontacts-business-core.git] / src / org / mxchange / jcontactsbusiness / model / employee / BusinessEmployee.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.employee;
18
19 import java.util.Date;
20 import java.util.Objects;
21 import javax.persistence.Basic;
22 import javax.persistence.CascadeType;
23 import javax.persistence.Column;
24 import javax.persistence.Entity;
25 import javax.persistence.GeneratedValue;
26 import javax.persistence.GenerationType;
27 import javax.persistence.Id;
28 import javax.persistence.JoinColumn;
29 import javax.persistence.NamedQueries;
30 import javax.persistence.NamedQuery;
31 import javax.persistence.OneToOne;
32 import javax.persistence.Table;
33 import javax.persistence.Temporal;
34 import javax.persistence.TemporalType;
35 import javax.persistence.Transient;
36 import org.mxchange.jcontacts.model.contact.Contact;
37 import org.mxchange.jcontacts.model.contact.UserContact;
38 import org.mxchange.jcontactsbusiness.model.basicdata.BusinessBasicData;
39 import org.mxchange.jcontactsbusiness.model.branchoffice.BranchOffice;
40 import org.mxchange.jcontactsbusiness.model.branchoffice.BusinessBranchOffice;
41 import org.mxchange.jcontactsbusiness.model.department.BusinessDepartment;
42 import org.mxchange.jcontactsbusiness.model.department.Department;
43 import org.mxchange.jcontactsbusiness.model.headquarters.BusinessHeadquarters;
44 import org.mxchange.jcontactsbusiness.model.jobposition.EmployeePosition;
45 import org.mxchange.jcontactsbusiness.model.jobposition.JobPosition;
46 import org.mxchange.jphone.model.phonenumbers.mobile.DialableMobileNumber;
47 import org.mxchange.jphone.model.phonenumbers.mobile.MobileNumber;
48 import org.mxchange.jusercore.model.user.LoginUser;
49 import org.mxchange.jusercore.model.user.User;
50 import org.mxchange.jcontactsbusiness.model.basicdata.BasicData;
51 import org.mxchange.jcontactsbusiness.model.headquarters.Headquarter;
52
53 /**
54  * A POJO for company employees (including CEO)
55  * <p>
56  * @author Roland Häder<roland@mxchange.org>
57  */
58 @Entity (name = "company_employees")
59 @Table (name = "company_employees")
60 @NamedQueries (
61                 {
62                         @NamedQuery (name = "AllEmployees", query = "SELECT e FROM company_employees AS e ORDER BY e.employeeId ASC"),
63                         @NamedQuery (name = "SearchEmployeeById", query = "SELECT e FROM company_employees AS e WHERE e.employeeId = :employeeId")
64                 }
65 )
66 @SuppressWarnings ("PersistenceUnitPresent")
67 public class BusinessEmployee implements Employable {
68
69         /**
70          * Serial number
71          */
72         @Transient
73         private static final long serialVersionUID = 48_959_819_859_812_076L;
74
75         /**
76          * Branch office (if the employee works there)
77          */
78         @JoinColumn (name = "employee_branch_id")
79         @OneToOne (targetEntity = BusinessBranchOffice.class, cascade = CascadeType.REFRESH)
80         private BranchOffice employeeBranchOffice;
81
82         /**
83          * Company the employee is working at
84          */
85         @JoinColumn (name = "employee_company_id", nullable = false, updatable = false)
86         @OneToOne (targetEntity = BusinessBasicData.class, cascade = CascadeType.REFRESH, optional = false)
87         private BasicData employeeCompany;
88
89         /**
90          * Timestamp when this entry has been created
91          */
92         @Basic (optional = false)
93         @Temporal (TemporalType.TIMESTAMP)
94         @Column (name = "employee_entry_created", nullable = false, updatable = false)
95         private Date employeeCreated;
96
97         /**
98          * Department the employee works at
99          */
100         @JoinColumn (name = "employee_department_id")
101         @OneToOne (targetEntity = BusinessDepartment.class, cascade = CascadeType.REFRESH)
102         private Department employeeDepartment;
103
104         /**
105          * Employable's email address
106          */
107         @Column (name = "employee_email_address", length = 30)
108         private String employeeEmailAddress;
109
110         /**
111          * Head quarters id number (if the employee works there)
112          */
113         @JoinColumn (name = "employee_headquarters_id")
114         @OneToOne (targetEntity = BusinessHeadquarters.class, cascade = CascadeType.REFRESH)
115         private Headquarter employeeHeadquarter;
116
117         /**
118          * Id number
119          */
120         @Id
121         @Column (name = "employee_id", nullable = false, updatable = false)
122         @GeneratedValue (strategy = GenerationType.IDENTITY)
123         private Long employeeId;
124
125         /**
126          * Employable's business mobile number
127          */
128         @JoinColumn (name = "employee_mobile_number_id")
129         @OneToOne (targetEntity = MobileNumber.class, cascade = CascadeType.REFRESH)
130         private DialableMobileNumber employeeMobileNumber;
131
132         /**
133          * Employable's staff number
134          */
135         @Column (name = "employee_staff_number", length = 20)
136         private String employeeNumber;
137
138         /**
139          * Employable's personal data
140          */
141         @JoinColumn (name = "employee_personal_data_id")
142         @OneToOne (targetEntity = UserContact.class, cascade = CascadeType.REFRESH)
143         private Contact employeePersonalData;
144
145         /**
146          * Employable's phone extension (or number if different)
147          */
148         @Column (name = "employee_phone_extension", length = 10)
149         private Integer employeePhoneExtension;
150
151         /**
152          * Employable's position (example: CEO)
153          */
154         @JoinColumn (name = "employee_position_id")
155         @OneToOne (targetEntity = EmployeePosition.class, cascade = CascadeType.REFRESH)
156         private JobPosition employeePosition;
157
158         /**
159          * User owner instance
160          */
161         @JoinColumn (name = "employee_user_id")
162         @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH)
163         private User employeeUserOwner;
164
165         /**
166          * Default constructor
167          */
168         public BusinessEmployee () {
169         }
170
171         public BusinessEmployee (final BasicData employeeCompany, final String employeeNumber, final Contact employeePersonalData) {
172                 // Call other constructor
173                 this();
174
175                 // Validate parameter
176                 if (null == employeeCompany) {
177                         // Throw NPE
178                         throw new NullPointerException("employeeCompany is null"); //NOI18N
179                 } else if (((null == employeeNumber) || (employeeNumber.isEmpty()) && (null == employeePersonalData))) {
180                         // At least one must be given
181                         throw new NullPointerException("employeeNumber or employeeContact must be set."); //NOI18N
182                 }
183
184                 // Set all fields
185                 this.employeeCompany = employeeCompany;
186                 this.employeeNumber = employeeNumber;
187                 this.employeePersonalData = employeePersonalData;
188         }
189
190         @Override
191         public boolean equals (final Object object) {
192                 if (null == object) {
193                         return false;
194                 } else if (this.getClass() != object.getClass()) {
195                         return false;
196                 }
197
198                 final Employable other = (Employable) object;
199
200                 if (!Objects.equals(this.getEmployeeId(), other.getEmployeeId())) {
201                         return false;
202                 } else if (!Objects.equals(this.getEmployeeCompany(), other.getEmployeeCompany())) {
203                         return false;
204                 } else if (!Objects.equals(this.getEmployeeNumber(), other.getEmployeeNumber())) {
205                         return false;
206                 } else if (!Objects.equals(this.getEmployeePersonalData(), other.getEmployeePersonalData())) {
207                         return false;
208                 }
209
210                 return true;
211         }
212
213         @Override
214         public BranchOffice getEmployeeBranchOffice () {
215                 return this.employeeBranchOffice;
216         }
217
218         @Override
219         public void setEmployeeBranchOffice (final BranchOffice employeeBranchOffice) {
220                 this.employeeBranchOffice = employeeBranchOffice;
221         }
222
223         @Override
224         public BasicData getEmployeeCompany () {
225                 return this.employeeCompany;
226         }
227
228         @Override
229         public void setEmployeeCompany (final BasicData employeeCompany) {
230                 this.employeeCompany = employeeCompany;
231         }
232
233         @Override
234         @SuppressWarnings ("ReturnOfDateField")
235         public Date getEmployeeCreated () {
236                 return this.employeeCreated;
237         }
238
239         @Override
240         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
241         public void setEmployeeCreated (final Date employeeCreated) {
242                 this.employeeCreated = employeeCreated;
243         }
244
245         @Override
246         public Department getEmployeeDepartment () {
247                 return this.employeeDepartment;
248         }
249
250         @Override
251         public void setEmployeeDepartment (final Department employeeDepartment) {
252                 this.employeeDepartment = employeeDepartment;
253         }
254
255         @Override
256         public String getEmployeeEmailAddress () {
257                 return this.employeeEmailAddress;
258         }
259
260         @Override
261         public void setEmployeeEmailAddress (final String employeeEmailAddress) {
262                 this.employeeEmailAddress = employeeEmailAddress;
263         }
264
265         @Override
266         public Headquarter getEmployeeHeadquarter () {
267                 return this.employeeHeadquarter;
268         }
269
270         @Override
271         public void setEmployeeHeadquarter (final Headquarter employeeHeadquarter) {
272                 this.employeeHeadquarter = employeeHeadquarter;
273         }
274
275         @Override
276         public Long getEmployeeId () {
277                 return this.employeeId;
278         }
279
280         @Override
281         public void setEmployeeId (final Long employeeId) {
282                 this.employeeId = employeeId;
283         }
284
285         @Override
286         public DialableMobileNumber getEmployeeMobileNumber () {
287                 return this.employeeMobileNumber;
288         }
289
290         @Override
291         public void setEmployeeMobileNumber (final DialableMobileNumber employeeMobileNumber) {
292                 this.employeeMobileNumber = employeeMobileNumber;
293         }
294
295         @Override
296         public String getEmployeeNumber () {
297                 return this.employeeNumber;
298         }
299
300         @Override
301         public void setEmployeeNumber (final String employeeNumber) {
302                 this.employeeNumber = employeeNumber;
303         }
304
305         @Override
306         public Contact getEmployeePersonalData () {
307                 return this.employeePersonalData;
308         }
309
310         @Override
311         public void setEmployeePersonalData (final Contact employeePersonalData) {
312                 this.employeePersonalData = employeePersonalData;
313         }
314
315         @Override
316         public Integer getEmployeePhoneExtension () {
317                 return this.employeePhoneExtension;
318         }
319
320         @Override
321         public void setEmployeePhoneExtension (final Integer employeePhoneExtension) {
322                 this.employeePhoneExtension = employeePhoneExtension;
323         }
324
325         @Override
326         public JobPosition getEmployeePosition () {
327                 return this.employeePosition;
328         }
329
330         @Override
331         public void setEmployeePosition (final JobPosition employeePosition) {
332                 this.employeePosition = employeePosition;
333         }
334
335         @Override
336         public User getEmployeeUserOwner () {
337                 return this.employeeUserOwner;
338         }
339
340         @Override
341         public void setEmployeeUserOwner (final User employeeUserOwner) {
342                 this.employeeUserOwner = employeeUserOwner;
343         }
344
345         @Override
346         public int hashCode () {
347                 int hash = 3;
348
349                 hash = 97 * hash + Objects.hashCode(this.getEmployeeId());
350                 hash = 97 * hash + Objects.hashCode(this.getEmployeeCompany());
351                 hash = 97 * hash + Objects.hashCode(this.getEmployeeNumber());
352                 hash = 97 * hash + Objects.hashCode(this.getEmployeePersonalData());
353
354                 return hash;
355         }
356
357 }