From 71ef11f7e229344a4aaa3dfaddb9a53003888ef2 Mon Sep 17 00:00:00 2001 From: Daniel Poustka Date: Fri, 25 Dec 2020 17:21:42 +0100 Subject: [PATCH] Added NodeFactory --- .../omo/foodchain/factory/ChannelFactory.java | 18 ++--- .../omo/foodchain/factory/NodeFactory.java | 74 ++++++++++++++++++- .../foodchain/factory/ScenarioFactory.java | 22 ++++++ 3 files changed, 102 insertions(+), 12 deletions(-) diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ChannelFactory.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ChannelFactory.java index b878d65..6e456bb 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ChannelFactory.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ChannelFactory.java @@ -3,14 +3,10 @@ package cz.cvut.fel.sit.omo.foodchain.factory; import cz.cvut.fel.sit.omo.foodchain.channel.*; import cz.cvut.fel.sit.omo.foodchain.parser.ParserResultElement; +import cz.cvut.fel.sit.omo.foodchain.product.ProductType; public class ChannelFactory { - private enum ChannelType - { - Fruit, Vegetable, Meat, Other; - } - /** * Creates channel based on channel type (Fruit, Vegetable, Meat, Other) * @param input data from channel is created @@ -21,7 +17,7 @@ public class ChannelFactory ChannelBase c = null; try { - ChannelType channelType = ChannelType.valueOf(input.getAttribute("channel_type")); + ProductType channelType = ProductType.valueOf(input.getAttribute("channel_type")); c = makeChannelFromChannelType(channelType); } @@ -36,17 +32,17 @@ public class ChannelFactory return c; } - private ChannelBase makeChannelFromChannelType(ChannelType typeOfChannel) + private ChannelBase makeChannelFromChannelType(ProductType typeOfChannel) { switch (typeOfChannel) { - case Fruit: + case FRUIT: return new FruitChannel(); - case Vegetable: + case VEGETABLE: return new VegetableChannel(); - case Meat: + case MEAT: return new MeatChannel(); - case Other: + case OTHER: return new OtherChannel(); } return null; diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/NodeFactory.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/NodeFactory.java index b02fade..c318975 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/NodeFactory.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/NodeFactory.java @@ -1,6 +1,78 @@ package cz.cvut.fel.sit.omo.foodchain.factory; +import cz.cvut.fel.sit.omo.foodchain.FoodChain; +import cz.cvut.fel.sit.omo.foodchain.node.*; +import cz.cvut.fel.sit.omo.foodchain.parser.ParserResultElement; +import cz.cvut.fel.sit.omo.foodchain.pool.ChannelPool; + +import javax.money.Monetary; +import javax.money.MonetaryAmount; +import java.util.Objects; + public class NodeFactory { - //make + + private enum NodeType + { + Farmer, Processor, Distributor, Seller, Customer; + } + + /** + * Creates Node based on input ParserResultElement + * @param input data from Node is created + * @return created Node + */ + public NodeBase makeNode(ParserResultElement input) + { + NodeBase n = null; + NodeType nodeType = null; + String subsChannels = ""; + MonetaryAmount startMoney = null; + try + { + nodeType = NodeType.valueOf(input.getAttribute("node_type")); + subsChannels = input.getAttribute("subscribed_channels"); + double money = Double.parseDouble(input.getAttribute("money")); + startMoney = Monetary.getDefaultAmountFactory().setCurrency("USD").setNumber(money).create(); + + } + catch (IllegalArgumentException e) + { + System.err.println("! Wrong type of enum in NodeFactory: " + e); + } + catch (Exception e) + { + System.err.println("! Fatal error in NodeFactory: " + e); + } + + switch (Objects.requireNonNull(nodeType)) + { + case Farmer: + n = new Farmer(); + break; + case Processor: + n = new Processor(); + break; + case Distributor: + n = new Distributor(); + break; + case Seller: + n = new Seller(); + break; + case Customer: + n = new Customer(); + break; + } + + String[] subs = subsChannels.split(";"); + //todo Node subscription to channels by parser data + + for (String s : subs) + { + ChannelPool temp = FoodChain.getFactoryManager().getPoolDatabaseInstance().getChannelPoolInstance(); + n.subscribeToChannel(temp.findByName(s)); + } + + return n; + } } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ScenarioFactory.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ScenarioFactory.java index c92ad3f..7dcb2a1 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ScenarioFactory.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ScenarioFactory.java @@ -1,5 +1,27 @@ package cz.cvut.fel.sit.omo.foodchain.factory; +import cz.cvut.fel.sit.omo.foodchain.FoodChain; +import cz.cvut.fel.sit.omo.foodchain.node.*; +import cz.cvut.fel.sit.omo.foodchain.parser.ParserResultElement; +import cz.cvut.fel.sit.omo.foodchain.pool.ChannelPool; +import cz.cvut.fel.sit.omo.foodchain.scenario.Scenario; + +import javax.money.Monetary; +import javax.money.MonetaryAmount; +import java.util.Objects; + public class ScenarioFactory { + /** + * Creates Scenario based on input ParserResultElement + * @param input data from Scenario is created + * @return created Scenario + */ + public Scenario makeScenario(ParserResultElement input) + { + Scenario s = null; + + + return s; + } }