diff --git a/java/com/aa/act/interview/org/Organization.java b/java/com/aa/act/interview/org/Organization.java index 5060509..c6ff6b7 100644 --- a/java/com/aa/act/interview/org/Organization.java +++ b/java/com/aa/act/interview/org/Organization.java @@ -5,6 +5,7 @@ public abstract class Organization { private Position root; + private int identifier = 0; public Organization() { root = createOrganization(); @@ -20,8 +21,9 @@ public Organization() { * @return the newly filled position or empty if no position has that title */ public Optional hire(Name person, String title) { - //your code here - return Optional.empty(); + addToOrgainization(root, new Employee(identifier, person), title); + identifier++; + return Optional.of(root); } @Override @@ -36,4 +38,24 @@ private String printOrganization(Position pos, String prefix) { } return sb.toString(); } + + /** + * Recursively iterates through the organization chart to add newly hired employees to it + * + * @param startPosition - the position on the organization chart this iteration is starting at + * @param employee + * @param employeeTitle + */ + private void addToOrgainization(Position startPosition, Employee employee, String employeeTitle) { + if(startPosition.getTitle().equals(employeeTitle)) { + startPosition.setEmployee(Optional.of(employee)); + } else { + if(startPosition.getDirectReports() != null && startPosition.getDirectReports().size() !=0) { + for(Position position : startPosition.getDirectReports()) { + addToOrgainization(position, employee, employeeTitle); + } + } + } + } } +