diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/BuyerNodeBase.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/BuyerNodeBase.java index 91caca6..70d5d56 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/BuyerNodeBase.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/BuyerNodeBase.java @@ -3,13 +3,9 @@ package cz.cvut.fel.sit.omo.foodchain.node; import cz.cvut.fel.sit.omo.foodchain.product.Product; public class BuyerNodeBase extends NodeBase implements IBuyerNode { - @Override - public void sellProduct(Product product) { - - } @Override - public void addMargin(Product product) { + public void buyProduct(Product product) { } } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Customer.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Customer.java index 8d66686..33bbb85 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Customer.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Customer.java @@ -1,4 +1,11 @@ package cz.cvut.fel.sit.omo.foodchain.node; +import java.util.Random; + public class Customer extends BuyerNodeBase { + + public void consumeProduct() { + int i = new Random().nextInt(getStorage().size()); + getStorage().remove(i); + } } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Farmer.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Farmer.java index fd34065..44064a4 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Farmer.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Farmer.java @@ -1,4 +1,12 @@ package cz.cvut.fel.sit.omo.foodchain.node; +import cz.cvut.fel.sit.omo.foodchain.operation.TransactionType; +import cz.cvut.fel.sit.omo.foodchain.product.Product; + public class Farmer extends SellerNodeBase { + + public void generateProduct(Product product) { + storeProduct(product); + createRequirement(TransactionType.SALE, product.getProductType(), product.getName()); + } } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/IBuyerNode.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/IBuyerNode.java index cc8f592..48a1176 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/IBuyerNode.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/IBuyerNode.java @@ -4,7 +4,5 @@ import cz.cvut.fel.sit.omo.foodchain.product.Product; public interface IBuyerNode { - void sellProduct(Product product); - - void addMargin(Product product); + void buyProduct(Product product); } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/ISellerNode.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/ISellerNode.java index 1f0c21e..a63b91e 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/ISellerNode.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/ISellerNode.java @@ -4,5 +4,7 @@ import cz.cvut.fel.sit.omo.foodchain.product.Product; public interface ISellerNode { - void buyProduct(Product product); + void sellProduct(Product product); + + void addMargin(Product product); } 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 7f0c404..ab579a9 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 @@ -91,7 +91,7 @@ public class NodeBase implements ChannelObserver { public void doAction(ProductOperationType action, Product product) { - Action actionProcess = new Action(this, product); + Action actionProcess = new Action(this, product, action); } @@ -114,6 +114,9 @@ public class NodeBase implements ChannelObserver { return products.stream().filter(ch -> ch.getProductType() == type && ch.getName().equals(name)).findFirst().orElse(null); } + public List getStorage() { + return products; + } public Signature generateSignature(Transaction transaction) { return SignatureManager.signTransaction(transaction); diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/SellerNodeBase.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/SellerNodeBase.java index 59abda2..9a8c8d9 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/SellerNodeBase.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/SellerNodeBase.java @@ -4,7 +4,12 @@ import cz.cvut.fel.sit.omo.foodchain.product.Product; public class SellerNodeBase extends NodeBase implements ISellerNode { @Override - public void buyProduct(Product product) { + public void sellProduct(Product product) { + + } + + @Override + public void addMargin(Product product) { } } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/Action.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/Action.java index 97d989b..61ad99c 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/Action.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/Action.java @@ -10,7 +10,7 @@ public class Action extends OperationBase { private final ProductOperationType type; private int duration; - Action(NodeBase node, Product product, ProductOperationType type) { + public Action(NodeBase node, Product product, ProductOperationType type) { super(node); this.product = product; this.type = type; diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/pool/ChannelPool.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/pool/ChannelPool.java index a32086e..2595ef7 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/pool/ChannelPool.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/pool/ChannelPool.java @@ -1,6 +1,11 @@ package cz.cvut.fel.sit.omo.foodchain.pool; import cz.cvut.fel.sit.omo.foodchain.channel.ChannelBase; +import cz.cvut.fel.sit.omo.foodchain.product.ProductType; public class ChannelPool extends PoolListBase { + + public ChannelBase findByType(ProductType type) { + return findAll().stream().filter(ch -> ch.getProductType().equals(type)).findFirst().orElse(null); + } } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/pool/PoolListBase.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/pool/PoolListBase.java index 1448b1c..4ec242b 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/pool/PoolListBase.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/pool/PoolListBase.java @@ -1,6 +1,5 @@ package cz.cvut.fel.sit.omo.foodchain.pool; -import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -11,7 +10,7 @@ public abstract class PoolListBase { pool = new LinkedList(); } - public Collection findAll() { + public List findAll() { return pool; } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/ConsumeProductStep.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/ConsumeProductStep.java new file mode 100644 index 0000000..ab8161f --- /dev/null +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/ConsumeProductStep.java @@ -0,0 +1,17 @@ +package cz.cvut.fel.sit.omo.foodchain.scenario; + +import cz.cvut.fel.sit.omo.foodchain.node.Customer; + +public class ConsumeProductStep extends ScenarioStep { + + private Customer node; + + public ConsumeProductStep(Customer node) { + this.node = node; + } + + @Override + void execute() { + node.consumeProduct(); + } +} 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 ab6f1e0..8db7187 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 @@ -1,4 +1,24 @@ package cz.cvut.fel.sit.omo.foodchain.scenario; -public class GenerateProductStep { +import cz.cvut.fel.sit.omo.foodchain.FoodChain; +import cz.cvut.fel.sit.omo.foodchain.node.Farmer; +import cz.cvut.fel.sit.omo.foodchain.node.NodeBase; +import cz.cvut.fel.sit.omo.foodchain.product.Product; + +public class GenerateProductStep extends ScenarioStep { + + private Farmer node; + private Product product; + + public GenerateProductStep(Farmer node) { + this.node = node; + product = FoodChain.getFactoryManager().getPoolDatabaseInstance().getProductPoolInstance().findAll() + .stream().findFirst().orElse(null); + FoodChain.getFactoryManager().getPoolDatabaseInstance().getProductPoolInstance().remove(product); + } + + @Override + void execute() { + node.generateProduct(product); + } }