diff --git a/build.gradle b/build.gradle index e9a013a..a18f0e2 100644 --- a/build.gradle +++ b/build.gradle @@ -10,8 +10,11 @@ repositories { } dependencies { + implementation 'org.projectlombok:lombok:1.18.28' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.2' + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' } test { diff --git a/src/main/java/task_2/NotEnoughMaterialException.java b/src/main/java/task_2/NotEnoughMaterialException.java new file mode 100644 index 0000000..fca2bd1 --- /dev/null +++ b/src/main/java/task_2/NotEnoughMaterialException.java @@ -0,0 +1,7 @@ +package task_2; + +public class NotEnoughMaterialException extends RuntimeException{ + public NotEnoughMaterialException(String message) { + super(message); + } +} diff --git a/src/main/java/task_2/NotEnoughWoodException.java b/src/main/java/task_2/NotEnoughWoodException.java new file mode 100644 index 0000000..38021bd --- /dev/null +++ b/src/main/java/task_2/NotEnoughWoodException.java @@ -0,0 +1,7 @@ +package task_2; + +public class NotEnoughWoodException extends RuntimeException{ + public NotEnoughWoodException(String message) { + super(message); + } +} diff --git a/src/main/java/task_2/OlivandersShop.java b/src/main/java/task_2/OlivandersShop.java new file mode 100644 index 0000000..341a0a5 --- /dev/null +++ b/src/main/java/task_2/OlivandersShop.java @@ -0,0 +1,70 @@ +package task_2; + +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Slf4j +public class OlivandersShop { + private List orders = new ArrayList<>(); + private Map woodTypeCount; + private Map coreMaterialCount; + + public static void main(String[] args) { + Map woodTypeCount = new HashMap<>(); + woodTypeCount.put("Дуб", 10); + woodTypeCount.put("Липа", 15); + woodTypeCount.put("Береза", 13); + Map coreMaterialCount = new HashMap<>(); + coreMaterialCount.put("Перо", 15); + coreMaterialCount.put("ЧтоТо", 15); + coreMaterialCount.put("ЧтоТоЕще", 15); + OlivandersShop olivandersShop = new OlivandersShop(woodTypeCount, coreMaterialCount); + WandOrder order = new WandOrder("Ivan", new Wand("Дуб", 10, "Перо", 10), 5); + olivandersShop.placeOrder(order); + try { + System.out.println(olivandersShop.findMostPowerfulWand()); + } catch (OrdersListIsEmptyException e) { + log.info(e.getStackTrace()); + } + } + + public OlivandersShop(Map woodTypeCount, Map coreMaterialCount) { + this.woodTypeCount = woodTypeCount; + this.coreMaterialCount = coreMaterialCount; + } + + public void placeOrder(WandOrder order) throws NotEnoughWoodException { + String woodType = order.getWand().getWoodType(); + Integer woodTypeCnt = woodTypeCount.get(woodType); + checkQuantity(order, woodTypeCnt, woodType); + String coreMaterial = order.getWand().getCoreMaterial(); + Integer coreMaterialCnt = coreMaterialCount.get(coreMaterial); + checkQuantity(order, coreMaterialCnt, coreMaterial); + woodTypeCount.put(woodType, woodTypeCnt - order.getQuantity()); + coreMaterialCount.put(coreMaterial, coreMaterialCnt - order.getQuantity()); + orders.add(order); + } + + private void checkQuantity(WandOrder order, Integer typeCnt, String type) { + if (typeCnt == null || typeCnt < order.getQuantity()) { + throw new NotEnoughWoodException(type); + } + } + + public Wand findMostPowerfulWand() throws OrdersListIsEmptyException { + if (orders.isEmpty()) { + throw new OrdersListIsEmptyException("Список заказов пуст"); + } + WandOrder maxQualityWand = new WandOrder(); + for (WandOrder order : orders) { + if (order.getQuantity() > maxQualityWand.getQuantity()) { + maxQualityWand = order; + } + } + return maxQualityWand.getWand(); + } +} diff --git a/src/main/java/task_2/OrdersListIsEmptyException.java b/src/main/java/task_2/OrdersListIsEmptyException.java new file mode 100644 index 0000000..fb31c1c --- /dev/null +++ b/src/main/java/task_2/OrdersListIsEmptyException.java @@ -0,0 +1,7 @@ +package task_2; + +public class OrdersListIsEmptyException extends Exception{ + public OrdersListIsEmptyException(String message) { + super(message); + } +} diff --git a/src/main/java/task_2/Wand.java b/src/main/java/task_2/Wand.java new file mode 100644 index 0000000..fadef21 --- /dev/null +++ b/src/main/java/task_2/Wand.java @@ -0,0 +1,71 @@ +package task_2; + +public class Wand { + private String woodType; + private int length; + private String coreMaterial; + private int powerLevel; + + public Wand(String woodType, int length, String coreMaterial, int powerLevel) { + setWoodType(woodType); + setLength(length); + setCoreMaterial(coreMaterial); + setPowerLevel(powerLevel); + } + + @Override + public String toString() { + return "Wand{" + + "woodType='" + woodType + '\'' + + ", length=" + length + + ", coreMaterial='" + coreMaterial + '\'' + + ", powerLevel=" + powerLevel + + '}'; + } + + public String getWoodType() { + return woodType; + } + + public void setWoodType(String woodType) { + if (woodType.isBlank()) { + throw new IllegalArgumentException("wood type not be empty"); + } + this.woodType = woodType; + } + + public int getLength() { + return length; + } + + public void setLength(int length) { + if (length <= 0) { + throw new IllegalArgumentException("wand length must be ,ore than 0"); + } + this.length = length; + } + + public String getCoreMaterial() { + return coreMaterial; + } + + public void setCoreMaterial(String coreMaterial) { + if (woodType.isBlank()) { + throw new IllegalArgumentException("core material type not be empty"); + } + this.coreMaterial = coreMaterial; + } + + public int getPowerLevel() { + return powerLevel; + } + + public void setPowerLevel(int powerLevel) { + if (length <= 0) { + throw new IllegalArgumentException("wand power must be ,ore than 0"); + } + this.powerLevel = powerLevel; + } + + +} diff --git a/src/main/java/task_2/WandOrder.java b/src/main/java/task_2/WandOrder.java new file mode 100644 index 0000000..a7e0d87 --- /dev/null +++ b/src/main/java/task_2/WandOrder.java @@ -0,0 +1,46 @@ +package task_2; + +public class WandOrder { + private String customerName; + private Wand wand; + private int quantity; + + public WandOrder() { + } + + public WandOrder(String customerName, Wand wand, int quantity) { + setCustomerName(customerName); + setWand(wand); + setQuantity(quantity); + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + if (customerName.isBlank()) { + throw new IllegalArgumentException("Name customer must be not empty"); + } + this.customerName = customerName; + } + + public Wand getWand() { + return wand; + } + + public void setWand(Wand wand) { + this.wand = wand; + } + + public int getQuantity() { + return quantity; + } + + public void setQuantity(int quantity) { + if (quantity <= 0) { + throw new IllegalArgumentException("Count must be more than 0"); + } + this.quantity = quantity; + } +}