// EmployeeImpl.java

package com.corej2eepatterns.business.impl;

import com.corej2eepatterns.business.hr.Department;
import com.corej2eepatterns.business.hr.Project;
import com.corej2eepatterns.business.hr.Employee;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

/**
 * @author  Craig Russell
 */
public class EmployeeImpl implements Employee {
  private long id;
  private String firstName;
  private String lastName;
  private DepartmentImpl department;
  private Set projects = new HashSet();

  /** utworzenie nowej instancji EmployeeImpl */
  EmployeeImpl(long id, String firstName, String lastName) {
    this.id = id;
    this.firstName = firstName;
    this.lastName = lastName;
  }

  public boolean addProject(Project project) {
    boolean result = projects.add(project);
    if (result) {
      ((ProjectImpl) project).addEmployee(this);
    }
    return result;
  }

  public boolean removeProject(Project project) {
    boolean result = projects.remove(project);
    if (result) {
      ((ProjectImpl) project).removeEmployee(this);
    }
    return result;
  }

  public Department getDepartment() {
    return department;
  }

  public void setDepartment(Department department) {
    if (this.department != null) {
      this.department.removeEmployee(this);
    }
    this.department = (DepartmentImpl) department;
    this.department.addEmployee(this);
  }

  . . .

  public Set getProjects() {
    return Collections.unmodifiableSet(projects);
  }
}