From d10c8a6972b10e638cb4e0e6593a6c34482ff751 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Roland=20H=C3=A4der?= <roland@mxchange.org>
Date: Sun, 23 Jul 2017 13:49:34 +0200
Subject: [PATCH] Having basic data and "business contact" which is really no
 contact in general terms was a bad style anyway. Now these two entities are
 merged into "BusinessBasicData" and kept in main package of this project.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Signed-off-by: Roland Häder <roland@mxchange.org>
---
 .../{basicdata => }/BusinessBasicData.java    | 120 +++++++--
 .../jcontactsbusiness/BusinessContact.java    | 152 -----------
 .../{basicdata => }/CompanyBasicData.java     | 158 +++++++++---
 .../jcontactsbusiness/CompanyContact.java     | 240 ------------------
 .../branch/BranchOffice.java                  |   6 +-
 .../branch/CompanyBranchOffice.java           |  16 +-
 .../department/CompanyDepartment.java         |  12 +-
 .../department/Department.java                |   6 +-
 .../employee/CompanyEmployee.java             |  12 +-
 .../jcontactsbusiness/employee/Employee.java  |   6 +-
 .../BusinessContactAlreadyAddedException.java |   6 +-
 11 files changed, 258 insertions(+), 476 deletions(-)
 rename src/org/mxchange/jcontactsbusiness/{basicdata => }/BusinessBasicData.java (63%)
 delete mode 100644 src/org/mxchange/jcontactsbusiness/BusinessContact.java
 rename src/org/mxchange/jcontactsbusiness/{basicdata => }/CompanyBasicData.java (60%)
 delete mode 100644 src/org/mxchange/jcontactsbusiness/CompanyContact.java

diff --git a/src/org/mxchange/jcontactsbusiness/basicdata/BusinessBasicData.java b/src/org/mxchange/jcontactsbusiness/BusinessBasicData.java
similarity index 63%
rename from src/org/mxchange/jcontactsbusiness/basicdata/BusinessBasicData.java
rename to src/org/mxchange/jcontactsbusiness/BusinessBasicData.java
index 29a041a..b90ed81 100644
--- a/src/org/mxchange/jcontactsbusiness/basicdata/BusinessBasicData.java
+++ b/src/org/mxchange/jcontactsbusiness/BusinessBasicData.java
@@ -14,34 +14,123 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package org.mxchange.jcontactsbusiness.basicdata;
+package org.mxchange.jcontactsbusiness;
 
 import java.io.Serializable;
 import java.util.Calendar;
+import java.util.List;
+import org.mxchange.jcontactsbusiness.branch.BranchOffice;
+import org.mxchange.jcontactsbusiness.employee.Employee;
+import org.mxchange.jcontactsbusiness.headquarters.HeadQuartersData;
 import org.mxchange.jcontactsbusiness.logo.BusinessLogo;
 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
 import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
+import org.mxchange.jusercore.model.user.User;
 
 /**
- * A POJI for basic business data
+ * A POJI for business contact classes
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
 public interface BusinessBasicData extends Serializable {
 
 	/**
-	 * Getter for id number
+	 * Getter for branches list
 	 * <p>
-	 * @return Id number
+	 * @return Branches list
 	 */
-	Long getCompanyBasicId ();
+	List<BranchOffice> getBrancheOffices ();
 
 	/**
-	 * Setter for id number
+	 * Setter for branches list
 	 * <p>
-	 * @param companyBasicId Id number
+	 * @param branches Branches list
 	 */
-	void setCompanyBasicId (final Long companyBasicId);
+	void setBrancheOffices (final List<BranchOffice> branches);
+
+	/**
+	 * Getter for company contact person
+	 * <p>
+	 * @return Company contact person
+	 */
+	Employee getCompanyContact ();
+
+	/**
+	 * Setter for company contact person
+	 * <p>
+	 * @param companyContact Company contact person
+	 */
+	void setCompanyContact (final Employee companyContact);
+
+	/**
+	 * Getter for business contact id
+	 * <p>
+	 * @return Business contact id
+	 */
+	Long getBusinessContactId ();
+
+	/**
+	 * Setter for business contact id
+	 * <p>
+	 * @param businessContactId Business contact id
+	 */
+	void setBusinessContactId (final Long businessContactId);
+
+	/**
+	 * Getter for company founder
+	 * <p>
+	 * @return Company founder
+	 */
+	Employee getCompanyFounder ();
+
+	/**
+	 * Setter for company founder
+	 * <p>
+	 * @param companyFounder Company founder
+	 */
+	void setCompanyFounder (final Employee companyFounder);
+
+	/**
+	 * Getter for headquarters data
+	 * <p>
+	 * @return Headquarters data
+	 */
+	HeadQuartersData getHeadQuartersData ();
+
+	/**
+	 * Setter for headquarters data
+	 * <p>
+	 * @param headQuartersData Headquarters data
+	 */
+	void setHeadQuartersData (final HeadQuartersData headQuartersData);
+
+	/**
+	 * Getter for user owner instance
+	 * <p>
+	 * @return User owner instance
+	 */
+	User getContactCompanyUserOwner ();
+
+	/**
+	 * Setter for user owner instance
+	 * <p>
+	 * @param contactUserOwner User owner instance
+	 */
+	void setContactCompanyUserOwner (final User contactUserOwner);
+
+	/**
+	 * Getter for timestamp when this entry has been created
+	 * <p>
+	 * @return Timestamp when this entry has been created
+	 */
+	Calendar getContactCreated ();
+
+	/**
+	 * Setter for timestamp when this entry has been created
+	 * <p>
+	 * @param contactCreated Timestamp when this entry has been created
+	 */
+	void setContactCreated (final Calendar contactCreated);
 
 	/**
 	 * Getter for comments
@@ -169,24 +258,9 @@ public interface BusinessBasicData extends Serializable {
 	 */
 	void setCompanyWebsiteUrl (final String companyWebsiteUrl);
 
