From 5e968916961b7e81d3d8c7456f51cad28430c539 Mon Sep 17 00:00:00 2001 From: Nikita Iryupin Date: Fri, 25 Dec 2020 16:44:15 +0100 Subject: [PATCH] Start working on scenario, steps, iterator --- .../cvut/fel/sit/omo/foodchain/FoodChain.java | 2 +- .../fel/sit/omo/foodchain/node/NodeBase.java | 6 ++++ .../foodchain/parser/ConfigurationParser.java | 10 +++--- .../omo/foodchain/parser/ParserResult.java | 10 ++++-- .../foodchain/requirement/Requirement.java | 8 ++++- .../omo/foodchain/scenario/DoActionStep.java | 32 +++++++++++++++++++ .../scenario/GenerateProductStep.java | 4 +++ .../sit/omo/foodchain/scenario/Scenario.java | 22 +++++++++++++ .../omo/foodchain/scenario/ScenarioStep.java | 5 +++ .../scenario/SendRequirementStep.java | 24 ++++++++++++++ 10 files changed, 113 insertions(+), 10 deletions(-) create mode 100644 src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/DoActionStep.java create mode 100644 src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/GenerateProductStep.java create mode 100644 src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/ScenarioStep.java create mode 100644 src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/SendRequirementStep.java diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/FoodChain.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/FoodChain.java index 7da3e5d..d80104b 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/FoodChain.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/FoodChain.java @@ -4,7 +4,7 @@ import cz.cvut.fel.sit.omo.foodchain.factory.FactoryManager; public class FoodChain { - private static FactoryManager factoryManager; + private static FactoryManager factoryManager = new FactoryManager(); public static void main(String[] args) { diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/NodeBase.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/NodeBase.java index ede1db0..7f0c404 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/NodeBase.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/NodeBase.java @@ -68,6 +68,12 @@ public class NodeBase implements ChannelObserver { } + public void createRequirement(TransactionType tType, ProductType pType, String pName) { + Requirement req = new Requirement(this, tType, pType, pName); + subscribedChannels.stream() + .filter(ch -> ch.getProductType().equals(pType)) + .findAny().ifPresent(channel -> channel.addRequirement(req)); + } public void acceptRequirement(Requirement requirement) { diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ConfigurationParser.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ConfigurationParser.java index f1298fd..cdcfb44 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ConfigurationParser.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ConfigurationParser.java @@ -28,13 +28,13 @@ public class ConfigurationParser { NodeList elements = activeDocument.getElementsByTagName(tag); ParserResult resultList = new ParserResult(); for (int i = 0; i < elements.getLength(); i++) { - Node tmp_node = elements.item(i); + Node tmpNode = elements.item(i); ParserResultElement element = new ParserResultElement(); - for (int j = 0; j < tmp_node.getAttributes().getLength(); j++) { - element.addAttribute(tmp_node.getAttributes().item(i).getNodeName(), tmp_node.getAttributes().item(i).getTextContent()); + for (int j = 0; j < tmpNode.getAttributes().getLength(); j++) { + element.addAttribute(tmpNode.getAttributes().item(i).getNodeName(), tmpNode.getAttributes().item(i).getTextContent()); } - for (int j = 0; j < tmp_node.getChildNodes().getLength(); j++) { - element.addChild(tmp_node.getChildNodes().item(i).getNodeName(), tmp_node.getChildNodes().item(i).getTextContent()); + for (int j = 0; j < tmpNode.getChildNodes().getLength(); j++) { + element.addChild(tmpNode.getChildNodes().item(i).getNodeName(), tmpNode.getChildNodes().item(i).getTextContent()); } resultList.addElement(element); } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ParserResult.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ParserResult.java index 20e8ead..d048d64 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ParserResult.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ParserResult.java @@ -1,12 +1,11 @@ package cz.cvut.fel.sit.omo.foodchain.parser; -import org.w3c.dom.Element; - import java.util.LinkedList; +import java.util.List; public class ParserResult { - private LinkedList elements; + private final List elements; public ParserResult() { elements = new LinkedList<>(); @@ -15,4 +14,9 @@ public class ParserResult { public void addElement(ParserResultElement element) { elements.add(element); } + + public List getElements() { + return elements; + } + } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/requirement/Requirement.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/requirement/Requirement.java index b750380..0528bbc 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/requirement/Requirement.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/requirement/Requirement.java @@ -9,12 +9,14 @@ public class Requirement { private final NodeBase creator; private final TransactionType transactionType; private final ProductType productType; + private final String productName; private int TTL; - public Requirement(NodeBase creator, TransactionType transactionType, ProductType productType) { + public Requirement(NodeBase creator, TransactionType transactionType, ProductType productType, String productName) { this.creator = creator; this.transactionType = transactionType; this.productType = productType; + this.productName = productName; TTL = 2; } @@ -34,6 +36,10 @@ public class Requirement { return productType; } + public String getProductName() { + return productName; + } + public int getTTL() { return TTL; } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/DoActionStep.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/DoActionStep.java new file mode 100644 index 0000000..ad41b28 --- /dev/null +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/DoActionStep.java @@ -0,0 +1,32 @@ +package cz.cvut.fel.sit.omo.foodchain.scenario; + +import cz.cvut.fel.sit.omo.foodchain.node.NodeBase; +import cz.cvut.fel.sit.omo.foodchain.operation.ProductOperationType; +import cz.cvut.fel.sit.omo.foodchain.product.Product; + +public class DoActionStep extends ScenarioStep { + private final NodeBase nodeBase; + private final ProductOperationType productOperationType; + private final Product product; + + public DoActionStep(NodeBase node, ProductOperationType productOperationType, Product product){ + this.nodeBase = node; + this.productOperationType = productOperationType; + this.product = product; + } + + public DoActionStep(NodeBase node, ProductOperationType productOperationType){ + this(node, productOperationType, null); + } + + + @Override + void execute() { + if (product != null){ + nodeBase.doAction(productOperationType, product); + } + else { + nodeBase.doAction(productOperationType); + } + } +} diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/GenerateProductStep.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/GenerateProductStep.java new file mode 100644 index 0000000..ab6f1e0 --- /dev/null +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/GenerateProductStep.java @@ -0,0 +1,4 @@ +package cz.cvut.fel.sit.omo.foodchain.scenario; + +public class GenerateProductStep { +} diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/Scenario.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/Scenario.java index ddbb4a9..6c4137b 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/Scenario.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/Scenario.java @@ -1,4 +1,26 @@ package cz.cvut.fel.sit.omo.foodchain.scenario; +import java.util.Iterator; +import java.util.List; + public class Scenario { + List steps; + Iterator stepIterator; + + public Scenario() { + //steps = //TODO init + stepIterator = steps.listIterator(0); + } + + public Scenario(List steps) { + this.steps = steps; + stepIterator = steps.listIterator(0); + } + + void execute() { + if (!stepIterator.hasNext()) { + stepIterator = steps.listIterator(0); + } + stepIterator.next().execute(); + } } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/ScenarioStep.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/ScenarioStep.java new file mode 100644 index 0000000..d1050e4 --- /dev/null +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/ScenarioStep.java @@ -0,0 +1,5 @@ +package cz.cvut.fel.sit.omo.foodchain.scenario; + +public abstract class ScenarioStep { + abstract void execute(); +} diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/SendRequirementStep.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/SendRequirementStep.java new file mode 100644 index 0000000..cd5eb5c --- /dev/null +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/SendRequirementStep.java @@ -0,0 +1,24 @@ +package cz.cvut.fel.sit.omo.foodchain.scenario; + +import cz.cvut.fel.sit.omo.foodchain.node.NodeBase; +import cz.cvut.fel.sit.omo.foodchain.operation.TransactionType; +import cz.cvut.fel.sit.omo.foodchain.product.ProductType; + +public class SendRequirementStep extends ScenarioStep { + private final NodeBase node; + private final TransactionType tType; + private final ProductType pType; + private final String pName; + + public SendRequirementStep(NodeBase node, TransactionType tType, ProductType pType, String pName) { + this.node = node; + this.tType = tType; + this.pType = pType; + this.pName = pName; + } + + @Override + void execute() { + node.createRequirement(tType, pType, pName); + } +}