]> git.mxchange.org Git - jcontacts-business-core.git/blob - src/org/mxchange/jcontactsbusiness/model/employee/CompanyEmployee.java
Continued:
[jcontacts-business-core.git] / src / org / mxchange / jcontactsbusiness / model / employee / CompanyEmployee.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.Calendar;
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.contact.Contact;
37 import org.mxchange.jcontacts.contact.UserContact;
38 import org.mxchange.jcontactsbusiness.model.basicdata.BusinessBasicData;
39 import org.mxchange.jcontactsbusiness.model.basicdata.CompanyBasicData;
40 import org.mxchange.jcontactsbusiness.model.branchoffice.BranchOffice;
41 import org.mxchange.jcontactsbusiness.model.branchoffice.CompanyBranchOffice;
42 import org.mxchange.jcontactsbusiness.model.department.CompanyDepartment;
43 import org.mxchange.jcontactsbusiness.model.department.Department;
44 import org.mxchange.jcontactsbusiness.model.headquarters.CompanyHeadquartersData;
45 import org.mxchange.jcontactsbusiness.model.headquarters.HeadquartersData;
46 import org.mxchange.jcontactsbusiness.model.jobposition.EmployeePosition;
47 import org.mxchange.jcontactsbusiness.model.jobposition.JobPosition;
48 import org.mxchange.jphone.phonenumbers.mobile.DialableMobileNumber;
49 import org.mxchange.jphone.phonenumbers.mobile.MobileNumber;
50 import org.mxchange.jusercore.model.user.LoginUser;
51 import org.mxchange.jusercore.model.user.User;
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 = "AllCompanyEmployees", query = "SELECT e FROM company_employees AS e ORDER BY e.employeeId ASC"),
63                         @NamedQuery (name = "SearchCompanyEmployeeById", query = "SELECT e FROM company_employees AS e WHERE e.employeeId = :employeeId")
64                 }
65 )
66 @SuppressWarnings ("PersistenceUnitPresent")
67 public class CompanyEmployee implements Employee {
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 = CompanyBranchOffice.class, cascade = CascadeType.ALL)
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 = CompanyBasicData.class, cascade = CascadeType.ALL, optional = false)
87         private BusinessBasicData 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 Calendar employeeCreated;
96
97         /**
98          * Department the employee works at
99          */
100         @JoinColumn (name = "employee_department_id")
101         @OneToOne (targetEntity = CompanyDepartment.class, cascade = CascadeType.ALL)
102         private Department employeeDepartment;
103
104         /**
105          * Employee'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 = CompanyHeadquartersData.class, cascade = CascadeType.ALL)
115         private HeadquartersData 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          * Employee's business mobile number
127          */
128         @JoinColumn (name = "employee_mobile_number_id")
129         @OneToOne (targetEntity = MobileNumber.class, cascade = CascadeType.ALL)
130         private DialableMobileNumber employeeMobileNumber;
131
132         /**
133          * Employee's staff number
134          */
135         @Column (name = "employee_staff_number", length = 20)
136         private String employeeNumber;
137
138         /**
139          * Employee's personal data
140          */
141         @JoinColumn (name = "employee_personal_data_id", nullable = false, updatable = false)
142         @OneToOne (targetEntity = UserContact.class, cascade = CascadeType.ALL, optional = false)
143         private Contact employeePersonalData;
144
145         /**
146          * Employee's phone extension (or number if different)
147          */
148         @Column (name = "employee_phone_extension", length = 10)
149         private Integer employeePhoneExtension;
150
151         /**
152          * Employee'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", nullable = false, updatable = false)
162         @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH, optional = false)
163         private User employeeUserOwner;
164
165         @Override
166         public boolean equals (final Object object) {
167                 if (null == object) {
168                         return false;
169                 } else if (this.getClass() != object.getClass()) {
170                         return false;
171                 }
172
173                 final Employee other = (Employee) object;
174
175                 if (!Objects.equals(this.getEmployeeId(), other.getEmployeeId())) {
176                         return false;
177                 } else if (!Objects.equals(this.getEmployeeCompany(), other.getEmployeeCompany())) {
178                         return false;
179                 } else if (!Objects.equals(this.getEmployeeNumber(), other.getEmployeeNumber())) {
180                         return false;
181                 } else if (!Objects.equals(this.getEmployeePersonalData(), other.getEmployeePersonalData())) {
182                         return false;
183                 }
184
185                 return true;
186         }
187
188         @Override
189         public BranchOffice getEmployeeBranchOffice () {
190                 return this.employeeBranchOffice;
191         }
192
193         @Override
194         public void setEmployeeBranchOffice (final BranchOffice employeeBranchOffice) {
195                 this.employeeBranchOffice = employeeBranchOffice;
196         }
197
198         @Override
199         public BusinessBasicData getEmployeeCompany () {
200                 return this.employeeCompany;
201         }
202
203         @Override
204         public void setEmployeeCompany (final BusinessBasicData employeeCompany) {
205                 this.employeeCompany = employeeCompany;
206         }
207
208         @Override
209         @SuppressWarnings ("ReturnOfDateField")
210         public Calendar getEmployeeCreated () {
211                 return this.employeeCreated;
212         }
213
214         @Override
215         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
216         public void setEmployeeCreated (final Calendar employeeCreated) {
217                 this.employeeCreated = employeeCreated;
218         }
219
220         @Override
221         public Department getEmployeeDepartment () {
222                 return this.employeeDepartment;
223         }
224
225         @Override
226         public void setEmployeeDepartment (final Department employeeDepartment) {
227                 this.employeeDepartment = employeeDepartment;
228         }
229
230         @Override
231         public String getEmployeeEmailAddress () {
232                 return this.employeeEmailAddress;
233         }
234
235         @Override
236         public void setEmployeeEmailAddress (final String employeeEmailAddress) {
237                 this.employeeEmailAddress = employeeEmailAddress;
238         }
239
240         @Override
241         public HeadquartersData getEmployeeHeadquarter () {
242                 return this.employeeHeadquarter;
243         }
244
245         @Override
246         public void setEmployeeHeadquarter (final HeadquartersData employeeHeadquarter) {
247                 this.employeeHeadquarter = employeeHeadquarter;
248         }
249
250         @Override
251         public Long getEmployeeId () {
252                 return this.employeeId;
253         }
254
255         @Override
256         public void setEmployeeId (final Long employeeId) {
257                 this.employeeId = employeeId;
258         }
259
260         @Override
261         public DialableMobileNumber getEmployeeMobileNumber () {
262                 return this.employeeMobileNumber;
263         }
264
265         @Override
266         public void setEmployeeMobileNumber (final DialableMobileNumber employeeMobileNumber) {
267                 this.employeeMobileNumber = employeeMobileNumber;
268         }
269
270         @Override
271         public String getEmployeeNumber () {
272                 return this.employeeNumber;
273         }
274
275         @Override
276         public void setEmployeeNumber (final String employeeNumber) {
277                 this.employeeNumber = employeeNumber;
278         }
279
280         @Override
281         public Contact getEmployeePersonalData () {
282                 return this.employeePersonalData;
283         }
284
285         @Override
286         public void setEmployeePersonalData (final Contact employeePersonalData) {
287                 this.employeePersonalData = employeePersonalData;
288         }
289
290         @Override
291         public Integer getEmployeePhoneExtension () {
292                 return this.employeePhoneExtension;
293         }
294
295         @Override
296         public void setEmployeePhoneExtension (final Integer employeePhoneExtension) {
297                 this.employeePhoneExtension = employeePhoneExtension;
298         }
299
300         @Override
301         public JobPosition getEmployeePosition () {
302                 return this.employeePosition;
303         }
304
305         @Override
306         public void setEmployeePosition (final JobPosition employeePosition) {
307                 this.employeePosition = employeePosition;
308         }
309
310         @Override
311         public User getEmployeeUserOwner () {
312                 return this.employeeUserOwner;
313         }
314
315         @Override
316         public void setEmployeeUserOwner (final User employeeUserOwner) {
317                 this.employeeUserOwner = employeeUserOwner;
318         }
319
320         @Override
321         public int hashCode () {
322                 int hash = 3;
323
324                 hash = 97 * hash + Objects.hashCode(this.getEmployeeId());
325                 hash = 97 * hash + Objects.hashCode(this.getEmployeeCompany());
326                 hash = 97 * hash + Objects.hashCode(this.getEmployeeNumber());
327                 hash = 97 * hash + Objects.hashCode(this.getEmployeePersonalData());
328
329                 return hash;
330         }
331
332 }