package org.softlang.company.features;
import java.util.LinkedList;
import java.util.List;
import org.softlang.company.model.Company;
import org.softlang.company.model.Department;
public class DepartmentBuilder implements UnitBuilder{
private UnitBuilder parent;
private Department department = new Department();
private List<EmployeeBuilder> employees = new LinkedList<EmployeeBuilder>();
private List<DepartmentBuilder> subDepartments = new LinkedList<DepartmentBuilder>();
public DepartmentBuilder(UnitBuilder parent) {
this.parent = parent;
}
public void setName(String name) {
this.department.setName(name);
}
public EmployeeBuilder manager(String name) {
EmployeeBuilder manager = new EmployeeBuilder(this);
this.department.setManager(manager.getContent());
manager.setName(name);
return manager;
}
public EmployeeBuilder employee(String name) {
EmployeeBuilder child = new EmployeeBuilder(this);
employees.add(child);
child.setName(name);
return child;
}
public DepartmentBuilder department(String name) {
DepartmentBuilder child = new DepartmentBuilder(this);
subDepartments.add(child);
child.setName(name);
return child;
}
public UnitBuilder setInactive() {
return parent;
}
public UnitBuilder endDepartment() {
return parent;
}
public Company endCompany() {
return parent.endCompany();
}
public Department getContent() {
for(DepartmentBuilder builder : subDepartments){
department.getSubdepts().add(builder.getContent());
}
for(EmployeeBuilder builder : employees){
department.getEmployees().add(builder.getContent());
}
return department;
}
}