Implemented ScenarioFactory
This commit is contained in:
parent
e58392f5be
commit
21f5d14406
@ -9,15 +9,15 @@
|
||||
<scenarios>
|
||||
<scenario type="Farmer">
|
||||
<steps>
|
||||
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
|
||||
</steps>
|
||||
</scenario>
|
||||
</scenarios>
|
||||
@ -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()
|
||||
|
||||
@ -12,7 +12,7 @@ import java.util.Objects;
|
||||
public class NodeFactory
|
||||
{
|
||||
|
||||
private enum NodeType
|
||||
enum NodeType
|
||||
{
|
||||
Farmer, Processor, Distributor, Seller, Customer;
|
||||
}
|
||||
|
||||
@ -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"));
|
||||
|
||||
@ -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<ScenarioStep> 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;
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -23,4 +23,8 @@ public class Scenario {
|
||||
}
|
||||
stepIterator.next().execute();
|
||||
}
|
||||
|
||||
public List<ScenarioStep> getSteps() {
|
||||
return steps;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user