blob: f5229a8f11aa549b9aae9a85010cc84655657770 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
<<<<<<< Updated upstream
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
=======
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
>>>>>>> Stashed changes
* limitations under the License.
*/
package org.apache.jdo.tck.pc.companyAnnotatedPC;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.jdo.annotations.Column;
import javax.jdo.annotations.Element;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.Inheritance;
import javax.jdo.annotations.InheritanceStrategy;
import javax.jdo.annotations.NotPersistent;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import org.apache.jdo.tck.pc.company.IAddress;
import org.apache.jdo.tck.pc.company.IDentalInsurance;
import org.apache.jdo.tck.pc.company.IDepartment;
import org.apache.jdo.tck.pc.company.IEmployee;
import org.apache.jdo.tck.pc.company.IMedicalInsurance;
import org.apache.jdo.tck.pc.company.IProject;
import org.apache.jdo.tck.util.EqualityHelper;
import org.apache.jdo.tck.util.JDOCustomDateEditor;
/** This class represents an employee. */
@PersistenceCapable(identityType = IdentityType.APPLICATION)
@Inheritance(strategy = InheritanceStrategy.SUPERCLASS_TABLE)
public abstract class PCAppEmployee extends PCAppPerson implements IEmployee {
private static final long serialVersionUID = 1L;
@NotPersistent() private Date _hiredate;
@NotPersistent() private double _weeklyhours;
@NotPersistent() private PCAppDentalInsurance _dentalInsurance;
@NotPersistent() private PCAppMedicalInsurance _medicalInsurance;
@NotPersistent() private PCAppDepartment _department;
@NotPersistent() private PCAppDepartment _fundingDept;
@NotPersistent() private PCAppEmployee _manager;
@NotPersistent() private PCAppEmployee _mentor;
@NotPersistent() private PCAppEmployee _protege;
@NotPersistent() private PCAppEmployee _hradvisor;
@NotPersistent() private transient Set<IProject> _reviewedProjects = new HashSet<>();
@NotPersistent() private transient Set<IProject> _projects = new HashSet<>();
@NotPersistent() private transient Set<IEmployee> _team = new HashSet<>();
@NotPersistent() private transient Set<IEmployee> _hradvisees = new HashSet<>();
/** This is the JDO-required no-args constructor */
protected PCAppEmployee() {}
/**
* Construct an <code>PCAppEmployee</code> instance.
*
* @param personid The identifier for the person.
* @param firstname The first name of the employee.
* @param lastname The last name of the employee.
* @param middlename The middle name of the employee.
* @param birthdate The birth date of the employee.
* @param hiredate The date that the employee was hired.
*/
public PCAppEmployee(
long personid,
String firstname,
String lastname,
String middlename,
Date birthdate,
Date hiredate) {
super(personid, firstname, lastname, middlename, birthdate);
this._hiredate = hiredate;
}
/**
* Construct an <code>PCAppEmployee</code> instance.
*
* @param personid The identifier for the person.
* @param firstname The first name of the employee.
* @param lastname The last name of the employee.
* @param middlename The middle name of the employee.
* @param birthdate The birth date of the employee.
* @param address The address of the employee.
* @param hiredate The date that the employee was hired.
*/
public PCAppEmployee(
long personid,
String firstname,
String lastname,
String middlename,
Date birthdate,
IAddress address,
Date hiredate) {
super(personid, firstname, lastname, middlename, birthdate, address);
this._hiredate = hiredate;
}
/**
* Get the date that the employee was hired.
*
* @return The date the employee was hired.
*/
@Column(name = "HIREDATE")
public Date getHiredate() {
return _hiredate;
}
/**
* Set the date that the employee was hired.
*
* @param hiredate The date the employee was hired.
*/
public void setHiredate(Date hiredate) {
this._hiredate = hiredate;
}
/**
* Get the weekly hours of the employee.
*
* @return The number of hours per week that the employee works.
*/
@Column(name = "WEEKLYHOURS")
public double getWeeklyhours() {
return _weeklyhours;
}
/**
* Set the number of hours per week that the employee works.
*
* @param weeklyhours The number of hours per week that the employee works.
*/
public void setWeeklyhours(double weeklyhours) {
this._weeklyhours = weeklyhours;
}
/**
* Get the reviewed projects.
*
* @return The reviewed projects.
*/
@Persistent(mappedBy = "reviewers")
@Element(types = org.apache.jdo.tck.pc.companyAnnotatedPC.PCAppProject.class)
public Set<IProject> getReviewedProjects() {
return _reviewedProjects;
}
/**
* Add a reviewed project.
*
* @param project A reviewed project.
*/
public void addReviewedProjects(PCAppProject project) {
_reviewedProjects.add(project);
}
/**
* Remove a reviewed project.
*
* @param project A reviewed project.
*/
public void removeReviewedProject(PCAppProject project) {
_reviewedProjects.remove(project);
}
/**
* Set the reviewed projects for the employee.
*
* @param reviewedProjects The set of reviewed projects.
*/
public void setReviewedProjects(Set<IProject> reviewedProjects) {
// workaround: create a new HashSet, because fostore does not
// support LinkedHashSet
this._reviewedProjects = (reviewedProjects != null) ? new HashSet<>(reviewedProjects) : null;
}
/**
* Get the employee's projects.
*
* @return The employee's projects set.
*/
@Persistent(mappedBy = "members")
@Element(types = org.apache.jdo.tck.pc.companyAnnotatedPC.PCAppProject.class)
public Set<IProject> getProjects() {
return _projects;
}
/**
* Add a project for the employee.
*
* @param project The project.
*/
public void addProject(PCAppProject project) {
_projects.add(project);
}
/**
* Remove a project from an employee's set of projects.
*
* @param project The project.
*/
public void removeProject(PCAppProject project) {
_projects.remove(project);
}
/**
* Set the projects for the employee.
*
* @param projects The set of projects of the employee.
*/
public void setProjects(Set<IProject> projects) {
// workaround: create a new HashSet, because fostore does not
// support LinkedHashSet
this._projects = (projects != null) ? new HashSet<>(projects) : null;
}
/**
* Get the dental insurance of the employee.
*
* @return The employee's dental insurance.
*/
@Persistent(
mappedBy = "employee",
types = org.apache.jdo.tck.pc.companyAnnotatedPC.PCAppDentalInsurance.class)
public IDentalInsurance getDentalInsurance() {
return _dentalInsurance;
}
/**
* Set the dental insurance object for the employee.
*
* @param dentalInsurance The dental insurance object to associate with the employee.
*/
public void setDentalInsurance(IDentalInsurance dentalInsurance) {
this._dentalInsurance = (PCAppDentalInsurance) dentalInsurance;
}
/**
* Get the medical insurance of the employee.
*
* @return The employee's medical insurance.
*/
@Persistent(
mappedBy = "employee",
types = org.apache.jdo.tck.pc.companyAnnotatedPC.PCAppMedicalInsurance.class)
public IMedicalInsurance getMedicalInsurance() {
return _medicalInsurance;
}
/**
* Set the medical insurance object for the employee.
*
* @param medicalInsurance The medical insurance object to associate with the employee.
*/
public void setMedicalInsurance(IMedicalInsurance medicalInsurance) {
this._medicalInsurance = (PCAppMedicalInsurance) medicalInsurance;
}
/**
* Get the employee's department.
*
* @return The department associated with the employee.
*/
@Persistent(types = org.apache.jdo.tck.pc.companyAnnotatedPC.PCAppDepartment.class)
@Column(name = "DEPARTMENT")
public IDepartment getDepartment() {
return _department;
}
/**
* Set the employee's department.
*
* @param department The department.
*/
public void setDepartment(IDepartment department) {
this._department = (PCAppDepartment) department;
}
/**
* Get the employee's funding department.
*
* @return The funding department associated with the employee.
*/
@Persistent(types = org.apache.jdo.tck.pc.companyAnnotatedPC.PCAppDepartment.class)
@Column(name = "FUNDINGDEPT")
public IDepartment getFundingDept() {
return _fundingDept;
}
/**
* Set the employee's funding department.
*
* @param department The funding department.
*/
public void setFundingDept(IDepartment department) {
this._fundingDept = (PCAppDepartment) department;
}
/**
* Get the employee's manager.
*
* @return The employee's manager.
*/
@Persistent(types = org.apache.jdo.tck.pc.companyAnnotatedPC.PCAppEmployee.class)
@Column(name = "MANAGER")
public IEmployee getManager() {
return _manager;
}
/**
* Set the employee's manager.
*
* @param manager The employee's manager.
*/
public void setManager(IEmployee manager) {
this._manager = (PCAppEmployee) manager;
}
/**
* Get the employee's team.
*
* @return The set of <code>PCAppEmployee</code>s on this employee's team.
*/
@Persistent(mappedBy = "manager")
@Element(types = org.apache.jdo.tck.pc.companyAnnotatedPC.PCAppEmployee.class)
public Set<IEmployee> getTeam() {
return _team;
}
/**
* Add an <code>PCAppEmployee</code> to this employee's team. This method sets both sides of the
* relationship, modifying this employees team to include parameter emp and modifying emp to set
* its manager attribute to this object.
*
* @param emp The <code>PCAppEmployee</code> to add to the team.
*/
public void addToTeam(PCAppEmployee emp) {
_team.add(emp);
emp._manager = this;
}
/**
* Remove an <code>PCAppEmployee</code> from this employee's team. This method will also set the
* <code>emp</code> manager to null.
*
* @param emp The <code>PCAppEmployee</code> to remove from the team.
*/
public void removeFromTeam(PCAppEmployee emp) {
_team.remove(emp);
emp._manager = null;
}
/**
* Set the employee's team.
*
* @param team The set of <code>PCAppEmployee</code>s.
*/
public void setTeam(Set<IEmployee> team) {
// workaround: create a new HashSet, because fostore does not
// support LinkedHashSet
this._team = (team != null) ? new HashSet<>(team) : null;
}
/**
* Set the mentor for this employee.
*
* @param mentor The mentor for this employee.
*/
public void setMentor(IEmployee mentor) {
this._mentor = (PCAppEmployee) mentor;
}
/**
* Get the mentor for this employee.
*
* @return The mentor.
*/
@Persistent(types = org.apache.jdo.tck.pc.companyAnnotatedPC.PCAppEmployee.class)
@Column(name = "MENTOR")
public IEmployee getMentor() {
return _mentor;
}
/**
* Set the protege for this employee.
*
* @param protege The protege for this employee.
*/
public void setProtege(IEmployee protege) {
this._protege = (PCAppEmployee) protege;
}
/**
* Get the protege of this employee.
*
* @return The protege of this employee.
*/
@Persistent(
mappedBy = "mentor",
types = org.apache.jdo.tck.pc.companyAnnotatedPC.PCAppEmployee.class)
public IEmployee getProtege() {
return _protege;
}
/**
* Set the HR advisor for this employee.
*
* @param hradvisor The hradvisor for this employee.
*/
public void setHradvisor(IEmployee hradvisor) {
this._hradvisor = (PCAppEmployee) hradvisor;
}
/**
* Get the HR advisor for the employee.
*
* @return The HR advisor.
*/
@Column(name = "HRADVISOR")
@Persistent(types = org.apache.jdo.tck.pc.companyAnnotatedPC.PCAppEmployee.class)
public IEmployee getHradvisor() {
return _hradvisor;
}
/**
* Get the HR advisees of this HR advisor.
*
* @return HR advisees of this employee.
*/
@Persistent(mappedBy = "hradvisor")
@Element(types = org.apache.jdo.tck.pc.companyAnnotatedPC.PCAppEmployee.class)
public Set<IEmployee> getHradvisees() {
return _hradvisees;
}
/**
* Add an <code>PCAppEmployee</code> as an advisee of this HR advisor. This method also sets the
* <code>emp</code> hradvisor to reference this object. In other words, both sides of the
* relationship are set.
*
* @param emp The employee to add as an advisee.
*/
public void addAdvisee(PCAppEmployee emp) {
_hradvisees.add(emp);
emp._hradvisor = this;
}
/**
* Remove an <code>PCAppEmployee</code> as an advisee of this HR advisor. This method also sets
* the <code>emp</code> hradvisor to null. In other words, both sides of the relationship are set.
*
* @param emp The employee to add as an HR advisee.
*/
public void removeAdvisee(PCAppEmployee emp) {
_hradvisees.remove(emp);
emp._hradvisor = null;
}
/**
* Set the HR advisees of this HR advisor.
*
* @param hradvisees The <code>PCAppEmployee</code>s that are HR advisees of this employee.
*/
public void setHradvisees(Set<IEmployee> hradvisees) {
// workaround: create a new HashSet, because fostore does not
// support LinkedHashSet
this._hradvisees = (hradvisees != null) ? new HashSet<>(hradvisees) : null;
}
/**
* Serialization support: initialize transient fields.
*
* @param in stream
* @throws IOException error during reading
* @throws ClassNotFoundException class could not be found
*/
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
_reviewedProjects = new HashSet<>();
_projects = new HashSet<>();
_team = new HashSet<>();
_hradvisees = new HashSet<>();
}
/**
* Return a String representation of a <code>PCAppEmployee</code> object.
*
* @return a String representation of a <code>PCAppEmployee</code> object.
*/
@Override
public String toString() {
return "FCEmployee(" + getFieldRepr() + ")";
}
/**
* Returns a String representation of the non-relationship fields.
*
* @return a String representation of the non-relationship fields.
*/
@Override
protected String getFieldRepr() {
StringBuilder rc = new StringBuilder();
rc.append(super.getFieldRepr());
rc.append(", hired ").append(JDOCustomDateEditor.getDateRepr(_hiredate));
rc.append(", weeklyhours ").append(_weeklyhours);
return rc.toString();
}
/**
* Returns <code>true</code> if all the fields of this instance are deep equal to the
* corresponding fields of the specified PCAppEmployee.
*
* @param other the object with which to compare.
* @param helper EqualityHelper to keep track of instances that have already been processed.
* @return <code>true</code> if all the fields are deep equal; <code>false</code> otherwise.
* @throws ClassCastException if the specified instances' type prevents it from being compared to
* this instance.
*/
public boolean deepCompareFields(Object other, EqualityHelper helper) {
PCAppEmployee otherEmp = (PCAppEmployee) other;
String where = "Employee<" + getPersonid() + ">";
return super.deepCompareFields(otherEmp, helper)
& helper.equals(_hiredate, otherEmp.getHiredate(), where + ".hiredate")
& helper.closeEnough(_weeklyhours, otherEmp.getWeeklyhours(), where + ".weeklyhours")
& helper.deepEquals(
_dentalInsurance, otherEmp.getDentalInsurance(), where + ".dentalInsurance")
& helper.deepEquals(
_medicalInsurance, otherEmp.getMedicalInsurance(), where + ".medicalInsurance")
& helper.deepEquals(_department, otherEmp.getDepartment(), where + ".department")
& helper.deepEquals(_fundingDept, otherEmp.getFundingDept(), where + ".fundingDept")
& helper.deepEquals(_manager, otherEmp.getManager(), where + ".manager")
& helper.deepEquals(_mentor, otherEmp.getMentor(), where + ".mentor")
& helper.deepEquals(_protege, otherEmp.getProtege(), where + ".protege")
& helper.deepEquals(_hradvisor, otherEmp.getHradvisor(), where + ".hradvisor")
& helper.deepEquals(
_reviewedProjects, otherEmp.getReviewedProjects(), where + ".reviewedProjects")
& helper.deepEquals(_projects, otherEmp.getProjects(), where + ".projects")
& helper.deepEquals(_team, otherEmp.getTeam(), where + ".team")
& helper.deepEquals(_hradvisees, otherEmp.getHradvisees(), where + ".hradvisees");
}
}