/*
- * Copyright (C) 2016, 2017 Roland Häder
+ * Copyright (C) 2016 - 2020 Free Software Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
+import org.apache.commons.lang3.StringUtils;
import org.mxchange.jcontacts.model.contact.Contact;
+import org.mxchange.jcontacts.model.contact.Contacts;
import org.mxchange.jcontacts.model.contact.UserContact;
+import org.mxchange.jcontactsbusiness.model.basicdata.BasicData;
import org.mxchange.jcontactsbusiness.model.basicdata.BusinessBasicData;
import org.mxchange.jcontactsbusiness.model.branchoffice.BranchOffice;
+import org.mxchange.jcontactsbusiness.model.branchoffice.BranchOffices;
import org.mxchange.jcontactsbusiness.model.branchoffice.BusinessBranchOffice;
import org.mxchange.jcontactsbusiness.model.department.BusinessDepartment;
import org.mxchange.jcontactsbusiness.model.department.Department;
-import org.mxchange.jcontactsbusiness.model.headquarters.BusinessHeadquartersData;
-import org.mxchange.jcontactsbusiness.model.headquarters.HeadquartersData;
+import org.mxchange.jcontactsbusiness.model.department.Departments;
+import org.mxchange.jcontactsbusiness.model.headquarter.BusinessHeadquarter;
+import org.mxchange.jcontactsbusiness.model.headquarter.Headquarter;
+import org.mxchange.jcontactsbusiness.model.headquarter.Headquarters;
import org.mxchange.jcontactsbusiness.model.jobposition.EmployeePosition;
-import org.mxchange.jcontactsbusiness.model.jobposition.JobPosition;
+import org.mxchange.jcontactsbusiness.model.jobposition.HireableJobPosition;
+import org.mxchange.jcontactsbusiness.model.jobposition.JobPositions;
+import org.mxchange.jcoreutils.Comparables;
import org.mxchange.jphone.model.phonenumbers.mobile.DialableMobileNumber;
import org.mxchange.jphone.model.phonenumbers.mobile.MobileNumber;
import org.mxchange.jusercore.model.user.LoginUser;
import org.mxchange.jusercore.model.user.User;
-import org.mxchange.jcontactsbusiness.model.basicdata.BasicData;
/**
* A POJO for company employees (including CEO)
@Table (name = "company_employees")
@NamedQueries (
{
- @NamedQuery (name = "AllEmployees", query = "SELECT e FROM company_employees AS e ORDER BY e.employeeId ASC"),
- @NamedQuery (name = "SearchEmployeeById", query = "SELECT e FROM company_employees AS e WHERE e.employeeId = :employeeId")
- }
+ @NamedQuery (name = "AllEmployees", query = "SELECT e FROM company_employees AS e ORDER BY e.employeeId ASC"),}
)
@SuppressWarnings ("PersistenceUnitPresent")
public class BusinessEmployee implements Employable {
@Transient
private static final long serialVersionUID = 48_959_819_859_812_076L;
+ /**
+ * Company the employee is working at
+ */
+ @JoinColumn (name = "employee_company_id", nullable = false, updatable = false)
+ @OneToOne (targetEntity = BusinessBasicData.class, cascade = CascadeType.REFRESH, optional = false)
+ private BasicData employeeBasicData;
+
/**
* Branch office (if the employee works there)
*/
@OneToOne (targetEntity = BusinessBranchOffice.class, cascade = CascadeType.REFRESH)
private BranchOffice employeeBranchOffice;
- /**
- * Company the employee is working at
- */
- @JoinColumn (name = "employee_company_id", nullable = false, updatable = false)
- @OneToOne (targetEntity = BusinessBasicData.class, cascade = CascadeType.REFRESH, optional = false)
- private BasicData employeeCompany;
-
/**
* Timestamp when this entry has been created
*/
private Department employeeDepartment;
/**
- * Employable's email address
+ * Employee's email address
*/
@Column (name = "employee_email_address", length = 30)
private String employeeEmailAddress;
/**
* Head quarters id number (if the employee works there)
*/
- @JoinColumn (name = "employee_headquarters_id")
- @OneToOne (targetEntity = BusinessHeadquartersData.class, cascade = CascadeType.REFRESH)
- private HeadquartersData employeeHeadquarter;
+ @JoinColumn (name = "employee_headquarter_id")
+ @OneToOne (targetEntity = BusinessHeadquarter.class, cascade = CascadeType.REFRESH)
+ private Headquarter employeeHeadquarter;
/**
* Id number
private Long employeeId;
/**
- * Employable's business mobile number
+ * Employee's position (example: CEO)
+ */
+ @JoinColumn (name = "employee_position_id")
+ @OneToOne (targetEntity = EmployeePosition.class, cascade = CascadeType.REFRESH)
+ private HireableJobPosition employeeJobPosition;
+
+ /**
+ * Employee's business mobile number
*/
@JoinColumn (name = "employee_mobile_number_id")
@OneToOne (targetEntity = MobileNumber.class, cascade = CascadeType.REFRESH)
private DialableMobileNumber employeeMobileNumber;
/**
- * Employable's staff number
+ * Employee's staff number
*/
@Column (name = "employee_staff_number", length = 20)
private String employeeNumber;
/**
- * Employable's personal data
+ * Employee's personal data
*/
@JoinColumn (name = "employee_personal_data_id")
@OneToOne (targetEntity = UserContact.class, cascade = CascadeType.REFRESH)
private Contact employeePersonalData;
/**
- * Employable's phone extension (or number if different)
+ * Employee's phone extension (or number if different)
*/
@Column (name = "employee_phone_extension", length = 10)
private Integer employeePhoneExtension;
- /**
- * Employable's position (example: CEO)
- */
- @JoinColumn (name = "employee_position_id")
- @OneToOne (targetEntity = EmployeePosition.class, cascade = CascadeType.REFRESH)
- private JobPosition employeePosition;
-
/**
* User owner instance
*/
public BusinessEmployee () {
}
+ /**
+ * Constructor with all required data
+ * <p>
+ * @param employeeCompany Basic company data
+ * @param employeeNumber Employee number (alternative or extra to
+ * contact)
+ * @param employeePersonalData Personal data (contact)
+ */
public BusinessEmployee (final BasicData employeeCompany, final String employeeNumber, final Contact employeePersonalData) {
// Call other constructor
this();
if (null == employeeCompany) {
// Throw NPE
throw new NullPointerException("employeeCompany is null"); //NOI18N
- } else if (((null == employeeNumber) || (employeeNumber.isEmpty()) && (null == employeePersonalData))) {
+ } else if (((null == employeeNumber) || (employeeNumber.isEmpty())) && (null == employeePersonalData)) {
// At least one must be given
- throw new NullPointerException("employeeNumber or employeeContact must be set."); //NOI18N
+ throw new NullPointerException("employeeNumber or employeePersonalData must be set."); //NOI18N
}
// Set all fields
- this.employeeCompany = employeeCompany;
+ this.employeeBasicData = employeeCompany;
this.employeeNumber = employeeNumber;
this.employeePersonalData = employeePersonalData;
}
+ @Override
+ public int compareTo (final Employable employable) {
+ // Check parameter on null-reference and equality to this
+ if (null == employable) {
+ // Should not happen
+ throw new NullPointerException("employable is null"); //NOI18N
+ } else if (employable.equals(this)) {
+ // Same object
+ return 0;
+ }
+
+ // Init comparisons
+ final int[] comparators = {
+ // First employee's number
+ // First employee's number
+ // First employee's number
+ // First employee's number
+ StringUtils.compareIgnoreCase(this.getEmployeeNumber(), employable.getEmployeeNumber()),
+ // ... finally contact data
+ Contacts.compare(this.getEmployeePersonalData(), employable.getEmployeePersonalData()),
+ // ... employee's email address
+ StringUtils.compareIgnoreCase(this.getEmployeeEmailAddress(), employable.getEmployeeEmailAddress()),
+ // ... company data (BasicData)
+ this.getEmployeeBasicData().compareTo(employable.getEmployeeBasicData()),
+ JobPositions.compare(this.getEmployeeJobPosition(), employable.getEmployeeJobPosition()),
+ // ... department
+ Departments.compare(this.getEmployeeDepartment(), employable.getEmployeeDepartment()),
+ // ... branch office
+ BranchOffices.compare(this.getEmployeeBranchOffice(), employable.getEmployeeBranchOffice()),
+ // ... next headquarters
+ Headquarters.compare(this.getEmployeeHeadquarter(), employable.getEmployeeHeadquarter()),
+ };
+
+ // Check all values
+ final int comparison = Comparables.checkAll(comparators);
+
+ // Return value
+ return comparison;
+ }
+
@Override
public boolean equals (final Object object) {
if (null == object) {
return false;
}
- final Employable other = (Employable) object;
+ final Employable employee = (Employable) object;
- if (!Objects.equals(this.getEmployeeId(), other.getEmployeeId())) {
+ if (!Objects.equals(this.getEmployeeId(), employee.getEmployeeId())) {
return false;
- } else if (!Objects.equals(this.getEmployeeCompany(), other.getEmployeeCompany())) {
+ } else if (!Objects.equals(this.getEmployeeBasicData(), employee.getEmployeeBasicData())) {
return false;
- } else if (!Objects.equals(this.getEmployeeNumber(), other.getEmployeeNumber())) {
+ } else if (!Objects.equals(this.getEmployeeNumber(), employee.getEmployeeNumber())) {
return false;
- } else if (!Objects.equals(this.getEmployeePersonalData(), other.getEmployeePersonalData())) {
+ } else if (!Objects.equals(this.getEmployeePersonalData(), employee.getEmployeePersonalData())) {
return false;
}
}
@Override
- public BranchOffice getEmployeeBranchOffice () {
- return this.employeeBranchOffice;
+ public BasicData getEmployeeBasicData () {
+ return this.employeeBasicData;
}
@Override
- public void setEmployeeBranchOffice (final BranchOffice employeeBranchOffice) {
- this.employeeBranchOffice = employeeBranchOffice;
+ public void setEmployeeBasicData (final BasicData employeeBasicData) {
+ this.employeeBasicData = employeeBasicData;
}
@Override
- public BasicData getEmployeeCompany () {
- return this.employeeCompany;
+ public BranchOffice getEmployeeBranchOffice () {
+ return this.employeeBranchOffice;
}
@Override
- public void setEmployeeCompany (final BasicData employeeCompany) {
- this.employeeCompany = employeeCompany;
+ public void setEmployeeBranchOffice (final BranchOffice employeeBranchOffice) {
+ this.employeeBranchOffice = employeeBranchOffice;
}
@Override
}
@Override
- public HeadquartersData getEmployeeHeadquarter () {
+ public Headquarter getEmployeeHeadquarter () {
return this.employeeHeadquarter;
}
@Override
- public void setEmployeeHeadquarter (final HeadquartersData employeeHeadquarter) {
+ public void setEmployeeHeadquarter (final Headquarter employeeHeadquarter) {
this.employeeHeadquarter = employeeHeadquarter;
}
this.employeeId = employeeId;
}
+ @Override
+ public HireableJobPosition getEmployeeJobPosition () {
+ return this.employeeJobPosition;
+ }
+
+ @Override
+ public void setEmployeeJobPosition (final HireableJobPosition employeeJobPosition) {
+ this.employeeJobPosition = employeeJobPosition;
+ }
+
@Override
public DialableMobileNumber getEmployeeMobileNumber () {
return this.employeeMobileNumber;
this.employeePhoneExtension = employeePhoneExtension;
}
- @Override
- public JobPosition getEmployeePosition () {
- return this.employeePosition;
- }
-
- @Override
- public void setEmployeePosition (final JobPosition employeePosition) {
- this.employeePosition = employeePosition;
- }
-
@Override
public User getEmployeeUserOwner () {
return this.employeeUserOwner;
int hash = 3;
hash = 97 * hash + Objects.hashCode(this.getEmployeeId());
- hash = 97 * hash + Objects.hashCode(this.getEmployeeCompany());
+ hash = 97 * hash + Objects.hashCode(this.getEmployeeBasicData());
hash = 97 * hash + Objects.hashCode(this.getEmployeeNumber());
hash = 97 * hash + Objects.hashCode(this.getEmployeePersonalData());