diff --git a/.idea/$PRODUCT_WORKSPACE_FILE$ b/.idea/$PRODUCT_WORKSPACE_FILE$
new file mode 100644
index 00000000..3733e0d3
--- /dev/null
+++ b/.idea/$PRODUCT_WORKSPACE_FILE$
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ 1.8
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 00000000..0e40fe8f
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+
+# Default ignored files
+/workspace.xml
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 00000000..a0f2c3a1
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+interfaces-1
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 00000000..fdc60f4f
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 00000000..b26911bd
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_12.xml b/.idea/libraries/Maven__junit_junit_4_12.xml
new file mode 100644
index 00000000..d4110417
--- /dev/null
+++ b/.idea/libraries/Maven__junit_junit_4_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
new file mode 100644
index 00000000..f58bbc11
--- /dev/null
+++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 00000000..ab4c8a3f
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 00000000..711b3a53
--- /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 00000000..35eb1ddf
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/interfaces-1.iml b/interfaces-1.iml
new file mode 100644
index 00000000..0ddf51c1
--- /dev/null
+++ b/interfaces-1.iml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/io/zipcoder/interfaces/Educator.java b/src/main/java/io/zipcoder/interfaces/Educator.java
new file mode 100644
index 00000000..921d5d56
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/Educator.java
@@ -0,0 +1,25 @@
+package io.zipcoder.interfaces;
+
+public enum Educator implements Teacher{
+ DOLIO(new Instructor(311412L, "Dolio")),
+ ROBERTO(new Instructor(24302L, "Roberto"));
+
+ final Instructor instructor;
+ Double timeWorked = 0.0;
+
+ Educator(Instructor instructor){
+ this.instructor = instructor;
+ }
+
+ @Override
+ public void teach(Learner learner, double numberOfHours) {
+ this.instructor.teach(learner, numberOfHours);
+ this.timeWorked += numberOfHours;
+ }
+
+ @Override
+ public void lecture(Learner[] learners, double numberOfHours) {
+ this.instructor.lecture(learners, numberOfHours);
+ this.timeWorked += numberOfHours;
+ }
+}
diff --git a/src/main/java/io/zipcoder/interfaces/Instructor.java b/src/main/java/io/zipcoder/interfaces/Instructor.java
new file mode 100644
index 00000000..131a0d16
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/Instructor.java
@@ -0,0 +1,21 @@
+package io.zipcoder.interfaces;
+
+public class Instructor extends Person implements Teacher{
+
+ public Instructor(Long id, String name) {
+ super(id, name);
+ }
+
+ public void teach(Learner learner, double numberOfHours) {
+ learner.learn(numberOfHours);
+ }
+
+ public void lecture(Learner[] learners, double numberOfHours) {
+ double numberofHoursPerStudent = numberOfHours / learners.length;
+ for(Learner learner : learners)
+ learner.learn(numberofHoursPerStudent);
+ }
+
+
+
+}
diff --git a/src/main/java/io/zipcoder/interfaces/Instructors.java b/src/main/java/io/zipcoder/interfaces/Instructors.java
new file mode 100644
index 00000000..6c59277a
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/Instructors.java
@@ -0,0 +1,26 @@
+package io.zipcoder.interfaces;
+
+public final class Instructors extends People{
+
+ private static final Instructors INSTANCE = new Instructors();
+
+
+
+ private Instructors(){
+ super();
+ Instructor instructorOne = new Instructor(311412L, "Dolio");
+ Instructor instructorTwo = new Instructor(24302L, "Roberto");
+
+ personList.add(instructorOne);
+ personList.add(instructorTwo);
+
+ }
+
+ Instructor[] getArray() {
+ return personList.toArray(new Instructor[personList.size()]);
+ }
+
+ public static Instructors getInstance(){
+ return INSTANCE;
+ }
+}
diff --git a/src/main/java/io/zipcoder/interfaces/Learner.java b/src/main/java/io/zipcoder/interfaces/Learner.java
new file mode 100644
index 00000000..216f3167
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/Learner.java
@@ -0,0 +1,7 @@
+package io.zipcoder.interfaces;
+
+public interface Learner {
+
+ void learn(double numberOfHours);
+ Double getTotalStudyTime();
+}
diff --git a/src/main/java/io/zipcoder/interfaces/People.java b/src/main/java/io/zipcoder/interfaces/People.java
new file mode 100644
index 00000000..77684c35
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/People.java
@@ -0,0 +1,52 @@
+package io.zipcoder.interfaces;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+abstract class People implements Iterable {
+
+ List personList;
+
+ public People(){
+ personList = new ArrayList();
+ }
+
+ public void add(E person){
+ personList.add(person);
+ }
+
+ public E findById(long id){
+ for(E person : personList)
+ if(person.getId() == id)
+ return person;
+
+ return null;
+ }
+
+ public boolean contains(E person){
+ return personList.contains(person);
+ }
+
+ public void removeByPerson(E person){
+ personList.remove(person);
+ }
+
+ public void removeById(long id){
+ personList.remove(findById(id));
+ }
+
+ public void removeAll(){
+ personList.clear();
+ }
+
+ public int count(){
+ return personList.size();
+ }
+
+ abstract E[] getArray();
+
+ public Iterator iterator() {
+ return personList.iterator();
+ }
+}
diff --git a/src/main/java/io/zipcoder/interfaces/Person.java b/src/main/java/io/zipcoder/interfaces/Person.java
index fc6a3ffe..144477d6 100644
--- a/src/main/java/io/zipcoder/interfaces/Person.java
+++ b/src/main/java/io/zipcoder/interfaces/Person.java
@@ -1,5 +1,23 @@
package io.zipcoder.interfaces;
public class Person {
+ final Long id;
+ String name;
+ public Person(Long id, String name){
+ this.id = id;
+ this.name = name;
+ }
+
+ public Long getId(){
+ return this.id;
+ }
+
+ public String getName(){
+ return this.name;
+ }
+
+ public void setName(String name){
+ this.name = name;
+ }
}
diff --git a/src/main/java/io/zipcoder/interfaces/Student.java b/src/main/java/io/zipcoder/interfaces/Student.java
new file mode 100644
index 00000000..74dd0139
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/Student.java
@@ -0,0 +1,19 @@
+package io.zipcoder.interfaces;
+
+public class Student extends Person implements Learner{
+
+ double totalStudyTime;
+
+ public Student(Long id, String name) {
+ super(id, name);
+ }
+
+
+ public void learn(double numberOfHours) {
+ totalStudyTime += numberOfHours;
+ }
+
+ public Double getTotalStudyTime() {
+ return totalStudyTime;
+ }
+}
diff --git a/src/main/java/io/zipcoder/interfaces/Students.java b/src/main/java/io/zipcoder/interfaces/Students.java
new file mode 100644
index 00000000..0f0810c1
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/Students.java
@@ -0,0 +1,26 @@
+package io.zipcoder.interfaces;
+
+public final class Students extends People{
+
+ private static final Students INSTANCE = new Students();
+
+ private Students(){
+
+ Student studentOne = new Student(212242L, "Brian");
+ Student studentTwo = new Student(121231L, "Kievina");
+
+ personList.add(studentOne);
+ personList.add(studentTwo);
+
+ }
+
+ @Override
+ public Student[] getArray(){
+
+ return personList.toArray(new Student[personList.size()]);
+ }
+
+ public static Students getInstance(){
+ return INSTANCE;
+ }
+}
diff --git a/src/main/java/io/zipcoder/interfaces/Teacher.java b/src/main/java/io/zipcoder/interfaces/Teacher.java
new file mode 100644
index 00000000..4a3a4dbe
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/Teacher.java
@@ -0,0 +1,9 @@
+package io.zipcoder.interfaces;
+
+public interface Teacher {
+
+ void teach(Learner learner, double numberOfHours);
+ void lecture(Learner[] learner, double numberOfHours);
+
+
+}
diff --git a/src/main/java/io/zipcoder/interfaces/ZipCodeWilmington.java b/src/main/java/io/zipcoder/interfaces/ZipCodeWilmington.java
new file mode 100644
index 00000000..3494da49
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/ZipCodeWilmington.java
@@ -0,0 +1,38 @@
+package io.zipcoder.interfaces;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public final class ZipCodeWilmington {
+
+ private final Students students = Students.getInstance();
+ private final Instructors instructors = Instructors.getInstance();
+ private static final ZipCodeWilmington INSTANCE = new ZipCodeWilmington();
+
+ private ZipCodeWilmington(){
+ }
+
+ public void hostLecture(Teacher teacher, double numberOfHours){
+ teacher.lecture(students.getArray(), numberOfHours);
+ }
+
+ public void hostLecture(long id, double numberOfHours){
+ Teacher teacher = (Teacher) instructors.findById(id);
+ hostLecture(teacher, numberOfHours);
+ }
+
+ public HashMap getStudyMap(){
+ HashMap studyMap = new HashMap();
+ for(Person person : students.getArray()){
+ Student student = (Student) person;
+ studyMap.put(student, student.getTotalStudyTime());
+ }
+ return studyMap;
+ }
+
+ public static ZipCodeWilmington getInstance(){
+ return INSTANCE;
+ }
+
+
+}
diff --git a/src/test/java/io/zipcoder/interfaces/TestEducator.java b/src/test/java/io/zipcoder/interfaces/TestEducator.java
new file mode 100644
index 00000000..7544a257
--- /dev/null
+++ b/src/test/java/io/zipcoder/interfaces/TestEducator.java
@@ -0,0 +1,49 @@
+package io.zipcoder.interfaces;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestEducator {
+
+ @Test
+ public void implementationTest(){
+ Assert.assertTrue(Educator.ROBERTO instanceof Teacher);
+ }
+
+ @Test
+ public void lectureTest(){
+ Student[] students = {new Student(1231L, "Bill Cosby"), new Student(3213L, "Joe")};
+
+ Double expected = 0.5 / students.length;
+ Educator.DOLIO.lecture(students, 0.5);
+ Assert.assertEquals(expected, students[0].getTotalStudyTime());
+ Assert.assertEquals(expected, students[1].getTotalStudyTime());
+ }
+
+ @Test
+ public void teachTest(){
+ Student student = new Student(1231L, "Bill Cosby");
+
+ Double expected = 0.5;
+ Educator.DOLIO.teach(student,expected);
+ Assert.assertEquals(expected, student.getTotalStudyTime());
+ }
+
+ @Test
+ public void lectureTimeWorkedTest(){
+ Student[] students = {new Student(1231L, "Bill Cosby"), new Student(3213L, "Joe")};
+
+ Double expected = 1.0;
+ Educator.ROBERTO.lecture(students, 0.5);
+ Assert.assertEquals(expected, Educator.ROBERTO.timeWorked);
+ }
+
+ @Test
+ public void teachTimeWorked(){
+ Student[] students = {new Student(1231L, "Bill Cosby")};
+
+ Double expected = 0.5;
+ Educator.ROBERTO.lecture(students, 0.5);
+ Assert.assertEquals(expected, Educator.ROBERTO.timeWorked);
+ }
+}
diff --git a/src/test/java/io/zipcoder/interfaces/TestInstructor.java b/src/test/java/io/zipcoder/interfaces/TestInstructor.java
new file mode 100644
index 00000000..03d46574
--- /dev/null
+++ b/src/test/java/io/zipcoder/interfaces/TestInstructor.java
@@ -0,0 +1,47 @@
+package io.zipcoder.interfaces;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestInstructor {
+
+ @Test
+ public void implementInstructorTest(){
+ Instructor instructorOne = new Instructor(1232L, "Dolio");
+
+ Assert.assertTrue(instructorOne instanceof Teacher);
+ }
+
+ @Test
+ public void inheritanceInstructorTest(){
+ Instructor instructorOne = new Instructor(1232L, "Dolio");
+
+ Assert.assertTrue(instructorOne instanceof Person);
+ }
+
+ @Test
+ public void teachTest(){
+ Instructor instructorOne = new Instructor(1232L, "Dolio");
+ Student studentOne = new Student(1333L, "Joe");
+ double expectedTime = 20.0;
+ instructorOne.teach(studentOne, expectedTime);
+ double actualTime = studentOne.getTotalStudyTime();
+
+ Assert.assertEquals(expectedTime, actualTime, 0);
+ }
+
+ @Test
+ public void lectureTest(){
+ Instructor instructorOne = new Instructor(1232L, "Dolio");
+ Student studentOne = new Student(1333L, "Joe");
+ Student studentTwo = new Student(123222L, "Zoe");
+
+ Learner[] students = {studentOne, studentTwo};
+ instructorOne.lecture(students, 36);
+
+ double expectedTime = 18;
+ double actualTime = studentTwo.getTotalStudyTime();
+
+ Assert.assertEquals(expectedTime, actualTime, 0);
+ }
+}
diff --git a/src/test/java/io/zipcoder/interfaces/TestInstructors.java b/src/test/java/io/zipcoder/interfaces/TestInstructors.java
new file mode 100644
index 00000000..fd17fb07
--- /dev/null
+++ b/src/test/java/io/zipcoder/interfaces/TestInstructors.java
@@ -0,0 +1,37 @@
+package io.zipcoder.interfaces;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestInstructors {
+
+ @Test
+ public void getInstanceTest(){
+
+ Instructors test = Instructors.getInstance();
+ int actual = test.personList.size();
+
+ Assert.assertEquals(2, actual);
+
+ }
+ @Test
+ public void getInstanceTest2(){
+
+ Instructors testTwo = Instructors.getInstance();
+
+ boolean personOne = false;
+ boolean personTwo = false;
+
+ for(Person person : testTwo.personList){
+ if(person.getId().equals(311412L) && person.getName().equals("Dolio"))
+ personOne = true;
+
+ if(person.getId().equals(24302L) && person.getName().equals("Roberto"))
+ personTwo = true;
+ }
+
+ Assert.assertTrue(personOne);
+ Assert.assertTrue(personTwo);
+ }
+}
+
diff --git a/src/test/java/io/zipcoder/interfaces/TestPeople.java b/src/test/java/io/zipcoder/interfaces/TestPeople.java
new file mode 100644
index 00000000..25d7146d
--- /dev/null
+++ b/src/test/java/io/zipcoder/interfaces/TestPeople.java
@@ -0,0 +1,59 @@
+package io.zipcoder.interfaces;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestPeople {
+
+
+ @Test
+ public void addTest(){
+ Student personOne = new Student(398429847L, "Brian");
+ Students newPeople = Students.getInstance();
+ newPeople.add(personOne);
+
+ Assert.assertTrue(newPeople.contains(personOne));
+ }
+
+ @Test
+ public void removebyIDTest(){
+ Students newPeople = Students.getInstance();
+ Student personOne = new Student(398429847L, "Brian");
+ Student personTwo = new Student(242487613L, "Mike");
+
+ newPeople.add(personOne);
+ newPeople.add(personTwo);
+ newPeople.removeById(242487613L);
+
+ Assert.assertFalse(newPeople.contains(personTwo));
+ }
+
+ @Test
+ public void removeAllTest(){
+ Students newPeople = Students.getInstance();
+ Student personOne = new Student(398429847L, "Brian");
+ Student personTwo = new Student(242487613L, "Mike");
+
+ int expectedPeeps = 0;
+ newPeople.add(personOne);
+ newPeople.add(personTwo);
+ newPeople.removeAll();
+ int actualPeeps = newPeople.count();
+
+ Assert.assertEquals(expectedPeeps, actualPeeps);
+ }
+
+
+ @Test
+ public void findByIdTest(){
+ Students newPeople = Students.getInstance();
+ Student personOne = new Student(398429847L, "Brian");
+
+ long expectedPersonById = 398429847L;
+ newPeople.add(personOne);
+ long actualPersonById = personOne.getId();
+
+ Assert.assertEquals(expectedPersonById, actualPersonById);
+ }
+
+}
diff --git a/src/test/java/io/zipcoder/interfaces/TestPerson.java b/src/test/java/io/zipcoder/interfaces/TestPerson.java
index d64cd2f0..c904f37d 100644
--- a/src/test/java/io/zipcoder/interfaces/TestPerson.java
+++ b/src/test/java/io/zipcoder/interfaces/TestPerson.java
@@ -1,5 +1,29 @@
package io.zipcoder.interfaces;
+import org.junit.Assert;
+import org.junit.Test;
+
public class TestPerson {
+ @Test
+ public void PersonConstructorTest(){
+ Person personOne = new Person(1234L, "Maira");
+ Long expectedId = 1234L;
+ Long actualId = personOne.getId();
+ String expectedName = "Maira";
+ String actualName = personOne.getName();
+
+ Assert.assertEquals(expectedId, actualId);
+ Assert.assertEquals(expectedName, actualName);
+ }
+
+ @Test
+ public void setNameTest(){
+ Person personOne = new Person(1234L, "Maira");
+ personOne.setName("Brian");
+ String expectedName = "Brian";
+ String actualName = personOne.getName();
+
+ Assert.assertEquals(expectedName,actualName);
+ }
}
diff --git a/src/test/java/io/zipcoder/interfaces/TestStudent.java b/src/test/java/io/zipcoder/interfaces/TestStudent.java
new file mode 100644
index 00000000..805f6e42
--- /dev/null
+++ b/src/test/java/io/zipcoder/interfaces/TestStudent.java
@@ -0,0 +1,32 @@
+package io.zipcoder.interfaces;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestStudent {
+
+ @Test
+ public void implementStudentTest(){
+ Student studentOne = new Student(1333L, "Joe");
+
+ Assert.assertTrue(studentOne instanceof Learner);
+ }
+
+ @Test
+ public void inheritanceTest(){
+ Student studentOne = new Student(1333L, "Joe");
+
+ Assert.assertTrue(studentOne instanceof Person);
+ }
+
+ @Test
+ public void learnTest(){
+ Student studentOne = new Student(1333L, "Joe");
+ studentOne.learn(10);
+ double actualStudy = studentOne.getTotalStudyTime();
+ double expectedStudy = 10;
+
+ Assert.assertEquals(expectedStudy, actualStudy, 0);
+
+ }
+}
diff --git a/src/test/java/io/zipcoder/interfaces/TestStudents.java b/src/test/java/io/zipcoder/interfaces/TestStudents.java
new file mode 100644
index 00000000..abd0668c
--- /dev/null
+++ b/src/test/java/io/zipcoder/interfaces/TestStudents.java
@@ -0,0 +1,37 @@
+package io.zipcoder.interfaces;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestStudents {
+
+ @Test
+ public void getInstanceTest(){
+
+ Students test = Students.getInstance();
+ int actual = test.personList.size();
+
+ Assert.assertEquals(2,actual);
+
+ }
+ @Test
+ public void getInstanceTest2(){
+
+ Students testTwo = Students.getInstance();
+
+ boolean personOne = false;
+ boolean personTwo = false;
+
+ for(Person person : testTwo.personList){
+ if(person.getId().equals(212242L) && person.getName().equals("Brian"))
+ personOne = true;
+
+ if(person.getId().equals(121231L) && person.getName().equals("Kievina"))
+ personTwo = true;
+ }
+
+ Assert.assertTrue(personOne);
+ Assert.assertTrue(personTwo);
+
+ }
+}
diff --git a/src/test/java/io/zipcoder/interfaces/TestZipCodeWilmington.java b/src/test/java/io/zipcoder/interfaces/TestZipCodeWilmington.java
new file mode 100644
index 00000000..428d6745
--- /dev/null
+++ b/src/test/java/io/zipcoder/interfaces/TestZipCodeWilmington.java
@@ -0,0 +1,16 @@
+package io.zipcoder.interfaces;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestZipCodeWilmington {
+
+ @Test
+ public void hostLectureByIdTest(){
+ ZipCodeWilmington.getInstance().hostLecture(311412L, 100);
+ int expectedLecture = 50;
+
+ Assert.assertEquals(expectedLecture, ((Student)(Students.getInstance().findById(212242L))).getTotalStudyTime(), 0.0);
+ Assert.assertEquals(expectedLecture, ((Student)(Students.getInstance().findById(121231L))).getTotalStudyTime(), 0.0);
+ }
+}