diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/jpa-buddy.xml b/.idea/jpa-buddy.xml new file mode 100644 index 0000000..966d5f5 --- /dev/null +++ b/.idea/jpa-buddy.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..bf719a9 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..d0e089a --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/coding-evaluation.iml b/coding-evaluation.iml new file mode 100644 index 0000000..908ad4f --- /dev/null +++ b/coding-evaluation.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/java/com/aa/act/interview/org/Employee.java b/java/com/aa/act/interview/org/Employee.java index 0e40b90..c8d1a7a 100644 --- a/java/com/aa/act/interview/org/Employee.java +++ b/java/com/aa/act/interview/org/Employee.java @@ -11,11 +11,11 @@ public Employee(int identifier, Name name) { this.identifier = identifier; this.name = name; } - + public int getIdentifier() { return identifier; } - + public Name getName() { return name; } diff --git a/java/com/aa/act/interview/org/MyOrganization.java b/java/com/aa/act/interview/org/MyOrganization.java index a6048da..7c4cf07 100644 --- a/java/com/aa/act/interview/org/MyOrganization.java +++ b/java/com/aa/act/interview/org/MyOrganization.java @@ -1,7 +1,6 @@ package com.aa.act.interview.org; public class MyOrganization extends Organization { - @Override protected Position createOrganization() { Position ceo = new Position("CEO"); @@ -27,7 +26,7 @@ protected Position createOrganization() { vpt.addDirectReport(dct); Position s = new Position("Salesperson"); vps.addDirectReport(s); - + return ceo; } @@ -44,6 +43,7 @@ public static final void main(String... args) { myOrg.hire(new Name("Head", "Geek"), "VP Technology"); myOrg.hire(new Name("Steve", "Dent"), "VP Infrastructure"); myOrg.hire(new Name("Slick", "Willie"), "Salesperson"); + //System.out.println(myOrg); System.out.println(myOrg); } } diff --git a/java/com/aa/act/interview/org/Name.java b/java/com/aa/act/interview/org/Name.java index edb78b1..6b02895 100644 --- a/java/com/aa/act/interview/org/Name.java +++ b/java/com/aa/act/interview/org/Name.java @@ -4,7 +4,7 @@ public class Name { private String first; private String last; - + public Name(String first, String last) { if(first == null) throw new IllegalArgumentException("first name cannot be null"); @@ -13,11 +13,11 @@ public Name(String first, String last) { this.first = first; this.last = last; } - + public String getFirst() { return first; } - + public String getLast() { return last; } diff --git a/java/com/aa/act/interview/org/Organization.java b/java/com/aa/act/interview/org/Organization.java index e1c8ed1..0a0e502 100644 --- a/java/com/aa/act/interview/org/Organization.java +++ b/java/com/aa/act/interview/org/Organization.java @@ -1,34 +1,52 @@ package com.aa.act.interview.org; +import java.util.LinkedList; import java.util.Optional; +import java.util.Queue; +import java.util.concurrent.atomic.AtomicInteger; public abstract class Organization { private Position root; - + private AtomicInteger employeeCounter; + public Organization() { root = createOrganization(); + employeeCounter = new AtomicInteger(0); } - + 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(); +public Optional hire(Name person, String title) { + Queue queue = new LinkedList<>(); + queue.add(root); + + while (!queue.isEmpty()) { + Position position = queue.poll(); + + if (position.getTitle().equals(title) && !position.isFilled()) { + Employee newEmployee = new Employee(employeeCounter.incrementAndGet(), person); + position.setEmployee(Optional.of(newEmployee)); + return Optional.of(position); + } + queue.addAll(position.getDirectReports()); } + 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()) {