2 * Copyright (C) 2017 - 2022 Free Software Foundation
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU Affero General Public License as
6 * published by the Free Software Foundation, either version 3 of the
7 * License, or (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 Affero General Public License for more details.
14 * You should have received a copy of the GNU Affero General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 package org.mxchange.jcontactsbusiness.model.employee;
19 import java.text.MessageFormat;
20 import java.util.Date;
22 import javax.ejb.Stateless;
23 import org.mxchange.jcontacts.model.contact.Contact;
24 import org.mxchange.jcontactsbusiness.exceptions.employee.EmployeeAlreadyAddedException;
25 import org.mxchange.jcontactsbusiness.model.branchoffice.BranchOffice;
26 import org.mxchange.jcontactsbusiness.model.department.Department;
27 import org.mxchange.jcontactsbusiness.model.headquarter.Headquarter;
28 import org.mxchange.jcontactsbusiness.model.jobposition.HireableJobPosition;
29 import org.mxchange.jjobs.enterprise.BaseJobsEnterpriseBean;
30 import org.mxchange.jphone.model.phonenumbers.mobile.DialableMobileNumber;
31 import org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProvider;
32 import org.mxchange.jusercore.model.user.User;
35 * A stateless bean for administrative purposes for company employees.
37 * @author Roland Häder<roland@mxchange.org>
39 @Stateless (name = "adminEmployee", description = "An administrative statless bean for handling company employees")
40 public class JobsAdminCompanyEmployeeSessionBean extends BaseJobsEnterpriseBean implements AdminEmployeeSessionBeanRemote {
45 private static final long serialVersionUID = 26_458_796_703_761L;
48 * EJB for general company employee purposes
50 @EJB (lookup = "java:global/jjobs-ejb/employee!org.mxchange.jcontactsbusiness.model.employee.EmployeeSessionBeanRemote")
51 private EmployeeSessionBeanRemote employeeBean;
56 public JobsAdminCompanyEmployeeSessionBean () {
61 public Employable addEmployee (final Employable employee) throws EmployeeAlreadyAddedException {
63 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.addEmployee(): employee={1} - CALLED!", this.getClass().getSimpleName(), employee)); //NOI18N
66 if (null == employee) {
68 throw new NullPointerException("employee is null"); //NOI18N
69 } else if (employee.getEmployeeId() != null) {
71 throw new IllegalArgumentException(MessageFormat.format("employee.employeeId={0} is unexpected.", employee.getEmployeeId())); //NOI18N
72 } else if (employee.getEmployeeBasicData() == null) {
74 throw new NullPointerException("employee.employeeCompany is null"); //NOI18N
75 } else if (employee.getEmployeeBasicData().getBasicDataId() == null) {
77 throw new NullPointerException("employee.employeeCompany.basicDataId is null"); //NOI18N
78 } else if (employee.getEmployeeBasicData().getBasicDataId() < 1) {
80 throw new IllegalArgumentException(MessageFormat.format("employee.employeeCompany.basicDataId={0} is invalid.", employee.getEmployeeBasicData().getBasicDataId())); //NOI18N
81 } else if (employee.getEmployeeBranchOffice() == null && employee.getEmployeeDepartment() == null && employee.getEmployeeHeadquarter() == null) {
82 // At least one must be set
83 throw new NullPointerException("employee.employeeBranchOffice, employee.employeeDepartment and employee.employeeHeadquarter is null"); //NOI18N
84 } else if (employee.getEmployeeBranchOffice() != null && employee.getEmployeeBranchOffice().getBranchId() == null) {
86 throw new NullPointerException("employee.employeeBranchOffice.branchId is null"); //NOI18N
87 } else if (employee.getEmployeeBranchOffice() != null && employee.getEmployeeBranchOffice().getBranchId() < 1) {
89 throw new IllegalArgumentException(MessageFormat.format("employee.employeeBranchOffice.branchId={0} is invalid.", employee.getEmployeeBranchOffice().getBranchId())); //NOI18N
90 } else if (employee.getEmployeeDepartment() != null && employee.getEmployeeDepartment().getDepartmentId() == null) {
92 throw new NullPointerException("employee.employeeDepartment.departmentId is null"); //NOI18N
93 } else if (employee.getEmployeeDepartment() != null && employee.getEmployeeDepartment().getDepartmentId() < 1) {
95 throw new IllegalArgumentException(MessageFormat.format("employee.employeeDepartment.departmentId={0} is invalid.", employee.getEmployeeDepartment().getDepartmentId())); //NOI18N
96 } else if (employee.getEmployeeHeadquarter() != null && employee.getEmployeeHeadquarter().getHeadquarterId() == null) {
98 throw new NullPointerException("employee.employeeHeadquarter.headquarterId is null"); //NOI18N
99 } else if (employee.getEmployeeHeadquarter() != null && employee.getEmployeeHeadquarter().getHeadquarterId() < 1) {
101 throw new IllegalArgumentException(MessageFormat.format("employee.employeeHeadquarter.headquarterId={0} is invalid.", employee.getEmployeeHeadquarter().getHeadquarterId())); //NOI18N
102 } else if ((employee.getEmployeePersonalData() == null) && (employee.getEmployeeNumber() == null)) {
104 throw new NullPointerException("employee.employeePersonalData and employee.employeeNumber are null"); //NOI18N
105 } else if ((employee.getEmployeePersonalData() != null) && (employee.getEmployeePersonalData().getContactId() == null)) {
107 throw new NullPointerException("employee.employeePersonalData.contactId is null"); //NOI18N
108 } else if ((employee.getEmployeePersonalData() != null) && (employee.getEmployeePersonalData().getContactId() < 1)) {
110 throw new IllegalArgumentException(MessageFormat.format("employee.employeePersonalData.contactId={0} is invalid.", employee.getEmployeePersonalData().getContactId())); //NOI18N
111 } else if ((employee.getEmployeeNumber() != null) && (employee.getEmployeeNumber().isEmpty())) {
113 throw new IllegalArgumentException("employee.employeeNumber is empty"); //NOI18N
114 } else if ((employee.getEmployeeMobileNumber() != null) && (employee.getEmployeeMobileNumber().getMobileId() != null)) {
116 throw new IllegalArgumentException(MessageFormat.format("employee.employeeMobileNumber.phoneId={0} is unexpected.", employee.getEmployeeMobileNumber().getMobileId())); //NOI18N
117 } else if ((employee.getEmployeePersonalData() != null) && (employee.getEmployeePersonalData().getContactId() == null)) {
119 throw new NullPointerException("employee.employeePersonalData.contactId is null"); //NOI18N
120 } else if ((employee.getEmployeePersonalData() != null) && (employee.getEmployeePersonalData().getContactId() < 1)) {
122 throw new IllegalArgumentException(MessageFormat.format("employee.employeePersonalData.contactId={0} is unexpected.", employee.getEmployeePersonalData().getContactId())); //NOI18N
123 } else if ((employee.getEmployeeJobPosition() != null) && (employee.getEmployeeJobPosition().getJobPositionId() == null)) {
125 throw new NullPointerException("employee.employeePosition.jobPositionId is null"); //NOI18N
126 } else if ((employee.getEmployeeJobPosition() != null) && (employee.getEmployeeJobPosition().getJobPositionId() < 1)) {
128 throw new IllegalArgumentException(MessageFormat.format("employee.employeePosition.jobPositionId={0} is unexpected.", employee.getEmployeeJobPosition().getJobPositionId())); //NOI18N
129 } else if ((employee.getEmployeeUserOwner() != null) && (employee.getEmployeeUserOwner().getUserId() == null)) {
131 throw new NullPointerException("employee.employeeUserOwner.userId is null"); //NOI18N
132 } else if ((employee.getEmployeeUserOwner() != null) && (employee.getEmployeeUserOwner().getUserId() < 1)) {
134 throw new IllegalArgumentException(MessageFormat.format("employee.employeeUserOwner.userId={0} is unexpected.", employee.getEmployeeUserOwner().getUserId())); //NOI18N
135 } else if (this.isEmployeeAdded(employee)) {
137 throw new EmployeeAlreadyAddedException();
140 // Make company (basic data) managed
141 employee.setEmployeeBasicData(this.createManaged(employee.getEmployeeBasicData()));
143 // Is branch office set?
144 if (employee.getEmployeeBranchOffice() instanceof BranchOffice) {
145 // Then make it managed
146 final BranchOffice branchOffice = this.createManaged(employee.getEmployeeBranchOffice());
149 employee.setEmployeeBranchOffice(branchOffice);
152 // Is department set?
153 if (employee.getEmployeeDepartment() instanceof Department) {
154 // Then make it managed
155 final Department department = this.createManaged(employee.getEmployeeDepartment());
158 employee.setEmployeeDepartment(department);
161 // Is headquarter set?
162 if (employee.getEmployeeHeadquarter() instanceof Headquarter) {
163 // Then make it managed
164 final Headquarter headquarter = this.createManaged(employee.getEmployeeHeadquarter());
167 employee.setEmployeeHeadquarter(headquarter);
170 // Is personal data set?
171 if (employee.getEmployeePersonalData() instanceof Contact) {
172 // Then make it managed
173 final Contact contact = this.createManaged(employee.getEmployeePersonalData());
176 employee.setEmployeePersonalData(contact);
179 // Is headquarter set?
180 if (employee.getEmployeeJobPosition() instanceof HireableJobPosition) {
181 // Then make it managed
182 final HireableJobPosition jobPosition = this.createManaged(employee.getEmployeeJobPosition());
185 employee.setEmployeeJobPosition(jobPosition);
188 // Is headquarter set?
189 if (employee.getEmployeeUserOwner() instanceof User) {
190 // Then make it managed
191 final User user = this.createManaged(employee.getEmployeeUserOwner());
194 employee.setEmployeeUserOwner(user);
197 // Is mobile number set?
198 if (employee.getEmployeeMobileNumber() instanceof DialableMobileNumber) {
199 // Yes, then set created there as well
200 employee.getEmployeeMobileNumber().setMobileEntryCreated(new Date());
202 // Make mobile provider managed
203 final MobileProvider mobileProvider = this.createManaged(employee.getEmployeeMobileNumber().getMobileProvider());
206 employee.getEmployeeMobileNumber().setMobileProvider(mobileProvider);
209 // Set created timestamp
210 employee.setEmployeeEntryCreated(new Date());
213 this.getEntityManager().persist(employee);
216 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.addEmployee(): employee.employeeId={1} - EXIT!", this.getClass().getSimpleName(), employee.getEmployeeId())); //NOI18N
223 * Checks whether employee is already added
225 * @param employee Employee to be checked
227 * @return Whether employee is already added
229 private boolean isEmployeeAdded (final Employable employee) {
230 // Default is not added
231 boolean isFound = false;
234 for (final Employable otherEmployee : this.employeeBean.fetchAllEmployees()) {
236 if (Employees.isSameEmployeeFound(employee, otherEmployee)) {