/*
- * Copyright (C) 2015 Roland Haeder
+ * Copyright (C) 2016 Roland Haeder
*
* 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
*/
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.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
-import org.mxchange.jcontactsbusiness.basicdata.BasicBusinessData;
+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
*/
private static final long serialVersionUID = 478_378_178_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 offfices
+ */
+ @Transient
+ private List<BranchOffice> brancheOffices;
+
+ /**
+ * Reference to contact person
+ */
+ @JoinColumn (name = "company_contact_id")
+ @OneToOne (targetEntity = CompanyEmployee.class, cascade = CascadeType.ALL)
+ private Employee companyContact;
+
/**
* Id number
*/
@Id
- @Column (name = "company_contact_id", length = 20, nullable = false, unique = true, updatable = false)
+ @Column (name = "company_id", length = 20, nullable = false, updatable = false)
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long companyContactId;
/**
- * Reference to basic data
+ * Reference to CEO "employee"
*/
- @JoinColumn (name = "basic_data_id", nullable = false, updatable = false, unique = true)
- @OneToOne (targetEntity = CompanyBasicData.class, optional = false)
- private BasicBusinessData basicBusinessData;
+ @JoinColumn (name = "company_founder_id")
+ @OneToOne (targetEntity = CompanyEmployee.class, cascade = CascadeType.ALL)
+ private Employee companyFounder;
/**
- * Reference to headquarters data
+ * Timestamp when this entry has been created
*/
- @JoinColumn (name = "headquarters_data_id", nullable = false, updatable = false, unique = true)
- @OneToOne (targetEntity = CompanyHeadQuartersData.class, optional = false)
- private HeadQuartersData headQuartersData;
+ @Basic (optional = false)
+ @Temporal (TemporalType.TIMESTAMP)
+ @Column (name = "company_entry_created", nullable = false, updatable = false)
+ private Calendar contactCreated;
/**
- * Reference to CEO "employee"
+ * User owner instance
*/
- @JoinColumn(name = "company_founder_id", nullable = false, updatable = false)
- @OneToOne(targetEntity = CompanyEmployee.class, optional = false)
- private Employee companyFounder;
+ @JoinColumn (name = "company_user_id", nullable = false, updatable = false)
+ @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.MERGE, optional = false)
+ private User contactUserOwner;
/**
- * Reference to employee list
+ * Reference to headquarters data
*/
- @JoinColumn (name = "employees_id", nullable = false, updatable = false, unique = true)
- @OneToMany(targetEntity = CompanyEmployee.class)
- private List<Employee> employees;
+ @JoinColumn (name = "company_headquarters_data_id", nullable = false, updatable = false)
+ @OneToOne (targetEntity = CompanyHeadQuartersData.class, cascade = CascadeType.ALL, optional = false)
+ private HeadQuartersData headQuartersData;
@Override
public int compareTo (final BusinessContact businessContact) {
}
@Override
- public BasicBusinessData getBasicBusinessData () {
+ public boolean equals (final Object object) {
+ if (object == null) {
+ return false;
+ } else if (getClass() != object.getClass()) {
+ return false;
+ }
+
+ final BusinessContact other = (BusinessContact) object;
+
+ return Objects.equals(this.getBasicBusinessData(), other.getBasicBusinessData());
+ }
+
+ @Override
+ public BusinessBasicData getBasicBusinessData () {
return this.basicBusinessData;
}
@Override
- public void setBasicBusinessData (final BasicBusinessData basicBusinessData) {
+ public void setBasicBusinessData (final BusinessBasicData basicBusinessData) {
this.basicBusinessData = basicBusinessData;
}
+ @Override
+ public List<BranchOffice> getBrancheOffices () {
+ return this.brancheOffices;
+ }
+
+ @Override
+ public void setBrancheOffices (final List<BranchOffice> brancheOffices) {
+ this.brancheOffices = brancheOffices;
+ }
+
+ @Override
+ public Employee getCompanyContact () {
+ return this.companyContact;
+ }
+
+ @Override
+ public void setCompanyContact (final Employee companyContact) {
+ this.companyContact = companyContact;
+ }
+
@Override
public Long getCompanyContactId () {
return this.companyContactId;
}
@Override
- public List<Employee> getEmployees () {
- return this.employees;
+ public Calendar getContactCreated () {
+ return this.contactCreated;
+ }
+
+ @Override
+ public void setContactCreated (final Calendar contactCreated) {
+ this.contactCreated = contactCreated;
}
@Override
- public void setEmployees (final List<Employee> employees) {
- this.employees = employees;
+ public User getContactUserOwner () {
+ return this.contactUserOwner;
+ }
+
+ @Override
+ public void setContactUserOwner (final User contactUserOwner) {
+ this.contactUserOwner = contactUserOwner;
}
@Override
public void setHeadQuartersData (final HeadQuartersData headQuartersData) {
this.headQuartersData = headQuartersData;
}
+
+ @Override
+ public int hashCode () {
+ int hash = 3;
+ hash = 37 * hash + Objects.hashCode(this.getBasicBusinessData());
+ return hash;
+ }
}