From 82fdb03b0d29ad12942c6f5ee3940bfef2b1abe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Mei=C3=9Fner?= <florian.meissner@mailbox.org> Date: Wed, 12 Jul 2023 22:46:23 +0200 Subject: [PATCH] blah --- 05/gradle.properties | 3 +- .../softa/a05/collections/SimpleFilter.java | 2 +- .../softa/a05/collections/SimpleListImpl.java | 2 +- .../main/java/ohm/softa/a05/model/Flower.java | 46 +++++++++++++ .../main/java/ohm/softa/a05/model/Plant.java | 56 ++++++++++++++++ .../java/ohm/softa/a05/model/PlantBed.java | 47 +++++++++++++ .../java/ohm/softa/a05/model/PlantColor.java | 9 +++ .../main/java/ohm/softa/a05/model/Shrub.java | 25 +++++++ .../softa/a05/utils/PlantBetUtilities.java | 12 ++++ .../tests/collections/SimpleListTests.java | 9 +-- .../softa/a05/tests/models/FlowerTests.java | 48 ++++++++++++++ .../softa/a05/tests/models/PlantBedTests.java | 66 +++++++++++++++++++ .../softa/a05/tests/models/ShrubTests.java | 14 ++++ .../a05/utils/PlantBetUtilitiesTests.java | 29 ++++++++ playground/.idea/gradle.xml | 1 + 15 files changed, 359 insertions(+), 10 deletions(-) create mode 100644 05/src/main/java/ohm/softa/a05/model/Flower.java create mode 100644 05/src/main/java/ohm/softa/a05/model/Plant.java create mode 100644 05/src/main/java/ohm/softa/a05/model/PlantBed.java create mode 100644 05/src/main/java/ohm/softa/a05/model/PlantColor.java create mode 100644 05/src/main/java/ohm/softa/a05/model/Shrub.java create mode 100644 05/src/main/java/ohm/softa/a05/utils/PlantBetUtilities.java create mode 100644 05/src/test/java/ohm/softa/a05/tests/models/FlowerTests.java create mode 100644 05/src/test/java/ohm/softa/a05/tests/models/PlantBedTests.java create mode 100644 05/src/test/java/ohm/softa/a05/tests/models/ShrubTests.java create mode 100644 05/src/test/java/ohm/softa/a05/utils/PlantBetUtilitiesTests.java diff --git a/05/gradle.properties b/05/gradle.properties index c738102..098fbca 100644 --- a/05/gradle.properties +++ b/05/gradle.properties @@ -1,3 +1,4 @@ junitVersion=5.7.1 log4j2Version=2.14.1 -commons_lang3_version=3.12.0 \ No newline at end of file +commons_lang3_version=3.12.0 +org.gradle.java.home=/usr/lib/jvm/java-11-openjdk \ No newline at end of file diff --git a/05/src/main/java/ohm/softa/a05/collections/SimpleFilter.java b/05/src/main/java/ohm/softa/a05/collections/SimpleFilter.java index fb68e7e..458cc45 100644 --- a/05/src/main/java/ohm/softa/a05/collections/SimpleFilter.java +++ b/05/src/main/java/ohm/softa/a05/collections/SimpleFilter.java @@ -8,7 +8,7 @@ package ohm.softa.a05.collections; public interface SimpleFilter<T> { /** - * Determines if a item matches a condition + * Determines if an item matches a condition * * @param item Object to evaluate * @return true if the referenced object should be included. diff --git a/05/src/main/java/ohm/softa/a05/collections/SimpleListImpl.java b/05/src/main/java/ohm/softa/a05/collections/SimpleListImpl.java index cf1316d..62bd773 100644 --- a/05/src/main/java/ohm/softa/a05/collections/SimpleListImpl.java +++ b/05/src/main/java/ohm/softa/a05/collections/SimpleListImpl.java @@ -59,7 +59,7 @@ public class SimpleListImpl<T> implements SimpleList<T> { /** * Helper class which implements the Iterator<TE> interface - * Has to be non static because otherwise it could not access the head of the list + * Has to be non-static because otherwise it could not access the head of the list */ private class SimpleIterator implements Iterator<T> { diff --git a/05/src/main/java/ohm/softa/a05/model/Flower.java b/05/src/main/java/ohm/softa/a05/model/Flower.java new file mode 100644 index 0000000..8fc7a92 --- /dev/null +++ b/05/src/main/java/ohm/softa/a05/model/Flower.java @@ -0,0 +1,46 @@ +package ohm.softa.a05.model; + +import java.util.Objects; + +public class Flower extends Plant { + private final PlantColor color; + public Flower(double height, String family, String name, PlantColor color) { + super(height, family, name); + if (color == PlantColor.GREEN) throw new IllegalArgumentException(); + this.color = color; + } + + // we don't care about the rest + public Flower(PlantColor color) { + this(1.71, "foo", "bar", color); + } + + @Override + public PlantColor getColor() { + return color; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + Flower flower = (Flower) o; + return color == flower.color; + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), color); + } + + @Override + public String toString() { + return "Flower{" + + "color=" + color + + ", height=" + height + + ", family='" + family + '\'' + + ", name='" + name + '\'' + + '}'; + } +} diff --git a/05/src/main/java/ohm/softa/a05/model/Plant.java b/05/src/main/java/ohm/softa/a05/model/Plant.java new file mode 100644 index 0000000..f3501b2 --- /dev/null +++ b/05/src/main/java/ohm/softa/a05/model/Plant.java @@ -0,0 +1,56 @@ +package ohm.softa.a05.model; + +import java.util.Objects; + +abstract public class Plant implements Comparable<Plant> { + public Plant(double height, String family, String name) { + this.height = height; + this.family = family; + this.name = name; + } + + public double getHeight() { + return height; + } + + public String getFamily() { + return family; + } + + public String getName() { + return name; + } + + abstract public PlantColor getColor(); + + final protected double height; + final protected String family; + final protected String name; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Plant plant = (Plant) o; + return Double.compare(plant.height, height) == 0 && Objects.equals(family, plant.family) && Objects.equals(name, plant.name); + } + + @Override + public int hashCode() { + return Objects.hash(height, family, name); + } + + @Override + public int compareTo(Plant plant) { + return Double.compare(this.getHeight(), plant.getHeight()); + } + + @Override + public String toString() { + return "Plant{" + + "height=" + height + + ", family='" + family + '\'' + + ", name='" + name + '\'' + + '}'; + } +} diff --git a/05/src/main/java/ohm/softa/a05/model/PlantBed.java b/05/src/main/java/ohm/softa/a05/model/PlantBed.java new file mode 100644 index 0000000..8c59640 --- /dev/null +++ b/05/src/main/java/ohm/softa/a05/model/PlantBed.java @@ -0,0 +1,47 @@ +package ohm.softa.a05.model; + +import ohm.softa.a05.collections.SimpleList; +import ohm.softa.a05.collections.SimpleListImpl; + +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +public class PlantBed<T extends Plant> { + + private SimpleList<T> plants; + + public PlantBed() { + plants = new SimpleListImpl<>(); + } + + public PlantBed(SimpleList<T> list) { + plants = list; + } + + public void add(T plant) { + plants.add(plant); + } + + public void remove(T plant) { + this.plants = this.plants + .filter(p -> p != plant); + } + + public int size() { + return plants.size(); + } + + public SimpleList<T> getPlantsByColor(PlantColor color) { + return plants.filter(p -> p.getColor() == color); + } + + @Override + public String toString() { + return "PlantBed{" + + "size=" + size() + + ", plants=[" + StreamSupport + .stream(plants.map(Plant::toString).spliterator(), true) + .collect(Collectors.joining(", ")) + + "]}"; + } +} diff --git a/05/src/main/java/ohm/softa/a05/model/PlantColor.java b/05/src/main/java/ohm/softa/a05/model/PlantColor.java new file mode 100644 index 0000000..edd254a --- /dev/null +++ b/05/src/main/java/ohm/softa/a05/model/PlantColor.java @@ -0,0 +1,9 @@ +package ohm.softa.a05.model; + +public enum PlantColor { + GREEN, + YELLOW, + RED, + BLUE, + ORANGE +} diff --git a/05/src/main/java/ohm/softa/a05/model/Shrub.java b/05/src/main/java/ohm/softa/a05/model/Shrub.java new file mode 100644 index 0000000..0217362 --- /dev/null +++ b/05/src/main/java/ohm/softa/a05/model/Shrub.java @@ -0,0 +1,25 @@ +package ohm.softa.a05.model; + +public class Shrub extends Plant { + @SuppressWarnings({"NeverUsed", "unused"}) + public Shrub(double height, String family, String name) { + super(height, family, name); + } + + public Shrub() { + super(2.83, "head", "tail"); + } + @Override + public PlantColor getColor() { + return PlantColor.GREEN; + } + + @Override + public String toString() { + return "Shrub{" + + "height=" + height + + ", family='" + family + '\'' + + ", name='" + name + '\'' + + '}'; + } +} diff --git a/05/src/main/java/ohm/softa/a05/utils/PlantBetUtilities.java b/05/src/main/java/ohm/softa/a05/utils/PlantBetUtilities.java new file mode 100644 index 0000000..133dd2e --- /dev/null +++ b/05/src/main/java/ohm/softa/a05/utils/PlantBetUtilities.java @@ -0,0 +1,12 @@ +package ohm.softa.a05.utils; + +import ohm.softa.a05.model.Plant; +import ohm.softa.a05.model.PlantBed; +import ohm.softa.a05.model.PlantColor; + +public abstract class PlantBetUtilities { + + public static <T extends Plant> void repot(PlantBed<T> takenFrom, PlantColor color, PlantBed<? super T> putInto) { + takenFrom.getPlantsByColor(color).forEach(p -> {takenFrom.remove(p); putInto.add(p);}); + } +} diff --git a/05/src/test/java/ohm/softa/a05/tests/collections/SimpleListTests.java b/05/src/test/java/ohm/softa/a05/tests/collections/SimpleListTests.java index a25c5b3..9126f62 100644 --- a/05/src/test/java/ohm/softa/a05/tests/collections/SimpleListTests.java +++ b/05/src/test/java/ohm/softa/a05/tests/collections/SimpleListTests.java @@ -53,12 +53,7 @@ class SimpleListTests { @Test void testFilterAnonymousClass(){ logger.info("Testing the filter possibilities by filtering for all elements greater 2"); - SimpleList<Integer> result = testList.filter(new SimpleFilter<Integer>() { - @Override - public boolean include(Integer item) { - return item > 2; - } - }); + SimpleList<Integer> result = testList.filter(item -> item > 2); for(Integer i : result){ assertTrue(i > 2); @@ -70,7 +65,7 @@ class SimpleListTests { logger.info("Testing the filter possibilities by filtering for all elements which are dividable by 2"); SimpleList<Integer> result = testList.filter(o -> o % 2 == 0); for(Integer i : result){ - assertTrue(i % 2 == 0); + assertEquals(i % 2, 0); } } diff --git a/05/src/test/java/ohm/softa/a05/tests/models/FlowerTests.java b/05/src/test/java/ohm/softa/a05/tests/models/FlowerTests.java new file mode 100644 index 0000000..ceb3132 --- /dev/null +++ b/05/src/test/java/ohm/softa/a05/tests/models/FlowerTests.java @@ -0,0 +1,48 @@ +package ohm.softa.a05.tests.models; + +import ohm.softa.a05.model.Flower; +import ohm.softa.a05.model.PlantColor; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.util.Random; +import java.util.stream.Collectors; + +import static org.junit.jupiter.api.Assertions.*; + +public class FlowerTests { + + private static Random rnd; + + @BeforeAll + static void init() { + rnd = new Random(); + } + + @Test + void testColor() { + assertEquals(new Flower(PlantColor.BLUE), new Flower(PlantColor.BLUE)); + assertNotEquals(new Flower(PlantColor.YELLOW), new Flower(PlantColor.ORANGE)); + + assertDoesNotThrow(() -> new Flower(PlantColor.RED)); + assertThrows(Throwable.class, () -> new Flower(PlantColor.GREEN)); + } + + @Test + void testCompare() { + var values = + rnd.doubles() + .limit(10) + .mapToObj((d) -> + new Flower(d, "foo", "bar", PlantColor.RED)).collect(Collectors.toList()); + + values.forEach((left) -> + values.forEach((right) -> + assertEquals(left.compareTo(right), + Double.compare( + left.getHeight(), + right.getHeight())))); + + + } +} diff --git a/05/src/test/java/ohm/softa/a05/tests/models/PlantBedTests.java b/05/src/test/java/ohm/softa/a05/tests/models/PlantBedTests.java new file mode 100644 index 0000000..429b083 --- /dev/null +++ b/05/src/test/java/ohm/softa/a05/tests/models/PlantBedTests.java @@ -0,0 +1,66 @@ +package ohm.softa.a05.tests.models; + +import ohm.softa.a05.model.*; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class PlantBedTests { + private PlantBed<Plant> empty_bed, full_bed; + private Plant p1, p2, p3; + + @BeforeEach + void setUp() { + empty_bed = new PlantBed<>(); + full_bed = new PlantBed<>(); + p1 = new Flower(PlantColor.RED); + p2 = new Shrub(); + p3 = new Flower(3.78, "hello", "world", PlantColor.BLUE); + full_bed.add(p1); + full_bed.add(p2); + full_bed.add(p3); + } + + @SuppressWarnings("EmptyMethod") + @AfterEach + void tearDown() { + } + @Test + void addRemoveSize() { + assertEquals(empty_bed.size(), 0); + empty_bed.add(p1); + assertEquals(empty_bed.size(), 1); + empty_bed.add(p2); + assertEquals(empty_bed.size(), 2); + empty_bed.add(p3); + empty_bed.add(p1); + assertEquals(empty_bed.size(), 4); + empty_bed.remove(p2); + assertEquals(empty_bed.size(), 3); + empty_bed.remove(p1); + assertEquals(empty_bed.size(), 1); + empty_bed.remove(p3); + assertEquals(empty_bed.size(), 0); + } + @Test + void getPlantsByColor() { + assertEquals(full_bed.size(), 3); + var filtered_bed = new PlantBed<>( + full_bed + .getPlantsByColor(PlantColor.BLUE) + .filter(p -> p.getColor() == PlantColor.BLUE)); + assertEquals(filtered_bed.size(), 1); + assertEquals(filtered_bed.toString(), "PlantBed{size=1, " + + "plants=[Flower{color=BLUE, " + + "height=3.78, " + + "family='hello', " + + "name='world'}]}"); + } + + @Test + void _toString() { + assertEquals(full_bed.toString(), "PlantBed{size=3, plants=[Flower{color=RED, height=1.71, family='foo', name='bar'}, Shrub{height=2.83, family='head', name='tail'}, Flower{color=BLUE, height=3.78, family='hello', name='world'}]}"); + } +} \ No newline at end of file diff --git a/05/src/test/java/ohm/softa/a05/tests/models/ShrubTests.java b/05/src/test/java/ohm/softa/a05/tests/models/ShrubTests.java new file mode 100644 index 0000000..9015c74 --- /dev/null +++ b/05/src/test/java/ohm/softa/a05/tests/models/ShrubTests.java @@ -0,0 +1,14 @@ +package ohm.softa.a05.tests.models; + +import ohm.softa.a05.model.PlantColor; +import ohm.softa.a05.model.Shrub; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ShrubTests { + @Test + void testColor() { + assertEquals(new Shrub().getColor(), PlantColor.GREEN); + } +} diff --git a/05/src/test/java/ohm/softa/a05/utils/PlantBetUtilitiesTests.java b/05/src/test/java/ohm/softa/a05/utils/PlantBetUtilitiesTests.java new file mode 100644 index 0000000..c382221 --- /dev/null +++ b/05/src/test/java/ohm/softa/a05/utils/PlantBetUtilitiesTests.java @@ -0,0 +1,29 @@ +package ohm.softa.a05.utils; + +import ohm.softa.a05.model.*; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class PlantBetUtilitiesTests { + + @Test + void repot() { + var bet = new PlantBed<>(); + bet.add(new Flower(PlantColor.YELLOW)); + bet.add(new Shrub(0.9, "gooooooooood", "morning vietnam")); + bet.add(new Shrub()); + assertEquals(bet.size(), 3); + + var bet2 = new PlantBed<>(); + assertEquals(bet2.size(), 0); + + PlantBetUtilities.repot(bet, PlantColor.GREEN, bet2); + assertEquals(bet.size(), 1); + assertEquals(bet2.size(), 2); + + assertEquals(bet.toString(), "PlantBed{size=1, plants=[Flower{color=YELLOW, height=1.71, family='foo', name='bar'}]}"); + assertEquals(bet2.toString(), "PlantBed{size=2, plants=[Shrub{height=0.9, family='gooooooooood', name='morning vietnam'}, Shrub{height=2.83, family='head', name='tail'}]}"); + + } +} \ No newline at end of file diff --git a/playground/.idea/gradle.xml b/playground/.idea/gradle.xml index 14746e7..2a65317 100644 --- a/playground/.idea/gradle.xml +++ b/playground/.idea/gradle.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> + <component name="GradleMigrationSettings" migrationVersion="1" /> <component name="GradleSettings"> <option name="linkedExternalProjectsSettings"> <GradleProjectSettings> -- GitLab