]> git.mxchange.org Git - jcontacts-business-core.git/blobdiff - src/org/mxchange/jcontactsbusiness/model/employee/BusinessEmployee.java
Updated copyright year
[jcontacts-business-core.git] / src / org / mxchange / jcontactsbusiness / model / employee / BusinessEmployee.java
index 21953d581274b5b639967819d3620cef64be6f81..467454c1368a5fd113043f6c54d6756052ed188e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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
@@ -33,22 +33,29 @@ import javax.persistence.Table;
 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)
@@ -59,9 +66,7 @@ import org.mxchange.jcontactsbusiness.model.basicdata.BasicData;
 @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 {
@@ -72,6 +77,13 @@ 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)
         */
@@ -79,13 +91,6 @@ public class BusinessEmployee implements Employable {
        @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
         */
@@ -102,7 +107,7 @@ public class BusinessEmployee implements Employable {
        private Department employeeDepartment;
 
        /**
-        * Employable's email address
+        * Employee's email address
         */
        @Column (name = "employee_email_address", length = 30)
        private String employeeEmailAddress;
@@ -110,9 +115,9 @@ public class BusinessEmployee implements Employable {
        /**
         * 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
@@ -123,38 +128,38 @@ public class BusinessEmployee implements Employable {
        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
         */
@@ -168,6 +173,14 @@ public class BusinessEmployee implements Employable {
        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();
@@ -176,17 +189,57 @@ public class BusinessEmployee implements Employable {
                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) {
@@ -195,15 +248,15 @@ public class BusinessEmployee implements Employable {
                        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;
                }
 
@@ -211,23 +264,23 @@ public class BusinessEmployee implements Employable {
        }
 
        @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
@@ -263,12 +316,12 @@ public class BusinessEmployee implements Employable {
        }
 
        @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;
        }
 
@@ -282,6 +335,16 @@ public class BusinessEmployee implements Employable {
                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;
@@ -322,16 +385,6 @@ public class BusinessEmployee implements Employable {
                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;
@@ -347,7 +400,7 @@ public class BusinessEmployee implements Employable {
                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());