-	/**
-	 * Getter for timestamp when this entry has been created
-	 * <p>
-	 * @return Timestamp when this entry has been created
-	 */
-	Calendar getBasicCreated ();
-
-	/**
-	 * Setter for timestamp when this entry has been created
-	 * <p>
-	 * @param basicCreated Timestamp when this entry has been created
-	 */
-	void setBasicCreated (final Calendar basicCreated);
-
 	@Override
 	boolean equals (final Object object);
 
 	@Override
 	int hashCode ();
-
 }
diff --git a/src/org/mxchange/jcontactsbusiness/BusinessContact.java b/src/org/mxchange/jcontactsbusiness/BusinessContact.java
deleted file mode 100644
index 8fba8bb..0000000
--- a/src/org/mxchange/jcontactsbusiness/BusinessContact.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2016, 2017 Roland Häder
- *
- * 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
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.mxchange.jcontactsbusiness;
-
-import java.io.Serializable;
-import java.util.Calendar;
-import java.util.List;
-import org.mxchange.jcontactsbusiness.basicdata.BusinessBasicData;
-import org.mxchange.jcontactsbusiness.branch.BranchOffice;
-import org.mxchange.jcontactsbusiness.employee.Employee;
-import org.mxchange.jcontactsbusiness.headquarters.HeadQuartersData;
-import org.mxchange.jusercore.model.user.User;
-
-/**
- * A POJI for business contact classes
- * <p>
- * @author Roland Häder<roland@mxchange.org>
- */
-public interface BusinessContact extends Serializable {
-
-	/**
-	 * Getter for basic company data
-	 * <p>
-	 * @return Basic company data
-	 */
-	BusinessBasicData getBasicBusinessData ();
-
-	/**
-	 * Setter for basic company data
-	 * <p>
-	 * @param basicBusinessData Basic company data
-	 */
-	void setBasicBusinessData (final BusinessBasicData basicBusinessData);
-
-	/**
-	 * Getter for branches list
-	 * <p>
-	 * @return Branches list
-	 */
-	List<BranchOffice> getBrancheOffices ();
-
-	/**
-	 * Setter for branches list
-	 * <p>
-	 * @param branches Branches list
-	 */
-	void setBrancheOffices (final List<BranchOffice> branches);
-
-	/**
-	 * Getter for company contact person
-	 * <p>
-	 * @return Company contact person
-	 */
-	Employee getCompanyContact ();
-
-	/**
-	 * Setter for company contact person
-	 * <p>
-	 * @param companyContact Company contact person
-	 */
-	void setCompanyContact (final Employee companyContact);
-
-	/**
-	 * Getter for business contact id
-	 * <p>
-	 * @return Business contact id
-	 */
-	Long getBusinessContactId ();
-
-	/**
-	 * Setter for business contact id
-	 * <p>
-	 * @param businessContactId Business contact id
-	 */
-	void setBusinessContactId (final Long businessContactId);
-
-	/**
-	 * Getter for company founder
-	 * <p>
-	 * @return Company founder
-	 */
-	Employee getCompanyFounder ();
-
-	/**
-	 * Setter for company founder
-	 * <p>
-	 * @param companyFounder Company founder
-	 */
-	void setCompanyFounder (final Employee companyFounder);
-
-	/**
-	 * Getter for headquarters data
-	 * <p>
-	 * @return Headquarters data
-	 */
-	HeadQuartersData getHeadQuartersData ();
-
-	/**
-	 * Setter for headquarters data
-	 * <p>
-	 * @param headQuartersData Headquarters data
-	 */
-	void setHeadQuartersData (final HeadQuartersData headQuartersData);
-
-	/**
-	 * Getter for user owner instance
-	 * <p>
-	 * @return User owner instance
-	 */
-	User getContactCompanyUserOwner ();
-
-	/**
-	 * Setter for user owner instance
-	 * <p>
-	 * @param contactUserOwner User owner instance
-	 */
-	void setContactCompanyUserOwner (final User contactUserOwner);
-
-	/**
-	 * Getter for timestamp when this entry has been created
-	 * <p>
-	 * @return Timestamp when this entry has been created
-	 */
-	Calendar getContactCreated ();
-
-	/**
-	 * Setter for timestamp when this entry has been created
-	 * <p>
-	 * @param contactCreated Timestamp when this entry has been created
-	 */
-	void setContactCreated (final Calendar contactCreated);
-
-	@Override
-	boolean equals (final Object object);
-
-	@Override
-	int hashCode ();
-}
diff --git a/src/org/mxchange/jcontactsbusiness/basicdata/CompanyBasicData.java b/src/org/mxchange/jcontactsbusiness/CompanyBasicData.java
similarity index 60%
rename from src/org/mxchange/jcontactsbusiness/basicdata/CompanyBasicData.java
rename to src/org/mxchange/jcontactsbusiness/CompanyBasicData.java
index 8918906..e9eb0bf 100644
--- a/src/org/mxchange/jcontactsbusiness/basicdata/CompanyBasicData.java
+++ b/src/org/mxchange/jcontactsbusiness/CompanyBasicData.java
@@ -14,9 +14,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package org.mxchange.jcontactsbusiness.basicdata;
+package org.mxchange.jcontactsbusiness;
 
 import java.util.Calendar;
