diff --git a/.gitignore b/.gitignore
index 95abee5d..6929df67 100644
--- a/.gitignore
+++ b/.gitignore
@@ -103,4 +103,8 @@ target/*
.project
.classpath
-.settings
\ No newline at end of file
+.settings
+
+# other
+.idea
+.DS_STORE
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 69a3b878..ab263c7f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,5 +8,19 @@
froilans-farm
1.0-SNAPSHOT
+
+ 19
+ 19
+ 19
+
-
\ No newline at end of file
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ 5.9.3
+ test
+
+
+
+
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/CropRow.java b/src/main/java/com/zipcodewilmington/froilansfarm/CropRow.java
new file mode 100644
index 00000000..bc368406
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/CropRow.java
@@ -0,0 +1,52 @@
+package com.zipcodewilmington.froilansfarm;
+
+import com.zipcodewilmington.froilansfarm.plants.Crop;
+
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+public class CropRow {
+
+ private final List row = new LinkedList<>();
+
+ public CropRow() {}
+
+ public CropRow(Crop crop) {
+ this.row.add(crop);
+ }
+
+ public CropRow(Crop[] crops) {
+ this.row.addAll(Arrays.asList(crops));
+ }
+
+ public CropRow(List crops) {
+ this.row.addAll(crops);
+ }
+
+ public List getCrops() {
+ return this.row;
+ }
+
+ public void store(Crop crop) {
+ this.row.add(crop);
+ }
+
+ public void store(Crop[] crops) {
+ this.row.addAll(Arrays.asList(crops));
+ }
+
+ public void store(List crops) {
+ this.row.addAll(crops);
+ }
+
+
+ public boolean fertilize() {
+ for (Crop crop : this.row) {
+ crop.fertilize();
+ }
+
+ return false;
+ }
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/Farm.java b/src/main/java/com/zipcodewilmington/froilansfarm/Farm.java
new file mode 100644
index 00000000..31824f48
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/Farm.java
@@ -0,0 +1,26 @@
+package com.zipcodewilmington.froilansfarm;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Farm {
+
+ private List fields = new ArrayList<>();
+
+ public Farm(List fields) {
+ this.fields.addAll(fields);
+ }
+
+ public Farm(Field field) {
+ this.fields.add(field);
+ }
+
+ public List getFields() {
+ return this.fields;
+ }
+
+ public void addFields(Field... fields) {
+ this.fields.addAll(List.of(fields));
+ }
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/Farmer.java b/src/main/java/com/zipcodewilmington/froilansfarm/Farmer.java
new file mode 100644
index 00000000..821fccc1
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/Farmer.java
@@ -0,0 +1,38 @@
+package com.zipcodewilmington.froilansfarm;
+
+import com.zipcodewilmington.froilansfarm.interfaces.Botanist;
+import com.zipcodewilmington.froilansfarm.interfaces.Edible;
+import com.zipcodewilmington.froilansfarm.interfaces.Rideable;
+import com.zipcodewilmington.froilansfarm.interfaces.Rider;
+import com.zipcodewilmington.froilansfarm.plants.Crop;
+
+public class Farmer extends Person implements Botanist, Rider {
+
+ public Farmer(String name) {
+ super(name);
+ }
+
+ @Override
+ public void plant(CropRow cropRow, Crop crop) {
+ cropRow.store(crop);
+ }
+
+ @Override
+ public void makeNoise() {
+ System.out.println("howdy");
+ }
+
+ @Override
+ public void mount(Rideable rideable) {
+ }
+
+ @Override
+ public void dismount(Rideable rideable) {
+ }
+
+ @Override
+ public void eat(Edible edible) {
+ System.out.println("yum yum");
+ }
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/Field.java b/src/main/java/com/zipcodewilmington/froilansfarm/Field.java
new file mode 100644
index 00000000..30a1692c
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/Field.java
@@ -0,0 +1,41 @@
+package com.zipcodewilmington.froilansfarm;
+
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+public class Field {
+
+ private final List cropRows = new LinkedList<>();
+
+ public Field() {}
+
+ public Field(CropRow croprow) {
+ this.cropRows.add(croprow);
+ }
+
+ public Field(CropRow[] cropRows) {
+ this.cropRows.addAll(Arrays.asList(cropRows));
+ }
+
+ public Field(List cropRows) {
+ this.cropRows.addAll(cropRows);
+ }
+
+ public List getCropRows() {
+ return this.cropRows;
+ }
+
+ public void store(CropRow cropRow) {
+ this.cropRows.add(cropRow);
+ }
+
+ public void store(CropRow[] cropRows) {
+ this.cropRows.addAll(Arrays.asList(cropRows));
+ }
+
+ public void store(List cropRows) {
+ this.cropRows.addAll(cropRows);
+ }
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/MainApplication.java b/src/main/java/com/zipcodewilmington/froilansfarm/MainApplication.java
index fd743ffc..4e9d74f7 100644
--- a/src/main/java/com/zipcodewilmington/froilansfarm/MainApplication.java
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/MainApplication.java
@@ -1,8 +1,77 @@
package com.zipcodewilmington.froilansfarm;
+import com.zipcodewilmington.froilansfarm.animals.Chicken;
+import com.zipcodewilmington.froilansfarm.animals.Horse;
+import com.zipcodewilmington.froilansfarm.buildings.ChickenCoop;
+import com.zipcodewilmington.froilansfarm.buildings.Stable;
+import com.zipcodewilmington.froilansfarm.interfaces.Edible;
+import com.zipcodewilmington.froilansfarm.plants.Crop;
+import com.zipcodewilmington.froilansfarm.plants.TomatoPlant;
+import com.zipcodewilmington.froilansfarm.vehicles.Aircraft;
+import com.zipcodewilmington.froilansfarm.vehicles.CropDuster;
+import com.zipcodewilmington.froilansfarm.vehicles.Tractor;
+import com.zipcodewilmington.froilansfarm.vehicles.Vehicle;
+
+import java.util.List;
+
/**
* Created by leon on 2/26/18.
*/
public class MainApplication {
+ public static void main(String[] args) {
+ // Create the Chicken objects using a loop
+ Chicken[] chickens = new Chicken[15];
+ for (int i = 0; i < chickens.length; i++) {
+ chickens[i] = new Chicken();
+ }
+
+ // Create the ChickenCoops using the Chicken arrays
+ ChickenCoop[] coops = new ChickenCoop[4];
+ coops[0] = new ChickenCoop(new Chicken[] { chickens[0], chickens[1], chickens[2], chickens[3], chickens[4] });
+ coops[1] = new ChickenCoop(new Chicken[] { chickens[5], chickens[6], chickens[7], chickens[8] });
+ coops[2] = new ChickenCoop(new Chicken[] { chickens[9], chickens[10], chickens[11] });
+ coops[3] = new ChickenCoop(new Chicken[] { chickens[12], chickens[13], chickens[14] });
+
+ // Created the horses objects using a loop
+ Horse[] horses = new Horse[10];
+ for (int i = 0; i < horses.length; i++) {
+ horses[i] = new Horse();
+ }
+
+ // Create the Stables using the Horse arrays
+ Stable[] stables = new Stable[3];
+ stables[0] = new Stable(List.of(new Horse[]{horses[0], horses[1], horses[2], horses[3]}));
+
+ stables[1] = new Stable(List.of(new Horse[]{horses[4], horses[5], horses[6], horses[7]}));
+ stables[2] = new Stable(List.of(new Horse[]{horses[8], horses[9]}));
+
+ Crop corn;
+ corn = new Crop() {
+ @Override
+ public Edible yield() {
+ return null;
+ }
+ };
+
+ Crop tomato = new TomatoPlant();
+
+ // Create the crop rows
+ CropRow rowOne = new CropRow(new Crop[] {corn});
+ CropRow rowTwo = new CropRow(new Crop[] {tomato});
+ CropRow rowThree = new CropRow(new Crop[] {});
+ CropRow rowFour = new CropRow(new Crop[] {});
+ CropRow rowFive = new CropRow(new Crop[] {});
+
+ // Add the crop rows to the field
+ Field field = new Field(new CropRow[] {rowOne, rowTwo, rowThree, rowFour, rowFive});
+
+ Farmer froilan = new Farmer("Froilan");
+ Tractor froilansTractor = new Tractor();
+ CropDuster froilansCropDuster = new CropDuster();
+ Vehicle[] froilainsVehicles = { froilansTractor };
+ Farmer froilanda = new Farmer("Froilanda");
+ Person[] people = {froilan,froilanda};
+ Aircraft cropduster = new CropDuster();
+ }
}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/Person.java b/src/main/java/com/zipcodewilmington/froilansfarm/Person.java
new file mode 100644
index 00000000..2f823ebb
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/Person.java
@@ -0,0 +1,14 @@
+package com.zipcodewilmington.froilansfarm;
+
+import com.zipcodewilmington.froilansfarm.interfaces.Eater;
+import com.zipcodewilmington.froilansfarm.interfaces.NoiseMaker;
+
+public abstract class Person implements Eater, NoiseMaker {
+
+ public String name;
+
+ public Person(String name) {
+ this.name = name;
+ }
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/animals/Animal.java b/src/main/java/com/zipcodewilmington/froilansfarm/animals/Animal.java
new file mode 100644
index 00000000..b8854a2d
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/animals/Animal.java
@@ -0,0 +1,8 @@
+package com.zipcodewilmington.froilansfarm.animals;
+
+import com.zipcodewilmington.froilansfarm.interfaces.Eater;
+import com.zipcodewilmington.froilansfarm.interfaces.NoiseMaker;
+
+public abstract class Animal implements Eater, NoiseMaker {
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/animals/Chicken.java b/src/main/java/com/zipcodewilmington/froilansfarm/animals/Chicken.java
new file mode 100644
index 00000000..f2b93710
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/animals/Chicken.java
@@ -0,0 +1,30 @@
+package com.zipcodewilmington.froilansfarm.animals;
+
+import com.zipcodewilmington.froilansfarm.food.EdibleEgg;
+import com.zipcodewilmington.froilansfarm.interfaces.Edible;
+import com.zipcodewilmington.froilansfarm.interfaces.Produce;
+
+public class Chicken extends Animal implements Produce {
+
+ public boolean hasBeenFertilized;
+
+ @Override
+ public Edible yield() {
+ if(hasBeenFertilized) {
+ return new EdibleEgg();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public void eat(Edible edible) {
+ System.out.println("peck peck");
+ }
+
+ @Override
+ public void makeNoise() {
+ System.out.println("buck buck buckawk");
+ }
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/animals/Horse.java b/src/main/java/com/zipcodewilmington/froilansfarm/animals/Horse.java
new file mode 100644
index 00000000..7c0add9c
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/animals/Horse.java
@@ -0,0 +1,18 @@
+package com.zipcodewilmington.froilansfarm.animals;
+
+import com.zipcodewilmington.froilansfarm.interfaces.Edible;
+import com.zipcodewilmington.froilansfarm.interfaces.Rideable;
+
+public class Horse extends Animal implements Rideable {
+
+ @Override
+ public void eat(Edible edible) {
+ System.out.println("munch munch");
+ }
+
+ @Override
+ public void makeNoise() {
+ System.out.println("neigh");
+ }
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/buildings/ChickenCoop.java b/src/main/java/com/zipcodewilmington/froilansfarm/buildings/ChickenCoop.java
new file mode 100644
index 00000000..4728b821
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/buildings/ChickenCoop.java
@@ -0,0 +1,29 @@
+package com.zipcodewilmington.froilansfarm.buildings;
+
+import com.zipcodewilmington.froilansfarm.animals.Chicken;
+
+import java.util.ArrayList;
+
+public class ChickenCoop {
+
+ Chicken[] chickenList = new ArrayList<>().toArray(new Chicken[0]);
+
+ public ChickenCoop(Chicken[] chickenList) {
+ this.chickenList = chickenList;
+ }
+
+ public Chicken[] getChickenList() {
+ return chickenList;
+ }
+
+ public void setChickenList(ArrayList chickenList) {
+ this.chickenList = chickenList.toArray(new Chicken[0]);
+ }
+
+ @Override
+ public String toString() {
+ return "ChickenCoop{" +
+ "chickenList=" + chickenList +
+ '}';
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/buildings/FarmHouse.java b/src/main/java/com/zipcodewilmington/froilansfarm/buildings/FarmHouse.java
new file mode 100644
index 00000000..f9e44c93
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/buildings/FarmHouse.java
@@ -0,0 +1,11 @@
+package com.zipcodewilmington.froilansfarm.buildings;
+
+import com.zipcodewilmington.froilansfarm.Person;
+
+import java.util.ArrayList;
+
+public class FarmHouse {
+
+ ArrayList peopleList = new ArrayList<>();
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/buildings/Stable.java b/src/main/java/com/zipcodewilmington/froilansfarm/buildings/Stable.java
new file mode 100644
index 00000000..47c65e64
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/buildings/Stable.java
@@ -0,0 +1,36 @@
+package com.zipcodewilmington.froilansfarm.buildings;
+
+import com.zipcodewilmington.froilansfarm.animals.Horse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Stable {
+
+ private List horses = new ArrayList<>();
+
+ public void addHorse(Horse horse) {
+ horses.add(horse);
+ }
+
+ public Stable(List horses) {
+ this.horses = horses;
+ }
+
+ public Stable() {}
+
+ public List getHorses() {
+ return horses;
+ }
+
+ public void setHorses(List horses) {
+ this.horses = horses;
+ }
+
+ @Override
+ public String toString() {
+ return "Stable{" +
+ "horses=" + horses +
+ '}';
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/days/EveryMorning.java b/src/main/java/com/zipcodewilmington/froilansfarm/days/EveryMorning.java
new file mode 100644
index 00000000..47db8dd0
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/days/EveryMorning.java
@@ -0,0 +1,7 @@
+package com.zipcodewilmington.froilansfarm.days;
+
+public class EveryMorning {
+ public static void everyMorning() {
+ //TODO
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/days/Monday.java b/src/main/java/com/zipcodewilmington/froilansfarm/days/Monday.java
new file mode 100644
index 00000000..b254719e
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/days/Monday.java
@@ -0,0 +1,16 @@
+package com.zipcodewilmington.froilansfarm.days;
+
+import com.zipcodewilmington.froilansfarm.CropRow;
+import com.zipcodewilmington.froilansfarm.Farmer;
+import com.zipcodewilmington.froilansfarm.Field;
+import com.zipcodewilmington.froilansfarm.vehicles.CropDuster;
+
+public class Monday {
+ public static void monday(Farmer farmer, CropDuster cropDuster, Field field) {
+ farmer.mount(cropDuster);
+ cropDuster.fly();
+ for(CropRow cropRow : field.getCropRows()) {
+ cropDuster.fertilize(cropRow);
+ }
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/days/Tuesday.java b/src/main/java/com/zipcodewilmington/froilansfarm/days/Tuesday.java
new file mode 100644
index 00000000..cfeb06a2
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/days/Tuesday.java
@@ -0,0 +1,30 @@
+package com.zipcodewilmington.froilansfarm.days;
+
+import com.zipcodewilmington.froilansfarm.CropRow;
+import com.zipcodewilmington.froilansfarm.Farm;
+import com.zipcodewilmington.froilansfarm.Farmer;
+import com.zipcodewilmington.froilansfarm.Field;
+import com.zipcodewilmington.froilansfarm.interfaces.Edible;
+import com.zipcodewilmington.froilansfarm.plants.Crop;
+import com.zipcodewilmington.froilansfarm.vehicles.Tractor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.zipcodewilmington.froilansfarm.days.EveryMorning.everyMorning;
+
+public class Tuesday {
+ public static List tuesday(Farmer farmer, Tractor tractor, Field field) {
+ everyMorning();
+ farmer.mount(tractor);
+ List yields = new ArrayList<>();
+ for(CropRow cropRow : field.getCropRows()) {
+ for(Crop crop : cropRow.getCrops()) {
+ tractor.makeNoise();
+ Edible yield = tractor.harvest(crop);
+ if (yield != null) yields.add(yield);
+ }
+ }
+ return yields;
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/food/Corn.java b/src/main/java/com/zipcodewilmington/froilansfarm/food/Corn.java
new file mode 100644
index 00000000..d6309a52
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/food/Corn.java
@@ -0,0 +1,6 @@
+package com.zipcodewilmington.froilansfarm.food;
+
+import com.zipcodewilmington.froilansfarm.interfaces.Edible;
+
+public class Corn implements Edible {
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/food/EdibleEgg.java b/src/main/java/com/zipcodewilmington/froilansfarm/food/EdibleEgg.java
new file mode 100644
index 00000000..212780fb
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/food/EdibleEgg.java
@@ -0,0 +1,7 @@
+package com.zipcodewilmington.froilansfarm.food;
+
+import com.zipcodewilmington.froilansfarm.interfaces.Edible;
+
+public class EdibleEgg implements Edible {
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/food/Tomato.java b/src/main/java/com/zipcodewilmington/froilansfarm/food/Tomato.java
new file mode 100644
index 00000000..451bf851
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/food/Tomato.java
@@ -0,0 +1,6 @@
+package com.zipcodewilmington.froilansfarm.food;
+
+import com.zipcodewilmington.froilansfarm.interfaces.Edible;
+
+public class Tomato implements Edible {
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Botanist.java b/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Botanist.java
new file mode 100644
index 00000000..7956e5c4
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Botanist.java
@@ -0,0 +1,10 @@
+package com.zipcodewilmington.froilansfarm.interfaces;
+
+import com.zipcodewilmington.froilansfarm.CropRow;
+import com.zipcodewilmington.froilansfarm.plants.Crop;
+
+public interface Botanist {
+
+ void plant(CropRow cropRow, Crop crop);
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Eater.java b/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Eater.java
new file mode 100644
index 00000000..a88ed895
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Eater.java
@@ -0,0 +1,7 @@
+package com.zipcodewilmington.froilansfarm.interfaces;
+
+public interface Eater {
+
+ void eat(Edible edible);
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Edible.java b/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Edible.java
new file mode 100644
index 00000000..96c36393
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Edible.java
@@ -0,0 +1,5 @@
+package com.zipcodewilmington.froilansfarm.interfaces;
+
+public interface Edible {
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/NoiseMaker.java b/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/NoiseMaker.java
new file mode 100644
index 00000000..0b174ee9
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/NoiseMaker.java
@@ -0,0 +1,7 @@
+package com.zipcodewilmington.froilansfarm.interfaces;
+
+public interface NoiseMaker {
+
+ void makeNoise();
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Produce.java b/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Produce.java
new file mode 100644
index 00000000..479da3be
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Produce.java
@@ -0,0 +1,7 @@
+package com.zipcodewilmington.froilansfarm.interfaces;
+
+public interface Produce {
+
+ Edible yield();
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Rideable.java b/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Rideable.java
new file mode 100644
index 00000000..e0428efd
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Rideable.java
@@ -0,0 +1,5 @@
+package com.zipcodewilmington.froilansfarm.interfaces;
+
+public interface Rideable {
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Rider.java b/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Rider.java
new file mode 100644
index 00000000..fc6f6588
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/interfaces/Rider.java
@@ -0,0 +1,9 @@
+package com.zipcodewilmington.froilansfarm.interfaces;
+
+public interface Rider {
+
+ void mount(Rideable rideable);
+
+ void dismount(Rideable rideable);
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/plants/Cornstalk.java b/src/main/java/com/zipcodewilmington/froilansfarm/plants/Cornstalk.java
new file mode 100644
index 00000000..b1e9e70f
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/plants/Cornstalk.java
@@ -0,0 +1,20 @@
+package com.zipcodewilmington.froilansfarm.plants;
+
+import com.zipcodewilmington.froilansfarm.food.Corn;
+import com.zipcodewilmington.froilansfarm.interfaces.Edible;
+
+public class Cornstalk extends Crop {
+
+ @Override
+ public Edible yield() {
+ if(isFertilized() && !isHarvested()) {
+ this.harvest();
+ return new Corn();
+ }
+ else {
+ this.harvest();
+ return null;
+ }
+ }
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/plants/Crop.java b/src/main/java/com/zipcodewilmington/froilansfarm/plants/Crop.java
new file mode 100644
index 00000000..bc772d25
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/plants/Crop.java
@@ -0,0 +1,31 @@
+package com.zipcodewilmington.froilansfarm.plants;
+
+import com.zipcodewilmington.froilansfarm.interfaces.Produce;
+
+public abstract class Crop implements Produce {
+
+ private boolean harvested;
+ private boolean fertilized;
+
+ public Crop() {
+ this.harvested = false;
+ this.fertilized = false;
+ }
+
+ public void fertilize() {
+ this.fertilized = true;
+ }
+
+ public void harvest() {
+ this.harvested = true;
+ }
+
+ public boolean isFertilized() {
+ return fertilized;
+ }
+
+ public boolean isHarvested() {
+ return harvested;
+ }
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/plants/TomatoPlant.java b/src/main/java/com/zipcodewilmington/froilansfarm/plants/TomatoPlant.java
new file mode 100644
index 00000000..660df38e
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/plants/TomatoPlant.java
@@ -0,0 +1,20 @@
+package com.zipcodewilmington.froilansfarm.plants;
+
+import com.zipcodewilmington.froilansfarm.food.Tomato;
+import com.zipcodewilmington.froilansfarm.interfaces.Edible;
+
+public class TomatoPlant extends Crop {
+
+ @Override
+ public Edible yield() {
+ if(isFertilized() && !isHarvested()) {
+ this.harvest();
+ return new Tomato();
+ }
+ else {
+ this.harvest();
+ return null;
+ }
+ }
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/Aircraft.java b/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/Aircraft.java
new file mode 100644
index 00000000..cf1e13af
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/Aircraft.java
@@ -0,0 +1,9 @@
+package com.zipcodewilmington.froilansfarm.vehicles;
+
+import com.zipcodewilmington.froilansfarm.interfaces.Rideable;
+
+public class Aircraft implements Rideable {
+
+ public void fly() {}
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/CropDuster.java b/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/CropDuster.java
new file mode 100644
index 00000000..94337f84
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/CropDuster.java
@@ -0,0 +1,14 @@
+package com.zipcodewilmington.froilansfarm.vehicles;
+
+import com.zipcodewilmington.froilansfarm.CropRow;
+import com.zipcodewilmington.froilansfarm.plants.Crop;
+
+public class CropDuster extends Aircraft {
+
+ public void fertilize(CropRow cropRow) {
+ for(Crop crop : cropRow.getCrops()) {
+ crop.fertilize();
+ }
+ }
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/FarmVehicle.java b/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/FarmVehicle.java
new file mode 100644
index 00000000..c7951f8b
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/FarmVehicle.java
@@ -0,0 +1,4 @@
+package com.zipcodewilmington.froilansfarm.vehicles;
+
+public class FarmVehicle extends Vehicle {
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/Tractor.java b/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/Tractor.java
new file mode 100644
index 00000000..4f46b5b3
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/Tractor.java
@@ -0,0 +1,12 @@
+package com.zipcodewilmington.froilansfarm.vehicles;
+
+import com.zipcodewilmington.froilansfarm.interfaces.Edible;
+import com.zipcodewilmington.froilansfarm.plants.Crop;
+
+public class Tractor extends FarmVehicle {
+
+ public Edible harvest(Crop crop) {
+ return crop.yield();
+ }
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/Vehicle.java b/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/Vehicle.java
new file mode 100644
index 00000000..56ae2b01
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/vehicles/Vehicle.java
@@ -0,0 +1,13 @@
+package com.zipcodewilmington.froilansfarm.vehicles;
+
+import com.zipcodewilmington.froilansfarm.interfaces.NoiseMaker;
+import com.zipcodewilmington.froilansfarm.interfaces.Rideable;
+
+public class Vehicle implements Rideable, NoiseMaker {
+
+ @Override
+ public void makeNoise(){
+ System.out.println("Vroom Vroom");
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/FarmerTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/FarmerTest.java
new file mode 100644
index 00000000..51a76da8
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/FarmerTest.java
@@ -0,0 +1,32 @@
+package com.zipcodewilmington.froilansfarm;
+
+import org.junit.jupiter.api.Test;
+
+class FarmerTest {
+
+ @Test
+ void plant() {
+ //TODO
+ }
+
+ @Test
+ void makeNoise() {
+ //TODO
+ }
+
+ @Test
+ void mount() {
+ //TODO
+ }
+
+ @Test
+ void dismount() {
+ //TODO
+ }
+
+ @Test
+ void eat() {
+ //TODO
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/animals/HorseTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/animals/HorseTest.java
new file mode 100644
index 00000000..102433e9
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/animals/HorseTest.java
@@ -0,0 +1,34 @@
+package com.zipcodewilmington.froilansfarm.animals;
+
+import com.zipcodewilmington.froilansfarm.food.Corn;
+import org.junit.jupiter.api.Test;
+
+class HorseTest {
+
+ @Test
+ void eat() {
+ //TODO
+ // GIVEN
+ Horse horse = new Horse();
+
+ // WHEN
+ horse.eat(new Corn());
+
+ // THEN
+ // ????
+ }
+
+ @Test
+ void makeNoise() {
+ //TODO
+ // GIVEN
+ Horse horse = new Horse();
+
+ // WHEN
+ horse.makeNoise();
+
+ // THEN
+ // ????
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/days/EveryMorningTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/days/EveryMorningTest.java
new file mode 100644
index 00000000..6b1a753e
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/days/EveryMorningTest.java
@@ -0,0 +1,40 @@
+package com.zipcodewilmington.froilansfarm.days;
+
+import com.zipcodewilmington.froilansfarm.Farmer;
+import com.zipcodewilmington.froilansfarm.animals.Horse;
+import com.zipcodewilmington.froilansfarm.buildings.Stable;
+import org.junit.jupiter.api.Test;
+
+class EveryMorningTest {
+
+
+ // * Every morning, `Froilan` and `Froilanda` begin their morning by
+ // * Riding each `Horse` in each `Stable`.
+ // * Feeding each `Horse` 3 ear of `Corn`.
+ // * For breakfast,
+ // * `Froilan` eats 1 `EarCorn`, 2 `Tomoato`, and 5 `Egg`.
+ // * `Froilanda` eats 2 `EarCorn`, 1 `Tomoato`, and 2 `Egg`.
+
+ @Test
+ void everyMorning() {
+ //GIVEN
+ Farmer farmer = new Farmer("Froilan");
+ Farmer farmer2 = new Farmer("Froilanda");
+
+ Horse horse1 = new Horse();
+ Horse horse2 = new Horse();
+
+ Stable stable1 = new Stable();
+ Stable stable2 = new Stable();
+
+ //put horse objects in stable
+ stable1.addHorse(horse1);
+ stable2.addHorse(horse2);
+
+ //add food after plant classes are created
+
+ //
+
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/days/MondayTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/days/MondayTest.java
new file mode 100644
index 00000000..6bf55785
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/days/MondayTest.java
@@ -0,0 +1,53 @@
+package com.zipcodewilmington.froilansfarm.days;
+
+import com.zipcodewilmington.froilansfarm.CropRow;
+import com.zipcodewilmington.froilansfarm.Farmer;
+import com.zipcodewilmington.froilansfarm.Field;
+import com.zipcodewilmington.froilansfarm.plants.Cornstalk;
+import com.zipcodewilmington.froilansfarm.plants.Crop;
+import com.zipcodewilmington.froilansfarm.plants.TomatoPlant;
+import com.zipcodewilmington.froilansfarm.vehicles.CropDuster;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+
+import static com.zipcodewilmington.froilansfarm.days.Monday.monday;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class MondayTest {
+
+ //On `Monday`, his sister, `Froilanda` uses the `CropDuster` to `fly` over the `Field` and `fertilize` each of the `CropRow`
+ @Test
+ void mondayTest() {
+ //GIVEN
+ Farmer froilanda = new Farmer("Froilanda");
+ CropDuster cropDuster = new CropDuster();
+ Crop corn1 = new Cornstalk();
+ Crop corn2 = new Cornstalk();
+ Crop corn3 = new Cornstalk();
+ Crop corn4 = new Cornstalk();
+ Crop tomato1 = new TomatoPlant();
+ Crop tomato2 = new TomatoPlant();
+ Crop tomato3 = new TomatoPlant();
+ Crop tomato4 = new TomatoPlant();
+ CropRow cropRow1 = new CropRow(Arrays.asList(corn1, corn2));
+ CropRow cropRow2 = new CropRow(Arrays.asList(corn3, corn4));
+ CropRow cropRow3 = new CropRow(Arrays.asList(tomato1, tomato2));
+ CropRow cropRow4 = new CropRow(Arrays.asList(tomato3, tomato4));
+ Field field = new Field(Arrays.asList(cropRow1, cropRow2, cropRow3, cropRow4));
+
+ //WHEN
+ monday(froilanda, cropDuster, field);
+
+ // Assertions
+ assertTrue(corn1.isFertilized());
+ assertTrue(corn2.isFertilized());
+ assertTrue(corn3.isFertilized());
+ assertTrue(corn4.isFertilized());
+ assertTrue(tomato1.isFertilized());
+ assertTrue(tomato2.isFertilized());
+ assertTrue(tomato3.isFertilized());
+ assertTrue(tomato4.isFertilized());
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/days/SundayTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/days/SundayTest.java
new file mode 100644
index 00000000..4148cd8e
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/days/SundayTest.java
@@ -0,0 +1,17 @@
+package com.zipcodewilmington.froilansfarm.days;
+
+import com.zipcodewilmington.froilansfarm.Farmer;
+import org.junit.jupiter.api.Test;
+
+public class SundayTest {
+
+ //`Sunday`, `Froilan` plants 3 different type of `Crop` in his first, second, and third `CropRow`.
+ @Test
+ void sundayTest(){
+ //TODO
+ Farmer farmer1 = new Farmer("Froilan");
+
+
+
+ }
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/days/TuesdayTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/days/TuesdayTest.java
new file mode 100644
index 00000000..03ad63dc
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/days/TuesdayTest.java
@@ -0,0 +1,75 @@
+package com.zipcodewilmington.froilansfarm.days;
+
+import com.zipcodewilmington.froilansfarm.CropRow;
+import com.zipcodewilmington.froilansfarm.Farmer;
+import com.zipcodewilmington.froilansfarm.Field;
+import com.zipcodewilmington.froilansfarm.food.Corn;
+import com.zipcodewilmington.froilansfarm.food.Tomato;
+import com.zipcodewilmington.froilansfarm.interfaces.Edible;
+import com.zipcodewilmington.froilansfarm.plants.Cornstalk;
+import com.zipcodewilmington.froilansfarm.plants.Crop;
+import com.zipcodewilmington.froilansfarm.plants.TomatoPlant;
+import com.zipcodewilmington.froilansfarm.vehicles.Tractor;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.List;
+
+import static com.zipcodewilmington.froilansfarm.days.Tuesday.tuesday;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class TuesdayTest {
+
+ @Test
+ void tuesdayTest() {
+ //GIVEN
+ Farmer farmer = new Farmer("Froilan");
+ Tractor tractor = new Tractor();
+ Crop corn1 = new Cornstalk();
+ corn1.fertilize();
+ Crop corn2 = new Cornstalk();
+ corn2.fertilize();
+ Crop corn3 = new Cornstalk();
+ corn3.fertilize();
+ Crop corn4 = new Cornstalk();
+ Crop tomato1 = new TomatoPlant();
+ Crop tomato2 = new TomatoPlant();
+ tomato2.fertilize();
+ Crop tomato3 = new TomatoPlant();
+ tomato3.fertilize();
+ Crop tomato4 = new TomatoPlant();
+ tomato4.fertilize();
+ CropRow cropRow1 = new CropRow(Arrays.asList(corn1, corn2));
+ CropRow cropRow2 = new CropRow(Arrays.asList(corn3, corn4));
+ CropRow cropRow3 = new CropRow(Arrays.asList(tomato1, tomato2));
+ CropRow cropRow4 = new CropRow(Arrays.asList(tomato3, tomato4));
+ Field field1 = new Field(Arrays.asList(cropRow1, cropRow2));
+ Field field2 = new Field(Arrays.asList(cropRow3, cropRow4));
+
+ //WHEN
+ List result1 = tuesday(farmer, tractor, field1);
+ List expected1 = List.of(new Corn(), new Corn(), new Corn());
+ List result2 = tuesday(farmer, tractor, field2);
+ List expected2 = List.of(new Tomato(), new Tomato(), new Tomato());
+
+ //THEN
+ assertTrue(corn1.isHarvested());
+ assertTrue(corn2.isHarvested());
+ assertTrue(corn3.isHarvested());
+ assertTrue(corn4.isHarvested());
+ assertTrue(tomato1.isHarvested());
+ assertTrue(tomato2.isHarvested());
+ assertTrue(tomato3.isHarvested());
+ assertTrue(tomato4.isHarvested());
+ assertEquals(result1.size(), expected1.size());
+ assertTrue(result1.get(0) instanceof Corn);
+ assertTrue(result1.get(1) instanceof Corn);
+ assertTrue(result1.get(2) instanceof Corn);
+ assertEquals(result2.size(), expected2.size());
+ assertTrue(result2.get(0) instanceof Tomato);
+ assertTrue(result2.get(1) instanceof Tomato);
+ assertTrue(result2.get(2) instanceof Tomato);
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/vehicles/AircraftTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/vehicles/AircraftTest.java
new file mode 100644
index 00000000..217ac499
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/vehicles/AircraftTest.java
@@ -0,0 +1,12 @@
+package com.zipcodewilmington.froilansfarm.vehicles;
+
+import org.junit.jupiter.api.Test;
+
+class AircraftTest {
+
+ @Test
+ void fly() {
+ //TODO
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/vehicles/CropDusterTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/vehicles/CropDusterTest.java
new file mode 100644
index 00000000..923470aa
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/vehicles/CropDusterTest.java
@@ -0,0 +1,12 @@
+package com.zipcodewilmington.froilansfarm.vehicles;
+
+import org.junit.jupiter.api.Test;
+
+class CropDusterTest {
+
+ @Test
+ void fertilize() {
+ //TODO
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/vehicles/TractorTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/vehicles/TractorTest.java
new file mode 100644
index 00000000..da267c39
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/vehicles/TractorTest.java
@@ -0,0 +1,12 @@
+package com.zipcodewilmington.froilansfarm.vehicles;
+
+import org.junit.jupiter.api.Test;
+
+class TractorTest {
+
+ @Test
+ void harvest() {
+ //TODO
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/vehicles/VehicleTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/vehicles/VehicleTest.java
new file mode 100644
index 00000000..fca85595
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/vehicles/VehicleTest.java
@@ -0,0 +1,12 @@
+package com.zipcodewilmington.froilansfarm.vehicles;
+
+import org.junit.jupiter.api.Test;
+
+class VehicleTest {
+
+ @Test
+ void makeNoise() {
+ //TODO
+ }
+
+}