diff --git a/.gitignore b/.gitignore index c9bfc295..6d928738 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ .classpath #.project .settings +*.idea/ 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..2545dc75 --- /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..844971cc --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/Educator.java @@ -0,0 +1,35 @@ +package io.zipcoder.interfaces; + +public enum Educator implements Teacher { + SAM, + NICK, + FRANK, + CHRIS; + + private final Instructor instructor; + private Double timeWorked = 0.0; + + Educator() { + + this.instructor = new Instructor((long) ordinal(), name()); + + } + + + public Double timeWorked() { + + return timeWorked; + } + + public void teach(Learner learner, double numberOfHours) { + + timeWorked += numberOfHours; + this.instructor.teach(learner, numberOfHours); + } + + public void lecture(Learner[] learners, double numberOfHours) { + + timeWorked += numberOfHours; + this.instructor.lecture(learners, 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..1cce7d62 --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/Instructor.java @@ -0,0 +1,26 @@ +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 hoursPerStudent = numberOfHours / learners.length; + + for(Learner learner : learners) + learner.learn(hoursPerStudent); + + } + +} + 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..481b7db6 --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/Instructors.java @@ -0,0 +1,29 @@ +package io.zipcoder.interfaces; + +public final class Instructors extends People{ + + private static final Instructors INSTANCE = new Instructors(); + + private Instructors(){ + + Instructor newInstructor1 = new Instructor(100L, "Rick"); + Instructor newInstructor2 = new Instructor(110L, "Dana"); + Instructor newInstructor3 = new Instructor(120L, "John"); + + super.add(newInstructor1); + super.add(newInstructor2); + super.add(newInstructor3); + + } + + public Instructor[] getArray() { + return super.personList.toArray(new Instructor[0]); + } + + 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..c7f06715 --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/Learner.java @@ -0,0 +1,9 @@ +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..a2eb2c2a --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/People.java @@ -0,0 +1,60 @@ +package io.zipcoder.interfaces; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public 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(Person person){ + + return personList.contains(person); + } + + public void removeByPerson(Person person){ + + personList.remove(person); + } + + public void removeById(long id) { + personList.remove(findById(id)); + } + + public void removeAll(){ + + personList.clear(); + } + + public int count(){ + + return personList.size(); + } + + public abstract E[] getArray(); + + public Iterator iterator() { + return personList.iterator(); + } +} diff --git a/src/main/java/io/zipcoder/interfaces/PeopleClass.java b/src/main/java/io/zipcoder/interfaces/PeopleClass.java new file mode 100644 index 00000000..1e9b41e6 --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/PeopleClass.java @@ -0,0 +1,9 @@ +package io.zipcoder.interfaces; + +public class PeopleClass extends People{ + + public Person[] getArray() { + return personList.toArray(new Person[0]); + + } +} diff --git a/src/main/java/io/zipcoder/interfaces/Person.java b/src/main/java/io/zipcoder/interfaces/Person.java index fc6a3ffe..4291254b 100644 --- a/src/main/java/io/zipcoder/interfaces/Person.java +++ b/src/main/java/io/zipcoder/interfaces/Person.java @@ -2,4 +2,25 @@ public class Person { + private final Long id; + private String name; + + public Person(Long id, String name) { + this.id = id; + this.name = name; + } + + 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..32b7ff7e --- /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..c586b9ef --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/Students.java @@ -0,0 +1,25 @@ +package io.zipcoder.interfaces; + +public final class Students extends People{ + + private static final Students INSTANCE = new Students(); + + private Students(){ + + Student newStudent1 = new Student(10L, "Sam"); + Student newStudent2 = new Student(20L, "Dan"); + + super.add(newStudent1); + super.add(newStudent2); + + } + + public Student[] getArray() { + return super.personList.toArray(new Student[0]); + } + + 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..08909368 --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/Teacher.java @@ -0,0 +1,7 @@ +package io.zipcoder.interfaces; + +public interface Teacher { + + void teach(Learner learner, double numberOfHours); + 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..d6021c3a --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/ZipCodeWilmington.java @@ -0,0 +1,50 @@ +package io.zipcoder.interfaces; + +import java.util.HashMap; +import java.util.Map; + +public final class ZipCodeWilmington { + + private static final ZipCodeWilmington INSTANCE = new ZipCodeWilmington(); + + Students students = Students.getInstance(); + Instructors instructors = Instructors.getInstance(); + Map studyMap; + + public ZipCodeWilmington() { + + studyMap = new HashMap(); + + } + + public void hostLecture(Teacher teacher, double numberOfHours) { + + teacher.lecture(students.getArray(), numberOfHours); + + } + + public void hostLecture(Long id, double numberOfHours) { + + Teacher teacher = instructors.findById(id); + + teacher.lecture(students.getArray(), numberOfHours); + + } + + public Map getStudyMap() { + + for (Student student : students) { + + studyMap.put(student, student.getTotalStudyTime()); + } + + return studyMap; + } + + + public static ZipCodeWilmington getInstance(){ + + return INSTANCE; + } + +} diff --git a/src/test/java/io/zipcoder/interfaces/EducatorTest.java b/src/test/java/io/zipcoder/interfaces/EducatorTest.java new file mode 100644 index 00000000..fdd3bd32 --- /dev/null +++ b/src/test/java/io/zipcoder/interfaces/EducatorTest.java @@ -0,0 +1,68 @@ +package io.zipcoder.interfaces; + +import org.junit.Assert; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class EducatorTest { + + @Test + public void implementationTest(){ + Educator newEducator = Educator.FRANK; + + Assert.assertTrue(newEducator instanceof Teacher); + } + + @Test + public void getNumberOfHoursTaught() { + Educator educator = Educator.FRANK; + Student newStudent = new Student(7L, "Dan"); + + double expected = 10.0; + + educator.teach(newStudent, expected); + + double actual = educator.timeWorked(); + + Assert.assertEquals(expected, actual, 0); + + } + + @Test + public void teach() { + Educator educator = Educator.NICK; + Student newStudent = new Student(7L, "Dan"); + + double expected = 500.0; + + educator.teach(newStudent, expected); + + double actual = newStudent.getTotalStudyTime(); + + Assert.assertEquals(expected, actual, 0); + } + + @Test + public void lecture() { + Educator educator = Educator.SAM; + Student newStudent1 = new Student(7L, "Dan"); + Student newStudent2 = new Student(8L, "Jack"); + Student newStudent3 = new Student(9L, "Bill"); + + Learner[] students = {newStudent1, newStudent2, newStudent3}; + + educator.lecture(students, 60.0); + + double expected = 20.0; + double actual = newStudent3.getTotalStudyTime(); + + Assert.assertEquals(expected, actual, 0); + //------------------------------ + + double expected2 = 60.0; + double actual2 = educator.timeWorked(); + + Assert.assertEquals(expected2, actual2, 0); + } +} \ No newline at end of file diff --git a/src/test/java/io/zipcoder/interfaces/InstructorTest.java b/src/test/java/io/zipcoder/interfaces/InstructorTest.java new file mode 100644 index 00000000..7f237b21 --- /dev/null +++ b/src/test/java/io/zipcoder/interfaces/InstructorTest.java @@ -0,0 +1,54 @@ +package io.zipcoder.interfaces; + +import org.junit.Assert; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class InstructorTest { + + @Test + public void implementationTest(){ + Instructor newInstructor = new Instructor(76L, "Sam"); + + Assert.assertTrue(newInstructor instanceof Teacher); + } + + @Test + public void inheritanceTest(){ + Instructor newInstructor = new Instructor(76L, "Sammy"); + + Assert.assertTrue(newInstructor instanceof Person); + } + + @Test + public void teachTest(){ + Instructor newInstructor = new Instructor(76L, "Sammy"); + Student newStudent = new Student(7L, "Dan"); + double expected = 500.0; + + newInstructor.teach(newStudent, expected); + + double actual = newStudent.getTotalStudyTime(); + + Assert.assertEquals(expected, actual, 0); + } + + @Test + public void lectureTest(){ + Instructor newInstructor = new Instructor(76L, "Sammy"); + Student newStudent1 = new Student(7L, "Dan"); + Student newStudent2 = new Student(8L, "Jack"); + Student newStudent3 = new Student(9L, "Bill"); + + Learner[] students = {newStudent1, newStudent2, newStudent3}; + + newInstructor.lecture(students, 60.0); + + double expected = 20.0; + double actual = newStudent3.getTotalStudyTime(); + + Assert.assertEquals(expected, actual, 0); + } + +} \ No newline at end of file diff --git a/src/test/java/io/zipcoder/interfaces/InstructorsTest.java b/src/test/java/io/zipcoder/interfaces/InstructorsTest.java new file mode 100644 index 00000000..bf58e595 --- /dev/null +++ b/src/test/java/io/zipcoder/interfaces/InstructorsTest.java @@ -0,0 +1,40 @@ +package io.zipcoder.interfaces; + +import org.junit.Assert; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class InstructorsTest { + + @Test + public void getInstanceTest() { + + Instructors test = Instructors.getInstance(); + + int actual = test.personList.size(); + + Assert.assertEquals(3, actual); + } + + @Test + public void getInstance2Test() { + + Instructors test = Instructors.getInstance(); + + boolean person1 = false; + boolean person2 = false; + + for(Person person : test.personList) { + if (person.getId().equals(100L) && person.getName().equals("Rick")) + person1 = true; + if(person.getId().equals(120L) && person.getName().equals("John")) + person2 = true; + } + + Assert.assertTrue(person1); + Assert.assertTrue(person2); + + } + +} \ No newline at end of file diff --git a/src/test/java/io/zipcoder/interfaces/PeopleTest.java b/src/test/java/io/zipcoder/interfaces/PeopleTest.java new file mode 100644 index 00000000..bb4cbac3 --- /dev/null +++ b/src/test/java/io/zipcoder/interfaces/PeopleTest.java @@ -0,0 +1,94 @@ +package io.zipcoder.interfaces; + +import org.junit.Assert; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class PeopleTest { + + @Test + public void addTest(){ + People newPeople = new PeopleClass(); + Person newPerson = new Person(98L, "Sam"); + + newPeople.add(newPerson); + + int expected = 1; + int actual = newPeople.count(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void removeTest(){ + People newPeople = new PeopleClass(); + Person newPerson = new Person(98L, "Sam"); + Person newPerson2 = new Person(34L, "Mike"); + Person newPerson3 = new Person(10L, "Julia"); + + newPeople.add(newPerson); + newPeople.add(newPerson2); + newPeople.add(newPerson3); + + newPeople.removeByPerson(newPerson2); + + int expected = 2; + int actual = newPeople.count(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void removeByIdTest(){ + People newPeople = new PeopleClass(); + Person newPerson = new Person(98L, "Sam"); + Person newPerson2 = new Person(34L, "Mike"); + Person newPerson3 = new Person(10L, "Julia"); + + newPeople.add(newPerson); + newPeople.add(newPerson2); + newPeople.add(newPerson3); + + newPeople.removeById(10L); + + Assert.assertFalse(newPeople.contains(newPerson3)); + } + + @Test + public void RemoveAllTest() { + + People newPeople = new PeopleClass(); + Person newPerson = new Person(98L, "Sam"); + Person newPerson2 = new Person(34L, "Mike"); + Person newPerson3 = new Person(10L, "Julia"); + + newPeople.add(newPerson); + newPeople.add(newPerson2); + newPeople.add(newPerson3); + + newPeople.removeAll(); + + int actual = newPeople.count(); + + Assert.assertEquals(0, actual); + } + + @Test + public void findByIdTest(){ + + People newPeople = new PeopleClass(); + Person newPerson = new Person(98L, "Sam"); + Person newPerson2 = new Person(34L, "Mike"); + Person newPerson3 = new Person(10L, "Julia"); + + newPeople.add(newPerson); + newPeople.add(newPerson2); + newPeople.add(newPerson3); + + Person actual = newPeople.findById(34L); + + Assert.assertEquals(newPerson2, actual); + } + +} \ No newline at end of file diff --git a/src/test/java/io/zipcoder/interfaces/StudentTest.java b/src/test/java/io/zipcoder/interfaces/StudentTest.java new file mode 100644 index 00000000..031b481a --- /dev/null +++ b/src/test/java/io/zipcoder/interfaces/StudentTest.java @@ -0,0 +1,40 @@ +package io.zipcoder.interfaces; + + +import org.junit.Assert; +import org.junit.Test; + +public class StudentTest { + + @Test + public void implementationTest(){ + + Student newStudent = new Student(10L, "Thing One"); + + Assert.assertTrue(newStudent instanceof Learner); + } + + @Test + public void inheritanceTest(){ + + Student newStudent = new Student(10L, "Thing Two"); + + Assert.assertTrue(newStudent instanceof Person); + } + + @Test + public void learnTest(){ + + Student newStudent = new Student(80L, "Pam"); + + double expected = 90.0; + newStudent.learn(expected); + + double actual = newStudent.getTotalStudyTime(); + + Assert.assertEquals(expected, actual, 0); + } + + + +} \ No newline at end of file diff --git a/src/test/java/io/zipcoder/interfaces/StudentsTest.java b/src/test/java/io/zipcoder/interfaces/StudentsTest.java new file mode 100644 index 00000000..c04a81f8 --- /dev/null +++ b/src/test/java/io/zipcoder/interfaces/StudentsTest.java @@ -0,0 +1,40 @@ +package io.zipcoder.interfaces; + +import org.junit.Assert; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class StudentsTest { + + @Test + public void getInstanceTest() { + + Students test = Students.getInstance(); + + int actual = test.personList.size(); + + Assert.assertEquals(2, actual); + } + + @Test + public void getInstance2Test() { + + Students test = Students.getInstance(); + + boolean person1 = false; + boolean person2 = false; + + for(Person person : test.personList) { + if (person.getId().equals(10L) && person.getName().equals("Sam")) + person1 = true; + if(person.getId().equals(20L) && person.getName().equals("Dan")) + person2 = true; + } + + Assert.assertTrue(person1); + Assert.assertTrue(person2); + + } + +} diff --git a/src/test/java/io/zipcoder/interfaces/TestPerson.java b/src/test/java/io/zipcoder/interfaces/TestPerson.java index d64cd2f0..91bdcebb 100644 --- a/src/test/java/io/zipcoder/interfaces/TestPerson.java +++ b/src/test/java/io/zipcoder/interfaces/TestPerson.java @@ -1,5 +1,35 @@ package io.zipcoder.interfaces; +import org.junit.Assert; +import org.junit.Test; + public class TestPerson { + @Test + public void constructorTest(){ + Long expectedId = 90L; + String expectedName = "Sandy"; + Person newPerson = new Person(expectedId, expectedName); + + Long actualId = newPerson.getId(); + String actualName = newPerson.getName(); + + Assert.assertEquals(expectedId, actualId); + Assert.assertEquals(expectedName, actualName); + + } + + @Test + public void setNameTest(){ + Person newPerson = new Person(10L, ""); + String expected = "Sandy"; + + newPerson.setName(expected); + String actual = newPerson.getName(); + + Assert.assertEquals(expected, actual); + + } + + } diff --git a/src/test/java/io/zipcoder/interfaces/ZipCodeWilmingtonTest.java b/src/test/java/io/zipcoder/interfaces/ZipCodeWilmingtonTest.java new file mode 100644 index 00000000..0bd3dcc5 --- /dev/null +++ b/src/test/java/io/zipcoder/interfaces/ZipCodeWilmingtonTest.java @@ -0,0 +1,58 @@ +package io.zipcoder.interfaces; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.sql.SQLOutput; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.*; + +public class ZipCodeWilmingtonTest { + + ZipCodeWilmington zipCode = ZipCodeWilmington.getInstance(); + Students students = Students.getInstance(); + Educator educator; + + + @Test + public void hostLecture1() { + + educator = Educator.CHRIS; + zipCode.hostLecture(educator, 20.0); + + Student student = students.getArray()[0]; + + double expected = 20.0; + double actual = student.getTotalStudyTime(); + + Assert.assertEquals(expected, actual, 0); + } + + @Test + public void hostLecture2(){ + + zipCode.hostLecture(100L, 20.0); + + Student student = students.getArray()[0]; + + double expected = 30.0; + double actual = student.getTotalStudyTime(); + + Assert.assertEquals(expected, actual, 0); + } + + + + @Test + public void getStudyMap() { + + educator = Educator.SAM; + zipCode.hostLecture(educator, 20.0); + + System.out.println(zipCode.getStudyMap().toString()); + + } +} \ No newline at end of file