diff --git a/.github/linters/checkstyle.xml b/.github/linters/checkstyle.xml index e26ff27b..6b7e49b4 100644 --- a/.github/linters/checkstyle.xml +++ b/.github/linters/checkstyle.xml @@ -74,7 +74,10 @@ - + + + + @@ -303,4 +306,4 @@ - \ No newline at end of file + diff --git a/.github/workflows/checkstyle.xml b/.github/workflows/checkstyle.xml new file mode 100644 index 00000000..6b7e49b4 --- /dev/null +++ b/.github/workflows/checkstyle.xml @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml new file mode 100644 index 00000000..7892b8c2 --- /dev/null +++ b/.github/workflows/linter.yml @@ -0,0 +1,51 @@ +--- +################################# +################################# +## Super Linter GitHub Actions ## +################################# +################################# +name: Lint Code Base + +############################# +# Start the job on all push # +############################# +on: + push: + branches-ignore: [master, main] + # Remove the line above to run when pushing to master + pull_request: + branches: [master, main] + +############### +# Set the Job # +############### +jobs: + build: + # Name the Job + name: Lint Code Base + # Set the agent to run on + runs-on: ubuntu-latest + + ################## + # Load all steps # + ################## + steps: + ########################## + # Checkout the code base # + ########################## + - name: Checkout Code + uses: actions/checkout@v3 + with: + # Full git history is needed to get a proper + # list of changed files within `super-linter` + fetch-depth: 0 + + ################################ + # Run Linter against code base # + ################################ + - name: Lint Code Base + uses: github/super-linter@v4 + env: + VALIDATE_ALL_CODEBASE: false + DEFAULT_BRANCH: master + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md new file mode 100644 index 00000000..8ae564c3 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# FlowerStore +Rightfully acquiered from @dobosevych \ +TO RUN THE STORE PROPERLY UNCOMMENT CODE FOR FILLING THE INVENTORY + +## Best-selling flowers. Ever diff --git a/src/main/java/flower/store/Flower.java b/src/main/java/flower/store/Flower.java deleted file mode 100644 index 206ef870..00000000 --- a/src/main/java/flower/store/Flower.java +++ /dev/null @@ -1,21 +0,0 @@ -package flower.store; - -import lombok.Getter; -import lombok.Setter; - - - -@Setter -public class Flower { - @Getter - private double sepalLength; - private FlowerColor color; - @Getter - private double price; - @Getter - private FlowerType flowerType; - - public String getColor() { - return color.toString(); - } -} diff --git a/src/main/java/flower/store/FlowerColor.java b/src/main/java/flower/store/FlowerColor.java deleted file mode 100644 index 4a6221f7..00000000 --- a/src/main/java/flower/store/FlowerColor.java +++ /dev/null @@ -1,18 +0,0 @@ -package flower.store; - -public enum FlowerColor { - /** - * Flower colors. - */ - RED("#FF0000"), BLUE("#0000FF"); - private final String stringRepresentation; - - FlowerColor(String stringRepresentation) { - this.stringRepresentation = stringRepresentation; - } - - @Override - public String toString() { - return stringRepresentation; - } -} diff --git a/src/main/java/flower/store/FlowerInventory.java b/src/main/java/flower/store/FlowerInventory.java new file mode 100644 index 00000000..7a5a9872 --- /dev/null +++ b/src/main/java/flower/store/FlowerInventory.java @@ -0,0 +1,56 @@ +package flower.store; + +import flower.store.flower.Flower; +import flower.store.flower.FlowerSpec; + +import java.util.ArrayList; + +import java.util.List; + +/** + * flower inventory. here we store our flowers + */ +public class FlowerInventory { + private final List inventory = new ArrayList<>(); + + + /** + * constructor for flower inventory + * currently has only three flowers + */ + public FlowerInventory() { + + + + + } + + /** + * adds flowers to inventory + * @param flower flower user wants to add + */ + public void addFlower(Flower flower) { + inventory.add(flower); + } + /** + * search tool to find flowers in the inventory + * @param searchSpec - is the specification for search + * @return a list of flowers which fit the specification + * */ + public List search(FlowerSpec searchSpec) { + + List matchingFlowers = new ArrayList<>(); + for (Flower flower : inventory) { + FlowerSpec flowerSpec = flower.getSpec(); + if (searchSpec.getColor() != flowerSpec.getColor()) { + continue; + } + if (searchSpec.getSepalLength() != flowerSpec.getSepalLength()) { + continue; + } + matchingFlowers.add(flower); + } + return matchingFlowers; + } +} + diff --git a/src/main/java/flower/store/FlowerPack.java b/src/main/java/flower/store/FlowerPack.java deleted file mode 100644 index 44c99495..00000000 --- a/src/main/java/flower/store/FlowerPack.java +++ /dev/null @@ -1,6 +0,0 @@ -package flower.store; - -public class FlowerPack { - private Flower flower; - private int quantity; -} diff --git a/src/main/java/flower/store/FlowerStore.java b/src/main/java/flower/store/FlowerStore.java new file mode 100644 index 00000000..b1c54b6c --- /dev/null +++ b/src/main/java/flower/store/FlowerStore.java @@ -0,0 +1,62 @@ + +package flower.store; + +import flower.store.flower.Flower; +import flower.store.flower.FlowerSpec; + +import java.util.List; +import java.util.Scanner; + +/** + * flower store class + * come and buy some! + */ + +public class FlowerStore { + private static final + FlowerInventory FLOWER_INVENTORY = new FlowerInventory(); + + /** + * constructor + */ + private FlowerStore() { } + + + /** + * the main method + * @param args arguments + */ + + public static void main(String[] args) { +// !!!!!!UNCOMMENT TO HAVE A WORKING INVENTORY!!!!!!! +// Flower redFlower = new Flower(10.0, FlowerColor.RED, 0.5); +// Flower blueFlower = new Flower(30.0, FlowerColor.BLUE, 2.0); +// Flower whiteFlower = new Flower(100.0, FlowerColor.WHITE, 10.0); +// FLOWER_INVENTORY.addFlower(redFlower); +// FLOWER_INVENTORY.addFlower(blueFlower); +// FLOWER_INVENTORY.addFlower(whiteFlower); + + Scanner sc = new Scanner(System.in); + System.out.print("Please, enter the color: "); + String color = sc.nextLine(); + System.out.print("Please, enter the sepalLength: "); + double sepalLength = sc.nextDouble(); + List matchingFlowers = search(color, sepalLength); + System.out.print("We found: " + + matchingFlowers.toString()); + } + + /** + * searches for flowers in the inventory + * @param color the color of the flower + * @param sepalLength the sepalLength of the flower + * @return a list of all flowers + */ + public static List search(final String color, + final double sepalLength) { + FlowerSpec searchSpec = new FlowerSpec(); + searchSpec.setSepalLength(sepalLength); + searchSpec.setColor(color); + return FLOWER_INVENTORY.search(searchSpec); + } +} diff --git a/src/main/java/flower/store/FlowerType.java b/src/main/java/flower/store/FlowerType.java deleted file mode 100644 index ac22e2fd..00000000 --- a/src/main/java/flower/store/FlowerType.java +++ /dev/null @@ -1,5 +0,0 @@ -package flower.store; - -public enum FlowerType { - CHAMOMILE, ROSE, TULIP; -} diff --git a/src/main/java/flower/store/bucket/FlowerBucket.java b/src/main/java/flower/store/bucket/FlowerBucket.java new file mode 100644 index 00000000..14e69348 --- /dev/null +++ b/src/main/java/flower/store/bucket/FlowerBucket.java @@ -0,0 +1,47 @@ + +package flower.store.bucket; + +import flower.store.flowerpack.FlowerPack; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; +/** + * bucket + * */ + +public class FlowerBucket { + @Getter + private int price = 0; + + private final List flowerPacks = new ArrayList<>(); + + /** + * constructor + */ + public FlowerBucket() { } + + /** + * adds flowerpacks to bucket + * @param fp flower pack + */ + public void add(final FlowerPack fp) { + flowerPacks.add(fp); + price += fp.getPrice(); + } + + /** + * + * @return string representation of flower bucket + */ + @Override + public String toString() { + String res = ""; + for (FlowerPack fp + : flowerPacks) { + res + = res.concat(fp.toString()); + } + return res; + } +} diff --git a/src/main/java/flower/store/bucket/package-info.java b/src/main/java/flower/store/bucket/package-info.java new file mode 100644 index 00000000..4155332b --- /dev/null +++ b/src/main/java/flower/store/bucket/package-info.java @@ -0,0 +1,4 @@ +/** + * bucket + * */ +package flower.store.bucket; \ No newline at end of file diff --git a/src/main/java/flower/store/flower/Flower.java b/src/main/java/flower/store/flower/Flower.java new file mode 100644 index 00000000..e2a8cdf4 --- /dev/null +++ b/src/main/java/flower/store/flower/Flower.java @@ -0,0 +1,74 @@ +package flower.store.flower; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * Flowers. We sell them + */ + +@Getter @Setter @ToString +public class Flower { + private final FlowerSpec spec = new FlowerSpec(); + + private double price; + + private FlowerType flowerType; + + /** + * constructor + */ + public Flower() { } + + /** + * constructor with parameters + * @param price price + * @param color color + * @param sepalLength sepalLength + */ + public Flower(double price, + FlowerColor color, + double sepalLength) { + + setPrice(price); + setColor(color); + setSepalLength(sepalLength); + } + + /** + * getter for sepalLength + * @return sepalLength + */ + public double getSepalLength() { + return spec.getSepalLength(); + } + + /** + * setter for sepalLength + * @param sepalLength sepalLength + */ + public void setSepalLength(double sepalLength) { + spec.setSepalLength(sepalLength); + } + + /** + * setter for color + * @param color flower color + */ + + public void setColor(FlowerColor color) { + spec.setColor(color); + } + + /** + * getter for color + * @return flower color + */ + public String getColor() { + return spec.getColor().toString(); + } + + + +} diff --git a/src/main/java/flower/store/flower/FlowerColor.java b/src/main/java/flower/store/flower/FlowerColor.java new file mode 100644 index 00000000..4724aad0 --- /dev/null +++ b/src/main/java/flower/store/flower/FlowerColor.java @@ -0,0 +1,38 @@ +package flower.store.flower; + +/** + * all possible flower colors + */ +public enum FlowerColor { + /** + * red + */ + RED("red"), //("#FF0000"), + /** + * blue + */ + + BLUE("blue"), //("#0000FF"), + /** + * white + */ + WHITE("white"); //("#000000"); + private final String stringRepresentation; + + /** + * sets all enum values + * @param stringRepresentation string representation of the color + */ + FlowerColor(String stringRepresentation) { + this.stringRepresentation = stringRepresentation; + } + + /** + * to string + * @return stringRepresentation of the color + */ + @Override + public String toString() { + return stringRepresentation; + } +} diff --git a/src/main/java/flower/store/flower/FlowerFactory.java b/src/main/java/flower/store/flower/FlowerFactory.java new file mode 100644 index 00000000..c2e89c49 --- /dev/null +++ b/src/main/java/flower/store/flower/FlowerFactory.java @@ -0,0 +1,27 @@ +package flower.store.flower; + +/** + * flower factory + */ +public class FlowerFactory { + /** + * constructor + */ + public FlowerFactory() { } + /** + * creates flowers + * @param price price of the flower + * @param color color of the flower + * @param sepalLength sepalLength of the flower + * @return a new flower + */ + public static Flower createFlower(final double price, + final FlowerColor color, + final double sepalLength) { + Flower flower = new Flower(); + flower.setPrice(price); + flower.setColor(color); + flower.setSepalLength(sepalLength); + return flower; + } +} diff --git a/src/main/java/flower/store/flower/FlowerSpec.java b/src/main/java/flower/store/flower/FlowerSpec.java new file mode 100644 index 00000000..30c074a0 --- /dev/null +++ b/src/main/java/flower/store/flower/FlowerSpec.java @@ -0,0 +1,45 @@ +package flower.store.flower; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * stores general data about a flower + */ + +@Getter @Setter @ToString +public class FlowerSpec { + private FlowerColor color; + private double sepalLength; + /** + * constructor + */ + public FlowerSpec() { } + /** + * handles input + * @param clr color of the flower + */ + public void setColor(FlowerColor clr) { + color = clr; + } + + /** + * handles input + * @param clr color of the flower + */ + public void setColor(String clr) { + if (clr.equalsIgnoreCase("red")) { + color = FlowerColor.RED; + } + else if (clr.equalsIgnoreCase("blue")) { + color = FlowerColor.BLUE; + } + else if (clr.equalsIgnoreCase("white")) { + color = FlowerColor.WHITE; + } + } + + + +} diff --git a/src/main/java/flower/store/flower/FlowerType.java b/src/main/java/flower/store/flower/FlowerType.java new file mode 100644 index 00000000..c74bcc88 --- /dev/null +++ b/src/main/java/flower/store/flower/FlowerType.java @@ -0,0 +1,37 @@ +package flower.store.flower; + +/** + * lists all possible flowers + */ +public enum FlowerType { + /** + * chamomile + */ + CHAMOMILE("chamomile"), + /** + * rose + */ + ROSE("rose"), + /** + * tulip + */ + TULIP("tulip"); + private final String stringRepresentation; + + /** + * sets all enum values + * @param stringRepresentation string representation of the type + */ + FlowerType(String stringRepresentation) { + this.stringRepresentation = stringRepresentation; + } + + /** + * to string + * @return stringRepresentation of the type + */ + @Override + public String toString() { + return stringRepresentation; + } +} diff --git a/src/main/java/flower/store/flower/package-info.java b/src/main/java/flower/store/flower/package-info.java new file mode 100644 index 00000000..27f1a4b5 --- /dev/null +++ b/src/main/java/flower/store/flower/package-info.java @@ -0,0 +1,4 @@ +/** + * all utilities for Flower + * */ +package flower.store.flower; \ No newline at end of file diff --git a/src/main/java/flower/store/flowerpack/FlowerPack.java b/src/main/java/flower/store/flowerpack/FlowerPack.java new file mode 100644 index 00000000..e3625ab4 --- /dev/null +++ b/src/main/java/flower/store/flowerpack/FlowerPack.java @@ -0,0 +1,37 @@ +package flower.store.flowerpack; + +import flower.store.flower.Flower; +import lombok.Getter; +import lombok.Setter; + +/** + * flower pack + */ +@Getter @Setter +public class FlowerPack { + + private final Flower flower; + private int quantity; + /** + * flowerpack constructor + * @param flower flower type the user wants to make a pack of + * @param quantity amount of the flowers in a pack + * @param is any subtype of Flower + */ + public FlowerPack(final T flower, + final int quantity) { + this.flower = flower; + this.quantity = quantity; + } + + /** + * get price for all flowers in a pack + * @return the price of this amount of flowers + */ + + public double getPrice() { + return flower.getPrice() * quantity; + } + + +} diff --git a/src/main/java/flower/store/flowerpack/FlowerPackInventory.java b/src/main/java/flower/store/flowerpack/FlowerPackInventory.java new file mode 100644 index 00000000..72da0e8e --- /dev/null +++ b/src/main/java/flower/store/flowerpack/FlowerPackInventory.java @@ -0,0 +1,41 @@ +package flower.store.flowerpack; + +import flower.store.flower.Flower; + +/** + * Is used to group and manage flower packs + */ +public class FlowerPackInventory extends FlowerPack { + /** + * flowerpack inventory constructor + * @param flower flower type the user wants to make a pack of + * @param quantity amount of the flowers in a pack + * @param is any subtype of Flower + */ + public FlowerPackInventory(T flower, int quantity) { + super(flower, quantity); + } + + /** + * takes flowers from flower pack + * @param newPackSize the amount of flowers user wants + * to take away from the inventory + * @return a new flower pack inventory with given amount of flowers + */ + public FlowerPack splitFLowerPack(int newPackSize) { + if (newPackSize <= getQuantity()) { + setQuantity(getQuantity() - newPackSize); + return new FlowerPack(getFlower(), newPackSize); + } + return null; + + } + + /** + * adds flowers to pack + * @param amount amount of flowers user wants to add to inventory + */ + public void addFLowers(int amount) { + setQuantity(getQuantity() + amount); + } +} diff --git a/src/main/java/flower/store/flowerpack/package-info.java b/src/main/java/flower/store/flowerpack/package-info.java new file mode 100644 index 00000000..5ea5e25c --- /dev/null +++ b/src/main/java/flower/store/flowerpack/package-info.java @@ -0,0 +1,4 @@ +/** + * flower pack stuff + */ +package flower.store.flowerpack; \ No newline at end of file diff --git a/src/main/java/flower/store/flowers/Chamomile.java b/src/main/java/flower/store/flowers/Chamomile.java new file mode 100644 index 00000000..d35f4a40 --- /dev/null +++ b/src/main/java/flower/store/flowers/Chamomile.java @@ -0,0 +1,19 @@ +package flower.store.flowers; + +import flower.store.flower.Flower; +import flower.store.flower.FlowerColor; +import flower.store.flower.FlowerType; + +/** + * the chamomile + */ +public class Chamomile extends Flower { + /** + * creates a white chamomile + */ + public Chamomile() { + super(); + setColor(FlowerColor.WHITE); + setFlowerType(FlowerType.CHAMOMILE); + } +} diff --git a/src/main/java/flower/store/flowers/Rose.java b/src/main/java/flower/store/flowers/Rose.java new file mode 100644 index 00000000..b06bbd1f --- /dev/null +++ b/src/main/java/flower/store/flowers/Rose.java @@ -0,0 +1,19 @@ +package flower.store.flowers; + +import flower.store.flower.Flower; +import flower.store.flower.FlowerColor; +import flower.store.flower.FlowerType; + +/** + * the rose flower + */ +public class Rose extends Flower { + /** + * creates a red rose + */ + public Rose() { + super(); + setColor(FlowerColor.RED); + setFlowerType(FlowerType.ROSE); + } +} diff --git a/src/main/java/flower/store/flowers/Tulip.java b/src/main/java/flower/store/flowers/Tulip.java new file mode 100644 index 00000000..e6c9712a --- /dev/null +++ b/src/main/java/flower/store/flowers/Tulip.java @@ -0,0 +1,19 @@ +package flower.store.flowers; + +import flower.store.flower.Flower; +import flower.store.flower.FlowerColor; +import flower.store.flower.FlowerType; + +/** + * A red pretty tulip + */ +public class Tulip extends Flower { + /** + * creates a beautiful tulip + */ + public Tulip() { + super(); + setColor(FlowerColor.RED); + setFlowerType(FlowerType.TULIP); + } +} diff --git a/src/main/java/flower/store/flowers/package-info.java b/src/main/java/flower/store/flowers/package-info.java new file mode 100644 index 00000000..1d6c6c38 --- /dev/null +++ b/src/main/java/flower/store/flowers/package-info.java @@ -0,0 +1,4 @@ +/** + * custom flowers + */ +package flower.store.flowers; \ No newline at end of file diff --git a/src/main/java/flower/store/package-info.java b/src/main/java/flower/store/package-info.java new file mode 100644 index 00000000..6ffea5e4 --- /dev/null +++ b/src/main/java/flower/store/package-info.java @@ -0,0 +1,3 @@ +/** + * the flower store*/ +package flower.store; \ No newline at end of file diff --git a/src/test/java/flower/store/FlowerBucketTest.java b/src/test/java/flower/store/FlowerBucketTest.java new file mode 100644 index 00000000..432a7beb --- /dev/null +++ b/src/test/java/flower/store/FlowerBucketTest.java @@ -0,0 +1,47 @@ +package flower.store; + +import flower.store.bucket.FlowerBucket; +import flower.store.flower.Flower; +import flower.store.flowerpack.FlowerPack; +import flower.store.flowers.Rose; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Assertions; + +import java.util.Random; + +/** + * tests for flowerbucket + * @hidden + */ + +public class FlowerBucketTest { + private static final Random RANDOM_GENERATOR = new Random(); + private static final int MAX_QUANTITY = 1000; + private static final int MAX_PRICE = 100; + + private FlowerBucket flowerBucket; + + /** + * setup + */ + @BeforeEach + public void init() { + flowerBucket = new FlowerBucket(); + } + + /** + * test price + * + */ + @Test + public void testPrice() { + int price = RANDOM_GENERATOR.nextInt(MAX_PRICE); + int quantity = RANDOM_GENERATOR.nextInt(MAX_QUANTITY); + Flower flower = new Rose(); + flower.setPrice(price); + FlowerPack flowerPack = new FlowerPack(flower, quantity); + flowerBucket.add(flowerPack); + Assertions.assertEquals(price * quantity, flowerBucket.getPrice()); + } +} diff --git a/src/test/java/flower/store/FlowerPackTest.java b/src/test/java/flower/store/FlowerPackTest.java new file mode 100644 index 00000000..93dfd4bb --- /dev/null +++ b/src/test/java/flower/store/FlowerPackTest.java @@ -0,0 +1,45 @@ +package flower.store; + +import flower.store.flower.Flower; +import flower.store.flowerpack.FlowerPack; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Random; + +/** + * test for flowers + * @hidden + */ +public class FlowerPackTest { + private static final Random RANDOM_GENERATOR = new Random(); + private static final int MAX_PRICE = 100; + private static final int MAX_COUNT = 100; + + private Flower flower; + + /** + * setup + */ + @BeforeEach + public void init() { + flower = new Flower(); + } + + /** + * test price + */ + @Test + public void testPrice() { + int price = RANDOM_GENERATOR.nextInt(MAX_PRICE); + int count = RANDOM_GENERATOR.nextInt(MAX_COUNT); + flower.setPrice(price); + FlowerPack pack = new FlowerPack(flower, count); + + + Assertions.assertEquals(price * count, pack.getPrice()); + } + + +} \ No newline at end of file diff --git a/src/test/java/flower/store/FlowerTest.java b/src/test/java/flower/store/FlowerTest.java index 79151913..0bfc6a5f 100644 --- a/src/test/java/flower/store/FlowerTest.java +++ b/src/test/java/flower/store/FlowerTest.java @@ -1,5 +1,7 @@ package flower.store; +import flower.store.flower.Flower; +import flower.store.flower.FlowerColor; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -7,16 +9,26 @@ import org.junit.jupiter.api.Assertions; +/** + * test for flowers + * @hidden + */ public class FlowerTest { private static final Random RANDOM_GENERATOR = new Random(); private static final int MAX_PRICE = 100; private Flower flower; + /** + * setup + */ @BeforeEach public void init() { flower = new Flower(); } + /** + * test price + */ @Test public void testPrice() { int price = RANDOM_GENERATOR.nextInt(MAX_PRICE); @@ -24,10 +36,13 @@ public void testPrice() { Assertions.assertEquals(price, flower.getPrice()); } + /** + * test color + */ @Test public void testColor() { FlowerColor color = FlowerColor.RED; flower.setColor(color); - Assertions.assertEquals("#FF0000", flower.getColor()); + Assertions.assertEquals("red", flower.getColor()); } }