diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 00000000..73f69e09
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
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..63e90019
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 00000000..712ab9d9
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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..25daa30c
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ 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/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 00000000..e96534fb
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ 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..17af8fb4
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/Educator.java
@@ -0,0 +1,26 @@
+package io.zipcoder.interfaces;
+
+public enum Educator implements Teacher {
+ Leon(1l, "Hunter"), Dolio(2l, "Durant"), Kris(3l, "Younger");
+ String name;
+ Long id;
+ Double timeWorked;
+
+ Educator(Long id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
+ public void teach(Learner learner, double numberOfHours) {
+ learner.learn(numberOfHours);
+ this.timeWorked += numberOfHours;
+ }
+
+ public void lecture(Learner[] learners, double numberOfHours) {
+ double numberOfHoursPerLearner = numberOfHours / learners.length;
+ for (Learner element : learners) {
+ element.learn(numberOfHoursPerLearner);
+ }
+ this.timeWorked += numberOfHours;
+ }
+}
\ No newline at end of file
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..f92d2776
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/Instructor.java
@@ -0,0 +1,21 @@
+package io.zipcoder.interfaces;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+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 numberOfHoursPerLearner = numberOfHours / learners.length;
+ for(Learner element:learners){
+ element.learn(numberOfHoursPerLearner);
+ }
+ }
+}
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..312ec29c
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/Instructors.java
@@ -0,0 +1,18 @@
+package io.zipcoder.interfaces;
+
+public class Instructors extends People{
+
+
+
+ static final Instructors INSTANCE= new Instructors();
+
+ public Instructors(){
+ this.add(new Instructor(1l,"Leon Hunter"));
+ this.add(new Instructor(2l,"Dolio Durant"));
+ this.add(new Instructor(3l,"Kris Younger"));
+ }
+
+ 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..2e1edf0d
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/Learner.java
@@ -0,0 +1,6 @@
+package io.zipcoder.interfaces;
+
+public interface Learner {
+ public void learn(double numberOfHours);
+ public 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..a47d6e13
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/People.java
@@ -0,0 +1,67 @@
+package io.zipcoder.interfaces;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public abstract class People implements Iterable {
+ List personList;
+ // Person person = new Person(null, null);
+
+ public People() {
+ this.personList = new ArrayList();
+ }
+
+
+ public void add(E person) {
+ personList.add(person);
+ }
+
+ public E findById(long id) {
+ for (E value : personList) {
+ if (value.getId() == id){
+ return value;
+ }
+ }
+ return null;
+ }
+
+ public void remove(String name) {
+ List toRemove = new ArrayList();
+ for (E element : personList) {
+ if (element.getName() == name) {
+ toRemove.add(element);
+
+ }
+ }
+ personList.removeAll(toRemove);
+ }
+
+ public void remove(Long id){
+ //List personList= new ArrayList();;
+ List toRemove = new ArrayList();
+ for (E element : personList) {
+ if (element.getId() == id) {
+ toRemove.add(element);
+ }
+ }
+ personList.removeAll(toRemove);
+ }
+
+ public void removeAll(){
+ personList.removeAll(personList);
+ }
+
+ public Integer count(){
+ return personList.size();
+ }
+
+ public E[] toArray(){
+ return null;
+ }
+
+
+ public Iterator iterator() {
+ return personList.iterator();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/io/zipcoder/interfaces/Person.java b/src/main/java/io/zipcoder/interfaces/Person.java
index fc6a3ffe..1cc02b0c 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.name = name;
+ this.id = id;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public String getName() {
+ return 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..673dbe75
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/Student.java
@@ -0,0 +1,22 @@
+package io.zipcoder.interfaces;
+
+import java.security.PublicKey;
+
+public class Student extends Person implements Learner {
+
+ Double totalStudyTime;
+
+ public Student(Long id, String name,Double totalStudyTime) {
+ super(id, name);
+ this.totalStudyTime=totalStudyTime;
+ }
+
+
+ public void learn(double numberOfHours) {
+ this.totalStudyTime+=numberOfHours;
+ }
+
+ public Double getTotalStudyTime() {
+ return this.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..1bdaca22
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/Students.java
@@ -0,0 +1,24 @@
+package io.zipcoder.interfaces;
+
+public final class Students extends People{
+
+
+ static final Students INSTANCE= new Students();
+
+
+ private Students() {
+ this.add(new Student(1l,"char",9.0));
+ this.add(new Student(2l,"sitara",7.0));
+ this.add(new Student(3l,"bobbi",8.0));
+ this.add(new Student(4l,"john",6.0));
+ }
+
+ public static Students getINSTANCE() {
+ return INSTANCE;
+ }
+
+ public Student[] toArray(){
+ Student[] array=new Student[INSTANCE.count()];
+ return array;
+ }
+}
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..829d4220
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/Teacher.java
@@ -0,0 +1,6 @@
+package io.zipcoder.interfaces;
+
+public interface Teacher {
+ public void teach(Learner learner,double numberOfHours);
+ public void lecture(Learner[] learners,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..3e16f18d
--- /dev/null
+++ b/src/main/java/io/zipcoder/interfaces/ZipCodeWilmington.java
@@ -0,0 +1,34 @@
+package io.zipcoder.interfaces;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class ZipCodeWilmington {
+
+
+ static final ZipCodeWilmington INSTANCE = new ZipCodeWilmington();
+ static final Students students = Students.getINSTANCE();
+ static final Instructors instructors = Instructors.getINSTANCE();
+
+
+
+ public void hostLecture(Teacher teacher, double numberOfHours) {
+ teacher.lecture(students.toArray(), numberOfHours);
+ }
+
+ public void hostLecture(long id, double numberOfHours) {
+ instructors.findById(id).lecture(students.toArray(), numberOfHours);
+ }
+
+ public Map getStudyMap() {
+ Map studyMap = new HashMap();
+ for (Student element : students) {
+ studyMap.put(element, element.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..5443e4f9
--- /dev/null
+++ b/src/test/java/io/zipcoder/interfaces/TestEducator.java
@@ -0,0 +1,21 @@
+package io.zipcoder.interfaces;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestEducator {
+ @Test
+ public void testImplementation() {
+ Educator educator = Educator.Leon;
+ Assert.assertTrue(educator instanceof Teacher);
+ }
+//
+// @Test
+// public void teachTest(){
+// Educator educator= Educator.Leon;
+// Student student=new Student(2l,"sitara",6.0);
+//
+// }
+}
+
+
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..7d0a1a6e
--- /dev/null
+++ b/src/test/java/io/zipcoder/interfaces/TestInstructor.java
@@ -0,0 +1,46 @@
+package io.zipcoder.interfaces;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestInstructor {
+ @Test
+ public void testImplementation(){
+ Instructor instructor=new Instructor(null,null);
+ Assert.assertTrue(instructor instanceof Teacher);
+ }
+
+ @Test
+ public void testInheritance(){
+ Instructor instructor=new Instructor(null,null);
+ Assert.assertTrue(instructor instanceof Person);
+ }
+
+ @Test
+ public void testTeach(){
+ //given
+ Instructor instructor=new Instructor(null,null);
+ Student student= new Student(null,null,2.0);
+ Double expectedTotalTime=7.0;
+ //when
+ instructor.teach(student,5.0);
+ //then
+ Assert.assertEquals(expectedTotalTime,student.getTotalStudyTime());
+ }
+
+ @Test
+ public void testLecture(){
+ //given
+ Instructor instructor=new Instructor(null,null);
+ Student student=new Student(null,null,5.0);
+ Student student1=new Student(null,null,3.0);
+ Double expected=6.0;
+ Double expected1=4.0;
+ Student[] studentArray={student,student1};
+ //when
+ instructor.lecture(studentArray,2.0);
+ //then
+ Assert.assertEquals(expected,student.getTotalStudyTime());
+ Assert.assertEquals(expected1,student1.getTotalStudyTime());
+ }
+}
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..6a1713c0
--- /dev/null
+++ b/src/test/java/io/zipcoder/interfaces/TestInstructors.java
@@ -0,0 +1,15 @@
+package io.zipcoder.interfaces;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestInstructors {
+ @Test
+ public void TestInstance() {
+ //given
+ Instructors instance= Instructors.getINSTANCE();
+ Integer actual= instance.personList.size();
+ Integer expected=3;
+ Assert.assertEquals(expected,actual);
+ }
+}
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..289c9e25
--- /dev/null
+++ b/src/test/java/io/zipcoder/interfaces/TestPeople.java
@@ -0,0 +1,54 @@
+package io.zipcoder.interfaces;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestPeople {
+ People people = Students.getINSTANCE();;
+
+ @Test
+ public void testAdd(){
+ //given
+ Person person = new Person(6l,"dumdum");
+ Person person1=new Person(5l,"gumgum");
+ Integer expected=6;
+ //when
+ people.add(person);
+ people.add(person1);
+ //then
+ Assert.assertEquals(expected,people.count());
+ }
+
+ @Test
+ public void testRemove(){
+ //given
+ Integer expected=5;
+ //when
+ people.remove(4l);
+ //then
+ Assert.assertEquals(expected,people.count());
+ }
+
+ @Test
+ public void testRemove2(){
+ //given
+ Integer expected=6;
+ //when
+ people.remove("baabaa");
+ //then
+ Assert.assertEquals(expected,people.count());
+ }
+
+@Test
+ public void testFindById(){
+ Person person = new Person(7l,"baabaa");
+ Person expected= person;
+ people.add(person);
+// people.add(person1);
+ //when
+ Person actual= people.findById(7l);
+ //then
+ Assert.assertEquals(expected,actual);
+}
+}
diff --git a/src/test/java/io/zipcoder/interfaces/TestPerson.java b/src/test/java/io/zipcoder/interfaces/TestPerson.java
index d64cd2f0..ecde892c 100644
--- a/src/test/java/io/zipcoder/interfaces/TestPerson.java
+++ b/src/test/java/io/zipcoder/interfaces/TestPerson.java
@@ -1,5 +1,46 @@
package io.zipcoder.interfaces;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
public class TestPerson {
+ @Test
+ public void testConstructor() {
+ //given
+ String expectedName = "rameez";
+ Long id = 4l;
+ Person person = new Person(4l, "rameez");
+ //when
+ String actual = person.getName();
+ //then
+ Assert.assertEquals(expectedName, actual);
+ }
+
+ @Test
+ public void testConstructorForId() {
+ //given
+ String expectedName = "rameez";
+ Long expectedId = 4l;
+ Person person = new Person(4l, "rameez");
+ //when
+ Long actual = person.getId();
+ //then
+ Assert.assertEquals(expectedId, actual);
+ }
+
+ @Test
+ public void testSetName() {
+ //given
+
+ Long id = 4l;
+ Person person = new Person(4l, "rameez123");
+ String expectedName = "rameez";
+ //when
+ person.setName(expectedName);
+ String actual = person.getName();
+ //then
+ Assert.assertEquals(expectedName, actual);
+ }
}
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..a510ee8c
--- /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 testImplementation(){
+ Student student = new Student(null,null,null);
+ Assert.assertTrue(student instanceof Learner);
+ }
+
+ @Test
+ public void testInheritance(){
+ Student student = new Student(null,null,null);
+ Assert.assertTrue(student instanceof Person );
+ }
+
+ @Test
+ public void testLearn(){
+ //given
+ Double expectedTotalStudyTime=5.0;
+ Student student=new Student(null,null,0.0);
+ //when
+ student.learn(5.0);
+ Double actual=student.getTotalStudyTime();
+ //then
+ Assert.assertEquals(expectedTotalStudyTime,actual);
+
+ }
+
+}
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..6eb387a2
--- /dev/null
+++ b/src/test/java/io/zipcoder/interfaces/TestStudents.java
@@ -0,0 +1,15 @@
+package io.zipcoder.interfaces;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.omg.CORBA.PUBLIC_MEMBER;
+
+public class TestStudents {
+ @Test
+ public void testInstance(){
+ Students instance = Students.getINSTANCE();
+ Integer actual=instance.personList.size();
+ Integer expected = 5;
+ Assert.assertEquals(expected,actual);
+ }
+}
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..0663958a
--- /dev/null
+++ b/src/test/java/io/zipcoder/interfaces/TestZipCodeWilmington.java
@@ -0,0 +1,30 @@
+package io.zipcoder.interfaces;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.Map;
+
+//public class TestZipCodeWilmington {
+// @Test
+// public void TestHostByLecture(){
+// //given
+// ZipCodeWilmington instance= ZipCodeWilmington.getINSTANCE();
+// Teacher teacher=new Teacher() {
+// public void teach(Learner learner, double numberOfHours) {
+//
+// }
+//
+// public void lecture(Learner[] learners, double numberOfHours) {
+//
+// }
+// };
+// Students studentInstance= Students.getINSTANCE();
+// Instructors instructorInstance= Instructors.getINSTANCE();
+// Double expectedNumberOfHours=9.0;
+// instance.hostLecture(teacher, 3);
+// Double actual=instance.getStudyMap().get(studentInstance.findById(1l));
+// Assert.assertEquals(expectedNumberOfHours,actual);
+//
+// }
+//}