diff --git a/pom.xml b/pom.xml
index d73c078..384c015 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,6 +7,18 @@
io.zipcoder
Interfaces
1.0-SNAPSHOT
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.7
+ 1.7
+
+
+
+
diff --git a/src/main/java/io/zipcoder/Application.java b/src/main/java/io/zipcoder/Application.java
deleted file mode 100644
index 3a257cb..0000000
--- a/src/main/java/io/zipcoder/Application.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package io.zipcoder;
-
-
-public class Application {
-}
diff --git a/src/main/java/io/zipcoder/PetUtils.java b/src/main/java/io/zipcoder/PetUtils.java
new file mode 100644
index 0000000..60c59d3
--- /dev/null
+++ b/src/main/java/io/zipcoder/PetUtils.java
@@ -0,0 +1,79 @@
+package io.zipcoder;
+
+
+import io.zipcoder.io.zipcoder.pets.Cat;
+import io.zipcoder.io.zipcoder.pets.Dog;
+import io.zipcoder.io.zipcoder.pets.Pet;
+import io.zipcoder.io.zipcoder.pets.Unicorn;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+public class PetUtils {
+
+ ArrayList pets = new ArrayList();
+ private int numberOfPets;
+
+ public ArrayList getPets() {
+
+ return pets;
+ }
+
+ public String printList() {
+
+ return pets.toString();
+ }
+
+
+ public int getNumberOfPets() {
+
+
+ return pets.size();
+
+ }
+
+ public void addPet(String petName, String petType) {
+
+ Pet pet = null;
+ if (petType.equalsIgnoreCase("Dog")) {
+ pet = new Dog();
+ pet.setPetName(petName);
+ pets.add(pet);
+ } else if (petType.equalsIgnoreCase("Cat")) {
+ pet = new Cat();
+ pet.setPetName(petName);
+ pets.add(pet);
+ } else if (petType.equalsIgnoreCase("Unicorn")) {
+ pet = new Unicorn();
+ pet.setPetName(petName);
+ pets.add(pet);
+ } else {
+ pet = null;
+ }
+ }
+
+ public boolean containsPet(String petName, String petType) {
+
+ boolean contains = false;
+
+ for (Pet pet : pets) {
+ if (pet.getPetName().equalsIgnoreCase(petName) && pet.getClass().getSimpleName().equals(petType)) {
+ contains = true;
+ break;
+ }
+ }
+ return contains;
+ }
+
+ public void setNumberOfPets(int numberOfPets) {
+
+ this.numberOfPets = numberOfPets;
+ }
+
+
+ public static void main(String[] args) {
+
+
+ }
+}
+
diff --git a/src/main/java/io/zipcoder/io/zipcoder/pets/Application.java b/src/main/java/io/zipcoder/io/zipcoder/pets/Application.java
new file mode 100644
index 0000000..4346f36
--- /dev/null
+++ b/src/main/java/io/zipcoder/io/zipcoder/pets/Application.java
@@ -0,0 +1,34 @@
+package io.zipcoder.io.zipcoder.pets;
+
+import io.zipcoder.PetUtils;
+
+import java.util.ArrayList;
+import java.util.Scanner;
+
+public class Application {
+
+ public static void main(String[] args) {
+ Scanner scanner = new Scanner(System.in);
+ PetUtils pet = new PetUtils();
+
+
+ System.out.println("Hi, how many pets do you have?");
+ int numOfPets = Integer.parseInt(scanner.nextLine());
+ for(int i = 0; i < numOfPets; i++) {
+ String petType;
+ String petName;
+ System.out.println("Aww, what kind of pet is # " + (i+1) + "?");
+ petType = scanner.nextLine();
+
+ System.out.println("Cute! Whats your " + petType + "'s name?");
+ petName = scanner.nextLine();
+ pet.addPet(petName, petType);
+ }
+
+ System.out.println("So, let me get this right, you have the following animals: ");
+
+ System.out.println(pet.printList());
+
+ }
+
+ }
diff --git a/src/main/java/io/zipcoder/io/zipcoder/pets/Cat.java b/src/main/java/io/zipcoder/io/zipcoder/pets/Cat.java
new file mode 100644
index 0000000..193b21a
--- /dev/null
+++ b/src/main/java/io/zipcoder/io/zipcoder/pets/Cat.java
@@ -0,0 +1,13 @@
+package io.zipcoder.io.zipcoder.pets;
+
+public class Cat extends Pet {
+
+
+ @Override
+ public String speak() {
+
+ return "meow";
+ }
+
+
+}
diff --git a/src/main/java/io/zipcoder/io/zipcoder/pets/Compare.java b/src/main/java/io/zipcoder/io/zipcoder/pets/Compare.java
new file mode 100644
index 0000000..46af552
--- /dev/null
+++ b/src/main/java/io/zipcoder/io/zipcoder/pets/Compare.java
@@ -0,0 +1,19 @@
+package io.zipcoder.io.zipcoder.pets;
+
+import java.util.Comparator;
+
+public class Compare implements Comparator {
+
+ public int compare(Pet o1, Pet o2) {
+
+ int comparable = o1.getClass().getSimpleName().compareTo(o2.getClass().getSimpleName());
+
+ if(comparable == 0) {
+ return 0;
+ }else if(comparable > 0) {
+ return 1;
+ }else {
+ return -1;
+ }
+ }
+}
diff --git a/src/main/java/io/zipcoder/io/zipcoder/pets/Dog.java b/src/main/java/io/zipcoder/io/zipcoder/pets/Dog.java
new file mode 100644
index 0000000..4c593b9
--- /dev/null
+++ b/src/main/java/io/zipcoder/io/zipcoder/pets/Dog.java
@@ -0,0 +1,14 @@
+package io.zipcoder.io.zipcoder.pets;
+
+public class Dog extends Pet {
+
+
+
+ @Override
+ public String speak() {
+
+ return "woof";
+ }
+
+
+}
diff --git a/src/main/java/io/zipcoder/io/zipcoder/pets/Pet.java b/src/main/java/io/zipcoder/io/zipcoder/pets/Pet.java
new file mode 100644
index 0000000..ca4ca5b
--- /dev/null
+++ b/src/main/java/io/zipcoder/io/zipcoder/pets/Pet.java
@@ -0,0 +1,42 @@
+package io.zipcoder.io.zipcoder.pets;
+
+import io.zipcoder.PetUtils;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.TreeMap;
+
+public abstract class Pet implements Comparable {
+
+ private String petName;
+
+ public abstract String speak();
+
+ public String getPetName() {
+ return petName;
+ }
+
+ public void setPetName(String petName) {
+ this.petName = petName;
+ }
+
+ @Override
+ public String toString(){
+
+ return "[" + petName + ", " + this.getClass().getSimpleName()+ "]";
+
+ }
+ public int compareTo(Pet o) {
+
+ int result = this.getPetName().compareTo(o.getPetName());
+ int classCompare = this.getClass().getSimpleName().compareTo(o.getClass().getSimpleName());
+
+ if(result == 0) {
+ return classCompare;
+ }else {
+ return result;
+ }
+ }
+
+
+}
diff --git a/src/main/java/io/zipcoder/io/zipcoder/pets/Unicorn.java b/src/main/java/io/zipcoder/io/zipcoder/pets/Unicorn.java
new file mode 100644
index 0000000..743c582
--- /dev/null
+++ b/src/main/java/io/zipcoder/io/zipcoder/pets/Unicorn.java
@@ -0,0 +1,11 @@
+package io.zipcoder.io.zipcoder.pets;
+
+public class Unicorn extends Pet {
+
+
+
+ @Override
+ public String speak() {
+ return "* sparkles * glitter *";
+ }
+}
diff --git a/src/test/java/io/zipcoder/ApplicationTest.java b/src/test/java/io/zipcoder/ApplicationTest.java
deleted file mode 100644
index b744df5..0000000
--- a/src/test/java/io/zipcoder/ApplicationTest.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package io.zipcoder;
-
-
-public class ApplicationTest {
-}
diff --git a/src/test/java/io/zipcoder/PetUtilsTest.java b/src/test/java/io/zipcoder/PetUtilsTest.java
new file mode 100644
index 0000000..6c8f51d
--- /dev/null
+++ b/src/test/java/io/zipcoder/PetUtilsTest.java
@@ -0,0 +1,81 @@
+package io.zipcoder;
+
+import io.zipcoder.io.zipcoder.pets.Compare;
+import io.zipcoder.io.zipcoder.pets.Pet;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+public class PetUtilsTest {
+
+ @Test
+ public void printList() {
+ //Given
+ PetUtils utils = new PetUtils();
+ //When
+ utils.addPet("Hugo", "Dog");
+ utils.addPet("Bob", "Cat");
+ //Then
+ String expected = ("[[Hugo, Dog], [Bob, Cat]]");
+ String actual = utils.printList();
+
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void setNumberOfPets() {
+ //Given
+ PetUtils petUtils = new PetUtils();
+ petUtils.addPet("Hugo", "Dog");
+ petUtils.addPet("Bob", "Cat");
+ petUtils.addPet("John", "Unicorn");
+
+ int expected = 3;
+ petUtils.setNumberOfPets(expected);
+ //When
+ int actual = petUtils.getNumberOfPets();
+ //Then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void addPet() {
+ //Given
+ PetUtils utils = new PetUtils();
+
+ utils.addPet("Hugo", "Dog");
+ String expected = ("[Hugo, Dog]");
+ String actual = utils.pets.get(0).toString();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void containsPet() {
+
+ PetUtils utils = new PetUtils();
+
+ utils.addPet("Bob", "Cat");
+
+ Assert.assertTrue(utils.containsPet("Bob", "Cat"));
+ }
+
+ @Test
+ public void compare(){
+ //Given
+ Compare compare = new Compare();
+ PetUtils petUtils = new PetUtils();
+
+ petUtils.addPet("Hugo", "Dog");
+ petUtils.addPet("Bob", "Cat");
+ petUtils.addPet("John", "Unicorn");
+
+ Collections.sort(petUtils.getPets(), compare);
+ String expected = "[[Bob, Cat], [Hugo, Dog], [John, Unicorn]]";
+ String actual = petUtils.getPets().toString();
+
+ Assert.assertEquals(expected, actual);
+ }
+
+}
\ No newline at end of file
diff --git a/src/test/java/io/zipcoder/io/zipcoder/pets/CatTest.java b/src/test/java/io/zipcoder/io/zipcoder/pets/CatTest.java
new file mode 100644
index 0000000..e5f73ca
--- /dev/null
+++ b/src/test/java/io/zipcoder/io/zipcoder/pets/CatTest.java
@@ -0,0 +1,32 @@
+package io.zipcoder.io.zipcoder.pets;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class CatTest {
+
+ @Test
+ public void speak() {
+ //Given
+ Cat cat = new Cat();
+ //When
+ String expected = "meow";
+ String actual = cat.speak();
+ //Then
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setPetName(){
+ //Given
+ Cat cat = new Cat();
+ String expected = "Hugo";
+ cat.setPetName(expected);
+ //When
+ String actual = cat.getPetName();
+ //Then
+ Assert.assertEquals(expected, actual);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/io/zipcoder/io/zipcoder/pets/DogTest.java b/src/test/java/io/zipcoder/io/zipcoder/pets/DogTest.java
new file mode 100644
index 0000000..b06d052
--- /dev/null
+++ b/src/test/java/io/zipcoder/io/zipcoder/pets/DogTest.java
@@ -0,0 +1,32 @@
+package io.zipcoder.io.zipcoder.pets;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class DogTest {
+
+ @Test
+ public void speak() {
+ //Given
+ Dog dog = new Dog();
+ //When
+ String expected = "woof";
+ String actual = dog.speak();
+ //Then
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setPetName(){
+ //Given
+ Dog dog = new Dog();
+ String expected = "Cody";
+ dog.setPetName(expected);
+ //When
+ String actual = dog.getPetName();
+ //Then
+ Assert.assertEquals(expected, actual);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/io/zipcoder/io/zipcoder/pets/PetTest.java b/src/test/java/io/zipcoder/io/zipcoder/pets/PetTest.java
new file mode 100644
index 0000000..dd93a26
--- /dev/null
+++ b/src/test/java/io/zipcoder/io/zipcoder/pets/PetTest.java
@@ -0,0 +1,41 @@
+package io.zipcoder.io.zipcoder.pets;
+
+import io.zipcoder.PetUtils;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.Collections;
+
+public class PetTest {
+
+ @Test
+ public void compareTo() {
+
+ PetUtils petUtils = new PetUtils();
+
+ petUtils.addPet("Hugo", "Dog");
+ petUtils.addPet("Bob", "Cat");
+ petUtils.addPet("John", "Unicorn");
+
+ Collections.sort(petUtils.getPets());
+ String expected = "[[Bob, Cat], [Hugo, Dog], [John, Unicorn]]";
+ String actual = petUtils.getPets().toString();
+
+ Assert.assertEquals(expected, actual);
+ }
+
+
+ @Test
+ public void setPetName() {
+ //Given
+ Unicorn unicorn = new Unicorn();
+ unicorn.setPetName("Blumbo");
+ //When
+ String expected = unicorn.getPetName();
+ String actual = "Blumbo";
+ //Then
+ Assert.assertEquals(expected, actual);
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/test/java/io/zipcoder/io/zipcoder/pets/UnicornTest.java b/src/test/java/io/zipcoder/io/zipcoder/pets/UnicornTest.java
new file mode 100644
index 0000000..87d87c8
--- /dev/null
+++ b/src/test/java/io/zipcoder/io/zipcoder/pets/UnicornTest.java
@@ -0,0 +1,33 @@
+package io.zipcoder.io.zipcoder.pets;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class UnicornTest {
+
+
+ @Test
+ public void speak() {
+ //Given
+ Unicorn unicorn = new Unicorn();
+ //When
+ String expected = "* sparkles * glitter *";
+ String actual = unicorn.speak();
+ //Then
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setPetName(){
+ //Given
+ Unicorn unicorn = new Unicorn();
+ String expected = "Lucky";
+ unicorn.setPetName(expected);
+ //When
+ String actual = unicorn.getPetName();
+ //Then
+ Assert.assertEquals(expected, actual);
+ }
+}
\ No newline at end of file