+import java.util.List;
 import java.util.Objects;
 import javax.persistence.Basic;
 import javax.persistence.CascadeType;
@@ -32,15 +33,22 @@ import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 import javax.persistence.Transient;
+import org.mxchange.jcontactsbusiness.branch.BranchOffice;
+import org.mxchange.jcontactsbusiness.employee.CompanyEmployee;
+import org.mxchange.jcontactsbusiness.employee.Employee;
+import org.mxchange.jcontactsbusiness.headquarters.CompanyHeadQuartersData;
+import org.mxchange.jcontactsbusiness.headquarters.HeadQuartersData;
 import org.mxchange.jcontactsbusiness.logo.BusinessLogo;
 import org.mxchange.jcontactsbusiness.logo.CompanyLogo;
 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
 import org.mxchange.jphone.phonenumbers.fax.FaxNumber;
 import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
 import org.mxchange.jphone.phonenumbers.landline.LandLineNumber;
+import org.mxchange.jusercore.model.user.LoginUser;
+import org.mxchange.jusercore.model.user.User;
 
 /**
- * A POJO for basic company data
+ * A POJO for business basic data
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
@@ -53,23 +61,21 @@ public class CompanyBasicData implements BusinessBasicData {
 	 * Serial number
 	 */
 	@Transient
-	private static final long serialVersionUID = 486_895_878_178_761L;
+	private static final long serialVersionUID = 470_375_172_748_691L;
 
 	/**
-	 * Timestamp when this entry has been created
+	 * Reference to company branch offices
 	 */
-	@Basic (optional = false)
-	@Temporal (TemporalType.TIMESTAMP)
-	@Column (name = "company_entry_created", nullable = false, updatable = false)
-	private Calendar basicCreated;
+	@Transient
+	private List<BranchOffice> brancheOffices;
 
 	/**
 	 * Id number
 	 */
 	@Id
-	@Column (name = "company_basic_id", nullable = false, updatable = false)
+	@Column (name = "business_contact_id", nullable = false, updatable = false)
 	@GeneratedValue (strategy = GenerationType.IDENTITY)
-	private Long companyBasicId;
+	private Long businessContactId;
 
 	/**
 	 * Comments (any)
@@ -78,6 +84,13 @@ public class CompanyBasicData implements BusinessBasicData {
 	@Column (name = "company_comments")
 	private String companyComments;
 
+	/**
+	 * Reference to contact person
+	 */
+	@JoinColumn (name = "company_contact_id")
+	@OneToOne (targetEntity = CompanyEmployee.class, cascade = CascadeType.ALL)
+	private Employee companyContact;
+
 	/**
 	 * Company's main email address (example: info@company.com)
 	 */
