diff --git a/conf/scenarios.xml b/conf/scenarios.xml
index 512516b..b5434a5 100644
--- a/conf/scenarios.xml
+++ b/conf/scenarios.xml
@@ -9,15 +9,15 @@
- generate jablko
- generate hovězí
- generate hruška
- generate rajče
- generate paprika
- generate kuřecí
- generate vepřové
- generate banán
- generate okurka
+ generate
+ generate
+ generate
+ generate
+ generate
+ generate
+ generate
+ generate
+ generate
\ No newline at end of file
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 35e2baf..c59dd82 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
@@ -8,6 +8,7 @@ import cz.cvut.fel.sit.omo.foodchain.parser.ParserResult;
import cz.cvut.fel.sit.omo.foodchain.parser.ParserResultElement;
import cz.cvut.fel.sit.omo.foodchain.product.Product;
import cz.cvut.fel.sit.omo.foodchain.scenario.Scenario;
+import cz.cvut.fel.sit.omo.foodchain.util.Ticker;
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
@@ -26,8 +27,12 @@ public class FoodChain
parseProducts();
parseScenarios();
+ Ticker.start();
+
getFactoryManager().getPoolDatabaseInstance().getChannelPoolInstance().findAll().stream().forEach(ch -> System.out.println(ch.getProductType()));
getFactoryManager().getPoolDatabaseInstance().getNodePoolInstance().findAll().stream().forEach(ch -> System.out.println(ch));
+ getFactoryManager().getPoolDatabaseInstance().getProductPoolInstance().findAll().stream().forEach(ch -> System.out.println(ch.getProductType() + " " + ch.getName()));
+ getFactoryManager().getPoolDatabaseInstance().getScenarioPoolInstance().findAll().stream().forEach(ch -> ch.getSteps().stream().forEach(s -> System.out.println(s)));
}
public static FactoryManager getFactoryManager()
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 9940b75..281ecee 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
@@ -12,7 +12,7 @@ import java.util.Objects;
public class NodeFactory
{
- private enum NodeType
+ enum NodeType
{
Farmer, Processor, Distributor, Seller, Customer;
}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ProductFactory.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ProductFactory.java
index 5d12278..bea7941 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ProductFactory.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ProductFactory.java
@@ -18,7 +18,7 @@ public class ProductFactory
Product p = null;
try
{
- String name = input.getAttribute("name");
+ String name = input.getChild("name");
ProductType productType = ProductType.valueOf(input.getChild("type"));
//ProductState productState = ProductState.valueOf(input.getChild("state"));
double price = Double.parseDouble(input.getChild("price"));
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 84f2c1b..a519bc7 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
@@ -2,16 +2,24 @@ 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.operation.ProductOperationType;
+import cz.cvut.fel.sit.omo.foodchain.operation.TransactionType;
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 cz.cvut.fel.sit.omo.foodchain.product.Product;
+import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
+import cz.cvut.fel.sit.omo.foodchain.scenario.*;
import javax.money.Monetary;
import javax.money.MonetaryAmount;
+import java.util.Arrays;
+import java.util.List;
+import java.util.LinkedList;
import java.util.Objects;
public class ScenarioFactory
{
+
/**
* Creates Scenario based on input ParserResultElement
* @param input data from Scenario is created
@@ -20,6 +28,52 @@ public class ScenarioFactory
public Scenario makeScenario(ParserResultElement input)
{
Scenario s = null;
+ NodeBase node = null;
+
+ try
+ {
+ String nodeType = input.getAttribute("type");
+ node = FoodChain.getFactoryManager().getPoolDatabaseInstance().getNodePoolInstance().findAll().stream()
+ .filter(ch -> ch.getClass().getSimpleName().equals(nodeType)).findFirst().orElse(null);
+
+ String[] steps = Arrays.stream(input.getChild("steps").split("\n")).filter(st -> !st.strip().equals("")).toArray(String[]::new);
+ List scenarioSteps = new LinkedList<>();
+ ScenarioStep scenarioStep = null;
+ for (String step : steps) {
+ String[] parts = step.strip().split(" ");
+ switch (parts[0]) {
+ case "generate":
+ scenarioStep = new GenerateProductStep((Farmer) node);
+ break;
+ case "consume":
+ scenarioStep = new ConsumeProductStep((Customer) node);
+ break;
+ case "doaction":
+ if (parts.length == 2) {
+ scenarioStep = new DoActionStep(node, ProductOperationType.valueOf(parts[1]));
+ }
+ else {
+ Product p = FoodChain.getFactoryManager().getPoolDatabaseInstance().getProductPoolInstance().findAll().stream()
+ .filter(pr -> pr.getName().equals(parts[2])).findFirst().orElse(null);
+ scenarioStep = new DoActionStep(node, ProductOperationType.valueOf(parts[1]), p);
+ }
+ break;
+ case "sendreq":
+ scenarioStep = new SendRequirementStep(node, TransactionType.valueOf(parts[1]), ProductType.valueOf(parts[2]), parts[3]);
+ break;
+ }
+ scenarioSteps.add(scenarioStep);
+ }
+ s = new Scenario(scenarioSteps);
+ }
+ catch (IllegalArgumentException e)
+ {
+ System.err.println("! Wrong type of enum in ProductFactory: " + e);
+ }
+ catch (Exception e)
+ {
+ System.err.println("! Fatal error in ProductFactory: " + e);
+ }
return s;
}
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
index f5e595b..92b0655 100644
--- 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
@@ -9,12 +9,18 @@ public class GenerateProductStep extends ScenarioStep {
private final Farmer node;
private final Product product;
+ private static int counter = 0;
public GenerateProductStep(Farmer node) {
this.node = node;
- product = FoodChain.getFactoryManager().getPoolDatabaseInstance().getProductPoolInstance().findAll()
- .stream().findFirst().orElse(null);
- FoodChain.getFactoryManager().getPoolDatabaseInstance().getProductPoolInstance().remove(product);
+ if (counter < FoodChain.getFactoryManager().getPoolDatabaseInstance().getProductPoolInstance().findAll().size()) {
+ product = FoodChain.getFactoryManager().getPoolDatabaseInstance().getProductPoolInstance().findAll().get(counter);
+ counter++;
+ }
+ else {
+ product = null;
+ System.err.println("Insufficient products in pool");
+ }
}
@Override
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 6c4137b..a521257 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
@@ -23,4 +23,8 @@ public class Scenario {
}
stepIterator.next().execute();
}
+
+ public List getSteps() {
+ return steps;
+ }
}