From 7dc86d52075315b95653f000d07426eb05bf0b74 Mon Sep 17 00:00:00 2001 From: jlaborde058 Date: Wed, 19 Apr 2023 10:57:28 -0700 Subject: [PATCH] Update Organization.java Added addToOrganization method to add newly hired employees. --- .../aa/act/interview/org/Organization.java | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) 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); + } + } + } + } } +