@@ -91,6 +104,13 @@ public class CompanyBasicData implements BusinessBasicData {
 	@OneToOne (targetEntity = FaxNumber.class, cascade = CascadeType.ALL)
 	private DialableFaxNumber companyFaxNumber;
 
+	/**
+	 * Reference to CEO "employee"
+	 */
+	@JoinColumn (name = "company_founder_id")
+	@OneToOne (targetEntity = CompanyEmployee.class, cascade = CascadeType.ALL)
+	private Employee companyFounder;
+
 	/**
 	 * Legal status of company (example: "Inc.", "GmbH")
 	 */
@@ -131,6 +151,28 @@ public class CompanyBasicData implements BusinessBasicData {
 	@Column (name = "company_website_url")
 	private String companyWebsiteUrl;
 
+	/**
+	 * User owner instance
+	 */
+	@JoinColumn (name = "company_owner_user_id")
+	@OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH)
+	private User contactCompanyUserOwner;
+
+	/**
+	 * Timestamp when this entry has been created
+	 */
+	@Basic (optional = false)
+	@Temporal (TemporalType.TIMESTAMP)
+	@Column (name = "company_entry_created", nullable = false, updatable = false)
+	private Calendar contactCreated;
+
+	/**
+	 * Reference to headquarters data
+	 */
+	@JoinColumn (name = "company_headquarters_data_id", nullable = false, updatable = false)
+	@OneToOne (targetEntity = CompanyHeadQuartersData.class, cascade = CascadeType.ALL, optional = false)
+	private HeadQuartersData headQuartersData;
+
 	@Override
 	public boolean equals (final Object object) {
 		if (null == object) {
@@ -141,13 +183,17 @@ public class CompanyBasicData implements BusinessBasicData {
 
 		final BusinessBasicData other = (BusinessBasicData) object;
 
-		if (!Objects.equals(this.getCompanyBasicId(), other.getCompanyBasicId())) {
+		if (!Objects.equals(this.getBusinessContactId(), other.getBusinessContactId())) {
+			return false;
+		} else if (!Objects.equals(this.getCompanyName(), other.getCompanyName())) {
 			return false;
 		} else if (!Objects.equals(this.getCompanyLegalStatus(), other.getCompanyLegalStatus())) {
 			return false;
-		} else if (!Objects.equals(this.getCompanyName(), other.getCompanyName())) {
+		} else if (!Objects.equals(this.getHeadQuartersData(), other.getHeadQuartersData())) {
+			return false;
+		} else if (!Objects.equals(this.getCompanyContact(), other.getCompanyContact())) {
 			return false;
-		} else if (!Objects.equals(this.getCompanyTaxNumber(), other.getCompanyTaxNumber())) {
+		} else if (!Objects.equals(this.getCompanyFounder(), other.getCompanyFounder())) {
 			return false;
 		}
 
@@ -155,25 +201,25 @@ public class CompanyBasicData implements BusinessBasicData {
 	}
 
 	@Override
-	@SuppressWarnings ("ReturnOfDateField")
-	public Calendar getBasicCreated () {
-		return this.basicCreated;
+	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
+	public List<BranchOffice> getBrancheOffices () {
+		return this.brancheOffices;
 	}
 
 	@Override
-	@SuppressWarnings ("AssignmentToDateFieldFromParameter")
-	public void setBasicCreated (final Calendar basicCreated) {
-		this.basicCreated = basicCreated;
+	@SuppressWarnings ("AssignmentToCollectionOrArrayFieldFromParameter")
+	public void setBrancheOffices (final List<BranchOffice> brancheOffices) {
+		this.brancheOffices = brancheOffices;
 	}
 
 	@Override
-	public Long getCompanyBasicId () {
-		return this.companyBasicId;
+	public Long getBusinessContactId () {
+		return this.businessContactId;
 	}
 
 	@Override
-	public void setCompanyBasicId (final Long companyBasicId) {
-		this.companyBasicId = companyBasicId;
+	public void setBusinessContactId (final Long businessContactId) {
+		this.businessContactId = businessContactId;
 	}
 
 	@Override
@@ -186,6 +232,16 @@ public class CompanyBasicData implements BusinessBasicData {
 		this.companyComments = companyComments;
 	}
 
+	@Override
+	public Employee getCompanyContact () {
+		return this.companyContact;
+	}
+
+	@Override
+	public void setCompanyContact (final Employee companyContact) {
+		this.companyContact = companyContact;
+	}
+
 	@Override
 	public String getCompanyEmailAddress () {
 		return this.companyEmailAddress;
@@ -206,6 +262,16 @@ public class CompanyBasicData implements BusinessBasicData {
 		this.companyFaxNumber = companyFaxNumber;
 	}
 
+	@Override
+	public Employee getCompanyFounder () {
+		return this.companyFounder;
+	}
+
+	@Override
+	public void setCompanyFounder (final Employee companyFounder) {
+		this.companyFounder = companyFounder;
+	}
+
 	@Override
 	public String getCompanyLegalStatus () {
 		return this.companyLegalStatus;
@@ -267,13 +333,47 @@ public class CompanyBasicData implements BusinessBasicData {
 	}
 
 	@Override
-	public int hashCode () {
-		int hash = 5;
+	public User getContactCompanyUserOwner () {
+		return this.contactCompanyUserOwner;
+	}
 
-		hash = 53 * hash + Objects.hashCode(this.getCompanyBasicId());
-		hash = 53 * hash + Objects.hashCode(this.getCompanyLegalStatus());
-		hash = 53 * hash + Objects.hashCode(this.getCompanyName());
-		hash = 53 * hash + Objects.hashCode(this.getCompanyTaxNumber());
+	@Override
+	public void setContactCompanyUserOwner (final User contactCompanyUserOwner) {
+		this.contactCompanyUserOwner = contactCompanyUserOwner;
+	}
+
+	@Override
+	@SuppressWarnings ("ReturnOfDateField")
+	public Calendar getContactCreated () {
+		return this.contactCreated;
+	}
+
+	@Override
+	@SuppressWarnings ("AssignmentToDateFieldFromParameter")
+	public void setContactCreated (final Calendar contactCreated) {
+		this.contactCreated = contactCreated;
+	}
+
+	@Override
+	public HeadQuartersData getHeadQuartersData () {
+		return this.headQuartersData;
+	}
+
+	@Override
+	public void setHeadQuartersData (final HeadQuartersData headQuartersData) {
+		this.headQuartersData = headQuartersData;
+	}
+
+	@Override
+	public int hashCode () {
+		int hash = 3;
+
+		hash = 37 * hash + Objects.hashCode(this.getBusinessContactId());
+		hash = 37 * hash + Objects.hashCode(this.getCompanyName());
+		hash = 37 * hash + Objects.hashCode(this.getCompanyLegalStatus());
+		hash = 37 * hash + Objects.hashCode(this.getHeadQuartersData());
+		hash = 37 * hash + Objects.hashCode(this.getCompanyContact());
+		hash = 37 * hash + Objects.hashCode(this.getCompanyFounder());
 
 		return hash;
 	}
diff --git a/src/org/mxchange/jcontactsbusiness/CompanyContact.java b/src/org/mxchange/jcontactsbusiness/CompanyContact.java
deleted file mode 100644
index 1c38b86..0000000
--- a/src/org/mxchange/jcontactsbusiness/CompanyContact.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (C) 2016, 2017 Roland Häder
- *
- * 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
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.mxchange.jcontactsbusiness;
-
-import java.util.Calendar;
-import java.util.List;
-import java.util.Objects;
-import javax.persistence.Basic;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.persistence.Transient;
-import org.mxchange.jcontactsbusiness.basicdata.BusinessBasicData;
-import org.mxchange.jcontactsbusiness.basicdata.CompanyBasicData;
-import org.mxchange.jcontactsbusiness.branch.BranchOffice;
-import org.mxchange.jcontactsbusiness.employee.CompanyEmployee;
-import org.mxchange.jcontactsbusiness.employee.Employee;
-import org.mxchange.jcontactsbusiness.headquarters.CompanyHeadQuartersData;
-import org.mxchange.jcontactsbusiness.headquarters.HeadQuartersData;
-import org.mxchange.jusercore.model.user.LoginUser;
-import org.mxchange.jusercore.model.user.User;
-
-/**
- * A POJO for business contacts
- * <p>
- * @author Roland Häder<roland@mxchange.org>
- */
-@Entity (name = "company_contacts")
-@Table (name = "company_contacts")
-@SuppressWarnings ("PersistenceUnitPresent")
-public class CompanyContact implements BusinessContact {
-
-	/**
-	 * Serial number
-	 */
-	@Transient
-	private static final long serialVersionUID = 470_375_172_748_691L;
-
-	/**
-	 * Reference to basic data
-	 */
-	@JoinColumn (name = "company_basic_data_id", nullable = false, updatable = false)
-	@OneToOne (targetEntity = CompanyBasicData.class, cascade = CascadeType.ALL, optional = false)
-	private BusinessBasicData basicBusinessData;
-
-	/**
-	 * Reference to company branch offices
-	 */
-	@Transient
-	private List<BranchOffice> brancheOffices;
-
-	/**
-	 * Id number
-	 */
-	@Id
-	@Column (name = "business_contact_id", nullable = false, updatable = false)
-	@GeneratedValue (strategy = GenerationType.IDENTITY)
-	private Long businessContactId;
-
-	/**
-	 * Reference to contact person
-	 */
-	@JoinColumn (name = "company_contact_id")
-	@OneToOne (targetEntity = CompanyEmployee.class, cascade = CascadeType.ALL)
-	private Employee companyContact;
-
-	/**
-	 * Reference to CEO "employee"
-	 */
-	@JoinColumn (name = "company_founder_id")
-	@OneToOne (targetEntity = CompanyEmployee.class, cascade = CascadeType.ALL)
-	private Employee companyFounder;
-
-	/**
-	 * User owner instance
-	 */
-	@JoinColumn (name = "company_owner_user_id")
-	@OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH)
-	private User contactCompanyUserOwner;
-
-	/**
-	 * Timestamp when this entry has been created
-	 */
-	@Basic (optional = false)
-	@Temporal (TemporalType.TIMESTAMP)
-	@Column (name = "company_entry_created", nullable = false, updatable = false)
-	private Calendar contactCreated;
-
-	/**
-	 * Reference to headquarters data
-	 */
-	@JoinColumn (name = "company_headquarters_data_id", nullable = false, updatable = false)
-	@OneToOne (targetEntity = CompanyHeadQuartersData.class, cascade = CascadeType.ALL, optional = false)
-	private HeadQuartersData headQuartersData;
-
-	@Override
-	public boolean equals (final Object object) {
-		if (null == object) {
-			return false;
-		} else if (this.getClass() != object.getClass()) {
-			return false;
-		}
-
-		final BusinessContact other = (BusinessContact) object;
-
-		if (!Objects.equals(this.getBusinessContactId(), other.getBusinessContactId())) {
-			return false;
-		} else if (!Objects.equals(this.getCompanyContact(), other.getCompanyContact())) {
-			return false;
-		} else if (!Objects.equals(this.getCompanyFounder(), other.getCompanyFounder())) {
-			return false;
-		} else if (!Objects.equals(this.getBasicBusinessData(), other.getBasicBusinessData())) {
-			return false;
-		} else if (!Objects.equals(this.getHeadQuartersData(), other.getHeadQuartersData())) {
-			return false;
-		}
-
-		return true;
-	}
-
-	@Override
-	public BusinessBasicData getBasicBusinessData () {
-		return this.basicBusinessData;
-	}
-
-	@Override
-	public void setBasicBusinessData (final BusinessBasicData basicBusinessData) {
-		this.basicBusinessData = basicBusinessData;
-	}
-
-	@Override
-	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
-	public List<BranchOffice> getBrancheOffices () {
-		return this.brancheOffices;
-	}
-
-	@Override
-	@SuppressWarnings ("AssignmentToCollectionOrArrayFieldFromParameter")
-	public void setBrancheOffices (final List<BranchOffice> brancheOffices) {
-		this.brancheOffices = brancheOffices;
-	}
-
-	@Override
-	public Long getBusinessContactId () {
-		return this.businessContactId;
-	}
-
-	@Override
-	public void setBusinessContactId (final Long businessContactId) {
-		this.businessContactId = businessContactId;
-	}
-
-	@Override
-	public Employee getCompanyContact () {
-		return this.companyContact;
-	}
-
-	@Override
-	public void setCompanyContact (final Employee companyContact) {
-		this.companyContact = companyContact;
-	}
-
-	@Override
-	public Employee getCompanyFounder () {
-		return this.companyFounder;
-	}
-
-	@Override
-	public void setCompanyFounder (final Employee companyFounder) {
-		this.companyFounder = companyFounder;
-	}
-
-	@Override
-	public User getContactCompanyUserOwner () {
-		return this.contactCompanyUserOwner;
-	}
-
-	@Override
-	public void setContactCompanyUserOwner (final User contactCompanyUserOwner) {
-		this.contactCompanyUserOwner = contactCompanyUserOwner;
-	}
-
-	@Override
-	@SuppressWarnings ("ReturnOfDateField")
-	public Calendar getContactCreated () {
-		return this.contactCreated;
-	}
-
-	@Override
-	@SuppressWarnings ("AssignmentToDateFieldFromParameter")
-	public void setContactCreated (final Calendar contactCreated) {
-		this.contactCreated = contactCreated;
-	}
-
-	@Override
-	public HeadQuartersData getHeadQuartersData () {
-		return this.headQuartersData;
-	}
-
-	@Override
-	public void setHeadQuartersData (final HeadQuartersData headQuartersData) {
-		this.headQuartersData = headQuartersData;
-	}
-
-	@Override
-	public int hashCode () {
-		int hash = 3;
-
-		hash = 37 * hash + Objects.hashCode(this.getBusinessContactId());
-		hash = 37 * hash + Objects.hashCode(this.getCompanyContact());
-		hash = 37 * hash + Objects.hashCode(this.getCompanyFounder());
-		hash = 37 * hash + Objects.hashCode(this.getBasicBusinessData());
-		hash = 37 * hash + Objects.hashCode(this.getHeadQuartersData());
-
-		return hash;
-	}
-
-}
diff --git a/src/org/mxchange/jcontactsbusiness/branch/BranchOffice.java b/src/org/mxchange/jcontactsbusiness/branch/BranchOffice.java
index 7e445c7..3616fc2 100644
--- a/src/org/mxchange/jcontactsbusiness/branch/BranchOffice.java
+++ b/src/org/mxchange/jcontactsbusiness/branch/BranchOffice.java
@@ -18,11 +18,11 @@ package org.mxchange.jcontactsbusiness.branch;
 
 import java.io.Serializable;
 import java.util.Calendar;
-import org.mxchange.jcontactsbusiness.BusinessContact;
 import org.mxchange.jcountry.data.Country;
 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
 import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
 import org.mxchange.jusercore.model.user.User;
+import org.mxchange.jcontactsbusiness.BusinessBasicData;
 
 /**
  * A POJI for branch offices
@@ -190,14 +190,14 @@ public interface BranchOffice extends Serializable {
 	 * <p>
 	 * @return Branch office's company
 	 */
-	BusinessContact getBranchCompanyContact ();
+	BusinessBasicData getBranchCompanyContact ();
 
 	/**
 	 * Setter for branch office's company
 	 * <p>
 	 * @param branchCompanyContact Branch office's company
 	 */
-	void setBranchCompanyContact (final BusinessContact branchCompanyContact);
+	void setBranchCompanyContact (final BusinessBasicData branchCompanyContact);
 
 	/**
 	 * Getter for user owner instance
diff --git a/src/org/mxchange/jcontactsbusiness/branch/CompanyBranchOffice.java b/src/org/mxchange/jcontactsbusiness/branch/CompanyBranchOffice.java
index 0a44036..b52338f 100644
--- a/src/org/mxchange/jcontactsbusiness/branch/CompanyBranchOffice.java
+++ b/src/org/mxchange/jcontactsbusiness/branch/CompanyBranchOffice.java
@@ -31,8 +31,8 @@ import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 import javax.persistence.Transient;
-import org.mxchange.jcontactsbusiness.BusinessContact;
-import org.mxchange.jcontactsbusiness.CompanyContact;
+import org.mxchange.jcontactsbusiness.BusinessBasicData;
+import org.mxchange.jcontactsbusiness.CompanyBasicData;
 import org.mxchange.jcountry.data.Country;
 import org.mxchange.jcountry.data.CountryData;
 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
@@ -69,8 +69,8 @@ public class CompanyBranchOffice implements BranchOffice {
 	 * Company that has this branch office
 	 */
 	@JoinColumn (name = "branch_company_id", nullable = false, updatable = false)
-	@OneToOne (targetEntity = CompanyContact.class, optional = false, cascade = CascadeType.ALL)
-	private BusinessContact branchCompanyContact;
+	@OneToOne (targetEntity = CompanyBasicData.class, optional = false, cascade = CascadeType.ALL)
+	private BusinessBasicData branchCompanyContact;
 
 	/**
 	 * Branch office's country code
@@ -144,8 +144,8 @@ public class CompanyBranchOffice implements BranchOffice {
 	/**
 	 * User owner instance
 	 */
-	@JoinColumn (name = "branch_user_id", nullable = false, updatable = false)
-	@OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH, optional = false)
+	@JoinColumn (name = "branch_user_id")
+	@OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH)
 	private User branchUserOwner;
 
 	/**
@@ -197,12 +197,12 @@ public class CompanyBranchOffice implements BranchOffice {
 	}
 
 	@Override
-	public BusinessContact getBranchCompanyContact () {
+	public BusinessBasicData getBranchCompanyContact () {
 		return this.branchCompanyContact;
 	}
 
 	@Override
-	public void setBranchCompanyContact (final BusinessContact branchCompanyContact) {
+	public void setBranchCompanyContact (final BusinessBasicData branchCompanyContact) {
 		this.branchCompanyContact = branchCompanyContact;
 	}
 
diff --git a/src/org/mxchange/jcontactsbusiness/department/CompanyDepartment.java b/src/org/mxchange/jcontactsbusiness/department/CompanyDepartment.java
index dd64d2e..6e56705 100644
--- a/src/org/mxchange/jcontactsbusiness/department/CompanyDepartment.java
+++ b/src/org/mxchange/jcontactsbusiness/department/CompanyDepartment.java
@@ -32,8 +32,7 @@ import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 import javax.persistence.Transient;
-import org.mxchange.jcontactsbusiness.BusinessContact;
-import org.mxchange.jcontactsbusiness.CompanyContact;
+import org.mxchange.jcontactsbusiness.CompanyBasicData;
 import org.mxchange.jcontactsbusiness.branch.BranchOffice;
 import org.mxchange.jcontactsbusiness.branch.CompanyBranchOffice;
 import org.mxchange.jcontactsbusiness.employee.CompanyEmployee;
@@ -42,6 +41,7 @@ import org.mxchange.jcontactsbusiness.headquarters.CompanyHeadQuartersData;
 import org.mxchange.jcontactsbusiness.headquarters.HeadQuartersData;
 import org.mxchange.jusercore.model.user.LoginUser;
 import org.mxchange.jusercore.model.user.User;
+import org.mxchange.jcontactsbusiness.BusinessBasicData;
 
 /**
  * A POJO for company departments
@@ -77,8 +77,8 @@ public class CompanyDepartment implements Department {
 	 * Connection to company contact
 	 */
 	@JoinColumn (name = "department_company_id", nullable = false, updatable = false)
-	@ManyToOne (targetEntity = CompanyContact.class, cascade = CascadeType.ALL, optional = false)
-	private BusinessContact departmentCompany;
+	@ManyToOne (targetEntity = CompanyBasicData.class, cascade = CascadeType.ALL, optional = false)
+	private BusinessBasicData departmentCompany;
 
 	/**
 	 * Timestamp when this entry has been created
@@ -159,12 +159,12 @@ public class CompanyDepartment implements Department {
 	}
 
 	@Override
-	public BusinessContact getDepartmentCompany () {
+	public BusinessBasicData getDepartmentCompany () {
 		return this.departmentCompany;
 	}
 
 	@Override
-	public void setDepartmentCompany (final BusinessContact departmentCompany) {
+	public void setDepartmentCompany (final BusinessBasicData departmentCompany) {
 		this.departmentCompany = departmentCompany;
 	}
 
diff --git a/src/org/mxchange/jcontactsbusiness/department/Department.java b/src/org/mxchange/jcontactsbusiness/department/Department.java
index 6f5be39..08de410 100644
--- a/src/org/mxchange/jcontactsbusiness/department/Department.java
+++ b/src/org/mxchange/jcontactsbusiness/department/Department.java
@@ -18,11 +18,11 @@ package org.mxchange.jcontactsbusiness.department;
 
 import java.io.Serializable;
 import java.util.Calendar;
-import org.mxchange.jcontactsbusiness.BusinessContact;
 import org.mxchange.jcontactsbusiness.branch.BranchOffice;
 import org.mxchange.jcontactsbusiness.employee.Employee;
 import org.mxchange.jcontactsbusiness.headquarters.HeadQuartersData;
 import org.mxchange.jusercore.model.user.User;
+import org.mxchange.jcontactsbusiness.BusinessBasicData;
 
 /**
  * A POJI for company departments
@@ -36,14 +36,14 @@ public interface Department extends Serializable {
 	 * <p>
 	 * @return Connection to company contact
 	 */
-	BusinessContact getDepartmentCompany ();
+	BusinessBasicData getDepartmentCompany ();
 
 	/**
 	 * Setter for connection to company contact
 	 * <p>
 	 * @param departmentCompany Connection to company contact
 	 */
-	void setDepartmentCompany (final BusinessContact departmentCompany);
+	void setDepartmentCompany (final BusinessBasicData departmentCompany);
 
 	/**
 	 * Getter for connection to company headquarters
diff --git a/src/org/mxchange/jcontactsbusiness/employee/CompanyEmployee.java b/src/org/mxchange/jcontactsbusiness/employee/CompanyEmployee.java
index 76fb0e2..c16ab48 100644
--- a/src/org/mxchange/jcontactsbusiness/employee/CompanyEmployee.java
+++ b/src/org/mxchange/jcontactsbusiness/employee/CompanyEmployee.java
@@ -33,8 +33,7 @@ import javax.persistence.TemporalType;
 import javax.persistence.Transient;
 import org.mxchange.jcontacts.contact.Contact;
 import org.mxchange.jcontacts.contact.UserContact;
-import org.mxchange.jcontactsbusiness.BusinessContact;
-import org.mxchange.jcontactsbusiness.CompanyContact;
+import org.mxchange.jcontactsbusiness.CompanyBasicData;
 import org.mxchange.jcontactsbusiness.branch.BranchOffice;
 import org.mxchange.jcontactsbusiness.branch.CompanyBranchOffice;
 import org.mxchange.jcontactsbusiness.department.CompanyDepartment;
@@ -47,6 +46,7 @@ import org.mxchange.jphone.phonenumbers.mobile.DialableMobileNumber;
 import org.mxchange.jphone.phonenumbers.mobile.MobileNumber;
 import org.mxchange.jusercore.model.user.LoginUser;
 import org.mxchange.jusercore.model.user.User;
+import org.mxchange.jcontactsbusiness.BusinessBasicData;
 
 /**
  * A POJO for company employees (including CEO)
@@ -75,8 +75,8 @@ public class CompanyEmployee implements Employee {
 	 * Company the employee is working at
 	 */
 	@JoinColumn (name = "employee_company_id", nullable = false, updatable = false)
-	@OneToOne (targetEntity = CompanyContact.class, cascade = CascadeType.ALL, optional = false)
-	private BusinessContact employeeCompany;
+	@OneToOne (targetEntity = CompanyBasicData.class, cascade = CascadeType.ALL, optional = false)
+	private BusinessBasicData employeeCompany;
 
 	/**
 	 * Timestamp when this entry has been created
@@ -188,12 +188,12 @@ public class CompanyEmployee implements Employee {
 	}
 
 	@Override
-	public BusinessContact getEmployeeCompany () {
+	public BusinessBasicData getEmployeeCompany () {
 		return this.employeeCompany;
 	}
 
 	@Override
-	public void setEmployeeCompany (final BusinessContact employeeCompany) {
+	public void setEmployeeCompany (final BusinessBasicData employeeCompany) {
 		this.employeeCompany = employeeCompany;
 	}
 
diff --git a/src/org/mxchange/jcontactsbusiness/employee/Employee.java b/src/org/mxchange/jcontactsbusiness/employee/Employee.java
index 69de2be..a7e9b0b 100644
--- a/src/org/mxchange/jcontactsbusiness/employee/Employee.java
+++ b/src/org/mxchange/jcontactsbusiness/employee/Employee.java
@@ -19,13 +19,13 @@ package org.mxchange.jcontactsbusiness.employee;
 import java.io.Serializable;
 import java.util.Calendar;
 import org.mxchange.jcontacts.contact.Contact;
-import org.mxchange.jcontactsbusiness.BusinessContact;
 import org.mxchange.jcontactsbusiness.branch.BranchOffice;
 import org.mxchange.jcontactsbusiness.department.Department;
 import org.mxchange.jcontactsbusiness.headquarters.HeadQuartersData;
 import org.mxchange.jcontactsbusiness.jobposition.JobPosition;
 import org.mxchange.jphone.phonenumbers.mobile.DialableMobileNumber;
 import org.mxchange.jusercore.model.user.User;
+import org.mxchange.jcontactsbusiness.BusinessBasicData;
 
 /**
  * A POJI for employees
@@ -53,14 +53,14 @@ public interface Employee extends Serializable {
 	 * <p>
 	 * @return Company instance
 	 */
-	BusinessContact getEmployeeCompany ();
+	BusinessBasicData getEmployeeCompany ();
 
 	/**
 	 * Setter for employee's company
 	 * <p>
 	 * @param employeeCompany Company instance
 	 */
-	void setEmployeeCompany (final BusinessContact employeeCompany);
+	void setEmployeeCompany (final BusinessBasicData employeeCompany);
 
 	/**
 	 * Getter for employee's department
diff --git a/src/org/mxchange/jcontactsbusiness/exceptions/BusinessContactAlreadyAddedException.java b/src/org/mxchange/jcontactsbusiness/exceptions/BusinessContactAlreadyAddedException.java
index 82937c7..620243e 100644
--- a/src/org/mxchange/jcontactsbusiness/exceptions/BusinessContactAlreadyAddedException.java
+++ b/src/org/mxchange/jcontactsbusiness/exceptions/BusinessContactAlreadyAddedException.java
@@ -17,10 +17,10 @@
 package org.mxchange.jcontactsbusiness.exceptions;
 
 import java.text.MessageFormat;
-import org.mxchange.jcontactsbusiness.BusinessContact;
+import org.mxchange.jcontactsbusiness.BusinessBasicData;
 
 /**
- * Thrown if the given BusinessContact instance is already added
+ * Thrown if the given BusinessBasicData instance is already added
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
@@ -36,7 +36,7 @@ public class BusinessContactAlreadyAddedException extends Exception {
 	 * <p>
 	 * @param businessContact Business contact that is already added
 	 */
-	public BusinessContactAlreadyAddedException (final BusinessContact businessContact) {
+	public BusinessContactAlreadyAddedException (final BusinessBasicData businessContact) {
 		super(MessageFormat.format("Business contact with businessContactId={0} not found.", businessContact.getBusinessContactId())); //NOI18N
 	}
 
-- 
2.39.5