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()) {