From 7ea3d537a9911559e3723a5723195b05339bbdff Mon Sep 17 00:00:00 2001 From: Bhavesh Date: Fri, 4 Nov 2022 23:08:08 -0500 Subject: [PATCH] update hire method --- .../aa/act/interview/org/Organization.java | 80 +++++++++++-------- 1 file changed, 48 insertions(+), 32 deletions(-) diff --git a/java/com/aa/act/interview/org/Organization.java b/java/com/aa/act/interview/org/Organization.java index 5060509..73d42ea 100644 --- a/java/com/aa/act/interview/org/Organization.java +++ b/java/com/aa/act/interview/org/Organization.java @@ -4,36 +4,52 @@ public abstract class Organization { - private Position root; - - public Organization() { - root = createOrganization(); - } - - protected abstract Position createOrganization(); - - /** - * hire the given person as an employee in the position that has that title - * - * @param person - * @param title - * @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(); - } - - @Override - public String toString() { - return printOrganization(root, ""); - } - - private String printOrganization(Position pos, String prefix) { - StringBuffer sb = new StringBuffer(prefix + "+-" + pos.toString() + "\n"); - for(Position p : pos.getDirectReports()) { - sb.append(printOrganization(p, prefix + "\t")); - } - return sb.toString(); - } + private Position root; + + private static int id; + + public Organization() { + root = createOrganization(); + } + + protected abstract Position createOrganization(); + + /** + * hire the given person as an employee in the position that has that title + * + * @param person + * @param title + * @return the newly filled position or empty if no position has that title + */ + public Optional hire(Name person, String title) { + addNewHire(root, person, title); + displayDetails(root, person, title); + return Optional.of(root); + } + + private void addNewHire(Position position, Name person, String title) { + if (position.getTitle().equals(title)) { + position.setEmployee(Optional.of(new Employee(++id, new Name(person.getFirst(), person.getLast())))); + } + + } + private void displayDetails(Position pos, Name person, String title) { + for (Position p : pos.getDirectReports()) { + addNewHire(p, person, title); + displayDetails(p, person, title); + } + } + + @Override + public String toString() { + return printOrganization(root, ""); + } + + private String printOrganization(Position pos, String prefix) { + StringBuffer sb = new StringBuffer(prefix + "+-" + pos.toString() + "\n"); + for (Position p : pos.getDirectReports()) { + sb.append(printOrganization(p, prefix + "\t")); + } + return sb.toString(); + } }